ngssm-shell 20.3.10 → 21.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.
@@ -1,13 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, inject, input, computed, ChangeDetectionStrategy, Component, ViewContainerRef, signal, effect, makeEnvironmentProviders } from '@angular/core';
2
+ import { Injectable, input, computed, inject, ChangeDetectionStrategy, Component, signal, ViewContainerRef, effect, makeEnvironmentProviders } from '@angular/core';
3
3
  import { NgSsmFeatureState, Store, createSignal, provideReducers, provideEffect } from 'ngssm-store';
4
4
  import { __decorate } from 'tslib';
5
5
  import update from 'immutability-helper';
6
6
  import { MatSnackBar } from '@angular/material/snack-bar';
7
- import * as i1 from '@angular/common';
8
- import { CommonModule } from '@angular/common';
9
7
  import * as i2 from '@angular/material/card';
10
8
  import { MatCardModule } from '@angular/material/card';
9
+ import * as i1 from '@angular/common';
10
+ import { CommonModule } from '@angular/common';
11
11
  import * as i3 from '@angular/material/icon';
12
12
  import { MatIconModule } from '@angular/material/icon';
13
13
  import * as i2$1 from '@angular/material/button';
@@ -38,25 +38,30 @@ var ShellActionType;
38
38
  })(ShellActionType || (ShellActionType = {}));
39
39
 
40
40
  class DisplayNotificationAction {
41
+ notificationType;
42
+ title;
43
+ details;
44
+ type = ShellActionType.displayNotification;
41
45
  constructor(notificationType, title, details) {
42
46
  this.notificationType = notificationType;
43
47
  this.title = title;
44
48
  this.details = details;
45
- this.type = ShellActionType.displayNotification;
46
49
  }
47
50
  }
48
51
 
49
52
  class DisplayNotificationDetailsAction {
53
+ notificationIndex;
54
+ type = ShellActionType.displayNotificationDetails;
50
55
  constructor(notificationIndex) {
51
56
  this.notificationIndex = notificationIndex;
52
- this.type = ShellActionType.displayNotificationDetails;
53
57
  }
54
58
  }
55
59
 
56
60
  class LockNavigationBarAction {
61
+ lockStatus;
62
+ type = ShellActionType.lockNavigationBar;
57
63
  constructor(lockStatus) {
58
64
  this.lockStatus = lockStatus;
59
- this.type = ShellActionType.lockNavigationBar;
60
65
  }
61
66
  }
62
67
 
@@ -82,12 +87,12 @@ const updateShellState = (state, command) => update(state, {
82
87
  [ShellStateSpecification.featureStateKey]: command
83
88
  });
84
89
  let ShellStateSpecification = class ShellStateSpecification {
85
- static { this.featureStateKey = 'shell-state'; }
86
- static { this.initialState = {
90
+ static featureStateKey = 'shell-state';
91
+ static initialState = {
87
92
  navigationBarOpen: true,
88
93
  navigationBarLockStatus: LockStatus.notLocked,
89
94
  shellNotifications: getDefaultShellNotifications()
90
- }; }
95
+ };
91
96
  };
92
97
  ShellStateSpecification = __decorate([
93
98
  NgSsmFeatureState({
@@ -97,14 +102,12 @@ ShellStateSpecification = __decorate([
97
102
  ], ShellStateSpecification);
98
103
 
99
104
  class NavigationBarReducer {
100
- constructor() {
101
- this.processedActions = [
102
- ShellActionType.toggleNavigationBarState,
103
- ShellActionType.openNavigationBar,
104
- ShellActionType.closeNavigationBar,
105
- ShellActionType.lockNavigationBar
106
- ];
107
- }
105
+ processedActions = [
106
+ ShellActionType.toggleNavigationBarState,
107
+ ShellActionType.openNavigationBar,
108
+ ShellActionType.closeNavigationBar,
109
+ ShellActionType.lockNavigationBar
110
+ ];
108
111
  updateState(state, action) {
109
112
  switch (action.type) {
110
113
  case ShellActionType.toggleNavigationBarState:
@@ -134,21 +137,19 @@ class NavigationBarReducer {
134
137
  }
135
138
  return state;
136
139
  }
137
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: NavigationBarReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
138
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: NavigationBarReducer }); }
140
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NavigationBarReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
141
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NavigationBarReducer });
139
142
  }
140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: NavigationBarReducer, decorators: [{
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NavigationBarReducer, decorators: [{
141
144
  type: Injectable
142
145
  }] });
143
146
 
144
147
  class ShellNotificationsReducer {
145
- constructor() {
146
- this.processedActions = [
147
- ShellActionType.displayNotification,
148
- ShellActionType.displayNotificationDetails,
149
- ShellActionType.clearAllNotifications
150
- ];
151
- }
148
+ processedActions = [
149
+ ShellActionType.displayNotification,
150
+ ShellActionType.displayNotificationDetails,
151
+ ShellActionType.clearAllNotifications
152
+ ];
152
153
  updateState(state, action) {
153
154
  switch (action.type) {
154
155
  case ShellActionType.displayNotification: {
@@ -182,55 +183,51 @@ class ShellNotificationsReducer {
182
183
  }
183
184
  return state;
184
185
  }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
186
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationsReducer }); }
186
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
187
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationsReducer });
187
188
  }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationsReducer, decorators: [{
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationsReducer, decorators: [{
189
190
  type: Injectable
190
191
  }] });
191
192
 
192
193
  class ShellNotificationComponent {
193
- constructor() {
194
- this.store = inject(Store);
195
- this.notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);
196
- this.displayDetailsButton = input(false, ...(ngDevMode ? [{ debugName: "displayDetailsButton" }] : []));
197
- this.shellNotificationIndex = input(...(ngDevMode ? [undefined, { debugName: "shellNotificationIndex" }] : []));
198
- this.shellNotification = computed(() => {
199
- return this.notifications()[this.shellNotificationIndex() ?? -1];
200
- }, ...(ngDevMode ? [{ debugName: "shellNotification" }] : []));
201
- this.shellNotificationType = ShellNotificationType;
202
- }
194
+ displayDetailsButton = input(false, ...(ngDevMode ? [{ debugName: "displayDetailsButton" }] : []));
195
+ shellNotificationIndex = input(...(ngDevMode ? [undefined, { debugName: "shellNotificationIndex" }] : []));
196
+ shellNotification = computed(() => {
197
+ return this.notifications()[this.shellNotificationIndex() ?? -1];
198
+ }, ...(ngDevMode ? [{ debugName: "shellNotification" }] : []));
199
+ shellNotificationType = ShellNotificationType;
200
+ store = inject(Store);
201
+ notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);
203
202
  displayDetails() {
204
203
  this.store.dispatchAction(new DisplayNotificationDetailsAction(this.shellNotificationIndex() ?? -1));
205
204
  }
