@lukfel/ng-scaffold 20.0.21 → 20.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, NgModule, inject, Input, Component, EventEmitter, Output, ChangeDetectorRef, ViewChild, Injectable, DOCUMENT } from '@angular/core';
3
- import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
3
+ import { Title, Meta, BrowserModule } from '@angular/platform-browser';
4
4
  import * as i2$2 from '@angular/router';
5
5
  import { Router, RouteConfigLoadStart, RouteConfigLoadEnd, NavigationEnd, ActivatedRoute, RouterModule } from '@angular/router';
6
6
  import * as i1 from '@angular/common';
@@ -55,7 +55,6 @@ import * as i1$1 from '@angular/forms';
55
55
  import { FormsModule } from '@angular/forms';
56
56
  import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
57
57
  import { distinctUntilChanged, firstValueFrom, BehaviorSubject, take, Subscription, fromEvent, debounceTime, finalize } from 'rxjs';
58
- import { Title, Meta } from '@angular/platform-browser';
59
58
  import * as i2$4 from '@angular/cdk/scrolling';
60
59
 
61
60
  const CONFIG = new InjectionToken('config');
@@ -405,12 +404,12 @@ class InputComponent {
405
404
  this.dialogRef = inject(MatDialogRef, { optional: true });
406
405
  this.config = inject(MAT_DIALOG_DATA, { optional: true });
407
406
  this.cd = inject(ChangeDetectorRef);
407
+ this.input = null;
408
408
  this.inputConfig = {};
409
409
  this.isMobile = false;
410
410
  this.inputSubmitEvent = new EventEmitter();
411
411
  this.inputChangeEvent = new EventEmitter();
412
412
  this.inputPrefixActionEvent = new EventEmitter();
413
- this.input = null;
414
413
  this.inputValue = '';
415
414
  }
416
415
  ngOnInit() {
@@ -453,7 +452,10 @@ class InputComponent {
453
452
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: InputComponent, decorators: [{
454
453
  type: Component,
455
454
  args: [{ selector: 'lf-input', standalone: true, imports: [SharedModule], template: "@if (inputConfig) {\r\n <mat-form-field class=\"lf-input\" appearance=\"fill\" [class.lf-hide-hint]=\"!inputConfig.hint\">\r\n <mat-label>{{ inputConfig.label || \"Search\" }}</mat-label>\r\n @if (inputConfig.hint) {\r\n <mat-hint>{{ inputConfig.hint }}</mat-hint>\r\n }\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n [disabled]=\"inputConfig.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 (inputConfig.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 {{ inputConfig.matIconSubmit }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n}\r\n", styles: [".lf-input{width:100%}.lf-input ::ng-deep .mdc-text-field{border-radius:28px!important}.lf-input ::ng-deep .mdc-line-ripple:after{border-bottom-width:0!important}.lf-input ::ng-deep .mdc-line-ripple:before{border-bottom-width:0!important}.lf-input .lf-input-close-button{color:#808080cc}.lf-input.lf-hide-hint ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none!important}\n"] }]
456
- }], propDecorators: { inputConfig: [{
455
+ }], propDecorators: { input: [{
456
+ type: ViewChild,
457
+ args: ['input']
458
+ }], inputConfig: [{
457
459
  type: Input
458
460
  }], isMobile: [{
459
461
  type: Input
@@ -463,9 +465,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
463
465
  type: Output
464
466
  }], inputPrefixActionEvent: [{
465
467
  type: Output
466
- }], input: [{
467
- type: ViewChild,
468
- args: ['input']
469
468
  }] } });
470
469
 
471
470
  class HeaderComponent {
@@ -1326,12 +1325,12 @@ class ScaffoldModule {
1326
1325
  ContentTitleCardComponent,
1327
1326
  FloatingButtonComponent,
1328
1327
  ConfirmDialogComponent,
1329
- BottomBarComponent], imports: [BrowserAnimationsModule,
1328
+ BottomBarComponent], imports: [BrowserModule,
1330
1329
  RouterModule,
1331
1330
  SharedModule,
1332
1331
  InputComponent,
1333
1332
  IconComponent], exports: [ScaffoldComponent] }); }
