ngssm-shell 19.3.0 → 19.3.2

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.
@@ -1,30 +1,28 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Input, ChangeDetectionStrategy, Component, HostBinding, makeEnvironmentProviders } from '@angular/core';
3
- import * as i1 from 'ngssm-store';
4
- import { NgSsmFeatureState, NgSsmComponent, provideReducers, provideEffect } from 'ngssm-store';
2
+ import { Injectable, inject, input, computed, ChangeDetectionStrategy, Component, ViewContainerRef, signal, effect, makeEnvironmentProviders } from '@angular/core';
3
+ import { NgSsmFeatureState, Store, createSignal, provideReducers, provideEffect } from 'ngssm-store';
5
4
  import { __decorate } from 'tslib';
6
5
  import update from 'immutability-helper';
7
- import * as i2 from '@angular/common';
6
+ import * as i1 from '@angular/common';
8
7
  import { CommonModule } from '@angular/common';
9
- import { BehaviorSubject, combineLatest, takeUntil } from 'rxjs';
10
- import * as i3 from '@angular/material/card';
8
+ import * as i2 from '@angular/material/card';
11
9
  import { MatCardModule } from '@angular/material/card';
12
- import * as i4 from '@angular/material/icon';
10
+ import * as i3 from '@angular/material/icon';
13
11
  import { MatIconModule } from '@angular/material/icon';
14
- import * as i4$1 from '@angular/material/button';
12
+ import * as i2$1 from '@angular/material/button';
15
13
  import { MatButtonModule } from '@angular/material/button';
16
- import * as i4$2 from '@angular/router';
14
+ import * as i2$2 from '@angular/router';
17
15
  import { RouterModule } from '@angular/router';
18
- import * as i4$3 from '@angular/material/sidenav';
16
+ import * as i3$1 from '@angular/material/sidenav';
19
17
  import { MatSidenavModule } from '@angular/material/sidenav';
20
- import * as i5 from '@angular/material/toolbar';
18
+ import * as i4 from '@angular/material/toolbar';
21
19
  import { MatToolbarModule } from '@angular/material/toolbar';
22
- import * as i8 from '@angular/material/badge';
20
+ import * as i7 from '@angular/material/badge';
23
21
  import { MatBadgeModule } from '@angular/material/badge';
24
- import * as i3$1 from '@angular/material/divider';
22
+ import * as i1$1 from '@angular/material/divider';
25
23
  import { MatDividerModule } from '@angular/material/divider';
26
24
  import { NgssmAceEditorMode, NgssmAceEditorComponent } from 'ngssm-ace-editor';
27
- import * as i1$1 from '@angular/material/snack-bar';
25
+ import * as i1$2 from '@angular/material/snack-bar';
28
26
 
29
27
  var ShellActionType;
30
28
  (function (ShellActionType) {
@@ -136,10 +134,10 @@ class NavigationBarReducer {
136
134
  }
137
135
  return state;
138
136
  }
139
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: NavigationBarReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
140
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: NavigationBarReducer }); }
137
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NavigationBarReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
138
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NavigationBarReducer }); }
141
139
  }
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: NavigationBarReducer, decorators: [{
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NavigationBarReducer, decorators: [{
143
141
  type: Injectable
144
142
  }] });
145
143
 
@@ -184,185 +182,135 @@ class ShellNotificationsReducer {
184
182
  }
185
183
  return state;
186
184
  }
187
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
188
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationsReducer }); }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
186
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationsReducer }); }
189
187
  }
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationsReducer, decorators: [{
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationsReducer, decorators: [{
191
189
  type: Injectable
192
190
  }] });
193
191
 
