ngssm-shell 21.1.11 → 22.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngssm-shell.mjs +54 -44
- package/fesm2022/ngssm-shell.mjs.map +1 -1
- package/package.json +1 -1
package/fesm2022/ngssm-shell.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, input, computed, inject,
|
|
2
|
+
import { Injectable, input, computed, inject, 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';
|
|
@@ -137,10 +137,10 @@ class NavigationBarReducer {
|
|
|
137
137
|
}
|
|
138
138
|
return state;
|
|
139
139
|
}
|
|
140
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
141
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
140
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: NavigationBarReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
141
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: NavigationBarReducer });
|
|
142
142
|
}
|
|
143
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
143
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: NavigationBarReducer, decorators: [{
|
|
144
144
|
type: Injectable
|
|
145
145
|
}] });
|
|
146
146
|
|
|
@@ -183,31 +183,34 @@ class ShellNotificationsReducer {
|
|
|
183
183
|
}
|
|
184
184
|
return state;
|
|
185
185
|
}
|
|
186
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
187
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
186
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
187
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationsReducer });
|
|
188
188
|
}
|
|
189
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationsReducer, decorators: [{
|
|
190
190
|
type: Injectable
|
|
191
191
|
}] });
|
|
192
192
|
|
|
193
193
|
class ShellNotificationComponent {
|
|
194
|
-
displayDetailsButton = input(false,
|
|
195
|
-
|
|
194
|
+
displayDetailsButton = input(false, /* @ts-ignore */
|
|
195
|
+
...(ngDevMode ? [{ debugName: "displayDetailsButton" }] : /* istanbul ignore next */ []));
|
|
196
|
+
shellNotificationIndex = input(/* @ts-ignore */
|
|
197
|
+
...(ngDevMode ? [undefined, { debugName: "shellNotificationIndex" }] : /* istanbul ignore next */ []));
|
|
196
198
|
shellNotification = computed(() => {
|
|
197
199
|
return this.notifications()[this.shellNotificationIndex() ?? -1];
|
|
198
|
-
},
|
|
200
|
+
}, /* @ts-ignore */
|
|
201
|
+
...(ngDevMode ? [{ debugName: "shellNotification" }] : /* istanbul ignore next */ []));
|
|
199
202
|
shellNotificationType = ShellNotificationType;
|
|
200
203
|
store = inject(Store);
|
|
201
204
|
notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);
|
|
202
205
|
displayDetails() {
|
|
203
206
|
this.store.dispatchAction(new DisplayNotificationDetailsAction(this.shellNotificationIndex() ?? -1));
|
|
204
207
|
}
|
|
205
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
206
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
208
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
209
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", 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" }] });
|
|
207
210
|
}
|
|
208
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationComponent, decorators: [{
|
|
209
212
|
type: Component,
|
|
210
|
-
args: [{ selector: 'ngssm-shell-notification', imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule],
|
|
213
|
+
args: [{ selector: 'ngssm-shell-notification', imports: [CommonModule, MatCardModule, MatIconModule, MatButtonModule], 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"] }]
|
|
211
214
|
}], propDecorators: { displayDetailsButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayDetailsButton", required: false }] }], shellNotificationIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "shellNotificationIndex", required: false }] }] } });
|
|
212
215
|
|
|
213
216
|
class ShellNotificationPopupComponent {
|
|
@@ -215,17 +218,19 @@ class ShellNotificationPopupComponent {
|
|
|
215
218
|
const items = selectShellState(state).shellNotifications.notifications;
|
|
216
219
|
return items.length - 1;
|
|
217
220
|
});
|
|
218
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
219
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
221
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
222
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", 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"] }] });
|
|
220
223
|
}
|
|
221
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationPopupComponent, decorators: [{
|
|
222
225
|
type: Component,
|
|
223
|
-
args: [{ selector: 'ngssm-shell-notification-popup', imports: [ShellNotificationComponent],
|
|
226
|
+
args: [{ selector: 'ngssm-shell-notification-popup', imports: [ShellNotificationComponent], template: "<ngssm-shell-notification [shellNotificationIndex]=\"shellNotificationIndex()\"></ngssm-shell-notification>", styles: [":host{display:flex;flex-direction:column}\n"] }]
|
|
224
227
|
}] });
|
|
225
228
|
|
|
226
229
|
class WrapperComponent {
|
|
227
|
-
item = input(
|
|
228
|
-
|
|
230
|
+
item = input(/* @ts-ignore */
|
|
231
|
+
...(ngDevMode ? [undefined, { debugName: "item" }] : /* istanbul ignore next */ []));
|
|
232
|
+
innerHtml = signal(undefined, /* @ts-ignore */
|
|
233
|
+
...(ngDevMode ? [{ debugName: "innerHtml" }] : /* istanbul ignore next */ []));
|
|
229
234
|
viewContainerRef = inject(ViewContainerRef);
|
|
230
235
|
constructor() {
|
|
231
236
|
effect(() => {
|
|
@@ -239,30 +244,33 @@ class WrapperComponent {
|
|
|
239
244
|
}
|
|
240
245
|
});
|
|
241
246
|
}
|
|
242
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
243
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
247
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: WrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
248
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", 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" });
|
|
244
249
|
}
|
|
245
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: WrapperComponent, decorators: [{
|
|
246
251
|
type: Component,
|
|
247
|
-
args: [{ selector: 'ngssm-wrapper', imports: [],
|
|
252
|
+
args: [{ selector: 'ngssm-wrapper', imports: [], template: "@if (innerHtml(); as content) {\n <span [innerHTML]=\"content\"></span>\n}\n" }]
|
|
248
253
|
}], ctorParameters: () => [], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: false }] }] } });
|
|
249
254
|
|
|
250
255
|
class SideNavComponent {
|
|
251
|
-
config = input(
|
|
252
|
-
|
|
253
|
-
static
|
|
256
|
+
config = input(/* @ts-ignore */
|
|
257
|
+
...(ngDevMode ? [undefined, { debugName: "config" }] : /* istanbul ignore next */ []));
|
|
258
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SideNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
259
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", 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", "browserUrl", "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"] }] });
|
|
254
260
|
}
|
|
255
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
261
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SideNavComponent, decorators: [{
|
|
256
262
|
type: Component,
|
|
257
|
-
args: [{ selector: 'ngssm-side-nav', imports: [MatDividerModule, RouterModule, WrapperComponent],
|
|
263
|
+
args: [{ selector: 'ngssm-side-nav', imports: [MatDividerModule, RouterModule, WrapperComponent], host: {
|
|
258
264
|
class: 'ngssm-sidenav'
|
|
259
265
|
}, 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" }]
|
|
260
266
|
}], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }] } });
|
|
261
267
|
|
|
262
268
|
class ShellNotificationsComponent {
|
|
263
|
-
notificationSelected = signal(false,
|
|
269
|
+
notificationSelected = signal(false, /* @ts-ignore */
|
|
270
|
+
...(ngDevMode ? [{ debugName: "notificationSelected" }] : /* istanbul ignore next */ []));
|
|
264
271
|
notifications = createSignal((state) => selectShellState(state).shellNotifications.notifications);
|
|
265
|
-
details = signal('',
|
|
272
|
+
details = signal('', /* @ts-ignore */
|
|
273
|
+
...(ngDevMode ? [{ debugName: "details" }] : /* istanbul ignore next */ []));
|
|
266
274
|
shellNotificationType = ShellNotificationType;
|
|
267
275
|
ngssmAceEditorMode = NgssmAceEditorMode;
|
|
268
276
|
store = inject(Store);
|
|
@@ -288,16 +296,17 @@ class ShellNotificationsComponent {
|
|
|
288
296
|
clearAll() {
|
|
289
297
|
this.store.dispatchActionType(ShellActionType.clearAllNotifications);
|
|
290
298
|
}
|
|
291
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
292
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
299
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
300
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", 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"] }] });
|
|
293
301
|
}
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
302
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellNotificationsComponent, decorators: [{
|
|
295
303
|
type: Component,
|
|
296
|
-
args: [{ selector: 'ngssm-shell-notifications', imports: [MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent],
|
|
304
|
+
args: [{ selector: 'ngssm-shell-notifications', imports: [MatCardModule, MatButtonModule, MatIconModule, NgssmAceEditorComponent, ShellNotificationComponent], 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"] }]
|
|
297
305
|
}], ctorParameters: () => [] });
|
|
298
306
|
|
|
299
307
|
class ShellComponent {
|
|
300
|
-
shellConfig = input(
|
|
308
|
+
shellConfig = input(/* @ts-ignore */
|
|
309
|
+
...(ngDevMode ? [undefined, { debugName: "shellConfig" }] : /* istanbul ignore next */ []));
|
|
301
310
|
notificationsCount = createSignal((state) => selectShellState(state).shellNotifications.notifications.length);
|
|
302
311
|
navigationBarRendered = computed(() => {
|
|
303
312
|
let isOpen;
|
|
@@ -313,17 +322,18 @@ class ShellComponent {
|
|
|
313
322
|
break;
|
|
314
323
|
}
|
|
315
324
|
return isOpen;
|
|
316
|
-
},
|
|
325
|
+
}, /* @ts-ignore */
|
|
326
|
+
...(ngDevMode ? [{ debugName: "navigationBarRendered" }] : /* istanbul ignore next */ []));
|
|
317
327
|
store = inject(Store);
|
|
318
328
|
navigationBarOpen = createSignal((state) => selectShellState(state).navigationBarOpen);
|
|
319
329
|
navigationBarLockStatus = createSignal((state) => selectShellState(state).navigationBarLockStatus);
|
|
320
330
|
toggleNavigationBarState() {
|
|
321
331
|
this.store.dispatchActionType(ShellActionType.toggleNavigationBarState);
|
|
322
332
|
}
|
|
323
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
324
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
333
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
334
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", 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"] }] });
|
|
325
335
|
}
|
|
326
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
336
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ShellComponent, decorators: [{
|
|
327
337
|
type: Component,
|
|
328
338
|
args: [{ selector: 'ngssm-shell', imports: [
|
|
329
339
|
RouterModule,
|
|
@@ -335,7 +345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
335
345
|
SideNavComponent,
|
|
336
346
|
ShellNotificationsComponent,
|
|
337
347
|
WrapperComponent
|
|
338
|
-
],
|
|
348
|
+
], host: {
|
|
339
349
|
class: 'ngssm-shell'
|
|
340
350
|
}, 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" }]
|
|
341
351
|
}], propDecorators: { shellConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "shellConfig", required: false }] }] } });
|
|
@@ -351,10 +361,10 @@ class NotificationShowingEffect {
|
|
|
351
361
|
verticalPosition: 'top'
|
|
352
362
|
});
|
|
353
363
|
}
|
|
354
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
355
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
364
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: NotificationShowingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
365
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: NotificationShowingEffect });
|
|
356
366
|
}
|
|
357
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
367
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: NotificationShowingEffect, decorators: [{
|
|
358
368
|
type: Injectable
|
|
359
369
|
}] });
|
|
360
370
|
|
|
@@ -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 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":";;;;;;;;;;;;;;;;;;;;;;;;;;IAAY;AAAZ,CAAA,UAAY,eAAe,EAAA;;AAEzB,IAAA,eAAA,CAAA,0BAAA,CAAA,GAAA,4CAAuE;AACvE,IAAA,eAAA,CAAA,mBAAA,CAAA,GAAA,qCAAyD;AACzD,IAAA,eAAA,CAAA,oBAAA,CAAA,GAAA,sCAA2D;AAC3D,IAAA,eAAA,CAAA,mBAAA,CAAA,GAAA,qCAAyD;;AAGzD,IAAA,eAAA,CAAA,qBAAA,CAAA,GAAA,uCAA6D;AAC7D,IAAA,eAAA,CAAA,4BAAA,CAAA,GAAA,8CAA2E;AAC3E,IAAA,eAAA,CAAA,uBAAA,CAAA,GAAA,yCAAiE;AACnE,CAAC,EAXW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;;MCKd,yBAAyB,CAAA;AAIlB,IAAA,gBAAA;AACA,IAAA,KAAA;AACA,IAAA,OAAA;AALF,IAAA,IAAI,GAAW,eAAe,CAAC,mBAAmB;AAElE,IAAA,WAAA,CACkB,gBAAuC,EACvC,KAAa,EACb,OAAiB,EAAA;QAFjB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,OAAO,GAAP,OAAO;IACtB;AACJ;;MCVY,gCAAgC,CAAA;AAGf,IAAA,iBAAA;AAFZ,IAAA,IAAI,GAAW,eAAe,CAAC,0BAA0B;AAEzE,IAAA,WAAA,CAA4B,iBAAqC,EAAA;QAArC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;IAAuB;AACrE;;MCHY,uBAAuB,CAAA;AAGN,IAAA,UAAA;AAFZ,IAAA,IAAI,GAAW,eAAe,CAAC,iBAAiB;AAEhE,IAAA,WAAA,CAA4B,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;IAAe;AACtD;;ICRW;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,qBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAAA,EAAA,CAAA,CAAA;;ICArB;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAChC,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;ACOf,MAAM,4BAA4B,GAAG,OAA2B;AACrE,IAAA,aAAa,EAAE;AAChB,CAAA;;ACHM,MAAM,gBAAgB,GAAG,CAAC,KAAY,KAAiB,KAAK,CAAC,uBAAuB,CAAC,eAAe;AAEpG,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,OAAgC,KAC7E,MAAM,CAAC,KAAK,EAAE;AACZ,IAAA,CAAC,uBAAuB,CAAC,eAAe,GAAG;AAC5C,CAAA;AAYI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB,CAAA;AAC3B,IAAA,OAAgB,eAAe,GAAG,aAAa;IAC/C,OAAgB,YAAY,GAAe;AAChD,QAAA,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,UAAU,CAAC,SAAS;QAC7C,kBAAkB,EAAE,4BAA4B;KACjD;;AANU,uBAAuB,GAAA,UAAA,CAAA;AAJnC,IAAA,iBAAiB,CAAC;QACjB,eAAe,EAAE,uBAAuB,CAAC,eAAe;QACxD,YAAY,EAAE,uBAAuB,CAAC;KACvC;AACY,CAAA,EAAA,uBAAuB,CAOnC;;MCtBY,oBAAoB,CAAA;AACf,IAAA,gBAAgB,GAAa;AAC3C,QAAA,eAAe,CAAC,wBAAwB;AACxC,QAAA,eAAe,CAAC,iBAAiB;AACjC,QAAA,eAAe,CAAC,kBAAkB;AAClC,QAAA,eAAe,CAAC;KACjB;IAEM,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;YACjB,KAAK,eAAe,CAAC,wBAAwB;gBAC3C,OAAO,gBAAgB,CAAC,KAAK,EAAE;oBAC7B,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK;AAC/C,iBAAA,CAAC;YAEJ,KAAK,eAAe,CAAC,iBAAiB;AACpC,gBAAA,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE;AAC7C,oBAAA,OAAO,KAAK;gBACd;gBAEA,OAAO,gBAAgB,CAAC,KAAK,EAAE;AAC7B,oBAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI;AAChC,iBAAA,CAAC;YAEJ,KAAK,eAAe,CAAC,kBAAkB;gBACrC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE;AAC9C,oBAAA,OAAO,KAAK;gBACd;gBAEA,OAAO,gBAAgB,CAAC,KAAK,EAAE;AAC7B,oBAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,KAAK;AACjC,iBAAA,CAAC;AAEJ,YAAA,KAAK,eAAe,CAAC,iBAAiB,EAAE;gBACtC,MAAM,uBAAuB,GAAG,MAAiC;gBACjE,OAAO,gBAAgB,CAAC,KAAK,EAAE;AAC7B,oBAAA,uBAAuB,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,UAAU;AACpE,iBAAA,CAAC;YACJ;;AAGF,QAAA,OAAO,KAAK;IACd;wGA1CW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAApB,oBAAoB,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;MCEY,yBAAyB,CAAA;AACpB,IAAA,gBAAgB,GAAa;AAC3C,QAAA,eAAe,CAAC,mBAAmB;AACnC,QAAA,eAAe,CAAC,0BAA0B;AAC1C,QAAA,eAAe,CAAC;KACjB;IAEM,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,eAAe,CAAC,mBAAmB,EAAE;gBACxC,MAAM,yBAAyB,GAAG,MAAmC;AACrE,gBAAA,MAAM,YAAY,GAAsB;oBACtC,IAAI,EAAE,yBAAyB,CAAC,gBAAgB;oBAChD,KAAK,EAAE,yBAAyB,CAAC,KAAK;oBACtC,OAAO,EAAE,yBAAyB,CAAC,OAAO;oBAC1C,SAAS,EAAE,IAAI,IAAI;iBACpB;gBACD,OAAO,gBAAgB,CAAC,KAAK,EAAE;AAC7B,oBAAA,kBAAkB,EAAE;AAClB,wBAAA,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC;AACvC;AACF,iBAAA,CAAC;YACJ;AAEA,YAAA,KAAK,eAAe,CAAC,0BAA0B,EAAE;gBAC/C,MAAM,gCAAgC,GAAG,MAA0C;gBACnF,OAAO,gBAAgB,CAAC,KAAK,EAAE;AAC7B,oBAAA,kBAAkB,EAAE;AAClB,wBAAA,yBAAyB,EAAE,EAAE,IAAI,EAAE,gCAAgC,CAAC,iBAAiB;AACtF;AACF,iBAAA,CAAC;YACJ;YAEA,KAAK,eAAe,CAAC,qBAAqB;gBACxC,OAAO,gBAAgB,CAAC,KAAK,EAAE;AAC7B,oBAAA,kBAAkB,EAAE;AAClB,wBAAA,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE;AAC1B;AACF,iBAAA,CAAC;;AAGN,QAAA,OAAO,KAAK;IACd;wGA1CW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAzB,yBAAyB,EAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;MCWY,0BAA0B,CAAA;AACrB,IAAA,oBAAoB,GAAG,KAAK,CAAC,KAAK,2FAAC;IACnC,sBAAsB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AAExC,IAAA,iBAAiB,GAAG,QAAQ,CAAgC,MAAK;AAC/E,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC;AAClE,IAAA,CAAC,wFAAC;IAEc,qBAAqB,GAAG,qBAAqB;AAE5C,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,IAAA,aAAa,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC;IAE3G,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,gCAAgC,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACtG;wGAfW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBvC,msCA4BA,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDdY,YAAY,4HAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAK1D,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAC3B,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,EAAA,eAAA,EAGrD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,msCAAA,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA;;;MEHpC,+BAA+B,CAAA;AAC1B,IAAA,sBAAsB,GAAG,YAAY,CAAC,CAAC,KAAK,KAAI;QAC9D,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,aAAa;AACtE,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;AACzB,IAAA,CAAC,CAAC;wGAJS,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd5C,6GAAyG,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDS7F,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKzB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,WACjC,CAAC,0BAA0B,CAAC,EAAA,eAAA,EAGpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA;;;MEJpC,gBAAgB,CAAA;IACX,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAsC;AAElD,IAAA,SAAS,GAAG,MAAM,CAAqB,SAAS,gFAAC;AAEhD,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE;AAC7B,YAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAC/B;iBAAO,IAAI,SAAS,EAAE;AACpB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,CAAC;YAClD;AACF,QAAA,CAAC,CAAC;IACJ;wGAjBW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,0MCR7B,+EAGA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FDKa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB,EAAE,EAAA,eAAA,EAEM,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+EAAA,EAAA;;;MEWpC,gBAAgB,CAAA;IACpB,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA6B;wGADvC,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,4PCjB7B,s7FAoFA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1EY,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,qfAAE,gBAAgB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAO/C,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAT5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB,CAAC,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAE1C,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,QAAA,EAAA,s7FAAA,EAAA;;;MEMU,2BAA2B,CAAA;AACtB,IAAA,oBAAoB,GAAG,MAAM,CAAU,KAAK,2FAAC;AAC7C,IAAA,aAAa,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC;AACjG,IAAA,OAAO,GAAG,MAAM,CAAS,EAAE,8EAAC;IAE5B,qBAAqB,GAAG,qBAAqB;IAC7C,kBAAkB,GAAG,kBAAkB;AAEtC,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,IAAA,yBAAyB,GAAG,YAAY,CACvD,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,yBAAyB,CAChF;AAED,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,EAAE;AAC9C,YAAA,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO;YAClC,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACpD;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB;AACF,QAAA,CAAC,CAAC;IACJ;IAEO,iBAAiB,GAAA;QACtB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,gCAAgC,CAAC,SAAS,CAAC,CAAC;IAC5E;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,qBAAqB,CAAC;IACtE;wGAlCW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBxC,y4CAkCA,EAAA,MAAA,EAAA,CAAA,gLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlBY,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKjG,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,OAAA,EAC5B,CAAC,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,uBAAuB,EAAE,0BAA0B,CAAC,EAAA,eAAA,EAG5F,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,y4CAAA,EAAA,MAAA,EAAA,CAAA,gLAAA,CAAA,EAAA;;;MEkBpC,cAAc,CAAA;IACT,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAe;AAElC,IAAA,kBAAkB,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7G,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACpD,QAAA,IAAI,MAAe;AAEnB,QAAA,QAAQ,IAAI,CAAC,uBAAuB,EAAE;YACpC,KAAK,UAAU,CAAC,YAAY;gBAC1B,MAAM,GAAG,KAAK;gBACd;YAEF,KAAK,UAAU,CAAC,UAAU;gBACxB,MAAM,GAAG,IAAI;gBACb;AAEF,YAAA;AACE,gBAAA,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBACjC;;AAGJ,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,4FAAC;AAEe,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,IAAA,iBAAiB,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;AACtF,IAAA,uBAAuB,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;IAE5G,wBAAwB,GAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,wBAAwB,CAAC;IACzE;wGA9BW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,sQCrC3B,ovEAyDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpCI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,gBAAgB,gZAChB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,uNACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,2BAA2B,sEAC3B,gBAAgB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAQP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAnB1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,OAAA,EACd;wBACP,YAAY;wBACZ,gBAAgB;wBAChB,gBAAgB;wBAChB,aAAa;wBACb,eAAe;wBACf,cAAc;wBACd,gBAAgB;wBAChB,2BAA2B;wBAC3B;qBACD,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,QAAA,EAAA,ovEAAA,EAAA;;;ME1BU,yBAAyB,CAAA;AACpB,IAAA,gBAAgB,GAAa,CAAC,eAAe,CAAC,mBAAmB,CAAC;AAEjE,IAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;IAExC,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,+BAA+B,EAAE;AAC/D,YAAA,UAAU,EAAE,sCAAsC;AAClD,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,kBAAkB,EAAE,QAAQ;AAC5B,YAAA,gBAAgB,EAAE;AACnB,SAAA,CAAC;IACJ;wGAZW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAzB,yBAAyB,EAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACAM,MAAM,iBAAiB,GAAG,MAA2B;AAC1D,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,eAAe,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;QAChE,aAAa,CAAC,yBAAyB;AACxC,KAAA,CAAC;AACJ;;ACbA;;AAEG;;ACFH;;AAEG;;;;"}
|
|
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, 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})\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 } 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})\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, ViewContainerRef, Type, inject, signal, input, effect } from '@angular/core';\n\n@Component({\n selector: 'ngssm-wrapper',\n imports: [],\n templateUrl: './wrapper.component.html'\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, 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 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, 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})\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, 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 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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"}
|