1334
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ScaffoldModule, imports: [BrowserAnimationsModule,
1333
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ScaffoldModule, imports: [BrowserModule,
1335
1334
  RouterModule,
1336
1335
  SharedModule,
1337
1336
  InputComponent,
@@ -1353,7 +1352,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
1353
1352
  BottomBarComponent
1354
1353
  ],
1355
1354
  imports: [
1356
- BrowserAnimationsModule,
1355
+ BrowserModule,
1357
1356
  RouterModule,
1358
1357
  SharedModule,
1359
1358
  InputComponent,
@@ -1431,7 +1430,7 @@ class ListComponent {
1431
1430
  this.header = null;
1432
1431
  this.items = [];
1433
1432
  this.buttons = [];
1434
- // @Input() public avatarFallbackPath?: string;
1433
+ this.showDividers = false;
1435
1434
  this.sortChangeEvent = new EventEmitter();
1436
1435
  this.selectionChangeEvent = new EventEmitter();
1437
1436
  this.itemClickEvent = new EventEmitter();
@@ -1459,7 +1458,6 @@ class ListComponent {
1459
1458
  this.sortChangeEvent.emit({ sortToken: this.sortToken, sortAsc: this.sortAsc });
1460
1459
  }
1461
1460
  selectAll(event) {
1462
- // this.items.filter((item: ListItem) => !item.disabled).forEach((item: ListItem) => (item.checked = event.checked));
1463
1461
  this.items.forEach((item) => {
1464
1462
  if (!item.disabled)
1465
1463
  item.checked = event.checked;
@@ -1473,18 +1471,26 @@ class ListComponent {
1473
1471
  const selected = this.items.filter((item) => item.checked);
1474
1472
  this.selectionChangeEvent.emit(selected);
1475
1473
  }
1474
+ onImageError(event) {
1475
+ const target = event.target;
1476
+ target.src = this.avatarFallbackPath || '';
1477
+ }
1476
1478
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1477
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.5", type: ListComponent, isStandalone: true, selector: "lf-list", inputs: { header: "header", items: "items", buttons: "buttons" }, outputs: { sortChangeEvent: "sortChangeEvent", selectionChangeEvent: "selectionChangeEvent", itemClickEvent: "itemClickEvent", buttonClickEvent: "buttonClickEvent" }, ngImport: i0, template: "<!-- lf-list.component.html -->\r\n<div class=\"lf-table\">\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-table-item lf-table-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" />\r\n <!-- (error)=\"onImageError($event)\" -->\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-table-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-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-table-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-table-item-buttons\"></div>\r\n\r\n <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [checked]=\"allSelected && !someSelected\"\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 <!-- Items -->\r\n @for (item of items; track item.id) {\r\n <div\r\n class=\"lf-table-item lf-table-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <img [src]=\"item.avatar\" [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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"item.matIcon\" [svgIcon]=\"item.svgIcon\"></lf-icon>\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-item-title-wrapper px-2\">\r\n <span\r\n class=\"lf-table-item-title\"\r\n (click)=\"item.clickable && !item.disabled ? itemClickEvent.emit(item) : null\">\r\n <span>{{ item.title }}</span>\r\n </span>\r\n @if (item.subtitle) {\r\n <span class=\"lf-table-item-subtitle\">{{ item.subtitle }}</span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-table-item-buttons\">\r\n @let combinedButtons = getCombinedActions(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtons?.includes(button.id)) {\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 (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"button.disabled || item.disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-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-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"!button.disabled && !item.disabled ? button.cssClass : ''\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"button.disabled || item.disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n <!-- [color]=\"button.color\" -->\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n (ngModelChange)=\"selectItem()\"\r\n [disabled]=\"item.disabled!\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".lf-table{width:100%}.lf-table-item{width:100%;display:flex;flex-flow:row nowrap;align-items:center;justify-content:center;height:72px;border-radius:4px;box-sizing:border-box}.lf-table-item.disabled .lf-table-item-title-wrapper{opacity:.64}.lf-table-item.clickable .lf-table-item-title{cursor:pointer}.lf-table-item .lf-table-item-sort-icon{font-size:16px;width:16px;height:16px;vertical-align:text-top}.lf-table-item .lf-table-item-checkbox{flex:0 0 40px}.lf-table-item .lf-table-item-avatar{flex:0 0 48px;display:flex;align-items:center;justify-content:center}.lf-table-item .lf-table-item-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover;background-color:#fff}.lf-table-item .lf-table-item-title-wrapper{display:flex;flex-flow:column;flex:1 1 200px;overflow:hidden}.lf-table-item .lf-table-item-title-wrapper .lf-table-item-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lf-table-item .lf-table-item-title-wrapper .lf-table-item-subtitle{font-size:.8rem}.lf-table-item .lf-table-item-buttons{flex:0 0 auto;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.lf-table-item.lf-table-item-header{font-weight:500}.lf-table-item.lf-table-item-header .lf-table-item-title-wrapper span{width:80px}.lf-table-item.lf-table-item-data:hover{background-color:#00000014}.lf-table-item .clickable{cursor:pointer}.lf-table-item .flex-row{display:flex!important;flex-flow:row nowrap;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: IconComponent, selector: "lf-icon", inputs: ["matIcon", "svgIcon", "alignMiddle"] }] }); }
1479
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.5", type: ListComponent, isStandalone: true, selector: "lf-list", inputs: { header: "header", items: "items", buttons: "buttons", avatarFallbackPath: "avatarFallbackPath", showDividers: "showDividers" }, outputs: { sortChangeEvent: "sortChangeEvent", selectionChangeEvent: "selectionChangeEvent", itemClickEvent: "itemClickEvent", buttonClickEvent: "buttonClickEvent" }, ngImport: i0, template: "<!-- lf-list.component.html -->\r\n<div class=\"lf-table\">\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-table-item lf-table-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-table-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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-table-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-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-table-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-table-item-buttons\"></div>\r\n\r\n <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [checked]=\"allSelected && !someSelected\"\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 <!-- Items -->\r\n @for (item of items; track item.id) {\r\n <div\r\n class=\"lf-table-item lf-table-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 <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-table-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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"item.matIcon\" [svgIcon]=\"item.svgIcon\"></lf-icon>\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-item-title-wrapper px-2\">\r\n <span\r\n class=\"lf-table-item-title\"\r\n (click)=\"item.clickable && !item.disabled ? itemClickEvent.emit(item) : null\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle) {\r\n <span class=\"lf-table-item-subtitle\">{{ item.subtitle }}</span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-table-item-buttons\">\r\n @let combinedButtons = getCombinedActions(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-bottom-bar-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-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-bottom-bar-button-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n <!-- [color]=\"button.color\" -->\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n (ngModelChange)=\"selectItem()\"\r\n [disabled]=\"item.disabled!\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n @if (showDividers) {\r\n <mat-divider></mat-divider>\r\n }\r\n }\r\n</div>\r\n", styles: [".lf-table{width:100%}.lf-table-item{width:100%;display:flex;flex-flow:row nowrap;align-items:center;justify-content:center;height:72px;border-radius:4px;box-sizing:border-box}.lf-table-item.disabled .lf-table-item-title-wrapper{opacity:.64}.lf-table-item.clickable .lf-table-item-title{cursor:pointer}.lf-table-item .lf-table-item-sort-icon{font-size:16px;width:16px;height:16px;vertical-align:text-top}.lf-table-item .lf-table-item-checkbox{flex:0 0 40px}.lf-table-item .lf-table-item-avatar{flex:0 0 48px;display:flex;align-items:center;justify-content:center}.lf-table-item .lf-table-item-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover;background-color:#fff}.lf-table-item .lf-table-item-title-wrapper{display:flex;flex-flow:column;align-items:flex-start;flex:1 1 200px;overflow:hidden}.lf-table-item .lf-table-item-title-wrapper .lf-table-item-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lf-table-item .lf-table-item-title-wrapper .lf-table-item-subtitle{font-size:.8rem}.lf-table-item .lf-table-item-buttons{flex:0 0 auto;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.lf-table-item.lf-table-item-header{font-weight:500}.lf-table-item.lf-table-item-header .lf-table-item-title-wrapper span{width:80px}.lf-table-item.lf-table-item-data:hover{background-color:#00000014}.lf-table-item .clickable{cursor:pointer}.lf-table-item .flex-row{display:flex!important;flex-flow:row nowrap;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: IconComponent, selector: "lf-icon", inputs: ["matIcon", "svgIcon", "alignMiddle"] }] }); }
1478
1480
  }
1479
1481
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ListComponent, decorators: [{
1480
1482
  type: Component,
1481
- args: [{ selector: 'lf-list', standalone: true, imports: [SharedModule, IconComponent], template: "<!-- lf-list.component.html -->\r\n<div class=\"lf-table\">\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-table-item lf-table-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" />\r\n <!-- (error)=\"onImageError($event)\" -->\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-table-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-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-table-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-table-item-buttons\"></div>\r\n\r\n <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [checked]=\"allSelected && !someSelected\"\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 <!-- Items -->\r\n @for (item of items; track item.id) {\r\n <div\r\n class=\"lf-table-item lf-table-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <img [src]=\"item.avatar\" [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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"item.matIcon\" [svgIcon]=\"item.svgIcon\"></lf-icon>\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-item-title-wrapper px-2\">\r\n <span\r\n class=\"lf-table-item-title\"\r\n (click)=\"item.clickable && !item.disabled ? itemClickEvent.emit(item) : null\">\r\n <span>{{ item.title }}</span>\r\n </span>\r\n @if (item.subtitle) {\r\n <span class=\"lf-table-item-subtitle\">{{ item.subtitle }}</span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-table-item-buttons\">\r\n @let combinedButtons = getCombinedActions(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtons?.includes(button.id)) {\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 (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"button.disabled || item.disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-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-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"!button.disabled && !item.disabled ? button.cssClass : ''\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"button.disabled || item.disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n <!-- [color]=\"button.color\" -->\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n (ngModelChange)=\"selectItem()\"\r\n [disabled]=\"item.disabled!\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".lf-table{width:100%}.lf-table-item{width:100%;display:flex;flex-flow:row nowrap;align-items:center;justify-content:center;height:72px;border-radius:4px;box-sizing:border-box}.lf-table-item.disabled .lf-table-item-title-wrapper{opacity:.64}.lf-table-item.clickable .lf-table-item-title{cursor:pointer}.lf-table-item .lf-table-item-sort-icon{font-size:16px;width:16px;height:16px;vertical-align:text-top}.lf-table-item .lf-table-item-checkbox{flex:0 0 40px}.lf-table-item .lf-table-item-avatar{flex:0 0 48px;display:flex;align-items:center;justify-content:center}.lf-table-item .lf-table-item-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover;background-color:#fff}.lf-table-item .lf-table-item-title-wrapper{display:flex;flex-flow:column;flex:1 1 200px;overflow:hidden}.lf-table-item .lf-table-item-title-wrapper .lf-table-item-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lf-table-item .lf-table-item-title-wrapper .lf-table-item-subtitle{font-size:.8rem}.lf-table-item .lf-table-item-buttons{flex:0 0 auto;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.lf-table-item.lf-table-item-header{font-weight:500}.lf-table-item.lf-table-item-header .lf-table-item-title-wrapper span{width:80px}.lf-table-item.lf-table-item-data:hover{background-color:#00000014}.lf-table-item .clickable{cursor:pointer}.lf-table-item .flex-row{display:flex!important;flex-flow:row nowrap;align-items:center}\n"] }]
1483
+ args: [{ selector: 'lf-list', standalone: true, imports: [SharedModule, IconComponent], template: "<!-- lf-list.component.html -->\r\n<div class=\"lf-table\">\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-table-item lf-table-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-table-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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-table-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-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-table-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-table-item-buttons\"></div>\r\n\r\n <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [checked]=\"allSelected && !someSelected\"\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 <!-- Items -->\r\n @for (item of items; track item.id) {\r\n <div\r\n class=\"lf-table-item lf-table-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 <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-table-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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"item.matIcon\" [svgIcon]=\"item.svgIcon\"></lf-icon>\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-item-title-wrapper px-2\">\r\n <span\r\n class=\"lf-table-item-title\"\r\n (click)=\"item.clickable && !item.disabled ? itemClickEvent.emit(item) : null\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle) {\r\n <span class=\"lf-table-item-subtitle\">{{ item.subtitle }}</span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-table-item-buttons\">\r\n @let combinedButtons = getCombinedActions(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-bottom-bar-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-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-bottom-bar-button-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n <!-- [color]=\"button.color\" -->\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n (ngModelChange)=\"selectItem()\"\r\n [disabled]=\"item.disabled!\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n @if (showDividers) {\r\n <mat-divider></mat-divider>\r\n }\r\n }\r\n</div>\r\n", styles: [".lf-table{width:100%}.lf-table-item{width:100%;display:flex;flex-flow:row nowrap;align-items:center;justify-content:center;height:72px;border-radius:4px;box-sizing:border-box}.lf-table-item.disabled .lf-table-item-title-wrapper{opacity:.64}.lf-table-item.clickable .lf-table-item-title{cursor:pointer}.lf-table-item .lf-table-item-sort-icon{font-size:16px;width:16px;height:16px;vertical-align:text-top}.lf-table-item .lf-table-item-checkbox{flex:0 0 40px}.lf-table-item .lf-table-item-avatar{flex:0 0 48px;display:flex;align-items:center;justify-content:center}.lf-table-item .lf-table-item-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover;background-color:#fff}.lf-table-item .lf-table-item-title-wrapper{display:flex;flex-flow:column;align-items:flex-start;flex:1 1 200px;overflow:hidden}.lf-table-item .lf-table-item-title-wrapper .lf-table-item-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lf-table-item .lf-table-item-title-wrapper .lf-table-item-subtitle{font-size:.8rem}.lf-table-item .lf-table-item-buttons{flex:0 0 auto;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.lf-table-item.lf-table-item-header{font-weight:500}.lf-table-item.lf-table-item-header .lf-table-item-title-wrapper span{width:80px}.lf-table-item.lf-table-item-data:hover{background-color:#00000014}.lf-table-item .clickable{cursor:pointer}.lf-table-item .flex-row{display:flex!important;flex-flow:row nowrap;align-items:center}\n"] }]
1482
1484
  }], propDecorators: { header: [{
1483
1485
  type: Input
1484
1486
  }], items: [{
1485
1487
  type: Input
1486
1488
  }], buttons: [{
1487
1489
  type: Input
1490
+ }], avatarFallbackPath: [{
1491
+ type: Input
1492
+ }], showDividers: [{
1493
+ type: Input
1488
1494
  }], sortChangeEvent: [{
1489
1495
  type: Output
1490
1496
  }], selectionChangeEvent: [{
@@ -1 +1 @@
1
- {"version":3,"file":"lukfel-ng-scaffold.mjs","sources":["../../../projects/ng-scaffold/src/lib/config/config.token.ts","../../../projects/ng-scaffold/src/lib/shared/modules/material.module.ts","../../../projects/ng-scaffold/src/lib/shared/shared.module.ts","../../../projects/ng-scaffold/src/lib/shared/components/icon/icon.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/icon/icon.component.html","../../../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/services/breakpoint.service.ts","../../../projects/ng-scaffold/src/lib/shared/components/dialogs/confirm-dialog/confirm-dialog.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/dialogs/confirm-dialog/confirm-dialog.component.html","../../../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/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/scaffold/scaffold.component.ts","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.html","../../../projects/ng-scaffold/src/lib/scaffold.module.ts","../../../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/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/shared/components/list/list.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.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 { InjectionToken } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\n\r\nexport const CONFIG = new InjectionToken<ScaffoldLibraryConfig>('config');","import { PortalModule } from '@angular/cdk/portal';\r\nimport { NgModule } from '@angular/core';\r\n\r\n//Angular Material Components\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n declarations: [],\r\n exports: [\r\n MatCheckboxModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatExpansionModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatRippleModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n PortalModule\r\n ],\r\n providers: [],\r\n bootstrap: []\r\n})\r\nexport class MaterialModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { MaterialModule } from './modules/material.module';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MaterialModule\r\n ],\r\n exports: [\r\n CommonModule,\r\n FormsModule,\r\n MaterialModule\r\n ]\r\n})\r\nexport class SharedModule { }\r\n","import { Component, inject, Input } from '@angular/core';\r\nimport { CONFIG } from '../../../config/config.token';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\r\n\r\n@Component({\r\n selector: 'lf-icon',\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss'],\r\n standalone: true,\r\n imports: [SharedModule]\r\n})\r\nexport class IconComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n @Input() public matIcon: string | undefined;\r\n @Input() public svgIcon: string | undefined;\r\n @Input() public alignMiddle: boolean = false;\r\n}\r\n","<!-- mat icon -->\r\n@if (matIcon) {\r\n <mat-icon\r\n class=\"lf-icon\"\r\n [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\"\r\n [class.lf-icon-align-middle]=\"alignMiddle\">\r\n {{ matIcon }}\r\n </mat-icon>\r\n <!-- svg icon -->\r\n} @else if (svgIcon) {\r\n <mat-icon\r\n class=\"lf-icon\"\r\n [svgIcon]=\"svgIcon\"\r\n [class.lf-icon-align-middle]=\"alignMiddle\"></mat-icon>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\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 standalone: false\r\n})\r\nexport class BottomBarComponent {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public bottomBarConfig: BottomBarConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public navbarEnabled: boolean = false;\r\n\r\n @Output() public bottomBarCloseClickEvent = new EventEmitter<string>();\r\n @Output() public bottomBarButtonClickEvent = new EventEmitter<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 && bottomBarConfig.enable) {\r\n <div\r\n class=\"lf-bottom-bar px-4\"\r\n [ngClass]=\"bottomBarConfig.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 (bottomBarConfig.closeButtonId) {\r\n <button mat-icon-button (click)=\"closeClicked(bottomBarConfig.closeButtonId)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (bottomBarConfig.message) {\r\n <span class=\"ml-2\">{{ bottomBarConfig.message }}</span>\r\n }\r\n @if (bottomBarConfig.buttons) {\r\n <div class=\"lf-bottom-bar-buttons ml-4\">\r\n @for (button of bottomBarConfig.buttons; track button.id) {\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 (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-icon>\r\n }\r\n {{ button.label }}\r\n </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 (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\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 standalone: false\r\n})\r\nexport class ContentTitleCardComponent {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public contentTitleCardConfig: ContentTitleCardConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public routeHistory: string[] = [];\r\n\r\n @Output() public backButtonClickEvent = new EventEmitter<void>();\r\n\r\n\r\n public inputValue: string = '';\r\n\r\n public backButtonClicked(): void {\r\n this.backButtonClickEvent.emit();\r\n }\r\n\r\n}\r\n","@if (contentTitleCardConfig && contentTitleCardConfig.enable) {\r\n <mat-card\r\n class=\"lf-content-title-card mat-elevation-z2 px-4\"\r\n [ngClass]=\"contentTitleCardConfig.cssClass\">\r\n <!-- back button -->\r\n @if (contentTitleCardConfig.showBackButton && routeHistory.length > 1) {\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 style=\"flex: 1 1 auto\"></div>\r\n <!-- label -->\r\n <span class=\"lf-content-title-card-label\">\r\n {{ contentTitleCardConfig.label || \"\" }}\r\n </span>\r\n <!-- spacer -->\r\n <div style=\"flex: 1 1 auto\"></div>\r\n <!-- empty button spacer -->\r\n <div\r\n [style.width]=\"\r\n contentTitleCardConfig.showBackButton && routeHistory.length > 1 ? '48px' : '0px'\r\n \"></div>\r\n </mat-card>\r\n}\r\n","import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Component, Input, OnInit } from '@angular/core';\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 standalone: false\r\n})\r\nexport class DrawerComponent implements OnInit {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public drawerConfig: DrawerConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public fixedOffset: number = 0;\r\n @Input() public drawerPortal: ComponentPortal<unknown> | TemplatePortal<unknown> | null;\r\n\r\n\r\n ngOnInit(): void {\r\n // Avoid initializing an open drawer on mobile\r\n if (this.isMobile && this.drawerConfig?.enable && this.drawerConfig?.open) {\r\n this.drawerConfig.open = false;\r\n }\r\n }\r\n\r\n // Detect when the drawer is closed without clicking a button\r\n public onDrawerClosed(): void {\r\n if (this.drawerConfig) this.drawerConfig.open = false;\r\n }\r\n\r\n}\r\n","@if (drawerConfig && drawerConfig.enable) {\r\n <mat-sidenav-container class=\"lf-drawer-container\" [ngClass]=\"drawerConfig.cssClass\">\r\n <!-- drawer -->\r\n <mat-sidenav\r\n class=\"lf-drawer mat-elevation-z2\"\r\n [mode]=\"isMobile ? 'over' : 'side'\"\r\n [opened]=\"drawerConfig.open\"\r\n [autoFocus]=\"false\"\r\n [fixedInViewport]=\"drawerConfig.fixed\"\r\n [fixedTopGap]=\"fixedOffset\"\r\n (closed)=\"onDrawerClosed()\"\r\n #drawer>\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>\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\r\n<!-- render content without drawer -->\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 { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\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 standalone: false\r\n})\r\nexport class FloatingButtonComponent implements OnInit {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public floatingButtonConfig: FloatingButtonConfig | null = null;\r\n @Input() public onTop: boolean = false;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public bottomBarEnabled: boolean = false;\r\n\r\n @Output() public floatingButtonClickEvent = new EventEmitter<string>();\r\n\r\n\r\n private readonly DEFAULT_OFFSET: number = 24;\r\n private navbarOffset: number = 64;\r\n private bottomBarOffset: number = 56;\r\n\r\n\r\n ngOnInit(): void {\r\n if (this.floatingButtonConfig) {\r\n if (!this.floatingButtonConfig.horizontalPosition) {\r\n this.floatingButtonConfig.horizontalPosition = 'right';\r\n }\r\n\r\n if (!this.floatingButtonConfig.matIcon && !this.floatingButtonConfig?.svgIcon) {\r\n this.floatingButtonConfig.matIcon = 'arrow_upward';\r\n }\r\n\r\n if (!this.floatingButtonConfig.bottomPositionPx) {\r\n this.floatingButtonConfig.bottomPositionPx = this.DEFAULT_OFFSET;\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 public getBottomPosition(): number {\r\n let bottomPosition: number = this.floatingButtonConfig?.bottomPositionPx || this.DEFAULT_OFFSET;\r\n\r\n if (this.isMobile) {\r\n bottomPosition += this.navbarOffset;\r\n }\r\n\r\n if (this.bottomBarEnabled) {\r\n bottomPosition += this.bottomBarOffset;\r\n }\r\n\r\n return bottomPosition;\r\n }\r\n\r\n}\r\n","@if (\r\n floatingButtonConfig && floatingButtonConfig.enable && (!floatingButtonConfig.autoHide || !onTop)\r\n) {\r\n <button\r\n mat-fab\r\n color=\"accent\"\r\n class=\"lf-floating-button\"\r\n [style.bottom]=\"getBottomPosition() + 'px'\"\r\n [ngClass]=\"floatingButtonConfig.cssClass\"\r\n [ngClass]=\"floatingButtonConfig.horizontalPosition\"\r\n [extended]=\"!!floatingButtonConfig.label\"\r\n (click)=\"buttonClicked(floatingButtonConfig.id)\"\r\n [matTooltip]=\"floatingButtonConfig.tooltip!\">\r\n <!-- mat icon -->\r\n @if (floatingButtonConfig.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ floatingButtonConfig.matIcon }}\r\n </mat-icon>\r\n } @else {\r\n @if (floatingButtonConfig.svgIcon) {\r\n <mat-icon [svgIcon]=\"floatingButtonConfig.svgIcon!\"></mat-icon>\r\n }\r\n }\r\n <!-- svg icon -->\r\n <!-- label -->\r\n @if (floatingButtonConfig.label) {\r\n <span class=\"lf-floating-button-label\">\r\n {{ floatingButtonConfig.label }}\r\n </span>\r\n }\r\n </button>\r\n}\r\n","import { Component, Input } from '@angular/core';\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 standalone: false\r\n})\r\nexport class FooterComponent {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public footerConfig: FooterConfig | null = null;\r\n\r\n}\r\n","@if (footerConfig && footerConfig.enable) {\r\n <mat-card class=\"lf-footer mat-elevation-z2 p-4\" [ngClass]=\"footerConfig.cssClass\">\r\n <!-- svg logo -->\r\n @if (footerConfig.svgLogo) {\r\n <mat-icon\r\n class=\"lf-footer-logo mb-4\"\r\n color=\"primary\"\r\n [svgIcon]=\"footerConfig.svgLogo!\"></mat-icon>\r\n } @else {\r\n @if (footerConfig.imgLogo) {\r\n <img class=\"lf-footer-logo mb-4\" [src]=\"footerConfig.imgLogo\" alt=\"Logo\" />\r\n }\r\n }\r\n <!-- img logo -->\r\n <!-- links -->\r\n @if (footerConfig.links) {\r\n <div class=\"lf-footer-links mb-4\">\r\n @for (link of footerConfig.links; track link; let i = $index) {\r\n <div class=\"lf-footer-link\" [class.mr-2]=\"i < footerConfig.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 (footerConfig.copyright) {\r\n <span class=\"lf-footer-copyright\">\r\n {{ footerConfig.copyright }}\r\n </span>\r\n }\r\n </mat-card>\r\n}\r\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { HeaderInputConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\r\n\r\n@Component({\r\n selector: 'lf-input',\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n standalone: true,\r\n imports: [SharedModule]\r\n})\r\nexport class InputComponent implements OnInit, AfterViewInit, OnDestroy {\r\n private dialogRef = inject<MatDialogRef<InputComponent>>(MatDialogRef, { optional: true });\r\n private config = inject<HeaderInputConfig>(MAT_DIALOG_DATA, { optional: true });\r\n private cd = inject(ChangeDetectorRef);\r\n\r\n\r\n @Input() public inputConfig: HeaderInputConfig = {};\r\n @Input() public isMobile: boolean = false;\r\n\r\n @Output() public inputSubmitEvent = new EventEmitter<string>();\r\n @Output() public inputChangeEvent = new EventEmitter<string>();\r\n @Output() public inputPrefixActionEvent = new EventEmitter<void>();\r\n\r\n @ViewChild('input') public input: ElementRef = null!;\r\n\r\n public inputValue: string = '';\r\n\r\n ngOnInit(): void {\r\n if (this.config) {\r\n this.inputConfig = this.config;\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.input && this.inputConfig.autoFocus) {\r\n this.input.nativeElement.focus();\r\n this.cd.detectChanges();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.inputValue = '';\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 = '';\r\n this.inputChangeEvent.emit(this.inputValue);\r\n }\r\n}\r\n","@if (inputConfig) {\r\n <mat-form-field class=\"lf-input\" appearance=\"fill\" [class.lf-hide-hint]=\"!inputConfig.hint\">\r\n <mat-label>{{ inputConfig.label || \"Search\" }}</mat-label>\r\n @if (inputConfig.hint) {\r\n <mat-hint>{{ inputConfig.hint }}</mat-hint>\r\n }\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n [disabled]=\"inputConfig.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 (inputConfig.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 {{ inputConfig.matIconSubmit }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { HeaderConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n standalone: false\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public headerConfig: HeaderConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public routeLoading: boolean = false;\r\n @Input() public currentRoute: string;\r\n\r\n @Output() public headerButtonClickEvent = new EventEmitter<string>();\r\n @Output() public headerInputSubmitEvent = new EventEmitter<string>();\r\n @Output() public headerInputChangeEvent = new EventEmitter<string>();\r\n\r\n\r\n ngOnInit(): void {\r\n // Avoid initializing the header with an open input field on mobile\r\n if (this.isMobile && this.headerConfig?.inputConfig?.enable) {\r\n this.headerConfig.inputConfig.enable = false;\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 isActive(id: string): boolean {\r\n if (!id || !this.currentRoute) {\r\n return false;\r\n }\r\n\r\n const route: string = this.currentRoute.substring(this.currentRoute.indexOf('/') + 1);\r\n return route === id;\r\n }\r\n\r\n}\r\n","@if (headerConfig && headerConfig.enable) {\r\n <mat-toolbar\r\n class=\"lf-header mat-elevation-z3\"\r\n [class.px-4]=\"!isMobile\"\r\n [class.px-1]=\"isMobile\"\r\n [ngClass]=\"headerConfig.cssClass\"\r\n color=\"primary\">\r\n <!-- left menu button -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: headerConfig.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]=\"headerConfig.leftMenuButton && !isMobile\">\r\n <!-- link wrapper -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper-link\"\r\n [class.lf-clickable]=\"headerConfig.titleRouterLink\"\r\n [routerLink]=\"headerConfig.titleRouterLink ? [headerConfig.titleRouterLink] : null\">\r\n <!-- svg logo -->\r\n @if (headerConfig.svgLogo) {\r\n <mat-icon\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"headerConfig.title\"\r\n [svgIcon]=\"headerConfig.svgLogo!\"></mat-icon>\r\n } @else {\r\n @if (headerConfig.imgLogo) {\r\n <img\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"headerConfig.title\"\r\n [src]=\"headerConfig.imgLogo\"\r\n alt=\"Logo\" />\r\n }\r\n }\r\n <!-- img logo -->\r\n <!-- title -->\r\n @if (headerConfig.title) {\r\n <div class=\"lf-header-title-wrapper\">\r\n @if (headerConfig.title) {\r\n <span class=\"lf-header-title\">\r\n {{ headerConfig.title }}\r\n </span>\r\n }\r\n @if (headerConfig.subtitle) {\r\n <span class=\"lf-header-subtitle\">\r\n {{ headerConfig.subtitle }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- input -->\r\n @if (headerConfig.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]=\"headerConfig.inputConfig!\"\r\n [isMobile]=\"isMobile\"\r\n (inputSubmitEvent)=\"inputSubmitted($event)\"\r\n (inputChangeEvent)=\"inputChanged($event)\"\r\n (inputPrefixActionEvent)=\"headerConfig.inputConfig!.enable = false\"></lf-input>\r\n }\r\n <!-- spacer -->\r\n <div class=\"spacer\"></div>\r\n <!-- right menu buttons -->\r\n @for (button of headerConfig.rightMenuButtons; track button) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n </mat-toolbar>\r\n <!-- loading bar -->\r\n @if (headerConfig.loading || (headerConfig.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<!-- header menu button -->\r\n<ng-template #menuButtonTemplate let-menuButton=\"menuButton\" let-hideLabel=\"hideLabel\">\r\n @if (menuButton) {\r\n <!-- icon button -->\r\n @if ((menuButton.matIcon || menuButton.svgIcon) && (!menuButton.label || hideLabel)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-header-menu-button\"\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 [attr.aria-label]=\"menuButton.id\">\r\n <!-- icon -->\r\n <lf-icon [matIcon]=\"menuButton.matIcon\" [svgIcon]=\"menuButton.svgIcon\"></lf-icon>\r\n </button>\r\n } @else {\r\n @if (!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)\"\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 <!-- label -->\r\n {{ menuButton.label }}\r\n </button>\r\n }\r\n }\r\n <!-- text button -->\r\n <!-- menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <!-- label menu buttons -->\r\n @for (button of menuButton.menuButtons; track button) {\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 (click)=\"buttonClicked(button.id)\">\r\n <!-- icon -->\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-icon>\r\n <!-- label -->\r\n @if (button.label) {\r\n <span>{{ button.label }}</span>\r\n }\r\n </button>\r\n }\r\n }\r\n <!-- icon menu buttons -->\r\n <div class=\"lf-menu-icons px-1\">\r\n @for (button of menuButton.menuButtons; track button) {\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 (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n</ng-template>\r\n","import { Component } from '@angular/core';\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 standalone: false\r\n})\r\nexport class LoadingOverlayComponent {\r\n}\r\n","<div class=\"lf-loading-overlay\">\r\n <mat-spinner class=\"lf-loading-spinner\" color=\"accent\" mode=\"indeterminate\"></mat-spinner>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\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 standalone: false\r\n})\r\nexport class NavbarComponent {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public navbarConfig: NavbarConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public currentRoute: string;\r\n\r\n @Output() public navbarButtonClickEvent = new EventEmitter<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.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n public isActive(id: string): boolean {\r\n if (!id || !this.currentRoute) {\r\n return false;\r\n }\r\n\r\n const route: string = this.currentRoute.substring(this.currentRoute.indexOf('/') + 1);\r\n return route === id;\r\n }\r\n\r\n}\r\n","@if (navbarConfig && navbarConfig.enable) {\r\n <div\r\n class=\"mat-app-background mat-elevation-z3\"\r\n [class.lf-navbar]=\"!isMobile\"\r\n [class.lf-navbar-mobile]=\"isMobile\"\r\n [ngClass]=\"navbarConfig.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 navbarConfig.menuButtons; track button; 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 <lf-icon [matIcon]=\"button.matIcon!\" [svgIcon]=\"button.svgIcon!\"></lf-icon>\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) || navbarConfig.showAllLabels\r\n ? button.label\r\n : isMobile\r\n ? \"\"\r\n : \"&nbsp;\"\r\n }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\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 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(\r\n distinctUntilChanged()\r\n );\r\n\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ConfirmDialogConfig } from '../../../../models';\r\n\r\n@Component({\r\n selector: 'lf-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrls: ['./confirm-dialog.component.scss'],\r\n standalone: false\r\n})\r\nexport class ConfirmDialogComponent {\r\n public config = inject<ConfirmDialogConfig>(MAT_DIALOG_DATA);\r\n\r\n}\r\n","@if (config) {\r\n @if (config.title) {\r\n <h2 mat-dialog-title>{{ config.title }}</h2>\r\n }\r\n\r\n <mat-dialog-content>\r\n @if (config.message) {\r\n <p>{{ config.message }}</p>\r\n }\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n @if (config.closeLabel) {\r\n <button mat-button [mat-dialog-close]=\"false\">\r\n {{ config.closeLabel }}\r\n </button>\r\n }\r\n @if (config.confirmLabel) {\r\n <button mat-button color=\"primary\" [mat-dialog-close]=\"true\">\r\n {{ config.confirmLabel }}\r\n </button>\r\n }\r\n </mat-dialog-actions>\r\n}\r\n","import { ComponentType } from '@angular/cdk/portal';\r\nimport { Injectable, TemplateRef, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfirmDialogConfig, HeaderInputConfig } from '../models';\r\nimport { ConfirmDialogComponent } from '../shared/components/dialogs/confirm-dialog/confirm-dialog.component';\r\nimport { InputComponent } from '../shared/components/input/input.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n private matDialog = inject(MatDialog);\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(templateRef: ComponentType<any> | TemplateRef<any>, 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 confirm dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous boolean response\r\n */\r\n public openConfirmDialog(config: ConfirmDialogConfig): Promise<boolean> {\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 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 openInputDialog(config: HeaderInputConfig): Promise<string | undefined> {\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 '../config/config.token';\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 ScaffoldModule.forRoot\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 ScaffoldModule.forRoot\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 ScaffoldModule.forRoot\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 { Injectable, inject } from '@angular/core';\r\nimport { CONFIG } from '../config/config.token';\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 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 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 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 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 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 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 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 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","import { Injectable, 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\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 this.router.events.subscribe(event => {\r\n let asyncLoadCount = 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.getCurrentNavigation()?.extras?.state?.['back']) {\r\n const routeHistory: string[] = this._routeHistory$.value;\r\n routeHistory.push(currentRoute);\r\n\r\n this._routeHistory$.next(routeHistory);\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 > 1) {\r\n const previousRoute: string = routeHistory[routeHistory.length - 2];\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","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 '../config/config.token';\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 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(property: keyof ScaffoldConfig, value: unknown): void {\r\n const currentState: ScaffoldConfig = this._scaffoldConfig$.getValue();\r\n\r\n if (currentState[property] === value) {\r\n return;\r\n }\r\n\r\n const updatedState = { ...currentState, [property]: value };\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, value);\r\n\r\n this._scaffoldConfig$.next(updatedState);\r\n }\r\n}\r\n","\r\nimport { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\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 /**\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 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 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(`${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 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,\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 { Injectable, DOCUMENT, inject } 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 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 { Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\n\r\nimport { Component, DOCUMENT, ElementRef, EventEmitter, inject, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { debounceTime, distinctUntilChanged, fromEvent, Subscription } from 'rxjs';\r\nimport { CONFIG } from '../../config/config.token';\r\nimport { BottomBarConfig, ContentTitleCardConfig, DrawerConfig, FloatingButtonConfig, FooterConfig, HeaderConfig, NavbarConfig, ScaffoldConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { BreakpointService, Logger, RouterService, ScaffoldService } from '../../services';\r\n\r\n@Component({\r\n selector: 'lf-scaffold',\r\n templateUrl: './scaffold.component.html',\r\n styleUrls: ['./scaffold.component.scss'],\r\n standalone: false\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 logger = inject(Logger);\r\n private route = inject(ActivatedRoute);\r\n private document = inject<Document>(DOCUMENT);\r\n\r\n\r\n @ViewChild('scrollContainer', { static: true }) public scrollContainer: ElementRef;\r\n @ViewChild('content', { static: true }) public content: ElementRef;\r\n\r\n @Output() public headerButtonClickEvent = new EventEmitter<string>();\r\n @Output() public headerInputSubmitEvent = new EventEmitter<string>();\r\n @Output() public headerInputChangeEvent = new EventEmitter<string>();\r\n @Output() public navbarButtonClickEvent = new EventEmitter<string>();\r\n @Output() public floatingButtonClickEvent = new EventEmitter<string>();\r\n @Output() public bottomBarButtonClickEvent = new EventEmitter<string>();\r\n\r\n\r\n public scaffoldConfig: ScaffoldConfig | null = null;\r\n public headerConfig: HeaderConfig | null = null;\r\n public navbarConfig: NavbarConfig | null = null;\r\n public drawerConfig: DrawerConfig | null = null;\r\n public drawerPortal: ComponentPortal<unknown> | TemplatePortal<unknown> | null;\r\n public footerConfig: FooterConfig | null = null;\r\n public contentTitleCardConfig: ContentTitleCardConfig | null = null;\r\n public floatingButtonConfig: FloatingButtonConfig | null = null;\r\n public bottomBarConfig: BottomBarConfig | null = null;\r\n\r\n public routeHistory: string[] = [];\r\n public currentRoute: string;\r\n public isMobile: boolean = false;\r\n public routeLoading: boolean = false;\r\n public scrollTopPosition: number = 0;\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 this.scaffoldConfig = scaffoldConfig;\r\n this.headerConfig = this.scaffoldConfig.headerConfig!;\r\n this.navbarConfig = this.scaffoldConfig.navbarConfig!;\r\n this.drawerConfig = this.scaffoldConfig.drawerConfig!;\r\n this.footerConfig = this.scaffoldConfig.footerConfig!;\r\n this.contentTitleCardConfig = this.scaffoldConfig.contentTitleCardConfig!;\r\n this.floatingButtonConfig = this.scaffoldConfig.floatingButtonConfig!;\r\n this.bottomBarConfig = this.scaffoldConfig.bottomBarConfig!;\r\n }));\r\n\r\n // Listen for drawer portal changes\r\n this._subscription.add(this.scaffoldService.drawerPortal$.subscribe((drawerPortal: ComponentPortal<unknown> | TemplatePortal<unknown> | null) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[DrawerPortal]', drawerPortal);\r\n\r\n this.drawerPortal = drawerPortal;\r\n }));\r\n\r\n // Listen for breakpoint changes\r\n this._subscription.add(this.breakpointService.breakpoint$.subscribe((breakpointState: BreakpointState) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[BreakpointState]', breakpointState);\r\n\r\n if (breakpointState.breakpoints[Breakpoints.XSmall]) {\r\n this.isMobile = true;\r\n } else if (breakpointState.breakpoints[Breakpoints.Small]) {\r\n this.isMobile = true;\r\n } else if (breakpointState.breakpoints[Breakpoints.Medium]) {\r\n this.isMobile = false;\r\n } else if (breakpointState.breakpoints[Breakpoints.Large]) {\r\n this.isMobile = false;\r\n }\r\n }));\r\n\r\n // Listen for route changes\r\n this._subscription.add(this.routerService.routeHistory$.subscribe((routeHistory: string[]) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteHistory]', routeHistory);\r\n\r\n if (routeHistory) {\r\n this.routeHistory = routeHistory;\r\n }\r\n\r\n if (this.scrollContainer && this.scaffoldConfig?.scrollPositionRestoration) {\r\n this.scrollContainer.nativeElement.scrollTop = 0;\r\n }\r\n }));\r\n\r\n // Listen for current route changes\r\n this._subscription.add(this.routerService.currentRoute$.subscribe((currentRout: string) => {\r\n this.currentRoute = currentRout\r\n }));\r\n\r\n // Listen for route loading\r\n this._subscription.add(this.routerService.loading$.subscribe((routeLoading: boolean) => {\r\n this.routeLoading = routeLoading\r\n }));\r\n\r\n // Listen to scroll events\r\n if (this.scrollContainer) {\r\n const element: HTMLElement = this.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 = 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\r\n ngOnDestroy(): void {\r\n if (this._subscription) {\r\n this._subscription.unsubscribe();\r\n }\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 public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n public floatingButtonClicked(id: string): void {\r\n if (!id && this.scrollContainer) {\r\n this.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 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","<!-- header-height: 64px; navbar-size: 80px; floating-button-bottom: 24px -->\r\n\r\n<div class=\"lf-scaffold mat-app-background mat-typography\" [ngClass]=\"scaffoldConfig?.cssClass\">\r\n <!-- loading overlay -->\r\n @if (scaffoldConfig?.loading) {\r\n <lf-loading-overlay></lf-loading-overlay>\r\n }\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 (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 #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 [fixedOffset]=\"headerConfig?.enable ? 64 : 0\">\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 </div>\r\n <!-- footer -->\r\n <lf-footer [libraryConfig]=\"libraryConfig\" [footerConfig]=\"footerConfig\"></lf-footer>\r\n </lf-drawer>\r\n </div>\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 && navbarConfig?.enable!\"\r\n [bottomBarEnabled]=\"bottomBarConfig?.enable!\"\r\n (floatingButtonClickEvent)=\"floatingButtonClicked($event)\"></lf-floating-button>\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","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { RouterModule } from '@angular/router';\r\nimport { BottomBarComponent } from './components/bottom-bar/bottom-bar.component';\r\nimport { ContentTitleCardComponent } from './components/content-title-card/content-title-card.component';\r\nimport { DrawerComponent } from './components/drawer/drawer.component';\r\nimport { FloatingButtonComponent } from './components/floating-button/floating-button.component';\r\nimport { FooterComponent } from './components/footer/footer.component';\r\nimport { HeaderComponent } from './components/header/header.component';\r\nimport { LoadingOverlayComponent } from './components/loading-overlay/loading-overlay.component';\r\nimport { NavbarComponent } from './components/navbar/navbar.component';\r\nimport { ScaffoldComponent } from './components/scaffold/scaffold.component';\r\nimport { CONFIG } from './config/config.token';\r\nimport { ScaffoldLibraryConfig } from './models';\r\nimport { ConfirmDialogComponent } from './shared/components/dialogs/confirm-dialog/confirm-dialog.component';\r\nimport { IconComponent } from './shared/components/icon/icon.component';\r\nimport { InputComponent } from './shared/components/input/input.component';\r\nimport { SharedModule } from './shared/shared.module';\r\n\r\n@NgModule({\r\n declarations: [\r\n ScaffoldComponent,\r\n LoadingOverlayComponent,\r\n HeaderComponent,\r\n NavbarComponent,\r\n DrawerComponent,\r\n FooterComponent,\r\n ContentTitleCardComponent,\r\n FloatingButtonComponent,\r\n ConfirmDialogComponent,\r\n BottomBarComponent\r\n ],\r\n imports: [\r\n BrowserAnimationsModule,\r\n RouterModule,\r\n SharedModule,\r\n InputComponent,\r\n IconComponent\r\n ],\r\n exports: [\r\n ScaffoldComponent\r\n ]\r\n})\r\nexport class ScaffoldModule {\r\n public static forRoot(config?: ScaffoldLibraryConfig): ModuleWithProviders<ScaffoldModule> {\r\n return {\r\n ngModule: ScaffoldModule,\r\n providers: [\r\n { provide: CONFIG, useValue: config }\r\n ]\r\n }\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { PlaceholderConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'lf-placeholder',\r\n templateUrl: './placeholder.component.html',\r\n styleUrls: ['./placeholder.component.scss'],\r\n standalone: true,\r\n imports: [SharedModule, IconComponent]\r\n})\r\nexport class PlaceholderComponent {\r\n\r\n @Input() public placeholderConfig: PlaceholderConfig;\r\n\r\n @Output() public buttonClickEvent = new EventEmitter<void>();\r\n}\r\n","@if (placeholderConfig) {\r\n <div class=\"lf-placeholder\" [ngClass]=\"placeholderConfig.cssClass\">\r\n <!-- icon -->\r\n <lf-icon\r\n [matIcon]=\"placeholderConfig.matIcon!\"\r\n [svgIcon]=\"placeholderConfig.svgIcon!\"></lf-icon>\r\n <!-- heading -->\r\n @if (placeholderConfig.heading) {\r\n <p class=\"lf-placeholder-heading\">\r\n {{ placeholderConfig.heading }}\r\n </p>\r\n }\r\n <!-- message -->\r\n @if (placeholderConfig.message) {\r\n <p class=\"lf-placeholder-message\">\r\n {{ placeholderConfig.message }}\r\n </p>\r\n }\r\n <!-- action -->\r\n @if (placeholderConfig.button) {\r\n <button\r\n mat-button\r\n class=\"mt-4\"\r\n color=\"accent\"\r\n [ngClass]=\"placeholderConfig.button.cssClass\"\r\n (click)=\"buttonClickEvent.emit()\"\r\n [matTooltip]=\"placeholderConfig.button.tooltip\">\r\n @if (placeholderConfig.button.matIcon || placeholderConfig.button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"placeholderConfig.button.matIcon\"\r\n [svgIcon]=\"placeholderConfig.button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-icon>\r\n }\r\n {{ placeholderConfig.button.label }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\r\nimport { Logger } from '../../../services';\r\nimport { SharedModule } from '../../shared.module';\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 standalone: true,\r\n imports: [SharedModule]\r\n})\r\nexport class FileUploadComponent {\r\n\r\n private logger: Logger = inject(Logger);\r\n\r\n @ViewChild('file') public fileElement: ElementRef;\r\n\r\n @Input() public color: 'primary' | 'accent' | 'warn' = 'primary';\r\n @Input() public label: string;\r\n @Input() public matIcon: string;\r\n @Input() public disabled: boolean = false;\r\n @Input() public accept: string;\r\n @Input() public tooltip: string;\r\n\r\n @Output() public fileChangeEvent: EventEmitter<File> = new EventEmitter<File>();\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 public triggerInput(): void {\r\n this.fileElement.nativeElement.click();\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)=\"triggerInput()\"\r\n [matTooltip]=\"tooltip\">\r\n @if (matIcon) {\r\n <mat-icon>{{ matIcon }}</mat-icon>\r\n }\r\n {{ label }}\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { Button, ListHeader, ListItem } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'lf-list',\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss'],\r\n standalone: true,\r\n imports: [SharedModule, IconComponent]\r\n})\r\nexport class ListComponent {\r\n\r\n @Input() public header: ListHeader | null = null;\r\n @Input() public items: ListItem[] = [];\r\n @Input() public buttons: Button[] = [];\r\n // @Input() public avatarFallbackPath?: string;\r\n\r\n @Output() public sortChangeEvent = new EventEmitter<{ sortToken: string, sortAsc: boolean }>();\r\n @Output() public selectionChangeEvent = new EventEmitter<ListItem[]>();\r\n @Output() public itemClickEvent = new EventEmitter<ListItem>();\r\n @Output() public buttonClickEvent = new EventEmitter<{ buttonId: string, item: ListItem }>();\r\n\r\n\r\n public sortToken: string;\r\n public sortAsc: boolean = false;\r\n\r\n\r\n get hasAvatars(): boolean {\r\n return !!this.items?.some((item: ListItem) => item.avatar);\r\n }\r\n\r\n get allSelected(): boolean {\r\n return this.items.length > 0 && this.items.every((item: ListItem) => item.checked);\r\n }\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\r\n public getCombinedActions(item: ListItem): Button[] {\r\n return [...(item.buttons ?? []), ...(this.buttons ?? [])];\r\n }\r\n\r\n public updateSortToken(sortToken: string | undefined): void {\r\n if (!sortToken) return;\r\n if (this.sortToken === sortToken) this.sortAsc = !this.sortAsc;\r\n this.sortToken = sortToken;\r\n this.sortChangeEvent.emit({ sortToken: this.sortToken, sortAsc: this.sortAsc });\r\n }\r\n\r\n public selectAll(event: MatCheckboxChange): void {\r\n // this.items.filter((item: ListItem) => !item.disabled).forEach((item: ListItem) => (item.checked = event.checked));\r\n\r\n this.items.forEach((item: ListItem) => {\r\n if (!item.disabled) item.checked = event.checked;\r\n });\r\n\r\n this.emitSelection();\r\n }\r\n\r\n public selectItem(): void {\r\n this.emitSelection();\r\n }\r\n\r\n private emitSelection(): void {\r\n const selected = this.items.filter((item: ListItem) => item.checked);\r\n this.selectionChangeEvent.emit(selected);\r\n }\r\n\r\n // public onImageError(event: Event): void {\r\n // const target = event.target as HTMLImageElement;\r\n // target.src = this.avatarFallbackPath || '';\r\n // }\r\n}\r\n","<!-- lf-list.component.html -->\r\n<div class=\"lf-table\">\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-table-item lf-table-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" />\r\n <!-- (error)=\"onImageError($event)\" -->\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-table-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-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-table-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-table-item-buttons\"></div>\r\n\r\n <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [checked]=\"allSelected && !someSelected\"\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 <!-- Items -->\r\n @for (item of items; track item.id) {\r\n <div\r\n class=\"lf-table-item lf-table-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-table-item-avatar px-2\">\r\n <img [src]=\"item.avatar\" [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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"item.matIcon\" [svgIcon]=\"item.svgIcon\"></lf-icon>\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-item-title-wrapper px-2\">\r\n <span\r\n class=\"lf-table-item-title\"\r\n (click)=\"item.clickable && !item.disabled ? itemClickEvent.emit(item) : null\">\r\n <span>{{ item.title }}</span>\r\n </span>\r\n @if (item.subtitle) {\r\n <span class=\"lf-table-item-subtitle\">{{ item.subtitle }}</span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-table-item-buttons\">\r\n @let combinedButtons = getCombinedActions(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtons?.includes(button.id)) {\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 (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"button.disabled || item.disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-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-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"!button.disabled && !item.disabled ? button.cssClass : ''\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"button.disabled || item.disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n <!-- [color]=\"button.color\" -->\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n (ngModelChange)=\"selectItem()\"\r\n [disabled]=\"item.disabled!\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\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 { ScaffoldService } from '../services';\r\n\r\n@Injectable()\r\nexport class ScaffoldLoadingInterceptor implements HttpInterceptor {\r\n private scaffoldService = inject(ScaffoldService);\r\n\r\n private activeRequests = 0;\r\n private loadingDelay = 100; // milliseconds\r\n private spinnerTimeout: any;\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--;\r\n\r\n if (this.activeRequests === 0) {\r\n // Clear any pending spinner timeout\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/config/config.token';\r\n/* MODELS */\r\nexport * from './lib/models';\r\n/* MODULES */\r\nexport * from './lib/scaffold.module';\r\n/* COMPONENTS */\r\nexport * from './lib/components/scaffold/scaffold.component';\r\nexport * from './lib/shared/components/placeholder/placeholder.component';\r\nexport * from './lib/shared/components/file-upload/file-upload.component';\r\nexport * from './lib/shared/components/list/list.component';\r\n/* SERVICES */\r\nexport * from './lib/services';\r\n/* INTERCEPTORS */\r\nexport * from './lib/interceptors/loading.interceptor';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i4","i5.IconComponent","i2","i6","i8","i9.InputComponent","i10.IconComponent","i3.IconComponent","i3.LoadingOverlayComponent","i4.HeaderComponent","i5.NavbarComponent","i6.DrawerComponent","i7.FooterComponent","i8.ContentTitleCardComponent","i9.FloatingButtonComponent","i10.BottomBarComponent"],"mappings":"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"}
1
+ {"version":3,"file":"lukfel-ng-scaffold.mjs","sources":["../../../projects/ng-scaffold/src/lib/config/config.token.ts","../../../projects/ng-scaffold/src/lib/shared/modules/material.module.ts","../../../projects/ng-scaffold/src/lib/shared/shared.module.ts","../../../projects/ng-scaffold/src/lib/shared/components/icon/icon.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/icon/icon.component.html","../../../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/services/breakpoint.service.ts","../../../projects/ng-scaffold/src/lib/shared/components/dialogs/confirm-dialog/confirm-dialog.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/dialogs/confirm-dialog/confirm-dialog.component.html","../../../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/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/scaffold/scaffold.component.ts","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.html","../../../projects/ng-scaffold/src/lib/scaffold.module.ts","../../../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/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/shared/components/list/list.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.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 { InjectionToken } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\n\r\nexport const CONFIG = new InjectionToken<ScaffoldLibraryConfig>('config');","import { PortalModule } from '@angular/cdk/portal';\r\nimport { NgModule } from '@angular/core';\r\n\r\n//Angular Material Components\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n declarations: [],\r\n exports: [\r\n MatCheckboxModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatExpansionModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatRippleModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n PortalModule\r\n ],\r\n providers: [],\r\n bootstrap: []\r\n})\r\nexport class MaterialModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { MaterialModule } from './modules/material.module';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MaterialModule\r\n ],\r\n exports: [\r\n CommonModule,\r\n FormsModule,\r\n MaterialModule\r\n ]\r\n})\r\nexport class SharedModule { }\r\n","import { Component, inject, Input } from '@angular/core';\r\nimport { CONFIG } from '../../../config/config.token';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\r\n\r\n@Component({\r\n selector: 'lf-icon',\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss'],\r\n standalone: true,\r\n imports: [SharedModule]\r\n})\r\nexport class IconComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n @Input() public matIcon: string | undefined;\r\n @Input() public svgIcon: string | undefined;\r\n @Input() public alignMiddle: boolean = false;\r\n}\r\n","<!-- mat icon -->\r\n@if (matIcon) {\r\n <mat-icon\r\n class=\"lf-icon\"\r\n [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\"\r\n [class.lf-icon-align-middle]=\"alignMiddle\">\r\n {{ matIcon }}\r\n </mat-icon>\r\n <!-- svg icon -->\r\n} @else if (svgIcon) {\r\n <mat-icon\r\n class=\"lf-icon\"\r\n [svgIcon]=\"svgIcon\"\r\n [class.lf-icon-align-middle]=\"alignMiddle\"></mat-icon>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\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 standalone: false\r\n})\r\nexport class BottomBarComponent {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public bottomBarConfig: BottomBarConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public navbarEnabled: boolean = false;\r\n\r\n @Output() public bottomBarCloseClickEvent = new EventEmitter<string>();\r\n @Output() public bottomBarButtonClickEvent = new EventEmitter<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 && bottomBarConfig.enable) {\r\n <div\r\n class=\"lf-bottom-bar px-4\"\r\n [ngClass]=\"bottomBarConfig.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 (bottomBarConfig.closeButtonId) {\r\n <button mat-icon-button (click)=\"closeClicked(bottomBarConfig.closeButtonId)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (bottomBarConfig.message) {\r\n <span class=\"ml-2\">{{ bottomBarConfig.message }}</span>\r\n }\r\n @if (bottomBarConfig.buttons) {\r\n <div class=\"lf-bottom-bar-buttons ml-4\">\r\n @for (button of bottomBarConfig.buttons; track button.id) {\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 (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-icon>\r\n }\r\n {{ button.label }}\r\n </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 (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\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 standalone: false\r\n})\r\nexport class ContentTitleCardComponent {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public contentTitleCardConfig: ContentTitleCardConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public routeHistory: string[] = [];\r\n\r\n @Output() public backButtonClickEvent = new EventEmitter<void>();\r\n\r\n\r\n public inputValue: string = '';\r\n\r\n public backButtonClicked(): void {\r\n this.backButtonClickEvent.emit();\r\n }\r\n\r\n}\r\n","@if (contentTitleCardConfig && contentTitleCardConfig.enable) {\r\n <mat-card\r\n class=\"lf-content-title-card mat-elevation-z2 px-4\"\r\n [ngClass]=\"contentTitleCardConfig.cssClass\">\r\n <!-- back button -->\r\n @if (contentTitleCardConfig.showBackButton && routeHistory.length > 1) {\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 style=\"flex: 1 1 auto\"></div>\r\n <!-- label -->\r\n <span class=\"lf-content-title-card-label\">\r\n {{ contentTitleCardConfig.label || \"\" }}\r\n </span>\r\n <!-- spacer -->\r\n <div style=\"flex: 1 1 auto\"></div>\r\n <!-- empty button spacer -->\r\n <div\r\n [style.width]=\"\r\n contentTitleCardConfig.showBackButton && routeHistory.length > 1 ? '48px' : '0px'\r\n \"></div>\r\n </mat-card>\r\n}\r\n","import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Component, Input, OnInit } from '@angular/core';\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 standalone: false\r\n})\r\nexport class DrawerComponent implements OnInit {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public drawerConfig: DrawerConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public fixedOffset: number = 0;\r\n @Input() public drawerPortal: ComponentPortal<unknown> | TemplatePortal<unknown> | null;\r\n\r\n\r\n ngOnInit(): void {\r\n // Avoid initializing an open drawer on mobile\r\n if (this.isMobile && this.drawerConfig?.enable && this.drawerConfig?.open) {\r\n this.drawerConfig.open = false;\r\n }\r\n }\r\n\r\n // Detect when the drawer is closed without clicking a button\r\n public onDrawerClosed(): void {\r\n if (this.drawerConfig) this.drawerConfig.open = false;\r\n }\r\n\r\n}\r\n","@if (drawerConfig && drawerConfig.enable) {\r\n <mat-sidenav-container class=\"lf-drawer-container\" [ngClass]=\"drawerConfig.cssClass\">\r\n <!-- drawer -->\r\n <mat-sidenav\r\n class=\"lf-drawer mat-elevation-z2\"\r\n [mode]=\"isMobile ? 'over' : 'side'\"\r\n [opened]=\"drawerConfig.open\"\r\n [autoFocus]=\"false\"\r\n [fixedInViewport]=\"drawerConfig.fixed\"\r\n [fixedTopGap]=\"fixedOffset\"\r\n (closed)=\"onDrawerClosed()\"\r\n #drawer>\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>\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\r\n<!-- render content without drawer -->\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 { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\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 standalone: false\r\n})\r\nexport class FloatingButtonComponent implements OnInit {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public floatingButtonConfig: FloatingButtonConfig | null = null;\r\n @Input() public onTop: boolean = false;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public bottomBarEnabled: boolean = false;\r\n\r\n @Output() public floatingButtonClickEvent = new EventEmitter<string>();\r\n\r\n\r\n private readonly DEFAULT_OFFSET: number = 24;\r\n private navbarOffset: number = 64;\r\n private bottomBarOffset: number = 56;\r\n\r\n\r\n ngOnInit(): void {\r\n if (this.floatingButtonConfig) {\r\n if (!this.floatingButtonConfig.horizontalPosition) {\r\n this.floatingButtonConfig.horizontalPosition = 'right';\r\n }\r\n\r\n if (!this.floatingButtonConfig.matIcon && !this.floatingButtonConfig?.svgIcon) {\r\n this.floatingButtonConfig.matIcon = 'arrow_upward';\r\n }\r\n\r\n if (!this.floatingButtonConfig.bottomPositionPx) {\r\n this.floatingButtonConfig.bottomPositionPx = this.DEFAULT_OFFSET;\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 public getBottomPosition(): number {\r\n let bottomPosition: number = this.floatingButtonConfig?.bottomPositionPx || this.DEFAULT_OFFSET;\r\n\r\n if (this.isMobile) {\r\n bottomPosition += this.navbarOffset;\r\n }\r\n\r\n if (this.bottomBarEnabled) {\r\n bottomPosition += this.bottomBarOffset;\r\n }\r\n\r\n return bottomPosition;\r\n }\r\n\r\n}\r\n","@if (\r\n floatingButtonConfig && floatingButtonConfig.enable && (!floatingButtonConfig.autoHide || !onTop)\r\n) {\r\n <button\r\n mat-fab\r\n color=\"accent\"\r\n class=\"lf-floating-button\"\r\n [style.bottom]=\"getBottomPosition() + 'px'\"\r\n [ngClass]=\"floatingButtonConfig.cssClass\"\r\n [ngClass]=\"floatingButtonConfig.horizontalPosition\"\r\n [extended]=\"!!floatingButtonConfig.label\"\r\n (click)=\"buttonClicked(floatingButtonConfig.id)\"\r\n [matTooltip]=\"floatingButtonConfig.tooltip!\">\r\n <!-- mat icon -->\r\n @if (floatingButtonConfig.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ floatingButtonConfig.matIcon }}\r\n </mat-icon>\r\n } @else {\r\n @if (floatingButtonConfig.svgIcon) {\r\n <mat-icon [svgIcon]=\"floatingButtonConfig.svgIcon!\"></mat-icon>\r\n }\r\n }\r\n <!-- svg icon -->\r\n <!-- label -->\r\n @if (floatingButtonConfig.label) {\r\n <span class=\"lf-floating-button-label\">\r\n {{ floatingButtonConfig.label }}\r\n </span>\r\n }\r\n </button>\r\n}\r\n","import { Component, Input } from '@angular/core';\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 standalone: false\r\n})\r\nexport class FooterComponent {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public footerConfig: FooterConfig | null = null;\r\n\r\n}\r\n","@if (footerConfig && footerConfig.enable) {\r\n <mat-card class=\"lf-footer mat-elevation-z2 p-4\" [ngClass]=\"footerConfig.cssClass\">\r\n <!-- svg logo -->\r\n @if (footerConfig.svgLogo) {\r\n <mat-icon\r\n class=\"lf-footer-logo mb-4\"\r\n color=\"primary\"\r\n [svgIcon]=\"footerConfig.svgLogo!\"></mat-icon>\r\n } @else {\r\n @if (footerConfig.imgLogo) {\r\n <img class=\"lf-footer-logo mb-4\" [src]=\"footerConfig.imgLogo\" alt=\"Logo\" />\r\n }\r\n }\r\n <!-- img logo -->\r\n <!-- links -->\r\n @if (footerConfig.links) {\r\n <div class=\"lf-footer-links mb-4\">\r\n @for (link of footerConfig.links; track link; let i = $index) {\r\n <div class=\"lf-footer-link\" [class.mr-2]=\"i < footerConfig.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 (footerConfig.copyright) {\r\n <span class=\"lf-footer-copyright\">\r\n {{ footerConfig.copyright }}\r\n </span>\r\n }\r\n </mat-card>\r\n}\r\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { HeaderInputConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\r\n\r\n@Component({\r\n selector: 'lf-input',\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n standalone: true,\r\n imports: [SharedModule]\r\n})\r\nexport class InputComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n private dialogRef = inject<MatDialogRef<InputComponent>>(MatDialogRef, { optional: true });\r\n private config = inject<HeaderInputConfig>(MAT_DIALOG_DATA, { optional: true });\r\n private cd = inject(ChangeDetectorRef);\r\n\r\n\r\n @ViewChild('input') public input: ElementRef = null!;\r\n\r\n @Input() public inputConfig: HeaderInputConfig = {};\r\n @Input() public isMobile: boolean = false;\r\n\r\n @Output() public inputSubmitEvent = new EventEmitter<string>();\r\n @Output() public inputChangeEvent = new EventEmitter<string>();\r\n @Output() public inputPrefixActionEvent = new EventEmitter<void>();\r\n\r\n\r\n public inputValue: string = '';\r\n\r\n ngOnInit(): void {\r\n if (this.config) {\r\n this.inputConfig = this.config;\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.input && this.inputConfig.autoFocus) {\r\n this.input.nativeElement.focus();\r\n this.cd.detectChanges();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.inputValue = '';\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 = '';\r\n this.inputChangeEvent.emit(this.inputValue);\r\n }\r\n}\r\n","@if (inputConfig) {\r\n <mat-form-field class=\"lf-input\" appearance=\"fill\" [class.lf-hide-hint]=\"!inputConfig.hint\">\r\n <mat-label>{{ inputConfig.label || \"Search\" }}</mat-label>\r\n @if (inputConfig.hint) {\r\n <mat-hint>{{ inputConfig.hint }}</mat-hint>\r\n }\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n [disabled]=\"inputConfig.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 (inputConfig.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 {{ inputConfig.matIconSubmit }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { HeaderConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n standalone: false\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public headerConfig: HeaderConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public routeLoading: boolean = false;\r\n @Input() public currentRoute: string;\r\n\r\n @Output() public headerButtonClickEvent = new EventEmitter<string>();\r\n @Output() public headerInputSubmitEvent = new EventEmitter<string>();\r\n @Output() public headerInputChangeEvent = new EventEmitter<string>();\r\n\r\n\r\n ngOnInit(): void {\r\n // Avoid initializing the header with an open input field on mobile\r\n if (this.isMobile && this.headerConfig?.inputConfig?.enable) {\r\n this.headerConfig.inputConfig.enable = false;\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 isActive(id: string): boolean {\r\n if (!id || !this.currentRoute) {\r\n return false;\r\n }\r\n\r\n const route: string = this.currentRoute.substring(this.currentRoute.indexOf('/') + 1);\r\n return route === id;\r\n }\r\n\r\n}\r\n","@if (headerConfig && headerConfig.enable) {\r\n <mat-toolbar\r\n class=\"lf-header mat-elevation-z3\"\r\n [class.px-4]=\"!isMobile\"\r\n [class.px-1]=\"isMobile\"\r\n [ngClass]=\"headerConfig.cssClass\"\r\n color=\"primary\">\r\n <!-- left menu button -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: headerConfig.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]=\"headerConfig.leftMenuButton && !isMobile\">\r\n <!-- link wrapper -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper-link\"\r\n [class.lf-clickable]=\"headerConfig.titleRouterLink\"\r\n [routerLink]=\"headerConfig.titleRouterLink ? [headerConfig.titleRouterLink] : null\">\r\n <!-- svg logo -->\r\n @if (headerConfig.svgLogo) {\r\n <mat-icon\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"headerConfig.title\"\r\n [svgIcon]=\"headerConfig.svgLogo!\"></mat-icon>\r\n } @else {\r\n @if (headerConfig.imgLogo) {\r\n <img\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"headerConfig.title\"\r\n [src]=\"headerConfig.imgLogo\"\r\n alt=\"Logo\" />\r\n }\r\n }\r\n <!-- img logo -->\r\n <!-- title -->\r\n @if (headerConfig.title) {\r\n <div class=\"lf-header-title-wrapper\">\r\n @if (headerConfig.title) {\r\n <span class=\"lf-header-title\">\r\n {{ headerConfig.title }}\r\n </span>\r\n }\r\n @if (headerConfig.subtitle) {\r\n <span class=\"lf-header-subtitle\">\r\n {{ headerConfig.subtitle }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- input -->\r\n @if (headerConfig.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]=\"headerConfig.inputConfig!\"\r\n [isMobile]=\"isMobile\"\r\n (inputSubmitEvent)=\"inputSubmitted($event)\"\r\n (inputChangeEvent)=\"inputChanged($event)\"\r\n (inputPrefixActionEvent)=\"headerConfig.inputConfig!.enable = false\"></lf-input>\r\n }\r\n <!-- spacer -->\r\n <div class=\"spacer\"></div>\r\n <!-- right menu buttons -->\r\n @for (button of headerConfig.rightMenuButtons; track button) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n </mat-toolbar>\r\n <!-- loading bar -->\r\n @if (headerConfig.loading || (headerConfig.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<!-- header menu button -->\r\n<ng-template #menuButtonTemplate let-menuButton=\"menuButton\" let-hideLabel=\"hideLabel\">\r\n @if (menuButton) {\r\n <!-- icon button -->\r\n @if ((menuButton.matIcon || menuButton.svgIcon) && (!menuButton.label || hideLabel)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-header-menu-button\"\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 [attr.aria-label]=\"menuButton.id\">\r\n <!-- icon -->\r\n <lf-icon [matIcon]=\"menuButton.matIcon\" [svgIcon]=\"menuButton.svgIcon\"></lf-icon>\r\n </button>\r\n } @else {\r\n @if (!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)\"\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 <!-- label -->\r\n {{ menuButton.label }}\r\n </button>\r\n }\r\n }\r\n <!-- text button -->\r\n <!-- menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <!-- label menu buttons -->\r\n @for (button of menuButton.menuButtons; track button) {\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 (click)=\"buttonClicked(button.id)\">\r\n <!-- icon -->\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-icon>\r\n <!-- label -->\r\n @if (button.label) {\r\n <span>{{ button.label }}</span>\r\n }\r\n </button>\r\n }\r\n }\r\n <!-- icon menu buttons -->\r\n <div class=\"lf-menu-icons px-1\">\r\n @for (button of menuButton.menuButtons; track button) {\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 (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n</ng-template>\r\n","import { Component } from '@angular/core';\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 standalone: false\r\n})\r\nexport class LoadingOverlayComponent {\r\n}\r\n","<div class=\"lf-loading-overlay\">\r\n <mat-spinner class=\"lf-loading-spinner\" color=\"accent\" mode=\"indeterminate\"></mat-spinner>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\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 standalone: false\r\n})\r\nexport class NavbarComponent {\r\n\r\n @Input() public libraryConfig: ScaffoldLibraryConfig | null = null;\r\n @Input() public navbarConfig: NavbarConfig | null = null;\r\n @Input() public isMobile: boolean = false;\r\n @Input() public currentRoute: string;\r\n\r\n @Output() public navbarButtonClickEvent = new EventEmitter<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.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n public isActive(id: string): boolean {\r\n if (!id || !this.currentRoute) {\r\n return false;\r\n }\r\n\r\n const route: string = this.currentRoute.substring(this.currentRoute.indexOf('/') + 1);\r\n return route === id;\r\n }\r\n\r\n}\r\n","@if (navbarConfig && navbarConfig.enable) {\r\n <div\r\n class=\"mat-app-background mat-elevation-z3\"\r\n [class.lf-navbar]=\"!isMobile\"\r\n [class.lf-navbar-mobile]=\"isMobile\"\r\n [ngClass]=\"navbarConfig.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 navbarConfig.menuButtons; track button; 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 <lf-icon [matIcon]=\"button.matIcon!\" [svgIcon]=\"button.svgIcon!\"></lf-icon>\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) || navbarConfig.showAllLabels\r\n ? button.label\r\n : isMobile\r\n ? \"\"\r\n : \"&nbsp;\"\r\n }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\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 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(\r\n distinctUntilChanged()\r\n );\r\n\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ConfirmDialogConfig } from '../../../../models';\r\n\r\n@Component({\r\n selector: 'lf-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrls: ['./confirm-dialog.component.scss'],\r\n standalone: false\r\n})\r\nexport class ConfirmDialogComponent {\r\n public config = inject<ConfirmDialogConfig>(MAT_DIALOG_DATA);\r\n\r\n}\r\n","@if (config) {\r\n @if (config.title) {\r\n <h2 mat-dialog-title>{{ config.title }}</h2>\r\n }\r\n\r\n <mat-dialog-content>\r\n @if (config.message) {\r\n <p>{{ config.message }}</p>\r\n }\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n @if (config.closeLabel) {\r\n <button mat-button [mat-dialog-close]=\"false\">\r\n {{ config.closeLabel }}\r\n </button>\r\n }\r\n @if (config.confirmLabel) {\r\n <button mat-button color=\"primary\" [mat-dialog-close]=\"true\">\r\n {{ config.confirmLabel }}\r\n </button>\r\n }\r\n </mat-dialog-actions>\r\n}\r\n","import { ComponentType } from '@angular/cdk/portal';\r\nimport { Injectable, TemplateRef, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfirmDialogConfig, HeaderInputConfig } from '../models';\r\nimport { ConfirmDialogComponent } from '../shared/components/dialogs/confirm-dialog/confirm-dialog.component';\r\nimport { InputComponent } from '../shared/components/input/input.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n private matDialog = inject(MatDialog);\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(templateRef: ComponentType<any> | TemplateRef<any>, 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 confirm dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous boolean response\r\n */\r\n public openConfirmDialog(config: ConfirmDialogConfig): Promise<boolean> {\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 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 openInputDialog(config: HeaderInputConfig): Promise<string | undefined> {\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 '../config/config.token';\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 ScaffoldModule.forRoot\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 ScaffoldModule.forRoot\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 ScaffoldModule.forRoot\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 { Injectable, inject } from '@angular/core';\r\nimport { CONFIG } from '../config/config.token';\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 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 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 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 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 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 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 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 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","import { Injectable, 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\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 this.router.events.subscribe(event => {\r\n let asyncLoadCount = 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.getCurrentNavigation()?.extras?.state?.['back']) {\r\n const routeHistory: string[] = this._routeHistory$.value;\r\n routeHistory.push(currentRoute);\r\n\r\n this._routeHistory$.next(routeHistory);\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 > 1) {\r\n const previousRoute: string = routeHistory[routeHistory.length - 2];\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","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 '../config/config.token';\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 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(property: keyof ScaffoldConfig, value: unknown): void {\r\n const currentState: ScaffoldConfig = this._scaffoldConfig$.getValue();\r\n\r\n if (currentState[property] === value) {\r\n return;\r\n }\r\n\r\n const updatedState = { ...currentState, [property]: value };\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, value);\r\n\r\n this._scaffoldConfig$.next(updatedState);\r\n }\r\n}\r\n","\r\nimport { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\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 /**\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 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 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(`${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 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,\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 { Injectable, DOCUMENT, inject } 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 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 { Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\n\r\nimport { Component, DOCUMENT, ElementRef, EventEmitter, inject, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { debounceTime, distinctUntilChanged, fromEvent, Subscription } from 'rxjs';\r\nimport { CONFIG } from '../../config/config.token';\r\nimport { BottomBarConfig, ContentTitleCardConfig, DrawerConfig, FloatingButtonConfig, FooterConfig, HeaderConfig, NavbarConfig, ScaffoldConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { BreakpointService, Logger, RouterService, ScaffoldService } from '../../services';\r\n\r\n@Component({\r\n selector: 'lf-scaffold',\r\n templateUrl: './scaffold.component.html',\r\n styleUrls: ['./scaffold.component.scss'],\r\n standalone: false\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 logger = inject(Logger);\r\n private route = inject(ActivatedRoute);\r\n private document = inject<Document>(DOCUMENT);\r\n\r\n\r\n @ViewChild('scrollContainer', { static: true }) public scrollContainer: ElementRef;\r\n @ViewChild('content', { static: true }) public content: ElementRef;\r\n\r\n @Output() public headerButtonClickEvent = new EventEmitter<string>();\r\n @Output() public headerInputSubmitEvent = new EventEmitter<string>();\r\n @Output() public headerInputChangeEvent = new EventEmitter<string>();\r\n @Output() public navbarButtonClickEvent = new EventEmitter<string>();\r\n @Output() public floatingButtonClickEvent = new EventEmitter<string>();\r\n @Output() public bottomBarButtonClickEvent = new EventEmitter<string>();\r\n\r\n\r\n public scaffoldConfig: ScaffoldConfig | null = null;\r\n public headerConfig: HeaderConfig | null = null;\r\n public navbarConfig: NavbarConfig | null = null;\r\n public drawerConfig: DrawerConfig | null = null;\r\n public drawerPortal: ComponentPortal<unknown> | TemplatePortal<unknown> | null;\r\n public footerConfig: FooterConfig | null = null;\r\n public contentTitleCardConfig: ContentTitleCardConfig | null = null;\r\n public floatingButtonConfig: FloatingButtonConfig | null = null;\r\n public bottomBarConfig: BottomBarConfig | null = null;\r\n\r\n public routeHistory: string[] = [];\r\n public currentRoute: string;\r\n public isMobile: boolean = false;\r\n public routeLoading: boolean = false;\r\n public scrollTopPosition: number = 0;\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 this.scaffoldConfig = scaffoldConfig;\r\n this.headerConfig = this.scaffoldConfig.headerConfig!;\r\n this.navbarConfig = this.scaffoldConfig.navbarConfig!;\r\n this.drawerConfig = this.scaffoldConfig.drawerConfig!;\r\n this.footerConfig = this.scaffoldConfig.footerConfig!;\r\n this.contentTitleCardConfig = this.scaffoldConfig.contentTitleCardConfig!;\r\n this.floatingButtonConfig = this.scaffoldConfig.floatingButtonConfig!;\r\n this.bottomBarConfig = this.scaffoldConfig.bottomBarConfig!;\r\n }));\r\n\r\n // Listen for drawer portal changes\r\n this._subscription.add(this.scaffoldService.drawerPortal$.subscribe((drawerPortal: ComponentPortal<unknown> | TemplatePortal<unknown> | null) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[DrawerPortal]', drawerPortal);\r\n\r\n this.drawerPortal = drawerPortal;\r\n }));\r\n\r\n // Listen for breakpoint changes\r\n this._subscription.add(this.breakpointService.breakpoint$.subscribe((breakpointState: BreakpointState) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[BreakpointState]', breakpointState);\r\n\r\n if (breakpointState.breakpoints[Breakpoints.XSmall]) {\r\n this.isMobile = true;\r\n } else if (breakpointState.breakpoints[Breakpoints.Small]) {\r\n this.isMobile = true;\r\n } else if (breakpointState.breakpoints[Breakpoints.Medium]) {\r\n this.isMobile = false;\r\n } else if (breakpointState.breakpoints[Breakpoints.Large]) {\r\n this.isMobile = false;\r\n }\r\n }));\r\n\r\n // Listen for route changes\r\n this._subscription.add(this.routerService.routeHistory$.subscribe((routeHistory: string[]) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteHistory]', routeHistory);\r\n\r\n if (routeHistory) {\r\n this.routeHistory = routeHistory;\r\n }\r\n\r\n if (this.scrollContainer && this.scaffoldConfig?.scrollPositionRestoration) {\r\n this.scrollContainer.nativeElement.scrollTop = 0;\r\n }\r\n }));\r\n\r\n // Listen for current route changes\r\n this._subscription.add(this.routerService.currentRoute$.subscribe((currentRout: string) => {\r\n this.currentRoute = currentRout\r\n }));\r\n\r\n // Listen for route loading\r\n this._subscription.add(this.routerService.loading$.subscribe((routeLoading: boolean) => {\r\n this.routeLoading = routeLoading\r\n }));\r\n\r\n // Listen to scroll events\r\n if (this.scrollContainer) {\r\n const element: HTMLElement = this.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 = 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\r\n ngOnDestroy(): void {\r\n if (this._subscription) {\r\n this._subscription.unsubscribe();\r\n }\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 public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n public floatingButtonClicked(id: string): void {\r\n if (!id && this.scrollContainer) {\r\n this.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 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","<!-- header-height: 64px; navbar-size: 80px; floating-button-bottom: 24px -->\r\n\r\n<div class=\"lf-scaffold mat-app-background mat-typography\" [ngClass]=\"scaffoldConfig?.cssClass\">\r\n <!-- loading overlay -->\r\n @if (scaffoldConfig?.loading) {\r\n <lf-loading-overlay></lf-loading-overlay>\r\n }\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 (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 #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 [fixedOffset]=\"headerConfig?.enable ? 64 : 0\">\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 </div>\r\n <!-- footer -->\r\n <lf-footer [libraryConfig]=\"libraryConfig\" [footerConfig]=\"footerConfig\"></lf-footer>\r\n </lf-drawer>\r\n </div>\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 && navbarConfig?.enable!\"\r\n [bottomBarEnabled]=\"bottomBarConfig?.enable!\"\r\n (floatingButtonClickEvent)=\"floatingButtonClicked($event)\"></lf-floating-button>\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","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { RouterModule } from '@angular/router';\r\nimport { BottomBarComponent } from './components/bottom-bar/bottom-bar.component';\r\nimport { ContentTitleCardComponent } from './components/content-title-card/content-title-card.component';\r\nimport { DrawerComponent } from './components/drawer/drawer.component';\r\nimport { FloatingButtonComponent } from './components/floating-button/floating-button.component';\r\nimport { FooterComponent } from './components/footer/footer.component';\r\nimport { HeaderComponent } from './components/header/header.component';\r\nimport { LoadingOverlayComponent } from './components/loading-overlay/loading-overlay.component';\r\nimport { NavbarComponent } from './components/navbar/navbar.component';\r\nimport { ScaffoldComponent } from './components/scaffold/scaffold.component';\r\nimport { CONFIG } from './config/config.token';\r\nimport { ScaffoldLibraryConfig } from './models';\r\nimport { ConfirmDialogComponent } from './shared/components/dialogs/confirm-dialog/confirm-dialog.component';\r\nimport { IconComponent } from './shared/components/icon/icon.component';\r\nimport { InputComponent } from './shared/components/input/input.component';\r\nimport { SharedModule } from './shared/shared.module';\r\n\r\n@NgModule({\r\n declarations: [\r\n ScaffoldComponent,\r\n LoadingOverlayComponent,\r\n HeaderComponent,\r\n NavbarComponent,\r\n DrawerComponent,\r\n FooterComponent,\r\n ContentTitleCardComponent,\r\n FloatingButtonComponent,\r\n ConfirmDialogComponent,\r\n BottomBarComponent\r\n ],\r\n imports: [\r\n BrowserModule,\r\n RouterModule,\r\n SharedModule,\r\n InputComponent,\r\n IconComponent\r\n ],\r\n exports: [\r\n ScaffoldComponent\r\n ]\r\n})\r\nexport class ScaffoldModule {\r\n public static forRoot(config?: ScaffoldLibraryConfig): ModuleWithProviders<ScaffoldModule> {\r\n return {\r\n ngModule: ScaffoldModule,\r\n providers: [\r\n { provide: CONFIG, useValue: config }\r\n ]\r\n }\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { PlaceholderConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'lf-placeholder',\r\n templateUrl: './placeholder.component.html',\r\n styleUrls: ['./placeholder.component.scss'],\r\n standalone: true,\r\n imports: [SharedModule, IconComponent]\r\n})\r\nexport class PlaceholderComponent {\r\n\r\n @Input() public placeholderConfig: PlaceholderConfig;\r\n\r\n @Output() public buttonClickEvent = new EventEmitter<void>();\r\n}\r\n","@if (placeholderConfig) {\r\n <div class=\"lf-placeholder\" [ngClass]=\"placeholderConfig.cssClass\">\r\n <!-- icon -->\r\n <lf-icon\r\n [matIcon]=\"placeholderConfig.matIcon!\"\r\n [svgIcon]=\"placeholderConfig.svgIcon!\"></lf-icon>\r\n <!-- heading -->\r\n @if (placeholderConfig.heading) {\r\n <p class=\"lf-placeholder-heading\">\r\n {{ placeholderConfig.heading }}\r\n </p>\r\n }\r\n <!-- message -->\r\n @if (placeholderConfig.message) {\r\n <p class=\"lf-placeholder-message\">\r\n {{ placeholderConfig.message }}\r\n </p>\r\n }\r\n <!-- action -->\r\n @if (placeholderConfig.button) {\r\n <button\r\n mat-button\r\n class=\"mt-4\"\r\n color=\"accent\"\r\n [ngClass]=\"placeholderConfig.button.cssClass\"\r\n (click)=\"buttonClickEvent.emit()\"\r\n [matTooltip]=\"placeholderConfig.button.tooltip\">\r\n @if (placeholderConfig.button.matIcon || placeholderConfig.button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"placeholderConfig.button.matIcon\"\r\n [svgIcon]=\"placeholderConfig.button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-icon>\r\n }\r\n {{ placeholderConfig.button.label }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\r\nimport { Logger } from '../../../services';\r\nimport { SharedModule } from '../../shared.module';\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 standalone: true,\r\n imports: [SharedModule]\r\n})\r\nexport class FileUploadComponent {\r\n\r\n private logger: Logger = inject(Logger);\r\n\r\n\r\n @ViewChild('file') public fileElement: ElementRef;\r\n\r\n @Input() public color: 'primary' | 'accent' | 'warn' = 'primary';\r\n @Input() public label: string;\r\n @Input() public matIcon: string;\r\n @Input() public disabled: boolean = false;\r\n @Input() public accept: string;\r\n @Input() public tooltip: string;\r\n\r\n @Output() public fileChangeEvent: EventEmitter<File> = new EventEmitter<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 public triggerInput(): void {\r\n this.fileElement.nativeElement.click();\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)=\"triggerInput()\"\r\n [matTooltip]=\"tooltip\">\r\n @if (matIcon) {\r\n <mat-icon>{{ matIcon }}</mat-icon>\r\n }\r\n {{ label }}\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { Button, ListHeader, ListItem } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'lf-list',\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss'],\r\n standalone: true,\r\n imports: [SharedModule, IconComponent]\r\n})\r\nexport class ListComponent {\r\n\r\n @Input() public header: ListHeader | null = null;\r\n @Input() public items: ListItem[] = [];\r\n @Input() public buttons: Button[] = [];\r\n @Input() public avatarFallbackPath: string;\r\n @Input() public showDividers: boolean = false;\r\n\r\n @Output() public sortChangeEvent = new EventEmitter<{ sortToken: string, sortAsc: boolean }>();\r\n @Output() public selectionChangeEvent = new EventEmitter<ListItem[]>();\r\n @Output() public itemClickEvent = new EventEmitter<ListItem>();\r\n @Output() public buttonClickEvent = new EventEmitter<{ buttonId: string, item: ListItem }>();\r\n\r\n\r\n public sortToken: string;\r\n public sortAsc: boolean = false;\r\n\r\n\r\n get hasAvatars(): boolean {\r\n return !!this.items?.some((item: ListItem) => item.avatar);\r\n }\r\n\r\n get allSelected(): boolean {\r\n return this.items.length > 0 && this.items.every((item: ListItem) => item.checked);\r\n }\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\r\n public getCombinedActions(item: ListItem): Button[] {\r\n return [...(item.buttons ?? []), ...(this.buttons ?? [])];\r\n }\r\n\r\n public updateSortToken(sortToken: string | undefined): void {\r\n if (!sortToken) return;\r\n if (this.sortToken === sortToken) this.sortAsc = !this.sortAsc;\r\n this.sortToken = sortToken;\r\n this.sortChangeEvent.emit({ sortToken: this.sortToken, sortAsc: this.sortAsc });\r\n }\r\n\r\n public selectAll(event: MatCheckboxChange): void {\r\n this.items.forEach((item: ListItem) => {\r\n if (!item.disabled) item.checked = event.checked;\r\n });\r\n\r\n this.emitSelection();\r\n }\r\n\r\n public selectItem(): void {\r\n this.emitSelection();\r\n }\r\n\r\n private emitSelection(): void {\r\n const selected = this.items.filter((item: ListItem) => item.checked);\r\n this.selectionChangeEvent.emit(selected);\r\n }\r\n\r\n public onImageError(event: Event): void {\r\n const target = event.target as HTMLImageElement;\r\n target.src = this.avatarFallbackPath || '';\r\n }\r\n}\r\n","<!-- lf-list.component.html -->\r\n<div class=\"lf-table\">\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-table-item lf-table-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-table-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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-table-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-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-table-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-table-item-buttons\"></div>\r\n\r\n <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [checked]=\"allSelected && !someSelected\"\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 <!-- Items -->\r\n @for (item of items; track item.id) {\r\n <div\r\n class=\"lf-table-item lf-table-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 <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-table-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-table-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"item.matIcon\" [svgIcon]=\"item.svgIcon\"></lf-icon>\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-table-item-title-wrapper px-2\">\r\n <span\r\n class=\"lf-table-item-title\"\r\n (click)=\"item.clickable && !item.disabled ? itemClickEvent.emit(item) : null\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle) {\r\n <span class=\"lf-table-item-subtitle\">{{ item.subtitle }}</span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-table-item-buttons\">\r\n @let combinedButtons = getCombinedActions(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-bottom-bar-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n [alignMiddle]=\"true\"></lf-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-bottom-bar-button-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClickEvent.emit({ buttonId: button.id, item })\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n <!-- [color]=\"button.color\" -->\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-table-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n (ngModelChange)=\"selectItem()\"\r\n [disabled]=\"item.disabled!\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n @if (showDividers) {\r\n <mat-divider></mat-divider>\r\n }\r\n }\r\n</div>\r\n","import {\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 { ScaffoldService } from '../services';\r\n\r\n@Injectable()\r\nexport class ScaffoldLoadingInterceptor implements HttpInterceptor {\r\n private scaffoldService = inject(ScaffoldService);\r\n\r\n private activeRequests = 0;\r\n private loadingDelay = 100; // milliseconds\r\n private spinnerTimeout: any;\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--;\r\n\r\n if (this.activeRequests === 0) {\r\n // Clear any pending spinner timeout\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/config/config.token';\r\n/* MODELS */\r\nexport * from './lib/models';\r\n/* MODULES */\r\nexport * from './lib/scaffold.module';\r\n/* COMPONENTS */\r\nexport * from './lib/components/scaffold/scaffold.component';\r\nexport * from './lib/shared/components/placeholder/placeholder.component';\r\nexport * from './lib/shared/components/file-upload/file-upload.component';\r\nexport * from './lib/shared/components/list/list.component';\r\n/* SERVICES */\r\nexport * from './lib/services';\r\n/* INTERCEPTORS */\r\nexport * from './lib/interceptors/loading.interceptor';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i4","i5.IconComponent","i2","i6","i8","i9.InputComponent","i10.IconComponent","i3.IconComponent","i3.LoadingOverlayComponent","i4.HeaderComponent","i5.NavbarComponent","i6.DrawerComponent","i7.FooterComponent","i8.ContentTitleCardComponent","i9.FloatingButtonComponent","i10.BottomBarComponent"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, OnInit, OnDestroy, ElementRef, EventEmitter, AfterViewInit, ModuleWithProviders, TemplateRef } from '@angular/core';
3
3
  import * as i32 from '@angular/cdk/portal';
4
4
  import { ComponentPortal, TemplatePortal, ComponentType } from '@angular/cdk/portal';
5
- import * as i11$1 from '@angular/platform-browser/animations';
5
+ import * as i11$1 from '@angular/platform-browser';
6
6
  import * as i12$1 from '@angular/router';
7
7
  import * as i1$1 from '@angular/common';
8
8
  import * as i2$1 from '@angular/forms';
@@ -156,7 +156,9 @@ interface ListItem {
156
156
  disabled?: boolean;
157
157
  clickable?: boolean;
158
158
  buttons?: Button[];
159
- hiddenButtons?: string[];
159
+ hiddenButtonIds?: string[];
160
+ disabledButtonIds?: string[];
161
+ cssClass?: string;
160
162
  }
161
163
  interface ListHeader {
162
164
  matIcon?: string;
@@ -372,12 +374,12 @@ declare class InputComponent implements OnInit, AfterViewInit, OnDestroy {
372
374
  private dialogRef;
373
375
  private config;
374
376
  private cd;
377
+ input: ElementRef;
375
378
  inputConfig: HeaderInputConfig;
376
379
  isMobile: boolean;
377
380
  inputSubmitEvent: EventEmitter<string>;
378
381
  inputChangeEvent: EventEmitter<string>;
379
382
  inputPrefixActionEvent: EventEmitter<void>;
380
- input: ElementRef;
381
383
  inputValue: string;
382
384
  ngOnInit(): void;
383
385
  ngAfterViewInit(): void;
@@ -402,7 +404,7 @@ declare class IconComponent {
402
404
  declare class ScaffoldModule {
403
405
  static forRoot(config?: ScaffoldLibraryConfig): ModuleWithProviders<ScaffoldModule>;
404
406
  static ɵfac: i0.ɵɵFactoryDeclaration<ScaffoldModule, never>;
405
- static ɵmod: i0.ɵɵNgModuleDeclaration<ScaffoldModule, [typeof ScaffoldComponent, typeof LoadingOverlayComponent, typeof HeaderComponent, typeof NavbarComponent, typeof DrawerComponent, typeof FooterComponent, typeof ContentTitleCardComponent, typeof FloatingButtonComponent, typeof ConfirmDialogComponent, typeof BottomBarComponent], [typeof i11$1.BrowserAnimationsModule, typeof i12$1.RouterModule, typeof SharedModule, typeof InputComponent, typeof IconComponent], [typeof ScaffoldComponent]>;
407
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ScaffoldModule, [typeof ScaffoldComponent, typeof LoadingOverlayComponent, typeof HeaderComponent, typeof NavbarComponent, typeof DrawerComponent, typeof FooterComponent, typeof ContentTitleCardComponent, typeof FloatingButtonComponent, typeof ConfirmDialogComponent, typeof BottomBarComponent], [typeof i11$1.BrowserModule, typeof i12$1.RouterModule, typeof SharedModule, typeof InputComponent, typeof IconComponent], [typeof ScaffoldComponent]>;
406
408
  static ɵinj: i0.ɵɵInjectorDeclaration<ScaffoldModule>;
407
409
  }
408
410
 
@@ -433,6 +435,8 @@ declare class ListComponent {
433
435
  header: ListHeader | null;
434
436
  items: ListItem[];
435
437
  buttons: Button[];
438
+ avatarFallbackPath: string;
439
+ showDividers: boolean;
436
440
  sortChangeEvent: EventEmitter<{
437
441
  sortToken: string;
438
442
  sortAsc: boolean;
@@ -453,8 +457,9 @@ declare class ListComponent {
453
457
  selectAll(event: MatCheckboxChange): void;
454
458
  selectItem(): void;
455
459
  private emitSelection;
460
+ onImageError(event: Event): void;
456
461
  static ɵfac: i0.ɵɵFactoryDeclaration<ListComponent, never>;
457
- static ɵcmp: i0.ɵɵComponentDeclaration<ListComponent, "lf-list", never, { "header": { "alias": "header"; "required": false; }; "items": { "alias": "items"; "required": false; }; "buttons": { "alias": "buttons"; "required": false; }; }, { "sortChangeEvent": "sortChangeEvent"; "selectionChangeEvent": "selectionChangeEvent"; "itemClickEvent": "itemClickEvent"; "buttonClickEvent": "buttonClickEvent"; }, never, never, true, never>;
462
+ static ɵcmp: i0.ɵɵComponentDeclaration<ListComponent, "lf-list", never, { "header": { "alias": "header"; "required": false; }; "items": { "alias": "items"; "required": false; }; "buttons": { "alias": "buttons"; "required": false; }; "avatarFallbackPath": { "alias": "avatarFallbackPath"; "required": false; }; "showDividers": { "alias": "showDividers"; "required": false; }; }, { "sortChangeEvent": "sortChangeEvent"; "selectionChangeEvent": "selectionChangeEvent"; "itemClickEvent": "itemClickEvent"; "buttonClickEvent": "buttonClickEvent"; }, never, never, true, never>;
458
463
  }
459
464
 
460
465
  declare class BreakpointService {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lukfel/ng-scaffold",
3
- "version": "20.0.21",
3
+ "version": "20.0.23",
4
4
  "description": "This Angular library provides a basic UI scaffold and services for modern web and mobile apps",
5
5
  "license": "MIT",
6
6
  "author": {