ngssm-shell 22.1.0 → 22.2.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.
@@ -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, 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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"}
1
+ {"version":3,"file":"ngssm-shell.mjs","names":[],"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"],"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"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-shell",
3
- "version": "22.1.0",
3
+ "version": "22.2.1",
4
4
  "description": "NgSsm - A complete shell with header, footer, side navigation...",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",
@@ -1,186 +1,191 @@
1
- import * as _angular_core from '@angular/core';
2
- import { EnvironmentProviders, Type } from '@angular/core';
3
- import { Spec } from 'immutability-helper';
4
- import { State, Action } from 'ngssm-store';
5
- import * as ngssm_shell from 'ngssm-shell';
6
- import { NgssmAceEditorMode } from 'ngssm-ace-editor';
7
-
8
- declare const provideNgssmShell: () => EnvironmentProviders;
9
-
10
- interface SidenavItem {
11
- /** Label displayed in the {@link SideNavComponent} for the section or the link */
12
- label: string;
13
- /** Html code for the icon to display before the label */
14
- icon?: string;
15
- /** Router link associated to the item */
16
- route?: string;
17
- /** Angular component to display at the right of the label */
18
- component?: string | Type<unknown>;
19
- /** If true the link is considered active only if the current route is equal to the item route */
20
- linkActiveOnlyIfExact?: boolean;
21
- }
22
-
23
- interface SidenavSection extends SidenavItem {
24
- /** List of links to be displayed for the current section */
25
- items?: SidenavItem[];
26
- }
27
-
1
+ import * as i0 from "@angular/core";
2
+ import { EnvironmentProviders, Type } from "@angular/core";
3
+ import { Spec } from "immutability-helper";
4
+ import { Action, State } from "ngssm-store";
5
+ import { NgssmAceEditorMode } from "ngssm-ace-editor";
6
+ export declare const provideNgssmShell: () => EnvironmentProviders;
7
+ export interface SidenavItem {
8
+ /** Label displayed in the {@link SideNavComponent} for the section or the link */
9
+ label: string;
10
+ /** Html code for the icon to display before the label */
11
+ icon?: string;
12
+ /** Router link associated to the item */
13
+ route?: string;
14
+ /** Angular component to display at the right of the label */
15
+ component?: string | Type<unknown>;
16
+ /** If true the link is considered active only if the current route is equal to the item route */
17
+ linkActiveOnlyIfExact?: boolean;
18
+ }
19
+ export interface SidenavSection extends SidenavItem {
20
+ /** List of links to be displayed for the current section */
21
+ items?: SidenavItem[];
22
+ }
28
23
  /**
29
24
  * Configuration parameters of the {@link SideNavComponent} component.
30
25
  */
