@zambon-dev/shared 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -23,6 +23,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
23
23
|
|
|
24
24
|
### ⚠ Breaking Changes / Migration
|
|
25
25
|
|
|
26
|
+
## [1.2.0] - 2026-07-28
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- A tokenized app backdrop — `--app-backdrop`, a subtle light-gray gradient — rendered behind the
|
|
31
|
+
whole layout shell so the sidebar's new translucent "glass" surface (from `@library`) reads against
|
|
32
|
+
a colored background.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- `MainLayoutComponent` now floats the sidebar in a padded region over the shared `--app-backdrop`
|
|
37
|
+
gradient (the shell background was a flat gray). This gives the `@library` glass sidebar a colored
|
|
38
|
+
surface to read against; the content area shares the same subtle backdrop.
|
|
39
|
+
|
|
40
|
+
### ⚠ Breaking Changes / Migration
|
|
41
|
+
|
|
42
|
+
None. The `--app-backdrop` and floating sidebar region are applied automatically by
|
|
43
|
+
`MainLayoutComponent`; no consumer action is required.
|
|
44
|
+
|
|
26
45
|
## [1.1.0] - 2026-07-24
|
|
27
46
|
|
|
28
47
|
### Added
|
|
@@ -90,6 +109,7 @@ URL) in `AppConfig`, and implement a hub that pushes the notification list to cl
|
|
|
90
109
|
available via [GitHub Releases](https://github.com/RicardoZambon/ZLibraries/releases) and the
|
|
91
110
|
`shared-v*` tags.
|
|
92
111
|
|
|
93
|
-
[Unreleased]: https://github.com/RicardoZambon/ZLibraries/compare/shared-v1.
|
|
112
|
+
[Unreleased]: https://github.com/RicardoZambon/ZLibraries/compare/shared-v1.2.0...HEAD
|
|
113
|
+
[1.2.0]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v1.2.0
|
|
94
114
|
[1.1.0]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v1.1.0
|
|
95
115
|
[1.0.2]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v1.0.2
|
|
@@ -534,7 +534,7 @@ class MainLayoutComponent {
|
|
|
534
534
|
this.router.navigate(['/login']);
|
|
535
535
|
}
|
|
536
536
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: MainLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
537
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: MainLayoutComponent, isStandalone: true, selector: "shared-main-layout", viewQueries: [{ propertyName: "logoutModal", first: true, predicate: ["logoutModal"], descendants: true }], ngImport: i0, template: "<div class=\"main-container\">\n <lib-sidebar>\n
|
|
537
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: MainLayoutComponent, isStandalone: true, selector: "shared-main-layout", viewQueries: [{ propertyName: "logoutModal", first: true, predicate: ["logoutModal"], descendants: true }], ngImport: i0, template: "<div class=\"main-container\">\n <div class=\"sidebar-region\">\n <lib-sidebar>\n @if (appVersion) {\n <span>v{{ appVersion }}</span>\n }\n </lib-sidebar>\n </div>\n\n <shared-top-bar class=\"toolbar\" (logout)=\"onLogoutClick()\"></shared-top-bar>\n\n <div class=\"content\">\n <framework-tabs>\n <router-outlet></router-outlet>\n </framework-tabs>\n </div>\n</div>\n\n<lib-modal #logoutModal position=\"top\" size=\"xl\" [closeButtonText]=\"'Main-Logout-Modal-Message-Cancel' | translate\">\n <div body>\n <h5>{{ 'Main-Logout-Modal-Message' | translate }}</h5>\n </div>\n <div footer>\n <button type=\"button\" class=\"btn red-600\" (click)=\"onLogoutConfirm()\">{{ 'Main-Logout-Modal-Message-Confirm' | translate }}</button>\n </div>\n</lib-modal>", styles: ["@reference \"tailwindcss\";.main-container{display:grid;height:100vh;max-height:100vh;width:100vw;max-width:100%;background:var(--app-backdrop);grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);grid-template-areas:\"toolbar toolbar\" \"sidebar content\"}.main-container .sidebar-region{padding:.75rem;grid-area:sidebar}.main-container .toolbar{display:flex;justify-content:space-between;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(214 211 209 / var(--tw-border-opacity, 1));background-color:#ffffffe6;padding:.5rem;--tw-shadow: 0 0 4px 0 rgba(0,0,0,.2), 0 3px 20px 0 rgba(0,0,0,.19);--tw-shadow-colored: 0 0 4px 0 var(--tw-shadow-color), 0 3px 20px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);grid-area:toolbar}.main-container .content{overflow-y:auto;padding:.75rem .75rem .5rem;grid-area:content}.main-container framework-tabs{height:100%}lib-modal h5{margin-bottom:.5rem;font-size:1.125rem;font-weight:500;line-height:1.25rem}\n"], dependencies: [{ kind: "component", type: ModalComponent, selector: "lib-modal", inputs: ["closeButtonText", "dialog", "modalProcessing", "position", "size", "title"], outputs: ["closed"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SidebarComponent, selector: "lib-sidebar" }, { kind: "component", type: TabsComponent, selector: "framework-tabs" }, { kind: "component", type: TopBarComponent, selector: "shared-top-bar", outputs: ["logout"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
538
538
|
}
|
|
539
539
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: MainLayoutComponent, decorators: [{
|
|
540
540
|
type: Component,
|
|
@@ -545,7 +545,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
545
545
|
TabsComponent,
|
|
546
546
|
TopBarComponent,
|
|
547
547
|
TranslatePipe,
|
|
548
|
-
], template: "<div class=\"main-container\">\n <lib-sidebar>\n
|
|
548
|
+
], template: "<div class=\"main-container\">\n <div class=\"sidebar-region\">\n <lib-sidebar>\n @if (appVersion) {\n <span>v{{ appVersion }}</span>\n }\n </lib-sidebar>\n </div>\n\n <shared-top-bar class=\"toolbar\" (logout)=\"onLogoutClick()\"></shared-top-bar>\n\n <div class=\"content\">\n <framework-tabs>\n <router-outlet></router-outlet>\n </framework-tabs>\n </div>\n</div>\n\n<lib-modal #logoutModal position=\"top\" size=\"xl\" [closeButtonText]=\"'Main-Logout-Modal-Message-Cancel' | translate\">\n <div body>\n <h5>{{ 'Main-Logout-Modal-Message' | translate }}</h5>\n </div>\n <div footer>\n <button type=\"button\" class=\"btn red-600\" (click)=\"onLogoutConfirm()\">{{ 'Main-Logout-Modal-Message-Confirm' | translate }}</button>\n </div>\n</lib-modal>", styles: ["@reference \"tailwindcss\";.main-container{display:grid;height:100vh;max-height:100vh;width:100vw;max-width:100%;background:var(--app-backdrop);grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);grid-template-areas:\"toolbar toolbar\" \"sidebar content\"}.main-container .sidebar-region{padding:.75rem;grid-area:sidebar}.main-container .toolbar{display:flex;justify-content:space-between;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(214 211 209 / var(--tw-border-opacity, 1));background-color:#ffffffe6;padding:.5rem;--tw-shadow: 0 0 4px 0 rgba(0,0,0,.2), 0 3px 20px 0 rgba(0,0,0,.19);--tw-shadow-colored: 0 0 4px 0 var(--tw-shadow-color), 0 3px 20px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);grid-area:toolbar}.main-container .content{overflow-y:auto;padding:.75rem .75rem .5rem;grid-area:content}.main-container framework-tabs{height:100%}lib-modal h5{margin-bottom:.5rem;font-size:1.125rem;font-weight:500;line-height:1.25rem}\n"] }]
|
|
549
549
|
}], propDecorators: { logoutModal: [{
|
|
550
550
|
type: ViewChild,
|
|
551
551
|
args: ['logoutModal']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zambon-dev-shared.mjs","sources":["../../../../libs/shared/src/lib/layouts/login-layout/login-layout.component.ts","../../../../libs/shared/src/lib/layouts/login-layout/login-layout.component.html","../../../../libs/shared/src/lib/services/authentication.service.ts","../../../../libs/shared/src/lib/services/notifications.service.ts","../../../../libs/shared/src/lib/services/operations-history.service.ts","../../../../libs/shared/src/lib/services/services-history.service.ts","../../../../libs/shared/src/lib/layouts/top-bar/brand/brand.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/brand/brand.component.html","../../../../libs/shared/src/lib/layouts/top-bar/environment-badge/environment-badge.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/environment-badge/environment-badge.component.html","../../../../libs/shared/src/lib/layouts/top-bar/notifications/notifications.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/notifications/notifications.component.html","../../../../libs/shared/src/lib/auth/components/language-selector/language-selector.component.ts","../../../../libs/shared/src/lib/auth/components/language-selector/language-selector.component.html","../../../../libs/shared/src/lib/layouts/top-bar/user-profile/user-profile.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/user-profile/user-profile.component.html","../../../../libs/shared/src/lib/layouts/top-bar/top-bar.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/top-bar.component.html","../../../../libs/shared/src/lib/layouts/main-layout/main-layout.component.ts","../../../../libs/shared/src/lib/layouts/main-layout/main-layout.component.html","../../../../libs/shared/src/lib/auth/components/login/login.component.ts","../../../../libs/shared/src/lib/auth/components/login/login.component.html","../../../../libs/shared/src/lib/auth/auth.module.ts","../../../../libs/shared/src/lib/auth/guards/auth-guard.ts","../../../../libs/shared/src/lib/auth/interceptors/auth-interceptors.ts","../../../../libs/shared/src/lib/components/filters-base.ts","../../../../libs/shared/src/lib/datasets/operations-history.dataset.ts","../../../../libs/shared/src/lib/datasets/services-history.dataset.ts","../../../../libs/shared/src/lib/features/operations-history/operations-history-modal/operations-history-modal.component.ts","../../../../libs/shared/src/lib/features/operations-history/operations-history-modal/operations-history-modal.component.html","../../../../libs/shared/src/lib/features/operations-history/operations-history-child-list/operations-history-child-list.component.ts","../../../../libs/shared/src/lib/features/operations-history/operations-history-child-list/operations-history-child-list.component.html","../../../../libs/shared/src/lib/pipes/bypass-html-sanitizer.pipe.ts","../../../../libs/shared/src/lib/pipes/enum-text.pipe.ts","../../../../libs/shared/src/lib/pipes/utc-date.pipe.ts","../../../../libs/shared/src/lib/features/services-history/services-history-child-list/services-history-child-list.component.ts","../../../../libs/shared/src/lib/features/services-history/services-history-child-list/services-history-child-list.component.html","../../../../libs/shared/src/lib/features/services-history/services-history-view/services-history-view.component.ts","../../../../libs/shared/src/lib/features/services-history/services-history-view/services-history-view.component.html","../../../../libs/shared/src/lib/i18n/shared-i18n.ts","../../../../libs/shared/src/zambon-dev-shared.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\n@Component({\n selector: 'shared-login-layout',\n templateUrl: './login-layout.component.html',\n styleUrls: ['./login-layout.component.scss'],\n imports: [\n RouterModule,\n ]\n})\nexport class LoginLayoutComponent {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"background\"></div>\n\n<div class=\"container\">\n <router-outlet></router-outlet>\n</div>","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { APP_CONFIG, AppConfig, AuthService, TabService } from '@zambon-dev/framework';\nimport { Observable, catchError, interval, map, mergeMap, tap } from 'rxjs';\nimport { IAuthResponse, ICurrentUserInfo } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService extends AuthService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public adminAction: string = 'AdministrativeMaster';\n\n private config: AppConfig = inject(APP_CONFIG);\n\n private readonly BASE_URL: string = `${this.config.BASE_URL}/Authentication`;\n private http: HttpClient = inject(HttpClient);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super(inject(JwtHelperService), inject(TabService));\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public authenticate(model: { username: string, password: string, rememberMe: boolean }): Observable<void> {\n return this.http\n .post<IAuthResponse>(`${this.BASE_URL}/SignIn`, model)\n .pipe(\n map((res: IAuthResponse) => {\n this.setStorage('username', res.username, model.rememberMe);\n this.setStorage('token', res.token, model.rememberMe);\n this.setStorage('refreshToken', res.refreshToken, model.rememberMe);\n this.setStorage('userInfo', window.btoa(JSON.stringify(res as ICurrentUserInfo)), model.rememberMe);\n }),\n catchError((error: HttpErrorResponse) =>\n interval(1000)\n .pipe(\n mergeMap(() => {\n switch(error.status) {\n case 401:\n throw 'InvalidUsernamePassword';\n default:\n throw 'InternalServerError';\n }\n })\n )\n )\n );\n }\n\n public getActions(): Observable<string[]> {\n return this.http.post<string[]>(`${this.BASE_URL}/GetActions`, {});\n }\n\n public getUserInfo(): ICurrentUserInfo | null {\n const userInfo: string | null = this.userInfo;\n if (userInfo) {\n return JSON.parse(window.atob(userInfo)) as ICurrentUserInfo;\n }\n return null;\n }\n\n public tryRefreshToken(): Observable<string> {\n return this.http\n .post<IAuthResponse>(`${this.BASE_URL}/RefreshToken`, {\n username: this.username ?? '',\n refreshToken: this.refreshToken ?? ''\n })\n .pipe(\n tap((res: IAuthResponse) => {\n this.setStorage('token', res.token);\n this.setStorage('refreshToken', res.refreshToken);\n this.setStorage('userInfo', window.btoa(JSON.stringify(res as ICurrentUserInfo)));\n }),\n map((res: IAuthResponse) => res.token ?? '')\n );\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { inject, Injectable } from '@angular/core';\nimport { HubConnection, HubConnectionBuilder, HubConnectionState } from '@microsoft/signalr';\nimport { APP_CONFIG, AppConfig, AuthService } from '@zambon-dev/framework';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { INotification } from '../models';\n\n/**\n * Streams top-bar notifications from a SignalR hub.\n *\n * The hub is configured via `AppConfig.notificationsEnabled` and `AppConfig.notificationsUrl`.\n * When enabled, {@link start} opens a connection (authenticated with the current JWT) and\n * listens for the server to push the notification list via the `ReceiveNotifications` client\n * method. Consuming apps do not interact with this service directly — the top bar drives it.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationsService {\n //#region Variables\n private authService: AuthService = inject(AuthService);\n private config: AppConfig = inject(APP_CONFIG);\n\n private connection?: HubConnection;\n private notifications$: BehaviorSubject<INotification[]> = new BehaviorSubject<INotification[]>([]);\n //#endregion\n\n //#region Properties\n /** Whether the notifications feature is enabled (toggled on and given a hub URL). */\n public get isEnabled(): boolean {\n return this.config.notificationsEnabled && this.config.notificationsUrl.length > 0;\n }\n //#endregion\n\n //#region Public methods\n /** Emits the current list of notifications. */\n public getNotifications(): Observable<INotification[]> {\n return this.notifications$.asObservable();\n }\n\n /** Emits the number of unread notifications. */\n public getUnreadCount(): Observable<number> {\n return this.notifications$.pipe(\n map((notifications: INotification[]) => notifications.filter((n: INotification) => !n.isRead).length),\n );\n }\n\n /** Marks every notification as read and notifies the hub. */\n public markAllAsRead(): void {\n this.notifications$.next(this.notifications$.value.map((n: INotification) => ({ ...n, isRead: true })));\n\n if (this.connection?.state === HubConnectionState.Connected) {\n this.connection.invoke('MarkAllAsRead').catch((error: unknown) => {\n console.error('Failed to mark notifications as read on the hub.', error);\n });\n }\n }\n\n /** Marks a single notification as read (optimistically; the server reconciles on the next push). */\n public markAsRead(notification: INotification): void {\n this.notifications$.next(\n this.notifications$.value.map((n: INotification) => (n === notification ? { ...n, isRead: true } : n)),\n );\n }\n\n /** Opens the SignalR connection and starts receiving notifications. Idempotent and a no-op when disabled. */\n public start(): void {\n if (!this.isEnabled || !!this.connection) {\n return;\n }\n\n this.connection = new HubConnectionBuilder()\n .withUrl(this.config.notificationsUrl, {\n accessTokenFactory: () => this.authService.token ?? '',\n })\n .withAutomaticReconnect()\n .build();\n\n this.connection.on('ReceiveNotifications', (notifications: INotification[]) => {\n this.notifications$.next(notifications ?? []);\n });\n\n this.connection.start().catch((error: unknown) => {\n console.error('Failed to connect to the notifications hub.', error);\n });\n }\n\n /** Closes the SignalR connection. */\n public async stop(): Promise<void> {\n if (this.connection) {\n await this.connection.stop();\n this.connection = undefined;\n }\n }\n //#endregion\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\nimport { IListParameters } from '@zambon-dev/library';\nimport { Observable } from 'rxjs';\nimport { IOperationsHistoryList } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OperationsHistoryService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private config: AppConfig = inject(APP_CONFIG);\n private http: HttpClient = inject(HttpClient);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public list(controllerName: string, entityID: number, serviceHistoryID: number, parameters: IListParameters): Observable<IOperationsHistoryList[]> {\n return this.http.post<IOperationsHistoryList[]>(`${this.config.BASE_URL}/${controllerName}/${entityID}/Audit/${serviceHistoryID}`, parameters);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\nimport { IListParameters } from '@zambon-dev/library';\nimport { Observable } from 'rxjs';\nimport { IServicesHistoryList } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ServicesHistoryService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private config: AppConfig = inject(APP_CONFIG);\n private http: HttpClient = inject(HttpClient);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public list(controllerName: string, entityID: number, parameters: IListParameters): Observable<IServicesHistoryList[]> {\n return this.http.post<IServicesHistoryList[]>(`${this.config.BASE_URL}/${controllerName}/${entityID}/Audit`, parameters);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Component, inject } from '@angular/core';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\n\n@Component({\n selector: 'shared-brand',\n templateUrl: './brand.component.html',\n styleUrls: ['./brand.component.scss'],\n})\nexport class BrandComponent {\n //#region Variables\n private config: AppConfig = inject(APP_CONFIG);\n //#endregion\n\n //#region Properties\n protected get appName(): string {\n return this.config.appName;\n }\n\n protected get companyName(): string {\n return this.config.companyName;\n }\n\n protected get logoUrl(): string | undefined {\n return this.config.logoUrl;\n }\n //#endregion\n}\n","<div class=\"brand\">\n @if (logoUrl) {\n <img class=\"brand-logo\" [src]=\"logoUrl\" [alt]=\"appName\" />\n }\n\n <div class=\"brand-text\">\n <span class=\"brand-app\">{{ appName }}</span>\n @if (companyName) {\n <span class=\"brand-company\">{{ companyName }}</span>\n }\n </div>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\n\n@Component({\n selector: 'shared-environment-badge',\n templateUrl: './environment-badge.component.html',\n styleUrls: ['./environment-badge.component.scss'],\n})\nexport class EnvironmentBadgeComponent {\n //#region Variables\n private config: AppConfig = inject(APP_CONFIG);\n //#endregion\n\n //#region Properties\n /** CSS modifier class for the current environment, falling back to a neutral style. */\n protected get badgeClass(): string {\n const colorByEnvironment: Record<string, string> = {\n DEV: 'env-dev',\n QA: 'env-qa',\n STG: 'env-stg',\n };\n return colorByEnvironment[this.environment] ?? 'env-neutral';\n }\n\n /** Normalized environment key (uppercase, trimmed). */\n protected get environment(): string {\n return (this.config.environment ?? '').trim().toUpperCase();\n }\n\n /** The badge is hidden in production and when no environment is configured. */\n protected get isVisible(): boolean {\n return this.environment.length > 0 && this.environment !== 'PROD';\n }\n //#endregion\n}\n","@if (isVisible) {\n <span class=\"env-badge {{ badgeClass }}\">\n <span class=\"env-dot\"></span>\n <span class=\"env-label\">{{ environment }}</span>\n </span>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { INotification } from '../../../models';\nimport { NotificationsService } from '../../../services';\n\n@Component({\n selector: 'shared-notifications',\n templateUrl: './notifications.component.html',\n styleUrls: ['./notifications.component.scss'],\n imports: [\n AsyncPipe,\n TranslatePipe,\n ],\n})\nexport class NotificationsComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('dropdown') public dropdown!: ElementRef<HTMLDivElement>;\n //#endregion\n\n //#region Variables\n private notificationsService: NotificationsService = inject(NotificationsService);\n private router: Router = inject(Router);\n\n protected notifications$: Observable<INotification[]> = this.notificationsService.getNotifications();\n protected showDropdown = false;\n protected unreadCount$: Observable<number> = this.notificationsService.getUnreadCount();\n //#endregion\n\n //#region Properties\n /** Whether the notifications feature is enabled; when false the bell is not rendered. */\n public get isEnabled(): boolean {\n return this.notificationsService.isEnabled;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnInit(): void {\n this.notificationsService.start();\n }\n //#endregion\n\n //#region Event handlers\n public onDropdownClick(): void {\n this.showDropdown = !this.showDropdown;\n }\n\n public onMarkAllAsRead(): void {\n this.notificationsService.markAllAsRead();\n }\n\n public onNotificationClick(notification: INotification): void {\n this.notificationsService.markAsRead(notification);\n this.showDropdown = false;\n\n const url: string | undefined = notification.callToActionUrl;\n if (!url) {\n return;\n }\n\n if (/^https?:\\/\\//i.test(url)) {\n window.open(url, '_blank', 'noopener');\n } else {\n this.router.navigateByUrl(url);\n }\n }\n //#endregion\n\n //#region Private methods\n @HostListener('window:click', ['$event'])\n private documentClick(event: MouseEvent): void {\n if (this.showDropdown) {\n let target: HTMLElement = <HTMLElement>event.target;\n while (target !== null && target.tagName?.toUpperCase() !== 'BODY') {\n if (target === this.dropdown.nativeElement) {\n return;\n }\n target = <HTMLElement>target.parentElement;\n }\n this.showDropdown = false;\n }\n }\n //#endregion\n}\n","@if (isEnabled) {\n <div #dropdown class=\"notifications\">\n <button class=\"btn gray-300 notifications-toggle\" type=\"button\" (click)=\"onDropdownClick()\"\n [attr.aria-label]=\"'TopBar-Notifications-Title' | translate\">\n <i class=\"fa-solid fa-bell\"></i>\n @if (unreadCount$ | async; as count) {\n <span class=\"notifications-badge\">{{ count }}</span>\n }\n </button>\n\n @if (showDropdown) {\n <div class=\"notifications-panel\">\n @let items = (notifications$ | async) ?? [];\n\n <div class=\"notifications-header\">\n <span>{{ 'TopBar-Notifications-Title' | translate }}</span>\n @if (items.length > 0) {\n <button type=\"button\" class=\"notifications-mark-all\" (click)=\"onMarkAllAsRead()\">\n {{ 'TopBar-Notifications-MarkAllRead' | translate }}\n </button>\n }\n </div>\n\n @if (items.length > 0) {\n <ul class=\"notifications-list\">\n @for (item of items; track $index) {\n <li class=\"notifications-item\" [class.unread]=\"!item.isRead\">\n <button type=\"button\" class=\"notifications-item-btn\"\n [class.has-cta]=\"!!item.callToActionUrl\" (click)=\"onNotificationClick(item)\">\n <span class=\"notifications-item-icon\"><i class=\"{{ item.icon }}\"></i></span>\n <span class=\"notifications-item-body\">\n <span class=\"notifications-item-title\">{{ item.title }}</span>\n <span class=\"notifications-item-description\">{{ item.description }}</span>\n </span>\n @if (item.callToActionUrl) {\n <i class=\"notifications-item-cta fa-solid fa-chevron-right\"></i>\n }\n </button>\n </li>\n }\n </ul>\n } @else {\n <div class=\"notifications-empty\">{{ 'TopBar-Notifications-Empty' | translate }}</div>\n }\n </div>\n }\n </div>\n}\n","import { Component, ElementRef, HostListener, inject, Input, ViewChild } from '@angular/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'shared-language-selector',\n templateUrl: './language-selector.component.html',\n styleUrls: ['./language-selector.component.scss'],\n imports: [\n TranslatePipe,\n ]\n})\nexport class LanguageSelectorComponent {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('dropdown') public dropdown!: ElementRef<HTMLDivElement>;\n\n /** When true, the toggle shows the current language's flag (light-gray button) instead of text. */\n @Input() public showFlag = false;\n\n @Input() public title: string = 'LanguageSelector-Title';\n //#endregion\n\n //#region Variables\n private translate: TranslateService = inject(TranslateService);\n\n protected languages: string[] = this.translate.getLangs();\n protected showDropdown: boolean = false;\n //#endregion\n\n //#region Properties\n public get selectedLanguage(): string {\n return this.translate.currentLang;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n public onDropdownClick(): void {\n this.showDropdown = !this.showDropdown;\n }\n\n public onSelectLanguage(language: string): void {\n localStorage.setItem('language', language);\n this.translate.use(language);\n this.showDropdown = false;\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n @HostListener('window:click', ['$event'])\n private documentClick(event: MouseEvent): void {\n if (this.showDropdown) {\n let target: HTMLElement = <HTMLElement>event.target;\n while (target !== null && target.tagName?.toUpperCase() !== 'BODY') {\n if (target === this.dropdown.nativeElement) {\n return;\n }\n target = <HTMLElement>target.parentElement;\n }\n this.showDropdown = false;\n }\n }\n //#endregion\n}\n","<div #dropdown class=\"dropdown right\" [class.show]=\"showDropdown\">\n <button class=\"btn\" type=\"button\" (click)=\"onDropdownClick()\"\n [class.gray-300]=\"showFlag\" [class.lang-flag-toggle]=\"showFlag\"\n [attr.aria-label]=\"showFlag ? (title | translate) : null\">\n @if (showFlag) {\n <span class=\"flag flag-{{ selectedLanguage }}\"></span>\n } @else {\n {{ title | translate }}\n }\n </button>\n\n <ul>\n @for (lang of languages; track lang) {\n <li>\n <button type=\"button\" class=\"dropdown-item\" [class.selected]=\"lang === selectedLanguage\"\n (click)=\"onSelectLanguage(lang)\">\n <span class=\"flag flag-{{ lang }}\"></span>\n <span class=\"dropdown-label\">{{ 'Language-' + lang | translate }}</span>\n </button>\n </li>\n }\n </ul>\n</div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { ICurrentUserInfo } from '../../../models';\nimport { AuthenticationService } from '../../../services';\n\n@Component({\n selector: 'shared-user-profile',\n templateUrl: './user-profile.component.html',\n styleUrls: ['./user-profile.component.scss'],\n})\nexport class UserProfileComponent implements OnInit {\n //#region Variables\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n\n protected user: ICurrentUserInfo | null = null;\n //#endregion\n\n //#region Properties\n /** Up to two uppercase initials derived from the user's name, used when no picture is set. */\n protected get initials(): string {\n const parts: string[] = this.name.trim().split(/\\s+/).filter((p: string) => p.length > 0);\n if (parts.length === 0) {\n return '';\n }\n\n const first: string = parts[0].charAt(0);\n const last: string = parts.length > 1 ? parts[parts.length - 1].charAt(0) : '';\n return (first + last).toUpperCase();\n }\n\n protected get name(): string {\n return this.user?.name ?? '';\n }\n\n protected get pictureUrl(): string | undefined {\n return this.user?.pictureUrl;\n }\n\n protected get position(): string {\n return this.user?.position ?? '';\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnInit(): void {\n this.user = this.authenticationService.getUserInfo();\n }\n //#endregion\n}\n","<div class=\"user-profile\">\n <div class=\"user-text\">\n <span class=\"user-name\">{{ name }}</span>\n @if (position) {\n <span class=\"user-position\">{{ position }}</span>\n }\n </div>\n\n <div class=\"user-avatar\">\n @if (pictureUrl) {\n <img class=\"user-avatar-img\" [src]=\"pictureUrl\" [alt]=\"name\" />\n } @else {\n <span class=\"user-avatar-initials\">{{ initials }}</span>\n }\n </div>\n</div>\n","import { Component, EventEmitter, Output } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { LanguageSelectorComponent } from '../../auth/components/language-selector/language-selector.component';\nimport { BrandComponent } from './brand/brand.component';\nimport { EnvironmentBadgeComponent } from './environment-badge/environment-badge.component';\nimport { NotificationsComponent } from './notifications/notifications.component';\nimport { UserProfileComponent } from './user-profile/user-profile.component';\n\n@Component({\n selector: 'shared-top-bar',\n templateUrl: './top-bar.component.html',\n styleUrls: ['./top-bar.component.scss'],\n imports: [\n BrandComponent,\n EnvironmentBadgeComponent,\n LanguageSelectorComponent,\n NotificationsComponent,\n TranslatePipe,\n UserProfileComponent,\n ],\n})\nexport class TopBarComponent {\n //#region ViewChilds, Inputs, Outputs\n /** Emitted when the logout button is clicked. */\n @Output() public logout: EventEmitter<void> = new EventEmitter<void>();\n //#endregion\n\n //#region Event handlers\n public onLogoutClick(): void {\n this.logout.emit();\n }\n //#endregion\n}\n","<div class=\"top-bar\">\n <div class=\"top-bar-section top-bar-start\">\n <shared-brand></shared-brand>\n <shared-environment-badge></shared-environment-badge>\n </div>\n\n <div class=\"top-bar-section top-bar-end\">\n <shared-notifications></shared-notifications>\n <shared-language-selector [showFlag]=\"true\"></shared-language-selector>\n\n <!-- Theme switch slot (deferred — see 2026-07-23-top-bar-update-design.md) -->\n\n <shared-user-profile></shared-user-profile>\n\n <button class=\"btn gray-300 top-bar-logout\" type=\"button\" (click)=\"onLogoutClick()\"\n [attr.aria-label]=\"'Main-Logout' | translate\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n </button>\n </div>\n</div>\n","import { Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\nimport { APP_CONFIG, ITab, Tab, TabsComponent, TabService } from '@zambon-dev/framework';\nimport { ModalComponent, SidebarComponent, SidebarMenu, SidebarService } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Subject, take, takeUntil } from 'rxjs';\nimport { AuthenticationService } from '../../services';\nimport { TopBarComponent } from '../top-bar';\n\n@Component({\n selector: 'shared-main-layout',\n templateUrl: './main-layout.component.html',\n styleUrls: ['./main-layout.component.scss'],\n imports: [\n ModalComponent,\n RouterModule,\n SidebarComponent,\n TabsComponent,\n TopBarComponent,\n TranslatePipe,\n ]\n})\nexport class MainLayoutComponent implements OnInit, OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('logoutModal') private logoutModal!: ModalComponent;\n //#endregion\n\n //#region Variables\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private router: Router = inject(Router);\n private sidebarService: SidebarService = inject(SidebarService);\n private tabService: TabService = inject(TabService);\n\n /** Application version (from AppConfig) projected into the sidebar footer. */\n protected appVersion: string = inject(APP_CONFIG).version;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public ngOnInit(): void {\n const url: string = this.router.url;\n\n if (url !== '/' && !this.tabService.isUrlOpen(url)) {\n this.sidebarService.getMenuFromUrl(url)\n .pipe(take(1))\n .subscribe((item: SidebarMenu) => {\n if (!!item) {\n this.tabService.updateTabTitle(url, item.label);\n }\n });\n }\n\n this.sidebarService.menuUrlSelected\n .pipe(takeUntil(this.destroy$))\n .subscribe((item: SidebarMenu) => {\n const tab: ITab = new Tab({\n title: item.label,\n url: item.url,\n });\n this.tabService.openTab(tab);\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public onLogoutClick(): void {\n this.logoutModal.toggleModal();\n }\n\n public onLogoutConfirm(): void {\n this.authenticationService.signOut();\n this.router.navigate(['/login']);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"main-container\">\n <lib-sidebar>\n @if (appVersion) {\n <span>v{{ appVersion }}</span>\n }\n </lib-sidebar>\n\n <shared-top-bar class=\"toolbar\" (logout)=\"onLogoutClick()\"></shared-top-bar>\n\n <div class=\"content\">\n <framework-tabs>\n <router-outlet></router-outlet>\n </framework-tabs>\n </div>\n</div>\n\n<lib-modal #logoutModal position=\"top\" size=\"xl\" [closeButtonText]=\"'Main-Logout-Modal-Message-Cancel' | translate\">\n <div body>\n <h5>{{ 'Main-Logout-Modal-Message' | translate }}</h5>\n </div>\n <div footer>\n <button type=\"button\" class=\"btn red-600\" (click)=\"onLogoutConfirm()\">{{ 'Main-Logout-Modal-Message-Confirm' | translate }}</button>\n </div>\n</lib-modal>","import { NgIf } from '@angular/common';\nimport { Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Router, RouterModule } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { finalize, tap } from 'rxjs';\nimport { AuthenticationService } from '../../../services';\nimport { LanguageSelectorComponent } from '../language-selector/language-selector.component';\n\n@Component({\n selector: 'shared-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss'],\n imports: [\n LanguageSelectorComponent,\n NgIf,\n ReactiveFormsModule,\n RouterModule,\n TranslatePipe,\n ]\n})\nexport class LoginComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('username') public username!: ElementRef<HTMLInputElement>;\n //#endregion\n\n //#region Variables\n protected form!: FormGroup;\n protected formState: {\n error: string | null,\n loading: boolean,\n success: boolean,\n } = {\n error: null,\n loading: false,\n success: false\n };\n\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n private formBuilder: FormBuilder = inject(FormBuilder);\n private router: Router = inject(Router);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n this.form = this.formBuilder.group({\n password: ['', Validators.required],\n rememberMe: [false, { nonNullable: true }],\n username: ['', Validators.required],\n });\n }\n //#endregion\n\n //#region Event handlers\n public onSubmit(): void {\n this.form.markAllAsTouched();\n\n if (this.form.valid) {\n this.form.disable();\n \n this.formState.loading = true;\n this.formState.error = null;\n\n this.authenticationService.authenticate({\n username: this.form.get('username')?.value.toString() ?? '',\n password: this.form.get('password')?.value.toString() ?? '',\n rememberMe: this.form.get('rememberMe')?.value ?? false\n })\n .pipe(\n tap(() => { \n this.formState.success = true\n }),\n finalize(() => this.formState.loading = false)\n )\n .subscribe({\n next: () => {\n const params: URLSearchParams = new URLSearchParams(window.location.search);\n \n this.router.navigate([params.get('returnUrl') ?? '/']);\n },\n error: (e: string) => {\n this.form.enable();\n\n this.form.controls['password'].setValue('');\n this.form.controls['password'].markAsUntouched();\n \n this.username.nativeElement.focus();\n\n switch(e) {\n case 'InvalidUsernamePassword':\n this.formState.error = 'invalid';\n break;\n default:\n this.formState.error = 'internalServerError';\n break;\n }\n }\n });\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"content\">\n <div class=\"login\">\n <div class=\"logo-container\">\n <div class=\"logo\">\n <img src=\"/logo-login.png\" alt=\"Logo\" />\n </div>\n </div>\n \n <h3 class=\"title\">{{ 'Login-Title' | translate }}</h3>\n\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n\n <div class=\"validations\" [class.hidden]=\"!formState.error\">\n \n <div *ngIf=\"formState.error === 'invalid'\">\n {{'Login-Errors-Invalid' | translate}}\n </div>\n \n <div *ngIf=\"formState.error === 'internalServerError'\">{{'Login-Errors-InternalServerError' | translate}}</div>\n </div>\n\n <div class=\"input-group inline\">\n <input type=\"text\" #username id=\"username\" formControlName=\"username\" class=\"form-input peer\" [placeholder]=\"'Login-Username' | translate\" autofocus />\n\n <div class=\"input-group-text\">\n <label for=\"username\">\n <i class=\"fas fa-user fa-fw\"></i>\n </label>\n </div>\n\n <div class=\"validations\">\n <span *ngIf=\"form.get('username')?.hasError('required')\">{{ 'Login-Username-Required' | translate }}</span>\n </div>\n </div>\n \n <div class=\"input-group inline\">\n <input type=\"password\" id=\"password\" formControlName=\"password\" class=\"form-input\" [placeholder]=\"'Login-Password' | translate\" />\n\n <div class=\"input-group-text\">\n <label for=\"password\">\n <i class=\"fas fa-key fa-fw\"></i>\n </label>\n </div>\n \n <div class=\"validations\">\n <span *ngIf=\"form.get('password')?.hasError('required')\">{{ 'Login-Password-Required' | translate }}</span>\n </div>\n </div>\n \n <div class=\"options\">\n <div>\n <input class=\"form-input\" id=\"rememberMe\" formControlName=\"rememberMe\" type=\"checkbox\">\n <label for=\"rememberMe\">{{ 'Login-RememberMe' | translate }}</label>\n </div>\n \n <shared-language-selector></shared-language-selector>\n </div>\n \n <div class=\"buttons\">\n <button type=\"submit\" class=\"btn\"\n [class.loading]=\"formState.loading && !formState.success && !formState.error\"\n [class.error]=\"formState.error\"\n [class.success]=\"formState.success\">\n <i *ngIf=\"!formState.loading\" class=\"fas fa-sign-in-alt fa-fw\"></i>\n {{ 'Login-SignIn' | translate }}\n </button>\n </div>\n </form>\n </div>\n\n <div class=\"footer\">\n <span [innerHTML]=\"'Login-Copyright' | translate\"></span>\n <span class=\"design\">{{ 'Login-DesignBy' | translate }}</span>\n </div>\n</div>","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LoginLayoutComponent } from '../layouts';\nimport { LoginComponent } from './components';\n\n\nconst routes: Routes = [\n { path: '', component: LoginLayoutComponent, children: [\n { path: '', redirectTo: 'login', pathMatch: 'full' },\n { path: 'login', component: LoginComponent },\n ] },\n];\n\n@NgModule({\n imports: [\n RouterModule.forChild(routes),\n ]\n})\nexport class SharedAuthModule {}\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { AuthenticationService } from '../../services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthGuard implements CanActivate {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n private router: Router = inject(Router);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public canActivate(_: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n if (!this.authenticationService.isAuthenticated) {\n this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });\n return false;\n }\n return true;\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { JwtInterceptor } from '@auth0/angular-jwt';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\nimport { catchError, Observable, shareReplay, switchMap, tap } from 'rxjs';\nimport { AuthenticationService } from '../../services';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n private config: AppConfig = inject(APP_CONFIG);\n private jwtInterceptor: JwtInterceptor = inject(JwtInterceptor);\n private refreshToken$?: Observable<string>;\n private router: Router = inject(Router);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n if (\n request.url.indexOf(this.config.BASE_URL) >= 0 &&\n !this.jwtInterceptor.isDisallowedRoute(request) &&\n this.authenticationService.isTokenExpired\n ) {\n if (!this.refreshToken$) {\n this.refreshToken$ = this.authenticationService.tryRefreshToken()\n .pipe(\n shareReplay(),\n tap(() => {\n this.refreshToken$ = undefined;\n })\n );\n }\n\n return this.refreshToken$!\n .pipe(\n switchMap((token: string) => {\n return next.handle(\n request.clone({ setHeaders: { authorization: `Bearer ${token}` } })\n );\n }),\n catchError((err: HttpErrorResponse) => {\n if (err.status === 401) {\n this.authenticationService.signOut();\n this.router.navigate(['/login']);\n }\n throw err;\n })\n );\n }\n return next.handle(request);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { ButtonFiltersComponent } from '@zambon-dev/framework';\nimport { Subject } from 'rxjs';\n\n@Component({ template: '' })\nexport abstract class FiltersBase implements OnInit, OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ButtonFiltersComponent) protected buttonFilters?: ButtonFiltersComponent;\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected filterForm!: FormGroup;\n protected formBuilder: FormBuilder = inject(FormBuilder);\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public ngOnInit(): void {\n this.filterForm = this.formSetup();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public setFilters(filters: { [key: string ] : any }): void {\n this.filterForm.patchValue(filters);\n\n setTimeout(() => {\n if (this.buttonFilters) {\n this.buttonFilters.setFilters(filters);\n }\n });\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Abstract methods\n protected abstract formSetup(): FormGroup<any>;\n //#endregion\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DataGridDataset, IGridColumn, IListParameters } from '@zambon-dev/library';\nimport { Observable, of } from 'rxjs';\nimport { IOperationsHistoryList } from '../models';\nimport { OperationsHistoryService } from '../services';\n\n@Injectable()\nexport class OperationsHistoryDataset extends DataGridDataset {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public override columns: IGridColumn[] = [\n { field: '', headerName: '' },\n ];\n public controllerName?: string;\n\n protected operationsHistoryService: OperationsHistoryService = inject(OperationsHistoryService);\n\n private _serviceID?: number | undefined;\n //#endregion\n\n //#region Properties\n public set serviceId(value: number | undefined) {\n if (this._serviceID !== value) {\n this._serviceID = value;\n this.refresh();\n }\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.configs.hideColumnHeaders = true;\n this.configs.showMessageOnEmpty = false;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public getData(params: IListParameters): Observable<IOperationsHistoryList[]> {\n this.configs.showMessageOnEmpty = !!this._serviceID;\n\n return !!this.parentEntityId && !!this.controllerName && !!this._serviceID\n ? this.operationsHistoryService.list(this.controllerName, this.parentEntityId, this._serviceID, params)\n : of<IOperationsHistoryList[]>([]);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { inject, Injectable } from '@angular/core';\nimport { DataGridDataset, IGridColumn, IListParameters } from '@zambon-dev/library';\nimport { Observable, of } from 'rxjs';\nimport { IServicesHistoryList } from '../models';\nimport { ServicesHistoryService } from '../services';\n\n@Injectable()\nexport class ServicesHistoryDataset extends DataGridDataset {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public override columns: IGridColumn[] = [\n { field: '', headerName: '' },\n ];\n\n public controllerName?: string;\n\n protected servicesHistoryService: ServicesHistoryService = inject(ServicesHistoryService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.configs.hideColumnHeaders = true;\n this.configs.rowHeight = 52;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public getData(params: IListParameters): Observable<IServicesHistoryList[]> {\n return !!this.parentEntityId && !!this.controllerName\n ? this.servicesHistoryService.list(this.controllerName, this.parentEntityId, params)\n : of<IServicesHistoryList[]>([]);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { JsonPipe } from '@angular/common';\nimport { Component, Input, ViewChild } from '@angular/core';\nimport { ModalBase } from '@zambon-dev/framework';\nimport { ModalComponent } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'shared-operations-history-modal',\n templateUrl: './operations-history-modal.component.html',\n styleUrls: ['./operations-history-modal.component.scss'],\n imports: [\n JsonPipe,\n ModalComponent,\n TranslatePipe,\n ],\n})\nexport class OperationsHistoryModalComponent extends ModalBase {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public newValues?: string;\n\n @Input() public oldValues?: string;\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n public get isModalShown(): boolean {\n return this.modal.isShown;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public toggle(): void {\n this.modal.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-modal size=\"6xl\" [title]=\"'OperationsHistory-Modal-Title' | translate\">\n <div body>\n <pre>{{ oldValues | json }}</pre>\n <pre>{{ newValues | json }}</pre>\n </div>\n</lib-modal>","import { AfterViewInit, Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { ChildList } from '@zambon-dev/framework';\nimport { DataGridComponent, DataGridDataset } from '@zambon-dev/library';\nimport { OperationsHistoryDataset } from '../../../datasets';\nimport { IOperationsHistoryList } from '../../../models';\nimport { OperationsHistoryModalComponent } from '../operations-history-modal/operations-history-modal.component';\n\n@Component({\n selector: 'shared-operations-history-child-list',\n templateUrl: './operations-history-child-list.component.html',\n styleUrls: ['./operations-history-child-list.component.scss'],\n imports: [\n DataGridComponent,\n OperationsHistoryModalComponent,\n ],\n providers: [{ provide: DataGridDataset, useClass: OperationsHistoryDataset }]\n})\nexport class OperationsHistoryChildListComponent extends ChildList<any> implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(OperationsHistoryModalComponent) private modal!: OperationsHistoryModalComponent;\n @ViewChild('operationTemplate') private operationTemplate!: TemplateRef<any>;\n\n @Input() public set controllerName(value: string) {\n (<OperationsHistoryDataset>this.dataGridDataset).controllerName = value;\n }\n\n @Input() public set serviceID(value: number | undefined) {\n (<OperationsHistoryDataset>this.dataGridDataset).serviceId = value;\n }\n //#endregion\n\n //#region Variables\n public selectedNewValues: any | null = null;\n public selectedOldValues: any | null = null;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngAfterViewInit(): void {\n this.dataGridDataset.columns[0].template = this.operationTemplate;\n }\n //#endregion\n\n //#region Event handlers\n public openModal(): void {\n if (!this.modal.isModalShown) {\n this.modal.toggle();\n }\n }\n //#endregion\n\n //#region Public methods\n public override selectedRowChanged(): void {\n super.selectedRowChanged();\n\n if (this.dataGridDataset.hasSelectedRows) {\n const key: string = this.dataGridDataset.selectedRowKeys[0];\n \n const data: IOperationsHistoryList = this.dataGridDataset.getRowData(key);\n this.selectedOldValues = JSON.parse(data.oldValues?.trim() ?? '');\n this.selectedNewValues = JSON.parse(data.newValues?.trim() ?? '');\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-data-grid [lazyLoadRows]=\"true\">\n</lib-data-grid>\n\n<ng-template #operationTemplate let-rowData=\"rowData\">\n <div class=\"operation-content\" (click)=\"openModal()\">\n <span class=\"operation\"\n [class.added]=\"rowData.operationType === 'Added'\"\n [class.deleted]=\"rowData.operationType === 'Deleted'\"\n [class.modified]=\"rowData.operationType === 'Modified'\"\n [class.unchanged]=\"rowData.operationType === 'Unchanged'\">\n {{ rowData.operationType }}\n </span>\n {{ rowData.entityName }}\n </div>\n</ng-template>\n\n<shared-operations-history-modal\n[newValues]=\"selectedNewValues\"\n[oldValues]=\"selectedOldValues\">\n</shared-operations-history-modal>","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * Pipe that bypasses Angular's built-in HTML sanitization.\n *\n * **WARNING: This pipe introduces XSS (Cross-Site Scripting) risk.**\n * It marks the provided HTML string as trusted, meaning Angular will\n * render it without any sanitization. Malicious content such as\n * `<script>` tags, inline event handlers (`onerror`, `onclick`, etc.),\n * and `javascript:` URLs will be executed in the user's browser.\n *\n * ### Safe usage\n * - Server-rendered HTML from **trusted, internal APIs** that never\n * include user-generated content (e.g., admin-authored rich text\n * that is sanitized server-side before storage).\n * - Static HTML snippets defined in application code.\n *\n * ### Unsafe usage (DO NOT use for these)\n * - Any value that originates from user input (form fields, query\n * params, URL fragments, file uploads).\n * - Third-party API responses whose content you do not control.\n * - Database fields that may contain unsanitized user submissions.\n *\n * @example\n * // Safe — trusted server content\n * <div [innerHTML]=\"trustedServerHtml | bypassHtmlSanitizer\"></div>\n *\n * // UNSAFE — user-provided content (use Angular’s default sanitization instead)\n * <div [innerHTML]=\"comment.body | bypassHtmlSanitizer\"></div> // ❌ XSS risk\n * <div [innerHTML]=\"comment.body\"></div> // ✅ Angular sanitizes automatically\n */\n@Pipe({\n name: 'bypassHtmlSanitizer'\n})\nexport class BypassHtmlSanitizerPipe implements PipeTransform {\n private sanitizer: DomSanitizer = inject(DomSanitizer);\n\n public transform(html: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'enumLabel'\n})\nexport class EnumLabelPipe implements PipeTransform {\n public transform(value?: number, enumType?: any): string {\n if (value === undefined || enumType === undefined) {\n return '';\n }\n\n const keys: string[] = Object.keys(enumType).filter((key: string) => !isNaN(Number(enumType[key])));\n const values: number[] = keys.map((key: string) => enumType[key]);\n\n const index: number = values.indexOf(value);\n if (index >= 0) {\n return keys[index];\n }\n return '';\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'utcDate'\n})\nexport class UtcDatePipe implements PipeTransform {\n transform(value?: Date): Date | null {\n if (!value) {\n return null;\n }\n\n const newDate: Date = new Date(value);\n\n let utcHour: number = newDate.getUTCHours();\n if (utcHour < newDate.getHours()) {\n utcHour += 24;\n }\n\n newDate.setHours(\n newDate.getHours() + newDate.getHours() - utcHour,\n newDate.getMinutes(),\n newDate.getSeconds()\n );\n\n return newDate;\n }\n}","import { DatePipe } from '@angular/common';\nimport { AfterViewInit, Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { ChildList } from '@zambon-dev/framework';\nimport { DataGridComponent, DataGridDataset } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ServicesHistoryDataset } from '../../../datasets';\nimport { UtcDatePipe } from '../../../pipes';\n\n@Component({\n selector: 'shared-services-history-child-list',\n templateUrl: './services-history-child-list.component.html',\n styleUrls: ['./services-history-child-list.component.scss'],\n imports: [\n DataGridComponent,\n DatePipe,\n UtcDatePipe,\n TranslatePipe,\n ],\n providers: [{ provide: DataGridDataset, useClass: ServicesHistoryDataset }]\n})\nexport class ServicesHistoryChildListComponent extends ChildList<any> implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('serviceTemplate') private serviceTemplate!: TemplateRef<any>;\n\n @Input() public set controllerName(value: string) {\n (<ServicesHistoryDataset>this.dataGridDataset).controllerName = value;\n } \n //#endregion\n\n //#region Variables\n public selectedServiceID?: number;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngAfterViewInit(): void {\n this.dataGridDataset.columns[0].template = this.serviceTemplate;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public override selectedRowChanged(): void {\n super.selectedRowChanged();\n\n if (this.dataGridDataset.hasSelectedRows) {\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];;\n this.selectedServiceID = this.dataGridDataset.getRowID(selectedKey);\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-data-grid [lazyLoadRows]=\"true\">\n</lib-data-grid>\n\n<ng-template #serviceTemplate let-rowData=\"rowData\">\n <div class=\"service-content\">\n <div class=\"icon\">\n <i class=\"fa-solid fa-circle fa-lg\"></i>\n </div>\n <div class=\"information\">\n <div class=\"service-name\">\n {{ rowData.name }}\n </div>\n <div class=\"details\">\n <span class=\"datetime\"><i class=\"fa-solid fa-clock\"></i> {{ rowData.changedOn | utcDate | date: ('Format-DateTime' | translate) }}</span>\n <span class=\"user\"><i class=\"fa-solid fa-user\"></i> {{ rowData.changedByName }}</span>\n </div>\n </div>\n </div>\n</ng-template>","import { Component, inject, Input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ViewBase } from '@zambon-dev/framework';\nimport { DataProviderService } from '@zambon-dev/library';\nimport { take } from 'rxjs';\nimport { OperationsHistoryChildListComponent } from '../../operations-history';\nimport { ServicesHistoryChildListComponent } from '../services-history-child-list/services-history-child-list.component';\n\n@Component({\n selector: 'shared-services-history-view',\n templateUrl: './services-history-view.component.html',\n styleUrls: ['./services-history-view.component.scss'],\n imports: [\n OperationsHistoryChildListComponent,\n ServicesHistoryChildListComponent,\n ]\n})\nexport class ServicesHistoryViewComponent extends ViewBase {\n //#region ViewChilds, Inputs, Outputs\n @Input({ required: true }) public controllerName!: string;\n\n @Input() public entityID?: number;\n //#endregion\n\n //#region Variables\n private activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n if (this.activatedRoute.snapshot.data['controllerName']) {\n this.controllerName = this.activatedRoute.snapshot.data['controllerName'];\n }\n\n if (this.dataProviderService) {\n this.dataProviderService.getModel$()\n .pipe(take(1))\n .subscribe((model: any) => {\n this.entityID = model.id;\n });\n }\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"history-container\">\n <div class=\"service-history-container\">\n <shared-services-history-child-list #service\n [controllerName]=\"controllerName\">\n </shared-services-history-child-list>\n </div>\n\n <div class=\"operations-history-container\">\n <shared-operations-history-child-list\n [controllerName]=\"controllerName\"\n [serviceID]=\"service.selectedServiceID\">\n </shared-operations-history-child-list>\n </div>\n</div>","import { HttpBackend } from '@angular/common/http';\nimport { EnvironmentProviders, Provider } from '@angular/core';\nimport { provideTranslateService, TranslateLoader } from '@ngx-translate/core';\nimport { MultiTranslateHttpLoader, TranslationResource } from 'ngx-translate-multi-http-loader';\n\nexport interface AngularAssetPattern {\n glob: string;\n input: string;\n output: string;\n}\n\nexport const ZAMBON_SHARED_I18N_ASSET_PATH = 'assets/i18n/zambon-dev/shared';\n\nexport const ZAMBON_SHARED_I18N_ASSET: AngularAssetPattern = {\n glob: '**/*.json',\n input: 'node_modules/@zambon-dev/shared/i18n',\n output: ZAMBON_SHARED_I18N_ASSET_PATH,\n};\n\nexport const ZAMBON_SHARED_I18N_RESOURCES: TranslationResource[] = [\n { prefix: `/${ZAMBON_SHARED_I18N_ASSET_PATH}/language-selector/`, suffix: '.json' },\n { prefix: `/${ZAMBON_SHARED_I18N_ASSET_PATH}/login/`, suffix: '.json' },\n { prefix: `/${ZAMBON_SHARED_I18N_ASSET_PATH}/operations-history/`, suffix: '.json' },\n { prefix: `/${ZAMBON_SHARED_I18N_ASSET_PATH}/top-bar/`, suffix: '.json' },\n];\n\nexport interface ZambonSharedTranslateConfig {\n defaultLanguage?: string;\n appResources?: (string | TranslationResource)[];\n}\n\nexport function createZambonSharedTranslateLoader(\n httpBackend: HttpBackend,\n appResources: (string | TranslationResource)[] = [],\n): MultiTranslateHttpLoader {\n return new MultiTranslateHttpLoader(httpBackend, [\n ...ZAMBON_SHARED_I18N_RESOURCES,\n ...appResources,\n ]);\n}\n\nexport function provideZambonSharedTranslateLoader(\n appResources: (string | TranslationResource)[] = [],\n): Provider {\n return {\n provide: TranslateLoader,\n useFactory: (httpBackend: HttpBackend) => createZambonSharedTranslateLoader(httpBackend, appResources),\n deps: [HttpBackend],\n };\n}\n\nexport function provideZambonSharedTranslateService(\n config: ZambonSharedTranslateConfig = {},\n): EnvironmentProviders {\n return provideTranslateService({\n defaultLanguage: config.defaultLanguage,\n loader: provideZambonSharedTranslateLoader(config.appResources),\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"zambon-dev-shared.mjs","sources":["../../../../libs/shared/src/lib/layouts/login-layout/login-layout.component.ts","../../../../libs/shared/src/lib/layouts/login-layout/login-layout.component.html","../../../../libs/shared/src/lib/services/authentication.service.ts","../../../../libs/shared/src/lib/services/notifications.service.ts","../../../../libs/shared/src/lib/services/operations-history.service.ts","../../../../libs/shared/src/lib/services/services-history.service.ts","../../../../libs/shared/src/lib/layouts/top-bar/brand/brand.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/brand/brand.component.html","../../../../libs/shared/src/lib/layouts/top-bar/environment-badge/environment-badge.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/environment-badge/environment-badge.component.html","../../../../libs/shared/src/lib/layouts/top-bar/notifications/notifications.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/notifications/notifications.component.html","../../../../libs/shared/src/lib/auth/components/language-selector/language-selector.component.ts","../../../../libs/shared/src/lib/auth/components/language-selector/language-selector.component.html","../../../../libs/shared/src/lib/layouts/top-bar/user-profile/user-profile.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/user-profile/user-profile.component.html","../../../../libs/shared/src/lib/layouts/top-bar/top-bar.component.ts","../../../../libs/shared/src/lib/layouts/top-bar/top-bar.component.html","../../../../libs/shared/src/lib/layouts/main-layout/main-layout.component.ts","../../../../libs/shared/src/lib/layouts/main-layout/main-layout.component.html","../../../../libs/shared/src/lib/auth/components/login/login.component.ts","../../../../libs/shared/src/lib/auth/components/login/login.component.html","../../../../libs/shared/src/lib/auth/auth.module.ts","../../../../libs/shared/src/lib/auth/guards/auth-guard.ts","../../../../libs/shared/src/lib/auth/interceptors/auth-interceptors.ts","../../../../libs/shared/src/lib/components/filters-base.ts","../../../../libs/shared/src/lib/datasets/operations-history.dataset.ts","../../../../libs/shared/src/lib/datasets/services-history.dataset.ts","../../../../libs/shared/src/lib/features/operations-history/operations-history-modal/operations-history-modal.component.ts","../../../../libs/shared/src/lib/features/operations-history/operations-history-modal/operations-history-modal.component.html","../../../../libs/shared/src/lib/features/operations-history/operations-history-child-list/operations-history-child-list.component.ts","../../../../libs/shared/src/lib/features/operations-history/operations-history-child-list/operations-history-child-list.component.html","../../../../libs/shared/src/lib/pipes/bypass-html-sanitizer.pipe.ts","../../../../libs/shared/src/lib/pipes/enum-text.pipe.ts","../../../../libs/shared/src/lib/pipes/utc-date.pipe.ts","../../../../libs/shared/src/lib/features/services-history/services-history-child-list/services-history-child-list.component.ts","../../../../libs/shared/src/lib/features/services-history/services-history-child-list/services-history-child-list.component.html","../../../../libs/shared/src/lib/features/services-history/services-history-view/services-history-view.component.ts","../../../../libs/shared/src/lib/features/services-history/services-history-view/services-history-view.component.html","../../../../libs/shared/src/lib/i18n/shared-i18n.ts","../../../../libs/shared/src/zambon-dev-shared.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\n@Component({\n selector: 'shared-login-layout',\n templateUrl: './login-layout.component.html',\n styleUrls: ['./login-layout.component.scss'],\n imports: [\n RouterModule,\n ]\n})\nexport class LoginLayoutComponent {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"background\"></div>\n\n<div class=\"container\">\n <router-outlet></router-outlet>\n</div>","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { APP_CONFIG, AppConfig, AuthService, TabService } from '@zambon-dev/framework';\nimport { Observable, catchError, interval, map, mergeMap, tap } from 'rxjs';\nimport { IAuthResponse, ICurrentUserInfo } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService extends AuthService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public adminAction: string = 'AdministrativeMaster';\n\n private config: AppConfig = inject(APP_CONFIG);\n\n private readonly BASE_URL: string = `${this.config.BASE_URL}/Authentication`;\n private http: HttpClient = inject(HttpClient);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super(inject(JwtHelperService), inject(TabService));\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public authenticate(model: { username: string, password: string, rememberMe: boolean }): Observable<void> {\n return this.http\n .post<IAuthResponse>(`${this.BASE_URL}/SignIn`, model)\n .pipe(\n map((res: IAuthResponse) => {\n this.setStorage('username', res.username, model.rememberMe);\n this.setStorage('token', res.token, model.rememberMe);\n this.setStorage('refreshToken', res.refreshToken, model.rememberMe);\n this.setStorage('userInfo', window.btoa(JSON.stringify(res as ICurrentUserInfo)), model.rememberMe);\n }),\n catchError((error: HttpErrorResponse) =>\n interval(1000)\n .pipe(\n mergeMap(() => {\n switch(error.status) {\n case 401:\n throw 'InvalidUsernamePassword';\n default:\n throw 'InternalServerError';\n }\n })\n )\n )\n );\n }\n\n public getActions(): Observable<string[]> {\n return this.http.post<string[]>(`${this.BASE_URL}/GetActions`, {});\n }\n\n public getUserInfo(): ICurrentUserInfo | null {\n const userInfo: string | null = this.userInfo;\n if (userInfo) {\n return JSON.parse(window.atob(userInfo)) as ICurrentUserInfo;\n }\n return null;\n }\n\n public tryRefreshToken(): Observable<string> {\n return this.http\n .post<IAuthResponse>(`${this.BASE_URL}/RefreshToken`, {\n username: this.username ?? '',\n refreshToken: this.refreshToken ?? ''\n })\n .pipe(\n tap((res: IAuthResponse) => {\n this.setStorage('token', res.token);\n this.setStorage('refreshToken', res.refreshToken);\n this.setStorage('userInfo', window.btoa(JSON.stringify(res as ICurrentUserInfo)));\n }),\n map((res: IAuthResponse) => res.token ?? '')\n );\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { inject, Injectable } from '@angular/core';\nimport { HubConnection, HubConnectionBuilder, HubConnectionState } from '@microsoft/signalr';\nimport { APP_CONFIG, AppConfig, AuthService } from '@zambon-dev/framework';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { INotification } from '../models';\n\n/**\n * Streams top-bar notifications from a SignalR hub.\n *\n * The hub is configured via `AppConfig.notificationsEnabled` and `AppConfig.notificationsUrl`.\n * When enabled, {@link start} opens a connection (authenticated with the current JWT) and\n * listens for the server to push the notification list via the `ReceiveNotifications` client\n * method. Consuming apps do not interact with this service directly — the top bar drives it.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationsService {\n //#region Variables\n private authService: AuthService = inject(AuthService);\n private config: AppConfig = inject(APP_CONFIG);\n\n private connection?: HubConnection;\n private notifications$: BehaviorSubject<INotification[]> = new BehaviorSubject<INotification[]>([]);\n //#endregion\n\n //#region Properties\n /** Whether the notifications feature is enabled (toggled on and given a hub URL). */\n public get isEnabled(): boolean {\n return this.config.notificationsEnabled && this.config.notificationsUrl.length > 0;\n }\n //#endregion\n\n //#region Public methods\n /** Emits the current list of notifications. */\n public getNotifications(): Observable<INotification[]> {\n return this.notifications$.asObservable();\n }\n\n /** Emits the number of unread notifications. */\n public getUnreadCount(): Observable<number> {\n return this.notifications$.pipe(\n map((notifications: INotification[]) => notifications.filter((n: INotification) => !n.isRead).length),\n );\n }\n\n /** Marks every notification as read and notifies the hub. */\n public markAllAsRead(): void {\n this.notifications$.next(this.notifications$.value.map((n: INotification) => ({ ...n, isRead: true })));\n\n if (this.connection?.state === HubConnectionState.Connected) {\n this.connection.invoke('MarkAllAsRead').catch((error: unknown) => {\n console.error('Failed to mark notifications as read on the hub.', error);\n });\n }\n }\n\n /** Marks a single notification as read (optimistically; the server reconciles on the next push). */\n public markAsRead(notification: INotification): void {\n this.notifications$.next(\n this.notifications$.value.map((n: INotification) => (n === notification ? { ...n, isRead: true } : n)),\n );\n }\n\n /** Opens the SignalR connection and starts receiving notifications. Idempotent and a no-op when disabled. */\n public start(): void {\n if (!this.isEnabled || !!this.connection) {\n return;\n }\n\n this.connection = new HubConnectionBuilder()\n .withUrl(this.config.notificationsUrl, {\n accessTokenFactory: () => this.authService.token ?? '',\n })\n .withAutomaticReconnect()\n .build();\n\n this.connection.on('ReceiveNotifications', (notifications: INotification[]) => {\n this.notifications$.next(notifications ?? []);\n });\n\n this.connection.start().catch((error: unknown) => {\n console.error('Failed to connect to the notifications hub.', error);\n });\n }\n\n /** Closes the SignalR connection. */\n public async stop(): Promise<void> {\n if (this.connection) {\n await this.connection.stop();\n this.connection = undefined;\n }\n }\n //#endregion\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\nimport { IListParameters } from '@zambon-dev/library';\nimport { Observable } from 'rxjs';\nimport { IOperationsHistoryList } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OperationsHistoryService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private config: AppConfig = inject(APP_CONFIG);\n private http: HttpClient = inject(HttpClient);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public list(controllerName: string, entityID: number, serviceHistoryID: number, parameters: IListParameters): Observable<IOperationsHistoryList[]> {\n return this.http.post<IOperationsHistoryList[]>(`${this.config.BASE_URL}/${controllerName}/${entityID}/Audit/${serviceHistoryID}`, parameters);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\nimport { IListParameters } from '@zambon-dev/library';\nimport { Observable } from 'rxjs';\nimport { IServicesHistoryList } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ServicesHistoryService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private config: AppConfig = inject(APP_CONFIG);\n private http: HttpClient = inject(HttpClient);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public list(controllerName: string, entityID: number, parameters: IListParameters): Observable<IServicesHistoryList[]> {\n return this.http.post<IServicesHistoryList[]>(`${this.config.BASE_URL}/${controllerName}/${entityID}/Audit`, parameters);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Component, inject } from '@angular/core';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\n\n@Component({\n selector: 'shared-brand',\n templateUrl: './brand.component.html',\n styleUrls: ['./brand.component.scss'],\n})\nexport class BrandComponent {\n //#region Variables\n private config: AppConfig = inject(APP_CONFIG);\n //#endregion\n\n //#region Properties\n protected get appName(): string {\n return this.config.appName;\n }\n\n protected get companyName(): string {\n return this.config.companyName;\n }\n\n protected get logoUrl(): string | undefined {\n return this.config.logoUrl;\n }\n //#endregion\n}\n","<div class=\"brand\">\n @if (logoUrl) {\n <img class=\"brand-logo\" [src]=\"logoUrl\" [alt]=\"appName\" />\n }\n\n <div class=\"brand-text\">\n <span class=\"brand-app\">{{ appName }}</span>\n @if (companyName) {\n <span class=\"brand-company\">{{ companyName }}</span>\n }\n </div>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\n\n@Component({\n selector: 'shared-environment-badge',\n templateUrl: './environment-badge.component.html',\n styleUrls: ['./environment-badge.component.scss'],\n})\nexport class EnvironmentBadgeComponent {\n //#region Variables\n private config: AppConfig = inject(APP_CONFIG);\n //#endregion\n\n //#region Properties\n /** CSS modifier class for the current environment, falling back to a neutral style. */\n protected get badgeClass(): string {\n const colorByEnvironment: Record<string, string> = {\n DEV: 'env-dev',\n QA: 'env-qa',\n STG: 'env-stg',\n };\n return colorByEnvironment[this.environment] ?? 'env-neutral';\n }\n\n /** Normalized environment key (uppercase, trimmed). */\n protected get environment(): string {\n return (this.config.environment ?? '').trim().toUpperCase();\n }\n\n /** The badge is hidden in production and when no environment is configured. */\n protected get isVisible(): boolean {\n return this.environment.length > 0 && this.environment !== 'PROD';\n }\n //#endregion\n}\n","@if (isVisible) {\n <span class=\"env-badge {{ badgeClass }}\">\n <span class=\"env-dot\"></span>\n <span class=\"env-label\">{{ environment }}</span>\n </span>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { INotification } from '../../../models';\nimport { NotificationsService } from '../../../services';\n\n@Component({\n selector: 'shared-notifications',\n templateUrl: './notifications.component.html',\n styleUrls: ['./notifications.component.scss'],\n imports: [\n AsyncPipe,\n TranslatePipe,\n ],\n})\nexport class NotificationsComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('dropdown') public dropdown!: ElementRef<HTMLDivElement>;\n //#endregion\n\n //#region Variables\n private notificationsService: NotificationsService = inject(NotificationsService);\n private router: Router = inject(Router);\n\n protected notifications$: Observable<INotification[]> = this.notificationsService.getNotifications();\n protected showDropdown = false;\n protected unreadCount$: Observable<number> = this.notificationsService.getUnreadCount();\n //#endregion\n\n //#region Properties\n /** Whether the notifications feature is enabled; when false the bell is not rendered. */\n public get isEnabled(): boolean {\n return this.notificationsService.isEnabled;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnInit(): void {\n this.notificationsService.start();\n }\n //#endregion\n\n //#region Event handlers\n public onDropdownClick(): void {\n this.showDropdown = !this.showDropdown;\n }\n\n public onMarkAllAsRead(): void {\n this.notificationsService.markAllAsRead();\n }\n\n public onNotificationClick(notification: INotification): void {\n this.notificationsService.markAsRead(notification);\n this.showDropdown = false;\n\n const url: string | undefined = notification.callToActionUrl;\n if (!url) {\n return;\n }\n\n if (/^https?:\\/\\//i.test(url)) {\n window.open(url, '_blank', 'noopener');\n } else {\n this.router.navigateByUrl(url);\n }\n }\n //#endregion\n\n //#region Private methods\n @HostListener('window:click', ['$event'])\n private documentClick(event: MouseEvent): void {\n if (this.showDropdown) {\n let target: HTMLElement = <HTMLElement>event.target;\n while (target !== null && target.tagName?.toUpperCase() !== 'BODY') {\n if (target === this.dropdown.nativeElement) {\n return;\n }\n target = <HTMLElement>target.parentElement;\n }\n this.showDropdown = false;\n }\n }\n //#endregion\n}\n","@if (isEnabled) {\n <div #dropdown class=\"notifications\">\n <button class=\"btn gray-300 notifications-toggle\" type=\"button\" (click)=\"onDropdownClick()\"\n [attr.aria-label]=\"'TopBar-Notifications-Title' | translate\">\n <i class=\"fa-solid fa-bell\"></i>\n @if (unreadCount$ | async; as count) {\n <span class=\"notifications-badge\">{{ count }}</span>\n }\n </button>\n\n @if (showDropdown) {\n <div class=\"notifications-panel\">\n @let items = (notifications$ | async) ?? [];\n\n <div class=\"notifications-header\">\n <span>{{ 'TopBar-Notifications-Title' | translate }}</span>\n @if (items.length > 0) {\n <button type=\"button\" class=\"notifications-mark-all\" (click)=\"onMarkAllAsRead()\">\n {{ 'TopBar-Notifications-MarkAllRead' | translate }}\n </button>\n }\n </div>\n\n @if (items.length > 0) {\n <ul class=\"notifications-list\">\n @for (item of items; track $index) {\n <li class=\"notifications-item\" [class.unread]=\"!item.isRead\">\n <button type=\"button\" class=\"notifications-item-btn\"\n [class.has-cta]=\"!!item.callToActionUrl\" (click)=\"onNotificationClick(item)\">\n <span class=\"notifications-item-icon\"><i class=\"{{ item.icon }}\"></i></span>\n <span class=\"notifications-item-body\">\n <span class=\"notifications-item-title\">{{ item.title }}</span>\n <span class=\"notifications-item-description\">{{ item.description }}</span>\n </span>\n @if (item.callToActionUrl) {\n <i class=\"notifications-item-cta fa-solid fa-chevron-right\"></i>\n }\n </button>\n </li>\n }\n </ul>\n } @else {\n <div class=\"notifications-empty\">{{ 'TopBar-Notifications-Empty' | translate }}</div>\n }\n </div>\n }\n </div>\n}\n","import { Component, ElementRef, HostListener, inject, Input, ViewChild } from '@angular/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'shared-language-selector',\n templateUrl: './language-selector.component.html',\n styleUrls: ['./language-selector.component.scss'],\n imports: [\n TranslatePipe,\n ]\n})\nexport class LanguageSelectorComponent {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('dropdown') public dropdown!: ElementRef<HTMLDivElement>;\n\n /** When true, the toggle shows the current language's flag (light-gray button) instead of text. */\n @Input() public showFlag = false;\n\n @Input() public title: string = 'LanguageSelector-Title';\n //#endregion\n\n //#region Variables\n private translate: TranslateService = inject(TranslateService);\n\n protected languages: string[] = this.translate.getLangs();\n protected showDropdown: boolean = false;\n //#endregion\n\n //#region Properties\n public get selectedLanguage(): string {\n return this.translate.currentLang;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n public onDropdownClick(): void {\n this.showDropdown = !this.showDropdown;\n }\n\n public onSelectLanguage(language: string): void {\n localStorage.setItem('language', language);\n this.translate.use(language);\n this.showDropdown = false;\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n @HostListener('window:click', ['$event'])\n private documentClick(event: MouseEvent): void {\n if (this.showDropdown) {\n let target: HTMLElement = <HTMLElement>event.target;\n while (target !== null && target.tagName?.toUpperCase() !== 'BODY') {\n if (target === this.dropdown.nativeElement) {\n return;\n }\n target = <HTMLElement>target.parentElement;\n }\n this.showDropdown = false;\n }\n }\n //#endregion\n}\n","<div #dropdown class=\"dropdown right\" [class.show]=\"showDropdown\">\n <button class=\"btn\" type=\"button\" (click)=\"onDropdownClick()\"\n [class.gray-300]=\"showFlag\" [class.lang-flag-toggle]=\"showFlag\"\n [attr.aria-label]=\"showFlag ? (title | translate) : null\">\n @if (showFlag) {\n <span class=\"flag flag-{{ selectedLanguage }}\"></span>\n } @else {\n {{ title | translate }}\n }\n </button>\n\n <ul>\n @for (lang of languages; track lang) {\n <li>\n <button type=\"button\" class=\"dropdown-item\" [class.selected]=\"lang === selectedLanguage\"\n (click)=\"onSelectLanguage(lang)\">\n <span class=\"flag flag-{{ lang }}\"></span>\n <span class=\"dropdown-label\">{{ 'Language-' + lang | translate }}</span>\n </button>\n </li>\n }\n </ul>\n</div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { ICurrentUserInfo } from '../../../models';\nimport { AuthenticationService } from '../../../services';\n\n@Component({\n selector: 'shared-user-profile',\n templateUrl: './user-profile.component.html',\n styleUrls: ['./user-profile.component.scss'],\n})\nexport class UserProfileComponent implements OnInit {\n //#region Variables\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n\n protected user: ICurrentUserInfo | null = null;\n //#endregion\n\n //#region Properties\n /** Up to two uppercase initials derived from the user's name, used when no picture is set. */\n protected get initials(): string {\n const parts: string[] = this.name.trim().split(/\\s+/).filter((p: string) => p.length > 0);\n if (parts.length === 0) {\n return '';\n }\n\n const first: string = parts[0].charAt(0);\n const last: string = parts.length > 1 ? parts[parts.length - 1].charAt(0) : '';\n return (first + last).toUpperCase();\n }\n\n protected get name(): string {\n return this.user?.name ?? '';\n }\n\n protected get pictureUrl(): string | undefined {\n return this.user?.pictureUrl;\n }\n\n protected get position(): string {\n return this.user?.position ?? '';\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnInit(): void {\n this.user = this.authenticationService.getUserInfo();\n }\n //#endregion\n}\n","<div class=\"user-profile\">\n <div class=\"user-text\">\n <span class=\"user-name\">{{ name }}</span>\n @if (position) {\n <span class=\"user-position\">{{ position }}</span>\n }\n </div>\n\n <div class=\"user-avatar\">\n @if (pictureUrl) {\n <img class=\"user-avatar-img\" [src]=\"pictureUrl\" [alt]=\"name\" />\n } @else {\n <span class=\"user-avatar-initials\">{{ initials }}</span>\n }\n </div>\n</div>\n","import { Component, EventEmitter, Output } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { LanguageSelectorComponent } from '../../auth/components/language-selector/language-selector.component';\nimport { BrandComponent } from './brand/brand.component';\nimport { EnvironmentBadgeComponent } from './environment-badge/environment-badge.component';\nimport { NotificationsComponent } from './notifications/notifications.component';\nimport { UserProfileComponent } from './user-profile/user-profile.component';\n\n@Component({\n selector: 'shared-top-bar',\n templateUrl: './top-bar.component.html',\n styleUrls: ['./top-bar.component.scss'],\n imports: [\n BrandComponent,\n EnvironmentBadgeComponent,\n LanguageSelectorComponent,\n NotificationsComponent,\n TranslatePipe,\n UserProfileComponent,\n ],\n})\nexport class TopBarComponent {\n //#region ViewChilds, Inputs, Outputs\n /** Emitted when the logout button is clicked. */\n @Output() public logout: EventEmitter<void> = new EventEmitter<void>();\n //#endregion\n\n //#region Event handlers\n public onLogoutClick(): void {\n this.logout.emit();\n }\n //#endregion\n}\n","<div class=\"top-bar\">\n <div class=\"top-bar-section top-bar-start\">\n <shared-brand></shared-brand>\n <shared-environment-badge></shared-environment-badge>\n </div>\n\n <div class=\"top-bar-section top-bar-end\">\n <shared-notifications></shared-notifications>\n <shared-language-selector [showFlag]=\"true\"></shared-language-selector>\n\n <!-- Theme switch slot (deferred — see 2026-07-23-top-bar-update-design.md) -->\n\n <shared-user-profile></shared-user-profile>\n\n <button class=\"btn gray-300 top-bar-logout\" type=\"button\" (click)=\"onLogoutClick()\"\n [attr.aria-label]=\"'Main-Logout' | translate\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n </button>\n </div>\n</div>\n","import { Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\nimport { APP_CONFIG, ITab, Tab, TabsComponent, TabService } from '@zambon-dev/framework';\nimport { ModalComponent, SidebarComponent, SidebarMenu, SidebarService } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Subject, take, takeUntil } from 'rxjs';\nimport { AuthenticationService } from '../../services';\nimport { TopBarComponent } from '../top-bar';\n\n@Component({\n selector: 'shared-main-layout',\n templateUrl: './main-layout.component.html',\n styleUrls: ['./main-layout.component.scss'],\n imports: [\n ModalComponent,\n RouterModule,\n SidebarComponent,\n TabsComponent,\n TopBarComponent,\n TranslatePipe,\n ]\n})\nexport class MainLayoutComponent implements OnInit, OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('logoutModal') private logoutModal!: ModalComponent;\n //#endregion\n\n //#region Variables\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private router: Router = inject(Router);\n private sidebarService: SidebarService = inject(SidebarService);\n private tabService: TabService = inject(TabService);\n\n /** Application version (from AppConfig) projected into the sidebar footer. */\n protected appVersion: string = inject(APP_CONFIG).version;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public ngOnInit(): void {\n const url: string = this.router.url;\n\n if (url !== '/' && !this.tabService.isUrlOpen(url)) {\n this.sidebarService.getMenuFromUrl(url)\n .pipe(take(1))\n .subscribe((item: SidebarMenu) => {\n if (!!item) {\n this.tabService.updateTabTitle(url, item.label);\n }\n });\n }\n\n this.sidebarService.menuUrlSelected\n .pipe(takeUntil(this.destroy$))\n .subscribe((item: SidebarMenu) => {\n const tab: ITab = new Tab({\n title: item.label,\n url: item.url,\n });\n this.tabService.openTab(tab);\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public onLogoutClick(): void {\n this.logoutModal.toggleModal();\n }\n\n public onLogoutConfirm(): void {\n this.authenticationService.signOut();\n this.router.navigate(['/login']);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"main-container\">\n <div class=\"sidebar-region\">\n <lib-sidebar>\n @if (appVersion) {\n <span>v{{ appVersion }}</span>\n }\n </lib-sidebar>\n </div>\n\n <shared-top-bar class=\"toolbar\" (logout)=\"onLogoutClick()\"></shared-top-bar>\n\n <div class=\"content\">\n <framework-tabs>\n <router-outlet></router-outlet>\n </framework-tabs>\n </div>\n</div>\n\n<lib-modal #logoutModal position=\"top\" size=\"xl\" [closeButtonText]=\"'Main-Logout-Modal-Message-Cancel' | translate\">\n <div body>\n <h5>{{ 'Main-Logout-Modal-Message' | translate }}</h5>\n </div>\n <div footer>\n <button type=\"button\" class=\"btn red-600\" (click)=\"onLogoutConfirm()\">{{ 'Main-Logout-Modal-Message-Confirm' | translate }}</button>\n </div>\n</lib-modal>","import { NgIf } from '@angular/common';\nimport { Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Router, RouterModule } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { finalize, tap } from 'rxjs';\nimport { AuthenticationService } from '../../../services';\nimport { LanguageSelectorComponent } from '../language-selector/language-selector.component';\n\n@Component({\n selector: 'shared-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss'],\n imports: [\n LanguageSelectorComponent,\n NgIf,\n ReactiveFormsModule,\n RouterModule,\n TranslatePipe,\n ]\n})\nexport class LoginComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('username') public username!: ElementRef<HTMLInputElement>;\n //#endregion\n\n //#region Variables\n protected form!: FormGroup;\n protected formState: {\n error: string | null,\n loading: boolean,\n success: boolean,\n } = {\n error: null,\n loading: false,\n success: false\n };\n\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n private formBuilder: FormBuilder = inject(FormBuilder);\n private router: Router = inject(Router);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n this.form = this.formBuilder.group({\n password: ['', Validators.required],\n rememberMe: [false, { nonNullable: true }],\n username: ['', Validators.required],\n });\n }\n //#endregion\n\n //#region Event handlers\n public onSubmit(): void {\n this.form.markAllAsTouched();\n\n if (this.form.valid) {\n this.form.disable();\n \n this.formState.loading = true;\n this.formState.error = null;\n\n this.authenticationService.authenticate({\n username: this.form.get('username')?.value.toString() ?? '',\n password: this.form.get('password')?.value.toString() ?? '',\n rememberMe: this.form.get('rememberMe')?.value ?? false\n })\n .pipe(\n tap(() => { \n this.formState.success = true\n }),\n finalize(() => this.formState.loading = false)\n )\n .subscribe({\n next: () => {\n const params: URLSearchParams = new URLSearchParams(window.location.search);\n \n this.router.navigate([params.get('returnUrl') ?? '/']);\n },\n error: (e: string) => {\n this.form.enable();\n\n this.form.controls['password'].setValue('');\n this.form.controls['password'].markAsUntouched();\n \n this.username.nativeElement.focus();\n\n switch(e) {\n case 'InvalidUsernamePassword':\n this.formState.error = 'invalid';\n break;\n default:\n this.formState.error = 'internalServerError';\n break;\n }\n }\n });\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"content\">\n <div class=\"login\">\n <div class=\"logo-container\">\n <div class=\"logo\">\n <img src=\"/logo-login.png\" alt=\"Logo\" />\n </div>\n </div>\n \n <h3 class=\"title\">{{ 'Login-Title' | translate }}</h3>\n\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n\n <div class=\"validations\" [class.hidden]=\"!formState.error\">\n \n <div *ngIf=\"formState.error === 'invalid'\">\n {{'Login-Errors-Invalid' | translate}}\n </div>\n \n <div *ngIf=\"formState.error === 'internalServerError'\">{{'Login-Errors-InternalServerError' | translate}}</div>\n </div>\n\n <div class=\"input-group inline\">\n <input type=\"text\" #username id=\"username\" formControlName=\"username\" class=\"form-input peer\" [placeholder]=\"'Login-Username' | translate\" autofocus />\n\n <div class=\"input-group-text\">\n <label for=\"username\">\n <i class=\"fas fa-user fa-fw\"></i>\n </label>\n </div>\n\n <div class=\"validations\">\n <span *ngIf=\"form.get('username')?.hasError('required')\">{{ 'Login-Username-Required' | translate }}</span>\n </div>\n </div>\n \n <div class=\"input-group inline\">\n <input type=\"password\" id=\"password\" formControlName=\"password\" class=\"form-input\" [placeholder]=\"'Login-Password' | translate\" />\n\n <div class=\"input-group-text\">\n <label for=\"password\">\n <i class=\"fas fa-key fa-fw\"></i>\n </label>\n </div>\n \n <div class=\"validations\">\n <span *ngIf=\"form.get('password')?.hasError('required')\">{{ 'Login-Password-Required' | translate }}</span>\n </div>\n </div>\n \n <div class=\"options\">\n <div>\n <input class=\"form-input\" id=\"rememberMe\" formControlName=\"rememberMe\" type=\"checkbox\">\n <label for=\"rememberMe\">{{ 'Login-RememberMe' | translate }}</label>\n </div>\n \n <shared-language-selector></shared-language-selector>\n </div>\n \n <div class=\"buttons\">\n <button type=\"submit\" class=\"btn\"\n [class.loading]=\"formState.loading && !formState.success && !formState.error\"\n [class.error]=\"formState.error\"\n [class.success]=\"formState.success\">\n <i *ngIf=\"!formState.loading\" class=\"fas fa-sign-in-alt fa-fw\"></i>\n {{ 'Login-SignIn' | translate }}\n </button>\n </div>\n </form>\n </div>\n\n <div class=\"footer\">\n <span [innerHTML]=\"'Login-Copyright' | translate\"></span>\n <span class=\"design\">{{ 'Login-DesignBy' | translate }}</span>\n </div>\n</div>","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LoginLayoutComponent } from '../layouts';\nimport { LoginComponent } from './components';\n\n\nconst routes: Routes = [\n { path: '', component: LoginLayoutComponent, children: [\n { path: '', redirectTo: 'login', pathMatch: 'full' },\n { path: 'login', component: LoginComponent },\n ] },\n];\n\n@NgModule({\n imports: [\n RouterModule.forChild(routes),\n ]\n})\nexport class SharedAuthModule {}\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { AuthenticationService } from '../../services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthGuard implements CanActivate {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n private router: Router = inject(Router);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public canActivate(_: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n if (!this.authenticationService.isAuthenticated) {\n this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });\n return false;\n }\n return true;\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { JwtInterceptor } from '@auth0/angular-jwt';\nimport { APP_CONFIG, AppConfig } from '@zambon-dev/framework';\nimport { catchError, Observable, shareReplay, switchMap, tap } from 'rxjs';\nimport { AuthenticationService } from '../../services';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private authenticationService: AuthenticationService = inject(AuthenticationService);\n private config: AppConfig = inject(APP_CONFIG);\n private jwtInterceptor: JwtInterceptor = inject(JwtInterceptor);\n private refreshToken$?: Observable<string>;\n private router: Router = inject(Router);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n if (\n request.url.indexOf(this.config.BASE_URL) >= 0 &&\n !this.jwtInterceptor.isDisallowedRoute(request) &&\n this.authenticationService.isTokenExpired\n ) {\n if (!this.refreshToken$) {\n this.refreshToken$ = this.authenticationService.tryRefreshToken()\n .pipe(\n shareReplay(),\n tap(() => {\n this.refreshToken$ = undefined;\n })\n );\n }\n\n return this.refreshToken$!\n .pipe(\n switchMap((token: string) => {\n return next.handle(\n request.clone({ setHeaders: { authorization: `Bearer ${token}` } })\n );\n }),\n catchError((err: HttpErrorResponse) => {\n if (err.status === 401) {\n this.authenticationService.signOut();\n this.router.navigate(['/login']);\n }\n throw err;\n })\n );\n }\n return next.handle(request);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { ButtonFiltersComponent } from '@zambon-dev/framework';\nimport { Subject } from 'rxjs';\n\n@Component({ template: '' })\nexport abstract class FiltersBase implements OnInit, OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ButtonFiltersComponent) protected buttonFilters?: ButtonFiltersComponent;\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected filterForm!: FormGroup;\n protected formBuilder: FormBuilder = inject(FormBuilder);\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public ngOnInit(): void {\n this.filterForm = this.formSetup();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public setFilters(filters: { [key: string ] : any }): void {\n this.filterForm.patchValue(filters);\n\n setTimeout(() => {\n if (this.buttonFilters) {\n this.buttonFilters.setFilters(filters);\n }\n });\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Abstract methods\n protected abstract formSetup(): FormGroup<any>;\n //#endregion\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DataGridDataset, IGridColumn, IListParameters } from '@zambon-dev/library';\nimport { Observable, of } from 'rxjs';\nimport { IOperationsHistoryList } from '../models';\nimport { OperationsHistoryService } from '../services';\n\n@Injectable()\nexport class OperationsHistoryDataset extends DataGridDataset {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public override columns: IGridColumn[] = [\n { field: '', headerName: '' },\n ];\n public controllerName?: string;\n\n protected operationsHistoryService: OperationsHistoryService = inject(OperationsHistoryService);\n\n private _serviceID?: number | undefined;\n //#endregion\n\n //#region Properties\n public set serviceId(value: number | undefined) {\n if (this._serviceID !== value) {\n this._serviceID = value;\n this.refresh();\n }\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.configs.hideColumnHeaders = true;\n this.configs.showMessageOnEmpty = false;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public getData(params: IListParameters): Observable<IOperationsHistoryList[]> {\n this.configs.showMessageOnEmpty = !!this._serviceID;\n\n return !!this.parentEntityId && !!this.controllerName && !!this._serviceID\n ? this.operationsHistoryService.list(this.controllerName, this.parentEntityId, this._serviceID, params)\n : of<IOperationsHistoryList[]>([]);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { inject, Injectable } from '@angular/core';\nimport { DataGridDataset, IGridColumn, IListParameters } from '@zambon-dev/library';\nimport { Observable, of } from 'rxjs';\nimport { IServicesHistoryList } from '../models';\nimport { ServicesHistoryService } from '../services';\n\n@Injectable()\nexport class ServicesHistoryDataset extends DataGridDataset {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public override columns: IGridColumn[] = [\n { field: '', headerName: '' },\n ];\n\n public controllerName?: string;\n\n protected servicesHistoryService: ServicesHistoryService = inject(ServicesHistoryService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.configs.hideColumnHeaders = true;\n this.configs.rowHeight = 52;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public getData(params: IListParameters): Observable<IServicesHistoryList[]> {\n return !!this.parentEntityId && !!this.controllerName\n ? this.servicesHistoryService.list(this.controllerName, this.parentEntityId, params)\n : of<IServicesHistoryList[]>([]);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { JsonPipe } from '@angular/common';\nimport { Component, Input, ViewChild } from '@angular/core';\nimport { ModalBase } from '@zambon-dev/framework';\nimport { ModalComponent } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'shared-operations-history-modal',\n templateUrl: './operations-history-modal.component.html',\n styleUrls: ['./operations-history-modal.component.scss'],\n imports: [\n JsonPipe,\n ModalComponent,\n TranslatePipe,\n ],\n})\nexport class OperationsHistoryModalComponent extends ModalBase {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public newValues?: string;\n\n @Input() public oldValues?: string;\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n public get isModalShown(): boolean {\n return this.modal.isShown;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public toggle(): void {\n this.modal.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-modal size=\"6xl\" [title]=\"'OperationsHistory-Modal-Title' | translate\">\n <div body>\n <pre>{{ oldValues | json }}</pre>\n <pre>{{ newValues | json }}</pre>\n </div>\n</lib-modal>","import { AfterViewInit, Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { ChildList } from '@zambon-dev/framework';\nimport { DataGridComponent, DataGridDataset } from '@zambon-dev/library';\nimport { OperationsHistoryDataset } from '../../../datasets';\nimport { IOperationsHistoryList } from '../../../models';\nimport { OperationsHistoryModalComponent } from '../operations-history-modal/operations-history-modal.component';\n\n@Component({\n selector: 'shared-operations-history-child-list',\n templateUrl: './operations-history-child-list.component.html',\n styleUrls: ['./operations-history-child-list.component.scss'],\n imports: [\n DataGridComponent,\n OperationsHistoryModalComponent,\n ],\n providers: [{ provide: DataGridDataset, useClass: OperationsHistoryDataset }]\n})\nexport class OperationsHistoryChildListComponent extends ChildList<any> implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(OperationsHistoryModalComponent) private modal!: OperationsHistoryModalComponent;\n @ViewChild('operationTemplate') private operationTemplate!: TemplateRef<any>;\n\n @Input() public set controllerName(value: string) {\n (<OperationsHistoryDataset>this.dataGridDataset).controllerName = value;\n }\n\n @Input() public set serviceID(value: number | undefined) {\n (<OperationsHistoryDataset>this.dataGridDataset).serviceId = value;\n }\n //#endregion\n\n //#region Variables\n public selectedNewValues: any | null = null;\n public selectedOldValues: any | null = null;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngAfterViewInit(): void {\n this.dataGridDataset.columns[0].template = this.operationTemplate;\n }\n //#endregion\n\n //#region Event handlers\n public openModal(): void {\n if (!this.modal.isModalShown) {\n this.modal.toggle();\n }\n }\n //#endregion\n\n //#region Public methods\n public override selectedRowChanged(): void {\n super.selectedRowChanged();\n\n if (this.dataGridDataset.hasSelectedRows) {\n const key: string = this.dataGridDataset.selectedRowKeys[0];\n \n const data: IOperationsHistoryList = this.dataGridDataset.getRowData(key);\n this.selectedOldValues = JSON.parse(data.oldValues?.trim() ?? '');\n this.selectedNewValues = JSON.parse(data.newValues?.trim() ?? '');\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-data-grid [lazyLoadRows]=\"true\">\n</lib-data-grid>\n\n<ng-template #operationTemplate let-rowData=\"rowData\">\n <div class=\"operation-content\" (click)=\"openModal()\">\n <span class=\"operation\"\n [class.added]=\"rowData.operationType === 'Added'\"\n [class.deleted]=\"rowData.operationType === 'Deleted'\"\n [class.modified]=\"rowData.operationType === 'Modified'\"\n [class.unchanged]=\"rowData.operationType === 'Unchanged'\">\n {{ rowData.operationType }}\n </span>\n {{ rowData.entityName }}\n </div>\n</ng-template>\n\n<shared-operations-history-modal\n[newValues]=\"selectedNewValues\"\n[oldValues]=\"selectedOldValues\">\n</shared-operations-history-modal>","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * Pipe that bypasses Angular's built-in HTML sanitization.\n *\n * **WARNING: This pipe introduces XSS (Cross-Site Scripting) risk.**\n * It marks the provided HTML string as trusted, meaning Angular will\n * render it without any sanitization. Malicious content such as\n * `<script>` tags, inline event handlers (`onerror`, `onclick`, etc.),\n * and `javascript:` URLs will be executed in the user's browser.\n *\n * ### Safe usage\n * - Server-rendered HTML from **trusted, internal APIs** that never\n * include user-generated content (e.g., admin-authored rich text\n * that is sanitized server-side before storage).\n * - Static HTML snippets defined in application code.\n *\n * ### Unsafe usage (DO NOT use for these)\n * - Any value that originates from user input (form fields, query\n * params, URL fragments, file uploads).\n * - Third-party API responses whose content you do not control.\n * - Database fields that may contain unsanitized user submissions.\n *\n * @example\n * // Safe — trusted server content\n * <div [innerHTML]=\"trustedServerHtml | bypassHtmlSanitizer\"></div>\n *\n * // UNSAFE — user-provided content (use Angular’s default sanitization instead)\n * <div [innerHTML]=\"comment.body | bypassHtmlSanitizer\"></div> // ❌ XSS risk\n * <div [innerHTML]=\"comment.body\"></div> // ✅ Angular sanitizes automatically\n */\n@Pipe({\n name: 'bypassHtmlSanitizer'\n})\nexport class BypassHtmlSanitizerPipe implements PipeTransform {\n private sanitizer: DomSanitizer = inject(DomSanitizer);\n\n public transform(html: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'enumLabel'\n})\nexport class EnumLabelPipe implements PipeTransform {\n public transform(value?: number, enumType?: any): string {\n if (value === undefined || enumType === undefined) {\n return '';\n }\n\n const keys: string[] = Object.keys(enumType).filter((key: string) => !isNaN(Number(enumType[key])));\n const values: number[] = keys.map((key: string) => enumType[key]);\n\n const index: number = values.indexOf(value);\n if (index >= 0) {\n return keys[index];\n }\n return '';\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'utcDate'\n})\nexport class UtcDatePipe implements PipeTransform {\n transform(value?: Date): Date | null {\n if (!value) {\n return null;\n }\n\n const newDate: Date = new Date(value);\n\n let utcHour: number = newDate.getUTCHours();\n if (utcHour < newDate.getHours()) {\n utcHour += 24;\n }\n\n newDate.setHours(\n newDate.getHours() + newDate.getHours() - utcHour,\n newDate.getMinutes(),\n newDate.getSeconds()\n );\n\n return newDate;\n }\n}","import { DatePipe } from '@angular/common';\nimport { AfterViewInit, Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { ChildList } from '@zambon-dev/framework';\nimport { DataGridComponent, DataGridDataset } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ServicesHistoryDataset } from '../../../datasets';\nimport { UtcDatePipe } from '../../../pipes';\n\n@Component({\n selector: 'shared-services-history-child-list',\n templateUrl: './services-history-child-list.component.html',\n styleUrls: ['./services-history-child-list.component.scss'],\n imports: [\n DataGridComponent,\n DatePipe,\n UtcDatePipe,\n TranslatePipe,\n ],\n providers: [{ provide: DataGridDataset, useClass: ServicesHistoryDataset }]\n})\nexport class ServicesHistoryChildListComponent extends ChildList<any> implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('serviceTemplate') private serviceTemplate!: TemplateRef<any>;\n\n @Input() public set controllerName(value: string) {\n (<ServicesHistoryDataset>this.dataGridDataset).controllerName = value;\n } \n //#endregion\n\n //#region Variables\n public selectedServiceID?: number;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngAfterViewInit(): void {\n this.dataGridDataset.columns[0].template = this.serviceTemplate;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public override selectedRowChanged(): void {\n super.selectedRowChanged();\n\n if (this.dataGridDataset.hasSelectedRows) {\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];;\n this.selectedServiceID = this.dataGridDataset.getRowID(selectedKey);\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-data-grid [lazyLoadRows]=\"true\">\n</lib-data-grid>\n\n<ng-template #serviceTemplate let-rowData=\"rowData\">\n <div class=\"service-content\">\n <div class=\"icon\">\n <i class=\"fa-solid fa-circle fa-lg\"></i>\n </div>\n <div class=\"information\">\n <div class=\"service-name\">\n {{ rowData.name }}\n </div>\n <div class=\"details\">\n <span class=\"datetime\"><i class=\"fa-solid fa-clock\"></i> {{ rowData.changedOn | utcDate | date: ('Format-DateTime' | translate) }}</span>\n <span class=\"user\"><i class=\"fa-solid fa-user\"></i> {{ rowData.changedByName }}</span>\n </div>\n </div>\n </div>\n</ng-template>","import { Component, inject, Input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ViewBase } from '@zambon-dev/framework';\nimport { DataProviderService } from '@zambon-dev/library';\nimport { take } from 'rxjs';\nimport { OperationsHistoryChildListComponent } from '../../operations-history';\nimport { ServicesHistoryChildListComponent } from '../services-history-child-list/services-history-child-list.component';\n\n@Component({\n selector: 'shared-services-history-view',\n templateUrl: './services-history-view.component.html',\n styleUrls: ['./services-history-view.component.scss'],\n imports: [\n OperationsHistoryChildListComponent,\n ServicesHistoryChildListComponent,\n ]\n})\nexport class ServicesHistoryViewComponent extends ViewBase {\n //#region ViewChilds, Inputs, Outputs\n @Input({ required: true }) public controllerName!: string;\n\n @Input() public entityID?: number;\n //#endregion\n\n //#region Variables\n private activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n if (this.activatedRoute.snapshot.data['controllerName']) {\n this.controllerName = this.activatedRoute.snapshot.data['controllerName'];\n }\n\n if (this.dataProviderService) {\n this.dataProviderService.getModel$()\n .pipe(take(1))\n .subscribe((model: any) => {\n this.entityID = model.id;\n });\n }\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"history-container\">\n <div class=\"service-history-container\">\n <shared-services-history-child-list #service\n [controllerName]=\"controllerName\">\n </shared-services-history-child-list>\n </div>\n\n <div class=\"operations-history-container\">\n <shared-operations-history-child-list\n [controllerName]=\"controllerName\"\n [serviceID]=\"service.selectedServiceID\">\n </shared-operations-history-child-list>\n </div>\n</div>","import { HttpBackend } from '@angular/common/http';\nimport { EnvironmentProviders, Provider } from '@angular/core';\nimport { provideTranslateService, TranslateLoader } from '@ngx-translate/core';\nimport { MultiTranslateHttpLoader, TranslationResource } from 'ngx-translate-multi-http-loader';\n\nexport interface AngularAssetPattern {\n glob: string;\n input: string;\n output: string;\n}\n\nexport const ZAMBON_SHARED_I18N_ASSET_PATH = 'assets/i18n/zambon-dev/shared';\n\nexport const ZAMBON_SHARED_I18N_ASSET: AngularAssetPattern = {\n glob: '**/*.json',\n input: 'node_modules/@zambon-dev/shared/i18n',\n output: ZAMBON_SHARED_I18N_ASSET_PATH,\n};\n\nexport const ZAMBON_SHARED_I18N_RESOURCES: TranslationResource[] = [\n { prefix: `/${ZAMBON_SHARED_I18N_ASSET_PATH}/language-selector/`, suffix: '.json' },\n { prefix: `/${ZAMBON_SHARED_I18N_ASSET_PATH}/login/`, suffix: '.json' },\n { prefix: `/${ZAMBON_SHARED_I18N_ASSET_PATH}/operations-history/`, suffix: '.json' },\n { prefix: `/${ZAMBON_SHARED_I18N_ASSET_PATH}/top-bar/`, suffix: '.json' },\n];\n\nexport interface ZambonSharedTranslateConfig {\n defaultLanguage?: string;\n appResources?: (string | TranslationResource)[];\n}\n\nexport function createZambonSharedTranslateLoader(\n httpBackend: HttpBackend,\n appResources: (string | TranslationResource)[] = [],\n): MultiTranslateHttpLoader {\n return new MultiTranslateHttpLoader(httpBackend, [\n ...ZAMBON_SHARED_I18N_RESOURCES,\n ...appResources,\n ]);\n}\n\nexport function provideZambonSharedTranslateLoader(\n appResources: (string | TranslationResource)[] = [],\n): Provider {\n return {\n provide: TranslateLoader,\n useFactory: (httpBackend: HttpBackend) => createZambonSharedTranslateLoader(httpBackend, appResources),\n deps: [HttpBackend],\n };\n}\n\nexport function provideZambonSharedTranslateService(\n config: ZambonSharedTranslateConfig = {},\n): EnvironmentProviders {\n return provideTranslateService({\n defaultLanguage: config.defaultLanguage,\n loader: provideZambonSharedTranslateLoader(config.appResources),\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
package/package.json
CHANGED
package/styles/variables.scss
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
:root {
|
|
2
|
+
/* Dimensions */
|
|
2
3
|
--sidebar-animation-duration: 600ms;
|
|
3
4
|
--sidebar-collapsed-width: 70px;
|
|
4
5
|
--sidebar-expanded-width: 220px;
|
|
@@ -6,4 +7,25 @@
|
|
|
6
7
|
--sidebar-item-height: 2.75rem;
|
|
7
8
|
--sidebar-logo-height: 50px;
|
|
8
9
|
--sidebar-picture-size: 50px;
|
|
10
|
+
|
|
11
|
+
/* Surfaces & colors — translucent "glass" (brand-tinted) */
|
|
12
|
+
--sidebar-bg: color-mix(in srgb, theme('colors.primary.600') 82%, transparent);
|
|
13
|
+
--sidebar-nav-bg: color-mix(in srgb, white 5%, transparent);
|
|
14
|
+
--sidebar-text: theme('colors.gray.100');
|
|
15
|
+
--sidebar-text-muted: color-mix(in srgb, theme('colors.gray.100') 60%, transparent);
|
|
16
|
+
--sidebar-item-hover-bg: color-mix(in srgb, white 12%, transparent);
|
|
17
|
+
--sidebar-item-selected-bg: color-mix(in srgb, white 22%, transparent);
|
|
18
|
+
--sidebar-item-selected-text: theme('colors.white');
|
|
19
|
+
--sidebar-accent: theme('colors.gray.100');
|
|
20
|
+
--sidebar-tree-line: color-mix(in srgb, white 80%, theme('colors.primary.600'));
|
|
21
|
+
|
|
22
|
+
/* Glass */
|
|
23
|
+
--sidebar-blur: 16px;
|
|
24
|
+
--sidebar-shadow: 0 10px 40px -12px rgba(0, 0, 0, 0.45);
|
|
25
|
+
/* App background the glass sidebar floats over (tune to taste). */
|
|
26
|
+
--app-backdrop: linear-gradient(160deg, theme('colors.gray.100') 0%, theme('colors.gray.300') 100%);
|
|
27
|
+
|
|
28
|
+
/* Radii (rounded restyle) */
|
|
29
|
+
--sidebar-radius: 1.25rem;
|
|
30
|
+
--sidebar-item-radius: 10px;
|
|
9
31
|
}
|