@rxap/layout 16.0.0-dev.9 → 16.0.1-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +261 -0
- package/LICENSE +621 -0
- package/LICENSE.md +621 -0
- package/README.md +1 -1
- package/esm2022/index.mjs +1 -4
- package/esm2022/lib/app-url.service.mjs +38 -25
- package/esm2022/lib/footer/footer.component.mjs +3 -3
- package/esm2022/lib/header/apps-button/apps-button.component.mjs +3 -5
- package/esm2022/lib/header/header.component.mjs +30 -47
- package/esm2022/lib/header/language-selector/language-selector.component.mjs +6 -6
- package/esm2022/lib/header/reset-button/reset-button.component.mjs +3 -3
- package/esm2022/lib/header/settings-button/settings-button.component.mjs +87 -0
- package/esm2022/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.mjs +15 -18
- package/esm2022/lib/header/sign-out/sign-out.component.mjs +3 -3
- package/esm2022/lib/header/user-profile-icon/user-profile-icon.component.mjs +24 -21
- package/esm2022/lib/layout/layout.component.mjs +50 -29
- package/esm2022/lib/layout/layout.component.service.mjs +53 -19
- package/esm2022/lib/navigation/navigation-item/navigation-item.component.mjs +3 -8
- package/esm2022/lib/navigation/navigation.component.mjs +6 -10
- package/esm2022/lib/sidenav/sidenav.component.mjs +6 -12
- package/esm2022/lib/sidenav/version/version.component.mjs +6 -14
- package/esm2022/lib/toggle-window-sidenav-button/toggle-window-sidenav-button.component.mjs +3 -3
- package/esm2022/lib/window-container-sidenav/window-container-sidenav.component.mjs +6 -8
- package/fesm2022/rxap-layout.mjs +364 -343
- package/fesm2022/rxap-layout.mjs.map +1 -1
- package/index.d.ts +0 -3
- package/lib/app-url.service.d.ts +7 -4
- package/lib/header/header.component.d.ts +10 -17
- package/lib/header/language-selector/language-selector.component.d.ts +1 -1
- package/lib/header/settings-button/settings-button.component.d.ts +39 -0
- package/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.d.ts +6 -3
- package/lib/header/user-profile-icon/user-profile-icon.component.d.ts +10 -10
- package/lib/layout/layout.component.d.ts +17 -5
- package/lib/layout/layout.component.service.d.ts +15 -9
- package/lib/navigation/navigation-item/navigation-item.component.d.ts +1 -1
- package/lib/navigation/navigation.component.d.ts +1 -1
- package/package.json +83 -47
- package/theme.css +1 -1
- package/esm2022/lib/i18n-check.guard.mjs +0 -34
- package/esm2022/lib/i18n.service.mjs +0 -36
- package/esm2022/lib/language-selector.service.mjs +0 -34
- package/lib/i18n-check.guard.d.ts +0 -14
- package/lib/i18n.service.d.ts +0 -12
- package/lib/language-selector.service.d.ts +0 -15
package/fesm2022/rxap-layout.mjs
CHANGED
|
@@ -1,55 +1,61 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Component, ChangeDetectionStrategy,
|
|
2
|
+
import { InjectionToken, Component, ChangeDetectionStrategy, signal, computed, effect, Injectable, Optional, Inject, LOCALE_ID, isDevMode, Input, ElementRef, Renderer2, ViewContainerRef, ViewEncapsulation, forwardRef, ViewChild, HostBinding, INJECTOR, ChangeDetectorRef, inject, TemplateRef, Directive, ContentChild, EventEmitter, Output } from '@angular/core';
|
|
3
3
|
import * as i1 from '@rxap/services';
|
|
4
4
|
import { HeaderService, ResetService, VersionService, WindowContainerSidenavService, FooterService } from '@rxap/services';
|
|
5
5
|
import * as i3 from '@angular/cdk/portal';
|
|
6
6
|
import { PortalModule, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
|
|
7
7
|
import * as i2 from '@angular/material/toolbar';
|
|
8
8
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import { filter, map, switchMap, tap, startWith, catchError } from 'rxjs/operators';
|
|
12
|
-
import * as i2$4 from '@angular/material/sidenav';
|
|
13
|
-
import { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';
|
|
14
|
-
import * as i4 from '@angular/material/core';
|
|
15
|
-
import { MatOptionModule, MatRippleModule } from '@angular/material/core';
|
|
16
|
-
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
17
|
-
import { DataSourceCollectionDirective } from '@rxap/data-source/directive';
|
|
9
|
+
import * as i4$2 from '@angular/common';
|
|
10
|
+
import { NgIf, NgFor, AsyncPipe, NgOptimizedImage, KeyValuePipe, CommonModule, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
|
|
18
11
|
import * as i5 from '@angular/forms';
|
|
19
12
|
import { FormsModule } from '@angular/forms';
|
|
20
|
-
import * as i3$1 from '@angular/material/
|
|
21
|
-
import {
|
|
22
|
-
import
|
|
23
|
-
import
|
|
13
|
+
import * as i3$1 from '@angular/material/button';
|
|
14
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
15
|
+
import * as i4$1 from '@angular/material/core';
|
|
16
|
+
import { MatOptionModule, MatRippleModule } from '@angular/material/core';
|
|
17
|
+
import * as i2$5 from '@angular/material/form-field';
|
|
24
18
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
25
|
-
import * as
|
|
26
|
-
import { ConfigService } from '@rxap/config';
|
|
27
|
-
import * as i1$1 from '@rxap/authentication';
|
|
28
|
-
import * as i2$3 from '@angular/material/icon';
|
|
19
|
+
import * as i4 from '@angular/material/icon';
|
|
29
20
|
import { MatIconModule } from '@angular/material/icon';
|
|
30
|
-
import * as
|
|
21
|
+
import * as i7 from '@angular/material/menu';
|
|
31
22
|
import { MatMenuModule } from '@angular/material/menu';
|
|
32
|
-
import * as i3$
|
|
33
|
-
import {
|
|
34
|
-
import
|
|
23
|
+
import * as i3$2 from '@angular/material/select';
|
|
24
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
25
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
26
|
+
import { DataSourceCollectionDirective } from '@rxap/data-source/directive';
|
|
27
|
+
import { StopPropagationDirective } from '@rxap/directives';
|
|
28
|
+
import * as i2$1 from '@angular/cdk/layout';
|
|
29
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
30
|
+
import * as i1$1 from '@rxap/config';
|
|
31
|
+
import { ConfigService } from '@rxap/config';
|
|
32
|
+
import * as i1$4 from '@rxap/ngx-theme';
|
|
33
|
+
import { ObserveCurrentThemeDensity, ThemeService } from '@rxap/ngx-theme';
|
|
34
|
+
import * as i2$2 from '@rxap/authorization';
|
|
35
|
+
import { ClickOnLink } from '@rxap/browser-utilities';
|
|
36
|
+
import { RXAP_ENVIRONMENT, DetermineReleaseName } from '@rxap/environment';
|
|
37
|
+
import { JoinPath, coerceBoolean } from '@rxap/utilities';
|
|
38
|
+
import { firstValueFrom, switchMap, filter as filter$1, skip, distinctUntilChanged, BehaviorSubject, Subscription, debounceTime, ReplaySubject, of, from, combineLatest } from 'rxjs';
|
|
39
|
+
import * as i2$3 from '@rxap/authentication';
|
|
40
|
+
import { filter, tap, map, switchMap as switchMap$1, startWith, catchError } from 'rxjs/operators';
|
|
41
|
+
import * as i2$4 from '@angular/router';
|
|
35
42
|
import { NavigationStart, NavigationEnd, NavigationCancel, Router, RouterLinkActive, RouterLink, RouterOutlet } from '@angular/router';
|
|
36
|
-
import * as i1$
|
|
43
|
+
import * as i1$2 from '@angular/material/progress-bar';
|
|
37
44
|
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
38
|
-
import * as
|
|
39
|
-
import
|
|
40
|
-
import
|
|
41
|
-
import {
|
|
42
|
-
import
|
|
43
|
-
import {
|
|
44
|
-
import
|
|
45
|
+
import * as i3$3 from '@rxap/ngx-changelog';
|
|
46
|
+
import * as i1$3 from '@rxap/ngx-localize';
|
|
47
|
+
import * as i1$5 from '@rxap/ngx-user';
|
|
48
|
+
import { UserSettingsThemeService, IsThemeDensity, ThemeDensity } from '@rxap/ngx-user';
|
|
49
|
+
import * as i3$5 from '@angular/material/sidenav';
|
|
50
|
+
import { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';
|
|
51
|
+
import * as i2$6 from '@rxap/icon';
|
|
52
|
+
import { StatusIndicatorComponent } from '@rxap/ngx-status-check';
|
|
53
|
+
import * as i3$4 from '@angular/material/divider';
|
|
54
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
45
55
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
46
56
|
import * as i6 from '@angular/cdk/overlay';
|
|
47
57
|
import { Overlay } from '@angular/cdk/overlay';
|
|
48
|
-
import * as i3$4 from '@angular/material/divider';
|
|
49
|
-
import { MatDividerModule } from '@angular/material/divider';
|
|
50
58
|
import { IconDirective } from '@rxap/material-directives/icon';
|
|
51
|
-
import * as i2$5 from '@angular/flex-layout/extended';
|
|
52
|
-
import { ExtendedModule } from '@angular/flex-layout/extended';
|
|
53
59
|
|
|
54
60
|
const RXAP_NAVIGATION_CONFIG = new InjectionToken('rxap/layout/navigation-config');
|
|
55
61
|
const RXAP_NAVIGATION_CONFIG_INSERTS = new InjectionToken('rxap/layout/navigation-config-inserts');
|
|
@@ -63,163 +69,104 @@ class FooterComponent {
|
|
|
63
69
|
this.footerService = footerService;
|
|
64
70
|
}
|
|
65
71
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: FooterComponent, deps: [{ token: i1.FooterService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
66
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: FooterComponent, isStandalone: true, selector: "rxap-footer", ngImport: i0, template: "<ng-template [ngIf]=\"footerService.portals
|
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: FooterComponent, isStandalone: true, selector: "rxap-footer", ngImport: i0, template: "<ng-template [ngIf]=\"footerService.portals()\" let-portals>\n <mat-toolbar *ngIf=\"portals.length\" class=\"footer mat-elevation-z1\">\n <mat-toolbar-row *ngFor=\"let portal of portals\">\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n </mat-toolbar-row>\n </mat-toolbar>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i2.MatToolbarRow, selector: "mat-toolbar-row", exportAs: ["matToolbarRow"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
67
73
|
}
|
|
68
74
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: FooterComponent, decorators: [{
|
|
69
75
|
type: Component,
|
|
70
|
-
args: [{ selector: 'rxap-footer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, MatToolbarModule, NgFor, PortalModule, AsyncPipe], template: "<ng-template [ngIf]=\"footerService.portals
|
|
76
|
+
args: [{ selector: 'rxap-footer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, MatToolbarModule, NgFor, PortalModule, AsyncPipe], template: "<ng-template [ngIf]=\"footerService.portals()\" let-portals>\n <mat-toolbar *ngIf=\"portals.length\" class=\"footer mat-elevation-z1\">\n <mat-toolbar-row *ngFor=\"let portal of portals\">\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\n </mat-toolbar-row>\n </mat-toolbar>\n</ng-template>\n" }]
|
|
71
77
|
}], ctorParameters: function () { return [{ type: i1.FooterService }]; } });
|
|
72
78
|
|
|
73
|
-
class
|
|
74
|
-
constructor(
|
|
75
|
-
this.
|
|
76
|
-
this.
|
|
77
|
-
this.
|
|
79
|
+
class LayoutComponentService {
|
|
80
|
+
constructor(footerComponentService, headerComponentService, logoConfig = null, config, mediaMatcher) {
|
|
81
|
+
this.footerComponentService = footerComponentService;
|
|
82
|
+
this.headerComponentService = headerComponentService;
|
|
83
|
+
this.config = config;
|
|
84
|
+
this.currentThemeDensity = toSignal(ObserveCurrentThemeDensity());
|
|
85
|
+
const mobileQuery = mediaMatcher.matchMedia('(max-width: 959px)');
|
|
86
|
+
const mobile = mobileQuery.matches;
|
|
87
|
+
const initialCollapsable = this.config.get('navigation.collapsable', true);
|
|
88
|
+
const collapsable = initialCollapsable && !mobile;
|
|
89
|
+
const pinned = this.config.get('navigation.pinned', false);
|
|
90
|
+
const mode = this.config.get('navigation.mode', pinned || !collapsable ? 'side' : 'over');
|
|
91
|
+
const opened = this.config.get('navigation.opened', (!collapsable || pinned) && !mobile);
|
|
92
|
+
this.opened = signal(opened);
|
|
93
|
+
this.mode = signal(mode);
|
|
94
|
+
this.pinned = signal(pinned);
|
|
95
|
+
this.collapsable = signal(collapsable);
|
|
96
|
+
this.fixedBottomGap = computed(() => this.footerComponentService.portalCount() * (64 + (this.currentThemeDensity() ?? 0) * 4));
|
|
97
|
+
this.fixedTopGap = computed(() => this.headerComponentService.componentCount() * (64 + (this.currentThemeDensity() ?? 0) * 4));
|
|
98
|
+
this.logo = logoConfig ?? {
|
|
99
|
+
src: 'assets/logo.png',
|
|
100
|
+
width: 192,
|
|
101
|
+
};
|
|
102
|
+
mobileQuery.addEventListener('change', (event) => {
|
|
103
|
+
if (initialCollapsable) {
|
|
104
|
+
this.collapsable.set(!event.matches);
|
|
105
|
+
if (this.collapsable()) {
|
|
106
|
+
if (!this.pinned()) {
|
|
107
|
+
this.opened.set(false);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
effect(() => {
|
|
113
|
+
if (this.pinned()) {
|
|
114
|
+
this.mode.set('side');
|
|
115
|
+
this.opened.set(true);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.mode.set('over');
|
|
119
|
+
this.opened.set(false);
|
|
120
|
+
}
|
|
121
|
+
}, { allowSignalWrites: true });
|
|
78
122
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
this.redirect(language);
|
|
123
|
+
toggleOpened() {
|
|
124
|
+
this.opened.set(!this.opened());
|
|
82
125
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
console.warn('[I18nService] redirect not required - language unchanged');
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
const redirectUrl = location.origin +
|
|
89
|
-
location.pathname.replace(new RegExp(`^/${current}`), `/${next}`) +
|
|
90
|
-
location.search;
|
|
91
|
-
console.log('[I18nService] redirect to: ' + redirectUrl);
|
|
92
|
-
location.replace(redirectUrl);
|
|
93
|
-
}
|
|
94
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, deps: [{ token: LOCALE_ID }, { token: i1$1.RxapUserProfileService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
95
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, providedIn: 'root' }); }
|
|
96
|
-
}
|
|
97
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, decorators: [{
|
|
98
|
-
type: Injectable,
|
|
99
|
-
args: [{ providedIn: 'root' }]
|
|
100
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
101
|
-
type: Inject,
|
|
102
|
-
args: [LOCALE_ID]
|
|
103
|
-
}] }, { type: i1$1.RxapUserProfileService }]; } });
|
|
104
|
-
|
|
105
|
-
class LanguageSelectorService {
|
|
106
|
-
constructor(config, localId, i18nService) {
|
|
107
|
-
this.config = config;
|
|
108
|
-
this.localId = localId;
|
|
109
|
-
this.i18nService = i18nService;
|
|
110
|
-
this.languages = this.config.get('i18n.languages') ?? {};
|
|
111
|
-
this.defaultLanguage =
|
|
112
|
-
this.config.get('i18n.defaultLanguage') ??
|
|
113
|
-
Object.keys(this.languages)[0] ??
|
|
114
|
-
'en';
|
|
115
|
-
this.selectedLanguage = this.i18nService.currentLanguage;
|
|
116
|
-
}
|
|
117
|
-
async setLanguage(language) {
|
|
118
|
-
if (language !== this.i18nService.currentLanguage) {
|
|
119
|
-
await this.i18nService.setLanguage(language);
|
|
120
|
-
}
|
|
126
|
+
togglePinned() {
|
|
127
|
+
this.pinned.set(!this.pinned());
|
|
121
128
|
}
|
|
122
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type:
|
|
123
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type:
|
|
129
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, deps: [{ token: i1.FooterService }, { token: i1.HeaderService }, { token: RXAP_LOGO_CONFIG, optional: true }, { token: ConfigService }, { token: i2$1.MediaMatcher }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
130
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, providedIn: 'root' }); }
|
|
124
131
|
}
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type:
|
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, decorators: [{
|
|
126
133
|
type: Injectable,
|
|
127
134
|
args: [{ providedIn: 'root' }]
|
|
128
|
-
}], ctorParameters: function () { return [{ type: i1
|
|
135
|
+
}], ctorParameters: function () { return [{ type: i1.FooterService }, { type: i1.HeaderService }, { type: undefined, decorators: [{
|
|
136
|
+
type: Optional
|
|
137
|
+
}, {
|
|
129
138
|
type: Inject,
|
|
130
|
-
args: [
|
|
131
|
-
}] }, { type:
|
|
132
|
-
|
|
133
|
-
class LanguageSelectorComponent {
|
|
134
|
-
constructor(language) {
|
|
135
|
-
this.language = language;
|
|
136
|
-
}
|
|
137
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorComponent, deps: [{ token: LanguageSelectorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
138
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: LanguageSelectorComponent, isStandalone: true, selector: "rxap-language-selector", ngImport: i0, template: "<ng-template [ngIf]=\"(language.languages | keyvalue).length\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-selector\" rxapStopPropagation>\n <mat-label i18n>Select Language</mat-label>\n <mat-select (ngModelChange)=\"language.setLanguage($event)\" [ngModel]=\"language.selectedLanguage\">\n <mat-option *ngFor=\"let item of language.languages | keyvalue\" [value]=\"item.key\">{{item.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n</ng-template>\n", styles: [".language-selector{width:calc(100% - 32px);margin:0 16px}.language-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0}.language-selector ::ng-deep .mat-form-field-wrapper .mat-form-field-infix{padding:12px 0;border-width:6px}.language-selector ::ng-deep .mat-form-field-wrapper .mat-form-field-infix .mat-select-arrow-wrapper{transform:translateY(0)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: StopPropagationDirective, selector: "[rxapStopPropagation]" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
139
|
-
}
|
|
140
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorComponent, decorators: [{
|
|
141
|
-
type: Component,
|
|
142
|
-
args: [{ selector: 'rxap-language-selector', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
143
|
-
NgIf,
|
|
144
|
-
MatFormFieldModule,
|
|
145
|
-
StopPropagationDirective,
|
|
146
|
-
MatSelectModule,
|
|
147
|
-
FormsModule,
|
|
148
|
-
NgFor,
|
|
149
|
-
MatOptionModule,
|
|
150
|
-
KeyValuePipe,
|
|
151
|
-
], template: "<ng-template [ngIf]=\"(language.languages | keyvalue).length\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-selector\" rxapStopPropagation>\n <mat-label i18n>Select Language</mat-label>\n <mat-select (ngModelChange)=\"language.setLanguage($event)\" [ngModel]=\"language.selectedLanguage\">\n <mat-option *ngFor=\"let item of language.languages | keyvalue\" [value]=\"item.key\">{{item.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n</ng-template>\n", styles: [".language-selector{width:calc(100% - 32px);margin:0 16px}.language-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0}.language-selector ::ng-deep .mat-form-field-wrapper .mat-form-field-infix{padding:12px 0;border-width:6px}.language-selector ::ng-deep .mat-form-field-wrapper .mat-form-field-infix .mat-select-arrow-wrapper{transform:translateY(0)}\n"] }]
|
|
152
|
-
}], ctorParameters: function () { return [{ type: LanguageSelectorService }]; } });
|
|
153
|
-
|
|
154
|
-
class NavigationProgressBarComponent {
|
|
155
|
-
constructor(router) {
|
|
156
|
-
this.router = router;
|
|
157
|
-
this.navigating$ = this.router.events.pipe(filter(event => event instanceof NavigationStart ||
|
|
158
|
-
event instanceof NavigationEnd ||
|
|
159
|
-
event instanceof NavigationCancel), map(event => event instanceof NavigationStart));
|
|
160
|
-
}
|
|
161
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationProgressBarComponent, deps: [{ token: Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
162
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: NavigationProgressBarComponent, isStandalone: true, selector: "rxap-navigation-progress-bar", ngImport: i0, template: "<mat-progress-bar\n *ngIf=\"navigating$ | async\"\n color=\"accent\"\n mode=\"indeterminate\"\n></mat-progress-bar>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1$3.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
163
|
-
}
|
|
164
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationProgressBarComponent, decorators: [{
|
|
165
|
-
type: Component,
|
|
166
|
-
args: [{ selector: 'rxap-navigation-progress-bar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
167
|
-
NgIf,
|
|
168
|
-
MatProgressBarModule,
|
|
169
|
-
AsyncPipe,
|
|
170
|
-
], template: "<mat-progress-bar\n *ngIf=\"navigating$ | async\"\n color=\"accent\"\n mode=\"indeterminate\"\n></mat-progress-bar>\n" }]
|
|
171
|
-
}], ctorParameters: function () { return [{ type: i2$2.Router, decorators: [{
|
|
139
|
+
args: [RXAP_LOGO_CONFIG]
|
|
140
|
+
}] }, { type: i1$1.ConfigService, decorators: [{
|
|
172
141
|
type: Inject,
|
|
173
|
-
args: [
|
|
174
|
-
}] }]; } });
|
|
175
|
-
|
|
176
|
-
class UserProfileIconComponent {
|
|
177
|
-
constructor(userProfileService, authenticationService) {
|
|
178
|
-
this.userProfileService = userProfileService;
|
|
179
|
-
this.authenticationService = authenticationService;
|
|
180
|
-
this.username = signal(null);
|
|
181
|
-
}
|
|
182
|
-
ngOnInit() {
|
|
183
|
-
this._subscription = this.authenticationService.isAuthenticated$.pipe(filter$1(Boolean), switchMap(() => this.userProfileService.getProfile()), filter$1(Boolean), tap((user) => this.username.set(user.username ?? null))).subscribe();
|
|
184
|
-
}
|
|
185
|
-
ngOnDestroy() {
|
|
186
|
-
this._subscription?.unsubscribe();
|
|
187
|
-
}
|
|
188
|
-
async logout() {
|
|
189
|
-
await this.authenticationService.signOut();
|
|
190
|
-
}
|
|
191
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: UserProfileIconComponent, deps: [{ token: i1$1.RxapUserProfileService }, { token: i1$1.RxapAuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
192
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: UserProfileIconComponent, isStandalone: true, selector: "rxap-user-profile-icon", ngImport: i0, template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\">\n <mat-icon class=\"avatar-icon\">account_circle</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\">\n <button mat-menu-item>\n <mat-icon>account_circle</mat-icon>\n <span>{{username()}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon>login</mat-icon>\n <span i18n>Logout</span>\n </button>\n</mat-menu>\n", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1$4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1$4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i3$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
193
|
-
}
|
|
194
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: UserProfileIconComponent, decorators: [{
|
|
195
|
-
type: Component,
|
|
196
|
-
args: [{ selector: 'rxap-user-profile-icon', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
197
|
-
FlexModule,
|
|
198
|
-
MatMenuModule,
|
|
199
|
-
MatIconModule,
|
|
200
|
-
NgIf,
|
|
201
|
-
AsyncPipe,
|
|
202
|
-
], template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\">\n <mat-icon class=\"avatar-icon\">account_circle</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\">\n <button mat-menu-item>\n <mat-icon>account_circle</mat-icon>\n <span>{{username()}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon>login</mat-icon>\n <span i18n>Logout</span>\n </button>\n</mat-menu>\n", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"] }]
|
|
203
|
-
}], ctorParameters: function () { return [{ type: i1$1.RxapUserProfileService }, { type: i1$1.RxapAuthenticationService }]; } });
|
|
142
|
+
args: [ConfigService]
|
|
143
|
+
}] }, { type: i2$1.MediaMatcher }]; } });
|
|
204
144
|
|
|
205
145
|
class AppUrlService {
|
|
206
|
-
constructor(config, localeId,
|
|
146
|
+
constructor(config, localeId, authorizationService, environment) {
|
|
207
147
|
this.config = config;
|
|
208
148
|
this.localeId = localeId;
|
|
209
|
-
this.
|
|
210
|
-
this.
|
|
149
|
+
this.authorizationService = authorizationService;
|
|
150
|
+
this.environment = environment;
|
|
151
|
+
this._apps = this.config.get('navigation.apps', []);
|
|
211
152
|
}
|
|
212
153
|
getApp(appId) {
|
|
213
154
|
return this._apps.find(app => app.id === appId) ?? null;
|
|
214
155
|
}
|
|
215
|
-
getAppUrl(appId, path) {
|
|
156
|
+
getAppUrl(appId, path, infix = this.getPathPrefix()) {
|
|
216
157
|
const app = this.getApp(appId);
|
|
217
158
|
if (app) {
|
|
218
|
-
|
|
219
|
-
return JoinPath(app.href, prefix, path);
|
|
159
|
+
return JoinPath(app.href, infix, path);
|
|
220
160
|
}
|
|
221
161
|
return null;
|
|
222
162
|
}
|
|
163
|
+
getAppUrlOrThrow(appId, path) {
|
|
164
|
+
const url = this.getAppUrl(appId, path);
|
|
165
|
+
if (url) {
|
|
166
|
+
return url;
|
|
167
|
+
}
|
|
168
|
+
throw new Error(`Could not find app with id "${appId}"`);
|
|
169
|
+
}
|
|
223
170
|
navigate(appId, path) {
|
|
224
171
|
const url = this.getAppUrl(appId, path);
|
|
225
172
|
if (url) {
|
|
@@ -227,36 +174,40 @@ class AppUrlService {
|
|
|
227
174
|
}
|
|
228
175
|
}
|
|
229
176
|
async getAppList() {
|
|
230
|
-
const
|
|
231
|
-
|
|
177
|
+
const appList = this
|
|
178
|
+
._apps
|
|
179
|
+
.filter(app => !app.hidden)
|
|
232
180
|
.map(app => ({
|
|
233
181
|
...app,
|
|
234
182
|
href: JoinPath(app.href, this.getPathPrefix()),
|
|
235
|
-
}))
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
183
|
+
}));
|
|
184
|
+
const filteredAppList = [];
|
|
185
|
+
for (const app of appList) {
|
|
186
|
+
if (await firstValueFrom(this.authorizationService.hasPermission$(app.permissions))) {
|
|
187
|
+
filteredAppList.push(app);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return filteredAppList;
|
|
239
191
|
}
|
|
240
192
|
getPathPrefix() {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
return 'de';
|
|
244
|
-
case 'en-US':
|
|
245
|
-
return 'en';
|
|
246
|
-
default:
|
|
247
|
-
return 'de';
|
|
193
|
+
if (this.environment.production && this.localeId) {
|
|
194
|
+
return this.localeId.replace(/-.+$/, '');
|
|
248
195
|
}
|
|
196
|
+
return '';
|
|
249
197
|
}
|
|
250
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppUrlService, deps: [{ token: i1$
|
|
198
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppUrlService, deps: [{ token: i1$1.ConfigService }, { token: LOCALE_ID }, { token: i2$2.AuthorizationService }, { token: RXAP_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
251
199
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppUrlService, providedIn: 'root' }); }
|
|
252
200
|
}
|
|
253
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppUrlService, decorators: [{
|
|
254
202
|
type: Injectable,
|
|
255
203
|
args: [{ providedIn: 'root' }]
|
|
256
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
204
|
+
}], ctorParameters: function () { return [{ type: i1$1.ConfigService }, { type: undefined, decorators: [{
|
|
257
205
|
type: Inject,
|
|
258
206
|
args: [LOCALE_ID]
|
|
259
|
-
}] }, { type:
|
|
207
|
+
}] }, { type: i2$2.AuthorizationService }, { type: undefined, decorators: [{
|
|
208
|
+
type: Inject,
|
|
209
|
+
args: [RXAP_ENVIRONMENT]
|
|
210
|
+
}] }]; } });
|
|
260
211
|
|
|
261
212
|
class AppsButtonComponent {
|
|
262
213
|
constructor(grid, appUrlService, authenticationService) {
|
|
@@ -266,55 +217,199 @@ class AppsButtonComponent {
|
|
|
266
217
|
this.appList = signal([]);
|
|
267
218
|
}
|
|
268
219
|
ngOnInit() {
|
|
269
|
-
this._subscription = this.authenticationService.isAuthenticated$.pipe(filter(Boolean), switchMap
|
|
220
|
+
this._subscription = this.authenticationService.isAuthenticated$.pipe(filter(Boolean), switchMap(() => this.appUrlService.getAppList()), tap((apps) => this.appList.set(apps))).subscribe();
|
|
270
221
|
}
|
|
271
222
|
ngOnDestroy() {
|
|
272
223
|
this._subscription?.unsubscribe();
|
|
273
224
|
}
|
|
274
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppsButtonComponent, deps: [{ token: RXAP_LAYOUT_APPS_GRID, optional: true }, { token: AppUrlService }, { token:
|
|
275
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: AppsButtonComponent, isStandalone: true, selector: "rxap-apps-button", ngImport: i0, template: "<div *ngIf=\"appList()?.length\" class=\"flex flex-row items-center gap-8\">\n\n <div *ngIf=\"isOpen\" class=\"flex flex-row items-center gap-6\">\n\n <div *ngFor=\"let app of appList()\" class=\"h-10\">\n <a [href]=\"app.href\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <img *ngIf=\"app.image\" [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n <span class=\"label grow-0\">{{app.label}}</span>\n </span>\n </a>\n </div>\n\n </div>\n\n <button (click)=\"isOpen = !isOpen\" mat-icon-button>\n <mat-icon
|
|
225
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppsButtonComponent, deps: [{ token: RXAP_LAYOUT_APPS_GRID, optional: true }, { token: AppUrlService }, { token: i2$3.RxapAuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
226
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: AppsButtonComponent, isStandalone: true, selector: "rxap-apps-button", ngImport: i0, template: "<div *ngIf=\"appList()?.length\" class=\"flex flex-row items-center gap-8\">\n\n <div *ngIf=\"isOpen\" class=\"flex flex-row items-center gap-6\">\n\n <div *ngFor=\"let app of appList()\" class=\"h-10\">\n <a [href]=\"app.href\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <img *ngIf=\"app.image\" [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n <span class=\"label grow-0\">{{app.label}}</span>\n </span>\n </a>\n </div>\n\n </div>\n\n <button (click)=\"isOpen = !isOpen\" mat-icon-button>\n <mat-icon svgIcon=\"apps\"></mat-icon>\n </button>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
276
227
|
}
|
|
277
228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: AppsButtonComponent, decorators: [{
|
|
278
229
|
type: Component,
|
|
279
230
|
args: [{ selector: 'rxap-apps-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
280
231
|
NgIf,
|
|
281
|
-
FlexModule,
|
|
282
232
|
NgFor,
|
|
283
233
|
MatButtonModule,
|
|
284
234
|
MatIconModule,
|
|
285
235
|
NgOptimizedImage,
|
|
286
|
-
], template: "<div *ngIf=\"appList()?.length\" class=\"flex flex-row items-center gap-8\">\n\n <div *ngIf=\"isOpen\" class=\"flex flex-row items-center gap-6\">\n\n <div *ngFor=\"let app of appList()\" class=\"h-10\">\n <a [href]=\"app.href\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <img *ngIf=\"app.image\" [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n <span class=\"label grow-0\">{{app.label}}</span>\n </span>\n </a>\n </div>\n\n </div>\n\n <button (click)=\"isOpen = !isOpen\" mat-icon-button>\n <mat-icon
|
|
236
|
+
], template: "<div *ngIf=\"appList()?.length\" class=\"flex flex-row items-center gap-8\">\n\n <div *ngIf=\"isOpen\" class=\"flex flex-row items-center gap-6\">\n\n <div *ngFor=\"let app of appList()\" class=\"h-10\">\n <a [href]=\"app.href\" mat-stroked-button>\n <span class=\"flex flex-row items-center gap-4\">\n <img *ngIf=\"app.image\" [alt]=\"app.label\" [ngSrc]=\"app.image\" height=\"40\" width=\"40\">\n <span class=\"label grow-0\">{{app.label}}</span>\n </span>\n </a>\n </div>\n\n </div>\n\n <button (click)=\"isOpen = !isOpen\" mat-icon-button>\n <mat-icon svgIcon=\"apps\"></mat-icon>\n </button>\n\n</div>\n" }]
|
|
287
237
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
288
238
|
type: Optional
|
|
289
239
|
}, {
|
|
290
240
|
type: Inject,
|
|
291
241
|
args: [RXAP_LAYOUT_APPS_GRID]
|
|
292
|
-
}] }, { type: AppUrlService }, { type:
|
|
242
|
+
}] }, { type: AppUrlService }, { type: i2$3.RxapAuthenticationService }]; } });
|
|
293
243
|
|
|
294
|
-
class
|
|
295
|
-
constructor(
|
|
296
|
-
this.
|
|
297
|
-
this.
|
|
244
|
+
class NavigationProgressBarComponent {
|
|
245
|
+
constructor(router) {
|
|
246
|
+
this.router = router;
|
|
247
|
+
this.navigating$ = this.router.events.pipe(filter(event => event instanceof NavigationStart ||
|
|
248
|
+
event instanceof NavigationEnd ||
|
|
249
|
+
event instanceof NavigationCancel), map(event => event instanceof NavigationStart));
|
|
250
|
+
}
|
|
251
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationProgressBarComponent, deps: [{ token: Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
252
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: NavigationProgressBarComponent, isStandalone: true, selector: "rxap-navigation-progress-bar", ngImport: i0, template: "<mat-progress-bar\n *ngIf=\"navigating$ | async\"\n color=\"accent\"\n mode=\"indeterminate\"\n></mat-progress-bar>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1$2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
253
|
+
}
|
|
254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationProgressBarComponent, decorators: [{
|
|
255
|
+
type: Component,
|
|
256
|
+
args: [{ selector: 'rxap-navigation-progress-bar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
257
|
+
NgIf,
|
|
258
|
+
MatProgressBarModule,
|
|
259
|
+
AsyncPipe,
|
|
260
|
+
], template: "<mat-progress-bar\n *ngIf=\"navigating$ | async\"\n color=\"accent\"\n mode=\"indeterminate\"\n></mat-progress-bar>\n" }]
|
|
261
|
+
}], ctorParameters: function () { return [{ type: i2$4.Router, decorators: [{
|
|
262
|
+
type: Inject,
|
|
263
|
+
args: [Router]
|
|
264
|
+
}] }]; } });
|
|
265
|
+
|
|
266
|
+
class LanguageSelectorComponent {
|
|
267
|
+
constructor(language) {
|
|
268
|
+
this.language = language;
|
|
269
|
+
}
|
|
270
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorComponent, deps: [{ token: i1$3.LanguageSelectorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
271
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: LanguageSelectorComponent, isStandalone: true, selector: "rxap-language-selector", ngImport: i0, template: "<ng-template [ngIf]=\"(language.languages | keyvalue).length\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-selector\" rxapStopPropagation>\n <mat-label i18n>Select Language</mat-label>\n <mat-select (ngModelChange)=\"language.setLanguage($event)\" [ngModel]=\"language.selectedLanguage\">\n <mat-option *ngFor=\"let item of language.languages | keyvalue\" [value]=\"item.key\">{{item.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n</ng-template>\n", styles: [".language-selector{width:calc(100% - 32px);margin:0 16px}.language-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0}.language-selector ::ng-deep .mat-form-field-wrapper .mat-form-field-infix{padding:12px 0;border-width:6px}.language-selector ::ng-deep .mat-form-field-wrapper .mat-form-field-infix .mat-select-arrow-wrapper{transform:translateY(0)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$5.MatLabel, selector: "mat-label" }, { kind: "directive", type: StopPropagationDirective, selector: "[rxapStopPropagation]" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3$2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
272
|
+
}
|
|
273
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorComponent, decorators: [{
|
|
274
|
+
type: Component,
|
|
275
|
+
args: [{ selector: 'rxap-language-selector', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
276
|
+
NgIf,
|
|
277
|
+
MatFormFieldModule,
|
|
278
|
+
StopPropagationDirective,
|
|
279
|
+
MatSelectModule,
|
|
280
|
+
FormsModule,
|
|
281
|
+
NgFor,
|
|
282
|
+
MatOptionModule,
|
|
283
|
+
KeyValuePipe,
|
|
284
|
+
], template: "<ng-template [ngIf]=\"(language.languages | keyvalue).length\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-selector\" rxapStopPropagation>\n <mat-label i18n>Select Language</mat-label>\n <mat-select (ngModelChange)=\"language.setLanguage($event)\" [ngModel]=\"language.selectedLanguage\">\n <mat-option *ngFor=\"let item of language.languages | keyvalue\" [value]=\"item.key\">{{item.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n</ng-template>\n", styles: [".language-selector{width:calc(100% - 32px);margin:0 16px}.language-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0}.language-selector ::ng-deep .mat-form-field-wrapper .mat-form-field-infix{padding:12px 0;border-width:6px}.language-selector ::ng-deep .mat-form-field-wrapper .mat-form-field-infix .mat-select-arrow-wrapper{transform:translateY(0)}\n"] }]
|
|
285
|
+
}], ctorParameters: function () { return [{ type: i1$3.LanguageSelectorService }]; } });
|
|
286
|
+
|
|
287
|
+
class SettingsButtonComponent {
|
|
288
|
+
constructor(theme, route, injector, changelogService) {
|
|
298
289
|
this.theme = theme;
|
|
299
|
-
this.
|
|
300
|
-
this.
|
|
301
|
-
this.
|
|
290
|
+
this.route = route;
|
|
291
|
+
this.injector = injector;
|
|
292
|
+
this.changelogService = changelogService;
|
|
302
293
|
this.isDevMode = isDevMode();
|
|
294
|
+
this.items = signal([]);
|
|
295
|
+
this.savePreviewDensityValue = false;
|
|
296
|
+
this.currentDensityValue = null;
|
|
297
|
+
this.savePreviewTypographyValue = false;
|
|
298
|
+
this.currentTypographyValue = null;
|
|
299
|
+
this.savePreviewThemeValue = false;
|
|
300
|
+
this.currentThemeValue = null;
|
|
301
|
+
this.availableThemes = this.theme.getAvailableThemes();
|
|
302
|
+
this.availableTypographies = this.theme.getAvailableTypographies();
|
|
303
|
+
}
|
|
304
|
+
ngOnDestroy() {
|
|
305
|
+
this._subscription?.unsubscribe();
|
|
303
306
|
}
|
|
304
307
|
ngOnInit() {
|
|
305
|
-
this.
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
308
|
+
this._subscription = this.route.data.pipe(map(data => this.getCustomMenuItems(data)), map(items => items.map(item => new ComponentPortal(item, undefined, this.injector))), tap(items => this.items.set(items))).subscribe();
|
|
309
|
+
}
|
|
310
|
+
getCustomMenuItems(data) {
|
|
311
|
+
if (data?.layout?.header?.menu?.items?.length) {
|
|
312
|
+
return data.layout.header.menu.items;
|
|
313
|
+
}
|
|
314
|
+
return [];
|
|
309
315
|
}
|
|
310
|
-
|
|
311
|
-
this.
|
|
316
|
+
openChangelogDialog() {
|
|
317
|
+
this.changelogService.showChangelogDialog();
|
|
312
318
|
}
|
|
313
|
-
|
|
314
|
-
this.
|
|
319
|
+
previewDensity(density) {
|
|
320
|
+
this.theme.applyDensity(density);
|
|
315
321
|
}
|
|
316
|
-
|
|
317
|
-
|
|
322
|
+
restoreDensity() {
|
|
323
|
+
this.theme.applyDensity(this.theme.density());
|
|
324
|
+
}
|
|
325
|
+
setDensity(density) {
|
|
326
|
+
this.theme.setDensity(density);
|
|
327
|
+
}
|
|
328
|
+
previewTypography(typography) {
|
|
329
|
+
this.theme.applyTypography(typography);
|
|
330
|
+
}
|
|
331
|
+
restoreTypography() {
|
|
332
|
+
this.theme.applyTypography(this.theme.typography());
|
|
333
|
+
}
|
|
334
|
+
setTypography(typography) {
|
|
335
|
+
this.theme.setTypography(typography);
|
|
336
|
+
}
|
|
337
|
+
previewTheme(theme) {
|
|
338
|
+
this.theme.applyTheme(theme);
|
|
339
|
+
}
|
|
340
|
+
restoreTheme() {
|
|
341
|
+
this.theme.applyTheme(this.theme.themeName());
|
|
342
|
+
}
|
|
343
|
+
setTheme(theme) {
|
|
344
|
+
this.theme.setTheme(theme);
|
|
345
|
+
}
|
|
346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SettingsButtonComponent, deps: [{ token: i1$4.ThemeService }, { token: i2$4.ActivatedRoute }, { token: i0.Injector }, { token: i3$3.ChangelogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
347
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SettingsButtonComponent, isStandalone: true, selector: "rxap-settings-button", ngImport: i0, template: "<button [matMenuTriggerFor]=\"menu\" mat-icon-button>\n <mat-icon svgIcon=\"cog\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\">\n <button (click)=\"theme.toggleDarkTheme()\" mat-menu-item>\n <mat-icon *ngIf=\"theme.darkMode()\" svgIcon=\"brightness-2\"></mat-icon>\n <mat-icon *ngIf=\"!theme.darkMode()\" svgIcon=\"brightness-5\"></mat-icon>\n <span i18n>Mode</span>\n </button>\n <button [matMenuTriggerFor]=\"themeMenu\" mat-menu-item>\n <mat-icon svgIcon=\"compare\"></mat-icon>\n <span i18n>Theme</span>\n </button>\n <rxap-language-selector></rxap-language-selector>\n <button (click)=\"openChangelogDialog()\" mat-menu-item>\n <mat-icon svgIcon=\"format-list-numbered\"></mat-icon>\n <span i18n>What's new</span>\n </button>\n <ng-container *ngFor=\"let item of items()\">\n <ng-template [cdkPortalOutlet]=\"item\"></ng-template>\n </ng-container>\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 <button [matMenuTriggerFor]=\"themeFontMenu\" mat-menu-item>\n <mat-icon svgIcon=\"format-font\"></mat-icon>\n <span i18n>Font</span>\n </button>\n <button [matMenuTriggerFor]=\"themePresetMenu\" mat-menu-item>\n <mat-icon svgIcon=\"shape-outline\"></mat-icon>\n <span i18n>Preset</span>\n </button>\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 <button (click)=\"setTypography(typographyName)\"\n (mouseenter)=\"previewTypography(typographyName)\"\n (mouseleave)=\"restoreTypography()\"\n *ngFor=\"let typographyName of availableTypographies\"\n mat-menu-item>\n {{ typographyName }}\n </button>\n</mat-menu>\n\n<mat-menu #themePresetMenu=\"matMenu\" xPosition=\"before\">\n <button (click)=\"setTheme(themeName)\"\n (mouseenter)=\"previewTheme(themeName)\"\n (mouseleave)=\"restoreTheme()\"\n *ngFor=\"let themeName of availableThemes\"\n mat-menu-item>\n {{ themeName }}\n </button>\n</mat-menu>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LanguageSelectorComponent, selector: "rxap-language-selector" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
|
|
348
|
+
}
|
|
349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SettingsButtonComponent, decorators: [{
|
|
350
|
+
type: Component,
|
|
351
|
+
args: [{ selector: 'rxap-settings-button', standalone: true, imports: [CommonModule, MatButtonModule, MatIconModule, LanguageSelectorComponent, MatMenuModule, PortalModule], template: "<button [matMenuTriggerFor]=\"menu\" mat-icon-button>\n <mat-icon svgIcon=\"cog\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\">\n <button (click)=\"theme.toggleDarkTheme()\" mat-menu-item>\n <mat-icon *ngIf=\"theme.darkMode()\" svgIcon=\"brightness-2\"></mat-icon>\n <mat-icon *ngIf=\"!theme.darkMode()\" svgIcon=\"brightness-5\"></mat-icon>\n <span i18n>Mode</span>\n </button>\n <button [matMenuTriggerFor]=\"themeMenu\" mat-menu-item>\n <mat-icon svgIcon=\"compare\"></mat-icon>\n <span i18n>Theme</span>\n </button>\n <rxap-language-selector></rxap-language-selector>\n <button (click)=\"openChangelogDialog()\" mat-menu-item>\n <mat-icon svgIcon=\"format-list-numbered\"></mat-icon>\n <span i18n>What's new</span>\n </button>\n <ng-container *ngFor=\"let item of items()\">\n <ng-template [cdkPortalOutlet]=\"item\"></ng-template>\n </ng-container>\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 <button [matMenuTriggerFor]=\"themeFontMenu\" mat-menu-item>\n <mat-icon svgIcon=\"format-font\"></mat-icon>\n <span i18n>Font</span>\n </button>\n <button [matMenuTriggerFor]=\"themePresetMenu\" mat-menu-item>\n <mat-icon svgIcon=\"shape-outline\"></mat-icon>\n <span i18n>Preset</span>\n </button>\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 <button (click)=\"setTypography(typographyName)\"\n (mouseenter)=\"previewTypography(typographyName)\"\n (mouseleave)=\"restoreTypography()\"\n *ngFor=\"let typographyName of availableTypographies\"\n mat-menu-item>\n {{ typographyName }}\n </button>\n</mat-menu>\n\n<mat-menu #themePresetMenu=\"matMenu\" xPosition=\"before\">\n <button (click)=\"setTheme(themeName)\"\n (mouseenter)=\"previewTheme(themeName)\"\n (mouseleave)=\"restoreTheme()\"\n *ngFor=\"let themeName of availableThemes\"\n mat-menu-item>\n {{ themeName }}\n </button>\n</mat-menu>\n" }]
|
|
352
|
+
}], ctorParameters: function () { return [{ type: i1$4.ThemeService }, { type: i2$4.ActivatedRoute }, { type: i0.Injector }, { type: i3$3.ChangelogService }]; } });
|
|
353
|
+
|
|
354
|
+
class SidenavToggleButtonComponent {
|
|
355
|
+
constructor(layoutComponentService) {
|
|
356
|
+
this.layoutComponentService = layoutComponentService;
|
|
357
|
+
this.opened = layoutComponentService.opened;
|
|
358
|
+
}
|
|
359
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavToggleButtonComponent, deps: [{ token: LayoutComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
360
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SidenavToggleButtonComponent, isStandalone: true, selector: "rxap-sidenav-toggle-button", ngImport: i0, template: "<button (click)=\"layoutComponentService.toggleOpened()\" mat-icon-button>\n <mat-icon *ngIf=\"!opened()\">menu</mat-icon>\n <mat-icon *ngIf=\"opened()\">menu_open</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
361
|
+
}
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavToggleButtonComponent, decorators: [{
|
|
363
|
+
type: Component,
|
|
364
|
+
args: [{ selector: 'rxap-sidenav-toggle-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
365
|
+
MatButtonModule,
|
|
366
|
+
NgIf,
|
|
367
|
+
MatIconModule,
|
|
368
|
+
], template: "<button (click)=\"layoutComponentService.toggleOpened()\" mat-icon-button>\n <mat-icon *ngIf=\"!opened()\">menu</mat-icon>\n <mat-icon *ngIf=\"opened()\">menu_open</mat-icon>\n</button>\n" }]
|
|
369
|
+
}], ctorParameters: function () { return [{ type: LayoutComponentService }]; } });
|
|
370
|
+
|
|
371
|
+
const EXTRACT_USERNAME_FROM_PROFILE = new InjectionToken('extract-username-from-profile', {
|
|
372
|
+
providedIn: 'root',
|
|
373
|
+
factory: () => (profile) => (profile ? profile.username ?? profile.email ?? profile.name : null) ?? null,
|
|
374
|
+
});
|
|
375
|
+
class UserProfileIconComponent {
|
|
376
|
+
constructor(userProfileService, authenticationService, extractUsernameFromProfile) {
|
|
377
|
+
this.userProfileService = userProfileService;
|
|
378
|
+
this.authenticationService = authenticationService;
|
|
379
|
+
this.username = toSignal(this.authenticationService.isAuthenticated$.pipe(filter$1(Boolean), switchMap$1(() => this.userProfileService.connect({
|
|
380
|
+
viewChange: this.authenticationService.isAuthenticated$.pipe(skip(1), filter$1(Boolean), distinctUntilChanged()),
|
|
381
|
+
})), filter$1(Boolean), map(extractUsernameFromProfile)), { initialValue: null });
|
|
382
|
+
}
|
|
383
|
+
async logout() {
|
|
384
|
+
await this.authenticationService.signOut();
|
|
385
|
+
}
|
|
386
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: UserProfileIconComponent, deps: [{ token: i1$5.UserProfileDataSource }, { token: i2$3.RxapAuthenticationService }, { token: EXTRACT_USERNAME_FROM_PROFILE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
387
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: UserProfileIconComponent, isStandalone: true, selector: "rxap-user-profile-icon", ngImport: i0, template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon flex flex-row justify-center items-center\">\n <mat-icon class=\"avatar-icon\" svgIcon=\"account-circle\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\" class=\"!max-w-none\">\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 <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", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
388
|
+
}
|
|
389
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: UserProfileIconComponent, decorators: [{
|
|
390
|
+
type: Component,
|
|
391
|
+
args: [{ selector: 'rxap-user-profile-icon', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
392
|
+
MatMenuModule,
|
|
393
|
+
MatIconModule,
|
|
394
|
+
NgIf,
|
|
395
|
+
AsyncPipe,
|
|
396
|
+
], template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon flex flex-row justify-center items-center\">\n <mat-icon class=\"avatar-icon\" svgIcon=\"account-circle\"></mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\" class=\"!max-w-none\">\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 <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", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"] }]
|
|
397
|
+
}], ctorParameters: function () { return [{ type: i1$5.UserProfileDataSource }, { type: i2$3.RxapAuthenticationService }, { type: undefined, decorators: [{
|
|
398
|
+
type: Inject,
|
|
399
|
+
args: [EXTRACT_USERNAME_FROM_PROFILE]
|
|
400
|
+
}] }]; } });
|
|
401
|
+
|
|
402
|
+
class HeaderComponent {
|
|
403
|
+
constructor(headerComponentService, layoutComponentService, headerComponent) {
|
|
404
|
+
this.headerComponentService = headerComponentService;
|
|
405
|
+
this.layoutComponentService = layoutComponentService;
|
|
406
|
+
this.headerComponent = headerComponent;
|
|
407
|
+
this.color = undefined;
|
|
408
|
+
this.collapsable = layoutComponentService.collapsable;
|
|
409
|
+
this.opened = layoutComponentService.opened;
|
|
410
|
+
}
|
|
411
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: HeaderComponent, deps: [{ token: HeaderService }, { token: LayoutComponentService }, { token: RXAP_HEADER_COMPONENT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
412
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: HeaderComponent, isStandalone: true, selector: "rxap-header", inputs: { color: "color" }, ngImport: i0, template: "<mat-toolbar [color]=\"color\" [ngClass]=\"{ open: opened() }\" class=\"mat-elevation-z3 header\">\n <div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n <rxap-sidenav-toggle-button *ngIf=\"!collapsable()\"></rxap-sidenav-toggle-button>\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 <rxap-user-profile-icon class=\"grow-0\"></rxap-user-profile-icon>\n </div>\n</mat-toolbar>\n\n<rxap-navigation-progress-bar></rxap-navigation-progress-bar>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: NavigationProgressBarComponent, selector: "rxap-navigation-progress-bar" }, { kind: "component", type: UserProfileIconComponent, selector: "rxap-user-profile-icon" }, { 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" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
318
413
|
}
|
|
319
414
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
320
415
|
type: Component,
|
|
@@ -325,7 +420,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
325
420
|
MatButtonModule,
|
|
326
421
|
MatMenuModule,
|
|
327
422
|
MatIconModule,
|
|
328
|
-
LanguageSelectorComponent,
|
|
329
423
|
MatFormFieldModule,
|
|
330
424
|
StopPropagationDirective,
|
|
331
425
|
MatSelectModule,
|
|
@@ -337,18 +431,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
337
431
|
NavigationProgressBarComponent,
|
|
338
432
|
UserProfileIconComponent,
|
|
339
433
|
AppsButtonComponent,
|
|
340
|
-
|
|
434
|
+
SettingsButtonComponent,
|
|
435
|
+
SidenavToggleButtonComponent,
|
|
436
|
+
], template: "<mat-toolbar [color]=\"color\" [ngClass]=\"{ open: opened() }\" class=\"mat-elevation-z3 header\">\n <div class=\"w-full flex flex-row gap-x-4 justify-between items-center\">\n <rxap-sidenav-toggle-button *ngIf=\"!collapsable()\"></rxap-sidenav-toggle-button>\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 <rxap-user-profile-icon class=\"grow-0\"></rxap-user-profile-icon>\n </div>\n</mat-toolbar>\n\n<rxap-navigation-progress-bar></rxap-navigation-progress-bar>\n" }]
|
|
341
437
|
}], ctorParameters: function () { return [{ type: i1.HeaderService, decorators: [{
|
|
342
438
|
type: Inject,
|
|
343
439
|
args: [HeaderService]
|
|
344
|
-
}] }, { type: undefined, decorators: [{
|
|
440
|
+
}] }, { type: LayoutComponentService }, { type: undefined, decorators: [{
|
|
345
441
|
type: Optional
|
|
346
442
|
}, {
|
|
347
443
|
type: Inject,
|
|
348
444
|
args: [RXAP_HEADER_COMPONENT]
|
|
349
|
-
}] }
|
|
350
|
-
type: Input
|
|
351
|
-
}], color: [{
|
|
445
|
+
}] }]; }, propDecorators: { color: [{
|
|
352
446
|
type: Input
|
|
353
447
|
}] } });
|
|
354
448
|
|
|
@@ -359,82 +453,29 @@ class SignOutComponent {
|
|
|
359
453
|
async logout() {
|
|
360
454
|
await this.authenticationService.signOut();
|
|
361
455
|
}
|
|
362
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SignOutComponent, deps: [{ token:
|
|
363
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SignOutComponent, isStandalone: true, selector: "rxap-sign-out", ngImport: i0, template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon
|
|
456
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SignOutComponent, deps: [{ token: i2$3.RxapAuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
457
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SignOutComponent, isStandalone: true, selector: "rxap-sign-out", ngImport: i0, template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon svgIcon=\"logout\"></mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
364
458
|
}
|
|
365
459
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SignOutComponent, decorators: [{
|
|
366
460
|
type: Component,
|
|
367
|
-
args: [{ selector: 'rxap-sign-out', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon
|
|
368
|
-
}], ctorParameters: function () { return [{ type:
|
|
461
|
+
args: [{ selector: 'rxap-sign-out', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon svgIcon=\"logout\"></mat-icon>\n</button>\n" }]
|
|
462
|
+
}], ctorParameters: function () { return [{ type: i2$3.RxapAuthenticationService }]; } });
|
|
369
463
|
|
|
370
464
|
class ResetButtonComponent {
|
|
371
465
|
constructor(resetService) {
|
|
372
466
|
this.resetService = resetService;
|
|
373
467
|
}
|
|
374
468
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResetButtonComponent, deps: [{ token: ResetService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
375
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ResetButtonComponent, isStandalone: true, selector: "rxap-reset-button", ngImport: i0, template: "<button (click)=\"resetService.resetAll()\" mat-icon-button>\n <mat-icon
|
|
469
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ResetButtonComponent, isStandalone: true, selector: "rxap-reset-button", ngImport: i0, template: "<button (click)=\"resetService.resetAll()\" mat-icon-button>\n <mat-icon svgIcon=\"refresh\"></mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
376
470
|
}
|
|
377
471
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResetButtonComponent, decorators: [{
|
|
378
472
|
type: Component,
|
|
379
|
-
args: [{ selector: 'rxap-reset-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button (click)=\"resetService.resetAll()\" mat-icon-button>\n <mat-icon
|
|
473
|
+
args: [{ selector: 'rxap-reset-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button (click)=\"resetService.resetAll()\" mat-icon-button>\n <mat-icon svgIcon=\"refresh\"></mat-icon>\n</button>\n" }]
|
|
380
474
|
}], ctorParameters: function () { return [{ type: i1.ResetService, decorators: [{
|
|
381
475
|
type: Inject,
|
|
382
476
|
args: [ResetService]
|
|
383
477
|
}] }]; } });
|
|
384
478
|
|
|
385
|
-
class SidenavToggleButtonComponent {
|
|
386
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavToggleButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
387
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SidenavToggleButtonComponent, isStandalone: true, selector: "rxap-sidenav-toggle-button", inputs: { sidenav: "sidenav" }, ngImport: i0, template: "<button (click)=\"sidenav.toggle()\" mat-icon-button>\n <mat-icon *ngIf=\"!sidenav.opened\">menu</mat-icon>\n <mat-icon *ngIf=\"sidenav.opened\">menu_open</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
388
|
-
}
|
|
389
|
-
__decorate([
|
|
390
|
-
Required,
|
|
391
|
-
__metadata("design:type", MatSidenav)
|
|
392
|
-
], SidenavToggleButtonComponent.prototype, "sidenav", void 0);
|
|
393
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavToggleButtonComponent, decorators: [{
|
|
394
|
-
type: Component,
|
|
395
|
-
args: [{ selector: 'rxap-sidenav-toggle-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
396
|
-
MatButtonModule,
|
|
397
|
-
NgIf,
|
|
398
|
-
MatIconModule,
|
|
399
|
-
], template: "<button (click)=\"sidenav.toggle()\" mat-icon-button>\n <mat-icon *ngIf=\"!sidenav.opened\">menu</mat-icon>\n <mat-icon *ngIf=\"sidenav.opened\">menu_open</mat-icon>\n</button>\n" }]
|
|
400
|
-
}], propDecorators: { sidenav: [{
|
|
401
|
-
type: Input
|
|
402
|
-
}] } });
|
|
403
|
-
|
|
404
|
-
class LayoutComponentService {
|
|
405
|
-
constructor(footerComponentService, headerComponentService, logoConfig = null, config) {
|
|
406
|
-
this.footerComponentService = footerComponentService;
|
|
407
|
-
this.headerComponentService = headerComponentService;
|
|
408
|
-
this.config = config;
|
|
409
|
-
this.opened$ = new BehaviorSubject(true);
|
|
410
|
-
this.mode$ = new BehaviorSubject('side');
|
|
411
|
-
this.fixedTopGap$ = new BehaviorSubject(64);
|
|
412
|
-
this.mode$.next(this.config.get('navigation.mode', this.mode$.value));
|
|
413
|
-
this.opened$.next(this.config.get('navigation.open', this.opened$.value));
|
|
414
|
-
this.fixedBottomGap$ = this.footerComponentService.portalCount$.pipe(map(count => count * 64));
|
|
415
|
-
this.fixedTopGap$.next(this.headerComponentService.countComponent * 64);
|
|
416
|
-
this.headerComponentService.update$.pipe(tap(() => this.fixedTopGap$.next(this.headerComponentService.countComponent * 64))).subscribe();
|
|
417
|
-
this.logo = logoConfig ?? {
|
|
418
|
-
src: '/assets/logo.png',
|
|
419
|
-
width: 192,
|
|
420
|
-
};
|
|
421
|
-
}
|
|
422
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, deps: [{ token: i1.FooterService }, { token: i1.HeaderService }, { token: RXAP_LOGO_CONFIG, optional: true }, { token: ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
423
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, providedIn: 'root' }); }
|
|
424
|
-
}
|
|
425
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, decorators: [{
|
|
426
|
-
type: Injectable,
|
|
427
|
-
args: [{ providedIn: 'root' }]
|
|
428
|
-
}], ctorParameters: function () { return [{ type: i1.FooterService }, { type: i1.HeaderService }, { type: undefined, decorators: [{
|
|
429
|
-
type: Optional
|
|
430
|
-
}, {
|
|
431
|
-
type: Inject,
|
|
432
|
-
args: [RXAP_LOGO_CONFIG]
|
|
433
|
-
}] }, { type: i1$2.ConfigService, decorators: [{
|
|
434
|
-
type: Inject,
|
|
435
|
-
args: [ConfigService]
|
|
436
|
-
}] }]; } });
|
|
437
|
-
|
|
438
479
|
class SidenavComponentService {
|
|
439
480
|
constructor(config) {
|
|
440
481
|
this.config = config;
|
|
@@ -444,13 +485,13 @@ class SidenavComponentService {
|
|
|
444
485
|
toggleNavigationCollapse() {
|
|
445
486
|
this.collapsed$.next(!this.collapsed$.value);
|
|
446
487
|
}
|
|
447
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavComponentService, deps: [{ token: i1$
|
|
488
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavComponentService, deps: [{ token: i1$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
448
489
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavComponentService, providedIn: 'root' }); }
|
|
449
490
|
}
|
|
450
491
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavComponentService, decorators: [{
|
|
451
492
|
type: Injectable,
|
|
452
493
|
args: [{ providedIn: 'root' }]
|
|
453
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
494
|
+
}], ctorParameters: function () { return [{ type: i1$1.ConfigService }]; } });
|
|
454
495
|
|
|
455
496
|
class NavigationItemComponent {
|
|
456
497
|
get isActive() {
|
|
@@ -522,7 +563,7 @@ class NavigationItemComponent {
|
|
|
522
563
|
return item;
|
|
523
564
|
}
|
|
524
565
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationItemComponent, deps: [{ token: Router }, { token: SidenavComponentService }, { token: ElementRef }, { token: Renderer2 }, { token: Overlay }, { token: ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
525
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: NavigationItemComponent, isStandalone: true, selector: "li[rxap-navigation-item]", inputs: { level: "level", item: "item" }, host: { properties: { "class.active": "this.isActive" } }, viewQueries: [{ propertyName: "routerLinkActive", first: true, predicate: RouterLinkActive, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<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]=\"{\n 'pl-0': level === 0,\n 'pl-4': level === 1,\n 'pl-8': level === 2,\n 'pl-12': level === 3\n }\"\n class=\"grow whitespace-nowrap\"\n >\n {{ item.label }}\n </span>\n <mat-icon *ngIf=\"item.icon\" [rxapIcon]=\"item.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", styles: [""], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return RouterLinkActive; }), selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i0.forwardRef(function () { return RouterLink; }), selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i0.forwardRef(function () { return NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatRippleModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatRipple; }), selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatIconModule; }) }, { kind: "component", type: i0.forwardRef(function () { return
|
|
566
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: NavigationItemComponent, isStandalone: true, selector: "li[rxap-navigation-item]", inputs: { level: "level", item: "item" }, host: { properties: { "class.active": "this.isActive" } }, viewQueries: [{ propertyName: "routerLinkActive", first: true, predicate: RouterLinkActive, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<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]=\"{\n 'pl-0': level === 0,\n 'pl-4': level === 1,\n 'pl-8': level === 2,\n 'pl-12': level === 3\n }\"\n class=\"grow whitespace-nowrap\"\n >\n {{ item.label }}\n </span>\n <mat-icon *ngIf=\"item.icon\" [rxapIcon]=\"item.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", styles: [""], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return RouterLinkActive; }), selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i0.forwardRef(function () { return RouterLink; }), selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i0.forwardRef(function () { return NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatRippleModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i4$1.MatRipple; }), selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatIconModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i4.MatIcon; }), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i0.forwardRef(function () { return IconDirective; }), selector: "mat-icon[rxapIcon]", inputs: ["rxapIcon"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatDividerModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i3$4.MatDivider; }), selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i0.forwardRef(function () { return NavigationComponent; }), selector: "ul[rxap-navigation]", inputs: ["items", "level", "root"] }, { kind: "directive", type: i0.forwardRef(function () { return NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
|
|
526
567
|
trigger('sub-nav', [
|
|
527
568
|
transition(':enter', [
|
|
528
569
|
style({
|
|
@@ -540,10 +581,6 @@ class NavigationItemComponent {
|
|
|
540
581
|
]),
|
|
541
582
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
542
583
|
}
|
|
543
|
-
__decorate([
|
|
544
|
-
Required,
|
|
545
|
-
__metadata("design:type", Object)
|
|
546
|
-
], NavigationItemComponent.prototype, "item", void 0);
|
|
547
584
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationItemComponent, decorators: [{
|
|
548
585
|
type: Component,
|
|
549
586
|
args: [{ selector: 'li[rxap-navigation-item]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [
|
|
@@ -573,7 +610,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
573
610
|
forwardRef(() => NavigationComponent),
|
|
574
611
|
NgClass,
|
|
575
612
|
], template: "<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]=\"{\n 'pl-0': level === 0,\n 'pl-4': level === 1,\n 'pl-8': level === 2,\n 'pl-12': level === 3\n }\"\n class=\"grow whitespace-nowrap\"\n >\n {{ item.label }}\n </span>\n <mat-icon *ngIf=\"item.icon\" [rxapIcon]=\"item.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" }]
|
|
576
|
-
}], ctorParameters: function () { return [{ type: i2$
|
|
613
|
+
}], ctorParameters: function () { return [{ type: i2$4.Router, decorators: [{
|
|
577
614
|
type: Inject,
|
|
578
615
|
args: [Router]
|
|
579
616
|
}] }, { type: SidenavComponentService, decorators: [{
|
|
@@ -597,7 +634,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
597
634
|
type: ViewChild,
|
|
598
635
|
args: [RouterLinkActive, { static: true }]
|
|
599
636
|
}], item: [{
|
|
600
|
-
type: Input
|
|
637
|
+
type: Input,
|
|
638
|
+
args: [{ required: true }]
|
|
601
639
|
}], isActive: [{
|
|
602
640
|
type: HostBinding,
|
|
603
641
|
args: ['class.active']
|
|
@@ -628,7 +666,7 @@ class NavigationService {
|
|
|
628
666
|
Object.entries(inserts).forEach(([id, insert]) => this.insert(id, insert, false));
|
|
629
667
|
}
|
|
630
668
|
this.updateNavigation();
|
|
631
|
-
this.config$ = this.navigation$.pipe(switchMap((navigationWithoutStatusCheck) => this.checkNavigationStatusProviders(navigationWithoutStatusCheck)));
|
|
669
|
+
this.config$ = this.navigation$.pipe(switchMap$1((navigationWithoutStatusCheck) => this.checkNavigationStatusProviders(navigationWithoutStatusCheck)));
|
|
632
670
|
}
|
|
633
671
|
/**
|
|
634
672
|
* @deprecated use add instead
|
|
@@ -685,7 +723,7 @@ class NavigationService {
|
|
|
685
723
|
return of(false);
|
|
686
724
|
})));
|
|
687
725
|
// TODO : dont wait for all status services to complete, but cancel waiting if one returns false
|
|
688
|
-
return combineLatest(isVisibleArray$).pipe(map((isVisibleArray) => isVisibleArray.reduce((acc, isVisible) => acc && isVisible, true)), map((isVisible) => (isVisible ? navigationItem : null)), switchMap((navigationItemOrNull) => {
|
|
726
|
+
return combineLatest(isVisibleArray$).pipe(map((isVisibleArray) => isVisibleArray.reduce((acc, isVisible) => acc && isVisible, true)), map((isVisible) => (isVisible ? navigationItem : null)), switchMap$1((navigationItemOrNull) => {
|
|
689
727
|
if (navigationItemOrNull) {
|
|
690
728
|
if (navigationItemOrNull.children?.length) {
|
|
691
729
|
return this.checkNavigationStatusProviders(navigationItemOrNull.children).pipe(map((children) => ({
|
|
@@ -770,6 +808,7 @@ class NavigationComponent {
|
|
|
770
808
|
.pipe(tap((navigation) => (this.items = navigation)), tap(() => this.cdr.detectChanges()))
|
|
771
809
|
.subscribe();
|
|
772
810
|
}
|
|
811
|
+
this.items ??= [];
|
|
773
812
|
}
|
|
774
813
|
ngOnDestroy() {
|
|
775
814
|
this.subscription?.unsubscribe();
|
|
@@ -791,10 +830,6 @@ class NavigationComponent {
|
|
|
791
830
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationComponent, deps: [{ token: NavigationService }, { token: ChangeDetectorRef }, { token: SidenavComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
792
831
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: NavigationComponent, isStandalone: true, selector: "ul[rxap-navigation]", inputs: { items: "items", level: "level", root: "root" }, host: { properties: { "class.rxap-root-navigation": "this._root" }, classAttribute: "list-none dark:text-neutral-400 text-neutral-700" }, ngImport: i0, template: "<ng-template [ngForOf]=\"items\" let-item ngFor>\n <ng-template [ngIf]=\"isNavigationDividerItem(item)\">\n <mat-divider></mat-divider>\n <div *ngIf=\"(sidenav.collapsed$ | async) === false\" class=\"pl-5 h-6\">\n <span *ngIf=\"item.title\">{{item.title}}</span>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"isNavigationItem(item)\">\n <li [item]=\"asNavigationItem(item)\" [level]=\"level\" class=\"dark:hover:text-white hover:text-black\"\n rxap-navigation-item></li>\n </ng-template>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return NgFor; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatDividerModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i3$4.MatDivider; }), selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i0.forwardRef(function () { return NavigationItemComponent; }), selector: "li[rxap-navigation-item]", inputs: ["level", "item"] }, { kind: "pipe", type: i0.forwardRef(function () { return AsyncPipe; }), name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
793
832
|
}
|
|
794
|
-
__decorate([
|
|
795
|
-
Required,
|
|
796
|
-
__metadata("design:type", Array)
|
|
797
|
-
], NavigationComponent.prototype, "items", void 0);
|
|
798
833
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationComponent, decorators: [{
|
|
799
834
|
type: Component,
|
|
800
835
|
args: [{ selector: 'ul[rxap-navigation]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, host: {
|
|
@@ -827,25 +862,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
827
862
|
}] } });
|
|
828
863
|
|
|
829
864
|
class LayoutComponent {
|
|
830
|
-
constructor(layoutComponentService, environment) {
|
|
865
|
+
constructor(layoutComponentService, environment, iconLoaderService) {
|
|
831
866
|
this.layoutComponentService = layoutComponentService;
|
|
832
867
|
this.environment = environment;
|
|
833
|
-
this.
|
|
868
|
+
this.userSettingsThemeService = inject(UserSettingsThemeService);
|
|
869
|
+
this.themeService = inject(ThemeService);
|
|
870
|
+
iconLoaderService.load();
|
|
871
|
+
this.fixedBottomGap = layoutComponentService.fixedBottomGap;
|
|
872
|
+
this.fixedTopGap = layoutComponentService.fixedTopGap;
|
|
873
|
+
this.pinned = layoutComponentService.pinned;
|
|
874
|
+
this.collapsable = layoutComponentService.collapsable;
|
|
875
|
+
this.opened = layoutComponentService.opened;
|
|
876
|
+
this.sidenavMode = layoutComponentService.mode;
|
|
877
|
+
this.logoSrc = this.layoutComponentService.logo.src ?? 'https://via.placeholder.com/256x128px';
|
|
878
|
+
this.logoWidth = this.layoutComponentService.logo.width ?? 256;
|
|
879
|
+
this.release = DetermineReleaseName(this.environment);
|
|
834
880
|
}
|
|
835
|
-
|
|
836
|
-
|
|
881
|
+
ngOnDestroy() {
|
|
882
|
+
this.userSettingsThemeService.stopSync();
|
|
837
883
|
}
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
884
|
+
ngOnInit() {
|
|
885
|
+
this.userSettingsThemeService.startSync();
|
|
886
|
+
this.userSettingsThemeService.get().then(theme => {
|
|
887
|
+
if (theme.preset && theme.preset !== 'default') {
|
|
888
|
+
this.themeService.setTheme(theme.preset, true);
|
|
889
|
+
}
|
|
890
|
+
if (theme.density && IsThemeDensity(theme.density) && theme.density !== ThemeDensity.Normal) {
|
|
891
|
+
this.themeService.setDensity(theme.density, true);
|
|
892
|
+
}
|
|
893
|
+
if (theme.typography && theme.typography !== 'default') {
|
|
894
|
+
this.themeService.setTypography(theme.typography, true);
|
|
895
|
+
}
|
|
896
|
+
});
|
|
846
897
|
}
|
|
847
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, deps: [{ token: LayoutComponentService }, { token: RXAP_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
848
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: LayoutComponent, isStandalone: true, selector: "rxap-layout", viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }], ngImport: i0, template: "<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header
|
|
898
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, deps: [{ token: LayoutComponentService }, { token: RXAP_ENVIRONMENT }, { token: i2$6.IconLoaderService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
899
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: LayoutComponent, isStandalone: true, selector: "rxap-layout", viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }], ngImport: i0, template: "<rxap-status-indicator class=\"fixed bottom-0 right-0 z-10\"></rxap-status-indicator>\n<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n <mat-sidenav-container [ngStyle]=\"{\n 'margin-top.px': fixedTopGap(),\n 'margin-bottom.px': fixedBottomGap(),\n }\" class=\"grow\">\n <mat-sidenav\n #matSidenav=\"matSidenav\"\n [fixedBottomGap]=\"fixedBottomGap()\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"fixedTopGap()\"\n [mode]=\"sidenavMode()\"\n [ngClass]=\"{ collapsable: collapsable() }\"\n class=\"sidenav\"\n [opened]=\"opened()\"\n >\n <div (mouseleave)=\"collapsable() && !pinned() && matSidenav.close()\"\n class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"layoutComponentService.togglePinned()\" *ngIf=\"collapsable()\"\n class=\"pl-2 self-stretch grow-0 flex flex-row justify-between items-center\">\n <span class=\"text-lg\" i18n>Navigation</span>\n <div class=\"flex flex-row items-center justify-center\" style=\"width: 64px\">\n <button mat-icon-button>\n <mat-icon *ngIf=\"!pinned()\">radio_button_unchecked</mat-icon>\n <mat-icon *ngIf=\"pinned()\">radio_button_checked</mat-icon>\n </button>\n </div>\n </div>\n\n <ul\n (mouseenter)=\"collapsable() && !pinned() && matSidenav.open()\"\n class=\"grow self-stretch\"\n root\n rxap-navigation\n >\n </ul>\n\n <img\n [src]=\"logoSrc\"\n [routerLink]=\"['/']\"\n [width]=\"logoWidth\"\n alt=\"logo\"\n class=\"grow-0 mx-16\"\n />\n <div class=\"grow-0 px-16\">\n <span>{{release}}</span>\n </div>\n </div>\n </mat-sidenav>\n <mat-sidenav-content [ngClass]=\"{ 'ml-16': collapsable() }\" class=\"p-4\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n <rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n</div>\n<!--<rxap-window-task-bar-container></rxap-window-task-bar-container>-->\n", styles: [":host .sidenav.collapsable:not(.mat-drawer-opened){transform:translate(calc(-100% + 64px))!important;visibility:visible!important;box-shadow:inherit!important;transition-property:transform;transition-delay:.25s;display:flex;border-right:solid 1px rgba(0,0,0,.12)}:host .sidenav.collapsable ::ng-deep .mat-drawer-inner-container::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "component", type: HeaderComponent, selector: "rxap-header", inputs: ["color"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$5.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$5.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i3$5.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FooterComponent, selector: "rxap-footer" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: NavigationComponent, selector: "ul[rxap-navigation]", inputs: ["items", "level", "root"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: StatusIndicatorComponent, selector: "rxap-status-indicator" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
849
900
|
}
|
|
850
901
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponent, decorators: [{
|
|
851
902
|
type: Component,
|
|
@@ -853,7 +904,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
853
904
|
HeaderComponent,
|
|
854
905
|
MatSidenavModule,
|
|
855
906
|
AsyncPipe,
|
|
856
|
-
FlexLayoutModule,
|
|
857
907
|
MatIconModule,
|
|
858
908
|
MatButtonModule,
|
|
859
909
|
RouterLink,
|
|
@@ -863,11 +913,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
863
913
|
NgOptimizedImage,
|
|
864
914
|
NavigationComponent,
|
|
865
915
|
RouterOutlet,
|
|
866
|
-
|
|
916
|
+
StatusIndicatorComponent,
|
|
917
|
+
NgStyle,
|
|
918
|
+
NgClass,
|
|
919
|
+
], template: "<rxap-status-indicator class=\"fixed bottom-0 right-0 z-10\"></rxap-status-indicator>\n<div class=\"flex flex-col h-screen justify-between\">\n <rxap-header class=\"z-10 w-full fixed top-0\"></rxap-header>\n <mat-sidenav-container [ngStyle]=\"{\n 'margin-top.px': fixedTopGap(),\n 'margin-bottom.px': fixedBottomGap(),\n }\" class=\"grow\">\n <mat-sidenav\n #matSidenav=\"matSidenav\"\n [fixedBottomGap]=\"fixedBottomGap()\"\n [fixedInViewport]=\"true\"\n [fixedTopGap]=\"fixedTopGap()\"\n [mode]=\"sidenavMode()\"\n [ngClass]=\"{ collapsable: collapsable() }\"\n class=\"sidenav\"\n [opened]=\"opened()\"\n >\n <div (mouseleave)=\"collapsable() && !pinned() && matSidenav.close()\"\n class=\"h-full py-2 flex flex-col items-center gap-y-5 justify-items-stretch\">\n\n <div (click)=\"layoutComponentService.togglePinned()\" *ngIf=\"collapsable()\"\n class=\"pl-2 self-stretch grow-0 flex flex-row justify-between items-center\">\n <span class=\"text-lg\" i18n>Navigation</span>\n <div class=\"flex flex-row items-center justify-center\" style=\"width: 64px\">\n <button mat-icon-button>\n <mat-icon *ngIf=\"!pinned()\">radio_button_unchecked</mat-icon>\n <mat-icon *ngIf=\"pinned()\">radio_button_checked</mat-icon>\n </button>\n </div>\n </div>\n\n <ul\n (mouseenter)=\"collapsable() && !pinned() && matSidenav.open()\"\n class=\"grow self-stretch\"\n root\n rxap-navigation\n >\n </ul>\n\n <img\n [src]=\"logoSrc\"\n [routerLink]=\"['/']\"\n [width]=\"logoWidth\"\n alt=\"logo\"\n class=\"grow-0 mx-16\"\n />\n <div class=\"grow-0 px-16\">\n <span>{{release}}</span>\n </div>\n </div>\n </mat-sidenav>\n <mat-sidenav-content [ngClass]=\"{ 'ml-16': collapsable() }\" class=\"p-4\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n <rxap-footer class=\"z-10 w-full fixed bottom-0\"></rxap-footer>\n</div>\n<!--<rxap-window-task-bar-container></rxap-window-task-bar-container>-->\n", styles: [":host .sidenav.collapsable:not(.mat-drawer-opened){transform:translate(calc(-100% + 64px))!important;visibility:visible!important;box-shadow:inherit!important;transition-property:transform;transition-delay:.25s;display:flex;border-right:solid 1px rgba(0,0,0,.12)}:host .sidenav.collapsable ::ng-deep .mat-drawer-inner-container::-webkit-scrollbar{display:none}\n"] }]
|
|
867
920
|
}], ctorParameters: function () { return [{ type: LayoutComponentService }, { type: undefined, decorators: [{
|
|
868
921
|
type: Inject,
|
|
869
922
|
args: [RXAP_ENVIRONMENT]
|
|
870
|
-
}] }]; }, propDecorators: { sidenav: [{
|
|
923
|
+
}] }, { type: i2$6.IconLoaderService }]; }, propDecorators: { sidenav: [{
|
|
871
924
|
type: ViewChild,
|
|
872
925
|
args: [MatSidenav, { static: true }]
|
|
873
926
|
}] } });
|
|
@@ -925,16 +978,14 @@ class SidenavComponent {
|
|
|
925
978
|
this.sidenav = sidenav;
|
|
926
979
|
}
|
|
927
980
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavComponent, deps: [{ token: SidenavComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
928
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SidenavComponent, isStandalone: true, selector: "rxap-sidenav", host: { classAttribute: "rxap-layout-sidenav" }, queries: [{ propertyName: "sidenavFooterDirective", first: true, predicate: SidenavFooterDirective, descendants: true }, { propertyName: "sidenavHeaderDirective", first: true, predicate: SidenavHeaderDirective, descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{ 'collapsed': sidenav.collapsed$ | async }\" class=\"container\">\n <div class=\"inner
|
|
981
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SidenavComponent, isStandalone: true, selector: "rxap-sidenav", host: { classAttribute: "rxap-layout-sidenav" }, queries: [{ propertyName: "sidenavFooterDirective", first: true, predicate: SidenavFooterDirective, descendants: true }, { propertyName: "sidenavHeaderDirective", first: true, predicate: SidenavHeaderDirective, descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{ 'collapsed': sidenav.collapsed$ | async }\" class=\"rxap-container\">\n <div class=\"inner flex flex-col justify-between items-stretch\">\n <ng-template [ngIf]=\"sidenavHeaderDirective?.template\">\n <div [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"header grow-0\">\n <ng-container *ngTemplateOutlet=\"sidenavHeaderDirective?.template ?? null\"></ng-container>\n </div>\n <mat-divider [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"grow-0\"></mat-divider>\n </ng-template>\n <div class=\"nav-container grow\">\n <ul class=\"flex flex-col\" root rxap-navigation></ul>\n </div>\n <mat-divider class=\"grow-0\"></mat-divider>\n <button (click)=\"sidenav.toggleNavigationCollapse()\" [ngClass]=\"{ 'collapsed': sidenav.collapsed$ | async }\"\n class=\"sidebar-toggle grow-0\"\n mat-button>\n <span class=\"sidebar-toggle-inner flex flex-row items-center gap-4\">\n <mat-icon class=\"arrow grow-0\">double_arrow</mat-icon>\n <span [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"label grow-0\" i18n>Collapse sidebar</span>\n </span>\n </button>\n <ng-template [ngIf]=\"sidenavFooterDirective?.template ?? null\">\n <mat-divider [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"grow-0\"></mat-divider>\n <div [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"footer grow-0\">\n <ng-container *ngTemplateOutlet=\"sidenavFooterDirective?.template ?? null\"></ng-container>\n </div>\n </ng-template>\n </div>\n</div>\n", styles: [".rxap-container,.rxap-container .inner{height:100%}.rxap-container .inner .header{padding-bottom:12px}.rxap-container .inner .footer{padding-top:12px}.rxap-container .inner .nav-container{overflow-y:scroll;padding-top:12px}.rxap-container .inner .nav-container::-webkit-scrollbar{width:6px}.rxap-container .inner .nav-container::-webkit-scrollbar-track{border-radius:2px}.rxap-container .inner .nav-container::-webkit-scrollbar-thumb{border-radius:10px}.rxap-container .sidebar-toggle{min-height:48px}.rxap-container .sidebar-toggle .sidebar-toggle-inner{padding:0}.rxap-container .sidebar-toggle .arrow{transform:rotate(180deg)}.rxap-container .sidebar-toggle.collapsed .arrow{transform:initial}.rxap-container .sidebar-toggle.collapsed .sidebar-toggle-inner{justify-content:space-around!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: NavigationComponent, selector: "ul[rxap-navigation]", inputs: ["items", "level", "root"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
929
982
|
}
|
|
930
983
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavComponent, decorators: [{
|
|
931
984
|
type: Component,
|
|
932
985
|
args: [{ selector: 'rxap-sidenav', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
933
986
|
class: 'rxap-layout-sidenav',
|
|
934
987
|
}, standalone: true, imports: [
|
|
935
|
-
ExtendedModule,
|
|
936
988
|
NgClass,
|
|
937
|
-
FlexModule,
|
|
938
989
|
NgIf,
|
|
939
990
|
NgTemplateOutlet,
|
|
940
991
|
MatDividerModule,
|
|
@@ -942,7 +993,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
942
993
|
MatButtonModule,
|
|
943
994
|
MatIconModule,
|
|
944
995
|
AsyncPipe,
|
|
945
|
-
], template: "<div [ngClass]=\"{ 'collapsed': sidenav.collapsed$ | async }\" class=\"container\">\n <div class=\"inner
|
|
996
|
+
], template: "<div [ngClass]=\"{ 'collapsed': sidenav.collapsed$ | async }\" class=\"rxap-container\">\n <div class=\"inner flex flex-col justify-between items-stretch\">\n <ng-template [ngIf]=\"sidenavHeaderDirective?.template\">\n <div [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"header grow-0\">\n <ng-container *ngTemplateOutlet=\"sidenavHeaderDirective?.template ?? null\"></ng-container>\n </div>\n <mat-divider [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"grow-0\"></mat-divider>\n </ng-template>\n <div class=\"nav-container grow\">\n <ul class=\"flex flex-col\" root rxap-navigation></ul>\n </div>\n <mat-divider class=\"grow-0\"></mat-divider>\n <button (click)=\"sidenav.toggleNavigationCollapse()\" [ngClass]=\"{ 'collapsed': sidenav.collapsed$ | async }\"\n class=\"sidebar-toggle grow-0\"\n mat-button>\n <span class=\"sidebar-toggle-inner flex flex-row items-center gap-4\">\n <mat-icon class=\"arrow grow-0\">double_arrow</mat-icon>\n <span [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"label grow-0\" i18n>Collapse sidebar</span>\n </span>\n </button>\n <ng-template [ngIf]=\"sidenavFooterDirective?.template ?? null\">\n <mat-divider [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"grow-0\"></mat-divider>\n <div [ngClass]=\"{ hide: sidenav.collapsed$ | async }\" class=\"footer grow-0\">\n <ng-container *ngTemplateOutlet=\"sidenavFooterDirective?.template ?? null\"></ng-container>\n </div>\n </ng-template>\n </div>\n</div>\n", styles: [".rxap-container,.rxap-container .inner{height:100%}.rxap-container .inner .header{padding-bottom:12px}.rxap-container .inner .footer{padding-top:12px}.rxap-container .inner .nav-container{overflow-y:scroll;padding-top:12px}.rxap-container .inner .nav-container::-webkit-scrollbar{width:6px}.rxap-container .inner .nav-container::-webkit-scrollbar-track{border-radius:2px}.rxap-container .inner .nav-container::-webkit-scrollbar-thumb{border-radius:10px}.rxap-container .sidebar-toggle{min-height:48px}.rxap-container .sidebar-toggle .sidebar-toggle-inner{padding:0}.rxap-container .sidebar-toggle .arrow{transform:rotate(180deg)}.rxap-container .sidebar-toggle.collapsed .arrow{transform:initial}.rxap-container .sidebar-toggle.collapsed .sidebar-toggle-inner{justify-content:space-around!important}\n"] }]
|
|
946
997
|
}], ctorParameters: function () { return [{ type: SidenavComponentService }]; }, propDecorators: { sidenavFooterDirective: [{
|
|
947
998
|
type: ContentChild,
|
|
948
999
|
args: [SidenavFooterDirective]
|
|
@@ -963,19 +1014,15 @@ class VersionComponent {
|
|
|
963
1014
|
this.subscription?.unsubscribe();
|
|
964
1015
|
}
|
|
965
1016
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: VersionComponent, deps: [{ token: VersionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
966
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: VersionComponent, isStandalone: true, selector: "rxap-version", ngImport: i0, template: "<div class=\"version
|
|
1017
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: VersionComponent, isStandalone: true, selector: "rxap-version", ngImport: i0, template: "<div class=\"version flex flex-col gap-2\">\n <div *ngFor=\"let module of modules | keyvalue\" class=\"flex flex-col\">\n <span class=\"name grow-0\">{{module.value.name}}</span>\n <span class=\"semantic grow-0\">{{module.value.semantic}}</span>\n <span class=\"hash grow-0\">{{module.value.hash}}</span>\n </div>\n</div>\n", styles: [".version{width:100%;font-size:9px;padding:8px}.version .name{padding-bottom:12px;font-size:10px}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
967
1018
|
}
|
|
968
|
-
__decorate([
|
|
969
|
-
Required,
|
|
970
|
-
__metadata("design:type", Object)
|
|
971
|
-
], VersionComponent.prototype, "modules", void 0);
|
|
972
1019
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: VersionComponent, decorators: [{
|
|
973
1020
|
type: Component,
|
|
974
|
-
args: [{ selector: 'rxap-version', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
1021
|
+
args: [{ selector: 'rxap-version', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgFor, KeyValuePipe], template: "<div class=\"version flex flex-col gap-2\">\n <div *ngFor=\"let module of modules | keyvalue\" class=\"flex flex-col\">\n <span class=\"name grow-0\">{{module.value.name}}</span>\n <span class=\"semantic grow-0\">{{module.value.semantic}}</span>\n <span class=\"hash grow-0\">{{module.value.hash}}</span>\n </div>\n</div>\n", styles: [".version{width:100%;font-size:9px;padding:8px}.version .name{padding-bottom:12px;font-size:10px}\n"] }]
|
|
975
1022
|
}], ctorParameters: function () { return [{ type: i1.VersionService, decorators: [{
|
|
976
1023
|
type: Inject,
|
|
977
1024
|
args: [VersionService]
|
|
978
|
-
}] }]; }
|
|
1025
|
+
}] }]; } });
|
|
979
1026
|
|
|
980
1027
|
class ToggleWindowSidenavButtonComponent {
|
|
981
1028
|
constructor() {
|
|
@@ -987,13 +1034,13 @@ class ToggleWindowSidenavButtonComponent {
|
|
|
987
1034
|
this.openWindowSidenavChange.emit(this.openWindowSidenav);
|
|
988
1035
|
}
|
|
989
1036
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ToggleWindowSidenavButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
990
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ToggleWindowSidenavButtonComponent, isStandalone: true, selector: "rxap-toggle-window-sidenav-button", inputs: { openWindowSidenav: "openWindowSidenav" }, outputs: { openWindowSidenavChange: "openWindowSidenavChange" }, host: { classAttribute: "rxap-toggle-window-sidenav-button" }, ngImport: i0, template: "<div class=\"toggle-button\">\n <button (click)=\"toggle()\" mat-icon-button>\n <ng-template [ngIfElse]=\"hide\" [ngIf]=\"!openWindowSidenav\">\n <mat-icon
|
|
1037
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ToggleWindowSidenavButtonComponent, isStandalone: true, selector: "rxap-toggle-window-sidenav-button", inputs: { openWindowSidenav: "openWindowSidenav" }, outputs: { openWindowSidenavChange: "openWindowSidenavChange" }, host: { classAttribute: "rxap-toggle-window-sidenav-button" }, ngImport: i0, template: "<div class=\"toggle-button\">\n <button (click)=\"toggle()\" mat-icon-button>\n <ng-template [ngIfElse]=\"hide\" [ngIf]=\"!openWindowSidenav\">\n <mat-icon svgIcon=\"arrow-left-bold\"></mat-icon>\n </ng-template>\n <ng-template #hide>\n <mat-icon svgIcon=\"arrow-right-bold\"></mat-icon>\n </ng-template>\n </button>\n</div>\n", styles: [".toggle-button{position:absolute;top:70px;right:0;z-index:10000;border-radius:15px 0 0 15px;border:1px solid black;background:black}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
991
1038
|
}
|
|
992
1039
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ToggleWindowSidenavButtonComponent, decorators: [{
|
|
993
1040
|
type: Component,
|
|
994
1041
|
args: [{ selector: 'rxap-toggle-window-sidenav-button', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
995
1042
|
class: 'rxap-toggle-window-sidenav-button',
|
|
996
|
-
}, standalone: true, imports: [MatButtonModule, NgIf, MatIconModule], template: "<div class=\"toggle-button\">\n <button (click)=\"toggle()\" mat-icon-button>\n <ng-template [ngIfElse]=\"hide\" [ngIf]=\"!openWindowSidenav\">\n <mat-icon
|
|
1043
|
+
}, standalone: true, imports: [MatButtonModule, NgIf, MatIconModule], template: "<div class=\"toggle-button\">\n <button (click)=\"toggle()\" mat-icon-button>\n <ng-template [ngIfElse]=\"hide\" [ngIf]=\"!openWindowSidenav\">\n <mat-icon svgIcon=\"arrow-left-bold\"></mat-icon>\n </ng-template>\n <ng-template #hide>\n <mat-icon svgIcon=\"arrow-right-bold\"></mat-icon>\n </ng-template>\n </button>\n</div>\n", styles: [".toggle-button{position:absolute;top:70px;right:0;z-index:10000;border-radius:15px 0 0 15px;border:1px solid black;background:black}\n"] }]
|
|
997
1044
|
}], propDecorators: { openWindowSidenav: [{
|
|
998
1045
|
type: Input
|
|
999
1046
|
}], openWindowSidenavChange: [{
|
|
@@ -1035,11 +1082,11 @@ class WindowContainerSidenavComponent {
|
|
|
1035
1082
|
}
|
|
1036
1083
|
}
|
|
1037
1084
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: WindowContainerSidenavComponent, deps: [{ token: WindowContainerSidenavService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1038
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: WindowContainerSidenavComponent, isStandalone: true, selector: "rxap-window-container-sidenav", ngImport: i0, template: "<div class=\"
|
|
1085
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: WindowContainerSidenavComponent, isStandalone: true, selector: "rxap-window-container-sidenav", ngImport: i0, template: "<div class=\"flex flex-col gap-4 p-2\">\n\n <div *ngFor=\"let portalId of portals.keys(); trackBy: trackBy\" class=\"grow-0\">\n <ng-template [cdkPortalOutlet]=\"portals.get(portalId)\"></ng-template>\n </div>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1039
1086
|
}
|
|
1040
1087
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: WindowContainerSidenavComponent, decorators: [{
|
|
1041
1088
|
type: Component,
|
|
1042
|
-
args: [{ selector: 'rxap-window-container-sidenav', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
1089
|
+
args: [{ selector: 'rxap-window-container-sidenav', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgFor, PortalModule], template: "<div class=\"flex flex-col gap-4 p-2\">\n\n <div *ngFor=\"let portalId of portals.keys(); trackBy: trackBy\" class=\"grow-0\">\n <ng-template [cdkPortalOutlet]=\"portals.get(portalId)\"></ng-template>\n </div>\n\n</div>\n" }]
|
|
1043
1090
|
}], ctorParameters: function () { return [{ type: i1.WindowContainerSidenavService, decorators: [{
|
|
1044
1091
|
type: Inject,
|
|
1045
1092
|
args: [WindowContainerSidenavService]
|
|
@@ -1080,35 +1127,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
|
|
|
1080
1127
|
args: [ViewContainerRef]
|
|
1081
1128
|
}] }]; } });
|
|
1082
1129
|
|
|
1083
|
-
class I18nCheckGuard {
|
|
1084
|
-
constructor(config, localId, i18nService, userProfileService) {
|
|
1085
|
-
this.config = config;
|
|
1086
|
-
this.localId = localId;
|
|
1087
|
-
this.i18nService = i18nService;
|
|
1088
|
-
this.userProfileService = userProfileService;
|
|
1089
|
-
}
|
|
1090
|
-
async canActivate() {
|
|
1091
|
-
const selectedLanguage = (await this.userProfileService.getLanguage()) ?? 'en';
|
|
1092
|
-
if (this.i18nService.currentLanguage !== selectedLanguage) {
|
|
1093
|
-
await this.i18nService.redirect(selectedLanguage);
|
|
1094
|
-
return false;
|
|
1095
|
-
}
|
|
1096
|
-
return true;
|
|
1097
|
-
}
|
|
1098
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nCheckGuard, deps: [{ token: i1$2.ConfigService }, { token: LOCALE_ID }, { token: I18nService }, { token: i1$1.RxapUserProfileService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1099
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nCheckGuard, providedIn: 'root' }); }
|
|
1100
|
-
}
|
|
1101
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nCheckGuard, decorators: [{
|
|
1102
|
-
type: Injectable,
|
|
1103
|
-
args: [{ providedIn: 'root' }]
|
|
1104
|
-
}], ctorParameters: function () { return [{ type: i1$2.ConfigService }, { type: undefined, decorators: [{
|
|
1105
|
-
type: Inject,
|
|
1106
|
-
args: [LOCALE_ID]
|
|
1107
|
-
}] }, { type: I18nService }, { type: i1$1.RxapUserProfileService }]; } });
|
|
1108
|
-
|
|
1109
1130
|
/**
|
|
1110
1131
|
* Generated bundle index. Do not edit.
|
|
1111
1132
|
*/
|
|
1112
1133
|
|
|
1113
|
-
export { AppUrlService, AppsButtonComponent, FooterComponent, FooterDirective, HeaderComponent,
|
|
1134
|
+
export { AppUrlService, AppsButtonComponent, EXTRACT_USERNAME_FROM_PROFILE, FooterComponent, FooterDirective, HeaderComponent, IsNavigationDividerItem, IsNavigationInsertItem, IsNavigationItem, LayoutComponent, LayoutComponentService, NavigationComponent, NavigationItemComponent, NavigationProgressBarComponent, NavigationService, RXAP_FOOTER_COMPONENT, RXAP_HEADER_COMPONENT, RXAP_LAYOUT_APPS_GRID, RXAP_LOGO_CONFIG, RXAP_NAVIGATION_CONFIG, RXAP_NAVIGATION_CONFIG_INSERTS, ReplaceRouterPathsService, ResetButtonComponent, SidenavComponent, SidenavComponentService, SidenavFooterDirective, SidenavHeaderDirective, SidenavToggleButtonComponent, SignOutComponent, ToggleWindowSidenavButtonComponent, UserProfileIconComponent, VersionComponent, WindowContainerSidenavComponent };
|
|
1114
1135
|
//# sourceMappingURL=rxap-layout.mjs.map
|