31
- interface SidenavConfig {
32
- /** Main title of the sidenav */
33
- title?: string;
34
- /** List of sections to be displayed. Each section is used to group a list of links. */
35
- sections?: SidenavSection[];
26
+ export interface SidenavConfig {
27
+ /** Main title of the sidenav */
28
+ title?: string;
29
+ /** List of sections to be displayed. Each section is used to group a list of links. */
30
+ sections?: SidenavSection[];
36
31
  }
37
-
38
32
  /**
39
33
  * Configuration parameters of {@link ShellComponent} component.
40
34
  */
41
- interface ShellConfig {
42
- /** Path of the logo image to display in the header bar if any */
43
- logo?: string;
44
- /** The title to be displayed in the header bar. */
45
- applicationTitle?: string;
46
- /** Configuration parameters of sidenav associated to the shell. */
47
- sidenavConfig?: SidenavConfig;
48
- /** If true, display the footer MatToolbar */
49
- displayFooter?: boolean;
50
- /**
51
- * If true, the button used to display the list of notifications is displayed.
52
- * For now, this is useless as nothing is done about the notifications
53
- */
54
- displayFooterNotificationsButton?: boolean;
55
- /** List of components or html to display in the footer */
56
- footerComponents?: (string | Type<unknown>)[];
57
- }
58
-
59
- declare enum ShellNotificationType {
60
- success = "Success",
61
- error = "Error"
62
- }
63
-
64
- interface ShellNotification {
65
- type: ShellNotificationType;
66
- title: string;
67
- timestamp: Date;
68
- details?: unknown;
69
- }
70
-
71
- declare enum LockStatus {
72
- notLocked = "Not Locked",
73
- lockedOpen = "Locked Open",
74
- lockedClosed = "Locked Closed"
75
- }
76
-
77
- interface ShellNotifications {
78
- notifications: ShellNotification[];
79
- selectedNotificaitonIndex?: number;
80
- }
81
- declare const getDefaultShellNotifications: () => ShellNotifications;
82
-
83
- declare const selectShellState: (state: State) => ShellState;
84
- declare const updateShellState: (state: State, command: Spec<ShellState, never>) => State;
85
- interface ShellState {
86
- navigationBarOpen: boolean;
87
- navigationBarLockStatus: LockStatus;
88
- shellNotifications: ShellNotifications;
89
- }
90
- declare class ShellStateSpecification {
91
- static readonly featureStateKey = "shell-state";
92
- static readonly initialState: ShellState;
93
- }
94
-
95
- declare enum ShellActionType {
96
- toggleNavigationBarState = "[ShellActionType] toggleNavigationBarState",
97
- openNavigationBar = "[ShellActionType] openNavigationBar",
98
- closeNavigationBar = "[ShellActionType] closeNavigationBar",
99
- lockNavigationBar = "[ShellActionType] lockNavigationBar",
100
- displayNotification = "[ShellActionType] displayNotification",
101
- displayNotificationDetails = "[ShellActionType] displayNotificationDetails",
102
- clearAllNotifications = "[ShellActionType] clearAllNotifications"
103
- }
104
-
105
- declare class DisplayNotificationAction implements Action {
106
- readonly notificationType: ShellNotificationType;
107
- readonly title: string;
108
- readonly details?: unknown | undefined;
109
- readonly type: string;
110
- constructor(notificationType: ShellNotificationType, title: string, details?: unknown | undefined);
111
- }
112
-
113
- declare class DisplayNotificationDetailsAction implements Action {
114
- readonly notificationIndex: number | undefined;
115
- readonly type: string;
116
- constructor(notificationIndex: number | undefined);
117
- }
118
-
119
- declare class LockNavigationBarAction implements Action {
120
- readonly lockStatus: LockStatus;
121
- readonly type: string;
122
- constructor(lockStatus: LockStatus);
123
- }
124
-
125
- declare class ShellNotificationPopupComponent {
126
- readonly shellNotificationIndex: _angular_core.Signal<number>;
127
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShellNotificationPopupComponent, never>;
128
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShellNotificationPopupComponent, "ngssm-shell-notification-popup", never, {}, {}, never, never, true, never>;
129
- }
130
-
131
- declare class ShellComponent {
132
- readonly shellConfig: _angular_core.InputSignal<ShellConfig | undefined>;
133
- readonly notificationsCount: _angular_core.Signal<number>;
134
- readonly navigationBarRendered: _angular_core.Signal<boolean>;
135
- private readonly store;
136
- private readonly navigationBarOpen;
137
- private readonly navigationBarLockStatus;
138
- toggleNavigationBarState(): void;
139
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShellComponent, never>;
140
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShellComponent, "ngssm-shell", never, { "shellConfig": { "alias": "shellConfig"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
141
- }
142
-
143
- declare class ShellNotificationComponent {
144
- readonly displayDetailsButton: _angular_core.InputSignal<boolean>;
145
- readonly shellNotificationIndex: _angular_core.InputSignal<number | undefined>;
146
- readonly shellNotification: _angular_core.Signal<ShellNotification | undefined>;
147
- readonly shellNotificationType: typeof ShellNotificationType;
148
- private readonly store;
149
- private readonly notifications;
150
- displayDetails(): void;
151
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShellNotificationComponent, never>;
152
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShellNotificationComponent, "ngssm-shell-notification", never, { "displayDetailsButton": { "alias": "displayDetailsButton"; "required": false; "isSignal": true; }; "shellNotificationIndex": { "alias": "shellNotificationIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
153
- }
154
-
155
- declare class ShellNotificationsComponent {
156
- readonly notificationSelected: _angular_core.WritableSignal<boolean>;
157
- readonly notifications: _angular_core.Signal<ngssm_shell.ShellNotification[]>;
158
- readonly details: _angular_core.WritableSignal<string>;
159
- readonly shellNotificationType: typeof ShellNotificationType;
160
- readonly ngssmAceEditorMode: typeof NgssmAceEditorMode;
161
- private readonly store;
162
- private readonly selectedNotificaitonIndex;
163
- constructor();
164
- closeDetailsPanel(): void;
165
- clearAll(): void;
166
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShellNotificationsComponent, never>;
167
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShellNotificationsComponent, "ngssm-shell-notifications", never, {}, {}, never, never, true, never>;
168
- }
169
-
170
- declare class SideNavComponent {
171
- config: _angular_core.InputSignal<SidenavConfig | undefined>;
172
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SideNavComponent, never>;
173
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SideNavComponent, "ngssm-side-nav", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
174
- }
175
-
176
- declare class WrapperComponent {
177
- readonly item: _angular_core.InputSignal<string | Type<unknown> | undefined>;
178
- readonly innerHtml: _angular_core.WritableSignal<string | undefined>;
179
- private readonly viewContainerRef;
180
- constructor();
181
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrapperComponent, never>;
182
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrapperComponent, "ngssm-wrapper", never, { "item": { "alias": "item"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
183
- }
184
-
185
- export { DisplayNotificationAction, DisplayNotificationDetailsAction, LockNavigationBarAction, LockStatus, ShellActionType, ShellComponent, ShellNotificationComponent, ShellNotificationPopupComponent, ShellNotificationType, ShellNotificationsComponent, ShellStateSpecification, SideNavComponent, WrapperComponent, getDefaultShellNotifications, provideNgssmShell, selectShellState, updateShellState };
186
- export type { ShellConfig, ShellNotification, ShellNotifications, ShellState, SidenavConfig, SidenavItem, SidenavSection };
35
+ export interface ShellConfig {
36
+ /** Path of the logo image to display in the header bar if any */
37
+ logo?: string;
38
+ /** The title to be displayed in the header bar. */
39
+ applicationTitle?: string;
40
+ /** Configuration parameters of sidenav associated to the shell. */
41
+ sidenavConfig?: SidenavConfig;
42
+ /** If true, display the footer MatToolbar */
43
+ displayFooter?: boolean;
44
+ /**
45
+ * If true, the button used to display the list of notifications is displayed.
46
+ * For now, this is useless as nothing is done about the notifications
47
+ */
48
+ displayFooterNotificationsButton?: boolean;
49
+ /** List of components or html to display in the footer */
50
+ footerComponents?: (string | Type<unknown>)[];
51
+ }
52
+ export declare enum ShellNotificationType {
53
+ success = "Success",
54
+ error = "Error"
55
+ }
56
+ export interface ShellNotification {
57
+ type: ShellNotificationType;
58
+ title: string;
59
+ timestamp: Date;
60
+ details?: unknown;
61
+ }
62
+ export declare enum LockStatus {
63
+ notLocked = "Not Locked",
64
+ lockedOpen = "Locked Open",
65
+ lockedClosed = "Locked Closed"
66
+ }
67
+ export interface ShellNotifications {
68
+ notifications: ShellNotification[];
69
+ selectedNotificaitonIndex?: number;
70
+ }
71
+ export declare const getDefaultShellNotifications: () => ShellNotifications;
72
+ export declare const selectShellState: (state: State) => ShellState;
73
+ export declare const updateShellState: (state: State, command: Spec<ShellState, never>) => State;
74
+ export interface ShellState {
75
+ navigationBarOpen: boolean;
76
+ navigationBarLockStatus: LockStatus;
77
+ shellNotifications: ShellNotifications;
78
+ }
79
+ export declare class ShellStateSpecification {
80
+ static readonly featureStateKey = "shell-state";
81
+ static readonly initialState: ShellState;
82
+ }
83
+ export declare enum ShellActionType {
84
+ toggleNavigationBarState = "[ShellActionType] toggleNavigationBarState",
85
+ openNavigationBar = "[ShellActionType] openNavigationBar",
86
+ closeNavigationBar = "[ShellActionType] closeNavigationBar",
87
+ lockNavigationBar = "[ShellActionType] lockNavigationBar",
88
+ displayNotification = "[ShellActionType] displayNotification",
89
+ displayNotificationDetails = "[ShellActionType] displayNotificationDetails",
90
+ clearAllNotifications = "[ShellActionType] clearAllNotifications"
91
+ }
92
+ export declare class DisplayNotificationAction implements Action {
93
+ readonly notificationType: ShellNotificationType;
94
+ readonly title: string;
95
+ readonly details?: unknown | undefined;
96
+ readonly type: string;
97
+ constructor(notificationType: ShellNotificationType, title: string, details?: unknown | undefined);
98
+ }
99
+ export declare class DisplayNotificationDetailsAction implements Action {
100
+ readonly notificationIndex: number | undefined;
101
+ readonly type: string;
102
+ constructor(notificationIndex: number | undefined);
103
+ }
104
+ export declare class LockNavigationBarAction implements Action {
105
+ readonly lockStatus: LockStatus;
106
+ readonly type: string;
107
+ constructor(lockStatus: LockStatus);
108
+ }
109
+ export declare class ShellNotificationPopupComponent {
110
+ readonly shellNotificationIndex: import("@angular/core").Signal<number>;
111
+ static ɵfac: i0.ɵɵFactoryDeclaration<ShellNotificationPopupComponent, never>;
112
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShellNotificationPopupComponent, "ngssm-shell-notification-popup", never, {}, {}, never, never, true, never>;
113
+ }
114
+ export declare class ShellComponent {
115
+ readonly shellConfig: import("@angular/core").InputSignal<ShellConfig | undefined>;
116
+ readonly notificationsCount: import("@angular/core").Signal<number>;
117
+ readonly navigationBarRendered: import("@angular/core").Signal<boolean>;
118
+ private readonly store;
119
+ private readonly navigationBarOpen;
120
+ private readonly navigationBarLockStatus;
121
+ toggleNavigationBarState(): void;
122
+ static ɵfac: i0.ɵɵFactoryDeclaration<ShellComponent, never>;
123
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShellComponent, "ngssm-shell", never, {
124
+ "shellConfig": {
125
+ "alias": "shellConfig";
126
+ "required": false;
127
+ "isSignal": true;
128
+ };
129
+ }, {}, never, ["*"], true, never>;
130
+ }
131
+ export declare class ShellNotificationComponent {
132
+ readonly displayDetailsButton: import("@angular/core").InputSignal<boolean>;
133
+ readonly shellNotificationIndex: import("@angular/core").InputSignal<number | undefined>;
134
+ readonly shellNotification: import("@angular/core").Signal<ShellNotification | undefined>;
135
+ readonly shellNotificationType: typeof ShellNotificationType;
136
+ private readonly store;
137
+ private readonly notifications;
138
+ displayDetails(): void;
139
+ static ɵfac: i0.ɵɵFactoryDeclaration<ShellNotificationComponent, never>;
140
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShellNotificationComponent, "ngssm-shell-notification", never, {
141
+ "displayDetailsButton": {
142
+ "alias": "displayDetailsButton";
143
+ "required": false;
144
+ "isSignal": true;
145
+ };
146
+ "shellNotificationIndex": {
147
+ "alias": "shellNotificationIndex";
148
+ "required": false;
149
+ "isSignal": true;
150
+ };
151
+ }, {}, never, never, true, never>;
152
+ }
153
+ export declare class ShellNotificationsComponent {
154
+ readonly notificationSelected: import("@angular/core").WritableSignal<boolean>;
155
+ readonly notifications: import("@angular/core").Signal<import("ngssm-shell").ShellNotification[]>;
156
+ readonly details: import("@angular/core").WritableSignal<string>;
157
+ readonly shellNotificationType: typeof ShellNotificationType;
158
+ readonly ngssmAceEditorMode: typeof NgssmAceEditorMode;
159
+ private readonly store;
160
+ private readonly selectedNotificaitonIndex;
161
+ constructor();
162
+ closeDetailsPanel(): void;
163
+ clearAll(): void;
164
+ static ɵfac: i0.ɵɵFactoryDeclaration<ShellNotificationsComponent, never>;
165
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShellNotificationsComponent, "ngssm-shell-notifications", never, {}, {}, never, never, true, never>;
166
+ }
167
+ export declare class SideNavComponent {
168
+ config: import("@angular/core").InputSignal<SidenavConfig | undefined>;
169
+ static ɵfac: i0.ɵɵFactoryDeclaration<SideNavComponent, never>;
170
+ static ɵcmp: i0.ɵɵComponentDeclaration<SideNavComponent, "ngssm-side-nav", never, {
171
+ "config": {
172
+ "alias": "config";
173
+ "required": false;
174
+ "isSignal": true;
175
+ };
176
+ }, {}, never, never, true, never>;
177
+ }
178
+ export declare class WrapperComponent {
179
+ readonly item: import("@angular/core").InputSignal<string | Type<unknown> | undefined>;
180
+ readonly innerHtml: import("@angular/core").WritableSignal<string | undefined>;
181
+ private readonly viewContainerRef;
182
+ constructor();
183
+ static ɵfac: i0.ɵɵFactoryDeclaration<WrapperComponent, never>;
184
+ static ɵcmp: i0.ɵɵComponentDeclaration<WrapperComponent, "ngssm-wrapper", never, {
185
+ "item": {
186
+ "alias": "item";
187
+ "required": false;
188
+ "isSignal": true;
189
+ };
190
+ }, {}, never, never, true, never>;
191
+ }