@lukfel/ng-scaffold 21.1.44 → 21.1.45
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.
|
@@ -1470,14 +1470,14 @@ class NotificationComponent {
|
|
|
1470
1470
|
this.isMobile = toSignal(this.breakpointService.breakpoint$.pipe(map((state) => state.breakpoints[Breakpoints.XSmall])));
|
|
1471
1471
|
}
|
|
1472
1472
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1473
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NotificationComponent, isStandalone: true, selector: "lf-notification", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, linkText: { classPropertyName: "linkText", publicName: "linkText", isSignal: true, isRequired: false, transformFunction: null }, action: { classPropertyName: "action", publicName: "action", isSignal: true, isRequired: false, transformFunction: null }, matIcon: { classPropertyName: "matIcon", publicName: "matIcon", isSignal: true, isRequired: false, transformFunction: null }, svgIcon: { classPropertyName: "svgIcon", publicName: "svgIcon", isSignal: true, isRequired: false, transformFunction: null }, static: { classPropertyName: "static", publicName: "static", isSignal: true, isRequired: false, transformFunction: null }, minimal: { classPropertyName: "minimal", publicName: "minimal", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<div\r\n class=\"lf-notification\"\r\n [class.mat-elevation-z2]=\"!static()\"\r\n [class.lf-notification-fixed]=\"!static()\"\r\n [class.lf-notification-static]=\"static()\"\r\n [class.lf-notification-minimal]=\"minimal()\"\r\n [class.lf-mobile]=\"isMobile()\"\r\n [class]=\"[cssClass(), color()]\"\r\n animate.enter=\"lf-anim-scale-enter\">\r\n <div\r\n class=\"lf-notification-content flex-row-nowrap
|
|
1473
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NotificationComponent, isStandalone: true, selector: "lf-notification", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, linkText: { classPropertyName: "linkText", publicName: "linkText", isSignal: true, isRequired: false, transformFunction: null }, action: { classPropertyName: "action", publicName: "action", isSignal: true, isRequired: false, transformFunction: null }, matIcon: { classPropertyName: "matIcon", publicName: "matIcon", isSignal: true, isRequired: false, transformFunction: null }, svgIcon: { classPropertyName: "svgIcon", publicName: "svgIcon", isSignal: true, isRequired: false, transformFunction: null }, static: { classPropertyName: "static", publicName: "static", isSignal: true, isRequired: false, transformFunction: null }, minimal: { classPropertyName: "minimal", publicName: "minimal", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "<div\r\n class=\"lf-notification\"\r\n [class.mat-elevation-z2]=\"!static()\"\r\n [class.lf-notification-fixed]=\"!static()\"\r\n [class.lf-notification-static]=\"static()\"\r\n [class.lf-notification-minimal]=\"minimal()\"\r\n [class.lf-mobile]=\"isMobile()\"\r\n [class]=\"[cssClass(), color()]\"\r\n animate.enter=\"lf-anim-scale-enter\">\r\n <div\r\n class=\"lf-notification-content flex-row-nowrap gap-2\"\r\n [class.justify-center]=\"minimal()\"\r\n [class.justify-between]=\"!minimal()\"\r\n [class.flex-col]=\"isMobile()\"\r\n [class.align-center]=\"!isMobile()\"\r\n [class.align-start]=\"isMobile()\">\r\n <span\r\n class=\"lf-notification-message flex-row-nowrap align-center justify-start\"\r\n [class.gap-4]=\"!isMobile()\"\r\n [class.gap-2]=\"isMobile()\">\r\n @if (matIcon()) {\r\n <mat-icon class=\"flex-none\" [color]=\"color()\">{{ matIcon() }}</mat-icon>\r\n }\r\n <span [class.ml-1]=\"!matIcon()\">\r\n {{ message() }}\r\n @if (link() && linkText()) {\r\n <a class=\"lf-notification-link\" [href]=\"link()\">{{ linkText() }}</a>\r\n }\r\n </span>\r\n </span>\r\n\r\n @if (action(); as action) {\r\n <button\r\n mat-flat-button\r\n class=\"lf-notification-action\"\r\n [class.align-self-end]=\"isMobile()\"\r\n [color]=\"color()\"\r\n (click)=\"clickEvent.emit()\">\r\n {{ action }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".lf-notification{overflow:hidden;padding:var(--notification-padding);box-sizing:border-box;border-radius:var(--border-radius);color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));background-color:var(--mat-snack-bar-container-color, var(--mat-sys-inverse-surface));outline-width:2px;outline-style:solid;outline-color:transparent}.lf-notification.lf-mobile.lf-notification-fixed{position:fixed;inset:auto 0 0;max-width:100vw!important;min-width:0!important}.lf-notification.lf-notification-fixed{z-index:1000;position:fixed;inset:auto 0 0 auto;display:inline-table;max-width:var(--notification-max-width);min-width:var(--notification-min-width);margin:var(--notification-fixed-margin)}.lf-notification.lf-notification-static{margin:var(--notification-static-margin)}.lf-notification.lf-notification-minimal{padding:var(--notification-padding-minimal);outline:none!important;margin:0!important}.lf-notification.primary{color:unset!important;background-color:color-mix(in srgb,var(--color-primary) 12%,transparent);outline-color:var(--color-primary-200)}.lf-notification.primary .lf-notification-link{color:unset!important}.lf-notification.accent{color:unset!important;background-color:color-mix(in srgb,var(--color-accent) 12%,transparent);outline-color:var(--color-accent-200)}.lf-notification.accent .lf-notification-link{color:unset!important}.lf-notification.warn{color:unset!important;background-color:color-mix(in srgb,var(--color-warn) 12%,transparent);outline-color:var(--color-warn-200)}.lf-notification.warn .lf-notification-link{color:unset!important}.lf-notification .lf-notification-content .lf-notification-message{font-size:var(--notification-font-size)}.lf-notification .lf-notification-content .lf-notification-message .lf-notification-link{color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));text-decoration:underline}.lf-notification .lf-notification-content .lf-notification-action{min-width:unset!important;flex-shrink:0;margin:-8px 0 -8px 8px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1474
1474
|
}
|
|
1475
1475
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NotificationComponent, decorators: [{
|
|
1476
1476
|
type: Component,
|
|
1477
1477
|
args: [{ selector: 'lf-notification', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
1478
1478
|
MatButtonModule,
|
|
1479
1479
|
MatIconModule
|
|
1480
|
-
], template: "<div\r\n class=\"lf-notification\"\r\n [class.mat-elevation-z2]=\"!static()\"\r\n [class.lf-notification-fixed]=\"!static()\"\r\n [class.lf-notification-static]=\"static()\"\r\n [class.lf-notification-minimal]=\"minimal()\"\r\n [class.lf-mobile]=\"isMobile()\"\r\n [class]=\"[cssClass(), color()]\"\r\n animate.enter=\"lf-anim-scale-enter\">\r\n <div\r\n class=\"lf-notification-content flex-row-nowrap
|
|
1480
|
+
], template: "<div\r\n class=\"lf-notification\"\r\n [class.mat-elevation-z2]=\"!static()\"\r\n [class.lf-notification-fixed]=\"!static()\"\r\n [class.lf-notification-static]=\"static()\"\r\n [class.lf-notification-minimal]=\"minimal()\"\r\n [class.lf-mobile]=\"isMobile()\"\r\n [class]=\"[cssClass(), color()]\"\r\n animate.enter=\"lf-anim-scale-enter\">\r\n <div\r\n class=\"lf-notification-content flex-row-nowrap gap-2\"\r\n [class.justify-center]=\"minimal()\"\r\n [class.justify-between]=\"!minimal()\"\r\n [class.flex-col]=\"isMobile()\"\r\n [class.align-center]=\"!isMobile()\"\r\n [class.align-start]=\"isMobile()\">\r\n <span\r\n class=\"lf-notification-message flex-row-nowrap align-center justify-start\"\r\n [class.gap-4]=\"!isMobile()\"\r\n [class.gap-2]=\"isMobile()\">\r\n @if (matIcon()) {\r\n <mat-icon class=\"flex-none\" [color]=\"color()\">{{ matIcon() }}</mat-icon>\r\n }\r\n <span [class.ml-1]=\"!matIcon()\">\r\n {{ message() }}\r\n @if (link() && linkText()) {\r\n <a class=\"lf-notification-link\" [href]=\"link()\">{{ linkText() }}</a>\r\n }\r\n </span>\r\n </span>\r\n\r\n @if (action(); as action) {\r\n <button\r\n mat-flat-button\r\n class=\"lf-notification-action\"\r\n [class.align-self-end]=\"isMobile()\"\r\n [color]=\"color()\"\r\n (click)=\"clickEvent.emit()\">\r\n {{ action }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".lf-notification{overflow:hidden;padding:var(--notification-padding);box-sizing:border-box;border-radius:var(--border-radius);color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));background-color:var(--mat-snack-bar-container-color, var(--mat-sys-inverse-surface));outline-width:2px;outline-style:solid;outline-color:transparent}.lf-notification.lf-mobile.lf-notification-fixed{position:fixed;inset:auto 0 0;max-width:100vw!important;min-width:0!important}.lf-notification.lf-notification-fixed{z-index:1000;position:fixed;inset:auto 0 0 auto;display:inline-table;max-width:var(--notification-max-width);min-width:var(--notification-min-width);margin:var(--notification-fixed-margin)}.lf-notification.lf-notification-static{margin:var(--notification-static-margin)}.lf-notification.lf-notification-minimal{padding:var(--notification-padding-minimal);outline:none!important;margin:0!important}.lf-notification.primary{color:unset!important;background-color:color-mix(in srgb,var(--color-primary) 12%,transparent);outline-color:var(--color-primary-200)}.lf-notification.primary .lf-notification-link{color:unset!important}.lf-notification.accent{color:unset!important;background-color:color-mix(in srgb,var(--color-accent) 12%,transparent);outline-color:var(--color-accent-200)}.lf-notification.accent .lf-notification-link{color:unset!important}.lf-notification.warn{color:unset!important;background-color:color-mix(in srgb,var(--color-warn) 12%,transparent);outline-color:var(--color-warn-200)}.lf-notification.warn .lf-notification-link{color:unset!important}.lf-notification .lf-notification-content .lf-notification-message{font-size:var(--notification-font-size)}.lf-notification .lf-notification-content .lf-notification-message .lf-notification-link{color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));text-decoration:underline}.lf-notification .lf-notification-content .lf-notification-action{min-width:unset!important;flex-shrink:0;margin:-8px 0 -8px 8px}\n"] }]
|
|
1481
1481
|
}], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: false }] }], linkText: [{ type: i0.Input, args: [{ isSignal: true, alias: "linkText", required: false }] }], action: [{ type: i0.Input, args: [{ isSignal: true, alias: "action", required: false }] }], matIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "matIcon", required: false }] }], svgIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "svgIcon", required: false }] }], static: [{ type: i0.Input, args: [{ isSignal: true, alias: "static", required: false }] }], minimal: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimal", required: false }] }], cssClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "cssClass", required: false }] }], clickEvent: [{ type: i0.Output, args: ["clickEvent"] }] } });
|
|
1482
1482
|
|
|
1483
1483
|
class PlaceholderComponent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lukfel-ng-scaffold.mjs","sources":["../../../projects/ng-scaffold/src/lib/scaffold.config.ts","../../../projects/ng-scaffold/src/lib/services/breakpoint.service.ts","../../../projects/ng-scaffold/src/lib/services/dialog.service.ts","../../../projects/ng-scaffold/src/lib/services/logger.service.ts","../../../projects/ng-scaffold/src/lib/services/local-storage.service.ts","../../../projects/ng-scaffold/src/lib/services/overlay.service.ts","../../../projects/ng-scaffold/src/lib/services/router.service.ts","../../../projects/ng-scaffold/src/lib/services/scaffold.service.ts","../../../projects/ng-scaffold/src/lib/services/seo.service.ts","../../../projects/ng-scaffold/src/lib/services/snackbar.service.ts","../../../projects/ng-scaffold/src/lib/services/theme.service.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.html","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.ts","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.html","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.ts","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.html","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.ts","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.html","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.ts","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.html","../../../projects/ng-scaffold/src/lib/shared/components/input/input.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/input/input.component.html","../../../projects/ng-scaffold/src/lib/components/header/header.component.ts","../../../projects/ng-scaffold/src/lib/components/header/header.component.html","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.ts","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.html","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.ts","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.html","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.ts","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.html","../../../projects/ng-scaffold/src/lib/shared/components/color-picker/color-picker.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/color-picker/color-picker.component.html","../../../projects/ng-scaffold/src/lib/shared/components/file-upload/file-upload.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/file-upload/file-upload.component.html","../../../projects/ng-scaffold/src/lib/directives/list/list-item-avatar.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-buttons.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-subtitle.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-title.directive.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.html","../../../projects/ng-scaffold/src/lib/shared/components/notification/notification.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/notification/notification.component.html","../../../projects/ng-scaffold/src/lib/shared/components/placeholder/placeholder.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/placeholder/placeholder.component.html","../../../projects/ng-scaffold/src/lib/interceptors/loading.interceptor.ts","../../../projects/ng-scaffold/src/public-api.ts","../../../projects/ng-scaffold/src/lukfel-ng-scaffold.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from './models';\r\n\r\nexport const CONFIG = new InjectionToken<ScaffoldLibraryConfig>('config');\r\n\r\nexport function provideScaffold(config: ScaffoldLibraryConfig = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n { provide: CONFIG, useValue: config }\r\n ]);\r\n}","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { distinctUntilChanged } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BreakpointService {\r\n \r\n private breakpointObserver = inject(BreakpointObserver);\r\n\r\n\r\n public readonly breakpoint$ = this.breakpointObserver\r\n .observe([Breakpoints.Large, Breakpoints.Medium, Breakpoints.Small, Breakpoints.XSmall])\r\n .pipe(distinctUntilChanged());\r\n\r\n}\r\n","import { Injectable, Type, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfirmDialogConfig, HeaderInputConfig } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n private matDialog = inject(MatDialog);\r\n\r\n\r\n /**\r\n * Opens a simple pre-made confirm dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous boolean response\r\n */\r\n public async openConfirmDialog(config: ConfirmDialogConfig): Promise<boolean> {\r\n const { ConfirmDialogComponent } = await import('../shared/components/dialogs/confirm-dialog/confirm-dialog.component');\r\n\r\n const dialogRef = this.matDialog.open(ConfirmDialogComponent, {\r\n autoFocus: false,\r\n maxWidth: '368px',\r\n data: config\r\n });\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a dialog with custom template and custom config\r\n *\r\n * @param templateRef reference to the component or template\r\n * @param config of the dialog\r\n * @returns an asynchronous any response\r\n */\r\n public openCustomDialog<T>(templateRef: Type<T>, config: MatDialogConfig): Promise<any> { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n const dialogRef = this.matDialog.open(templateRef, config);\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a simple pre-made input dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous string response\r\n */\r\n public async openInputDialog(config: HeaderInputConfig): Promise<string | undefined> {\r\n const { InputComponent } = await import('../shared/components/input/input.component');\r\n\r\n const dialogRef = this.matDialog.open(InputComponent, {\r\n autoFocus: false,\r\n width: '100vw',\r\n data: config,\r\n panelClass: 'lf-input-dialog'\r\n });\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Logger {\r\n\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n /**\r\n * Uses the regular console log but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n * \r\n * @param message message of the log\r\n * @param args arguments of the log\r\n */\r\n public log(message: string, ...args: any[]): void { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (this.libraryConfig?.production === false) {\r\n console.log(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n /**\r\n * Uses the regular console warn but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n * \r\n * @param message message of the warn\r\n * @param args arguments of the warn\r\n */\r\n public warn(message: string, ...args: any[]): void { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (this.libraryConfig?.production === false) {\r\n console.warn(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n /**\r\n * Uses the regular console error but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n * \r\n * @param message message of the error\r\n * @param args arguments of the error\r\n */\r\n public error(message: string, ...args: any[]): void { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (this.libraryConfig?.production === false) {\r\n console.error(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private platformId = inject(PLATFORM_ID);\r\n private logger = inject(Logger);\r\n\r\n\r\n /**\r\n * Set an item into the browser's local storage\r\n * \r\n * @param key key of the item\r\n * @param value value of the item\r\n */\r\n public setItem<T>(key: string, value: T | null): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n const stringValue: string = JSON.stringify(value);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[SET ITEM] ${key} with value:`, stringValue);\r\n localStorage.setItem(key, stringValue);\r\n } catch (error) {\r\n this.logger.error(`[ERROR SET ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Set an item encoded into the browser's local storage\r\n * \r\n * @param key key of the item\r\n * @param value value of the item\r\n */\r\n public setItemEncoded<T>(key: string, value: T | null): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n const encodedValue: string = btoa(JSON.stringify(value));\r\n if (this.libraryConfig?.debugging) this.logger.log(`[SET ITEM] ${key} with value:`, encodedValue);\r\n localStorage.setItem(key, encodedValue);\r\n } catch (error) {\r\n this.logger.error(`[ERROR SET ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Get an item from the browser's local storage by key\r\n * \r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public getItem<T>(key: string): T | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item ? JSON.parse(item, this.dateReviver) as T : null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get an item and decode it from the browser's local storage by key\r\n * \r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public getItemDecoded<T>(key: string): T | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item ? JSON.parse(atob(item), this.dateReviver) as T : null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get an unparsed string item from the browser's local storage by key\r\n * \r\n * @param key key of the item\r\n */\r\n public getItemUnparsed(key: string): string | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item || null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Remove an item from the browser's local storage by key\r\n * \r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public removeItem(key: string): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[REMOVE ITEM] ${key}`);\r\n localStorage.removeItem(key);\r\n } catch (error) {\r\n this.logger.error(`[ERROR REMOVE ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Clear the browser's local storage for this application\r\n * \r\n */\r\n public clear(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n localStorage.clear();\r\n }\r\n\r\n private dateReviver(key: any, value: any): any { // eslint-disable-line\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/.test(value)) {\r\n return new Date(value);\r\n }\r\n return value;\r\n }\r\n}\r\n","\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OverlayService {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private overlay = inject(Overlay);\r\n private logger = inject(Logger);\r\n\r\n\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n\r\n public open<T>(component: ComponentType<T>): void {\r\n if (this.overlayRef) return;\r\n\r\n this.overlayRef = this.overlay.create({\r\n hasBackdrop: true,\r\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n });\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[Overlay] attach', this.overlayRef);\r\n\r\n const portal: ComponentPortal<T> = new ComponentPortal(component);\r\n this.overlayRef.attach(portal);\r\n }\r\n\r\n public close(): void {\r\n if (!this.overlayRef) return;\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[Overlay] detach', this.overlayRef);\r\n this.overlayRef.detach();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { NavigationEnd, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable, take } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n\r\nexport class RouterService {\r\n private router = inject(Router);\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n\r\n private _loading$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n public get loading$(): Observable<boolean> {\r\n return this._loading$.asObservable();\r\n }\r\n\r\n private _routeHistory$: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);\r\n\r\n public get routeHistory$(): Observable<string[]> {\r\n return this._routeHistory$.asObservable();\r\n }\r\n\r\n private _currentRoute$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get currentRoute$(): Observable<string> {\r\n return this._currentRoute$.asObservable();\r\n }\r\n\r\n public get currentRoute(): string {\r\n return this._currentRoute$.value;\r\n }\r\n\r\n private _previousRoute$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get previousRoute$(): Observable<string> {\r\n return this._previousRoute$.asObservable();\r\n }\r\n\r\n public get previousRoute(): string {\r\n return this._previousRoute$.value;\r\n }\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n history.replaceState({ ...history.state, back: false }, '');\r\n }\r\n\r\n this.router.events.subscribe(event => {\r\n let asyncLoadCount: number = 0;\r\n\r\n if (event instanceof RouteConfigLoadStart) { asyncLoadCount++; }\r\n if (event instanceof RouteConfigLoadEnd) { asyncLoadCount--; }\r\n if (event instanceof NavigationEnd) {\r\n const previousRoute: string = this._currentRoute$.value;\r\n this._previousRoute$.next(previousRoute);\r\n\r\n const currentRoute: string = event.urlAfterRedirects;\r\n this._currentRoute$.next(currentRoute);\r\n\r\n if (!this.router.currentNavigation()?.extras?.state?.['back']) {\r\n if (previousRoute) {\r\n const routeHistory: string[] = this._routeHistory$.value;\r\n routeHistory.push(previousRoute);\r\n this._routeHistory$.next(routeHistory);\r\n }\r\n }\r\n }\r\n\r\n this._loading$.next(!!asyncLoadCount);\r\n });\r\n }\r\n\r\n /**\r\n * Navigates to the previous route found in the routeHistory Observable\r\n * \r\n * @param fallbackRoute fallback in case there is no previous route\r\n */\r\n public navigateBack(fallbackRoute?: string): void {\r\n this._routeHistory$.pipe(take(1)).subscribe(routeHistory => {\r\n if (routeHistory.length > 0) {\r\n const previousRoute: string = routeHistory[routeHistory.length - 1];\r\n\r\n if (previousRoute) {\r\n this.router.navigateByUrl(previousRoute, { state: { back: true } }).then(result => {\r\n if (result) {\r\n routeHistory.pop();\r\n }\r\n });\r\n } else if (fallbackRoute) {\r\n this.router.navigate([fallbackRoute]);\r\n }\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Clear the current route history\r\n */\r\n public clearRouteHistory(): void {\r\n this._routeHistory$.next([]);\r\n }\r\n\r\n}\r\n","import { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldConfig, ScaffoldLibraryConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ScaffoldService {\r\n\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private logger = inject(Logger);\r\n\r\n\r\n // Scaffold Config\r\n private _scaffoldConfig$: BehaviorSubject<ScaffoldConfig> = new BehaviorSubject<ScaffoldConfig>({});\r\n\r\n public get scaffoldConfig$(): Observable<ScaffoldConfig> {\r\n return this._scaffoldConfig$.asObservable();\r\n }\r\n\r\n public set scaffoldConfig(value: ScaffoldConfig) {\r\n if (this.libraryConfig?.debugging) this.logger.log('[UPDATE] ScaffoldConfig', value);\r\n this._scaffoldConfig$.next(value);\r\n }\r\n\r\n public get scaffoldConfig(): ScaffoldConfig {\r\n return this._scaffoldConfig$.value;\r\n }\r\n\r\n // Header Input Change\r\n private _headerInputChangeValue$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get headerInputChangeValue$(): Observable<string> {\r\n return this._headerInputChangeValue$.asObservable();\r\n }\r\n\r\n public set headerInputChangeValue(value: string) {\r\n this._headerInputChangeValue$.next(value);\r\n }\r\n\r\n // Button Click Event\r\n private _buttonClickEventValue$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get buttonClickEventValue$(): Observable<string> {\r\n return this._buttonClickEventValue$.asObservable();\r\n }\r\n\r\n public set buttonClickEventValue(value: string) {\r\n this._buttonClickEventValue$.next(value);\r\n this._buttonClickEventValue$.next('');\r\n }\r\n\r\n // Drawer component\r\n private _drawerPortal$ = new BehaviorSubject<ComponentPortal<unknown> | TemplatePortal<unknown> | null>(null);\r\n\r\n public get drawerPortal$(): Observable<ComponentPortal<unknown> | TemplatePortal<unknown> | null> {\r\n return this._drawerPortal$.asObservable();\r\n }\r\n\r\n public set drawerPortal(value: ComponentType<unknown>) {\r\n const componentPortal: ComponentPortal<unknown> = new ComponentPortal(value);\r\n this._drawerPortal$.next(value ? componentPortal : null);\r\n }\r\n\r\n // Update a specific property in the ScaffoldConfig\r\n public updateScaffoldProperty<K extends keyof ScaffoldConfig>(property: K, value: Partial<ScaffoldConfig[K]> | ScaffoldConfig[K]): void {\r\n const currentState: ScaffoldConfig = this._scaffoldConfig$.getValue();\r\n const currentValue: ScaffoldConfig[K] = currentState[property];\r\n let newValue: ScaffoldConfig[K];\r\n\r\n if (currentValue && typeof currentValue === 'object' && value && typeof value === 'object') {\r\n newValue = { ...currentValue, ...value } as ScaffoldConfig[K];\r\n } else {\r\n newValue = value as ScaffoldConfig[K];\r\n }\r\n\r\n if (newValue === currentValue) {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UNCHANGED] ScaffoldConfig.${property}`, newValue)\r\n return;\r\n }\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, newValue);\r\n this._scaffoldConfig$.next({ ...currentState, [property]: newValue });\r\n }\r\n}\r\n","\r\nimport { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { SeoConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SeoService {\r\n private metaTitle = inject(Title);\r\n private metaTags = inject(Meta);\r\n private document = inject<Document>(DOCUMENT);\r\n private logger = inject(Logger);\r\n\r\n\r\n private _config$: BehaviorSubject<SeoConfig | null> = new BehaviorSubject<SeoConfig | null>(null);\r\n\r\n public get config$(): Observable<SeoConfig | null> {\r\n return this._config$.asObservable();\r\n }\r\n\r\n\r\n /**\r\n * Pass a configuration to set meta tags such as title, description and image for search results and social media\r\n * \r\n * @param seoConfig config that contains all the meta information\r\n * \r\n */\r\n public setMetaTags(seoConfig: SeoConfig): void {\r\n this._config$.next(seoConfig);\r\n\r\n const autoTrim: boolean = seoConfig.autoTrim || false;\r\n const title: string = seoConfig.metaPageTitle || '';\r\n const description: string = seoConfig.metaPageDescription || '';\r\n const imagePath: string = seoConfig.metaImagePath || '';\r\n const imagePathIsAbsolute: boolean = seoConfig.metaImagePathIsAbsolute || false;\r\n const titleLimit: number = 60;\r\n const descriptionLimit: number = 160;\r\n\r\n // Set meta title\r\n if (title) {\r\n if (autoTrim && title.length > titleLimit) {\r\n this.logger.error(`[SeoService] The set meta title is too long. Recommended length is ${titleLimit}. The title will be trimmed.`);\r\n }\r\n const titleTrim: string = (title.length > titleLimit) ? title.substring(0, titleLimit - 3) + '...' : title;\r\n this._setMetaTitle(autoTrim ? titleTrim : title);\r\n }\r\n\r\n // Set meta description\r\n if (description) {\r\n if (autoTrim && description.length > descriptionLimit) {\r\n this.logger.error(`[SeoService] The set meta description is too long. Recommended length is ${descriptionLimit}. The description will be trimmed.`);\r\n }\r\n const descriptionTrim: string = (description.length > descriptionLimit) ? description.substring(0, descriptionLimit - 3) + '...' : description;\r\n this._setMetaDescription(autoTrim ? descriptionTrim : description);\r\n }\r\n\r\n // Set meta image\r\n const host: string = this.document.location.origin;\r\n if (imagePath) {\r\n this._setMetaImage(imagePathIsAbsolute ? imagePath : `${host}/${imagePath}`);\r\n }\r\n }\r\n\r\n // Set all meta titles\r\n private _setMetaTitle(title: string): void {\r\n this.metaTitle.setTitle(title);\r\n this.metaTags.updateTag({ property: 'og:title', content: title });\r\n this.metaTags.updateTag({ name: 'twitter:title', content: title });\r\n }\r\n\r\n // Set all meta descriptions\r\n private _setMetaDescription(description: string): void {\r\n this.metaTags.updateTag({ name: 'description', content: description });\r\n this.metaTags.updateTag({ property: 'og:description', content: description });\r\n this.metaTags.updateTag({ name: 'twitter:description', content: description });\r\n }\r\n\r\n // Set all meta images\r\n private _setMetaImage(image: string): void {\r\n this.metaTags.updateTag({ property: 'og:image', content: image });\r\n this.metaTags.updateTag({ name: 'twitter:image', content: image });\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { MatSnackBar, MatSnackBarConfig, MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition } from '@angular/material/snack-bar';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SnackbarService {\r\n private snackbar = inject(MatSnackBar);\r\n\r\n\r\n private readonly SNACKBAR_DURATION: number = 5000;\r\n private readonly SNACKBAR_POSITION_HORIZONTAL: MatSnackBarHorizontalPosition = 'center';\r\n private readonly SNACKBAR_POSITION_VERTICAL: MatSnackBarVerticalPosition = 'bottom';\r\n\r\n private readonly actionConfig: MatSnackBarConfig = {\r\n duration: this.SNACKBAR_DURATION,\r\n horizontalPosition: this.SNACKBAR_POSITION_HORIZONTAL,\r\n verticalPosition: this.SNACKBAR_POSITION_VERTICAL\r\n };\r\n\r\n private readonly defaultConfig: MatSnackBarConfig = {\r\n duration: (this.SNACKBAR_DURATION / 2),\r\n horizontalPosition: this.SNACKBAR_POSITION_HORIZONTAL,\r\n verticalPosition: this.SNACKBAR_POSITION_VERTICAL\r\n };\r\n\r\n // Opens a generic snackbar with a message\r\n public openSnackbar(message: string, closeLabel?: string, config?: MatSnackBarConfig): void {\r\n this.snackbar.open(message, closeLabel, config ? config : this.defaultConfig);\r\n }\r\n\r\n // Opens a snackbar with an action to wait for\r\n public openSnackbarWithAction(message: string, action: string, config?: MatSnackBarConfig): Promise<void> {\r\n const snackbarRef = this.snackbar.open(message, action, config ? config : this.actionConfig);\r\n return firstValueFrom(snackbarRef.onAction());\r\n }\r\n\r\n}\r\n","\r\nimport { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n \r\n private storageService = inject(LocalStorageService);\r\n private document = inject<Document>(DOCUMENT);\r\n\r\n\r\n private readonly THEME_KEY: string = 'THEME';\r\n\r\n private _currentTheme$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n get currentTheme$(): Observable<string> {\r\n return this._currentTheme$.asObservable();\r\n }\r\n\r\n constructor() {\r\n this.loadTheme();\r\n }\r\n\r\n /**\r\n * Set one of the defined themes by passing its class name\r\n *\r\n * @param newTheme class name of the theme (pass empty string for default theme)\r\n * @param useLocalStorage persist the current theme in the LocalStorage\r\n */\r\n public setTheme(newTheme: string, useLocalStorage?: boolean): void {\r\n const currentTheme: string = this._currentTheme$.value;\r\n\r\n if (newTheme === currentTheme) {\r\n return;\r\n }\r\n\r\n if (currentTheme) {\r\n this.document.body.classList.remove(currentTheme);\r\n }\r\n\r\n this._currentTheme$.next(newTheme);\r\n\r\n if (newTheme) {\r\n this.document.body.classList.add(newTheme);\r\n\r\n if (useLocalStorage) {\r\n this.storageService.setItem(this.THEME_KEY, JSON.stringify(newTheme));\r\n }\r\n } else {\r\n if (useLocalStorage) {\r\n this.storageService.removeItem(this.THEME_KEY);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Loads the current theme stored in the local storage if available\r\n *\r\n */\r\n private loadTheme(): void {\r\n const theme: string | null = this.storageService.getItem(this.THEME_KEY);\r\n\r\n if (!theme) {\r\n return;\r\n }\r\n\r\n this.setTheme(theme.replace(/\"/g, ''));\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BottomBarConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-bottom-bar',\r\n templateUrl: './bottom-bar.component.html',\r\n styleUrls: ['./bottom-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n NgClass\r\n]\r\n})\r\nexport class BottomBarComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly bottomBarConfig = input<BottomBarConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly navbarEnabled = input<boolean>(false);\r\n\r\n public readonly bottomBarCloseClickEvent = output<string>();\r\n public readonly bottomBarButtonClickEvent = output<string>();\r\n\r\n\r\n public buttonClicked(id?: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n public closeClicked(closeButtonId: string): void {\r\n this.bottomBarCloseClickEvent.emit(closeButtonId);\r\n }\r\n\r\n}\r\n","@if (bottomBarConfig(); as config) {\r\n @if (config.enable) {\r\n <div\r\n animate.enter=\"lf-anim-slide-up-enter\"\r\n animate.leave=\"lf-anim-slide-up-leave\"\r\n class=\"lf-bottom-bar lf-transitions px-4\"\r\n [ngClass]=\"config.cssClass\"\r\n [class.lf-bottom-bar-show-navbar]=\"!isMobile() && navbarEnabled()\"\r\n [class.lf-bottom-bar-show-navbar-mobile]=\"isMobile() && navbarEnabled()\">\r\n @if (config.closeButtonId) {\r\n <button mat-icon-button (click)=\"closeClicked(config.closeButtonId)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (config.message) {\r\n <span class=\"ml-2\">{{ config.message }}</span>\r\n }\r\n @if (config.buttons) {\r\n <div class=\"lf-bottom-bar-buttons ml-4\">\r\n @for (button of config.buttons; track button.id) {\r\n <!-- label button -->\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-bottom-bar-button ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ button.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else {\r\n <button\r\n mat-icon-button\r\n color=\"accent\"\r\n class=\"lf-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ContentTitleCardConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-content-title-card',\r\n templateUrl: './content-title-card.component.html',\r\n styleUrls: ['./content-title-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n NgClass\n]\r\n})\r\nexport class ContentTitleCardComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly contentTitleCardConfig = input<ContentTitleCardConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly routeHistory = input<string[]>([]);\r\n\r\n public readonly backButtonClickEvent = output<void>();\r\n\r\n\r\n public backButtonClicked(): void {\r\n this.backButtonClickEvent.emit();\r\n }\r\n\r\n}\r\n","@if (contentTitleCardConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-card\r\n class=\"lf-content-title-card mat-elevation-z2\"\r\n [class.lf-content-title-card-mobile]=\"isMobile()\"\r\n [class.px-4]=\"!isMobile()\"\r\n [class.px-2]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\">\r\n <!-- back button -->\r\n @if (config.showBackButton && routeHistory().length > 0) {\r\n <button mat-icon-button color=\"accent\" (click)=\"backButtonClicked()\">\r\n <mat-icon>arrow_back_ios</mat-icon>\r\n </button>\r\n }\r\n <!-- spacer -->\r\n <div class=\"flex-auto\"></div>\r\n <!-- label -->\r\n <span class=\"lf-content-title-card-label\">\r\n {{ config.label || \"\" }}\r\n </span>\r\n <!-- spacer -->\r\n <div class=\"flex-auto\"></div>\r\n <!-- empty button spacer -->\r\n <div\r\n [style.width]=\"config.showBackButton && routeHistory().length > 1 ? '48px' : '0px'\"></div>\r\n </mat-card>\r\n }\r\n}\r\n","import { ComponentPortal, PortalModule, TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, OnInit, output } from '@angular/core';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { DrawerConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-drawer',\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n PortalModule,\n MatSidenavModule,\n NgClass,\n NgTemplateOutlet\n]\r\n})\r\nexport class DrawerComponent implements OnInit {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly drawerConfig = input<DrawerConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly headerEnabled = input<boolean>(false);\r\n public readonly drawerPortal = input<ComponentPortal<unknown> | TemplatePortal<unknown> | null>();\r\n\r\n public readonly drawerConfigUpdateEvent = output<Partial<DrawerConfig>>();\r\n\r\n\r\n ngOnInit(): void {\r\n // Avoid initializing an open drawer on mobile\r\n const drawerConfig = this.drawerConfig();\r\n if (this.isMobile() && drawerConfig?.enable && drawerConfig?.open) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n }\r\n }\r\n\r\n\r\n // Detect when the drawer is closed without clicking a button\r\n public drawerClosed(): void {\r\n if (this.drawerConfig()) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n };\r\n }\r\n\r\n}\r\n","@if (drawerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-sidenav-container class=\"lf-drawer-container lf-transitions\" [ngClass]=\"config.cssClass\">\r\n <!-- drawer -->\r\n <mat-sidenav\r\n #drawer\r\n class=\"lf-drawer mat-elevation-z2\"\r\n [class.mobile]=\"isMobile()\"\r\n [mode]=\"isMobile() ? 'over' : 'side'\"\r\n [opened]=\"config.open\"\r\n [autoFocus]=\"false\"\r\n [fixedInViewport]=\"config.fixed\"\r\n [class.lf-drawer-show-header]=\"headerEnabled() && config.fixed\"\r\n (closed)=\"drawerClosed()\">\r\n <!-- drawer content -->\r\n <!-- <ng-content select=\"[drawerContent]\"></ng-content> -->\r\n @if (drawerPortal()) {\r\n <ng-template [cdkPortalOutlet]=\"drawerPortal()\"></ng-template>\r\n } @else {\r\n <ng-content select=\"[drawerContent]\"></ng-content>\r\n }\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"overflow-unset\">\r\n <!-- main content -->\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n }\r\n} @else {\r\n <!-- render content without drawer -->\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n}\r\n\r\n<!-- this template is required to allow multiple <ng-content></ng-content> -->\r\n<ng-template #content><ng-content></ng-content></ng-template>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, OnInit, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FloatingButtonConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-floating-button',\r\n templateUrl: './floating-button.component.html',\r\n styleUrls: ['./floating-button.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n NgClass\n]\r\n})\r\nexport class FloatingButtonComponent implements OnInit {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly floatingButtonConfig = input<FloatingButtonConfig | null>(null);\r\n public readonly onTop = input<boolean>(false);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly drawerEnabled = input<boolean>(false);\r\n public readonly navbarEnabled = input<boolean>(false);\r\n public readonly bottomBarEnabled = input<boolean>(false);\r\n\r\n public readonly floatingButtonConfigUpdateEvent = output<Partial<FloatingButtonConfig>>();\r\n public readonly floatingButtonClickEvent = output<string>();\r\n\r\n\r\n ngOnInit(): void {\r\n const floatingButtonConfig = this.floatingButtonConfig();\r\n if (floatingButtonConfig) {\r\n const updatedFloatingButtonConfigConfig: Partial<FloatingButtonConfig> = {\r\n matIcon: (!floatingButtonConfig.matIcon && !floatingButtonConfig.svgIcon) ? 'arrow_upward' : floatingButtonConfig.matIcon || floatingButtonConfig.svgIcon,\r\n horizontalPosition: floatingButtonConfig.horizontalPosition ?? 'right'\r\n };\r\n\r\n if (JSON.stringify(updatedFloatingButtonConfigConfig) !== JSON.stringify(floatingButtonConfig)) {\r\n this.floatingButtonConfigUpdateEvent.emit(updatedFloatingButtonConfigConfig);\r\n }\r\n }\r\n\r\n }\r\n\r\n public buttonClicked(id?: string): void {\r\n this.floatingButtonClickEvent.emit(id || '');\r\n }\r\n\r\n}\r\n","@if (floatingButtonConfig(); as config) {\r\n @if (config.enable && (!config.autoHide || !onTop())) {\r\n <button\r\n mat-fab\r\n color=\"accent\"\r\n class=\"lf-floating-button lf-transitions\"\r\n [ngClass]=\"config.cssClass + ' ' + config.horizontalPosition\"\r\n [class.sticky]=\"config.sticky\"\r\n [class.show-navbar]=\"isMobile() && navbarEnabled() && !bottomBarEnabled()\"\r\n [class.show-bottom-bar]=\"bottomBarEnabled() && !(isMobile() && navbarEnabled())\"\r\n [class.show-navbar-and-bottom-bar]=\"isMobile() && navbarEnabled() && bottomBarEnabled()\"\r\n [class.show-drawer]=\"!isMobile() && drawerEnabled()\"\r\n [extended]=\"!!config.label\"\r\n [disabled]=\"config.disabled\"\r\n (click)=\"buttonClicked(config.id)\"\r\n [matTooltip]=\"config.tooltip!\">\r\n <!-- icon -->\r\n @if (config.matIcon) {\r\n <mat-icon>\r\n {{ config.matIcon }}\r\n </mat-icon>\r\n } @else if (config.svgIcon) {\r\n <mat-icon [svgIcon]=\"config.svgIcon\"></mat-icon>\r\n }\r\n <!-- svg icon -->\r\n <!-- label -->\r\n @if (config.label) {\r\n <span class=\"lf-floating-button-label\">\r\n {{ config.label }}\r\n </span>\r\n }\r\n </button>\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FooterConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n RouterModule,\n MatCardModule,\n MatIconModule,\n NgClass\n]\r\n})\r\nexport class FooterComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly footerConfig = input<FooterConfig | null>(null);\r\n\r\n}\r\n","@if (footerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-card class=\"lf-footer lf-transitions mat-elevation-z2 p-4\" [ngClass]=\"config.cssClass\">\r\n <!-- svg logo -->\r\n @if (config.svgLogo) {\r\n <mat-icon\r\n class=\"lf-footer-logo mb-4\"\r\n color=\"primary\"\r\n [svgIcon]=\"config.svgLogo!\"></mat-icon>\r\n } @else {\r\n @if (config.imgLogo) {\r\n <img class=\"lf-footer-logo mb-4\" [src]=\"config.imgLogo\" alt=\"Logo\" />\r\n }\r\n }\r\n <!-- img logo -->\r\n <!-- links -->\r\n @if (config.links) {\r\n <div class=\"lf-footer-links mb-4\">\r\n @for (link of config.links; track $index; let i = $index) {\r\n <div class=\"lf-footer-link\" [class.mr-2]=\"i < config.links!.length - 1\">\r\n @if (link.routerLink) {\r\n <a [routerLink]=\"[link.routerLink]\">{{ link.label || \"\" }}</a>\r\n } @else {\r\n <a [href]=\"link.href\" [target]=\"link.externalTab ? '_blank' : null\">\r\n {{ link.label }}\r\n </a>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n <!-- copyright -->\r\n @if (config.copyright) {\r\n <span class=\"lf-footer-copyright\">\r\n {{ config.copyright }}\r\n </span>\r\n }\r\n </mat-card>\r\n }\r\n}\r\n","\r\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, computed, effect, inject, input, model, output, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { HeaderInputConfig } from '../../../models';\r\n\r\n@Component({\r\n selector: 'lf-input',\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule\n]\r\n})\r\nexport class InputComponent implements OnDestroy {\r\n\r\n private dialogRef = inject<MatDialogRef<InputComponent>>(MatDialogRef, { optional: true });\r\n private inputConfigDialog = inject<HeaderInputConfig>(MAT_DIALOG_DATA, { optional: true });\r\n\r\n\r\n public readonly input = viewChild<ElementRef>('input');\r\n\r\n public readonly inputConfig = input<HeaderInputConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n\r\n public readonly inputSubmitEvent = output<string>();\r\n public readonly inputChangeEvent = output<string>();\r\n public readonly inputPrefixActionEvent = output<void>();\r\n\r\n public inputConfigComputed = computed<HeaderInputConfig>(() => this.inputConfigDialog ?? this.inputConfig() ?? {})\r\n\r\n public inputValue = model<string>('');\r\n\r\n\r\n constructor() {\r\n effect(() => {\r\n const input = this.input();\r\n if (input && this.inputConfigComputed().autoFocus) {\r\n input.nativeElement.focus();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.inputValue.set('');\r\n this.inputChangeEvent.emit(this.inputValue());\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n this.inputSubmitEvent.emit(value);\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close(value);\r\n }\r\n }\r\n\r\n public inputChanged(value: string): void {\r\n this.inputChangeEvent.emit(value);\r\n }\r\n\r\n public inputPrefixAction(): void {\r\n this.inputPrefixActionEvent.emit();\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n public clearInput(): void {\r\n this.inputValue.set('');\r\n this.inputChangeEvent.emit(this.inputValue());\r\n }\r\n}\r\n","@if (inputConfigComputed(); as config) {\r\n @if (config) {\r\n <mat-form-field class=\"lf-input\" appearance=\"fill\" [class.lf-hide-hint]=\"!config.hint\">\r\n <mat-label>{{ config.label || \"Search\" }}</mat-label>\r\n @if (config.hint) {\r\n <mat-hint>{{ config.hint }}</mat-hint>\r\n }\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n [disabled]=\"config.disabled!\"\r\n (keyup.enter)=\"inputSubmitted(inputValue())\"\r\n (ngModelChange)=\"inputChanged($event)\"\r\n #input />\r\n @if (isMobile()) {\r\n <button mat-icon-button matPrefix color=\"accent\" (click)=\"inputPrefixAction()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n @if (inputValue()) {\r\n <button class=\"lf-input-close-button\" mat-icon-button matSuffix (click)=\"clearInput()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (config.matIconSubmit) {\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n color=\"accent\"\r\n type=\"submit\"\r\n (click)=\"inputSubmitted(inputValue())\">\r\n <mat-icon>\r\n {{ config.matIconSubmit }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n}\r\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { RouterModule } from '@angular/router';\r\nimport { HeaderConfig, MenuButton, ScaffoldLibraryConfig } from '../../models';\r\nimport { InputComponent } from '../../shared/components/input/input.component';\r\n\r\n@Component({\r\n selector: 'lf-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n RouterModule,\r\n MatToolbarModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n NgClass,\r\n NgTemplateOutlet,\r\n InputComponent\r\n]\r\n})\r\nexport class HeaderComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly headerConfig = input<HeaderConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly routeLoading = input<boolean>(false);\r\n public readonly currentRoute = input<string>();\r\n\r\n public readonly headerConfigUpdateEvent = output<Partial<HeaderConfig>>();\r\n public readonly headerButtonClickEvent = output<string>();\r\n public readonly headerInputSubmitEvent = output<string>();\r\n public readonly headerInputChangeEvent = output<string>();\r\n\r\n public isActive = computed(() => {\r\n const currentRoute = this.currentRoute();\r\n const route: string = currentRoute?.substring(currentRoute.indexOf('/') + 1) || '';\r\n return (id: string): boolean => !!route && !!id && route === id;\r\n });\r\n\r\n\r\n public rightMobileButton = computed<MenuButton | null>(() => {\r\n const headerConfig = this.headerConfig();\r\n const rightMenuButtons = headerConfig?.rightMenuButtons ?? [];\r\n\r\n if (!rightMenuButtons.length) return null;\r\n\r\n const config = headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n const includedButtons = rightMenuButtons.filter(\r\n button => !config.excludeButtonIds?.includes(button.id)\r\n );\r\n\r\n return {\r\n id: '',\r\n matIcon:\r\n !config.matIcon && !config.svgIcon && !config.label\r\n ? 'more_vert'\r\n : config.matIcon,\r\n svgIcon: config.svgIcon,\r\n label: config.label,\r\n menuButtons: includedButtons\r\n };\r\n });\r\n\r\n public rightExcludedButtons = computed<MenuButton[] | null>(() => {\r\n const headerConfig = this.headerConfig();\r\n const rightMenuButtons = headerConfig?.rightMenuButtons ?? [];\r\n\r\n if (!rightMenuButtons.length) return null;\r\n\r\n const config = headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n return rightMenuButtons.filter(button =>\r\n config.excludeButtonIds?.includes(button.id)\r\n );\r\n });\r\n\r\n\r\n public buttonClicked(id?: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public inputChanged(value: string): void {\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n public inputClosed(): void {\r\n this.headerConfigUpdateEvent.emit({ inputConfig: { enable: false } });\r\n }\r\n \r\n}\r\n","@if (headerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-toolbar\r\n class=\"lf-header lf-transitions mat-elevation-z3\"\r\n [class.px-4]=\"!isMobile()\"\r\n [class.px-1]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\"\r\n [class.lf-gradient]=\"config.gradient\"\r\n color=\"primary\">\r\n <!-- left menu button -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: config.leftMenuButton!,\r\n hideLabel: true,\r\n }\"></ng-container>\r\n <!-- logo & title -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper ml-1 mr-2\"\r\n [class.ml-10]=\"config.leftMenuButton && !isMobile()\">\r\n <!-- link wrapper -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper-link\"\r\n [class.lf-clickable]=\"config.titleRouterLink\"\r\n [routerLink]=\"config.titleRouterLink ? [config.titleRouterLink] : null\">\r\n <!-- svg logo -->\r\n @if (config.svgLogo) {\r\n <mat-icon\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"config.title\"\r\n [svgIcon]=\"config.svgLogo!\"></mat-icon>\r\n <!-- img logo -->\r\n } @else {\r\n @if (config.imgLogo) {\r\n <img\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"config.title\"\r\n [src]=\"config.imgLogo\"\r\n alt=\"Logo\" />\r\n }\r\n }\r\n <!-- title -->\r\n @if (config.title) {\r\n <div class=\"lf-header-title-wrapper\">\r\n @if (config.title) {\r\n <span class=\"lf-header-title\">\r\n {{ config.title }}\r\n </span>\r\n }\r\n @if (config.subtitle) {\r\n <span class=\"lf-header-subtitle\">\r\n {{ config.subtitle }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- input -->\r\n @if (config.inputConfig?.enable) {\r\n <div class=\"spacer\"></div>\r\n <lf-input\r\n [class.lf-header-input-mobile]=\"isMobile()\"\r\n [class.mx-3]=\"!isMobile()\"\r\n [inputConfig]=\"config.inputConfig!\"\r\n [isMobile]=\"isMobile()\"\r\n (inputSubmitEvent)=\"inputSubmitted($event)\"\r\n (inputChangeEvent)=\"inputChanged($event)\"\r\n (inputPrefixActionEvent)=\"inputClosed()\"></lf-input>\r\n }\r\n <!-- spacer -->\r\n <div class=\"spacer\"></div>\r\n <!-- right menu buttons -->\r\n @if (config.responsiveConfig?.enable && isMobile()) {\r\n @let exludedButtons = rightExcludedButtons();\r\n @for (button of exludedButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n @let mobileButton = rightMobileButton();\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: mobileButton,\r\n }\"></ng-container>\r\n } @else {\r\n @for (button of config.rightMenuButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n }\r\n </mat-toolbar>\r\n <!-- loading bar -->\r\n @if (config.loading || (config.showRouteLoading && routeLoading())) {\r\n <mat-progress-bar\r\n class=\"lf-header-progress-bar\"\r\n color=\"accent\"\r\n mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n }\r\n}\r\n\r\n<!-- header menu button -->\r\n<ng-template #menuButtonTemplate let-menuButton=\"menuButton\" let-hideLabel=\"hideLabel\">\r\n @if (menuButton) {\r\n <!-- label button -->\r\n @if (menuButton.label && !hideLabel) {\r\n <button\r\n mat-button\r\n class=\"lf-header-menu-button\"\r\n [class.lf-header-menu-button-active]=\"isActive()(menuButton.id) && !menuButton.disabled\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n [disabled]=\"menuButton.disabled\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [aria-label]=\"menuButton.label || menuButton.tooltip\"\r\n [matTooltip]=\"menuButton.tooltip\">\r\n <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon>\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ menuButton.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else if (menuButton.matIcon || menuButton.svgIcon) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-header-menu-button\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n [disabled]=\"menuButton.disabled\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [aria-label]=\"menuButton.id || menuButton.tooltip\">\r\n <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon>\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n <!-- img button -->\r\n } @else if (menuButton.imgIcon) {\r\n <img\r\n class=\"lf-header-menu-img px-1\"\r\n [src]=\"menuButton.imgIcon\"\r\n width=\"48\"\r\n height=\"48\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [aria-label]=\"menuButton.id || menuButton.tooltip\" />\r\n }\r\n <!-- menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <!-- label menu buttons -->\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- menu button -->\r\n @if (button.label) {\r\n <button\r\n mat-menu-item\r\n [class.lf-header-menu-button-active]=\"isActive()(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.label\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <span>{{ button.label }}</span>\r\n </button>\r\n }\r\n }\r\n <!-- icon menu buttons -->\r\n <div mat-menu-item class=\"lf-menu-icons px-1\" [disableRipple]=\"true\">\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- icon button -->\r\n @if (!button.label && (button.matIcon || button.svgIcon)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-menu-icon-button\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n tabindex=\"0\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n</ng-template>\r\n","import { ComponentPortal, PortalModule } from '@angular/cdk/portal';\r\nimport { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, OnInit, signal } from '@angular/core';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\nimport { LoadingOverlayConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { CONFIG } from '../../scaffold.config';\r\nimport { ScaffoldService } from '../../services';\r\n\r\n@Component({\r\n selector: 'lf-loading-overlay',\r\n templateUrl: './loading-overlay.component.html',\r\n styleUrls: ['./loading-overlay.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n PortalModule,\n MatProgressSpinner,\n NgClass\n]\r\n})\r\nexport class LoadingOverlayComponent implements OnInit {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n\r\n\r\n public loadingOverlayConfig = signal<LoadingOverlayConfig | null>(null);\r\n public portal = signal<ComponentPortal<any> | null>(null);\r\n\r\n\r\n ngOnInit(): void {\r\n this.loadingOverlayConfig.set(this.scaffoldService.scaffoldConfig?.loadingOverlayConfig || null);\r\n\r\n const customComponent = this.loadingOverlayConfig()?.customComponent || null;\r\n if (customComponent) {\r\n this.portal.set(new ComponentPortal(customComponent));\r\n }\r\n }\r\n}\r\n","@if (portal(); as portal) {\r\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\r\n} @else {\r\n <div\r\n [ngClass]=\"loadingOverlayConfig()?.cssClass\"\r\n [class.lf-gradient-spinner]=\"loadingOverlayConfig()?.gradient\">\r\n <mat-progress-spinner mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NavbarConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-navbar',\r\n templateUrl: './navbar.component.html',\r\n styleUrls: ['./navbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatIconModule,\r\n MatTooltipModule,\r\n NgClass\r\n]\r\n})\r\nexport class NavbarComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly navbarConfig = input<NavbarConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly currentRoute = input<string>();\r\n\r\n public readonly navbarButtonClickEvent = output<string>();\r\n\r\n public isActive = computed(() => {\r\n const currentRoute = this.currentRoute();\r\n const route: string = currentRoute?.substring(currentRoute.indexOf('/') + 1) || '';\r\n return (id: string): boolean => !!route && !!id && route === id;\r\n });\r\n\r\n\r\n public buttonClicked(id: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n}\r\n","@if (navbarConfig(); as config) {\r\n @if (config.enable) {\r\n <div\r\n [animate.enter]=\"isMobile() ? 'lf-anim-slide-up-enter' : 'lf-anim-slide-left-enter'\"\r\n [animate.leave]=\"isMobile() ? 'lf-anim-slide-up-leave' : 'lf-anim-slide-left-leave'\"\r\n class=\"mat-app-background lf-transitions mat-elevation-z3\"\r\n [class.lf-navbar]=\"!isMobile()\"\r\n [class.lf-navbar-mobile]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\">\r\n <!-- items -->\r\n <div [class.lf-navbar-items]=\"!isMobile()\" [class.lf-navbar-mobile-items]=\"isMobile()\">\r\n <!-- item -->\r\n @for (button of config.buttons; track button.id; let i = $index) {\r\n @if (i < 5) {\r\n <div\r\n class=\"lf-navbar-item\"\r\n [class.lf-navbar-item-active]=\"isActive()(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <!-- show a protected space on desktop so the icon doesn't move up and down -->\r\n @if (button?.label) {\r\n <span class=\"lf-navbar-item-label\">\r\n {{\r\n isActive()(button.id) || config.showAllLabels\r\n ? button.label\r\n : isMobile()\r\n ? \"\"\r\n : \" \"\r\n }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n}\r\n","import { Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, DOCUMENT, ElementRef, inject, OnDestroy, OnInit, output, signal, viewChild } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { debounceTime, distinctUntilChanged, fromEvent, map, Subscription, tap } from 'rxjs';\r\nimport { BottomBarConfig, ContentTitleCardConfig, DrawerConfig, FloatingButtonConfig, FooterConfig, HeaderConfig, NavbarConfig, ScaffoldConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { CONFIG } from '../../scaffold.config';\r\nimport { BreakpointService, Logger, OverlayService, RouterService, ScaffoldService } from '../../services';\r\nimport { BottomBarComponent } from '../bottom-bar/bottom-bar.component';\r\nimport { ContentTitleCardComponent } from '../content-title-card/content-title-card.component';\r\nimport { DrawerComponent } from '../drawer/drawer.component';\r\nimport { FloatingButtonComponent } from '../floating-button/floating-button.component';\r\nimport { FooterComponent } from '../footer/footer.component';\r\nimport { HeaderComponent } from '../header/header.component';\r\nimport { LoadingOverlayComponent } from '../loading-overlay/loading-overlay.component';\r\nimport { NavbarComponent } from '../navbar/navbar.component';\r\n\r\n@Component({\r\n selector: 'lf-scaffold',\r\n templateUrl: './scaffold.component.html',\r\n styleUrls: ['./scaffold.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n NgClass,\r\n HeaderComponent,\r\n NavbarComponent,\r\n DrawerComponent,\r\n FooterComponent,\r\n ContentTitleCardComponent,\r\n FloatingButtonComponent,\r\n BottomBarComponent\r\n]\r\n})\r\nexport class ScaffoldComponent implements OnInit, OnDestroy {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n private breakpointService = inject(BreakpointService);\r\n private routerService = inject(RouterService);\r\n private overlayService = inject(OverlayService)\r\n private route = inject(ActivatedRoute);\r\n private document = inject<Document>(DOCUMENT);\r\n private logger = inject(Logger);\r\n\r\n\r\n public readonly scrollContainer = viewChild<ElementRef>('scrollContainer');\r\n public readonly content = viewChild<ElementRef>('content');\r\n\r\n public readonly headerButtonClickEvent = output<string>();\r\n public readonly headerInputSubmitEvent = output<string>();\r\n public readonly headerInputChangeEvent = output<string>();\r\n public readonly navbarButtonClickEvent = output<string>();\r\n public readonly floatingButtonClickEvent = output<string>();\r\n public readonly bottomBarButtonClickEvent = output<string>();\r\n\r\n public scaffoldConfig = signal<ScaffoldConfig | null>(null);\r\n public headerConfig = signal<HeaderConfig | null>(null);\r\n public navbarConfig = signal<NavbarConfig | null>(null);\r\n public drawerConfig = signal<DrawerConfig | null>(null);\r\n public drawerPortal = toSignal<ComponentPortal<unknown> | TemplatePortal<unknown> | null>(this.scaffoldService.drawerPortal$);\r\n public footerConfig = signal<FooterConfig | null>(null);\r\n public contentTitleCardConfig = signal<ContentTitleCardConfig | null>(null);\r\n public floatingButtonConfig = signal<FloatingButtonConfig | null>(null);\r\n public bottomBarConfig = signal<BottomBarConfig | null>(null);\r\n\r\n public routeHistory = toSignal<string[]>(this.routerService.routeHistory$.pipe(tap((routeHistory: string[]) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteHistory]', routeHistory);\r\n const scrollContainer = this.scrollContainer();\r\n if (scrollContainer && this.scaffoldConfig()?.scrollPositionRestoration) {\r\n scrollContainer.nativeElement.scrollTop = 0;\r\n }\r\n })));\r\n public currentRoute = toSignal<string>(this.routerService.currentRoute$);\r\n public routeLoading = toSignal<boolean>(this.routerService.loading$);\r\n public isMobile = toSignal<boolean>(this.breakpointService.breakpoint$.pipe(map((breakpointState: BreakpointState) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[BreakpointState]', breakpointState);\r\n return breakpointState.breakpoints[Breakpoints.XSmall] || breakpointState.breakpoints[Breakpoints.Small];\r\n })));\r\n\r\n public scrollTopPosition = signal<number>(0);\r\n\r\n public initialized = signal<boolean>(false);\r\n\r\n private _subscription: Subscription = new Subscription;\r\n\r\n\r\n ngOnInit(): void {\r\n // Listen for config changes\r\n this._subscription.add(this.scaffoldService.scaffoldConfig$.subscribe((scaffoldConfig: ScaffoldConfig) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[ScaffoldConfig]', scaffoldConfig);\r\n\r\n if (scaffoldConfig) {\r\n this.toggleLoadingOverlay(scaffoldConfig?.loading || false);\r\n\r\n this.scaffoldConfig.set(scaffoldConfig);\r\n this.headerConfig.set(scaffoldConfig.headerConfig || null);\r\n this.navbarConfig.set(scaffoldConfig.navbarConfig || null);\r\n this.drawerConfig.set(scaffoldConfig.drawerConfig || null);\r\n this.footerConfig.set(scaffoldConfig.footerConfig || null);\r\n this.contentTitleCardConfig.set(scaffoldConfig.contentTitleCardConfig || null);\r\n this.floatingButtonConfig.set(scaffoldConfig.floatingButtonConfig || null);\r\n this.bottomBarConfig.set(scaffoldConfig.bottomBarConfig || null);\r\n }\r\n }));\r\n\r\n // Listen to scroll events\r\n const scrollContainer = this.scrollContainer();\r\n if (scrollContainer) {\r\n const element: HTMLElement = scrollContainer.nativeElement;\r\n\r\n this._subscription.add(fromEvent(element, 'scroll').pipe(\r\n distinctUntilChanged(),\r\n debounceTime(100)\r\n ).subscribe((e: Event) => {\r\n const target: HTMLElement = e.target as HTMLElement;\r\n this.scrollTopPosition.set(target.scrollTop);\r\n }));\r\n }\r\n\r\n // Listen for fragments in the current route\r\n if (this.scaffoldConfig()?.anchorScrolling) {\r\n this._subscription.add(this.route.fragment.subscribe((fragment: string | null) => {\r\n if (fragment) {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteFragment]', fragment);\r\n setTimeout(() => {\r\n const element = this.document.querySelector(`#${fragment}`);\r\n if (element) {\r\n element.scrollIntoView({ behavior: 'auto', block: 'start', inline: 'nearest' });\r\n }\r\n }, 100);\r\n }\r\n }));\r\n }\r\n\r\n setTimeout(() => { this.initialized.set(true); });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._subscription) {\r\n this._subscription.unsubscribe();\r\n }\r\n }\r\n\r\n\r\n // Header\r\n public headerConfigUpdated(headerConfig: Partial<HeaderConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('headerConfig', headerConfig);\r\n }\r\n\r\n public headerButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public headerInputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public headerInputChanged(value: string): void {\r\n this.scaffoldService.headerInputChangeValue = value;\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n // Navbar\r\n public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Drawer\r\n public drawerConfigUpdated(drawerConfig: Partial<DrawerConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('drawerConfig', drawerConfig);\r\n }\r\n\r\n // Content title card\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n // Floating button\r\n public floatingButtonConfigUpdated(floatingButtonConfig: Partial<FloatingButtonConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('floatingButtonConfig', floatingButtonConfig);\r\n }\r\n\r\n public floatingButtonClicked(id: string): void {\r\n const scrollContainer = this.scrollContainer();\r\n if (!id && scrollContainer) {\r\n scrollContainer.nativeElement.scrollTop = 0;\r\n } else {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.floatingButtonClickEvent.emit(id);\r\n }\r\n }\r\n\r\n // Bottom bar\r\n public bottomBarCloseClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n public bottomBarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n\r\n // Loading overlay\r\n private async toggleLoadingOverlay(loading: boolean): Promise<void> {\r\n if (loading) {\r\n this.overlayService.open(LoadingOverlayComponent);\r\n } else {\r\n this.overlayService.close();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"lf-scaffold lf-transitions mat-app-background mat-typography\"\r\n [ngClass]=\"scaffoldConfig()?.cssClass\">\r\n <!-- header -->\r\n <lf-header\r\n [libraryConfig]=\"libraryConfig\"\r\n [headerConfig]=\"headerConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [routeLoading]=\"routeLoading()!\"\r\n [currentRoute]=\"currentRoute()\"\r\n (headerConfigUpdateEvent)=\"headerConfigUpdated($event)\"\r\n (headerButtonClickEvent)=\"headerButtonClicked($event)\"\r\n (headerInputSubmitEvent)=\"headerInputSubmitted($event)\"\r\n (headerInputChangeEvent)=\"headerInputChanged($event)\"></lf-header>\r\n <!-- navbar -->\r\n <lf-navbar\r\n [libraryConfig]=\"libraryConfig\"\r\n [navbarConfig]=\"navbarConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [currentRoute]=\"currentRoute()\"\r\n (navbarButtonClickEvent)=\"navbarButtonClicked($event)\"></lf-navbar>\r\n <!-- content wrapper -->\r\n <div\r\n class=\"lf-content-wrapper\"\r\n [class.lf-show-navbar]=\"navbarConfig()?.enable && !isMobile()\"\r\n [class.lf-show-header]=\"headerConfig()?.enable && !(navbarConfig()?.enable && isMobile())\"\r\n [class.lf-show-navbar-mobile]=\"navbarConfig()?.enable && isMobile() && !headerConfig()?.enable\"\r\n [class.lf-show-header-and-navbar-mobile]=\"\r\n headerConfig()?.enable && navbarConfig()?.enable && isMobile()\r\n \"\r\n [class.lf-transitions]=\"initialized()\"\r\n #scrollContainer\r\n cdkScrollable>\r\n <!-- drawer -->\r\n <lf-drawer\r\n [libraryConfig]=\"libraryConfig\"\r\n [drawerConfig]=\"drawerConfig()\"\r\n [drawerPortal]=\"drawerPortal()\"\r\n [isMobile]=\"isMobile()!\"\r\n [headerEnabled]=\"headerConfig()?.enable!\"\r\n (drawerConfigUpdateEvent)=\"drawerConfigUpdated($event)\">\r\n <!-- drawer content -->\r\n <ng-content select=\"[drawerContent]\" drawerContent></ng-content>\r\n <!-- content title card -->\r\n <lf-content-title-card\r\n [libraryConfig]=\"libraryConfig\"\r\n [contentTitleCardConfig]=\"contentTitleCardConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [routeHistory]=\"routeHistory()!\"\r\n (backButtonClickEvent)=\"backButtonClicked()\"></lf-content-title-card>\r\n <!-- main content -->\r\n <div\r\n class=\"lf-content\"\r\n [class.lf-content-mobile]=\"isMobile()\"\r\n [class.lf-show-footer]=\"footerConfig()?.enable\"\r\n #content>\r\n <ng-content></ng-content>\r\n <!-- to top button -->\r\n <lf-floating-button\r\n [libraryConfig]=\"libraryConfig\"\r\n [floatingButtonConfig]=\"floatingButtonConfig()\"\r\n [onTop]=\"scrollTopPosition() <= 0\"\r\n [isMobile]=\"isMobile()!\"\r\n [drawerEnabled]=\"drawerConfig()?.enable! && drawerConfig()?.open!\"\r\n [navbarEnabled]=\"navbarConfig()?.enable!\"\r\n [bottomBarEnabled]=\"bottomBarConfig()?.enable!\"\r\n (floatingButtonConfigUpdateEvent)=\"floatingButtonConfigUpdated($event)\"\r\n (floatingButtonClickEvent)=\"floatingButtonClicked($event)\"></lf-floating-button>\r\n </div>\r\n <!-- footer -->\r\n <lf-footer [libraryConfig]=\"libraryConfig\" [footerConfig]=\"footerConfig()\"></lf-footer>\r\n </lf-drawer>\r\n </div>\r\n <!-- bottom bar -->\r\n <lf-bottom-bar\r\n [libraryConfig]=\"libraryConfig\"\r\n [bottomBarConfig]=\"bottomBarConfig()\"\r\n [isMobile]=\"isMobile()! && navbarConfig()?.enable!\"\r\n [navbarEnabled]=\"navbarConfig()?.enable!\"\r\n (bottomBarCloseClickEvent)=\"bottomBarCloseClicked($event)\"\r\n (bottomBarButtonClickEvent)=\"bottomBarButtonClicked($event)\"></lf-bottom-bar>\r\n</div>\r\n","\r\nimport { ChangeDetectionStrategy, Component, computed, inject, input, linkedSignal, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-color-picker',\r\n templateUrl: './color-picker.component.html',\r\n styleUrls: ['./color-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule\n]\r\n})\r\nexport class ColorPickerComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn' | string>('primary');\r\n public readonly label = input<string>();\r\n public readonly matIcon = input<string>();\r\n public readonly disabled = input<boolean>(false);\r\n public readonly tooltip = input<string>();\r\n\r\n public readonly colorChangeEvent = output<string>();\r\n\r\n public selectedColor = linkedSignal<string>(() => {\r\n const color: 'primary' | 'accent' | 'warn' | string = this.color();\r\n if (color && color !== 'primary' && color !== 'accent' && color !== 'warn') {\r\n return color;\r\n }\r\n\r\n return '';\r\n });\r\n public labelColor = computed<string>(() => {\r\n const hex = this.selectedColor().replace('#', '');\r\n\r\n const r = parseInt(hex.substr(0, 2), 16);\r\n const g = parseInt(hex.substr(2, 2), 16);\r\n const b = parseInt(hex.substr(4, 2), 16);\r\n\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n\r\n return brightness > 128 ? '#000000' : '#ffffff';\r\n });\r\n\r\n\r\n public selectColor(event: string): void {\r\n this.selectedColor.set(event);\r\n this.colorChangeEvent.emit(event);\r\n }\r\n}\r\n","<input\r\n style=\"opacity: 0; position: absolute; width: 0; height: 36px; border: none\"\r\n #colorPicker\r\n type=\"color\"\r\n onclick=\"this.value = null\"\r\n [ngModel]=\"selectedColor()\"\r\n (ngModelChange)=\"selectColor($event)\" />\r\n\r\n<button\r\n mat-flat-button\r\n class=\"lf-button\"\r\n type=\"button\"\r\n [color]=\"selectedColor() ? null : color()\"\r\n [style.background]=\"selectedColor()\"\r\n [style.color]=\"labelColor()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"colorPicker.click()\"\r\n [matTooltip]=\"tooltip()\">\r\n <!-- icon -->\r\n @if (matIcon()) {\r\n <mat-icon>\r\n {{ matIcon() }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n {{ label() }}\r\n</button>\r\n","\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\nimport { Logger } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-file-upload',\r\n templateUrl: './file-upload.component.html',\r\n styleUrls: ['./file-upload.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule\n]\r\n})\r\nexport class FileUploadComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private logger: Logger = inject(Logger);\r\n\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn'>('primary');\r\n public readonly label = input<string>();\r\n public readonly matIcon = input<string>();\r\n // @Input() public loading: boolean;\r\n public readonly disabled = input<boolean>(false);\r\n public readonly accept = input<string>();\r\n public readonly tooltip = input<string>();\r\n\r\n public readonly fileChangeEvent = output<File>();\r\n\r\n\r\n public selectFile(event: Event): void {\r\n const input: HTMLInputElement = event.target as HTMLInputElement;\r\n\r\n if (!input || !input.files) return;\r\n const file: File = input.files[0];\r\n\r\n if (!file) return;\r\n\r\n this.logger.log('[FileUploadComponent]', file);\r\n this.fileChangeEvent.emit(file);\r\n }\r\n}\r\n","<input\r\n hidden\r\n #file\r\n type=\"file\"\r\n [accept]=\"accept()\"\r\n onclick=\"this.value = null\"\r\n (change)=\"selectFile($event)\" />\r\n\r\n<button\r\n mat-flat-button\r\n class=\"lf-button\"\r\n type=\"button\"\r\n [color]=\"color()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"file.click()\"\r\n [matTooltip]=\"tooltip()\">\r\n <!-- icon -->\r\n @if (matIcon()) {\r\n <mat-icon>\r\n {{ matIcon() }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n <!-- } -->\r\n {{ label() }}\r\n <!-- </span> -->\r\n</button>\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemAvatar]'\r\n})\r\nexport class ListItemAvatarDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemButtons]'\r\n})\r\nexport class ListItemButtonsDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemSubtitle]'\r\n})\r\nexport class ListItemSubtitleDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemTitle]'\r\n})\r\nexport class ListItemTitleDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { CdkDragDrop, DragDropModule, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { NgClass, NgTemplateOutlet, KeyValuePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, contentChild, inject, input, model, OnChanges, OnInit, output, signal, SimpleChanges } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ListItemAvatarDirective, ListItemButtonsDirective, ListItemSubtitleDirective, ListItemTitleDirective } from '../../../directives';\r\nimport { Button, ListConfig, ListHeader, ListItem, ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-list',\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n FormsModule,\n DragDropModule,\n MatButtonModule,\n MatCheckboxModule,\n MatRippleModule,\n MatIconModule,\n MatTooltipModule,\n MatDividerModule,\n KeyValuePipe,\n NgClass,\n NgTemplateOutlet\n]\r\n})\r\nexport class ListComponent implements OnInit, OnChanges {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n public readonly avatarTemplate = contentChild(ListItemAvatarDirective);\r\n public readonly titleTemplate = contentChild(ListItemTitleDirective);\r\n public readonly subtitleTemplate = contentChild(ListItemSubtitleDirective);\r\n public readonly buttonsTemplate = contentChild(ListItemButtonsDirective);\r\n\r\n public readonly config = input<ListConfig | null>(null);\r\n public readonly header = input<ListHeader | null>(null);\r\n public readonly items = input<ListItem[]>([]);\r\n public readonly groupedItems = input<Map<string, ListItem[]>>(new Map());\r\n public readonly buttons = input<Button[]>([]);\r\n\r\n public readonly dropListId = input<string>();\r\n public readonly connectedDropListIds = input<string[]>();\r\n\r\n public readonly sortChangeEvent = output<{\r\n sortToken: string;\r\n sortAsc: boolean;\r\n}>();\r\n public readonly selectionChangeEvent = output<ListItem[]>();\r\n public readonly itemClickEvent = output<ListItem>();\r\n public readonly itemDropEvent = output<{\r\n items: ListItem[];\r\n id: string;\r\n}>();\r\n public readonly buttonClickEvent = output<{\r\n buttonId: string;\r\n item: ListItem;\r\n}>();\r\n\r\n\r\n public sortToken = signal<string>('');\r\n public sortAsc = signal<boolean>(true);\r\n public allSelected = model<boolean>(false);\r\n\r\n get someSelected(): boolean {\r\n return this.items().length > 0 && this.items().some((item: ListItem) => item.checked) && !this.allSelected();\r\n }\r\n\r\n get hasAvatars(): boolean {\r\n return !!this.items()?.some((item: ListItem) => (item.avatar || item.matIcon || item.svgIcon));\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n const config = this.config();\r\n if (config) {\r\n this.sortToken.set(config.initialSortToken || '');\r\n this.sortAsc.set(config.initialSortAsc || false);\r\n this.updateSortToken(this.sortToken(), true);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['items']) {\r\n this.allSelected.set(this.items().length > 0 && this.items().every((item: ListItem) => item.checked));\r\n }\r\n }\r\n\r\n\r\n // Update the sort token\r\n public updateSortToken(sortToken: string | undefined, initial?: boolean): void {\r\n if (!sortToken) return;\r\n if (this.sortToken() === sortToken && !initial) this.sortAsc.set(!this.sortAsc());\r\n this.sortToken.set(sortToken);\r\n this.sortChangeEvent.emit({ sortToken: this.sortToken(), sortAsc: this.sortAsc() });\r\n }\r\n\r\n // Select all items\r\n public selectAll(event: MatCheckboxChange): void {\r\n this.allSelected.set(event.checked);\r\n\r\n this.items().forEach((item: ListItem) => {\r\n if (!item.disabled) item.checked = this.allSelected();\r\n });\r\n\r\n this.selectionChangeEvent.emit(this.items());\r\n }\r\n\r\n // Select single item\r\n public selectItem(item: ListItem, event: MatCheckboxChange): void {\r\n if (this.config()?.disableMultiselect) this.items().forEach((item: ListItem) => { item.checked = false; });\r\n this.allSelected.set(this.items().length > 0 && this.items().every((item: ListItem) => item.checked));\r\n item.checked = event.checked;\r\n this.selectionChangeEvent.emit([item]);\r\n }\r\n\r\n // Handle item click events\r\n public clickItem(item: ListItem, click: Event): void {\r\n this.stopPropagation(click);\r\n this.itemClickEvent.emit(item)\r\n }\r\n\r\n // Handle item drop events\r\n public dropItem(event: CdkDragDrop<ListItem[]>, id: string): void {\r\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n this.itemDropEvent.emit({ items: event.container.data, id });\r\n }\r\n\r\n // Handle button click events\r\n public clickButton(event: { buttonId: string, item: ListItem }, click: Event): void {\r\n this.stopPropagation(click);\r\n this.buttonClickEvent.emit(event);\r\n }\r\n\r\n // Combine list and item buttons\r\n public getCombinedButtons(item: ListItem): Button[] {\r\n return [...(item.buttons ?? []), ...(this.buttons() ?? [])];\r\n }\r\n\r\n // Handle image errors\r\n public onImageError(event: Event): void {\r\n const target = event.target as HTMLImageElement;\r\n target.src = this.config()?.avatarFallbackPath || '';\r\n }\r\n\r\n // Stop click trough events\r\n public stopPropagation(click: Event): void {\r\n // click.preventDefault();\r\n // click.stopPropagation();\r\n click.stopImmediatePropagation();\r\n }\r\n}\r\n","<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header(); as header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <!-- icon -->\r\n @if (header.matIcon) {\r\n <mat-icon>\r\n {{ header.matIcon }}\r\n </mat-icon>\r\n } @else if (header.svgIcon) {\r\n <mat-icon [svgIcon]=\"header.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken() === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc() ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config()?.enableSelection && !config()?.disableMultiselect) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (config()?.mode === \"group\" && groupedItems()) {\r\n @for (group of groupedItems() | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n @if (group.key) {\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n }\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!config()?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds()!\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"config()?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config()?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId()!\"\r\n cdkDropList\r\n [cdkDropListData]=\"items()\"\r\n [cdkDropListDisabled]=\"!config()?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds()!\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId()!)\"\r\n [class.drop-zone]=\"config()?.enableDragging && items().length <= 0\">\r\n @for (item of items(); track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config()?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n matRipple\r\n [matRippleDisabled]=\"!item.clickable\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (avatarTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"avatarTemplate()!.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <!-- icon -->\r\n @if (item.matIcon) {\r\n <mat-icon>\r\n {{ item.matIcon }}\r\n </mat-icon>\r\n } @else if (item.svgIcon) {\r\n <mat-icon [svgIcon]=\"item.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n @if (titleTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"titleTemplate()!.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.title }}\r\n }\r\n </span>\r\n @if (item.subtitle || subtitleTemplate()) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate()!.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @if (buttonsTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"buttonsTemplate()!.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config()?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n [aria-label]=\"'Drag handle'\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config()?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (config()?.showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n","import { BreakpointState, Breakpoints } from '@angular/cdk/layout';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { map } from 'rxjs';\r\nimport { BreakpointService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-notification',\r\n templateUrl: './notification.component.html',\r\n styleUrls: ['./notification.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatButtonModule,\r\n MatIconModule\r\n ]\r\n})\r\nexport class NotificationComponent {\r\n\r\n private breakpointService = inject(BreakpointService);\r\n\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn'>('primary');\r\n public readonly message = input<string>('');\r\n public readonly link = input<string>('');\r\n public readonly linkText = input<string>('');\r\n public readonly action = input<string>('');\r\n public readonly matIcon = input<string>('');\r\n public readonly svgIcon = input<string>('');\r\n public readonly static = input<boolean>(false);\r\n public readonly minimal = input<boolean>(false);\r\n public readonly cssClass = input<string>('');\r\n\r\n public readonly clickEvent = output();\r\n\r\n public isMobile = toSignal(this.breakpointService.breakpoint$.pipe(map((state: BreakpointState) => state.breakpoints[Breakpoints.XSmall])));\r\n}\r\n","<div\r\n class=\"lf-notification\"\r\n [class.mat-elevation-z2]=\"!static()\"\r\n [class.lf-notification-fixed]=\"!static()\"\r\n [class.lf-notification-static]=\"static()\"\r\n [class.lf-notification-minimal]=\"minimal()\"\r\n [class.lf-mobile]=\"isMobile()\"\r\n [class]=\"[cssClass(), color()]\"\r\n animate.enter=\"lf-anim-scale-enter\">\r\n <div\r\n class=\"lf-notification-content flex-row-nowrap align-center gap-2\"\r\n [class.justify-center]=\"minimal()\"\r\n [class.justify-between]=\"!minimal()\"\r\n [class.flex-col]=\"isMobile()\"\r\n [class.align-start]=\"isMobile()\">\r\n <span class=\"lf-notification-message flex-row-nowrap align-center justify-start gap-4\">\r\n @if (matIcon()) {\r\n <mat-icon class=\"flex-none\" [color]=\"color()\">{{ matIcon() }}</mat-icon>\r\n }\r\n <span [class.ml-1]=\"!matIcon()\">\r\n {{ message() }}\r\n @if (link() && linkText()) {\r\n <a class=\"lf-notification-link\" [href]=\"link()\">{{ linkText() }}</a>\r\n }\r\n </span>\r\n </span>\r\n\r\n @if (action(); as action) {\r\n <button\r\n mat-flat-button\r\n class=\"lf-notification-action\"\r\n [class.align-self-end]=\"isMobile()\"\r\n [color]=\"color()\"\r\n (click)=\"clickEvent.emit()\">\r\n {{ action }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { PlaceholderConfig, ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-placeholder',\r\n templateUrl: './placeholder.component.html',\r\n styleUrls: ['./placeholder.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n NgClass\n]\r\n})\r\nexport class PlaceholderComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n public readonly placeholderConfig = input<PlaceholderConfig>();\r\n\r\n public readonly buttonClickEvent = output<void>();\r\n}\r\n","@if (placeholderConfig(); as config) {\r\n <div class=\"lf-placeholder\" [ngClass]=\"config.cssClass\">\r\n <!-- icon -->\r\n @if (config.matIcon) {\r\n <mat-icon class=\"lf-placeholder-icon\">\r\n {{ config.matIcon }}\r\n </mat-icon>\r\n } @else if (config.svgIcon) {\r\n <mat-icon class=\"lf-placeholder-icon\" [svgIcon]=\"config.svgIcon\"></mat-icon>\r\n } @else if (config.imgIcon) {\r\n <img\r\n class=\"lf-placeholder-image\"\r\n [src]=\"config.imgIcon\"\r\n width=\"96\"\r\n alt=\"Placeholder image\"\r\n loading=\"lazy\" />\r\n }\r\n <!-- heading -->\r\n @if (config.title) {\r\n <p class=\"lf-placeholder-title mt-2\">\r\n {{ config.title }}\r\n </p>\r\n }\r\n <!-- message -->\r\n @if (config.message) {\r\n <p class=\"lf-placeholder-message mt-1\">\r\n {{ config.message }}\r\n </p>\r\n }\r\n <!-- action -->\r\n @if (config.button) {\r\n <button\r\n mat-button\r\n class=\"mt-4\"\r\n color=\"accent\"\r\n [ngClass]=\"config.button.cssClass\"\r\n [disabled]=\"config.button.disabled\"\r\n (click)=\"buttonClickEvent.emit()\"\r\n [matTooltip]=\"config.button.tooltip\">\r\n <!-- icon -->\r\n @if (config.button.matIcon) {\r\n <mat-icon>\r\n {{ config.button.matIcon }}\r\n </mat-icon>\r\n } @else if (config.button.svgIcon) {\r\n <mat-icon [svgIcon]=\"config.button.svgIcon\"></mat-icon>\r\n }\r\n {{ config.button.label }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","/* eslint-disable no-console */\r\nimport {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest\r\n} from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable, finalize } from 'rxjs';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { Logger, ScaffoldService } from '../services';\r\n\r\n@Injectable()\r\nexport class ScaffoldLoadingInterceptor implements HttpInterceptor {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n private logger = inject(Logger);\r\n\r\n private activeRequests = 0;\r\n private loadingDelay = 100; // milliseconds\r\n private spinnerTimeout: ReturnType<typeof setTimeout>;\r\n\r\n public intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n this.activeRequests++;\r\n\r\n // Set a delayed spinner timeout\r\n if (this.activeRequests === 1) {\r\n this.spinnerTimeout = setTimeout(() => {\r\n this.scaffoldService.updateScaffoldProperty('loading', true);\r\n }, this.loadingDelay);\r\n }\r\n\r\n return next.handle(req).pipe(\r\n // tap({\r\n // next: (event) => {\r\n // if (event instanceof HttpResponse) {\r\n // // Successful response\r\n // }\r\n // },\r\n // error: (error: HttpErrorResponse) => {\r\n // // Handle error if needed\r\n // }\r\n // }),\r\n finalize(() => {\r\n this.activeRequests = Math.max(0, this.activeRequests - 1);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[Interceptor] Request finalized: ${req.url}, Active requests now: ${this.activeRequests}`);\r\n\r\n if (this.activeRequests === 0) {\r\n clearTimeout(this.spinnerTimeout);\r\n this.scaffoldService.updateScaffoldProperty('loading', false);\r\n }\r\n })\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of components\r\n */\r\n\r\n/* CONFIG */\r\nexport * from './lib/scaffold.config';\r\n/* MODELS */\r\nexport * from './lib/models';\r\n/* COMPONENTS */\r\nexport * from './lib/components/scaffold/scaffold.component';\r\nexport * from './lib/shared/components/color-picker/color-picker.component';\r\nexport * from './lib/shared/components/file-upload/file-upload.component';\r\nexport * from './lib/shared/components/list/list.component';\r\nexport * from './lib/shared/components/notification/notification.component';\r\nexport * from './lib/shared/components/placeholder/placeholder.component';\r\n/* DIRECTIVES */\r\nexport * from './lib/directives';\r\n/* SERVICES */\r\nexport * from './lib/services';\r\n/* INTERCEPTORS */\r\nexport * from './lib/interceptors/loading.interceptor';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i4","i5","i6","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lukfel-ng-scaffold.mjs","sources":["../../../projects/ng-scaffold/src/lib/scaffold.config.ts","../../../projects/ng-scaffold/src/lib/services/breakpoint.service.ts","../../../projects/ng-scaffold/src/lib/services/dialog.service.ts","../../../projects/ng-scaffold/src/lib/services/logger.service.ts","../../../projects/ng-scaffold/src/lib/services/local-storage.service.ts","../../../projects/ng-scaffold/src/lib/services/overlay.service.ts","../../../projects/ng-scaffold/src/lib/services/router.service.ts","../../../projects/ng-scaffold/src/lib/services/scaffold.service.ts","../../../projects/ng-scaffold/src/lib/services/seo.service.ts","../../../projects/ng-scaffold/src/lib/services/snackbar.service.ts","../../../projects/ng-scaffold/src/lib/services/theme.service.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.html","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.ts","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.html","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.ts","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.html","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.ts","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.html","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.ts","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.html","../../../projects/ng-scaffold/src/lib/shared/components/input/input.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/input/input.component.html","../../../projects/ng-scaffold/src/lib/components/header/header.component.ts","../../../projects/ng-scaffold/src/lib/components/header/header.component.html","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.ts","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.html","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.ts","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.html","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.ts","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.html","../../../projects/ng-scaffold/src/lib/shared/components/color-picker/color-picker.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/color-picker/color-picker.component.html","../../../projects/ng-scaffold/src/lib/shared/components/file-upload/file-upload.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/file-upload/file-upload.component.html","../../../projects/ng-scaffold/src/lib/directives/list/list-item-avatar.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-buttons.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-subtitle.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-title.directive.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.html","../../../projects/ng-scaffold/src/lib/shared/components/notification/notification.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/notification/notification.component.html","../../../projects/ng-scaffold/src/lib/shared/components/placeholder/placeholder.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/placeholder/placeholder.component.html","../../../projects/ng-scaffold/src/lib/interceptors/loading.interceptor.ts","../../../projects/ng-scaffold/src/public-api.ts","../../../projects/ng-scaffold/src/lukfel-ng-scaffold.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from './models';\r\n\r\nexport const CONFIG = new InjectionToken<ScaffoldLibraryConfig>('config');\r\n\r\nexport function provideScaffold(config: ScaffoldLibraryConfig = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n { provide: CONFIG, useValue: config }\r\n ]);\r\n}","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { distinctUntilChanged } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BreakpointService {\r\n \r\n private breakpointObserver = inject(BreakpointObserver);\r\n\r\n\r\n public readonly breakpoint$ = this.breakpointObserver\r\n .observe([Breakpoints.Large, Breakpoints.Medium, Breakpoints.Small, Breakpoints.XSmall])\r\n .pipe(distinctUntilChanged());\r\n\r\n}\r\n","import { Injectable, Type, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfirmDialogConfig, HeaderInputConfig } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n private matDialog = inject(MatDialog);\r\n\r\n\r\n /**\r\n * Opens a simple pre-made confirm dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous boolean response\r\n */\r\n public async openConfirmDialog(config: ConfirmDialogConfig): Promise<boolean> {\r\n const { ConfirmDialogComponent } = await import('../shared/components/dialogs/confirm-dialog/confirm-dialog.component');\r\n\r\n const dialogRef = this.matDialog.open(ConfirmDialogComponent, {\r\n autoFocus: false,\r\n maxWidth: '368px',\r\n data: config\r\n });\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a dialog with custom template and custom config\r\n *\r\n * @param templateRef reference to the component or template\r\n * @param config of the dialog\r\n * @returns an asynchronous any response\r\n */\r\n public openCustomDialog<T>(templateRef: Type<T>, config: MatDialogConfig): Promise<any> { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n const dialogRef = this.matDialog.open(templateRef, config);\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a simple pre-made input dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous string response\r\n */\r\n public async openInputDialog(config: HeaderInputConfig): Promise<string | undefined> {\r\n const { InputComponent } = await import('../shared/components/input/input.component');\r\n\r\n const dialogRef = this.matDialog.open(InputComponent, {\r\n autoFocus: false,\r\n width: '100vw',\r\n data: config,\r\n panelClass: 'lf-input-dialog'\r\n });\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Logger {\r\n\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n /**\r\n * Uses the regular console log but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n * \r\n * @param message message of the log\r\n * @param args arguments of the log\r\n */\r\n public log(message: string, ...args: any[]): void { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (this.libraryConfig?.production === false) {\r\n console.log(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n /**\r\n * Uses the regular console warn but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n * \r\n * @param message message of the warn\r\n * @param args arguments of the warn\r\n */\r\n public warn(message: string, ...args: any[]): void { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (this.libraryConfig?.production === false) {\r\n console.warn(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n /**\r\n * Uses the regular console error but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n * \r\n * @param message message of the error\r\n * @param args arguments of the error\r\n */\r\n public error(message: string, ...args: any[]): void { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (this.libraryConfig?.production === false) {\r\n console.error(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private platformId = inject(PLATFORM_ID);\r\n private logger = inject(Logger);\r\n\r\n\r\n /**\r\n * Set an item into the browser's local storage\r\n * \r\n * @param key key of the item\r\n * @param value value of the item\r\n */\r\n public setItem<T>(key: string, value: T | null): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n const stringValue: string = JSON.stringify(value);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[SET ITEM] ${key} with value:`, stringValue);\r\n localStorage.setItem(key, stringValue);\r\n } catch (error) {\r\n this.logger.error(`[ERROR SET ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Set an item encoded into the browser's local storage\r\n * \r\n * @param key key of the item\r\n * @param value value of the item\r\n */\r\n public setItemEncoded<T>(key: string, value: T | null): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n const encodedValue: string = btoa(JSON.stringify(value));\r\n if (this.libraryConfig?.debugging) this.logger.log(`[SET ITEM] ${key} with value:`, encodedValue);\r\n localStorage.setItem(key, encodedValue);\r\n } catch (error) {\r\n this.logger.error(`[ERROR SET ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Get an item from the browser's local storage by key\r\n * \r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public getItem<T>(key: string): T | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item ? JSON.parse(item, this.dateReviver) as T : null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get an item and decode it from the browser's local storage by key\r\n * \r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public getItemDecoded<T>(key: string): T | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item ? JSON.parse(atob(item), this.dateReviver) as T : null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get an unparsed string item from the browser's local storage by key\r\n * \r\n * @param key key of the item\r\n */\r\n public getItemUnparsed(key: string): string | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item || null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Remove an item from the browser's local storage by key\r\n * \r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public removeItem(key: string): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[REMOVE ITEM] ${key}`);\r\n localStorage.removeItem(key);\r\n } catch (error) {\r\n this.logger.error(`[ERROR REMOVE ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Clear the browser's local storage for this application\r\n * \r\n */\r\n public clear(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n localStorage.clear();\r\n }\r\n\r\n private dateReviver(key: any, value: any): any { // eslint-disable-line\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/.test(value)) {\r\n return new Date(value);\r\n }\r\n return value;\r\n }\r\n}\r\n","\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OverlayService {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private overlay = inject(Overlay);\r\n private logger = inject(Logger);\r\n\r\n\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n\r\n public open<T>(component: ComponentType<T>): void {\r\n if (this.overlayRef) return;\r\n\r\n this.overlayRef = this.overlay.create({\r\n hasBackdrop: true,\r\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n });\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[Overlay] attach', this.overlayRef);\r\n\r\n const portal: ComponentPortal<T> = new ComponentPortal(component);\r\n this.overlayRef.attach(portal);\r\n }\r\n\r\n public close(): void {\r\n if (!this.overlayRef) return;\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[Overlay] detach', this.overlayRef);\r\n this.overlayRef.detach();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { NavigationEnd, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable, take } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n\r\nexport class RouterService {\r\n private router = inject(Router);\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n\r\n private _loading$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n public get loading$(): Observable<boolean> {\r\n return this._loading$.asObservable();\r\n }\r\n\r\n private _routeHistory$: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);\r\n\r\n public get routeHistory$(): Observable<string[]> {\r\n return this._routeHistory$.asObservable();\r\n }\r\n\r\n private _currentRoute$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get currentRoute$(): Observable<string> {\r\n return this._currentRoute$.asObservable();\r\n }\r\n\r\n public get currentRoute(): string {\r\n return this._currentRoute$.value;\r\n }\r\n\r\n private _previousRoute$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get previousRoute$(): Observable<string> {\r\n return this._previousRoute$.asObservable();\r\n }\r\n\r\n public get previousRoute(): string {\r\n return this._previousRoute$.value;\r\n }\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n history.replaceState({ ...history.state, back: false }, '');\r\n }\r\n\r\n this.router.events.subscribe(event => {\r\n let asyncLoadCount: number = 0;\r\n\r\n if (event instanceof RouteConfigLoadStart) { asyncLoadCount++; }\r\n if (event instanceof RouteConfigLoadEnd) { asyncLoadCount--; }\r\n if (event instanceof NavigationEnd) {\r\n const previousRoute: string = this._currentRoute$.value;\r\n this._previousRoute$.next(previousRoute);\r\n\r\n const currentRoute: string = event.urlAfterRedirects;\r\n this._currentRoute$.next(currentRoute);\r\n\r\n if (!this.router.currentNavigation()?.extras?.state?.['back']) {\r\n if (previousRoute) {\r\n const routeHistory: string[] = this._routeHistory$.value;\r\n routeHistory.push(previousRoute);\r\n this._routeHistory$.next(routeHistory);\r\n }\r\n }\r\n }\r\n\r\n this._loading$.next(!!asyncLoadCount);\r\n });\r\n }\r\n\r\n /**\r\n * Navigates to the previous route found in the routeHistory Observable\r\n * \r\n * @param fallbackRoute fallback in case there is no previous route\r\n */\r\n public navigateBack(fallbackRoute?: string): void {\r\n this._routeHistory$.pipe(take(1)).subscribe(routeHistory => {\r\n if (routeHistory.length > 0) {\r\n const previousRoute: string = routeHistory[routeHistory.length - 1];\r\n\r\n if (previousRoute) {\r\n this.router.navigateByUrl(previousRoute, { state: { back: true } }).then(result => {\r\n if (result) {\r\n routeHistory.pop();\r\n }\r\n });\r\n } else if (fallbackRoute) {\r\n this.router.navigate([fallbackRoute]);\r\n }\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Clear the current route history\r\n */\r\n public clearRouteHistory(): void {\r\n this._routeHistory$.next([]);\r\n }\r\n\r\n}\r\n","import { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldConfig, ScaffoldLibraryConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ScaffoldService {\r\n\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private logger = inject(Logger);\r\n\r\n\r\n // Scaffold Config\r\n private _scaffoldConfig$: BehaviorSubject<ScaffoldConfig> = new BehaviorSubject<ScaffoldConfig>({});\r\n\r\n public get scaffoldConfig$(): Observable<ScaffoldConfig> {\r\n return this._scaffoldConfig$.asObservable();\r\n }\r\n\r\n public set scaffoldConfig(value: ScaffoldConfig) {\r\n if (this.libraryConfig?.debugging) this.logger.log('[UPDATE] ScaffoldConfig', value);\r\n this._scaffoldConfig$.next(value);\r\n }\r\n\r\n public get scaffoldConfig(): ScaffoldConfig {\r\n return this._scaffoldConfig$.value;\r\n }\r\n\r\n // Header Input Change\r\n private _headerInputChangeValue$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get headerInputChangeValue$(): Observable<string> {\r\n return this._headerInputChangeValue$.asObservable();\r\n }\r\n\r\n public set headerInputChangeValue(value: string) {\r\n this._headerInputChangeValue$.next(value);\r\n }\r\n\r\n // Button Click Event\r\n private _buttonClickEventValue$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get buttonClickEventValue$(): Observable<string> {\r\n return this._buttonClickEventValue$.asObservable();\r\n }\r\n\r\n public set buttonClickEventValue(value: string) {\r\n this._buttonClickEventValue$.next(value);\r\n this._buttonClickEventValue$.next('');\r\n }\r\n\r\n // Drawer component\r\n private _drawerPortal$ = new BehaviorSubject<ComponentPortal<unknown> | TemplatePortal<unknown> | null>(null);\r\n\r\n public get drawerPortal$(): Observable<ComponentPortal<unknown> | TemplatePortal<unknown> | null> {\r\n return this._drawerPortal$.asObservable();\r\n }\r\n\r\n public set drawerPortal(value: ComponentType<unknown>) {\r\n const componentPortal: ComponentPortal<unknown> = new ComponentPortal(value);\r\n this._drawerPortal$.next(value ? componentPortal : null);\r\n }\r\n\r\n // Update a specific property in the ScaffoldConfig\r\n public updateScaffoldProperty<K extends keyof ScaffoldConfig>(property: K, value: Partial<ScaffoldConfig[K]> | ScaffoldConfig[K]): void {\r\n const currentState: ScaffoldConfig = this._scaffoldConfig$.getValue();\r\n const currentValue: ScaffoldConfig[K] = currentState[property];\r\n let newValue: ScaffoldConfig[K];\r\n\r\n if (currentValue && typeof currentValue === 'object' && value && typeof value === 'object') {\r\n newValue = { ...currentValue, ...value } as ScaffoldConfig[K];\r\n } else {\r\n newValue = value as ScaffoldConfig[K];\r\n }\r\n\r\n if (newValue === currentValue) {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UNCHANGED] ScaffoldConfig.${property}`, newValue)\r\n return;\r\n }\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, newValue);\r\n this._scaffoldConfig$.next({ ...currentState, [property]: newValue });\r\n }\r\n}\r\n","\r\nimport { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { SeoConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SeoService {\r\n private metaTitle = inject(Title);\r\n private metaTags = inject(Meta);\r\n private document = inject<Document>(DOCUMENT);\r\n private logger = inject(Logger);\r\n\r\n\r\n private _config$: BehaviorSubject<SeoConfig | null> = new BehaviorSubject<SeoConfig | null>(null);\r\n\r\n public get config$(): Observable<SeoConfig | null> {\r\n return this._config$.asObservable();\r\n }\r\n\r\n\r\n /**\r\n * Pass a configuration to set meta tags such as title, description and image for search results and social media\r\n * \r\n * @param seoConfig config that contains all the meta information\r\n * \r\n */\r\n public setMetaTags(seoConfig: SeoConfig): void {\r\n this._config$.next(seoConfig);\r\n\r\n const autoTrim: boolean = seoConfig.autoTrim || false;\r\n const title: string = seoConfig.metaPageTitle || '';\r\n const description: string = seoConfig.metaPageDescription || '';\r\n const imagePath: string = seoConfig.metaImagePath || '';\r\n const imagePathIsAbsolute: boolean = seoConfig.metaImagePathIsAbsolute || false;\r\n const titleLimit: number = 60;\r\n const descriptionLimit: number = 160;\r\n\r\n // Set meta title\r\n if (title) {\r\n if (autoTrim && title.length > titleLimit) {\r\n this.logger.error(`[SeoService] The set meta title is too long. Recommended length is ${titleLimit}. The title will be trimmed.`);\r\n }\r\n const titleTrim: string = (title.length > titleLimit) ? title.substring(0, titleLimit - 3) + '...' : title;\r\n this._setMetaTitle(autoTrim ? titleTrim : title);\r\n }\r\n\r\n // Set meta description\r\n if (description) {\r\n if (autoTrim && description.length > descriptionLimit) {\r\n this.logger.error(`[SeoService] The set meta description is too long. Recommended length is ${descriptionLimit}. The description will be trimmed.`);\r\n }\r\n const descriptionTrim: string = (description.length > descriptionLimit) ? description.substring(0, descriptionLimit - 3) + '...' : description;\r\n this._setMetaDescription(autoTrim ? descriptionTrim : description);\r\n }\r\n\r\n // Set meta image\r\n const host: string = this.document.location.origin;\r\n if (imagePath) {\r\n this._setMetaImage(imagePathIsAbsolute ? imagePath : `${host}/${imagePath}`);\r\n }\r\n }\r\n\r\n // Set all meta titles\r\n private _setMetaTitle(title: string): void {\r\n this.metaTitle.setTitle(title);\r\n this.metaTags.updateTag({ property: 'og:title', content: title });\r\n this.metaTags.updateTag({ name: 'twitter:title', content: title });\r\n }\r\n\r\n // Set all meta descriptions\r\n private _setMetaDescription(description: string): void {\r\n this.metaTags.updateTag({ name: 'description', content: description });\r\n this.metaTags.updateTag({ property: 'og:description', content: description });\r\n this.metaTags.updateTag({ name: 'twitter:description', content: description });\r\n }\r\n\r\n // Set all meta images\r\n private _setMetaImage(image: string): void {\r\n this.metaTags.updateTag({ property: 'og:image', content: image });\r\n this.metaTags.updateTag({ name: 'twitter:image', content: image });\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { MatSnackBar, MatSnackBarConfig, MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition } from '@angular/material/snack-bar';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SnackbarService {\r\n private snackbar = inject(MatSnackBar);\r\n\r\n\r\n private readonly SNACKBAR_DURATION: number = 5000;\r\n private readonly SNACKBAR_POSITION_HORIZONTAL: MatSnackBarHorizontalPosition = 'center';\r\n private readonly SNACKBAR_POSITION_VERTICAL: MatSnackBarVerticalPosition = 'bottom';\r\n\r\n private readonly actionConfig: MatSnackBarConfig = {\r\n duration: this.SNACKBAR_DURATION,\r\n horizontalPosition: this.SNACKBAR_POSITION_HORIZONTAL,\r\n verticalPosition: this.SNACKBAR_POSITION_VERTICAL\r\n };\r\n\r\n private readonly defaultConfig: MatSnackBarConfig = {\r\n duration: (this.SNACKBAR_DURATION / 2),\r\n horizontalPosition: this.SNACKBAR_POSITION_HORIZONTAL,\r\n verticalPosition: this.SNACKBAR_POSITION_VERTICAL\r\n };\r\n\r\n // Opens a generic snackbar with a message\r\n public openSnackbar(message: string, closeLabel?: string, config?: MatSnackBarConfig): void {\r\n this.snackbar.open(message, closeLabel, config ? config : this.defaultConfig);\r\n }\r\n\r\n // Opens a snackbar with an action to wait for\r\n public openSnackbarWithAction(message: string, action: string, config?: MatSnackBarConfig): Promise<void> {\r\n const snackbarRef = this.snackbar.open(message, action, config ? config : this.actionConfig);\r\n return firstValueFrom(snackbarRef.onAction());\r\n }\r\n\r\n}\r\n","\r\nimport { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n \r\n private storageService = inject(LocalStorageService);\r\n private document = inject<Document>(DOCUMENT);\r\n\r\n\r\n private readonly THEME_KEY: string = 'THEME';\r\n\r\n private _currentTheme$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n get currentTheme$(): Observable<string> {\r\n return this._currentTheme$.asObservable();\r\n }\r\n\r\n constructor() {\r\n this.loadTheme();\r\n }\r\n\r\n /**\r\n * Set one of the defined themes by passing its class name\r\n *\r\n * @param newTheme class name of the theme (pass empty string for default theme)\r\n * @param useLocalStorage persist the current theme in the LocalStorage\r\n */\r\n public setTheme(newTheme: string, useLocalStorage?: boolean): void {\r\n const currentTheme: string = this._currentTheme$.value;\r\n\r\n if (newTheme === currentTheme) {\r\n return;\r\n }\r\n\r\n if (currentTheme) {\r\n this.document.body.classList.remove(currentTheme);\r\n }\r\n\r\n this._currentTheme$.next(newTheme);\r\n\r\n if (newTheme) {\r\n this.document.body.classList.add(newTheme);\r\n\r\n if (useLocalStorage) {\r\n this.storageService.setItem(this.THEME_KEY, JSON.stringify(newTheme));\r\n }\r\n } else {\r\n if (useLocalStorage) {\r\n this.storageService.removeItem(this.THEME_KEY);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Loads the current theme stored in the local storage if available\r\n *\r\n */\r\n private loadTheme(): void {\r\n const theme: string | null = this.storageService.getItem(this.THEME_KEY);\r\n\r\n if (!theme) {\r\n return;\r\n }\r\n\r\n this.setTheme(theme.replace(/\"/g, ''));\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BottomBarConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-bottom-bar',\r\n templateUrl: './bottom-bar.component.html',\r\n styleUrls: ['./bottom-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n NgClass\r\n]\r\n})\r\nexport class BottomBarComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly bottomBarConfig = input<BottomBarConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly navbarEnabled = input<boolean>(false);\r\n\r\n public readonly bottomBarCloseClickEvent = output<string>();\r\n public readonly bottomBarButtonClickEvent = output<string>();\r\n\r\n\r\n public buttonClicked(id?: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n public closeClicked(closeButtonId: string): void {\r\n this.bottomBarCloseClickEvent.emit(closeButtonId);\r\n }\r\n\r\n}\r\n","@if (bottomBarConfig(); as config) {\r\n @if (config.enable) {\r\n <div\r\n animate.enter=\"lf-anim-slide-up-enter\"\r\n animate.leave=\"lf-anim-slide-up-leave\"\r\n class=\"lf-bottom-bar lf-transitions px-4\"\r\n [ngClass]=\"config.cssClass\"\r\n [class.lf-bottom-bar-show-navbar]=\"!isMobile() && navbarEnabled()\"\r\n [class.lf-bottom-bar-show-navbar-mobile]=\"isMobile() && navbarEnabled()\">\r\n @if (config.closeButtonId) {\r\n <button mat-icon-button (click)=\"closeClicked(config.closeButtonId)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (config.message) {\r\n <span class=\"ml-2\">{{ config.message }}</span>\r\n }\r\n @if (config.buttons) {\r\n <div class=\"lf-bottom-bar-buttons ml-4\">\r\n @for (button of config.buttons; track button.id) {\r\n <!-- label button -->\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-bottom-bar-button ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ button.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else {\r\n <button\r\n mat-icon-button\r\n color=\"accent\"\r\n class=\"lf-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ContentTitleCardConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-content-title-card',\r\n templateUrl: './content-title-card.component.html',\r\n styleUrls: ['./content-title-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n NgClass\n]\r\n})\r\nexport class ContentTitleCardComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly contentTitleCardConfig = input<ContentTitleCardConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly routeHistory = input<string[]>([]);\r\n\r\n public readonly backButtonClickEvent = output<void>();\r\n\r\n\r\n public backButtonClicked(): void {\r\n this.backButtonClickEvent.emit();\r\n }\r\n\r\n}\r\n","@if (contentTitleCardConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-card\r\n class=\"lf-content-title-card mat-elevation-z2\"\r\n [class.lf-content-title-card-mobile]=\"isMobile()\"\r\n [class.px-4]=\"!isMobile()\"\r\n [class.px-2]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\">\r\n <!-- back button -->\r\n @if (config.showBackButton && routeHistory().length > 0) {\r\n <button mat-icon-button color=\"accent\" (click)=\"backButtonClicked()\">\r\n <mat-icon>arrow_back_ios</mat-icon>\r\n </button>\r\n }\r\n <!-- spacer -->\r\n <div class=\"flex-auto\"></div>\r\n <!-- label -->\r\n <span class=\"lf-content-title-card-label\">\r\n {{ config.label || \"\" }}\r\n </span>\r\n <!-- spacer -->\r\n <div class=\"flex-auto\"></div>\r\n <!-- empty button spacer -->\r\n <div\r\n [style.width]=\"config.showBackButton && routeHistory().length > 1 ? '48px' : '0px'\"></div>\r\n </mat-card>\r\n }\r\n}\r\n","import { ComponentPortal, PortalModule, TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, OnInit, output } from '@angular/core';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { DrawerConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-drawer',\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n PortalModule,\n MatSidenavModule,\n NgClass,\n NgTemplateOutlet\n]\r\n})\r\nexport class DrawerComponent implements OnInit {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly drawerConfig = input<DrawerConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly headerEnabled = input<boolean>(false);\r\n public readonly drawerPortal = input<ComponentPortal<unknown> | TemplatePortal<unknown> | null>();\r\n\r\n public readonly drawerConfigUpdateEvent = output<Partial<DrawerConfig>>();\r\n\r\n\r\n ngOnInit(): void {\r\n // Avoid initializing an open drawer on mobile\r\n const drawerConfig = this.drawerConfig();\r\n if (this.isMobile() && drawerConfig?.enable && drawerConfig?.open) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n }\r\n }\r\n\r\n\r\n // Detect when the drawer is closed without clicking a button\r\n public drawerClosed(): void {\r\n if (this.drawerConfig()) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n };\r\n }\r\n\r\n}\r\n","@if (drawerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-sidenav-container class=\"lf-drawer-container lf-transitions\" [ngClass]=\"config.cssClass\">\r\n <!-- drawer -->\r\n <mat-sidenav\r\n #drawer\r\n class=\"lf-drawer mat-elevation-z2\"\r\n [class.mobile]=\"isMobile()\"\r\n [mode]=\"isMobile() ? 'over' : 'side'\"\r\n [opened]=\"config.open\"\r\n [autoFocus]=\"false\"\r\n [fixedInViewport]=\"config.fixed\"\r\n [class.lf-drawer-show-header]=\"headerEnabled() && config.fixed\"\r\n (closed)=\"drawerClosed()\">\r\n <!-- drawer content -->\r\n <!-- <ng-content select=\"[drawerContent]\"></ng-content> -->\r\n @if (drawerPortal()) {\r\n <ng-template [cdkPortalOutlet]=\"drawerPortal()\"></ng-template>\r\n } @else {\r\n <ng-content select=\"[drawerContent]\"></ng-content>\r\n }\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"overflow-unset\">\r\n <!-- main content -->\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n }\r\n} @else {\r\n <!-- render content without drawer -->\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n}\r\n\r\n<!-- this template is required to allow multiple <ng-content></ng-content> -->\r\n<ng-template #content><ng-content></ng-content></ng-template>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, OnInit, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FloatingButtonConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-floating-button',\r\n templateUrl: './floating-button.component.html',\r\n styleUrls: ['./floating-button.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n NgClass\n]\r\n})\r\nexport class FloatingButtonComponent implements OnInit {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly floatingButtonConfig = input<FloatingButtonConfig | null>(null);\r\n public readonly onTop = input<boolean>(false);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly drawerEnabled = input<boolean>(false);\r\n public readonly navbarEnabled = input<boolean>(false);\r\n public readonly bottomBarEnabled = input<boolean>(false);\r\n\r\n public readonly floatingButtonConfigUpdateEvent = output<Partial<FloatingButtonConfig>>();\r\n public readonly floatingButtonClickEvent = output<string>();\r\n\r\n\r\n ngOnInit(): void {\r\n const floatingButtonConfig = this.floatingButtonConfig();\r\n if (floatingButtonConfig) {\r\n const updatedFloatingButtonConfigConfig: Partial<FloatingButtonConfig> = {\r\n matIcon: (!floatingButtonConfig.matIcon && !floatingButtonConfig.svgIcon) ? 'arrow_upward' : floatingButtonConfig.matIcon || floatingButtonConfig.svgIcon,\r\n horizontalPosition: floatingButtonConfig.horizontalPosition ?? 'right'\r\n };\r\n\r\n if (JSON.stringify(updatedFloatingButtonConfigConfig) !== JSON.stringify(floatingButtonConfig)) {\r\n this.floatingButtonConfigUpdateEvent.emit(updatedFloatingButtonConfigConfig);\r\n }\r\n }\r\n\r\n }\r\n\r\n public buttonClicked(id?: string): void {\r\n this.floatingButtonClickEvent.emit(id || '');\r\n }\r\n\r\n}\r\n","@if (floatingButtonConfig(); as config) {\r\n @if (config.enable && (!config.autoHide || !onTop())) {\r\n <button\r\n mat-fab\r\n color=\"accent\"\r\n class=\"lf-floating-button lf-transitions\"\r\n [ngClass]=\"config.cssClass + ' ' + config.horizontalPosition\"\r\n [class.sticky]=\"config.sticky\"\r\n [class.show-navbar]=\"isMobile() && navbarEnabled() && !bottomBarEnabled()\"\r\n [class.show-bottom-bar]=\"bottomBarEnabled() && !(isMobile() && navbarEnabled())\"\r\n [class.show-navbar-and-bottom-bar]=\"isMobile() && navbarEnabled() && bottomBarEnabled()\"\r\n [class.show-drawer]=\"!isMobile() && drawerEnabled()\"\r\n [extended]=\"!!config.label\"\r\n [disabled]=\"config.disabled\"\r\n (click)=\"buttonClicked(config.id)\"\r\n [matTooltip]=\"config.tooltip!\">\r\n <!-- icon -->\r\n @if (config.matIcon) {\r\n <mat-icon>\r\n {{ config.matIcon }}\r\n </mat-icon>\r\n } @else if (config.svgIcon) {\r\n <mat-icon [svgIcon]=\"config.svgIcon\"></mat-icon>\r\n }\r\n <!-- svg icon -->\r\n <!-- label -->\r\n @if (config.label) {\r\n <span class=\"lf-floating-button-label\">\r\n {{ config.label }}\r\n </span>\r\n }\r\n </button>\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FooterConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n RouterModule,\n MatCardModule,\n MatIconModule,\n NgClass\n]\r\n})\r\nexport class FooterComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly footerConfig = input<FooterConfig | null>(null);\r\n\r\n}\r\n","@if (footerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-card class=\"lf-footer lf-transitions mat-elevation-z2 p-4\" [ngClass]=\"config.cssClass\">\r\n <!-- svg logo -->\r\n @if (config.svgLogo) {\r\n <mat-icon\r\n class=\"lf-footer-logo mb-4\"\r\n color=\"primary\"\r\n [svgIcon]=\"config.svgLogo!\"></mat-icon>\r\n } @else {\r\n @if (config.imgLogo) {\r\n <img class=\"lf-footer-logo mb-4\" [src]=\"config.imgLogo\" alt=\"Logo\" />\r\n }\r\n }\r\n <!-- img logo -->\r\n <!-- links -->\r\n @if (config.links) {\r\n <div class=\"lf-footer-links mb-4\">\r\n @for (link of config.links; track $index; let i = $index) {\r\n <div class=\"lf-footer-link\" [class.mr-2]=\"i < config.links!.length - 1\">\r\n @if (link.routerLink) {\r\n <a [routerLink]=\"[link.routerLink]\">{{ link.label || \"\" }}</a>\r\n } @else {\r\n <a [href]=\"link.href\" [target]=\"link.externalTab ? '_blank' : null\">\r\n {{ link.label }}\r\n </a>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n <!-- copyright -->\r\n @if (config.copyright) {\r\n <span class=\"lf-footer-copyright\">\r\n {{ config.copyright }}\r\n </span>\r\n }\r\n </mat-card>\r\n }\r\n}\r\n","\r\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, computed, effect, inject, input, model, output, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { HeaderInputConfig } from '../../../models';\r\n\r\n@Component({\r\n selector: 'lf-input',\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule\n]\r\n})\r\nexport class InputComponent implements OnDestroy {\r\n\r\n private dialogRef = inject<MatDialogRef<InputComponent>>(MatDialogRef, { optional: true });\r\n private inputConfigDialog = inject<HeaderInputConfig>(MAT_DIALOG_DATA, { optional: true });\r\n\r\n\r\n public readonly input = viewChild<ElementRef>('input');\r\n\r\n public readonly inputConfig = input<HeaderInputConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n\r\n public readonly inputSubmitEvent = output<string>();\r\n public readonly inputChangeEvent = output<string>();\r\n public readonly inputPrefixActionEvent = output<void>();\r\n\r\n public inputConfigComputed = computed<HeaderInputConfig>(() => this.inputConfigDialog ?? this.inputConfig() ?? {})\r\n\r\n public inputValue = model<string>('');\r\n\r\n\r\n constructor() {\r\n effect(() => {\r\n const input = this.input();\r\n if (input && this.inputConfigComputed().autoFocus) {\r\n input.nativeElement.focus();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.inputValue.set('');\r\n this.inputChangeEvent.emit(this.inputValue());\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n this.inputSubmitEvent.emit(value);\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close(value);\r\n }\r\n }\r\n\r\n public inputChanged(value: string): void {\r\n this.inputChangeEvent.emit(value);\r\n }\r\n\r\n public inputPrefixAction(): void {\r\n this.inputPrefixActionEvent.emit();\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n public clearInput(): void {\r\n this.inputValue.set('');\r\n this.inputChangeEvent.emit(this.inputValue());\r\n }\r\n}\r\n","@if (inputConfigComputed(); as config) {\r\n @if (config) {\r\n <mat-form-field class=\"lf-input\" appearance=\"fill\" [class.lf-hide-hint]=\"!config.hint\">\r\n <mat-label>{{ config.label || \"Search\" }}</mat-label>\r\n @if (config.hint) {\r\n <mat-hint>{{ config.hint }}</mat-hint>\r\n }\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n [disabled]=\"config.disabled!\"\r\n (keyup.enter)=\"inputSubmitted(inputValue())\"\r\n (ngModelChange)=\"inputChanged($event)\"\r\n #input />\r\n @if (isMobile()) {\r\n <button mat-icon-button matPrefix color=\"accent\" (click)=\"inputPrefixAction()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n @if (inputValue()) {\r\n <button class=\"lf-input-close-button\" mat-icon-button matSuffix (click)=\"clearInput()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (config.matIconSubmit) {\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n color=\"accent\"\r\n type=\"submit\"\r\n (click)=\"inputSubmitted(inputValue())\">\r\n <mat-icon>\r\n {{ config.matIconSubmit }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n}\r\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { RouterModule } from '@angular/router';\r\nimport { HeaderConfig, MenuButton, ScaffoldLibraryConfig } from '../../models';\r\nimport { InputComponent } from '../../shared/components/input/input.component';\r\n\r\n@Component({\r\n selector: 'lf-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n RouterModule,\r\n MatToolbarModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n NgClass,\r\n NgTemplateOutlet,\r\n InputComponent\r\n]\r\n})\r\nexport class HeaderComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly headerConfig = input<HeaderConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly routeLoading = input<boolean>(false);\r\n public readonly currentRoute = input<string>();\r\n\r\n public readonly headerConfigUpdateEvent = output<Partial<HeaderConfig>>();\r\n public readonly headerButtonClickEvent = output<string>();\r\n public readonly headerInputSubmitEvent = output<string>();\r\n public readonly headerInputChangeEvent = output<string>();\r\n\r\n public isActive = computed(() => {\r\n const currentRoute = this.currentRoute();\r\n const route: string = currentRoute?.substring(currentRoute.indexOf('/') + 1) || '';\r\n return (id: string): boolean => !!route && !!id && route === id;\r\n });\r\n\r\n\r\n public rightMobileButton = computed<MenuButton | null>(() => {\r\n const headerConfig = this.headerConfig();\r\n const rightMenuButtons = headerConfig?.rightMenuButtons ?? [];\r\n\r\n if (!rightMenuButtons.length) return null;\r\n\r\n const config = headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n const includedButtons = rightMenuButtons.filter(\r\n button => !config.excludeButtonIds?.includes(button.id)\r\n );\r\n\r\n return {\r\n id: '',\r\n matIcon:\r\n !config.matIcon && !config.svgIcon && !config.label\r\n ? 'more_vert'\r\n : config.matIcon,\r\n svgIcon: config.svgIcon,\r\n label: config.label,\r\n menuButtons: includedButtons\r\n };\r\n });\r\n\r\n public rightExcludedButtons = computed<MenuButton[] | null>(() => {\r\n const headerConfig = this.headerConfig();\r\n const rightMenuButtons = headerConfig?.rightMenuButtons ?? [];\r\n\r\n if (!rightMenuButtons.length) return null;\r\n\r\n const config = headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n return rightMenuButtons.filter(button =>\r\n config.excludeButtonIds?.includes(button.id)\r\n );\r\n });\r\n\r\n\r\n public buttonClicked(id?: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public inputChanged(value: string): void {\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n public inputClosed(): void {\r\n this.headerConfigUpdateEvent.emit({ inputConfig: { enable: false } });\r\n }\r\n \r\n}\r\n","@if (headerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-toolbar\r\n class=\"lf-header lf-transitions mat-elevation-z3\"\r\n [class.px-4]=\"!isMobile()\"\r\n [class.px-1]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\"\r\n [class.lf-gradient]=\"config.gradient\"\r\n color=\"primary\">\r\n <!-- left menu button -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: config.leftMenuButton!,\r\n hideLabel: true,\r\n }\"></ng-container>\r\n <!-- logo & title -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper ml-1 mr-2\"\r\n [class.ml-10]=\"config.leftMenuButton && !isMobile()\">\r\n <!-- link wrapper -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper-link\"\r\n [class.lf-clickable]=\"config.titleRouterLink\"\r\n [routerLink]=\"config.titleRouterLink ? [config.titleRouterLink] : null\">\r\n <!-- svg logo -->\r\n @if (config.svgLogo) {\r\n <mat-icon\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"config.title\"\r\n [svgIcon]=\"config.svgLogo!\"></mat-icon>\r\n <!-- img logo -->\r\n } @else {\r\n @if (config.imgLogo) {\r\n <img\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"config.title\"\r\n [src]=\"config.imgLogo\"\r\n alt=\"Logo\" />\r\n }\r\n }\r\n <!-- title -->\r\n @if (config.title) {\r\n <div class=\"lf-header-title-wrapper\">\r\n @if (config.title) {\r\n <span class=\"lf-header-title\">\r\n {{ config.title }}\r\n </span>\r\n }\r\n @if (config.subtitle) {\r\n <span class=\"lf-header-subtitle\">\r\n {{ config.subtitle }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- input -->\r\n @if (config.inputConfig?.enable) {\r\n <div class=\"spacer\"></div>\r\n <lf-input\r\n [class.lf-header-input-mobile]=\"isMobile()\"\r\n [class.mx-3]=\"!isMobile()\"\r\n [inputConfig]=\"config.inputConfig!\"\r\n [isMobile]=\"isMobile()\"\r\n (inputSubmitEvent)=\"inputSubmitted($event)\"\r\n (inputChangeEvent)=\"inputChanged($event)\"\r\n (inputPrefixActionEvent)=\"inputClosed()\"></lf-input>\r\n }\r\n <!-- spacer -->\r\n <div class=\"spacer\"></div>\r\n <!-- right menu buttons -->\r\n @if (config.responsiveConfig?.enable && isMobile()) {\r\n @let exludedButtons = rightExcludedButtons();\r\n @for (button of exludedButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n @let mobileButton = rightMobileButton();\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: mobileButton,\r\n }\"></ng-container>\r\n } @else {\r\n @for (button of config.rightMenuButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n }\r\n </mat-toolbar>\r\n <!-- loading bar -->\r\n @if (config.loading || (config.showRouteLoading && routeLoading())) {\r\n <mat-progress-bar\r\n class=\"lf-header-progress-bar\"\r\n color=\"accent\"\r\n mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n }\r\n}\r\n\r\n<!-- header menu button -->\r\n<ng-template #menuButtonTemplate let-menuButton=\"menuButton\" let-hideLabel=\"hideLabel\">\r\n @if (menuButton) {\r\n <!-- label button -->\r\n @if (menuButton.label && !hideLabel) {\r\n <button\r\n mat-button\r\n class=\"lf-header-menu-button\"\r\n [class.lf-header-menu-button-active]=\"isActive()(menuButton.id) && !menuButton.disabled\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n [disabled]=\"menuButton.disabled\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [aria-label]=\"menuButton.label || menuButton.tooltip\"\r\n [matTooltip]=\"menuButton.tooltip\">\r\n <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon>\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ menuButton.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else if (menuButton.matIcon || menuButton.svgIcon) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-header-menu-button\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n [disabled]=\"menuButton.disabled\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [aria-label]=\"menuButton.id || menuButton.tooltip\">\r\n <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon>\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n <!-- img button -->\r\n } @else if (menuButton.imgIcon) {\r\n <img\r\n class=\"lf-header-menu-img px-1\"\r\n [src]=\"menuButton.imgIcon\"\r\n width=\"48\"\r\n height=\"48\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [aria-label]=\"menuButton.id || menuButton.tooltip\" />\r\n }\r\n <!-- menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <!-- label menu buttons -->\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- menu button -->\r\n @if (button.label) {\r\n <button\r\n mat-menu-item\r\n [class.lf-header-menu-button-active]=\"isActive()(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.label\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <span>{{ button.label }}</span>\r\n </button>\r\n }\r\n }\r\n <!-- icon menu buttons -->\r\n <div mat-menu-item class=\"lf-menu-icons px-1\" [disableRipple]=\"true\">\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- icon button -->\r\n @if (!button.label && (button.matIcon || button.svgIcon)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-menu-icon-button\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n tabindex=\"0\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n</ng-template>\r\n","import { ComponentPortal, PortalModule } from '@angular/cdk/portal';\r\nimport { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, OnInit, signal } from '@angular/core';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\nimport { LoadingOverlayConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { CONFIG } from '../../scaffold.config';\r\nimport { ScaffoldService } from '../../services';\r\n\r\n@Component({\r\n selector: 'lf-loading-overlay',\r\n templateUrl: './loading-overlay.component.html',\r\n styleUrls: ['./loading-overlay.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n PortalModule,\n MatProgressSpinner,\n NgClass\n]\r\n})\r\nexport class LoadingOverlayComponent implements OnInit {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n\r\n\r\n public loadingOverlayConfig = signal<LoadingOverlayConfig | null>(null);\r\n public portal = signal<ComponentPortal<any> | null>(null);\r\n\r\n\r\n ngOnInit(): void {\r\n this.loadingOverlayConfig.set(this.scaffoldService.scaffoldConfig?.loadingOverlayConfig || null);\r\n\r\n const customComponent = this.loadingOverlayConfig()?.customComponent || null;\r\n if (customComponent) {\r\n this.portal.set(new ComponentPortal(customComponent));\r\n }\r\n }\r\n}\r\n","@if (portal(); as portal) {\r\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\r\n} @else {\r\n <div\r\n [ngClass]=\"loadingOverlayConfig()?.cssClass\"\r\n [class.lf-gradient-spinner]=\"loadingOverlayConfig()?.gradient\">\r\n <mat-progress-spinner mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NavbarConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-navbar',\r\n templateUrl: './navbar.component.html',\r\n styleUrls: ['./navbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatIconModule,\r\n MatTooltipModule,\r\n NgClass\r\n]\r\n})\r\nexport class NavbarComponent {\r\n\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly navbarConfig = input<NavbarConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly currentRoute = input<string>();\r\n\r\n public readonly navbarButtonClickEvent = output<string>();\r\n\r\n public isActive = computed(() => {\r\n const currentRoute = this.currentRoute();\r\n const route: string = currentRoute?.substring(currentRoute.indexOf('/') + 1) || '';\r\n return (id: string): boolean => !!route && !!id && route === id;\r\n });\r\n\r\n\r\n public buttonClicked(id: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n}\r\n","@if (navbarConfig(); as config) {\r\n @if (config.enable) {\r\n <div\r\n [animate.enter]=\"isMobile() ? 'lf-anim-slide-up-enter' : 'lf-anim-slide-left-enter'\"\r\n [animate.leave]=\"isMobile() ? 'lf-anim-slide-up-leave' : 'lf-anim-slide-left-leave'\"\r\n class=\"mat-app-background lf-transitions mat-elevation-z3\"\r\n [class.lf-navbar]=\"!isMobile()\"\r\n [class.lf-navbar-mobile]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\">\r\n <!-- items -->\r\n <div [class.lf-navbar-items]=\"!isMobile()\" [class.lf-navbar-mobile-items]=\"isMobile()\">\r\n <!-- item -->\r\n @for (button of config.buttons; track button.id; let i = $index) {\r\n @if (i < 5) {\r\n <div\r\n class=\"lf-navbar-item\"\r\n [class.lf-navbar-item-active]=\"isActive()(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <!-- show a protected space on desktop so the icon doesn't move up and down -->\r\n @if (button?.label) {\r\n <span class=\"lf-navbar-item-label\">\r\n {{\r\n isActive()(button.id) || config.showAllLabels\r\n ? button.label\r\n : isMobile()\r\n ? \"\"\r\n : \" \"\r\n }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n}\r\n","import { Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, DOCUMENT, ElementRef, inject, OnDestroy, OnInit, output, signal, viewChild } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { debounceTime, distinctUntilChanged, fromEvent, map, Subscription, tap } from 'rxjs';\r\nimport { BottomBarConfig, ContentTitleCardConfig, DrawerConfig, FloatingButtonConfig, FooterConfig, HeaderConfig, NavbarConfig, ScaffoldConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { CONFIG } from '../../scaffold.config';\r\nimport { BreakpointService, Logger, OverlayService, RouterService, ScaffoldService } from '../../services';\r\nimport { BottomBarComponent } from '../bottom-bar/bottom-bar.component';\r\nimport { ContentTitleCardComponent } from '../content-title-card/content-title-card.component';\r\nimport { DrawerComponent } from '../drawer/drawer.component';\r\nimport { FloatingButtonComponent } from '../floating-button/floating-button.component';\r\nimport { FooterComponent } from '../footer/footer.component';\r\nimport { HeaderComponent } from '../header/header.component';\r\nimport { LoadingOverlayComponent } from '../loading-overlay/loading-overlay.component';\r\nimport { NavbarComponent } from '../navbar/navbar.component';\r\n\r\n@Component({\r\n selector: 'lf-scaffold',\r\n templateUrl: './scaffold.component.html',\r\n styleUrls: ['./scaffold.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n NgClass,\r\n HeaderComponent,\r\n NavbarComponent,\r\n DrawerComponent,\r\n FooterComponent,\r\n ContentTitleCardComponent,\r\n FloatingButtonComponent,\r\n BottomBarComponent\r\n]\r\n})\r\nexport class ScaffoldComponent implements OnInit, OnDestroy {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n private breakpointService = inject(BreakpointService);\r\n private routerService = inject(RouterService);\r\n private overlayService = inject(OverlayService)\r\n private route = inject(ActivatedRoute);\r\n private document = inject<Document>(DOCUMENT);\r\n private logger = inject(Logger);\r\n\r\n\r\n public readonly scrollContainer = viewChild<ElementRef>('scrollContainer');\r\n public readonly content = viewChild<ElementRef>('content');\r\n\r\n public readonly headerButtonClickEvent = output<string>();\r\n public readonly headerInputSubmitEvent = output<string>();\r\n public readonly headerInputChangeEvent = output<string>();\r\n public readonly navbarButtonClickEvent = output<string>();\r\n public readonly floatingButtonClickEvent = output<string>();\r\n public readonly bottomBarButtonClickEvent = output<string>();\r\n\r\n public scaffoldConfig = signal<ScaffoldConfig | null>(null);\r\n public headerConfig = signal<HeaderConfig | null>(null);\r\n public navbarConfig = signal<NavbarConfig | null>(null);\r\n public drawerConfig = signal<DrawerConfig | null>(null);\r\n public drawerPortal = toSignal<ComponentPortal<unknown> | TemplatePortal<unknown> | null>(this.scaffoldService.drawerPortal$);\r\n public footerConfig = signal<FooterConfig | null>(null);\r\n public contentTitleCardConfig = signal<ContentTitleCardConfig | null>(null);\r\n public floatingButtonConfig = signal<FloatingButtonConfig | null>(null);\r\n public bottomBarConfig = signal<BottomBarConfig | null>(null);\r\n\r\n public routeHistory = toSignal<string[]>(this.routerService.routeHistory$.pipe(tap((routeHistory: string[]) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteHistory]', routeHistory);\r\n const scrollContainer = this.scrollContainer();\r\n if (scrollContainer && this.scaffoldConfig()?.scrollPositionRestoration) {\r\n scrollContainer.nativeElement.scrollTop = 0;\r\n }\r\n })));\r\n public currentRoute = toSignal<string>(this.routerService.currentRoute$);\r\n public routeLoading = toSignal<boolean>(this.routerService.loading$);\r\n public isMobile = toSignal<boolean>(this.breakpointService.breakpoint$.pipe(map((breakpointState: BreakpointState) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[BreakpointState]', breakpointState);\r\n return breakpointState.breakpoints[Breakpoints.XSmall] || breakpointState.breakpoints[Breakpoints.Small];\r\n })));\r\n\r\n public scrollTopPosition = signal<number>(0);\r\n\r\n public initialized = signal<boolean>(false);\r\n\r\n private _subscription: Subscription = new Subscription;\r\n\r\n\r\n ngOnInit(): void {\r\n // Listen for config changes\r\n this._subscription.add(this.scaffoldService.scaffoldConfig$.subscribe((scaffoldConfig: ScaffoldConfig) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[ScaffoldConfig]', scaffoldConfig);\r\n\r\n if (scaffoldConfig) {\r\n this.toggleLoadingOverlay(scaffoldConfig?.loading || false);\r\n\r\n this.scaffoldConfig.set(scaffoldConfig);\r\n this.headerConfig.set(scaffoldConfig.headerConfig || null);\r\n this.navbarConfig.set(scaffoldConfig.navbarConfig || null);\r\n this.drawerConfig.set(scaffoldConfig.drawerConfig || null);\r\n this.footerConfig.set(scaffoldConfig.footerConfig || null);\r\n this.contentTitleCardConfig.set(scaffoldConfig.contentTitleCardConfig || null);\r\n this.floatingButtonConfig.set(scaffoldConfig.floatingButtonConfig || null);\r\n this.bottomBarConfig.set(scaffoldConfig.bottomBarConfig || null);\r\n }\r\n }));\r\n\r\n // Listen to scroll events\r\n const scrollContainer = this.scrollContainer();\r\n if (scrollContainer) {\r\n const element: HTMLElement = scrollContainer.nativeElement;\r\n\r\n this._subscription.add(fromEvent(element, 'scroll').pipe(\r\n distinctUntilChanged(),\r\n debounceTime(100)\r\n ).subscribe((e: Event) => {\r\n const target: HTMLElement = e.target as HTMLElement;\r\n this.scrollTopPosition.set(target.scrollTop);\r\n }));\r\n }\r\n\r\n // Listen for fragments in the current route\r\n if (this.scaffoldConfig()?.anchorScrolling) {\r\n this._subscription.add(this.route.fragment.subscribe((fragment: string | null) => {\r\n if (fragment) {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteFragment]', fragment);\r\n setTimeout(() => {\r\n const element = this.document.querySelector(`#${fragment}`);\r\n if (element) {\r\n element.scrollIntoView({ behavior: 'auto', block: 'start', inline: 'nearest' });\r\n }\r\n }, 100);\r\n }\r\n }));\r\n }\r\n\r\n setTimeout(() => { this.initialized.set(true); });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._subscription) {\r\n this._subscription.unsubscribe();\r\n }\r\n }\r\n\r\n\r\n // Header\r\n public headerConfigUpdated(headerConfig: Partial<HeaderConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('headerConfig', headerConfig);\r\n }\r\n\r\n public headerButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public headerInputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public headerInputChanged(value: string): void {\r\n this.scaffoldService.headerInputChangeValue = value;\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n // Navbar\r\n public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Drawer\r\n public drawerConfigUpdated(drawerConfig: Partial<DrawerConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('drawerConfig', drawerConfig);\r\n }\r\n\r\n // Content title card\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n // Floating button\r\n public floatingButtonConfigUpdated(floatingButtonConfig: Partial<FloatingButtonConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('floatingButtonConfig', floatingButtonConfig);\r\n }\r\n\r\n public floatingButtonClicked(id: string): void {\r\n const scrollContainer = this.scrollContainer();\r\n if (!id && scrollContainer) {\r\n scrollContainer.nativeElement.scrollTop = 0;\r\n } else {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.floatingButtonClickEvent.emit(id);\r\n }\r\n }\r\n\r\n // Bottom bar\r\n public bottomBarCloseClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n public bottomBarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n\r\n // Loading overlay\r\n private async toggleLoadingOverlay(loading: boolean): Promise<void> {\r\n if (loading) {\r\n this.overlayService.open(LoadingOverlayComponent);\r\n } else {\r\n this.overlayService.close();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"lf-scaffold lf-transitions mat-app-background mat-typography\"\r\n [ngClass]=\"scaffoldConfig()?.cssClass\">\r\n <!-- header -->\r\n <lf-header\r\n [libraryConfig]=\"libraryConfig\"\r\n [headerConfig]=\"headerConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [routeLoading]=\"routeLoading()!\"\r\n [currentRoute]=\"currentRoute()\"\r\n (headerConfigUpdateEvent)=\"headerConfigUpdated($event)\"\r\n (headerButtonClickEvent)=\"headerButtonClicked($event)\"\r\n (headerInputSubmitEvent)=\"headerInputSubmitted($event)\"\r\n (headerInputChangeEvent)=\"headerInputChanged($event)\"></lf-header>\r\n <!-- navbar -->\r\n <lf-navbar\r\n [libraryConfig]=\"libraryConfig\"\r\n [navbarConfig]=\"navbarConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [currentRoute]=\"currentRoute()\"\r\n (navbarButtonClickEvent)=\"navbarButtonClicked($event)\"></lf-navbar>\r\n <!-- content wrapper -->\r\n <div\r\n class=\"lf-content-wrapper\"\r\n [class.lf-show-navbar]=\"navbarConfig()?.enable && !isMobile()\"\r\n [class.lf-show-header]=\"headerConfig()?.enable && !(navbarConfig()?.enable && isMobile())\"\r\n [class.lf-show-navbar-mobile]=\"navbarConfig()?.enable && isMobile() && !headerConfig()?.enable\"\r\n [class.lf-show-header-and-navbar-mobile]=\"\r\n headerConfig()?.enable && navbarConfig()?.enable && isMobile()\r\n \"\r\n [class.lf-transitions]=\"initialized()\"\r\n #scrollContainer\r\n cdkScrollable>\r\n <!-- drawer -->\r\n <lf-drawer\r\n [libraryConfig]=\"libraryConfig\"\r\n [drawerConfig]=\"drawerConfig()\"\r\n [drawerPortal]=\"drawerPortal()\"\r\n [isMobile]=\"isMobile()!\"\r\n [headerEnabled]=\"headerConfig()?.enable!\"\r\n (drawerConfigUpdateEvent)=\"drawerConfigUpdated($event)\">\r\n <!-- drawer content -->\r\n <ng-content select=\"[drawerContent]\" drawerContent></ng-content>\r\n <!-- content title card -->\r\n <lf-content-title-card\r\n [libraryConfig]=\"libraryConfig\"\r\n [contentTitleCardConfig]=\"contentTitleCardConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [routeHistory]=\"routeHistory()!\"\r\n (backButtonClickEvent)=\"backButtonClicked()\"></lf-content-title-card>\r\n <!-- main content -->\r\n <div\r\n class=\"lf-content\"\r\n [class.lf-content-mobile]=\"isMobile()\"\r\n [class.lf-show-footer]=\"footerConfig()?.enable\"\r\n #content>\r\n <ng-content></ng-content>\r\n <!-- to top button -->\r\n <lf-floating-button\r\n [libraryConfig]=\"libraryConfig\"\r\n [floatingButtonConfig]=\"floatingButtonConfig()\"\r\n [onTop]=\"scrollTopPosition() <= 0\"\r\n [isMobile]=\"isMobile()!\"\r\n [drawerEnabled]=\"drawerConfig()?.enable! && drawerConfig()?.open!\"\r\n [navbarEnabled]=\"navbarConfig()?.enable!\"\r\n [bottomBarEnabled]=\"bottomBarConfig()?.enable!\"\r\n (floatingButtonConfigUpdateEvent)=\"floatingButtonConfigUpdated($event)\"\r\n (floatingButtonClickEvent)=\"floatingButtonClicked($event)\"></lf-floating-button>\r\n </div>\r\n <!-- footer -->\r\n <lf-footer [libraryConfig]=\"libraryConfig\" [footerConfig]=\"footerConfig()\"></lf-footer>\r\n </lf-drawer>\r\n </div>\r\n <!-- bottom bar -->\r\n <lf-bottom-bar\r\n [libraryConfig]=\"libraryConfig\"\r\n [bottomBarConfig]=\"bottomBarConfig()\"\r\n [isMobile]=\"isMobile()! && navbarConfig()?.enable!\"\r\n [navbarEnabled]=\"navbarConfig()?.enable!\"\r\n (bottomBarCloseClickEvent)=\"bottomBarCloseClicked($event)\"\r\n (bottomBarButtonClickEvent)=\"bottomBarButtonClicked($event)\"></lf-bottom-bar>\r\n</div>\r\n","\r\nimport { ChangeDetectionStrategy, Component, computed, inject, input, linkedSignal, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-color-picker',\r\n templateUrl: './color-picker.component.html',\r\n styleUrls: ['./color-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule\n]\r\n})\r\nexport class ColorPickerComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn' | string>('primary');\r\n public readonly label = input<string>();\r\n public readonly matIcon = input<string>();\r\n public readonly disabled = input<boolean>(false);\r\n public readonly tooltip = input<string>();\r\n\r\n public readonly colorChangeEvent = output<string>();\r\n\r\n public selectedColor = linkedSignal<string>(() => {\r\n const color: 'primary' | 'accent' | 'warn' | string = this.color();\r\n if (color && color !== 'primary' && color !== 'accent' && color !== 'warn') {\r\n return color;\r\n }\r\n\r\n return '';\r\n });\r\n public labelColor = computed<string>(() => {\r\n const hex = this.selectedColor().replace('#', '');\r\n\r\n const r = parseInt(hex.substr(0, 2), 16);\r\n const g = parseInt(hex.substr(2, 2), 16);\r\n const b = parseInt(hex.substr(4, 2), 16);\r\n\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n\r\n return brightness > 128 ? '#000000' : '#ffffff';\r\n });\r\n\r\n\r\n public selectColor(event: string): void {\r\n this.selectedColor.set(event);\r\n this.colorChangeEvent.emit(event);\r\n }\r\n}\r\n","<input\r\n style=\"opacity: 0; position: absolute; width: 0; height: 36px; border: none\"\r\n #colorPicker\r\n type=\"color\"\r\n onclick=\"this.value = null\"\r\n [ngModel]=\"selectedColor()\"\r\n (ngModelChange)=\"selectColor($event)\" />\r\n\r\n<button\r\n mat-flat-button\r\n class=\"lf-button\"\r\n type=\"button\"\r\n [color]=\"selectedColor() ? null : color()\"\r\n [style.background]=\"selectedColor()\"\r\n [style.color]=\"labelColor()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"colorPicker.click()\"\r\n [matTooltip]=\"tooltip()\">\r\n <!-- icon -->\r\n @if (matIcon()) {\r\n <mat-icon>\r\n {{ matIcon() }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n {{ label() }}\r\n</button>\r\n","\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\nimport { Logger } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-file-upload',\r\n templateUrl: './file-upload.component.html',\r\n styleUrls: ['./file-upload.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule\n]\r\n})\r\nexport class FileUploadComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private logger: Logger = inject(Logger);\r\n\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn'>('primary');\r\n public readonly label = input<string>();\r\n public readonly matIcon = input<string>();\r\n // @Input() public loading: boolean;\r\n public readonly disabled = input<boolean>(false);\r\n public readonly accept = input<string>();\r\n public readonly tooltip = input<string>();\r\n\r\n public readonly fileChangeEvent = output<File>();\r\n\r\n\r\n public selectFile(event: Event): void {\r\n const input: HTMLInputElement = event.target as HTMLInputElement;\r\n\r\n if (!input || !input.files) return;\r\n const file: File = input.files[0];\r\n\r\n if (!file) return;\r\n\r\n this.logger.log('[FileUploadComponent]', file);\r\n this.fileChangeEvent.emit(file);\r\n }\r\n}\r\n","<input\r\n hidden\r\n #file\r\n type=\"file\"\r\n [accept]=\"accept()\"\r\n onclick=\"this.value = null\"\r\n (change)=\"selectFile($event)\" />\r\n\r\n<button\r\n mat-flat-button\r\n class=\"lf-button\"\r\n type=\"button\"\r\n [color]=\"color()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"file.click()\"\r\n [matTooltip]=\"tooltip()\">\r\n <!-- icon -->\r\n @if (matIcon()) {\r\n <mat-icon>\r\n {{ matIcon() }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n <!-- } -->\r\n {{ label() }}\r\n <!-- </span> -->\r\n</button>\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemAvatar]'\r\n})\r\nexport class ListItemAvatarDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemButtons]'\r\n})\r\nexport class ListItemButtonsDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemSubtitle]'\r\n})\r\nexport class ListItemSubtitleDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemTitle]'\r\n})\r\nexport class ListItemTitleDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { CdkDragDrop, DragDropModule, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { NgClass, NgTemplateOutlet, KeyValuePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, contentChild, inject, input, model, OnChanges, OnInit, output, signal, SimpleChanges } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ListItemAvatarDirective, ListItemButtonsDirective, ListItemSubtitleDirective, ListItemTitleDirective } from '../../../directives';\r\nimport { Button, ListConfig, ListHeader, ListItem, ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-list',\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n FormsModule,\n DragDropModule,\n MatButtonModule,\n MatCheckboxModule,\n MatRippleModule,\n MatIconModule,\n MatTooltipModule,\n MatDividerModule,\n KeyValuePipe,\n NgClass,\n NgTemplateOutlet\n]\r\n})\r\nexport class ListComponent implements OnInit, OnChanges {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n public readonly avatarTemplate = contentChild(ListItemAvatarDirective);\r\n public readonly titleTemplate = contentChild(ListItemTitleDirective);\r\n public readonly subtitleTemplate = contentChild(ListItemSubtitleDirective);\r\n public readonly buttonsTemplate = contentChild(ListItemButtonsDirective);\r\n\r\n public readonly config = input<ListConfig | null>(null);\r\n public readonly header = input<ListHeader | null>(null);\r\n public readonly items = input<ListItem[]>([]);\r\n public readonly groupedItems = input<Map<string, ListItem[]>>(new Map());\r\n public readonly buttons = input<Button[]>([]);\r\n\r\n public readonly dropListId = input<string>();\r\n public readonly connectedDropListIds = input<string[]>();\r\n\r\n public readonly sortChangeEvent = output<{\r\n sortToken: string;\r\n sortAsc: boolean;\r\n}>();\r\n public readonly selectionChangeEvent = output<ListItem[]>();\r\n public readonly itemClickEvent = output<ListItem>();\r\n public readonly itemDropEvent = output<{\r\n items: ListItem[];\r\n id: string;\r\n}>();\r\n public readonly buttonClickEvent = output<{\r\n buttonId: string;\r\n item: ListItem;\r\n}>();\r\n\r\n\r\n public sortToken = signal<string>('');\r\n public sortAsc = signal<boolean>(true);\r\n public allSelected = model<boolean>(false);\r\n\r\n get someSelected(): boolean {\r\n return this.items().length > 0 && this.items().some((item: ListItem) => item.checked) && !this.allSelected();\r\n }\r\n\r\n get hasAvatars(): boolean {\r\n return !!this.items()?.some((item: ListItem) => (item.avatar || item.matIcon || item.svgIcon));\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n const config = this.config();\r\n if (config) {\r\n this.sortToken.set(config.initialSortToken || '');\r\n this.sortAsc.set(config.initialSortAsc || false);\r\n this.updateSortToken(this.sortToken(), true);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['items']) {\r\n this.allSelected.set(this.items().length > 0 && this.items().every((item: ListItem) => item.checked));\r\n }\r\n }\r\n\r\n\r\n // Update the sort token\r\n public updateSortToken(sortToken: string | undefined, initial?: boolean): void {\r\n if (!sortToken) return;\r\n if (this.sortToken() === sortToken && !initial) this.sortAsc.set(!this.sortAsc());\r\n this.sortToken.set(sortToken);\r\n this.sortChangeEvent.emit({ sortToken: this.sortToken(), sortAsc: this.sortAsc() });\r\n }\r\n\r\n // Select all items\r\n public selectAll(event: MatCheckboxChange): void {\r\n this.allSelected.set(event.checked);\r\n\r\n this.items().forEach((item: ListItem) => {\r\n if (!item.disabled) item.checked = this.allSelected();\r\n });\r\n\r\n this.selectionChangeEvent.emit(this.items());\r\n }\r\n\r\n // Select single item\r\n public selectItem(item: ListItem, event: MatCheckboxChange): void {\r\n if (this.config()?.disableMultiselect) this.items().forEach((item: ListItem) => { item.checked = false; });\r\n this.allSelected.set(this.items().length > 0 && this.items().every((item: ListItem) => item.checked));\r\n item.checked = event.checked;\r\n this.selectionChangeEvent.emit([item]);\r\n }\r\n\r\n // Handle item click events\r\n public clickItem(item: ListItem, click: Event): void {\r\n this.stopPropagation(click);\r\n this.itemClickEvent.emit(item)\r\n }\r\n\r\n // Handle item drop events\r\n public dropItem(event: CdkDragDrop<ListItem[]>, id: string): void {\r\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n this.itemDropEvent.emit({ items: event.container.data, id });\r\n }\r\n\r\n // Handle button click events\r\n public clickButton(event: { buttonId: string, item: ListItem }, click: Event): void {\r\n this.stopPropagation(click);\r\n this.buttonClickEvent.emit(event);\r\n }\r\n\r\n // Combine list and item buttons\r\n public getCombinedButtons(item: ListItem): Button[] {\r\n return [...(item.buttons ?? []), ...(this.buttons() ?? [])];\r\n }\r\n\r\n // Handle image errors\r\n public onImageError(event: Event): void {\r\n const target = event.target as HTMLImageElement;\r\n target.src = this.config()?.avatarFallbackPath || '';\r\n }\r\n\r\n // Stop click trough events\r\n public stopPropagation(click: Event): void {\r\n // click.preventDefault();\r\n // click.stopPropagation();\r\n click.stopImmediatePropagation();\r\n }\r\n}\r\n","<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header(); as header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <!-- icon -->\r\n @if (header.matIcon) {\r\n <mat-icon>\r\n {{ header.matIcon }}\r\n </mat-icon>\r\n } @else if (header.svgIcon) {\r\n <mat-icon [svgIcon]=\"header.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken() === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc() ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config()?.enableSelection && !config()?.disableMultiselect) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (config()?.mode === \"group\" && groupedItems()) {\r\n @for (group of groupedItems() | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n @if (group.key) {\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n }\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!config()?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds()!\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"config()?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config()?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId()!\"\r\n cdkDropList\r\n [cdkDropListData]=\"items()\"\r\n [cdkDropListDisabled]=\"!config()?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds()!\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId()!)\"\r\n [class.drop-zone]=\"config()?.enableDragging && items().length <= 0\">\r\n @for (item of items(); track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config()?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n matRipple\r\n [matRippleDisabled]=\"!item.clickable\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (avatarTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"avatarTemplate()!.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <!-- icon -->\r\n @if (item.matIcon) {\r\n <mat-icon>\r\n {{ item.matIcon }}\r\n </mat-icon>\r\n } @else if (item.svgIcon) {\r\n <mat-icon [svgIcon]=\"item.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n @if (titleTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"titleTemplate()!.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.title }}\r\n }\r\n </span>\r\n @if (item.subtitle || subtitleTemplate()) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate()!.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @if (buttonsTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"buttonsTemplate()!.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config()?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n [aria-label]=\"'Drag handle'\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config()?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (config()?.showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n","import { BreakpointState, Breakpoints } from '@angular/cdk/layout';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { map } from 'rxjs';\r\nimport { BreakpointService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-notification',\r\n templateUrl: './notification.component.html',\r\n styleUrls: ['./notification.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatButtonModule,\r\n MatIconModule\r\n ]\r\n})\r\nexport class NotificationComponent {\r\n\r\n private breakpointService = inject(BreakpointService);\r\n\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn'>('primary');\r\n public readonly message = input<string>('');\r\n public readonly link = input<string>('');\r\n public readonly linkText = input<string>('');\r\n public readonly action = input<string>('');\r\n public readonly matIcon = input<string>('');\r\n public readonly svgIcon = input<string>('');\r\n public readonly static = input<boolean>(false);\r\n public readonly minimal = input<boolean>(false);\r\n public readonly cssClass = input<string>('');\r\n\r\n public readonly clickEvent = output();\r\n\r\n public isMobile = toSignal(this.breakpointService.breakpoint$.pipe(map((state: BreakpointState) => state.breakpoints[Breakpoints.XSmall])));\r\n}\r\n","<div\r\n class=\"lf-notification\"\r\n [class.mat-elevation-z2]=\"!static()\"\r\n [class.lf-notification-fixed]=\"!static()\"\r\n [class.lf-notification-static]=\"static()\"\r\n [class.lf-notification-minimal]=\"minimal()\"\r\n [class.lf-mobile]=\"isMobile()\"\r\n [class]=\"[cssClass(), color()]\"\r\n animate.enter=\"lf-anim-scale-enter\">\r\n <div\r\n class=\"lf-notification-content flex-row-nowrap gap-2\"\r\n [class.justify-center]=\"minimal()\"\r\n [class.justify-between]=\"!minimal()\"\r\n [class.flex-col]=\"isMobile()\"\r\n [class.align-center]=\"!isMobile()\"\r\n [class.align-start]=\"isMobile()\">\r\n <span\r\n class=\"lf-notification-message flex-row-nowrap align-center justify-start\"\r\n [class.gap-4]=\"!isMobile()\"\r\n [class.gap-2]=\"isMobile()\">\r\n @if (matIcon()) {\r\n <mat-icon class=\"flex-none\" [color]=\"color()\">{{ matIcon() }}</mat-icon>\r\n }\r\n <span [class.ml-1]=\"!matIcon()\">\r\n {{ message() }}\r\n @if (link() && linkText()) {\r\n <a class=\"lf-notification-link\" [href]=\"link()\">{{ linkText() }}</a>\r\n }\r\n </span>\r\n </span>\r\n\r\n @if (action(); as action) {\r\n <button\r\n mat-flat-button\r\n class=\"lf-notification-action\"\r\n [class.align-self-end]=\"isMobile()\"\r\n [color]=\"color()\"\r\n (click)=\"clickEvent.emit()\">\r\n {{ action }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { PlaceholderConfig, ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-placeholder',\r\n templateUrl: './placeholder.component.html',\r\n styleUrls: ['./placeholder.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n NgClass\n]\r\n})\r\nexport class PlaceholderComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n public readonly placeholderConfig = input<PlaceholderConfig>();\r\n\r\n public readonly buttonClickEvent = output<void>();\r\n}\r\n","@if (placeholderConfig(); as config) {\r\n <div class=\"lf-placeholder\" [ngClass]=\"config.cssClass\">\r\n <!-- icon -->\r\n @if (config.matIcon) {\r\n <mat-icon class=\"lf-placeholder-icon\">\r\n {{ config.matIcon }}\r\n </mat-icon>\r\n } @else if (config.svgIcon) {\r\n <mat-icon class=\"lf-placeholder-icon\" [svgIcon]=\"config.svgIcon\"></mat-icon>\r\n } @else if (config.imgIcon) {\r\n <img\r\n class=\"lf-placeholder-image\"\r\n [src]=\"config.imgIcon\"\r\n width=\"96\"\r\n alt=\"Placeholder image\"\r\n loading=\"lazy\" />\r\n }\r\n <!-- heading -->\r\n @if (config.title) {\r\n <p class=\"lf-placeholder-title mt-2\">\r\n {{ config.title }}\r\n </p>\r\n }\r\n <!-- message -->\r\n @if (config.message) {\r\n <p class=\"lf-placeholder-message mt-1\">\r\n {{ config.message }}\r\n </p>\r\n }\r\n <!-- action -->\r\n @if (config.button) {\r\n <button\r\n mat-button\r\n class=\"mt-4\"\r\n color=\"accent\"\r\n [ngClass]=\"config.button.cssClass\"\r\n [disabled]=\"config.button.disabled\"\r\n (click)=\"buttonClickEvent.emit()\"\r\n [matTooltip]=\"config.button.tooltip\">\r\n <!-- icon -->\r\n @if (config.button.matIcon) {\r\n <mat-icon>\r\n {{ config.button.matIcon }}\r\n </mat-icon>\r\n } @else if (config.button.svgIcon) {\r\n <mat-icon [svgIcon]=\"config.button.svgIcon\"></mat-icon>\r\n }\r\n {{ config.button.label }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","/* eslint-disable no-console */\r\nimport {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest\r\n} from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable, finalize } from 'rxjs';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { Logger, ScaffoldService } from '../services';\r\n\r\n@Injectable()\r\nexport class ScaffoldLoadingInterceptor implements HttpInterceptor {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n private logger = inject(Logger);\r\n\r\n private activeRequests = 0;\r\n private loadingDelay = 100; // milliseconds\r\n private spinnerTimeout: ReturnType<typeof setTimeout>;\r\n\r\n public intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n this.activeRequests++;\r\n\r\n // Set a delayed spinner timeout\r\n if (this.activeRequests === 1) {\r\n this.spinnerTimeout = setTimeout(() => {\r\n this.scaffoldService.updateScaffoldProperty('loading', true);\r\n }, this.loadingDelay);\r\n }\r\n\r\n return next.handle(req).pipe(\r\n // tap({\r\n // next: (event) => {\r\n // if (event instanceof HttpResponse) {\r\n // // Successful response\r\n // }\r\n // },\r\n // error: (error: HttpErrorResponse) => {\r\n // // Handle error if needed\r\n // }\r\n // }),\r\n finalize(() => {\r\n this.activeRequests = Math.max(0, this.activeRequests - 1);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[Interceptor] Request finalized: ${req.url}, Active requests now: ${this.activeRequests}`);\r\n\r\n if (this.activeRequests === 0) {\r\n clearTimeout(this.spinnerTimeout);\r\n this.scaffoldService.updateScaffoldProperty('loading', false);\r\n }\r\n })\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of components\r\n */\r\n\r\n/* CONFIG */\r\nexport * from './lib/scaffold.config';\r\n/* MODELS */\r\nexport * from './lib/models';\r\n/* COMPONENTS */\r\nexport * from './lib/components/scaffold/scaffold.component';\r\nexport * from './lib/shared/components/color-picker/color-picker.component';\r\nexport * from './lib/shared/components/file-upload/file-upload.component';\r\nexport * from './lib/shared/components/list/list.component';\r\nexport * from './lib/shared/components/notification/notification.component';\r\nexport * from './lib/shared/components/placeholder/placeholder.component';\r\n/* DIRECTIVES */\r\nexport * from './lib/directives';\r\n/* SERVICES */\r\nexport * from './lib/services';\r\n/* INTERCEPTORS */\r\nexport * from './lib/interceptors/loading.interceptor';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i4","i5","i6","i7"],"mappings":"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"}
|
package/package.json
CHANGED