ngssm-shell 19.0.1 → 19.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -127,18 +127,19 @@ class NavigationBarReducer {
127
127
  return updateShellState(state, {
128
128
  navigationBarOpen: { $set: false }
129
129
  });
130
- case ShellActionType.lockNavigationBar:
130
+ case ShellActionType.lockNavigationBar: {
131
131
  const lockNavigationBarAction = action;
132
132
  return updateShellState(state, {
133
133
  navigationBarLockStatus: { $set: lockNavigationBarAction.lockStatus }
134
134
  });
135
+ }
135
136
  }
136
137
  return state;
137
138
  }
138
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NavigationBarReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NavigationBarReducer }); }
139
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NavigationBarReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
140
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NavigationBarReducer }); }
140
141
  }
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NavigationBarReducer, decorators: [{
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NavigationBarReducer, decorators: [{
142
143
  type: Injectable
143
144
  }] });
144
145
 
@@ -152,7 +153,7 @@ class ShellNotificationsReducer {
152
153
  }
153
154
  updateState(state, action) {
154
155
  switch (action.type) {
155
- case ShellActionType.displayNotification:
156
+ case ShellActionType.displayNotification: {
156
157
  const displayNotificationAction = action;
157
158
  const notification = {
158
159
  type: displayNotificationAction.notificationType,
@@ -165,13 +166,15 @@ class ShellNotificationsReducer {
165
166
  notifications: { $push: [notification] }
166
167
  }
167
168
  });
168
- case ShellActionType.displayNotificationDetails:
169
+ }
170
+ case ShellActionType.displayNotificationDetails: {
169
171
  const displayNotificationDetailsAction = action;
170
172
  return updateShellState(state, {
171
173
  shellNotifications: {
172
174
  selectedNotificaitonIndex: { $set: displayNotificationDetailsAction.notificationIndex }
173
175
  }
174
176
  });
177
+ }
175
178
  case ShellActionType.clearAllNotifications:
176
179
  return updateShellState(state, {
177
180
  shellNotifications: {
@@ -181,10 +184,10 @@ class ShellNotificationsReducer {
181
184
  }
182
185
  return state;
183
186
  }
184
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
185
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationsReducer }); }
187
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
188
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationsReducer }); }
186
189
  }
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationsReducer, decorators: [{
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationsReducer, decorators: [{
188
191
  type: Injectable
189
192
  }] });
190
193
 
@@ -216,10 +219,10 @@ class ShellNotificationComponent extends NgSsmComponent {
216
219
  displayDetails() {
217
220
  this.dispatchAction(new DisplayNotificationDetailsAction(this._shellNotificationIndex$.value ?? -1));
218
221
  }
219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
220
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.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 }); }
222
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
223
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", 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 }); }
221
224
  }
222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationComponent, decorators: [{
225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationComponent, decorators: [{
223
226
  type: Component,
224
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"] }]
225
228
  }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { displayDetailsButton: [{
@@ -240,10 +243,10 @@ class ShellNotificationPopupComponent extends NgSsmComponent {
240
243
  get shellNotificationIndex$() {
241
244
  return this._shellNotificationIndex$.asObservable();
242
245
  }
243
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationPopupComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
244
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.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 }); }
246
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationPopupComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", 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 }); }
245
248
  }
246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationPopupComponent, decorators: [{
249
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationPopupComponent, decorators: [{
247
250
  type: Component,
248
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"] }]
249
252
  }], ctorParameters: () => [{ type: i1.Store }] });
@@ -258,7 +261,7 @@ class WrapperComponent extends NgSsmComponent {
258
261
  if (typeof value === 'string') {
259
262
  this._innerHtml$.next(value);
260
263
  }
261
- else if (!!value) {
264
+ else if (value) {
262
265
  this.viewContainerRef.clear();
263
266
  this.viewContainerRef.createComponent(value);
264
267
  }
@@ -266,10 +269,10 @@ class WrapperComponent extends NgSsmComponent {
266
269
  get innerHtml$() {
267
270
  return this._innerHtml$.asObservable();
268
271
  }
269
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: WrapperComponent, deps: [{ token: i1.Store }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
270
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.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 }); }
272
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", 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.1.4", 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 }); }
271
274
  }