194
- class ShellNotificationComponent extends NgSsmComponent {
195
- constructor(store) {
196
- super(store);
197
- this._displayDetailsButton$ = new BehaviorSubject(false);
198
- this._shellNotification$ = new BehaviorSubject(undefined);
199
- this._shellNotificationIndex$ = new BehaviorSubject(null);
200
- this.shellNotificationType = ShellNotificationType;
201
- combineLatest([this._shellNotificationIndex$, this.watch((s) => selectShellState(s).shellNotifications.notifications)])
202
- .pipe(takeUntil(this.unsubscribeAll$))
203
- .subscribe((values) => {
204
- this._shellNotification$.next((values[1] ?? [])[values[0] ?? -1]);
192
+ class ShellNotificationComponent {
193
+ constructor() {
194
+ this.store = inject(Store);
195
+ this.notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);
196
+ this.displayDetailsButton = input(false);
197
+ this.shellNotificationIndex = input();
198
+ this.shellNotification = computed(() => {
199
+ return this.notifications()[this.shellNotificationIndex() ?? -1];
205
200
  });
206
- }
207
- set displayDetailsButton(value) {
208
- this._displayDetailsButton$.next(value);
209
- }
210
- set shellNotificationIndex(value) {
211
- this._shellNotificationIndex$.next(value);
212
- }
213
- get shellNotification$() {
214
- return this._shellNotification$.asObservable();
215
- }
216
- get displayDetailsButton$() {
217
- return this._displayDetailsButton$.asObservable();
201
+ this.shellNotificationType = ShellNotificationType;
218
202
  }
219
203
  displayDetails() {
220
- this.dispatchAction(new DisplayNotificationDetailsAction(this._shellNotificationIndex$.value ?? -1));
204
+ this.store.dispatchAction(new DisplayNotificationDetailsAction(this.shellNotificationIndex() ?? -1));
221
205
  }
222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
223
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: ShellNotificationComponent, isStandalone: true, selector: "ngssm-shell-notification", inputs: { displayDetailsButton: "displayDetailsButton", shellNotificationIndex: "shellNotificationIndex" }, usesInheritance: true, ngImport: i0, template: "<mat-card\n appearance=\"outlined\" *ngIf=\"(shellNotification$ | async) as shellNotification; else noNotification\"\n class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{'ngssm-shell-notification-success' : shellNotification.type === shellNotificationType.success, 'ngssm-shell-notification-error':shellNotification.type === shellNotificationType.error}\">\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification \"\n *ngIf=\"shellNotification.type === shellNotificationType.success\">\n </mat-icon>\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification \"\n *ngIf=\"shellNotification.type === shellNotificationType.error\">\n </mat-icon>\n <mat-card-title>{{shellNotification.title}}</mat-card-title>\n <mat-card-subtitle>{{shellNotification.timestamp | date:'shortTime'}}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button *ngIf=\"(displayDetailsButton$ | async) === true && shellNotification.details\"\n (click)=\"displayDetails()\">\n Display details\n </button>\n </div>\n</mat-card>\n\n<ng-template #noNotification>\n No notification to display...\n</ng-template>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { 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: i4$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.6", type: ShellNotificationComponent, isStandalone: true, selector: "ngssm-shell-notification", inputs: { displayDetailsButton: { classPropertyName: "displayDetailsButton", publicName: "displayDetailsButton", isSignal: true, isRequired: false, transformFunction: null }, shellNotificationIndex: { classPropertyName: "shellNotificationIndex", publicName: "shellNotificationIndex", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (shellNotification(); as notification) {\n <mat-card class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{\n 'ngssm-shell-notification-success': notification.type === shellNotificationType.success,\n 'ngssm-shell-notification-error': notification.type === shellNotificationType.error\n }\">\n @if (notification.type === shellNotificationType.success) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n @if (notification.type === shellNotificationType.error) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n <mat-card-title>{{ notification.title }}</mat-card-title>\n <mat-card-subtitle>{{ notification.timestamp | date: 'shortTime' }}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n @if (displayDetailsButton() && notification.details) {\n <button mat-button (click)=\"displayDetails()\">Display details</button>\n }\n </div>\n </mat-card>\n} @else {\n No notification to display...\n}\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
224
208
  }
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationComponent, decorators: [{
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationComponent, decorators: [{
226
210
  type: Component,
227
- args: [{ selector: 'ngssm-shell-notification', imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card\n appearance=\"outlined\" *ngIf=\"(shellNotification$ | async) as shellNotification; else noNotification\"\n class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{'ngssm-shell-notification-success' : shellNotification.type === shellNotificationType.success, 'ngssm-shell-notification-error':shellNotification.type === shellNotificationType.error}\">\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification \"\n *ngIf=\"shellNotification.type === shellNotificationType.success\">\n </mat-icon>\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification \"\n *ngIf=\"shellNotification.type === shellNotificationType.error\">\n </mat-icon>\n <mat-card-title>{{shellNotification.title}}</mat-card-title>\n <mat-card-subtitle>{{shellNotification.timestamp | date:'shortTime'}}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button *ngIf=\"(displayDetailsButton$ | async) === true && shellNotification.details\"\n (click)=\"displayDetails()\">\n Display details\n </button>\n </div>\n</mat-card>\n\n<ng-template #noNotification>\n No notification to display...\n</ng-template>", styles: [":host{display:flex;flex-direction:column}\n"] }]
228
- }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { displayDetailsButton: [{
229
- type: Input
230
- }], shellNotificationIndex: [{
231
- type: Input
232
- }] } });
211
+ args: [{ selector: 'ngssm-shell-notification', imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (shellNotification(); as notification) {\n <mat-card class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{\n 'ngssm-shell-notification-success': notification.type === shellNotificationType.success,\n 'ngssm-shell-notification-error': notification.type === shellNotificationType.error\n }\">\n @if (notification.type === shellNotificationType.success) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n @if (notification.type === shellNotificationType.error) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n <mat-card-title>{{ notification.title }}</mat-card-title>\n <mat-card-subtitle>{{ notification.timestamp | date: 'shortTime' }}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n @if (displayDetailsButton() && notification.details) {\n <button mat-button (click)=\"displayDetails()\">Display details</button>\n }\n </div>\n </mat-card>\n} @else {\n No notification to display...\n}\n", styles: [":host{display:flex;flex-direction:column}\n"] }]
212
+ }] });
233
213
 
234
- class ShellNotificationPopupComponent extends NgSsmComponent {
235
- constructor(store) {
236
- super(store);
237
- this._shellNotificationIndex$ = new BehaviorSubject(-1);
238
- this.watch((s) => selectShellState(s).shellNotifications.notifications).subscribe((notifications) => {
239
- const items = notifications ?? [];
240
- this._shellNotificationIndex$.next(items.length - 1);
214
+ class ShellNotificationPopupComponent {
215
+ constructor() {
216
+ this.shellNotificationIndex = createSignal((state) => {
217
+ const items = selectShellState(state).shellNotifications.notifications;
218
+ return items.length - 1;
241
219
  });
242
220
  }
243
- get shellNotificationIndex$() {
244
- return this._shellNotificationIndex$.asObservable();
245
- }
246
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationPopupComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: ShellNotificationPopupComponent, isStandalone: true, selector: "ngssm-shell-notification-popup", usesInheritance: true, ngImport: i0, template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex$ | async\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "component", type: ShellNotificationComponent, selector: "ngssm-shell-notification", inputs: ["displayDetailsButton", "shellNotificationIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
221
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
222
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.6", type: ShellNotificationPopupComponent, isStandalone: true, selector: "ngssm-shell-notification-popup", ngImport: i0, template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ShellNotificationComponent, selector: "ngssm-shell-notification", inputs: ["displayDetailsButton", "shellNotificationIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
248
223
  }
249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationPopupComponent, decorators: [{
224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationPopupComponent, decorators: [{
250
225
  type: Component,
251
- args: [{ selector: 'ngssm-shell-notification-popup', imports: [CommonModule, ShellNotificationComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex$ | async\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"] }]
252
- }], ctorParameters: () => [{ type: i1.Store }] });
226
+ args: [{ selector: 'ngssm-shell-notification-popup', imports: [CommonModule, ShellNotificationComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"] }]
227
+ }] });
253
228
 
254
- class WrapperComponent extends NgSsmComponent {
255
- constructor(store, viewContainerRef) {
256
- super(store);
257
- this.viewContainerRef = viewContainerRef;
258
- this._innerHtml$ = new BehaviorSubject(undefined);
259
- }
260
- set item(value) {
261
- if (typeof value === 'string') {
262
- this._innerHtml$.next(value);
263
- }
264
- else if (value) {
265
- this.viewContainerRef.clear();
266
- this.viewContainerRef.createComponent(value);
267
- }
268
- }
269
- get innerHtml$() {
270
- return this._innerHtml$.asObservable();
229
+ class WrapperComponent {
230
+ constructor() {
231
+ this.viewContainerRef = inject(ViewContainerRef);
232
+ this.item = input();
233
+ this.innerHtml = signal(undefined);
234
+ effect(() => {
235
+ const inputItem = this.item();
236
+ if (typeof inputItem === 'string') {
237
+ this.innerHtml.set(inputItem);
238
+ }
239
+ else if (inputItem) {
240
+ this.viewContainerRef.clear();
241
+ this.viewContainerRef.createComponent(inputItem);
242
+ }
243
+ });
271
244
  }
272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: WrapperComponent, deps: [{ token: i1.Store }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
273
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: WrapperComponent, isStandalone: true, selector: "ngssm-wrapper", inputs: { item: "item" }, usesInheritance: true, ngImport: i0, template: "<span *ngIf=\"(innerHtml$ | async) as innerHtml\" [innerHTML]=\"innerHtml\"></span>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: WrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
246
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.6", type: WrapperComponent, isStandalone: true, selector: "ngssm-wrapper", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
274
247
  }
275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: WrapperComponent, decorators: [{
248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: WrapperComponent, decorators: [{
276
249
  type: Component,
277
- args: [{ selector: 'ngssm-wrapper', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span *ngIf=\"(innerHtml$ | async) as innerHtml\" [innerHTML]=\"innerHtml\"></span>" }]
278
- }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ViewContainerRef }], propDecorators: { item: [{
279
- type: Input
280
- }] } });
250
+ args: [{ selector: 'ngssm-wrapper', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n" }]
251
+ }], ctorParameters: () => [] });
281
252
 
282
- class SideNavComponent extends NgSsmComponent {
283
- constructor(store) {
284
- super(store);
285
- this._sidenavConfig$ = new BehaviorSubject(undefined);
286
- this.class = 'ngssm-sidenav';
287
- }
288
- set config(value) {
289
- this._sidenavConfig$.next(value);
290
- }
291
- get sidenavConfig$() {
292
- return this._sidenavConfig$.asObservable();
253
+ class SideNavComponent {
254
+ constructor() {
255
+ this.config = input();
293
256
  }
294
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: SideNavComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
295
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: SideNavComponent, isStandalone: true, selector: "ngssm-side-nav", inputs: { config: "config" }, host: { properties: { "class": "this.class" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ngssm-sidenav-main-container\" *ngIf=\"(sidenavConfig$ | async) as config\">\n <div class=\"ngssm-sidenav-title\" *ngIf=\"config.title\">{{config.title}}</div>\n <mat-divider *ngIf=\"config.title\"></mat-divider>\n <ng-container *ngFor=\"let section of config.sections;let last = last;\" class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n <div *ngIf=\"!section.route\" class=\"ngssm-sidenav-section-item\">\n <span *ngIf=\"section.icon\" [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{section.label}}\n <ngssm-wrapper *ngIf=\"section.component\" [item]=\"section.component\"></ngssm-wrapper>\n </div>\n\n <a [routerLink]=\"section.route\" routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{exact:section.linkActiveOnlyIfExact === true}\" *ngIf=\"section.route\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n <span *ngIf=\"section.icon\" [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{section.label}}\n <ngssm-wrapper *ngIf=\"section.component\" [item]=\"section.component\"></ngssm-wrapper>\n </div>\n </a>\n </div>\n <div *ngFor=\"let item of section.items\" class=\"ngssm-sidenav-item-container\">\n <div *ngIf=\"!item.route\" class=\"ngssm-sidenav-section-item\">\n <span *ngIf=\"item.icon\" [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{item.label}}\n <ngssm-wrapper *ngIf=\"item.component\" [item]=\"item.component\"></ngssm-wrapper>\n </div>\n\n <a [routerLink]=\"item.route\" routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{exact:item.linkActiveOnlyIfExact === true}\" *ngIf=\"item.route\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n <span *ngIf=\"item.icon\" [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{item.label}}\n <ngssm-wrapper *ngIf=\"item.component\" [item]=\"item.component\"></ngssm-wrapper>\n </div>\n </a>\n </div>\n\n <mat-divider *ngIf=\"!last\"></mat-divider>\n </ng-container>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: WrapperComponent, selector: "ngssm-wrapper", inputs: ["item"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
257
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: SideNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
258
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.6", type: SideNavComponent, isStandalone: true, selector: "ngssm-side-nav", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngssm-sidenav" }, ngImport: i0, template: "@if (config(); as sidenavConfig) {\n <div class=\"ngssm-sidenav-main-container\">\n @if (sidenavConfig.title) {\n <div class=\"ngssm-sidenav-title\">{{ sidenavConfig.title }}</div>\n <mat-divider></mat-divider>\n }\n\n @for (section of sidenavConfig.sections; track section; let last = $last) {\n <ng-container class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n @if (!section.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"section.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: section.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n @for (item of section.items; track item) {\n <div class=\"ngssm-sidenav-item-container\">\n @if (!item.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: item.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n }\n\n @if (!last) {\n <mat-divider></mat-divider>\n }\n </ng-container>\n }\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: WrapperComponent, selector: "ngssm-wrapper", inputs: ["item"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
296
259
  }
297
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: SideNavComponent, decorators: [{
260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: SideNavComponent, decorators: [{
298
261
  type: Component,
299
- args: [{ selector: 'ngssm-side-nav', imports: [CommonModule, MatDividerModule, RouterModule, WrapperComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ngssm-sidenav-main-container\" *ngIf=\"(sidenavConfig$ | async) as config\">\n <div class=\"ngssm-sidenav-title\" *ngIf=\"config.title\">{{config.title}}</div>\n <mat-divider *ngIf=\"config.title\"></mat-divider>\n <ng-container *ngFor=\"let section of config.sections;let last = last;\" class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n <div *ngIf=\"!section.route\" class=\"ngssm-sidenav-section-item\">\n <span *ngIf=\"section.icon\" [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{section.label}}\n <ngssm-wrapper *ngIf=\"section.component\" [item]=\"section.component\"></ngssm-wrapper>\n </div>\n\n <a [routerLink]=\"section.route\" routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{exact:section.linkActiveOnlyIfExact === true}\" *ngIf=\"section.route\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n <span *ngIf=\"section.icon\" [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{section.label}}\n <ngssm-wrapper *ngIf=\"section.component\" [item]=\"section.component\"></ngssm-wrapper>\n </div>\n </a>\n </div>\n <div *ngFor=\"let item of section.items\" class=\"ngssm-sidenav-item-container\">\n <div *ngIf=\"!item.route\" class=\"ngssm-sidenav-section-item\">\n <span *ngIf=\"item.icon\" [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{item.label}}\n <ngssm-wrapper *ngIf=\"item.component\" [item]=\"item.component\"></ngssm-wrapper>\n </div>\n\n <a [routerLink]=\"item.route\" routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{exact:item.linkActiveOnlyIfExact === true}\" *ngIf=\"item.route\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n <span *ngIf=\"item.icon\" [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{item.label}}\n <ngssm-wrapper *ngIf=\"item.component\" [item]=\"item.component\"></ngssm-wrapper>\n </div>\n </a>\n </div>\n\n <mat-divider *ngIf=\"!last\"></mat-divider>\n </ng-container>\n</div>" }]
300
- }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { class: [{
301
- type: HostBinding,
302
- args: ['class']
303
- }], config: [{
304
- type: Input
305
- }] } });
262
+ args: [{ selector: 'ngssm-side-nav', imports: [CommonModule, MatDividerModule, RouterModule, WrapperComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
263
+ class: 'ngssm-sidenav'
264
+ }, template: "@if (config(); as sidenavConfig) {\n <div class=\"ngssm-sidenav-main-container\">\n @if (sidenavConfig.title) {\n <div class=\"ngssm-sidenav-title\">{{ sidenavConfig.title }}</div>\n <mat-divider></mat-divider>\n }\n\n @for (section of sidenavConfig.sections; track section; let last = $last) {\n <ng-container class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n @if (!section.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"section.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: section.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n @for (item of section.items; track item) {\n <div class=\"ngssm-sidenav-item-container\">\n @if (!item.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: item.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n }\n\n @if (!last) {\n <mat-divider></mat-divider>\n }\n </ng-container>\n }\n </div>\n}\n" }]
265
+ }] });
306
266
 
307
- class ShellNotificationsComponent extends NgSsmComponent {
308
- constructor(store) {
309
- super(store);
310
- this._notificationSelected$ = new BehaviorSubject(false);
311
- this._notifications$ = new BehaviorSubject([]);
312
- this._details$ = new BehaviorSubject('');
267
+ class ShellNotificationsComponent {
268
+ constructor() {
269
+ this.store = inject(Store);
270
+ this.selectedNotificaitonIndex = createSignal((state) => selectShellState(state).shellNotifications.selectedNotificaitonIndex);
271
+ this.notificationSelected = signal(false);
272
+ this.notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);
273
+ this.details = signal('');
313
274
  this.shellNotificationType = ShellNotificationType;
314
275
  this.ngssmAceEditorMode = NgssmAceEditorMode;
315
- this.watch((s) => selectShellState(s).shellNotifications.notifications).subscribe((values) => this._notifications$.next(values ?? []));
316
- combineLatest([
317
- this.watch((s) => selectShellState(s).shellNotifications.notifications),
318
- this.watch((s) => selectShellState(s).shellNotifications.selectedNotificaitonIndex)
319
- ]).subscribe((values) => {
320
- const id = values[1] ?? -1;
321
- this._notificationSelected$.next(id !== -1);
322
- const details = (values[0] ?? [])[id]?.details;
276
+ effect(() => {
277
+ const items = this.notifications();
278
+ const index = this.selectedNotificaitonIndex();
279
+ const id = index ?? -1;
280
+ this.notificationSelected.set(id !== -1);
281
+ const details = items[id]?.details;
323
282
  if (details) {
324
- this._details$.next(JSON.stringify(details, null, 2));
283
+ this.details.set(JSON.stringify(details, null, 2));
325
284
  }
326
285
  else {
327
- this._details$.next('');
286
+ this.details.set('');
328
287
  }
329
288
  });
330
289
  }
331
- get notificationSelected$() {
332
- return this._notificationSelected$.asObservable();
333
- }
334
- get notifications$() {
335
- return this._notifications$.asObservable();
336
- }
337
- get details$() {
338
- return this._details$.asObservable();
339
- }
340
290
  closeDetailsPanel() {
341
- this.dispatchAction(new DisplayNotificationDetailsAction(undefined));
291
+ this.store.dispatchAction(new DisplayNotificationDetailsAction(undefined));
342
292
  }
343
293
  clearAll() {
344
- this.dispatchActionType(ShellActionType.clearAllNotifications);
294
+ this.store.dispatchActionType(ShellActionType.clearAllNotifications);
345
295
  }
346
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationsComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
347
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: ShellNotificationsComponent, isStandalone: true, selector: "ngssm-shell-notifications", usesInheritance: true, ngImport: i0, template: "<mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\"\n *ngIf=\"(notificationSelected$ | async) === false; else notificationDetails\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"(notifications$ | async)?.length === 0\"\n (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n <ngssm-shell-notification *ngFor=\"let notification of notifications$ | async;let index=index\"\n [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\">\n </ngssm-shell-notification>\n </mat-card-content>\n</mat-card>\n\n<ng-template #notificationDetails>\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"(details$ | async) ?? ''\"\n [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n</ng-template>", styles: [":host{display:flex;flex-direction:column;padding:8px;min-width:400px;max-width:400px}:host .notifications-container{overflow:auto}:host ngssm-shell-notification{margin:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4$1.MatIconButton, selector: "button[mat-icon-button]", 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: NgssmAceEditorComponent, selector: "ngssm-ace-editor", inputs: ["content", "readonly", "editorMode"], outputs: ["contentChanged", "isValidChanged", "editorReady"] }, { kind: "component", type: ShellNotificationComponent, selector: "ngssm-shell-notification", inputs: ["displayDetailsButton", "shellNotificationIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
296
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
297
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.6", type: ShellNotificationsComponent, isStandalone: true, selector: "ngssm-shell-notifications", ngImport: i0, template: "@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n", styles: [":host{display:flex;flex-direction:column;padding:8px;min-width:400px;max-width:400px}:host .notifications-container{overflow:auto}:host ngssm-shell-notification{margin:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: NgssmAceEditorComponent, selector: "ngssm-ace-editor", inputs: ["content", "readonly", "editorMode"], outputs: ["contentChanged", "isValidChanged", "editorReady"] }, { kind: "component", type: ShellNotificationComponent, selector: "ngssm-shell-notification", inputs: ["displayDetailsButton", "shellNotificationIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
348
298
  }
349
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellNotificationsComponent, decorators: [{
299
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellNotificationsComponent, decorators: [{
350
300
  type: Component,
351
- args: [{ selector: 'ngssm-shell-notifications', imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\"\n *ngIf=\"(notificationSelected$ | async) === false; else notificationDetails\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"(notifications$ | async)?.length === 0\"\n (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n <ngssm-shell-notification *ngFor=\"let notification of notifications$ | async;let index=index\"\n [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\">\n </ngssm-shell-notification>\n </mat-card-content>\n</mat-card>\n\n<ng-template #notificationDetails>\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"(details$ | async) ?? ''\"\n [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n</ng-template>", styles: [":host{display:flex;flex-direction:column;padding:8px;min-width:400px;max-width:400px}:host .notifications-container{overflow:auto}:host ngssm-shell-notification{margin:4px}\n"] }]
352
- }], ctorParameters: () => [{ type: i1.Store }] });
301
+ args: [{ selector: 'ngssm-shell-notifications', imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n", styles: [":host{display:flex;flex-direction:column;padding:8px;min-width:400px;max-width:400px}:host .notifications-container{overflow:auto}:host ngssm-shell-notification{margin:4px}\n"] }]
302
+ }], ctorParameters: () => [] });
353
303
 
354
- class ShellComponent extends NgSsmComponent {
355
- constructor(store) {
356
- super(store);
357
- this._shellConfig$ = new BehaviorSubject(undefined);
358
- this._navigationBarOpen$ = new BehaviorSubject(true);
359
- this.class = 'ngssm-shell';
360
- combineLatest([
361
- this.watch((s) => selectShellState(s).navigationBarOpen),
362
- this.watch((s) => selectShellState(s).navigationBarLockStatus)
363
- ]).subscribe((values) => {
304
+ class ShellComponent {
305
+ constructor() {
306
+ this.store = inject(Store);
307
+ this.navigationBarOpen = createSignal((state) => selectShellState(state).navigationBarOpen);
308
+ this.navigationBarLockStatus = createSignal((state) => selectShellState(state).navigationBarLockStatus);
309
+ this.shellConfig = input();
310
+ this.notificationsCount = createSignal((state) => selectShellState(state).shellNotifications.notifications.length);
311
+ this.navigationBarRendered = computed(() => {
364
312
  let isOpen = false;
365
- switch (values[1]) {
313
+ switch (this.navigationBarLockStatus()) {
366
314
  case LockStatus.lockedClosed:
367
315
  isOpen = false;
368
316
  break;
@@ -370,31 +318,19 @@ class ShellComponent extends NgSsmComponent {
370
318
  isOpen = true;
371
319
  break;
372
320
  default:
373
- isOpen = values[0];
321
+ isOpen = this.navigationBarOpen();
374
322
  break;
375
323
  }
376
- this._navigationBarOpen$.next(isOpen);
324
+ return isOpen;
377
325
  });
378
326
  }
379
- set shellConfig(value) {
380
- this._shellConfig$.next(value);
381
- }
382
- get navigationBarOpen$() {
383
- return this._navigationBarOpen$.asObservable();
384
- }
385
- get shellConfig$() {
386
- return this._shellConfig$.asObservable();
387
- }
388
- get notificationsCount$() {
389
- return this.watch((s) => selectShellState(s).shellNotifications.notifications.length);
390
- }
391
327
  toggleNavigationBarState() {
392
- this.dispatchActionType(ShellActionType.toggleNavigationBarState);
328
+ this.store.dispatchActionType(ShellActionType.toggleNavigationBarState);
393
329
  }
394
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
395
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: ShellComponent, isStandalone: true, selector: "ngssm-shell", inputs: { shellConfig: "shellConfig" }, host: { properties: { "class": "this.class" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ngssm-shell-container\" *ngIf=\"(shellConfig$ | async) as config; else noShellConfig\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n <img [src]=\"config.logo\" *ngIf=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n <span class=\"ngssm-shell-header-title\" *ngIf=\"config.applicationTitle\">\n {{config.applicationTitle}}\n </span>\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"(navigationBarOpen$ | async)===true\"\n class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n <mat-toolbar class=\"ngssm-shell-footer\" *ngIf=\"config.displayFooter === true\">\n <ngssm-wrapper *ngFor=\"let component of config.footerComponents\" [item]=\"component\"></ngssm-wrapper>\n <span class=\"ngssm-fxFlex\"></span>\n <button mat-icon-button (click)=\"rightSidebar.toggle()\" *ngIf=\"config.displayFooterNotificationsButton\">\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount$ | async\"\n *ngIf=\"(notificationsCount$ | async) ?? 0 > 0\">\n </mat-icon>\n <mat-icon class=\"fa-regular fa-message\" *ngIf=\"(notificationsCount$ | async) === 0\">\n </mat-icon>\n </button>\n </mat-toolbar>\n</div>\n\n<ng-template #noShellConfig>\n <div class=\"ngssm-shell-no-config\">\n Please, provide a config for the shell.\n </div>\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i4$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i4$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i4$3.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { 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: i4$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i8.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: SideNavComponent, selector: "ngssm-side-nav", inputs: ["config"] }, { kind: "component", type: ShellNotificationsComponent, selector: "ngssm-shell-notifications" }, { kind: "component", type: WrapperComponent, selector: "ngssm-wrapper", inputs: ["item"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
331
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.6", type: ShellComponent, isStandalone: true, selector: "ngssm-shell", inputs: { shellConfig: { classPropertyName: "shellConfig", publicName: "shellConfig", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngssm-shell" }, ngImport: i0, template: "@if (shellConfig(); as config) {\n <div class=\"ngssm-shell-container\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n @if (config.logo) {\n <img [src]=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n }\n\n @if (config.applicationTitle) {\n <span class=\"ngssm-shell-header-title\">\n {{ config.applicationTitle }}\n </span>\n }\n\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"navigationBarRendered()\" class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n @if (config.displayFooter) {\n <mat-toolbar class=\"ngssm-shell-footer\">\n <ngssm-wrapper *ngFor=\"let component of config.footerComponents\" [item]=\"component\"></ngssm-wrapper>\n <span class=\"ngssm-fxFlex\"></span>\n @if (config.displayFooterNotificationsButton) {\n <button mat-icon-button (click)=\"rightSidebar.toggle()\">\n @if (notificationsCount() > 0) {\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount()\"> </mat-icon>\n } @else {\n <mat-icon class=\"fa-regular fa-message\"> </mat-icon>\n }\n </button>\n }\n </mat-toolbar>\n }\n </div>\n} @else {\n <div class=\"ngssm-shell-no-config\">Please, provide a config for the shell.</div>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$1.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$1.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i3$1.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: SideNavComponent, selector: "ngssm-side-nav", inputs: ["config"] }, { kind: "component", type: ShellNotificationsComponent, selector: "ngssm-shell-notifications" }, { kind: "component", type: WrapperComponent, selector: "ngssm-wrapper", inputs: ["item"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
396
332
  }
397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShellComponent, decorators: [{
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ShellComponent, decorators: [{
398
334
  type: Component,
399
335
  args: [{ selector: 'ngssm-shell', imports: [
400
336
  CommonModule,
@@ -407,13 +343,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
407
343
  SideNavComponent,
408
344
  ShellNotificationsComponent,
409
345
  WrapperComponent
410
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ngssm-shell-container\" *ngIf=\"(shellConfig$ | async) as config; else noShellConfig\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n <img [src]=\"config.logo\" *ngIf=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n <span class=\"ngssm-shell-header-title\" *ngIf=\"config.applicationTitle\">\n {{config.applicationTitle}}\n </span>\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"(navigationBarOpen$ | async)===true\"\n class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n <mat-toolbar class=\"ngssm-shell-footer\" *ngIf=\"config.displayFooter === true\">\n <ngssm-wrapper *ngFor=\"let component of config.footerComponents\" [item]=\"component\"></ngssm-wrapper>\n <span class=\"ngssm-fxFlex\"></span>\n <button mat-icon-button (click)=\"rightSidebar.toggle()\" *ngIf=\"config.displayFooterNotificationsButton\">\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount$ | async\"\n *ngIf=\"(notificationsCount$ | async) ?? 0 > 0\">\n </mat-icon>\n <mat-icon class=\"fa-regular fa-message\" *ngIf=\"(notificationsCount$ | async) === 0\">\n </mat-icon>\n </button>\n </mat-toolbar>\n</div>\n\n<ng-template #noShellConfig>\n <div class=\"ngssm-shell-no-config\">\n Please, provide a config for the shell.\n </div>\n</ng-template>" }]
411
- }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { class: [{
412
- type: HostBinding,
413
- args: ['class']
414
- }], shellConfig: [{
415
- type: Input
416
- }] } });
346
+ ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
347
+ class: 'ngssm-shell'
348
+ }, template: "@if (shellConfig(); as config) {\n <div class=\"ngssm-shell-container\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n @if (config.logo) {\n <img [src]=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n }\n\n @if (config.applicationTitle) {\n <span class=\"ngssm-shell-header-title\">\n {{ config.applicationTitle }}\n </span>\n }\n\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"navigationBarRendered()\" class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n @if (config.displayFooter) {\n <mat-toolbar class=\"ngssm-shell-footer\">\n <ngssm-wrapper *ngFor=\"let component of config.footerComponents\" [item]=\"component\"></ngssm-wrapper>\n <span class=\"ngssm-fxFlex\"></span>\n @if (config.displayFooterNotificationsButton) {\n <button mat-icon-button (click)=\"rightSidebar.toggle()\">\n @if (notificationsCount() > 0) {\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount()\"> </mat-icon>\n } @else {\n <mat-icon class=\"fa-regular fa-message\"> </mat-icon>\n }\n </button>\n }\n </mat-toolbar>\n }\n </div>\n} @else {\n <div class=\"ngssm-shell-no-config\">Please, provide a config for the shell.</div>\n}\n" }]
349
+ }] });
417
350
 
418
351
  class NotificationShowingEffect {
419
352
  constructor(snackBar) {
@@ -428,12 +361,12 @@ class NotificationShowingEffect {
428
361
  verticalPosition: 'top'
429
362
  });
430
363
  }
431
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: NotificationShowingEffect, deps: [{ token: i1$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable }); }
432
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: NotificationShowingEffect }); }
364
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NotificationShowingEffect, deps: [{ token: i1$2.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable }); }
365
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NotificationShowingEffect }); }
433
366
  }
434
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: NotificationShowingEffect, decorators: [{
367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: NotificationShowingEffect, decorators: [{
435
368
  type: Injectable
436
- }], ctorParameters: () => [{ type: i1$1.MatSnackBar }] });
369
+ }], ctorParameters: () => [{ type: i1$2.MatSnackBar }] });
437
370
 
438
371
  const provideNgssmShell = () => {
439
372
  return makeEnvironmentProviders([
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-shell.mjs","sources":["../../../projects/ngssm-shell/src/lib/actions/shell-action-type.ts","../../../projects/ngssm-shell/src/lib/actions/display-notification.action.ts","../../../projects/ngssm-shell/src/lib/actions/display-notification-details.action.ts","../../../projects/ngssm-shell/src/lib/actions/lock-navigation-bar.action.ts","../../../projects/ngssm-shell/src/lib/model/shell-notification-type.ts","../../../projects/ngssm-shell/src/lib/model/lock-status.ts","../../../projects/ngssm-shell/src/lib/state/shell-notifications.ts","../../../projects/ngssm-shell/src/lib/state/shell.state.ts","../../../projects/ngssm-shell/src/lib/reducers/navigation-bar.reducer.ts","../../../projects/ngssm-shell/src/lib/reducers/shell-notifications.reducer.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification/shell-notification.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification/shell-notification.component.html","../../../projects/ngssm-shell/src/lib/components/shell-notification-popup/shell-notification-popup.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification-popup/shell-notification-popup.component.html","../../../projects/ngssm-shell/src/lib/components/wrapper/wrapper.component.ts","../../../projects/ngssm-shell/src/lib/components/wrapper/wrapper.component.html","../../../projects/ngssm-shell/src/lib/components/side-nav/side-nav.component.ts","../../../projects/ngssm-shell/src/lib/components/side-nav/side-nav.component.html","../../../projects/ngssm-shell/src/lib/components/shell-notifications/shell-notifications.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notifications/shell-notifications.component.html","../../../projects/ngssm-shell/src/lib/components/shell/shell.component.ts","../../../projects/ngssm-shell/src/lib/components/shell/shell.component.html","../../../projects/ngssm-shell/src/lib/effects/notification-showing.effect.ts","../../../projects/ngssm-shell/src/lib/provide-ngssm-shell.ts","../../../projects/ngssm-shell/src/public-api.ts","../../../projects/ngssm-shell/src/ngssm-shell.ts"],"sourcesContent":["export enum ShellActionType {\n // Navigation bar\n toggleNavigationBarState = '[ShellActionType] toggleNavigationBarState',\n openNavigationBar = '[ShellActionType] openNavigationBar',\n closeNavigationBar = '[ShellActionType] closeNavigationBar',\n lockNavigationBar = '[ShellActionType] lockNavigationBar',\n\n // Notifications\n displayNotification = '[ShellActionType] displayNotification',\n displayNotificationDetails = '[ShellActionType] displayNotificationDetails',\n clearAllNotifications = '[ShellActionType] clearAllNotifications'\n}\n","import { Action } from 'ngssm-store';\n\nimport { ShellNotificationType } from '../model';\nimport { ShellActionType } from './shell-action-type';\n\nexport class DisplayNotificationAction implements Action {\n public readonly type: string = ShellActionType.displayNotification;\n\n constructor(\n public readonly notificationType: ShellNotificationType,\n public readonly title: string,\n public readonly details?: unknown\n ) {}\n}\n","import { Action } from 'ngssm-store';\nimport { ShellActionType } from './shell-action-type';\n\nexport class DisplayNotificationDetailsAction implements Action {\n public readonly type: string = ShellActionType.displayNotificationDetails;\n\n constructor(public readonly notificationIndex: number | undefined) {}\n}\n","import { Action } from 'ngssm-store';\nimport { LockStatus } from '../model';\nimport { ShellActionType } from './shell-action-type';\n\nexport class LockNavigationBarAction implements Action {\n public readonly type: string = ShellActionType.lockNavigationBar;\n\n constructor(public readonly lockStatus: LockStatus) {}\n}\n","export enum ShellNotificationType {\n success = 'Success',\n error = 'Error'\n}\n","export enum LockStatus {\n notLocked = 'Not Locked',\n lockedOpen = 'Locked Open',\n lockedClosed = 'Locked Closed'\n}\n","import { ShellNotification } from '../model';\n\nexport interface ShellNotifications {\n notifications: ShellNotification[];\n selectedNotificaitonIndex?: number;\n}\n\nexport const getDefaultShellNotifications = (): ShellNotifications => ({\n notifications: []\n});\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { LockStatus } from '../model';\nimport { getDefaultShellNotifications, ShellNotifications } from './shell-notifications';\n\nexport const selectShellState = (state: State): ShellState => state[ShellStateSpecification.featureStateKey] as ShellState;\n\nexport const updateShellState = (state: State, command: Spec<ShellState, never>): State =>\n update(state, {\n [ShellStateSpecification.featureStateKey]: command\n });\n\nexport interface ShellState {\n navigationBarOpen: boolean;\n navigationBarLockStatus: LockStatus;\n shellNotifications: ShellNotifications;\n}\n\n@NgSsmFeatureState({\n featureStateKey: ShellStateSpecification.featureStateKey,\n initialState: ShellStateSpecification.initialState\n})\nexport class ShellStateSpecification {\n public static readonly featureStateKey = 'shell-state';\n public static readonly initialState: ShellState = {\n navigationBarOpen: true,\n navigationBarLockStatus: LockStatus.notLocked,\n shellNotifications: getDefaultShellNotifications()\n };\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { LockNavigationBarAction, ShellActionType } from '../actions';\nimport { selectShellState, updateShellState } from '../state';\n\n@Injectable()\nexport class NavigationBarReducer implements Reducer {\n public readonly processedActions: string[] = [\n ShellActionType.toggleNavigationBarState,\n ShellActionType.openNavigationBar,\n ShellActionType.closeNavigationBar,\n ShellActionType.lockNavigationBar\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case ShellActionType.toggleNavigationBarState:\n return updateShellState(state, {\n navigationBarOpen: { $apply: (value) => !value }\n });\n\n case ShellActionType.openNavigationBar:\n if (selectShellState(state).navigationBarOpen) {\n return state;\n }\n\n return updateShellState(state, {\n navigationBarOpen: { $set: true }\n });\n\n case ShellActionType.closeNavigationBar:\n if (!selectShellState(state).navigationBarOpen) {\n return state;\n }\n\n return updateShellState(state, {\n navigationBarOpen: { $set: false }\n });\n\n case ShellActionType.lockNavigationBar: {\n const lockNavigationBarAction = action as LockNavigationBarAction;\n return updateShellState(state, {\n navigationBarLockStatus: { $set: lockNavigationBarAction.lockStatus }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DisplayNotificationAction, DisplayNotificationDetailsAction, ShellActionType } from '../actions';\nimport { ShellNotification } from '../model';\nimport { updateShellState } from '../state';\n\n@Injectable()\nexport class ShellNotificationsReducer implements Reducer {\n public readonly processedActions: string[] = [\n ShellActionType.displayNotification,\n ShellActionType.displayNotificationDetails,\n ShellActionType.clearAllNotifications\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case ShellActionType.displayNotification: {\n const displayNotificationAction = action as DisplayNotificationAction;\n const notification: ShellNotification = {\n type: displayNotificationAction.notificationType,\n title: displayNotificationAction.title,\n details: displayNotificationAction.details,\n timestamp: new Date()\n };\n return updateShellState(state, {\n shellNotifications: {\n notifications: { $push: [notification] }\n }\n });\n }\n\n case ShellActionType.displayNotificationDetails: {\n const displayNotificationDetailsAction = action as DisplayNotificationDetailsAction;\n return updateShellState(state, {\n shellNotifications: {\n selectedNotificaitonIndex: { $set: displayNotificationDetailsAction.notificationIndex }\n }\n });\n }\n\n case ShellActionType.clearAllNotifications:\n return updateShellState(state, {\n shellNotifications: {\n notifications: { $set: [] }\n }\n });\n }\n\n return state;\n }\n}\n","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BehaviorSubject, combineLatest, Observable, takeUntil } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\nimport { ShellNotification, ShellNotificationType } from '../../model';\nimport { selectShellState } from '../../state';\nimport { DisplayNotificationDetailsAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-shell-notification',\n imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule],\n templateUrl: './shell-notification.component.html',\n styleUrls: ['./shell-notification.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationComponent extends NgSsmComponent {\n private readonly _displayDetailsButton$ = new BehaviorSubject<boolean>(false);\n private readonly _shellNotification$ = new BehaviorSubject<ShellNotification | undefined>(undefined);\n private readonly _shellNotificationIndex$ = new BehaviorSubject<number | null>(null);\n\n public readonly shellNotificationType = ShellNotificationType;\n\n constructor(store: Store) {\n super(store);\n\n combineLatest([this._shellNotificationIndex$, this.watch((s) => selectShellState(s).shellNotifications.notifications)])\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe((values) => {\n this._shellNotification$.next((values[1] ?? [])[values[0] ?? -1]);\n });\n }\n\n @Input() public set displayDetailsButton(value: boolean) {\n this._displayDetailsButton$.next(value);\n }\n\n @Input() public set shellNotificationIndex(value: number | null) {\n this._shellNotificationIndex$.next(value);\n }\n\n public get shellNotification$(): Observable<ShellNotification | undefined> {\n return this._shellNotification$.asObservable();\n }\n\n public get displayDetailsButton$(): Observable<boolean> {\n return this._displayDetailsButton$.asObservable();\n }\n\n public displayDetails(): void {\n this.dispatchAction(new DisplayNotificationDetailsAction(this._shellNotificationIndex$.value ?? -1));\n }\n}\n","<mat-card\n appearance=\"outlined\" *ngIf=\"(shellNotification$ | async) as shellNotification; else noNotification\"\n class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{'ngssm-shell-notification-success' : shellNotification.type === shellNotificationType.success, 'ngssm-shell-notification-error':shellNotification.type === shellNotificationType.error}\">\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification \"\n *ngIf=\"shellNotification.type === shellNotificationType.success\">\n </mat-icon>\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification \"\n *ngIf=\"shellNotification.type === shellNotificationType.error\">\n </mat-icon>\n <mat-card-title>{{shellNotification.title}}</mat-card-title>\n <mat-card-subtitle>{{shellNotification.timestamp | date:'shortTime'}}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button *ngIf=\"(displayDetailsButton$ | async) === true && shellNotification.details\"\n (click)=\"displayDetails()\">\n Display details\n </button>\n </div>\n</mat-card>\n\n<ng-template #noNotification>\n No notification to display...\n</ng-template>","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\nimport { selectShellState } from '../../state';\nimport { ShellNotificationComponent } from '../shell-notification/shell-notification.component';\n\n@Component({\n selector: 'ngssm-shell-notification-popup',\n imports: [CommonModule, ShellNotificationComponent],\n templateUrl: './shell-notification-popup.component.html',\n styleUrls: ['./shell-notification-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationPopupComponent extends NgSsmComponent {\n private readonly _shellNotificationIndex$ = new BehaviorSubject<number>(-1);\n\n constructor(store: Store) {\n super(store);\n\n this.watch((s) => selectShellState(s).shellNotifications.notifications).subscribe((notifications) => {\n const items = notifications ?? [];\n this._shellNotificationIndex$.next(items.length - 1);\n });\n }\n\n public get shellNotificationIndex$(): Observable<number> {\n return this._shellNotificationIndex$.asObservable();\n }\n}\n","<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex$ | async\"></ngssm-shell-notification>","import { Component, ChangeDetectionStrategy, Input, ViewContainerRef, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\n@Component({\n selector: 'ngssm-wrapper',\n imports: [CommonModule],\n templateUrl: './wrapper.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WrapperComponent extends NgSsmComponent {\n private readonly _innerHtml$ = new BehaviorSubject<string | undefined>(undefined);\n\n constructor(\n store: Store,\n private viewContainerRef: ViewContainerRef\n ) {\n super(store);\n }\n\n @Input() public set item(value: string | Type<unknown> | undefined) {\n if (typeof value === 'string') {\n this._innerHtml$.next(value);\n } else if (value) {\n this.viewContainerRef.clear();\n this.viewContainerRef.createComponent(value);\n }\n }\n\n public get innerHtml$(): Observable<string | undefined> {\n return this._innerHtml$.asObservable();\n }\n}\n","<span *ngIf=\"(innerHtml$ | async) as innerHtml\" [innerHTML]=\"innerHtml\"></span>","import { Component, ChangeDetectionStrategy, Input, HostBinding } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\nimport { SidenavConfig } from '../../model';\nimport { WrapperComponent } from '../wrapper/wrapper.component';\n\n@Component({\n selector: 'ngssm-side-nav',\n imports: [CommonModule, MatDividerModule, RouterModule, WrapperComponent],\n templateUrl: './side-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SideNavComponent extends NgSsmComponent {\n private readonly _sidenavConfig$ = new BehaviorSubject<SidenavConfig | undefined>(undefined);\n\n @HostBinding('class') class = 'ngssm-sidenav';\n\n constructor(store: Store) {\n super(store);\n }\n\n @Input() public set config(value: SidenavConfig | undefined) {\n this._sidenavConfig$.next(value);\n }\n\n public get sidenavConfig$(): Observable<SidenavConfig | undefined> {\n return this._sidenavConfig$.asObservable();\n }\n}\n","<div class=\"ngssm-sidenav-main-container\" *ngIf=\"(sidenavConfig$ | async) as config\">\n <div class=\"ngssm-sidenav-title\" *ngIf=\"config.title\">{{config.title}}</div>\n <mat-divider *ngIf=\"config.title\"></mat-divider>\n <ng-container *ngFor=\"let section of config.sections;let last = last;\" class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n <div *ngIf=\"!section.route\" class=\"ngssm-sidenav-section-item\">\n <span *ngIf=\"section.icon\" [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{section.label}}\n <ngssm-wrapper *ngIf=\"section.component\" [item]=\"section.component\"></ngssm-wrapper>\n </div>\n\n <a [routerLink]=\"section.route\" routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{exact:section.linkActiveOnlyIfExact === true}\" *ngIf=\"section.route\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n <span *ngIf=\"section.icon\" [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{section.label}}\n <ngssm-wrapper *ngIf=\"section.component\" [item]=\"section.component\"></ngssm-wrapper>\n </div>\n </a>\n </div>\n <div *ngFor=\"let item of section.items\" class=\"ngssm-sidenav-item-container\">\n <div *ngIf=\"!item.route\" class=\"ngssm-sidenav-section-item\">\n <span *ngIf=\"item.icon\" [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{item.label}}\n <ngssm-wrapper *ngIf=\"item.component\" [item]=\"item.component\"></ngssm-wrapper>\n </div>\n\n <a [routerLink]=\"item.route\" routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{exact:item.linkActiveOnlyIfExact === true}\" *ngIf=\"item.route\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n <span *ngIf=\"item.icon\" [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n {{item.label}}\n <ngssm-wrapper *ngIf=\"item.component\" [item]=\"item.component\"></ngssm-wrapper>\n </div>\n </a>\n </div>\n\n <mat-divider *ngIf=\"!last\"></mat-divider>\n </ng-container>\n</div>","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\nimport { NgssmAceEditorComponent, NgssmAceEditorMode } from 'ngssm-ace-editor';\n\nimport { selectShellState } from '../../state';\nimport { ShellNotification, ShellNotificationType } from '../../model';\nimport { DisplayNotificationDetailsAction, ShellActionType } from '../../actions';\nimport { ShellNotificationComponent } from '../shell-notification/shell-notification.component';\n\n@Component({\n selector: 'ngssm-shell-notifications',\n imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent],\n templateUrl: './shell-notifications.component.html',\n styleUrls: ['./shell-notifications.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationsComponent extends NgSsmComponent {\n private readonly _notificationSelected$ = new BehaviorSubject<boolean>(false);\n private readonly _notifications$ = new BehaviorSubject<ShellNotification[]>([]);\n private readonly _details$ = new BehaviorSubject<string>('');\n\n public readonly shellNotificationType = ShellNotificationType;\n public readonly ngssmAceEditorMode = NgssmAceEditorMode;\n\n constructor(store: Store) {\n super(store);\n\n this.watch((s) => selectShellState(s).shellNotifications.notifications).subscribe((values) => this._notifications$.next(values ?? []));\n\n combineLatest([\n this.watch((s) => selectShellState(s).shellNotifications.notifications),\n this.watch((s) => selectShellState(s).shellNotifications.selectedNotificaitonIndex)\n ]).subscribe((values) => {\n const id = values[1] ?? -1;\n this._notificationSelected$.next(id !== -1);\n const details = (values[0] ?? [])[id]?.details;\n if (details) {\n this._details$.next(JSON.stringify(details, null, 2));\n } else {\n this._details$.next('');\n }\n });\n }\n\n public get notificationSelected$(): Observable<boolean> {\n return this._notificationSelected$.asObservable();\n }\n\n public get notifications$(): Observable<ShellNotification[]> {\n return this._notifications$.asObservable();\n }\n\n public get details$(): Observable<string> {\n return this._details$.asObservable();\n }\n\n public closeDetailsPanel(): void {\n this.dispatchAction(new DisplayNotificationDetailsAction(undefined));\n }\n\n public clearAll(): void {\n this.dispatchActionType(ShellActionType.clearAllNotifications);\n }\n}\n","<mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\"\n *ngIf=\"(notificationSelected$ | async) === false; else notificationDetails\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"(notifications$ | async)?.length === 0\"\n (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n <ngssm-shell-notification *ngFor=\"let notification of notifications$ | async;let index=index\"\n [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\">\n </ngssm-shell-notification>\n </mat-card-content>\n</mat-card>\n\n<ng-template #notificationDetails>\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"(details$ | async) ?? ''\"\n [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n</ng-template>","import { Component, ChangeDetectionStrategy, Input, HostBinding } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\nimport { LockStatus, ShellConfig } from '../../model';\nimport { selectShellState } from '../../state';\nimport { ShellActionType } from '../../actions';\nimport { SideNavComponent } from '../side-nav/side-nav.component';\nimport { ShellNotificationsComponent } from '../shell-notifications/shell-notifications.component';\nimport { WrapperComponent } from '../wrapper/wrapper.component';\n\n@Component({\n selector: 'ngssm-shell',\n imports: [\n CommonModule,\n RouterModule,\n MatSidenavModule,\n MatToolbarModule,\n MatIconModule,\n MatButtonModule,\n MatBadgeModule,\n SideNavComponent,\n ShellNotificationsComponent,\n WrapperComponent\n ],\n templateUrl: './shell.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellComponent extends NgSsmComponent {\n private readonly _shellConfig$ = new BehaviorSubject<ShellConfig | undefined>(undefined);\n private readonly _navigationBarOpen$ = new BehaviorSubject<boolean>(true);\n\n @HostBinding('class') class = 'ngssm-shell';\n\n constructor(store: Store) {\n super(store);\n\n combineLatest([\n this.watch((s) => selectShellState(s).navigationBarOpen),\n this.watch((s) => selectShellState(s).navigationBarLockStatus)\n ]).subscribe((values) => {\n let isOpen = false;\n\n switch (values[1]) {\n case LockStatus.lockedClosed:\n isOpen = false;\n break;\n\n case LockStatus.lockedOpen:\n isOpen = true;\n break;\n\n default:\n isOpen = values[0];\n break;\n }\n\n this._navigationBarOpen$.next(isOpen);\n });\n }\n\n @Input() public set shellConfig(value: ShellConfig) {\n this._shellConfig$.next(value);\n }\n\n public get navigationBarOpen$(): Observable<boolean> {\n return this._navigationBarOpen$.asObservable();\n }\n\n public get shellConfig$(): Observable<ShellConfig | undefined> {\n return this._shellConfig$.asObservable();\n }\n\n public get notificationsCount$(): Observable<number> {\n return this.watch((s) => selectShellState(s).shellNotifications.notifications.length);\n }\n\n public toggleNavigationBarState(): void {\n this.dispatchActionType(ShellActionType.toggleNavigationBarState);\n }\n}\n","<div class=\"ngssm-shell-container\" *ngIf=\"(shellConfig$ | async) as config; else noShellConfig\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n <img [src]=\"config.logo\" *ngIf=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n <span class=\"ngssm-shell-header-title\" *ngIf=\"config.applicationTitle\">\n {{config.applicationTitle}}\n </span>\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"(navigationBarOpen$ | async)===true\"\n class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n <mat-toolbar class=\"ngssm-shell-footer\" *ngIf=\"config.displayFooter === true\">\n <ngssm-wrapper *ngFor=\"let component of config.footerComponents\" [item]=\"component\"></ngssm-wrapper>\n <span class=\"ngssm-fxFlex\"></span>\n <button mat-icon-button (click)=\"rightSidebar.toggle()\" *ngIf=\"config.displayFooterNotificationsButton\">\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount$ | async\"\n *ngIf=\"(notificationsCount$ | async) ?? 0 > 0\">\n </mat-icon>\n <mat-icon class=\"fa-regular fa-message\" *ngIf=\"(notificationsCount$ | async) === 0\">\n </mat-icon>\n </button>\n </mat-toolbar>\n</div>\n\n<ng-template #noShellConfig>\n <div class=\"ngssm-shell-no-config\">\n Please, provide a config for the shell.\n </div>\n</ng-template>","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { Effect } from 'ngssm-store';\n\nimport { ShellActionType } from '../actions';\nimport { ShellNotificationPopupComponent } from '../components';\n\n@Injectable()\nexport class NotificationShowingEffect implements Effect {\n public readonly processedActions: string[] = [ShellActionType.displayNotification];\n\n constructor(private snackBar: MatSnackBar) {}\n\n public processAction(): void {\n this.snackBar.openFromComponent(ShellNotificationPopupComponent, {\n panelClass: 'ngssm-shell-notification-snack-panel',\n duration: 1000,\n horizontalPosition: 'center',\n verticalPosition: 'top'\n });\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffect, provideReducers } from 'ngssm-store';\n\nimport { NavigationBarReducer } from './reducers/navigation-bar.reducer';\nimport { ShellNotificationsReducer } from './reducers/shell-notifications.reducer';\nimport { NotificationShowingEffect } from './effects/notification-showing.effect';\n\nexport const provideNgssmShell = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducers(NavigationBarReducer, ShellNotificationsReducer),\n provideEffect(NotificationShowingEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-shell\n */\n\nexport * from './lib/provide-ngssm-shell';\nexport * from './lib/model';\nexport * from './lib/state';\nexport * from './lib/actions';\nexport * from './lib/components';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5","i3","i4","i6","i7","i1"],"mappings":"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"}
1
+ {"version":3,"file":"ngssm-shell.mjs","sources":["../../../projects/ngssm-shell/src/lib/actions/shell-action-type.ts","../../../projects/ngssm-shell/src/lib/actions/display-notification.action.ts","../../../projects/ngssm-shell/src/lib/actions/display-notification-details.action.ts","../../../projects/ngssm-shell/src/lib/actions/lock-navigation-bar.action.ts","../../../projects/ngssm-shell/src/lib/model/shell-notification-type.ts","../../../projects/ngssm-shell/src/lib/model/lock-status.ts","../../../projects/ngssm-shell/src/lib/state/shell-notifications.ts","../../../projects/ngssm-shell/src/lib/state/shell.state.ts","../../../projects/ngssm-shell/src/lib/reducers/navigation-bar.reducer.ts","../../../projects/ngssm-shell/src/lib/reducers/shell-notifications.reducer.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification/shell-notification.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification/shell-notification.component.html","../../../projects/ngssm-shell/src/lib/components/shell-notification-popup/shell-notification-popup.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification-popup/shell-notification-popup.component.html","../../../projects/ngssm-shell/src/lib/components/wrapper/wrapper.component.ts","../../../projects/ngssm-shell/src/lib/components/wrapper/wrapper.component.html","../../../projects/ngssm-shell/src/lib/components/side-nav/side-nav.component.ts","../../../projects/ngssm-shell/src/lib/components/side-nav/side-nav.component.html","../../../projects/ngssm-shell/src/lib/components/shell-notifications/shell-notifications.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notifications/shell-notifications.component.html","../../../projects/ngssm-shell/src/lib/components/shell/shell.component.ts","../../../projects/ngssm-shell/src/lib/components/shell/shell.component.html","../../../projects/ngssm-shell/src/lib/effects/notification-showing.effect.ts","../../../projects/ngssm-shell/src/lib/provide-ngssm-shell.ts","../../../projects/ngssm-shell/src/public-api.ts","../../../projects/ngssm-shell/src/ngssm-shell.ts"],"sourcesContent":["export enum ShellActionType {\n // Navigation bar\n toggleNavigationBarState = '[ShellActionType] toggleNavigationBarState',\n openNavigationBar = '[ShellActionType] openNavigationBar',\n closeNavigationBar = '[ShellActionType] closeNavigationBar',\n lockNavigationBar = '[ShellActionType] lockNavigationBar',\n\n // Notifications\n displayNotification = '[ShellActionType] displayNotification',\n displayNotificationDetails = '[ShellActionType] displayNotificationDetails',\n clearAllNotifications = '[ShellActionType] clearAllNotifications'\n}\n","import { Action } from 'ngssm-store';\n\nimport { ShellNotificationType } from '../model';\nimport { ShellActionType } from './shell-action-type';\n\nexport class DisplayNotificationAction implements Action {\n public readonly type: string = ShellActionType.displayNotification;\n\n constructor(\n public readonly notificationType: ShellNotificationType,\n public readonly title: string,\n public readonly details?: unknown\n ) {}\n}\n","import { Action } from 'ngssm-store';\nimport { ShellActionType } from './shell-action-type';\n\nexport class DisplayNotificationDetailsAction implements Action {\n public readonly type: string = ShellActionType.displayNotificationDetails;\n\n constructor(public readonly notificationIndex: number | undefined) {}\n}\n","import { Action } from 'ngssm-store';\nimport { LockStatus } from '../model';\nimport { ShellActionType } from './shell-action-type';\n\nexport class LockNavigationBarAction implements Action {\n public readonly type: string = ShellActionType.lockNavigationBar;\n\n constructor(public readonly lockStatus: LockStatus) {}\n}\n","export enum ShellNotificationType {\n success = 'Success',\n error = 'Error'\n}\n","export enum LockStatus {\n notLocked = 'Not Locked',\n lockedOpen = 'Locked Open',\n lockedClosed = 'Locked Closed'\n}\n","import { ShellNotification } from '../model';\n\nexport interface ShellNotifications {\n notifications: ShellNotification[];\n selectedNotificaitonIndex?: number;\n}\n\nexport const getDefaultShellNotifications = (): ShellNotifications => ({\n notifications: []\n});\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { LockStatus } from '../model';\nimport { getDefaultShellNotifications, ShellNotifications } from './shell-notifications';\n\nexport const selectShellState = (state: State): ShellState => state[ShellStateSpecification.featureStateKey] as ShellState;\n\nexport const updateShellState = (state: State, command: Spec<ShellState, never>): State =>\n update(state, {\n [ShellStateSpecification.featureStateKey]: command\n });\n\nexport interface ShellState {\n navigationBarOpen: boolean;\n navigationBarLockStatus: LockStatus;\n shellNotifications: ShellNotifications;\n}\n\n@NgSsmFeatureState({\n featureStateKey: ShellStateSpecification.featureStateKey,\n initialState: ShellStateSpecification.initialState\n})\nexport class ShellStateSpecification {\n public static readonly featureStateKey = 'shell-state';\n public static readonly initialState: ShellState = {\n navigationBarOpen: true,\n navigationBarLockStatus: LockStatus.notLocked,\n shellNotifications: getDefaultShellNotifications()\n };\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { LockNavigationBarAction, ShellActionType } from '../actions';\nimport { selectShellState, updateShellState } from '../state';\n\n@Injectable()\nexport class NavigationBarReducer implements Reducer {\n public readonly processedActions: string[] = [\n ShellActionType.toggleNavigationBarState,\n ShellActionType.openNavigationBar,\n ShellActionType.closeNavigationBar,\n ShellActionType.lockNavigationBar\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case ShellActionType.toggleNavigationBarState:\n return updateShellState(state, {\n navigationBarOpen: { $apply: (value) => !value }\n });\n\n case ShellActionType.openNavigationBar:\n if (selectShellState(state).navigationBarOpen) {\n return state;\n }\n\n return updateShellState(state, {\n navigationBarOpen: { $set: true }\n });\n\n case ShellActionType.closeNavigationBar:\n if (!selectShellState(state).navigationBarOpen) {\n return state;\n }\n\n return updateShellState(state, {\n navigationBarOpen: { $set: false }\n });\n\n case ShellActionType.lockNavigationBar: {\n const lockNavigationBarAction = action as LockNavigationBarAction;\n return updateShellState(state, {\n navigationBarLockStatus: { $set: lockNavigationBarAction.lockStatus }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DisplayNotificationAction, DisplayNotificationDetailsAction, ShellActionType } from '../actions';\nimport { ShellNotification } from '../model';\nimport { updateShellState } from '../state';\n\n@Injectable()\nexport class ShellNotificationsReducer implements Reducer {\n public readonly processedActions: string[] = [\n ShellActionType.displayNotification,\n ShellActionType.displayNotificationDetails,\n ShellActionType.clearAllNotifications\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case ShellActionType.displayNotification: {\n const displayNotificationAction = action as DisplayNotificationAction;\n const notification: ShellNotification = {\n type: displayNotificationAction.notificationType,\n title: displayNotificationAction.title,\n details: displayNotificationAction.details,\n timestamp: new Date()\n };\n return updateShellState(state, {\n shellNotifications: {\n notifications: { $push: [notification] }\n }\n });\n }\n\n case ShellActionType.displayNotificationDetails: {\n const displayNotificationDetailsAction = action as DisplayNotificationDetailsAction;\n return updateShellState(state, {\n shellNotifications: {\n selectedNotificaitonIndex: { $set: displayNotificationDetailsAction.notificationIndex }\n }\n });\n }\n\n case ShellActionType.clearAllNotifications:\n return updateShellState(state, {\n shellNotifications: {\n notifications: { $set: [] }\n }\n });\n }\n\n return state;\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input, computed } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { ShellNotification, ShellNotificationType } from '../../model';\nimport { selectShellState } from '../../state';\nimport { DisplayNotificationDetailsAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-shell-notification',\n imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule],\n templateUrl: './shell-notification.component.html',\n styleUrls: ['./shell-notification.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationComponent {\n private readonly store = inject(Store);\n private readonly notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);\n\n public readonly displayDetailsButton = input(false);\n public readonly shellNotificationIndex = input<number>();\n\n public readonly shellNotification = computed<ShellNotification | undefined>(() => {\n return this.notifications()[this.shellNotificationIndex() ?? -1];\n });\n\n public readonly shellNotificationType = ShellNotificationType;\n\n public displayDetails(): void {\n this.store.dispatchAction(new DisplayNotificationDetailsAction(this.shellNotificationIndex() ?? -1));\n }\n}\n","@if (shellNotification(); as notification) {\n <mat-card class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{\n 'ngssm-shell-notification-success': notification.type === shellNotificationType.success,\n 'ngssm-shell-notification-error': notification.type === shellNotificationType.error\n }\">\n @if (notification.type === shellNotificationType.success) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n @if (notification.type === shellNotificationType.error) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n <mat-card-title>{{ notification.title }}</mat-card-title>\n <mat-card-subtitle>{{ notification.timestamp | date: 'shortTime' }}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n @if (displayDetailsButton() && notification.details) {\n <button mat-button (click)=\"displayDetails()\">Display details</button>\n }\n </div>\n </mat-card>\n} @else {\n No notification to display...\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { createSignal } from 'ngssm-store';\n\nimport { selectShellState } from '../../state';\nimport { ShellNotificationComponent } from '../shell-notification/shell-notification.component';\n\n@Component({\n selector: 'ngssm-shell-notification-popup',\n imports: [CommonModule, ShellNotificationComponent],\n templateUrl: './shell-notification-popup.component.html',\n styleUrls: ['./shell-notification-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationPopupComponent {\n public readonly shellNotificationIndex = createSignal((state) => {\n const items = selectShellState(state).shellNotifications.notifications;\n return items.length - 1;\n });\n}\n","<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>","import { Component, ChangeDetectionStrategy, ViewContainerRef, Type, inject, signal, input, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ngssm-wrapper',\n imports: [CommonModule],\n templateUrl: './wrapper.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WrapperComponent {\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n public readonly item = input<string | Type<unknown> | undefined>();\n\n public readonly innerHtml = signal<string | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const inputItem = this.item();\n if (typeof inputItem === 'string') {\n this.innerHtml.set(inputItem);\n } else if (inputItem) {\n this.viewContainerRef.clear();\n this.viewContainerRef.createComponent(inputItem);\n }\n });\n }\n}\n","@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { SidenavConfig } from '../../model';\nimport { WrapperComponent } from '../wrapper/wrapper.component';\n\n@Component({\n selector: 'ngssm-side-nav',\n imports: [CommonModule, MatDividerModule, RouterModule, WrapperComponent],\n templateUrl: './side-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngssm-sidenav'\n }\n})\nexport class SideNavComponent {\n public config = input<SidenavConfig | undefined>();\n}\n","@if (config(); as sidenavConfig) {\n <div class=\"ngssm-sidenav-main-container\">\n @if (sidenavConfig.title) {\n <div class=\"ngssm-sidenav-title\">{{ sidenavConfig.title }}</div>\n <mat-divider></mat-divider>\n }\n\n @for (section of sidenavConfig.sections; track section; let last = $last) {\n <ng-container class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n @if (!section.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"section.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: section.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n @for (item of section.items; track item) {\n <div class=\"ngssm-sidenav-item-container\">\n @if (!item.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: item.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n }\n\n @if (!last) {\n <mat-divider></mat-divider>\n }\n </ng-container>\n }\n </div>\n}\n","import { Component, ChangeDetectionStrategy, inject, signal, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { NgssmAceEditorComponent, NgssmAceEditorMode } from 'ngssm-ace-editor';\n\nimport { selectShellState } from '../../state';\nimport { ShellNotificationType } from '../../model';\nimport { DisplayNotificationDetailsAction, ShellActionType } from '../../actions';\nimport { ShellNotificationComponent } from '../shell-notification/shell-notification.component';\n\n@Component({\n selector: 'ngssm-shell-notifications',\n imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent],\n templateUrl: './shell-notifications.component.html',\n styleUrls: ['./shell-notifications.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationsComponent {\n private readonly store = inject(Store);\n private readonly selectedNotificaitonIndex = createSignal(\n (state) => selectShellState(state).shellNotifications.selectedNotificaitonIndex\n );\n\n public readonly notificationSelected = signal<boolean>(false);\n public readonly notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);\n public readonly details = signal<string>('');\n\n public readonly shellNotificationType = ShellNotificationType;\n public readonly ngssmAceEditorMode = NgssmAceEditorMode;\n\n constructor() {\n effect(() => {\n const items = this.notifications();\n const index = this.selectedNotificaitonIndex();\n const id = index ?? -1;\n this.notificationSelected.set(id !== -1);\n const details = items[id]?.details;\n if (details) {\n this.details.set(JSON.stringify(details, null, 2));\n } else {\n this.details.set('');\n }\n });\n }\n\n public closeDetailsPanel(): void {\n this.store.dispatchAction(new DisplayNotificationDetailsAction(undefined));\n }\n\n public clearAll(): void {\n this.store.dispatchActionType(ShellActionType.clearAllNotifications);\n }\n}\n","@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n","import { Component, ChangeDetectionStrategy, inject, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatBadgeModule } from '@angular/material/badge';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { LockStatus, ShellConfig } from '../../model';\nimport { selectShellState } from '../../state';\nimport { ShellActionType } from '../../actions';\nimport { SideNavComponent } from '../side-nav/side-nav.component';\nimport { ShellNotificationsComponent } from '../shell-notifications/shell-notifications.component';\nimport { WrapperComponent } from '../wrapper/wrapper.component';\n\n@Component({\n selector: 'ngssm-shell',\n imports: [\n CommonModule,\n RouterModule,\n MatSidenavModule,\n MatToolbarModule,\n MatIconModule,\n MatButtonModule,\n MatBadgeModule,\n SideNavComponent,\n ShellNotificationsComponent,\n WrapperComponent\n ],\n templateUrl: './shell.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngssm-shell'\n }\n})\nexport class ShellComponent {\n private readonly store = inject(Store);\n private readonly navigationBarOpen = createSignal((state) => selectShellState(state).navigationBarOpen);\n private readonly navigationBarLockStatus = createSignal((state) => selectShellState(state).navigationBarLockStatus);\n\n public readonly shellConfig = input<ShellConfig>();\n\n public readonly notificationsCount = createSignal((state) => selectShellState(state).shellNotifications.notifications.length);\n public readonly navigationBarRendered = computed(() => {\n let isOpen = false;\n\n switch (this.navigationBarLockStatus()) {\n case LockStatus.lockedClosed:\n isOpen = false;\n break;\n\n case LockStatus.lockedOpen:\n isOpen = true;\n break;\n\n default:\n isOpen = this.navigationBarOpen();\n break;\n }\n\n return isOpen;\n });\n\n public toggleNavigationBarState(): void {\n this.store.dispatchActionType(ShellActionType.toggleNavigationBarState);\n }\n}\n","@if (shellConfig(); as config) {\n <div class=\"ngssm-shell-container\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n @if (config.logo) {\n <img [src]=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n }\n\n @if (config.applicationTitle) {\n <span class=\"ngssm-shell-header-title\">\n {{ config.applicationTitle }}\n </span>\n }\n\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"navigationBarRendered()\" class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n @if (config.displayFooter) {\n <mat-toolbar class=\"ngssm-shell-footer\">\n <ngssm-wrapper *ngFor=\"let component of config.footerComponents\" [item]=\"component\"></ngssm-wrapper>\n <span class=\"ngssm-fxFlex\"></span>\n @if (config.displayFooterNotificationsButton) {\n <button mat-icon-button (click)=\"rightSidebar.toggle()\">\n @if (notificationsCount() > 0) {\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount()\"> </mat-icon>\n } @else {\n <mat-icon class=\"fa-regular fa-message\"> </mat-icon>\n }\n </button>\n }\n </mat-toolbar>\n }\n </div>\n} @else {\n <div class=\"ngssm-shell-no-config\">Please, provide a config for the shell.</div>\n}\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { Effect } from 'ngssm-store';\n\nimport { ShellActionType } from '../actions';\nimport { ShellNotificationPopupComponent } from '../components';\n\n@Injectable()\nexport class NotificationShowingEffect implements Effect {\n public readonly processedActions: string[] = [ShellActionType.displayNotification];\n\n constructor(private snackBar: MatSnackBar) {}\n\n public processAction(): void {\n this.snackBar.openFromComponent(ShellNotificationPopupComponent, {\n panelClass: 'ngssm-shell-notification-snack-panel',\n duration: 1000,\n horizontalPosition: 'center',\n verticalPosition: 'top'\n });\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffect, provideReducers } from 'ngssm-store';\n\nimport { NavigationBarReducer } from './reducers/navigation-bar.reducer';\nimport { ShellNotificationsReducer } from './reducers/shell-notifications.reducer';\nimport { NotificationShowingEffect } from './effects/notification-showing.effect';\n\nexport const provideNgssmShell = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducers(NavigationBarReducer, ShellNotificationsReducer),\n provideEffect(NotificationShowingEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-shell\n */\n\nexport * from './lib/provide-ngssm-shell';\nexport * from './lib/model';\nexport * from './lib/state';\nexport * from './lib/actions';\nexport * from './lib/components';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","i3","i5","i6"],"mappings":"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"}
@@ -1,17 +1,13 @@
1
- import { Observable } from 'rxjs';
2
- import { NgSsmComponent, Store } from 'ngssm-store';
3
1
  import { ShellConfig } from '../../model';
4
2
  import * as i0 from "@angular/core";
5
- export declare class ShellComponent extends NgSsmComponent {
6
- private readonly _shellConfig$;
7
- private readonly _navigationBarOpen$;
8
- class: string;
9
- constructor(store: Store);
10
- set shellConfig(value: ShellConfig);
11
- get navigationBarOpen$(): Observable<boolean>;
12
- get shellConfig$(): Observable<ShellConfig | undefined>;
13
- get notificationsCount$(): Observable<number>;
3
+ export declare class ShellComponent {
4
+ private readonly store;
5
+ private readonly navigationBarOpen;
6
+ private readonly navigationBarLockStatus;
7
+ readonly shellConfig: import("@angular/core").InputSignal<ShellConfig | undefined>;
8
+ readonly notificationsCount: import("@angular/core").Signal<number>;
9
+ readonly navigationBarRendered: import("@angular/core").Signal<boolean>;
14
10
  toggleNavigationBarState(): void;
15
11
  static ɵfac: i0.ɵɵFactoryDeclaration<ShellComponent, never>;
16
- static ɵcmp: i0.ɵɵComponentDeclaration<ShellComponent, "ngssm-shell", never, { "shellConfig": { "alias": "shellConfig"; "required": false; }; }, {}, never, ["*"], true, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShellComponent, "ngssm-shell", never, { "shellConfig": { "alias": "shellConfig"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
17
13
  }
@@ -1,18 +1,13 @@
1
- import { Observable } from 'rxjs';
2
- import { NgSsmComponent, Store } from 'ngssm-store';
3
1
  import { ShellNotification, ShellNotificationType } from '../../model';
4
2
  import * as i0 from "@angular/core";
5
- export declare class ShellNotificationComponent extends NgSsmComponent {
6
- private readonly _displayDetailsButton$;
7
- private readonly _shellNotification$;
8
- private readonly _shellNotificationIndex$;
3
+ export declare class ShellNotificationComponent {
4
+ private readonly store;
5
+ private readonly notifications;
6
+ readonly displayDetailsButton: import("@angular/core").InputSignal<boolean>;
7
+ readonly shellNotificationIndex: import("@angular/core").InputSignal<number | undefined>;
8
+ readonly shellNotification: import("@angular/core").Signal<ShellNotification | undefined>;
9
9
  readonly shellNotificationType: typeof ShellNotificationType;
10
- constructor(store: Store);
11
- set displayDetailsButton(value: boolean);
12
- set shellNotificationIndex(value: number | null);
13
- get shellNotification$(): Observable<ShellNotification | undefined>;
14
- get displayDetailsButton$(): Observable<boolean>;
15
10
  displayDetails(): void;
16
11
  static ɵfac: i0.ɵɵFactoryDeclaration<ShellNotificationComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<ShellNotificationComponent, "ngssm-shell-notification", never, { "displayDetailsButton": { "alias": "displayDetailsButton"; "required": false; }; "shellNotificationIndex": { "alias": "shellNotificationIndex"; "required": false; }; }, {}, never, never, true, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShellNotificationComponent, "ngssm-shell-notification", never, { "displayDetailsButton": { "alias": "displayDetailsButton"; "required": false; "isSignal": true; }; "shellNotificationIndex": { "alias": "shellNotificationIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
18
13
  }
@@ -1,10 +1,6 @@
1
- import { Observable } from 'rxjs';
2
- import { NgSsmComponent, Store } from 'ngssm-store';
3
1
  import * as i0 from "@angular/core";
4
- export declare class ShellNotificationPopupComponent extends NgSsmComponent {
5
- private readonly _shellNotificationIndex$;
6
- constructor(store: Store);
7
- get shellNotificationIndex$(): Observable<number>;
2
+ export declare class ShellNotificationPopupComponent {
3
+ readonly shellNotificationIndex: import("@angular/core").Signal<number>;
8
4
  static ɵfac: i0.ɵɵFactoryDeclaration<ShellNotificationPopupComponent, never>;
9
5
  static ɵcmp: i0.ɵɵComponentDeclaration<ShellNotificationPopupComponent, "ngssm-shell-notification-popup", never, {}, {}, never, never, true, never>;
10
6
  }
@@ -1,18 +1,15 @@
1
- import { Observable } from 'rxjs';
2
- import { NgSsmComponent, Store } from 'ngssm-store';
3
1
  import { NgssmAceEditorMode } from 'ngssm-ace-editor';
4
- import { ShellNotification, ShellNotificationType } from '../../model';
2
+ import { ShellNotificationType } from '../../model';
5
3
  import * as i0 from "@angular/core";
6
- export declare class ShellNotificationsComponent extends NgSsmComponent {
7
- private readonly _notificationSelected$;
8
- private readonly _notifications$;
9
- private readonly _details$;
4
+ export declare class ShellNotificationsComponent {
5
+ private readonly store;
6
+ private readonly selectedNotificaitonIndex;
7
+ readonly notificationSelected: import("@angular/core").WritableSignal<boolean>;
8
+ readonly notifications: import("@angular/core").Signal<import("../../model").ShellNotification[]>;
9
+ readonly details: import("@angular/core").WritableSignal<string>;
10
10
  readonly shellNotificationType: typeof ShellNotificationType;
11
11
  readonly ngssmAceEditorMode: typeof NgssmAceEditorMode;
12
- constructor(store: Store);
13
- get notificationSelected$(): Observable<boolean>;
14
- get notifications$(): Observable<ShellNotification[]>;
15
- get details$(): Observable<string>;
12
+ constructor();
16
13
  closeDetailsPanel(): void;
17
14
  clearAll(): void;
18
15
  static ɵfac: i0.ɵɵFactoryDeclaration<ShellNotificationsComponent, never>;
@@ -1,13 +1,7 @@
1
- import { Observable } from 'rxjs';
2
- import { NgSsmComponent, Store } from 'ngssm-store';
3
1
  import { SidenavConfig } from '../../model';
4
2
  import * as i0 from "@angular/core";
5
- export declare class SideNavComponent extends NgSsmComponent {
6
- private readonly _sidenavConfig$;
7
- class: string;
8
- constructor(store: Store);
9
- set config(value: SidenavConfig | undefined);
10
- get sidenavConfig$(): Observable<SidenavConfig | undefined>;
3
+ export declare class SideNavComponent {
4
+ config: import("@angular/core").InputSignal<SidenavConfig | undefined>;
11
5
  static ɵfac: i0.ɵɵFactoryDeclaration<SideNavComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<SideNavComponent, "ngssm-side-nav", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<SideNavComponent, "ngssm-side-nav", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13
7
  }
@@ -1,13 +1,10 @@
1
- import { ViewContainerRef, Type } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { NgSsmComponent, Store } from 'ngssm-store';
1
+ import { Type } from '@angular/core';
4
2
  import * as i0 from "@angular/core";
5
- export declare class WrapperComponent extends NgSsmComponent {
6
- private viewContainerRef;
7
- private readonly _innerHtml$;
8
- constructor(store: Store, viewContainerRef: ViewContainerRef);
9
- set item(value: string | Type<unknown> | undefined);
10
- get innerHtml$(): Observable<string | undefined>;
3
+ export declare class WrapperComponent {
4
+ private readonly viewContainerRef;
5
+ readonly item: import("@angular/core").InputSignal<string | Type<unknown> | undefined>;
6
+ readonly innerHtml: import("@angular/core").WritableSignal<string | undefined>;
7
+ constructor();
11
8
  static ɵfac: i0.ɵɵFactoryDeclaration<WrapperComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<WrapperComponent, "ngssm-wrapper", never, { "item": { "alias": "item"; "required": false; }; }, {}, never, never, true, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<WrapperComponent, "ngssm-wrapper", never, { "item": { "alias": "item"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-shell",
3
- "version": "19.3.0",
3
+ "version": "19.3.2",
4
4
  "description": "NgSsm - A complete shell with header, footer, side navigation...",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",