206
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
207
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: ShellNotificationComponent, isStandalone: true, selector: "ngssm-shell-notification", inputs: { displayDetailsButton: { classPropertyName: "displayDetailsButton", publicName: "displayDetailsButton", isSignal: true, isRequired: false, transformFunction: null }, shellNotificationIndex: { classPropertyName: "shellNotificationIndex", publicName: "shellNotificationIndex", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (shellNotification(); as notification) {\n <mat-card class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{\n 'ngssm-shell-notification-success': notification.type === shellNotificationType.success,\n 'ngssm-shell-notification-error': notification.type === shellNotificationType.error\n }\">\n @if (notification.type === shellNotificationType.success) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n @if (notification.type === shellNotificationType.error) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n <mat-card-title>{{ notification.title }}</mat-card-title>\n <mat-card-subtitle>{{ notification.timestamp | date: 'shortTime' }}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n @if (displayDetailsButton() && notification.details) {\n <button mat-button (click)=\"displayDetails()\">Display details</button>\n }\n </div>\n </mat-card>\n} @else {\n No notification to display...\n}\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
205
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
206
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ShellNotificationComponent, isStandalone: true, selector: "ngssm-shell-notification", inputs: { displayDetailsButton: { classPropertyName: "displayDetailsButton", publicName: "displayDetailsButton", isSignal: true, isRequired: false, transformFunction: null }, shellNotificationIndex: { classPropertyName: "shellNotificationIndex", publicName: "shellNotificationIndex", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (shellNotification(); as notification) {\n <mat-card class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{\n 'ngssm-shell-notification-success': notification.type === shellNotificationType.success,\n 'ngssm-shell-notification-error': notification.type === shellNotificationType.error\n }\">\n @if (notification.type === shellNotificationType.success) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n @if (notification.type === shellNotificationType.error) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n <mat-card-title>{{ notification.title }}</mat-card-title>\n <mat-card-subtitle>{{ notification.timestamp | date: 'shortTime' }}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n @if (displayDetailsButton() && notification.details) {\n <button mat-button (click)=\"displayDetails()\">Display details</button>\n }\n </div>\n </mat-card>\n} @else {\n No notification to display...\n}\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
208
207
  }
209
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationComponent, decorators: [{
208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationComponent, decorators: [{
210
209
  type: Component,
211
210
  args: [{ selector: 'ngssm-shell-notification', imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (shellNotification(); as notification) {\n <mat-card class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{\n 'ngssm-shell-notification-success': notification.type === shellNotificationType.success,\n 'ngssm-shell-notification-error': notification.type === shellNotificationType.error\n }\">\n @if (notification.type === shellNotificationType.success) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n @if (notification.type === shellNotificationType.error) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n <mat-card-title>{{ notification.title }}</mat-card-title>\n <mat-card-subtitle>{{ notification.timestamp | date: 'shortTime' }}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n @if (displayDetailsButton() && notification.details) {\n <button mat-button (click)=\"displayDetails()\">Display details</button>\n }\n </div>\n </mat-card>\n} @else {\n No notification to display...\n}\n", styles: [":host{display:flex;flex-direction:column}\n"] }]
212
211
  }], propDecorators: { displayDetailsButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayDetailsButton", required: false }] }], shellNotificationIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "shellNotificationIndex", required: false }] }] } });
213
212
 
214
213
  class ShellNotificationPopupComponent {
215
- constructor() {
216
- this.shellNotificationIndex = createSignal((state) => {
217
- const items = selectShellState(state).shellNotifications.notifications;
218
- return items.length - 1;
219
- });
220
- }
221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
222
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.12", type: ShellNotificationPopupComponent, isStandalone: true, selector: "ngssm-shell-notification-popup", ngImport: i0, template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ShellNotificationComponent, selector: "ngssm-shell-notification", inputs: ["displayDetailsButton", "shellNotificationIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
214
+ shellNotificationIndex = createSignal((state) => {
215
+ const items = selectShellState(state).shellNotifications.notifications;
216
+ return items.length - 1;
217
+ });
218
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
219
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ShellNotificationPopupComponent, isStandalone: true, selector: "ngssm-shell-notification-popup", ngImport: i0, template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "component", type: ShellNotificationComponent, selector: "ngssm-shell-notification", inputs: ["displayDetailsButton", "shellNotificationIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
223
220
  }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationPopupComponent, decorators: [{
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationPopupComponent, decorators: [{
225
222
  type: Component,
226
- args: [{ selector: 'ngssm-shell-notification-popup', imports: [CommonModule, ShellNotificationComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"] }]
223
+ args: [{ selector: 'ngssm-shell-notification-popup', imports: [ShellNotificationComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"] }]
227
224
  }] });
228
225
 
229
226
  class WrapperComponent {
227
+ item = input(...(ngDevMode ? [undefined, { debugName: "item" }] : []));
228
+ innerHtml = signal(undefined, ...(ngDevMode ? [{ debugName: "innerHtml" }] : []));
229
+ viewContainerRef = inject(ViewContainerRef);
230
230
  constructor() {
231
- this.viewContainerRef = inject(ViewContainerRef);
232
- this.item = input(...(ngDevMode ? [undefined, { debugName: "item" }] : []));
233
- this.innerHtml = signal(undefined, ...(ngDevMode ? [{ debugName: "innerHtml" }] : []));
234
231
  effect(() => {
235
232
  const inputItem = this.item();
236
233
  if (typeof inputItem === 'string') {
@@ -242,37 +239,35 @@ class WrapperComponent {
242
239
  }
243
240
  });
244
241
  }
245
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: WrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
246
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: WrapperComponent, isStandalone: true, selector: "ngssm-wrapper", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
242
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: WrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
243
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: WrapperComponent, isStandalone: true, selector: "ngssm-wrapper", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
247
244
  }
248
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: WrapperComponent, decorators: [{
245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: WrapperComponent, decorators: [{
249
246
  type: Component,
250
- args: [{ selector: 'ngssm-wrapper', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n" }]
247
+ args: [{ selector: 'ngssm-wrapper', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n" }]
251
248
  }], ctorParameters: () => [], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: false }] }] } });
252
249
 
253
250
  class SideNavComponent {
254
- constructor() {
255
- this.config = input(...(ngDevMode ? [undefined, { debugName: "config" }] : []));
256
- }
257
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: SideNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
258
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: SideNavComponent, isStandalone: true, selector: "ngssm-side-nav", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngssm-sidenav" }, ngImport: i0, template: "@if (config(); as sidenavConfig) {\n <div class=\"ngssm-sidenav-main-container\">\n @if (sidenavConfig.title) {\n <div class=\"ngssm-sidenav-title\">{{ sidenavConfig.title }}</div>\n <mat-divider></mat-divider>\n }\n\n @for (section of sidenavConfig.sections; track section; let last = $last) {\n <ng-container class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n @if (!section.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"section.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: section.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n @for (item of section.items; track item) {\n <div class=\"ngssm-sidenav-item-container\">\n @if (!item.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: item.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n }\n\n @if (!last) {\n <mat-divider></mat-divider>\n }\n </ng-container>\n }\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: WrapperComponent, selector: "ngssm-wrapper", inputs: ["item"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
251
+ config = input(...(ngDevMode ? [undefined, { debugName: "config" }] : []));
252
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SideNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
253
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: SideNavComponent, isStandalone: true, selector: "ngssm-side-nav", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngssm-sidenav" }, ngImport: i0, template: "@if (config(); as sidenavConfig) {\n <div class=\"ngssm-sidenav-main-container\">\n @if (sidenavConfig.title) {\n <div class=\"ngssm-sidenav-title\">{{ sidenavConfig.title }}</div>\n <mat-divider></mat-divider>\n }\n\n @for (section of sidenavConfig.sections; track section; let last = $last) {\n <ng-container class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n @if (!section.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"section.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: section.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n @for (item of section.items; track item) {\n <div class=\"ngssm-sidenav-item-container\">\n @if (!item.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: item.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n }\n\n @if (!last) {\n <mat-divider></mat-divider>\n }\n </ng-container>\n }\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: WrapperComponent, selector: "ngssm-wrapper", inputs: ["item"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
259
254
  }
260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: SideNavComponent, decorators: [{
255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SideNavComponent, decorators: [{
261
256
  type: Component,
262
- args: [{ selector: 'ngssm-side-nav', imports: [CommonModule, MatDividerModule, RouterModule, WrapperComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
257
+ args: [{ selector: 'ngssm-side-nav', imports: [MatDividerModule, RouterModule, WrapperComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
263
258
  class: 'ngssm-sidenav'
264
259
  }, template: "@if (config(); as sidenavConfig) {\n <div class=\"ngssm-sidenav-main-container\">\n @if (sidenavConfig.title) {\n <div class=\"ngssm-sidenav-title\">{{ sidenavConfig.title }}</div>\n <mat-divider></mat-divider>\n }\n\n @for (section of sidenavConfig.sections; track section; let last = $last) {\n <ng-container class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n @if (!section.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"section.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: section.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n @for (item of section.items; track item) {\n <div class=\"ngssm-sidenav-item-container\">\n @if (!item.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: item.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n }\n\n @if (!last) {\n <mat-divider></mat-divider>\n }\n </ng-container>\n }\n </div>\n}\n" }]
265
260
  }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }] } });
266
261
 
267
262
  class ShellNotificationsComponent {
263
+ notificationSelected = signal(false, ...(ngDevMode ? [{ debugName: "notificationSelected" }] : []));
264
+ notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);
265
+ details = signal('', ...(ngDevMode ? [{ debugName: "details" }] : []));
266
+ shellNotificationType = ShellNotificationType;
267
+ ngssmAceEditorMode = NgssmAceEditorMode;
268
+ store = inject(Store);
269
+ selectedNotificaitonIndex = createSignal((state) => selectShellState(state).shellNotifications.selectedNotificaitonIndex);
268
270
  constructor() {
269
- this.store = inject(Store);
270
- this.selectedNotificaitonIndex = createSignal((state) => selectShellState(state).shellNotifications.selectedNotificaitonIndex);
271
- this.notificationSelected = signal(false, ...(ngDevMode ? [{ debugName: "notificationSelected" }] : []));
272
- this.notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);
273
- this.details = signal('', ...(ngDevMode ? [{ debugName: "details" }] : []));
274
- this.shellNotificationType = ShellNotificationType;
275
- this.ngssmAceEditorMode = NgssmAceEditorMode;
276
271
  effect(() => {
277
272
  const items = this.notifications();
278
273
  const index = this.selectedNotificaitonIndex();
@@ -293,47 +288,44 @@ class ShellNotificationsComponent {
293
288
  clearAll() {
294
289
  this.store.dispatchActionType(ShellActionType.clearAllNotifications);
295
290
  }
296
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
297
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: ShellNotificationsComponent, isStandalone: true, selector: "ngssm-shell-notifications", ngImport: i0, template: "@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n", styles: [":host{display:flex;flex-direction:column;padding:8px;min-width:400px;max-width:400px}:host .notifications-container{overflow:auto}:host ngssm-shell-notification{margin:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: NgssmAceEditorComponent, selector: "ngssm-ace-editor", inputs: ["content", "readonly", "editorMode"], outputs: ["contentChanged", "isValidChanged", "editorReady"] }, { kind: "component", type: ShellNotificationComponent, selector: "ngssm-shell-notification", inputs: ["displayDetailsButton", "shellNotificationIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
291
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
292
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ShellNotificationsComponent, isStandalone: true, selector: "ngssm-shell-notifications", ngImport: i0, template: "@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n", styles: [":host{display:flex;flex-direction:column;padding:8px;min-width:400px;max-width:400px}:host .notifications-container{overflow:auto}:host ngssm-shell-notification{margin:4px}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: NgssmAceEditorComponent, selector: "ngssm-ace-editor", inputs: ["content", "readonly", "editorMode"], outputs: ["contentChanged", "isValidChanged", "editorReady"] }, { kind: "component", type: ShellNotificationComponent, selector: "ngssm-shell-notification", inputs: ["displayDetailsButton", "shellNotificationIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
298
293
  }
299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellNotificationsComponent, decorators: [{
294
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellNotificationsComponent, decorators: [{
300
295
  type: Component,
301
- args: [{ selector: 'ngssm-shell-notifications', imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n", styles: [":host{display:flex;flex-direction:column;padding:8px;min-width:400px;max-width:400px}:host .notifications-container{overflow:auto}:host ngssm-shell-notification{margin:4px}\n"] }]
296
+ args: [{ selector: 'ngssm-shell-notifications', imports: [MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n", styles: [":host{display:flex;flex-direction:column;padding:8px;min-width:400px;max-width:400px}:host .notifications-container{overflow:auto}:host ngssm-shell-notification{margin:4px}\n"] }]
302
297
  }], ctorParameters: () => [] });
303
298
 
304
299
  class ShellComponent {
305
- constructor() {
306
- this.store = inject(Store);
307
- this.navigationBarOpen = createSignal((state) => selectShellState(state).navigationBarOpen);
308
- this.navigationBarLockStatus = createSignal((state) => selectShellState(state).navigationBarLockStatus);
309
- this.shellConfig = input(...(ngDevMode ? [undefined, { debugName: "shellConfig" }] : []));
310
- this.notificationsCount = createSignal((state) => selectShellState(state).shellNotifications.notifications.length);
311
- this.navigationBarRendered = computed(() => {
312
- let isOpen;
313
- switch (this.navigationBarLockStatus()) {
314
- case LockStatus.lockedClosed:
315
- isOpen = false;
316
- break;
317
- case LockStatus.lockedOpen:
318
- isOpen = true;
319
- break;
320
- default:
321
- isOpen = this.navigationBarOpen();
322
- break;
323
- }
324
- return isOpen;
325
- }, ...(ngDevMode ? [{ debugName: "navigationBarRendered" }] : []));
326
- }
300
+ shellConfig = input(...(ngDevMode ? [undefined, { debugName: "shellConfig" }] : []));
301
+ notificationsCount = createSignal((state) => selectShellState(state).shellNotifications.notifications.length);
302
+ navigationBarRendered = computed(() => {
303
+ let isOpen;
304
+ switch (this.navigationBarLockStatus()) {
305
+ case LockStatus.lockedClosed:
306
+ isOpen = false;
307
+ break;
308
+ case LockStatus.lockedOpen:
309
+ isOpen = true;
310
+ break;
311
+ default:
312
+ isOpen = this.navigationBarOpen();
313
+ break;
314
+ }
315
+ return isOpen;
316
+ }, ...(ngDevMode ? [{ debugName: "navigationBarRendered" }] : []));
317
+ store = inject(Store);
318
+ navigationBarOpen = createSignal((state) => selectShellState(state).navigationBarOpen);
319
+ navigationBarLockStatus = createSignal((state) => selectShellState(state).navigationBarLockStatus);
327
320
  toggleNavigationBarState() {
328
321
  this.store.dispatchActionType(ShellActionType.toggleNavigationBarState);
329
322
  }
330
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
331
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: ShellComponent, isStandalone: true, selector: "ngssm-shell", inputs: { shellConfig: { classPropertyName: "shellConfig", publicName: "shellConfig", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngssm-shell" }, ngImport: i0, template: "@if (shellConfig(); as config) {\n <div class=\"ngssm-shell-container\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n @if (config.logo) {\n <img [src]=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n }\n\n @if (config.applicationTitle) {\n <span class=\"ngssm-shell-header-title\">\n {{ config.applicationTitle }}\n </span>\n }\n\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"navigationBarRendered()\" class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n @if (config.displayFooter) {\n <mat-toolbar class=\"ngssm-shell-footer\">\n @for (component of config.footerComponents; track component) {\n <ngssm-wrapper [item]=\"component\"></ngssm-wrapper>\n }\n\n <span class=\"ngssm-fxFlex\"></span>\n @if (config.displayFooterNotificationsButton) {\n <button mat-icon-button (click)=\"rightSidebar.toggle()\">\n @if (notificationsCount() > 0) {\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount()\"> </mat-icon>\n } @else {\n <mat-icon class=\"fa-regular fa-message\"> </mat-icon>\n }\n </button>\n }\n </mat-toolbar>\n }\n </div>\n} @else {\n <div class=\"ngssm-shell-no-config\">Please, provide a config for the shell.</div>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i2$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i2$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i2$3.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i3$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i6.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 }); }
323
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
324
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ShellComponent, isStandalone: true, selector: "ngssm-shell", inputs: { shellConfig: { classPropertyName: "shellConfig", publicName: "shellConfig", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngssm-shell" }, ngImport: i0, template: "@if (shellConfig(); as config) {\n <div class=\"ngssm-shell-container\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n @if (config.logo) {\n <img [src]=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n }\n\n @if (config.applicationTitle) {\n <span class=\"ngssm-shell-header-title\">\n {{ config.applicationTitle }}\n </span>\n }\n\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"navigationBarRendered()\" class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n @if (config.displayFooter) {\n <mat-toolbar class=\"ngssm-shell-footer\">\n @for (component of config.footerComponents; track component) {\n <ngssm-wrapper [item]=\"component\"></ngssm-wrapper>\n }\n\n <span class=\"ngssm-fxFlex\"></span>\n @if (config.displayFooterNotificationsButton) {\n <button mat-icon-button (click)=\"rightSidebar.toggle()\">\n @if (notificationsCount() > 0) {\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount()\"> </mat-icon>\n } @else {\n <mat-icon class=\"fa-regular fa-message\"> </mat-icon>\n }\n </button>\n }\n </mat-toolbar>\n }\n </div>\n} @else {\n <div class=\"ngssm-shell-no-config\">Please, provide a config for the shell.</div>\n}\n", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i2$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i2$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i2$3.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i3$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i6.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 });
332
325
  }
333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ShellComponent, decorators: [{
326
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ShellComponent, decorators: [{
334
327
  type: Component,
335
328
  args: [{ selector: 'ngssm-shell', imports: [
336
- CommonModule,
337
329
  RouterModule,
338
330
  MatSidenavModule,
339
331
  MatToolbarModule,
@@ -349,10 +341,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
349
341
  }], propDecorators: { shellConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "shellConfig", required: false }] }] } });
350
342
 
351
343
  class NotificationShowingEffect {
352
- constructor() {
353
- this.snackBar = inject(MatSnackBar);
354
- this.processedActions = [ShellActionType.displayNotification];
355
- }
344
+ processedActions = [ShellActionType.displayNotification];
345
+ snackBar = inject(MatSnackBar);
356
346
  processAction() {
357
347
  this.snackBar.openFromComponent(ShellNotificationPopupComponent, {
358
348
  panelClass: 'ngssm-shell-notification-snack-panel',
@@ -361,10 +351,10 @@ class NotificationShowingEffect {
361
351
  verticalPosition: 'top'
362
352
  });
363
353
  }
364
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: NotificationShowingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
365
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: NotificationShowingEffect }); }
354
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NotificationShowingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
355
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NotificationShowingEffect });
366
356
  }
367
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: NotificationShowingEffect, decorators: [{
357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NotificationShowingEffect, decorators: [{
368
358
  type: Injectable
369
359
  }] });
370
360
 
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-shell.mjs","sources":["../../../projects/ngssm-shell/src/lib/actions/shell-action-type.ts","../../../projects/ngssm-shell/src/lib/actions/display-notification.action.ts","../../../projects/ngssm-shell/src/lib/actions/display-notification-details.action.ts","../../../projects/ngssm-shell/src/lib/actions/lock-navigation-bar.action.ts","../../../projects/ngssm-shell/src/lib/model/shell-notification-type.ts","../../../projects/ngssm-shell/src/lib/model/lock-status.ts","../../../projects/ngssm-shell/src/lib/state/shell-notifications.ts","../../../projects/ngssm-shell/src/lib/state/shell.state.ts","../../../projects/ngssm-shell/src/lib/reducers/navigation-bar.reducer.ts","../../../projects/ngssm-shell/src/lib/reducers/shell-notifications.reducer.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification/shell-notification.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification/shell-notification.component.html","../../../projects/ngssm-shell/src/lib/components/shell-notification-popup/shell-notification-popup.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification-popup/shell-notification-popup.component.html","../../../projects/ngssm-shell/src/lib/components/wrapper/wrapper.component.ts","../../../projects/ngssm-shell/src/lib/components/wrapper/wrapper.component.html","../../../projects/ngssm-shell/src/lib/components/side-nav/side-nav.component.ts","../../../projects/ngssm-shell/src/lib/components/side-nav/side-nav.component.html","../../../projects/ngssm-shell/src/lib/components/shell-notifications/shell-notifications.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notifications/shell-notifications.component.html","../../../projects/ngssm-shell/src/lib/components/shell/shell.component.ts","../../../projects/ngssm-shell/src/lib/components/shell/shell.component.html","../../../projects/ngssm-shell/src/lib/effects/notification-showing.effect.ts","../../../projects/ngssm-shell/src/lib/provide-ngssm-shell.ts","../../../projects/ngssm-shell/src/public-api.ts","../../../projects/ngssm-shell/src/ngssm-shell.ts"],"sourcesContent":["export enum ShellActionType {\n // Navigation bar\n toggleNavigationBarState = '[ShellActionType] toggleNavigationBarState',\n openNavigationBar = '[ShellActionType] openNavigationBar',\n closeNavigationBar = '[ShellActionType] closeNavigationBar',\n lockNavigationBar = '[ShellActionType] lockNavigationBar',\n\n // Notifications\n displayNotification = '[ShellActionType] displayNotification',\n displayNotificationDetails = '[ShellActionType] displayNotificationDetails',\n clearAllNotifications = '[ShellActionType] clearAllNotifications'\n}\n","import { Action } from 'ngssm-store';\n\nimport { ShellNotificationType } from '../model';\nimport { ShellActionType } from './shell-action-type';\n\nexport class DisplayNotificationAction implements Action {\n public readonly type: string = ShellActionType.displayNotification;\n\n constructor(\n public readonly notificationType: ShellNotificationType,\n public readonly title: string,\n public readonly details?: unknown\n ) {}\n}\n","import { Action } from 'ngssm-store';\nimport { ShellActionType } from './shell-action-type';\n\nexport class DisplayNotificationDetailsAction implements Action {\n public readonly type: string = ShellActionType.displayNotificationDetails;\n\n constructor(public readonly notificationIndex: number | undefined) {}\n}\n","import { Action } from 'ngssm-store';\nimport { LockStatus } from '../model';\nimport { ShellActionType } from './shell-action-type';\n\nexport class LockNavigationBarAction implements Action {\n public readonly type: string = ShellActionType.lockNavigationBar;\n\n constructor(public readonly lockStatus: LockStatus) {}\n}\n","export enum ShellNotificationType {\n success = 'Success',\n error = 'Error'\n}\n","export enum LockStatus {\n notLocked = 'Not Locked',\n lockedOpen = 'Locked Open',\n lockedClosed = 'Locked Closed'\n}\n","import { ShellNotification } from '../model';\n\nexport interface ShellNotifications {\n notifications: ShellNotification[];\n selectedNotificaitonIndex?: number;\n}\n\nexport const getDefaultShellNotifications = (): ShellNotifications => ({\n notifications: []\n});\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { LockStatus } from '../model';\nimport { getDefaultShellNotifications, ShellNotifications } from './shell-notifications';\n\nexport const selectShellState = (state: State): ShellState => state[ShellStateSpecification.featureStateKey] as ShellState;\n\nexport const updateShellState = (state: State, command: Spec<ShellState, never>): State =>\n update(state, {\n [ShellStateSpecification.featureStateKey]: command\n });\n\nexport interface ShellState {\n navigationBarOpen: boolean;\n navigationBarLockStatus: LockStatus;\n shellNotifications: ShellNotifications;\n}\n\n@NgSsmFeatureState({\n featureStateKey: ShellStateSpecification.featureStateKey,\n initialState: ShellStateSpecification.initialState\n})\nexport class ShellStateSpecification {\n public static readonly featureStateKey = 'shell-state';\n public static readonly initialState: ShellState = {\n navigationBarOpen: true,\n navigationBarLockStatus: LockStatus.notLocked,\n shellNotifications: getDefaultShellNotifications()\n };\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { LockNavigationBarAction, ShellActionType } from '../actions';\nimport { selectShellState, updateShellState } from '../state';\n\n@Injectable()\nexport class NavigationBarReducer implements Reducer {\n public readonly processedActions: string[] = [\n ShellActionType.toggleNavigationBarState,\n ShellActionType.openNavigationBar,\n ShellActionType.closeNavigationBar,\n ShellActionType.lockNavigationBar\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case ShellActionType.toggleNavigationBarState:\n return updateShellState(state, {\n navigationBarOpen: { $apply: (value) => !value }\n });\n\n case ShellActionType.openNavigationBar:\n if (selectShellState(state).navigationBarOpen) {\n return state;\n }\n\n return updateShellState(state, {\n navigationBarOpen: { $set: true }\n });\n\n case ShellActionType.closeNavigationBar:\n if (!selectShellState(state).navigationBarOpen) {\n return state;\n }\n\n return updateShellState(state, {\n navigationBarOpen: { $set: false }\n });\n\n case ShellActionType.lockNavigationBar: {\n const lockNavigationBarAction = action as LockNavigationBarAction;\n return updateShellState(state, {\n navigationBarLockStatus: { $set: lockNavigationBarAction.lockStatus }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DisplayNotificationAction, DisplayNotificationDetailsAction, ShellActionType } from '../actions';\nimport { ShellNotification } from '../model';\nimport { updateShellState } from '../state';\n\n@Injectable()\nexport class ShellNotificationsReducer implements Reducer {\n public readonly processedActions: string[] = [\n ShellActionType.displayNotification,\n ShellActionType.displayNotificationDetails,\n ShellActionType.clearAllNotifications\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case ShellActionType.displayNotification: {\n const displayNotificationAction = action as DisplayNotificationAction;\n const notification: ShellNotification = {\n type: displayNotificationAction.notificationType,\n title: displayNotificationAction.title,\n details: displayNotificationAction.details,\n timestamp: new Date()\n };\n return updateShellState(state, {\n shellNotifications: {\n notifications: { $push: [notification] }\n }\n });\n }\n\n case ShellActionType.displayNotificationDetails: {\n const displayNotificationDetailsAction = action as DisplayNotificationDetailsAction;\n return updateShellState(state, {\n shellNotifications: {\n selectedNotificaitonIndex: { $set: displayNotificationDetailsAction.notificationIndex }\n }\n });\n }\n\n case ShellActionType.clearAllNotifications:\n return updateShellState(state, {\n shellNotifications: {\n notifications: { $set: [] }\n }\n });\n }\n\n return state;\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input, computed } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { ShellNotification, ShellNotificationType } from '../../model';\nimport { selectShellState } from '../../state';\nimport { DisplayNotificationDetailsAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-shell-notification',\n imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule],\n templateUrl: './shell-notification.component.html',\n styleUrls: ['./shell-notification.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationComponent {\n private readonly store = inject(Store);\n private readonly notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);\n\n public readonly displayDetailsButton = input(false);\n public readonly shellNotificationIndex = input<number>();\n\n public readonly shellNotification = computed<ShellNotification | undefined>(() => {\n return this.notifications()[this.shellNotificationIndex() ?? -1];\n });\n\n public readonly shellNotificationType = ShellNotificationType;\n\n public displayDetails(): void {\n this.store.dispatchAction(new DisplayNotificationDetailsAction(this.shellNotificationIndex() ?? -1));\n }\n}\n","@if (shellNotification(); as notification) {\n <mat-card class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{\n 'ngssm-shell-notification-success': notification.type === shellNotificationType.success,\n 'ngssm-shell-notification-error': notification.type === shellNotificationType.error\n }\">\n @if (notification.type === shellNotificationType.success) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n @if (notification.type === shellNotificationType.error) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n <mat-card-title>{{ notification.title }}</mat-card-title>\n <mat-card-subtitle>{{ notification.timestamp | date: 'shortTime' }}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n @if (displayDetailsButton() && notification.details) {\n <button mat-button (click)=\"displayDetails()\">Display details</button>\n }\n </div>\n </mat-card>\n} @else {\n No notification to display...\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { createSignal } from 'ngssm-store';\n\nimport { selectShellState } from '../../state';\nimport { ShellNotificationComponent } from '../shell-notification/shell-notification.component';\n\n@Component({\n selector: 'ngssm-shell-notification-popup',\n imports: [CommonModule, ShellNotificationComponent],\n templateUrl: './shell-notification-popup.component.html',\n styleUrls: ['./shell-notification-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationPopupComponent {\n public readonly shellNotificationIndex = createSignal((state) => {\n const items = selectShellState(state).shellNotifications.notifications;\n return items.length - 1;\n });\n}\n","<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>","import { Component, ChangeDetectionStrategy, ViewContainerRef, Type, inject, signal, input, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ngssm-wrapper',\n imports: [CommonModule],\n templateUrl: './wrapper.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WrapperComponent {\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n public readonly item = input<string | Type<unknown> | undefined>();\n\n public readonly innerHtml = signal<string | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const inputItem = this.item();\n if (typeof inputItem === 'string') {\n this.innerHtml.set(inputItem);\n } else if (inputItem) {\n this.viewContainerRef.clear();\n this.viewContainerRef.createComponent(inputItem);\n }\n });\n }\n}\n","@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { SidenavConfig } from '../../model';\nimport { WrapperComponent } from '../wrapper/wrapper.component';\n\n@Component({\n selector: 'ngssm-side-nav',\n imports: [CommonModule, MatDividerModule, RouterModule, WrapperComponent],\n templateUrl: './side-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngssm-sidenav'\n }\n})\nexport class SideNavComponent {\n public config = input<SidenavConfig | undefined>();\n}\n","@if (config(); as sidenavConfig) {\n <div class=\"ngssm-sidenav-main-container\">\n @if (sidenavConfig.title) {\n <div class=\"ngssm-sidenav-title\">{{ sidenavConfig.title }}</div>\n <mat-divider></mat-divider>\n }\n\n @for (section of sidenavConfig.sections; track section; let last = $last) {\n <ng-container class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n @if (!section.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"section.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: section.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n @for (item of section.items; track item) {\n <div class=\"ngssm-sidenav-item-container\">\n @if (!item.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: item.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n }\n\n @if (!last) {\n <mat-divider></mat-divider>\n }\n </ng-container>\n }\n </div>\n}\n","import { Component, ChangeDetectionStrategy, inject, signal, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { NgssmAceEditorComponent, NgssmAceEditorMode } from 'ngssm-ace-editor';\n\nimport { selectShellState } from '../../state';\nimport { ShellNotificationType } from '../../model';\nimport { DisplayNotificationDetailsAction, ShellActionType } from '../../actions';\nimport { ShellNotificationComponent } from '../shell-notification/shell-notification.component';\n\n@Component({\n selector: 'ngssm-shell-notifications',\n imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent],\n templateUrl: './shell-notifications.component.html',\n styleUrls: ['./shell-notifications.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationsComponent {\n private readonly store = inject(Store);\n private readonly selectedNotificaitonIndex = createSignal(\n (state) => selectShellState(state).shellNotifications.selectedNotificaitonIndex\n );\n\n public readonly notificationSelected = signal<boolean>(false);\n public readonly notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);\n public readonly details = signal<string>('');\n\n public readonly shellNotificationType = ShellNotificationType;\n public readonly ngssmAceEditorMode = NgssmAceEditorMode;\n\n constructor() {\n effect(() => {\n const items = this.notifications();\n const index = this.selectedNotificaitonIndex();\n const id = index ?? -1;\n this.notificationSelected.set(id !== -1);\n const details = items[id]?.details;\n if (details) {\n this.details.set(JSON.stringify(details, null, 2));\n } else {\n this.details.set('');\n }\n });\n }\n\n public closeDetailsPanel(): void {\n this.store.dispatchAction(new DisplayNotificationDetailsAction(undefined));\n }\n\n public clearAll(): void {\n this.store.dispatchActionType(ShellActionType.clearAllNotifications);\n }\n}\n","@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n","import { Component, ChangeDetectionStrategy, inject, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatBadgeModule } from '@angular/material/badge';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { LockStatus, ShellConfig } from '../../model';\nimport { selectShellState } from '../../state';\nimport { ShellActionType } from '../../actions';\nimport { SideNavComponent } from '../side-nav/side-nav.component';\nimport { ShellNotificationsComponent } from '../shell-notifications/shell-notifications.component';\nimport { WrapperComponent } from '../wrapper/wrapper.component';\n\n@Component({\n selector: 'ngssm-shell',\n imports: [\n CommonModule,\n RouterModule,\n MatSidenavModule,\n MatToolbarModule,\n MatIconModule,\n MatButtonModule,\n MatBadgeModule,\n SideNavComponent,\n ShellNotificationsComponent,\n WrapperComponent\n ],\n templateUrl: './shell.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngssm-shell'\n }\n})\nexport class ShellComponent {\n private readonly store = inject(Store);\n private readonly navigationBarOpen = createSignal((state) => selectShellState(state).navigationBarOpen);\n private readonly navigationBarLockStatus = createSignal((state) => selectShellState(state).navigationBarLockStatus);\n\n public readonly shellConfig = input<ShellConfig>();\n\n public readonly notificationsCount = createSignal((state) => selectShellState(state).shellNotifications.notifications.length);\n public readonly navigationBarRendered = computed(() => {\n let isOpen: boolean;\n\n switch (this.navigationBarLockStatus()) {\n case LockStatus.lockedClosed:\n isOpen = false;\n break;\n\n case LockStatus.lockedOpen:\n isOpen = true;\n break;\n\n default:\n isOpen = this.navigationBarOpen();\n break;\n }\n\n return isOpen;\n });\n\n public toggleNavigationBarState(): void {\n this.store.dispatchActionType(ShellActionType.toggleNavigationBarState);\n }\n}\n","@if (shellConfig(); as config) {\n <div class=\"ngssm-shell-container\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n @if (config.logo) {\n <img [src]=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n }\n\n @if (config.applicationTitle) {\n <span class=\"ngssm-shell-header-title\">\n {{ config.applicationTitle }}\n </span>\n }\n\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"navigationBarRendered()\" class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n @if (config.displayFooter) {\n <mat-toolbar class=\"ngssm-shell-footer\">\n @for (component of config.footerComponents; track component) {\n <ngssm-wrapper [item]=\"component\"></ngssm-wrapper>\n }\n\n <span class=\"ngssm-fxFlex\"></span>\n @if (config.displayFooterNotificationsButton) {\n <button mat-icon-button (click)=\"rightSidebar.toggle()\">\n @if (notificationsCount() > 0) {\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount()\"> </mat-icon>\n } @else {\n <mat-icon class=\"fa-regular fa-message\"> </mat-icon>\n }\n </button>\n }\n </mat-toolbar>\n }\n </div>\n} @else {\n <div class=\"ngssm-shell-no-config\">Please, provide a config for the shell.</div>\n}\n","import { inject, 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 private readonly snackBar = inject(MatSnackBar);\n\n public readonly processedActions: string[] = [ShellActionType.displayNotification];\n\n public processAction(): void {\n this.snackBar.openFromComponent(ShellNotificationPopupComponent, {\n panelClass: 'ngssm-shell-notification-snack-panel',\n duration: 1000,\n horizontalPosition: 'center',\n verticalPosition: 'top'\n });\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffect, provideReducers } from 'ngssm-store';\n\nimport { NavigationBarReducer } from './reducers/navigation-bar.reducer';\nimport { ShellNotificationsReducer } from './reducers/shell-notifications.reducer';\nimport { NotificationShowingEffect } from './effects/notification-showing.effect';\n\nexport const provideNgssmShell = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducers(NavigationBarReducer, ShellNotificationsReducer),\n provideEffect(NotificationShowingEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-shell\n */\n\nexport * from './lib/provide-ngssm-shell';\nexport * from './lib/model';\nexport * from './lib/state';\nexport * from './lib/actions';\nexport * from './lib/components';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","i5"],"mappings":"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"}
1
+ {"version":3,"file":"ngssm-shell.mjs","sources":["../../../projects/ngssm-shell/src/lib/actions/shell-action-type.ts","../../../projects/ngssm-shell/src/lib/actions/display-notification.action.ts","../../../projects/ngssm-shell/src/lib/actions/display-notification-details.action.ts","../../../projects/ngssm-shell/src/lib/actions/lock-navigation-bar.action.ts","../../../projects/ngssm-shell/src/lib/model/shell-notification-type.ts","../../../projects/ngssm-shell/src/lib/model/lock-status.ts","../../../projects/ngssm-shell/src/lib/state/shell-notifications.ts","../../../projects/ngssm-shell/src/lib/state/shell.state.ts","../../../projects/ngssm-shell/src/lib/reducers/navigation-bar.reducer.ts","../../../projects/ngssm-shell/src/lib/reducers/shell-notifications.reducer.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification/shell-notification.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification/shell-notification.component.html","../../../projects/ngssm-shell/src/lib/components/shell-notification-popup/shell-notification-popup.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notification-popup/shell-notification-popup.component.html","../../../projects/ngssm-shell/src/lib/components/wrapper/wrapper.component.ts","../../../projects/ngssm-shell/src/lib/components/wrapper/wrapper.component.html","../../../projects/ngssm-shell/src/lib/components/side-nav/side-nav.component.ts","../../../projects/ngssm-shell/src/lib/components/side-nav/side-nav.component.html","../../../projects/ngssm-shell/src/lib/components/shell-notifications/shell-notifications.component.ts","../../../projects/ngssm-shell/src/lib/components/shell-notifications/shell-notifications.component.html","../../../projects/ngssm-shell/src/lib/components/shell/shell.component.ts","../../../projects/ngssm-shell/src/lib/components/shell/shell.component.html","../../../projects/ngssm-shell/src/lib/effects/notification-showing.effect.ts","../../../projects/ngssm-shell/src/lib/provide-ngssm-shell.ts","../../../projects/ngssm-shell/src/public-api.ts","../../../projects/ngssm-shell/src/ngssm-shell.ts"],"sourcesContent":["export enum ShellActionType {\n // Navigation bar\n toggleNavigationBarState = '[ShellActionType] toggleNavigationBarState',\n openNavigationBar = '[ShellActionType] openNavigationBar',\n closeNavigationBar = '[ShellActionType] closeNavigationBar',\n lockNavigationBar = '[ShellActionType] lockNavigationBar',\n\n // Notifications\n displayNotification = '[ShellActionType] displayNotification',\n displayNotificationDetails = '[ShellActionType] displayNotificationDetails',\n clearAllNotifications = '[ShellActionType] clearAllNotifications'\n}\n","import { Action } from 'ngssm-store';\n\nimport { ShellNotificationType } from '../model';\nimport { ShellActionType } from './shell-action-type';\n\nexport class DisplayNotificationAction implements Action {\n public readonly type: string = ShellActionType.displayNotification;\n\n constructor(\n public readonly notificationType: ShellNotificationType,\n public readonly title: string,\n public readonly details?: unknown\n ) {}\n}\n","import { Action } from 'ngssm-store';\nimport { ShellActionType } from './shell-action-type';\n\nexport class DisplayNotificationDetailsAction implements Action {\n public readonly type: string = ShellActionType.displayNotificationDetails;\n\n constructor(public readonly notificationIndex: number | undefined) {}\n}\n","import { Action } from 'ngssm-store';\nimport { LockStatus } from '../model';\nimport { ShellActionType } from './shell-action-type';\n\nexport class LockNavigationBarAction implements Action {\n public readonly type: string = ShellActionType.lockNavigationBar;\n\n constructor(public readonly lockStatus: LockStatus) {}\n}\n","export enum ShellNotificationType {\n success = 'Success',\n error = 'Error'\n}\n","export enum LockStatus {\n notLocked = 'Not Locked',\n lockedOpen = 'Locked Open',\n lockedClosed = 'Locked Closed'\n}\n","import { ShellNotification } from '../model';\n\nexport interface ShellNotifications {\n notifications: ShellNotification[];\n selectedNotificaitonIndex?: number;\n}\n\nexport const getDefaultShellNotifications = (): ShellNotifications => ({\n notifications: []\n});\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { LockStatus } from '../model';\nimport { getDefaultShellNotifications, ShellNotifications } from './shell-notifications';\n\nexport const selectShellState = (state: State): ShellState => state[ShellStateSpecification.featureStateKey] as ShellState;\n\nexport const updateShellState = (state: State, command: Spec<ShellState, never>): State =>\n update(state, {\n [ShellStateSpecification.featureStateKey]: command\n });\n\nexport interface ShellState {\n navigationBarOpen: boolean;\n navigationBarLockStatus: LockStatus;\n shellNotifications: ShellNotifications;\n}\n\n@NgSsmFeatureState({\n featureStateKey: ShellStateSpecification.featureStateKey,\n initialState: ShellStateSpecification.initialState\n})\nexport class ShellStateSpecification {\n public static readonly featureStateKey = 'shell-state';\n public static readonly initialState: ShellState = {\n navigationBarOpen: true,\n navigationBarLockStatus: LockStatus.notLocked,\n shellNotifications: getDefaultShellNotifications()\n };\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { LockNavigationBarAction, ShellActionType } from '../actions';\nimport { selectShellState, updateShellState } from '../state';\n\n@Injectable()\nexport class NavigationBarReducer implements Reducer {\n public readonly processedActions: string[] = [\n ShellActionType.toggleNavigationBarState,\n ShellActionType.openNavigationBar,\n ShellActionType.closeNavigationBar,\n ShellActionType.lockNavigationBar\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case ShellActionType.toggleNavigationBarState:\n return updateShellState(state, {\n navigationBarOpen: { $apply: (value) => !value }\n });\n\n case ShellActionType.openNavigationBar:\n if (selectShellState(state).navigationBarOpen) {\n return state;\n }\n\n return updateShellState(state, {\n navigationBarOpen: { $set: true }\n });\n\n case ShellActionType.closeNavigationBar:\n if (!selectShellState(state).navigationBarOpen) {\n return state;\n }\n\n return updateShellState(state, {\n navigationBarOpen: { $set: false }\n });\n\n case ShellActionType.lockNavigationBar: {\n const lockNavigationBarAction = action as LockNavigationBarAction;\n return updateShellState(state, {\n navigationBarLockStatus: { $set: lockNavigationBarAction.lockStatus }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DisplayNotificationAction, DisplayNotificationDetailsAction, ShellActionType } from '../actions';\nimport { ShellNotification } from '../model';\nimport { updateShellState } from '../state';\n\n@Injectable()\nexport class ShellNotificationsReducer implements Reducer {\n public readonly processedActions: string[] = [\n ShellActionType.displayNotification,\n ShellActionType.displayNotificationDetails,\n ShellActionType.clearAllNotifications\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case ShellActionType.displayNotification: {\n const displayNotificationAction = action as DisplayNotificationAction;\n const notification: ShellNotification = {\n type: displayNotificationAction.notificationType,\n title: displayNotificationAction.title,\n details: displayNotificationAction.details,\n timestamp: new Date()\n };\n return updateShellState(state, {\n shellNotifications: {\n notifications: { $push: [notification] }\n }\n });\n }\n\n case ShellActionType.displayNotificationDetails: {\n const displayNotificationDetailsAction = action as DisplayNotificationDetailsAction;\n return updateShellState(state, {\n shellNotifications: {\n selectedNotificaitonIndex: { $set: displayNotificationDetailsAction.notificationIndex }\n }\n });\n }\n\n case ShellActionType.clearAllNotifications:\n return updateShellState(state, {\n shellNotifications: {\n notifications: { $set: [] }\n }\n });\n }\n\n return state;\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input, computed } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { ShellNotification, ShellNotificationType } from '../../model';\nimport { selectShellState } from '../../state';\nimport { DisplayNotificationDetailsAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-shell-notification',\n imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule],\n templateUrl: './shell-notification.component.html',\n styleUrls: ['./shell-notification.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationComponent {\n public readonly displayDetailsButton = input(false);\n public readonly shellNotificationIndex = input<number>();\n\n public readonly shellNotification = computed<ShellNotification | undefined>(() => {\n return this.notifications()[this.shellNotificationIndex() ?? -1];\n });\n\n public readonly shellNotificationType = ShellNotificationType;\n\n private readonly store = inject(Store);\n private readonly notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);\n\n public displayDetails(): void {\n this.store.dispatchAction(new DisplayNotificationDetailsAction(this.shellNotificationIndex() ?? -1));\n }\n}\n","@if (shellNotification(); as notification) {\n <mat-card class=\"ngssm-shell-notification-card\">\n <mat-card-header\n [ngClass]=\"{\n 'ngssm-shell-notification-success': notification.type === shellNotificationType.success,\n 'ngssm-shell-notification-error': notification.type === shellNotificationType.error\n }\">\n @if (notification.type === shellNotificationType.success) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-check ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n @if (notification.type === shellNotificationType.error) {\n <mat-icon mat-card-avatar class=\"fa-solid fa-triangle-exclamation ngssm-shell-avatar-notification\"> </mat-icon>\n }\n\n <mat-card-title>{{ notification.title }}</mat-card-title>\n <mat-card-subtitle>{{ notification.timestamp | date: 'shortTime' }}</mat-card-subtitle>\n </mat-card-header>\n <div class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n @if (displayDetailsButton() && notification.details) {\n <button mat-button (click)=\"displayDetails()\">Display details</button>\n }\n </div>\n </mat-card>\n} @else {\n No notification to display...\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\nimport { createSignal } from 'ngssm-store';\n\nimport { selectShellState } from '../../state';\nimport { ShellNotificationComponent } from '../shell-notification/shell-notification.component';\n\n@Component({\n selector: 'ngssm-shell-notification-popup',\n imports: [ShellNotificationComponent],\n templateUrl: './shell-notification-popup.component.html',\n styleUrls: ['./shell-notification-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationPopupComponent {\n public readonly shellNotificationIndex = createSignal((state) => {\n const items = selectShellState(state).shellNotifications.notifications;\n return items.length - 1;\n });\n}\n","<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>","import { Component, ChangeDetectionStrategy, ViewContainerRef, Type, inject, signal, input, effect } from '@angular/core';\n\n@Component({\n selector: 'ngssm-wrapper',\n imports: [],\n templateUrl: './wrapper.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WrapperComponent {\n public readonly item = input<string | Type<unknown> | undefined>();\n\n public readonly innerHtml = signal<string | undefined>(undefined);\n\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n constructor() {\n effect(() => {\n const inputItem = this.item();\n if (typeof inputItem === 'string') {\n this.innerHtml.set(inputItem);\n } else if (inputItem) {\n this.viewContainerRef.clear();\n this.viewContainerRef.createComponent(inputItem);\n }\n });\n }\n}\n","@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\nimport { RouterModule } from '@angular/router';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { SidenavConfig } from '../../model';\nimport { WrapperComponent } from '../wrapper/wrapper.component';\n\n@Component({\n selector: 'ngssm-side-nav',\n imports: [MatDividerModule, RouterModule, WrapperComponent],\n templateUrl: './side-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngssm-sidenav'\n }\n})\nexport class SideNavComponent {\n public config = input<SidenavConfig | undefined>();\n}\n","@if (config(); as sidenavConfig) {\n <div class=\"ngssm-sidenav-main-container\">\n @if (sidenavConfig.title) {\n <div class=\"ngssm-sidenav-title\">{{ sidenavConfig.title }}</div>\n <mat-divider></mat-divider>\n }\n\n @for (section of sidenavConfig.sections; track section; let last = $last) {\n <ng-container class=\"ngssm-sidenav-section-container\">\n <div class=\"ngssm-sidenav-section-item-container\">\n @if (!section.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"section.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: section.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (section.icon) {\n <span [innerHTML]=\"section.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ section.label }}\n\n @if (section.component) {\n <ngssm-wrapper [item]=\"section.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n @for (item of section.items; track item) {\n <div class=\"ngssm-sidenav-item-container\">\n @if (!item.route) {\n <div class=\"ngssm-sidenav-section-item\">\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n } @else {\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"ngssm-sidenav-active-link\"\n [routerLinkActiveOptions]=\"{ exact: item.linkActiveOnlyIfExact === true }\"\n class=\"ngssm-sidenav-section-item\">\n <div>\n @if (item.icon) {\n <span [innerHTML]=\"item.icon\" class=\"ngssm-sidenav-item-icon\"></span>\n }\n\n {{ item.label }}\n\n @if (item.component) {\n <ngssm-wrapper [item]=\"item.component\"></ngssm-wrapper>\n }\n </div>\n </a>\n }\n </div>\n }\n\n @if (!last) {\n <mat-divider></mat-divider>\n }\n </ng-container>\n }\n </div>\n}\n","import { Component, ChangeDetectionStrategy, inject, signal, effect } from '@angular/core';\n\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { NgssmAceEditorComponent, NgssmAceEditorMode } from 'ngssm-ace-editor';\n\nimport { selectShellState } from '../../state';\nimport { ShellNotificationType } from '../../model';\nimport { DisplayNotificationDetailsAction, ShellActionType } from '../../actions';\nimport { ShellNotificationComponent } from '../shell-notification/shell-notification.component';\n\n@Component({\n selector: 'ngssm-shell-notifications',\n imports: [MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent],\n templateUrl: './shell-notifications.component.html',\n styleUrls: ['./shell-notifications.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShellNotificationsComponent {\n public readonly notificationSelected = signal<boolean>(false);\n public readonly notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);\n public readonly details = signal<string>('');\n\n public readonly shellNotificationType = ShellNotificationType;\n public readonly ngssmAceEditorMode = NgssmAceEditorMode;\n\n private readonly store = inject(Store);\n private readonly selectedNotificaitonIndex = createSignal(\n (state) => selectShellState(state).shellNotifications.selectedNotificaitonIndex\n );\n\n constructor() {\n effect(() => {\n const items = this.notifications();\n const index = this.selectedNotificaitonIndex();\n const id = index ?? -1;\n this.notificationSelected.set(id !== -1);\n const details = items[id]?.details;\n if (details) {\n this.details.set(JSON.stringify(details, null, 2));\n } else {\n this.details.set('');\n }\n });\n }\n\n public closeDetailsPanel(): void {\n this.store.dispatchAction(new DisplayNotificationDetailsAction(undefined));\n }\n\n public clearAll(): void {\n this.store.dispatchActionType(ShellActionType.clearAllNotifications);\n }\n}\n","@if (!notificationSelected()) {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notifications\n <span class=\"fxFlex\"></span>\n <button mat-stroked-button color=\"primary\" [disabled]=\"notifications().length === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"notifications-container flex-column-stretch fxFlex\">\n @for (notification of notifications(); track notification; let index = $index) {\n <ngssm-shell-notification [shellNotificationIndex]=\"index\" [displayDetailsButton]=\"true\"> </ngssm-shell-notification>\n }\n </mat-card-content>\n </mat-card>\n} @else {\n <mat-card appearance=\"outlined\" class=\"flex-column-stretch fxFlex\">\n <mat-card-header>\n <mat-card-title class=\"flex-row-center\">\n Notification details\n <span class=\"fxFlex\"></span>\n <button mat-icon-button (click)=\"closeDetailsPanel()\">\n <mat-icon class=\"fa-solid fa-rectangle-xmark\"></mat-icon>\n </button>\n </mat-card-title>\n </mat-card-header>\n\n <ngssm-ace-editor class=\"fxFlex\" [readonly]=\"true\" [content]=\"details()\" [editorMode]=\"ngssmAceEditorMode.json\">\n </ngssm-ace-editor>\n </mat-card>\n}\n","import { Component, ChangeDetectionStrategy, inject, input, computed } from '@angular/core';\n\nimport { RouterModule } from '@angular/router';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatBadgeModule } from '@angular/material/badge';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { LockStatus, ShellConfig } from '../../model';\nimport { selectShellState } from '../../state';\nimport { ShellActionType } from '../../actions';\nimport { SideNavComponent } from '../side-nav/side-nav.component';\nimport { ShellNotificationsComponent } from '../shell-notifications/shell-notifications.component';\nimport { WrapperComponent } from '../wrapper/wrapper.component';\n\n@Component({\n selector: 'ngssm-shell',\n imports: [\n RouterModule,\n MatSidenavModule,\n MatToolbarModule,\n MatIconModule,\n MatButtonModule,\n MatBadgeModule,\n SideNavComponent,\n ShellNotificationsComponent,\n WrapperComponent\n ],\n templateUrl: './shell.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngssm-shell'\n }\n})\nexport class ShellComponent {\n public readonly shellConfig = input<ShellConfig>();\n\n public readonly notificationsCount = createSignal((state) => selectShellState(state).shellNotifications.notifications.length);\n public readonly navigationBarRendered = computed(() => {\n let isOpen: boolean;\n\n switch (this.navigationBarLockStatus()) {\n case LockStatus.lockedClosed:\n isOpen = false;\n break;\n\n case LockStatus.lockedOpen:\n isOpen = true;\n break;\n\n default:\n isOpen = this.navigationBarOpen();\n break;\n }\n\n return isOpen;\n });\n\n private readonly store = inject(Store);\n private readonly navigationBarOpen = createSignal((state) => selectShellState(state).navigationBarOpen);\n private readonly navigationBarLockStatus = createSignal((state) => selectShellState(state).navigationBarLockStatus);\n\n public toggleNavigationBarState(): void {\n this.store.dispatchActionType(ShellActionType.toggleNavigationBarState);\n }\n}\n","@if (shellConfig(); as config) {\n <div class=\"ngssm-shell-container\">\n <mat-sidenav-container>\n <mat-sidenav-content>\n <mat-toolbar class=\"ngssm-shell-header\">\n <button mat-icon-button (click)=\"toggleNavigationBarState()\">\n <mat-icon class=\"fa-solid fa-bars\"></mat-icon>\n </button>\n @if (config.logo) {\n <img [src]=\"config.logo\" class=\"ngssm-shell-header-logo\" alt=\"logo\" />\n }\n\n @if (config.applicationTitle) {\n <span class=\"ngssm-shell-header-title\">\n {{ config.applicationTitle }}\n </span>\n }\n\n <ng-content></ng-content>\n </mat-toolbar>\n\n <mat-sidenav-container>\n <mat-sidenav mode=\"side\" [opened]=\"navigationBarRendered()\" class=\"ngssm-shell-navigation-bar\">\n <ngssm-side-nav [config]=\"config.sidenavConfig\"></ngssm-side-nav>\n </mat-sidenav>\n <mat-sidenav-content class=\"ngssm-shell-content\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n </mat-sidenav-container>\n </mat-sidenav-content>\n\n <mat-sidenav mode=\"over\" opened=\"false\" #rightSidebar position=\"end\" class=\"ngssm-shell-messages-bar\">\n <ngssm-shell-notifications class=\"ngssm-shell-notifications\"></ngssm-shell-notifications>\n </mat-sidenav>\n </mat-sidenav-container>\n @if (config.displayFooter) {\n <mat-toolbar class=\"ngssm-shell-footer\">\n @for (component of config.footerComponents; track component) {\n <ngssm-wrapper [item]=\"component\"></ngssm-wrapper>\n }\n\n <span class=\"ngssm-fxFlex\"></span>\n @if (config.displayFooterNotificationsButton) {\n <button mat-icon-button (click)=\"rightSidebar.toggle()\">\n @if (notificationsCount() > 0) {\n <mat-icon class=\"fa-regular fa-message\" [matBadge]=\"notificationsCount()\"> </mat-icon>\n } @else {\n <mat-icon class=\"fa-regular fa-message\"> </mat-icon>\n }\n </button>\n }\n </mat-toolbar>\n }\n </div>\n} @else {\n <div class=\"ngssm-shell-no-config\">Please, provide a config for the shell.</div>\n}\n","import { inject, 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 private readonly snackBar = inject(MatSnackBar);\n\n public processAction(): void {\n this.snackBar.openFromComponent(ShellNotificationPopupComponent, {\n panelClass: 'ngssm-shell-notification-snack-panel',\n duration: 1000,\n horizontalPosition: 'center',\n verticalPosition: 'top'\n });\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffect, provideReducers } from 'ngssm-store';\n\nimport { NavigationBarReducer } from './reducers/navigation-bar.reducer';\nimport { ShellNotificationsReducer } from './reducers/shell-notifications.reducer';\nimport { NotificationShowingEffect } from './effects/notification-showing.effect';\n\nexport const provideNgssmShell = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducers(NavigationBarReducer, ShellNotificationsReducer),\n provideEffect(NotificationShowingEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-shell\n */\n\nexport * from './lib/provide-ngssm-shell';\nexport * from './lib/model';\nexport * from './lib/state';\nexport * from './lib/actions';\nexport * from './lib/components';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-shell",
3
- "version": "20.3.10",
3
+ "version": "21.1.0",
4
4
  "description": "NgSsm - A complete shell with header, footer, side navigation...",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",
@@ -20,13 +20,13 @@
20
20
  "directory": "projects/ngssm-shell"
21
21
  },
22
22
  "module": "fesm2022/ngssm-shell.mjs",
23
- "typings": "index.d.ts",
23
+ "typings": "types/ngssm-shell.d.ts",
24
24
  "exports": {
25
25
  "./package.json": {
26
26
  "default": "./package.json"
27
27
  },
28
28
  ".": {
29
- "types": "./index.d.ts",
29
+ "types": "./types/ngssm-shell.d.ts",
30
30
  "default": "./fesm2022/ngssm-shell.mjs"
31
31
  }
32
32
  },
@@ -129,37 +129,37 @@ declare class ShellNotificationPopupComponent {
129
129
  }
130
130
 
131
131
  declare class ShellComponent {
132
- private readonly store;
133
- private readonly navigationBarOpen;
134
- private readonly navigationBarLockStatus;
135
132
  readonly shellConfig: _angular_core.InputSignal<ShellConfig | undefined>;
136
133
  readonly notificationsCount: _angular_core.Signal<number>;
137
134
  readonly navigationBarRendered: _angular_core.Signal<boolean>;
135
+ private readonly store;
136
+ private readonly navigationBarOpen;
137
+ private readonly navigationBarLockStatus;
138
138
  toggleNavigationBarState(): void;
139
139
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShellComponent, never>;
140
140
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShellComponent, "ngssm-shell", never, { "shellConfig": { "alias": "shellConfig"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
141
141
  }
142
142
 
143
143
  declare class ShellNotificationComponent {
144
- private readonly store;
145
- private readonly notifications;
146
144
  readonly displayDetailsButton: _angular_core.InputSignal<boolean>;
147
145
  readonly shellNotificationIndex: _angular_core.InputSignal<number | undefined>;
148
146
  readonly shellNotification: _angular_core.Signal<ShellNotification | undefined>;
149
147
  readonly shellNotificationType: typeof ShellNotificationType;
148
+ private readonly store;
149
+ private readonly notifications;
150
150
  displayDetails(): void;
151
151
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShellNotificationComponent, never>;
152
152
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShellNotificationComponent, "ngssm-shell-notification", never, { "displayDetailsButton": { "alias": "displayDetailsButton"; "required": false; "isSignal": true; }; "shellNotificationIndex": { "alias": "shellNotificationIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
153
153
  }
154
154
 
155
155
  declare class ShellNotificationsComponent {
156
- private readonly store;
157
- private readonly selectedNotificaitonIndex;
158
156
  readonly notificationSelected: _angular_core.WritableSignal<boolean>;
159
157
  readonly notifications: _angular_core.Signal<ngssm_shell.ShellNotification[]>;
160
158
  readonly details: _angular_core.WritableSignal<string>;
161
159
  readonly shellNotificationType: typeof ShellNotificationType;
162
160
  readonly ngssmAceEditorMode: typeof NgssmAceEditorMode;
161
+ private readonly store;
162
+ private readonly selectedNotificaitonIndex;
163
163
  constructor();
164
164
  closeDetailsPanel(): void;
165
165
  clearAll(): void;
@@ -174,9 +174,9 @@ declare class SideNavComponent {
174
174
  }
175
175
 
176
176
  declare class WrapperComponent {
177
- private readonly viewContainerRef;
178
177
  readonly item: _angular_core.InputSignal<string | Type<unknown> | undefined>;
179
178
  readonly innerHtml: _angular_core.WritableSignal<string | undefined>;
179
+ private readonly viewContainerRef;
180
180
  constructor();
181
181
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrapperComponent, never>;
182
182
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrapperComponent, "ngssm-wrapper", never, { "item": { "alias": "item"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;