272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: WrapperComponent, decorators: [{
275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: WrapperComponent, decorators: [{
273
276
  type: Component,
274
277
  args: [{ selector: 'ngssm-wrapper', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span *ngIf=\"(innerHtml$ | async) as innerHtml\" [innerHTML]=\"innerHtml\"></span>" }]
275
278
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ViewContainerRef }], propDecorators: { item: [{
@@ -288,10 +291,10 @@ class SideNavComponent extends NgSsmComponent {
288
291
  get sidenavConfig$() {
289
292
  return this._sidenavConfig$.asObservable();
290
293
  }
291
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SideNavComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
292
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.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 }); }
294
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SideNavComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
295
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", 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 }); }
293
296
  }
294
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SideNavComponent, decorators: [{
297
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: SideNavComponent, decorators: [{
295
298
  type: Component,
296
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>" }]
297
300
  }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { class: [{
@@ -340,10 +343,10 @@ class ShellNotificationsComponent extends NgSsmComponent {
340
343
  clearAll() {
341
344
  this.dispatchActionType(ShellActionType.clearAllNotifications);
342
345
  }
343
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationsComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
344
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.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 }); }
346
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationsComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
347
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", 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 }); }
345
348
  }
346
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellNotificationsComponent, decorators: [{
349
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellNotificationsComponent, decorators: [{
347
350
  type: Component,
348
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"] }]
349
352
  }], ctorParameters: () => [{ type: i1.Store }] });
@@ -388,10 +391,10 @@ class ShellComponent extends NgSsmComponent {
388
391
  toggleNavigationBarState() {
389
392
  this.dispatchActionType(ShellActionType.toggleNavigationBarState);
390
393
  }
391
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
392
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.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\" />\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 }); }
394
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
395
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", 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 }); }
393
396
  }
394
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ShellComponent, decorators: [{
397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ShellComponent, decorators: [{
395
398
  type: Component,
396
399
  args: [{ selector: 'ngssm-shell', imports: [
397
400
  CommonModule,
@@ -404,7 +407,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
404
407
  SideNavComponent,
405
408
  ShellNotificationsComponent,
406
409
  WrapperComponent
407
- ], 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\" />\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>" }]
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>" }]
408
411
  }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { class: [{
409
412
  type: HostBinding,
410
413
  args: ['class']
@@ -417,7 +420,7 @@ class NotificationShowingEffect {
417
420
  this.snackBar = snackBar;
418
421
  this.processedActions = [ShellActionType.displayNotification];
419
422
  }
420
- processAction(store, state, action) {
423
+ processAction() {
421
424
  this.snackBar.openFromComponent(ShellNotificationPopupComponent, {
422
425
  panelClass: 'ngssm-shell-notification-snack-panel',
423
426
  duration: 1000,
@@ -425,10 +428,10 @@ class NotificationShowingEffect {
425
428
  verticalPosition: 'top'
426
429
  });
427
430
  }
428
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NotificationShowingEffect, deps: [{ token: i1$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable }); }
429
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NotificationShowingEffect }); }
431
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", 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.1.4", ngImport: i0, type: NotificationShowingEffect }); }
430
433
  }
431
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NotificationShowingEffect, decorators: [{
434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NotificationShowingEffect, decorators: [{
432
435
  type: Injectable
433
436
  }], ctorParameters: () => [{ type: i1$1.MatSnackBar }] });
434
437
 
@@ -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?: any\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 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 case ShellActionType.displayNotificationDetails:\n const displayNotificationDetailsAction = action as DisplayNotificationDetailsAction;\n return updateShellState(state, {\n shellNotifications: {\n selectedNotificaitonIndex: { $set: displayNotificationDetailsAction.notificationIndex }\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 } 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: any) {\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\" />\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, Store, State, Action } 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(store: Store, state: State, action: Action): 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, 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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"}
@@ -3,7 +3,7 @@ import { ShellNotificationType } from '../model';
3
3
  export declare class DisplayNotificationAction implements Action {
4
4
  readonly notificationType: ShellNotificationType;
5
5
  readonly title: string;
6
- readonly details?: any;
6
+ readonly details?: unknown | undefined;
7
7
  readonly type: string;
8
- constructor(notificationType: ShellNotificationType, title: string, details?: any);
8
+ constructor(notificationType: ShellNotificationType, title: string, details?: unknown | undefined);
9
9
  }
@@ -1,4 +1,4 @@
1
- import { ViewContainerRef } from '@angular/core';
1
+ import { ViewContainerRef, Type } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { NgSsmComponent, Store } from 'ngssm-store';
4
4
  import * as i0 from "@angular/core";
@@ -6,7 +6,7 @@ export declare class WrapperComponent extends NgSsmComponent {
6
6
  private viewContainerRef;
7
7
  private readonly _innerHtml$;
8
8
  constructor(store: Store, viewContainerRef: ViewContainerRef);
9
- set item(value: any);
9
+ set item(value: string | Type<unknown> | undefined);
10
10
  get innerHtml$(): Observable<string | undefined>;
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<WrapperComponent, never>;
12
12
  static ɵcmp: i0.ɵɵComponentDeclaration<WrapperComponent, "ngssm-wrapper", never, { "item": { "alias": "item"; "required": false; }; }, {}, never, never, true, never>;
@@ -1,11 +1,11 @@
1
1
  import { MatSnackBar } from '@angular/material/snack-bar';
2
- import { Effect, Store, State, Action } from 'ngssm-store';
2
+ import { Effect } from 'ngssm-store';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class NotificationShowingEffect implements Effect {
5
5
  private snackBar;
6
6
  readonly processedActions: string[];
7
7
  constructor(snackBar: MatSnackBar);
8
- processAction(store: Store, state: State, action: Action): void;
8
+ processAction(): void;
9
9
  static ɵfac: i0.ɵɵFactoryDeclaration<NotificationShowingEffect, never>;
10
10
  static ɵprov: i0.ɵɵInjectableDeclaration<NotificationShowingEffect>;
11
11
  }
@@ -1,3 +1,4 @@
1
+ import { Type } from '@angular/core';
1
2
  import { SidenavConfig } from './sidenav-config';
2
3
  /**
3
4
  * Configuration parameters of {@link ShellComponent} component.
@@ -17,5 +18,5 @@ export interface ShellConfig {
17
18
  */
18
19
  displayFooterNotificationsButton?: boolean;
19
20
  /** List of components or html to display in the footer */
20
- footerComponents?: any[];
21
+ footerComponents?: (string | Type<unknown>)[];
21
22
  }
@@ -3,5 +3,5 @@ export interface ShellNotification {
3
3
  type: ShellNotificationType;
4
4
  title: string;
5
5
  timestamp: Date;
6
- details?: any;
6
+ details?: unknown;
7
7
  }
@@ -1,3 +1,4 @@
1
+ import { Type } from '@angular/core';
1
2
  export interface SidenavItem {
2
3
  /** Label displayed in the {@link SideNavComponent} for the section or the link */
3
4
  label: string;
@@ -6,7 +7,7 @@ export interface SidenavItem {
6
7
  /** Router link associated to the item */
7
8
  route?: string;
8
9
  /** Angular component to display at the right of the label */
9
- component?: any;
10
+ component?: string | Type<unknown>;
10
11
  /** If true the link is considered active only if the current route is equal to the item route */
11
12
  linkActiveOnlyIfExact?: boolean;
12
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-shell",
3
- "version": "19.0.1",
3
+ "version": "19.1.0",
4
4
  "description": "NgSsm - A complete sheel with header, footer, side navigation...",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",