@lukfel/ng-scaffold 20.0.39 → 20.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -11
- package/fesm2022/lukfel-ng-scaffold.mjs +17 -15
- package/fesm2022/lukfel-ng-scaffold.mjs.map +1 -1
- package/index.d.ts +13 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -388,19 +388,27 @@ import { ListComponent } from '@lukfel/ng-scaffold';
|
|
|
388
388
|
```
|
|
389
389
|
|
|
390
390
|
```ts
|
|
391
|
-
import { Button, ListHeader, ListItem } from '@lukfel/ng-scaffold';
|
|
391
|
+
import { Button, ListConfig, ListHeader, ListItem } from '@lukfel/ng-scaffold';
|
|
392
392
|
|
|
393
|
-
public
|
|
393
|
+
public listConfig: ListConfig = {
|
|
394
394
|
enableSelection: true,
|
|
395
|
+
enableDragging: true,
|
|
396
|
+
initialSortToken: 'title',
|
|
397
|
+
initialSortAsc: true,
|
|
398
|
+
showDividers: true
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
public listHeader: ListHeader = {
|
|
402
|
+
matIcon: 'sort',
|
|
395
403
|
items: [
|
|
396
|
-
{ title: 'Items', sortToken: '
|
|
404
|
+
{ title: 'Items', sortToken: 'title' }
|
|
397
405
|
]
|
|
398
406
|
};
|
|
399
407
|
|
|
400
|
-
public
|
|
401
|
-
{ id: 0, avatar: 'assets/img/logos/ic_launcher-web.png', title: 'Item 1', subtitle: 'I am clickable', clickable: true },
|
|
408
|
+
public listItems: ListItem[] = [
|
|
402
409
|
{ id: 1, svgIcon: 'logo', title: 'Item 2', subtitle: 'I am disabled', disabled: true },
|
|
403
|
-
{ id:
|
|
410
|
+
{ id: 0, avatar: 'assets/img/logos/ic_launcher-web.png', title: 'Item 1', subtitle: 'I am clickable', clickable: true },
|
|
411
|
+
{ id: 2, matIcon: 'person', title: 'Item 3', subtitle: 'I have no edit buton', hiddenButtonIds: ['edit'] },
|
|
404
412
|
];
|
|
405
413
|
|
|
406
414
|
public buttons: Button[] = [
|
|
@@ -408,8 +416,15 @@ public buttons: Button[] = [
|
|
|
408
416
|
{ id: 'delete', matIcon: 'delete', cssClass: 'warn' }
|
|
409
417
|
];
|
|
410
418
|
|
|
419
|
+
// Handle sort events (optional)
|
|
411
420
|
public onListSortChange(event: { sortToken: string, sortAsc: boolean }): void {
|
|
412
|
-
|
|
421
|
+
if (event?.sortToken === 'title') {
|
|
422
|
+
this.listItems.sort((a, b) => {
|
|
423
|
+
if (!a.title || !b.title) return 0;
|
|
424
|
+
if (event.sortAsc) return a.title.localeCompare(b.title);
|
|
425
|
+
return b.title.localeCompare(a.title);
|
|
426
|
+
});
|
|
427
|
+
}
|
|
413
428
|
}
|
|
414
429
|
|
|
415
430
|
public onListSelectionChange(items: ListItem[]): void {
|
|
@@ -427,11 +442,12 @@ public onListItemClick(item: ListItem): void {
|
|
|
427
442
|
|
|
428
443
|
```html
|
|
429
444
|
<lf-list
|
|
430
|
-
[
|
|
431
|
-
[
|
|
432
|
-
[
|
|
445
|
+
[config]="listConfig"
|
|
446
|
+
[header]="listHeader"
|
|
447
|
+
[items]="listItems"
|
|
448
|
+
[buttons]="listButtons"
|
|
433
449
|
(sortChangeEvent)="onListSortChange($event)"
|
|
434
|
-
(selectionChangeEvent)="onListSelectionChange(
|
|
450
|
+
(selectionChangeEvent)="onListSelectionChange()"
|
|
435
451
|
(buttonClickEvent)="onListButtonClick($event)"
|
|
436
452
|
(itemClickEvent)="onListItemClick($event)"></lf-list>
|
|
437
453
|
```
|
|
@@ -1466,18 +1466,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
|
|
|
1466
1466
|
|
|
1467
1467
|
class ListComponent {
|
|
1468
1468
|
constructor() {
|
|
1469
|
+
this.config = null;
|
|
1469
1470
|
this.header = null;
|
|
1470
1471
|
this.items = [];
|
|
1471
1472
|
this.groupedItems = new Map();
|
|
1472
1473
|
this.buttons = [];
|
|
1473
|
-
this.showDividers = false;
|
|
1474
|
-
this.mode = 'flat';
|
|
1475
1474
|
this.sortChangeEvent = new EventEmitter();
|
|
1476
1475
|
this.selectionChangeEvent = new EventEmitter();
|
|
1477
1476
|
this.itemClickEvent = new EventEmitter();
|
|
1478
1477
|
this.itemDropEvent = new EventEmitter();
|
|
1479
1478
|
this.buttonClickEvent = new EventEmitter();
|
|
1480
|
-
this.sortAsc =
|
|
1479
|
+
this.sortAsc = true;
|
|
1481
1480
|
this.allSelected = false;
|
|
1482
1481
|
}
|
|
1483
1482
|
get someSelected() {
|
|
@@ -1486,16 +1485,23 @@ class ListComponent {
|
|
|
1486
1485
|
get hasAvatars() {
|
|
1487
1486
|
return !!this.items?.some((item) => (item.avatar || item.matIcon || item.svgIcon));
|
|
1488
1487
|
}
|
|
1488
|
+
ngOnInit() {
|
|
1489
|
+
if (this.config) {
|
|
1490
|
+
this.sortToken = this.config.initialSortToken || '';
|
|
1491
|
+
this.sortAsc = this.config.initialSortAsc || false;
|
|
1492
|
+
this.updateSortToken(this.sortToken, true);
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1489
1495
|
ngOnChanges(changes) {
|
|
1490
1496
|
if (changes['items']) {
|
|
1491
1497
|
this.allSelected = this.items.length > 0 && this.items.every((item) => item.checked);
|
|
1492
1498
|
}
|
|
1493
1499
|
}
|
|
1494
1500
|
// Update the sort token
|
|
1495
|
-
updateSortToken(sortToken) {
|
|
1501
|
+
updateSortToken(sortToken, initial) {
|
|
1496
1502
|
if (!sortToken)
|
|
1497
1503
|
return;
|
|
1498
|
-
if (this.sortToken === sortToken)
|
|
1504
|
+
if (this.sortToken === sortToken && !initial)
|
|
1499
1505
|
this.sortAsc = !this.sortAsc;
|
|
1500
1506
|
this.sortToken = sortToken;
|
|
1501
1507
|
this.sortChangeEvent.emit({ sortToken: this.sortToken, sortAsc: this.sortAsc });
|
|
@@ -1537,19 +1543,21 @@ class ListComponent {
|
|
|
1537
1543
|
// Handle image errors
|
|
1538
1544
|
onImageError(event) {
|
|
1539
1545
|
const target = event.target;
|
|
1540
|
-
target.src = this.avatarFallbackPath || '';
|
|
1546
|
+
target.src = this.config?.avatarFallbackPath || '';
|
|
1541
1547
|
}
|
|
1542
1548
|
// Stop click trough events
|
|
1543
1549
|
stopPropagation(click) {
|
|
1544
1550
|
click.stopImmediatePropagation();
|
|
1545
1551
|
}
|
|
1546
1552
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1547
|
-
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", groupedItems: "groupedItems", buttons: "buttons", avatarFallbackPath: "avatarFallbackPath", showDividers: "showDividers", subtitleTemplate: "subtitleTemplate", mode: "mode", dropListId: "dropListId", connectedDropListIds: "connectedDropListIds" }, outputs: { sortChangeEvent: "sortChangeEvent", selectionChangeEvent: "selectionChangeEvent", itemClickEvent: "itemClickEvent", itemDropEvent: "itemDropEvent", buttonClickEvent: "buttonClickEvent" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\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 <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (mode === \"group\" && groupedItems) {\r\n @for (group of groupedItems | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!header?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"header?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !header?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId\"\r\n cdkDropList\r\n [cdkDropListData]=\"items\"\r\n [cdkDropListDisabled]=\"!header?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId)\"\r\n [class.drop-zone]=\"header?.enableDragging && items.length <= 0\">\r\n @for (item of items; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !header?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <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-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle || subtitleTemplate) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (header?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n", styles: [".lf-list,.lf-list .lf-list-group{width:100%}.lf-list .lf-list-group .lf-list-group-header{font-weight:500;height:56px}.lf-list-item{width:100%;display:flex;flex-flow:row nowrap;align-items:center;justify-content:center;height:72px;border-radius:4px;box-sizing:border-box;overflow:hidden}.lf-list-item.disabled .lf-list-item-title-wrapper{opacity:.64}.lf-list-item .lf-list-item-sort-icon{font-size:16px;width:16px;height:16px;vertical-align:text-top}.lf-list-item .lf-list-item-checkbox{flex:0 0 40px}.lf-list-item .lf-list-item-avatar{flex:0 0 48px;display:flex;align-items:center;justify-content:center}.lf-list-item .lf-list-item-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover}.lf-list-item .lf-list-item-title-wrapper{display:flex;flex-flow:column;align-items:flex-start;flex:1 1 200px;overflow:hidden}.lf-list-item .lf-list-item-title-wrapper .lf-list-item-title{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lf-list-item .lf-list-item-title-wrapper .lf-list-item-subtitle{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:.8rem}.lf-list-item .lf-list-item-buttons{flex:0 0 auto;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.lf-list-item.lf-list-item-header{font-weight:500}.lf-list-item.lf-list-item-header .lf-list-item-title-wrapper span{width:80px}.lf-list-item.lf-list-item-data:hover{background-color:#00000014}.lf-list-item .flex-row{display:flex!important;flex-flow:row nowrap;align-items:center}.drop-zone{width:100%;height:72px;border:2px dashed rgba(128,128,128,.8);border-radius:4px;box-sizing:border-box}.clickable{cursor:pointer!important}.cdk-drag-preview{color:var(--mat-app-text-color, inherit)!important;background:var(--mat-app-background-color, inherit)!important;box-sizing:border-box;border-radius:4px;opacity:.8;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:.4}.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "component", type: IconComponent, selector: "lf-icon", inputs: ["matIcon", "svgIcon", "verticalAlign"] }] }); }
|
|
1553
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.5", type: ListComponent, isStandalone: true, selector: "lf-list", inputs: { config: "config", header: "header", items: "items", groupedItems: "groupedItems", buttons: "buttons", subtitleTemplate: "subtitleTemplate", dropListId: "dropListId", connectedDropListIds: "connectedDropListIds" }, outputs: { sortChangeEvent: "sortChangeEvent", selectionChangeEvent: "selectionChangeEvent", itemClickEvent: "itemClickEvent", itemDropEvent: "itemDropEvent", buttonClickEvent: "buttonClickEvent" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\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 <!-- checkbox -->\r\n @if (config?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (config?.mode === \"group\" && groupedItems) {\r\n @for (group of groupedItems | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n @if (group.key) {\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n }\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"config?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId\"\r\n cdkDropList\r\n [cdkDropListData]=\"items\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId)\"\r\n [class.drop-zone]=\"config?.enableDragging && items.length <= 0\">\r\n @for (item of items; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <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-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle || subtitleTemplate) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (config?.showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n", styles: [".lf-list,.lf-list .lf-list-group{width:100%}.lf-list .lf-list-group .lf-list-group-header{font-weight:500;height:56px}.lf-list-item{width:100%;display:flex;flex-flow:row nowrap;align-items:center;justify-content:center;height:72px;border-radius:4px;box-sizing:border-box;overflow:hidden}.lf-list-item.disabled .lf-list-item-title-wrapper{opacity:.64}.lf-list-item .lf-list-item-sort-icon{font-size:16px;width:16px;height:16px;vertical-align:text-top}.lf-list-item .lf-list-item-checkbox{flex:0 0 40px}.lf-list-item .lf-list-item-avatar{flex:0 0 48px;display:flex;align-items:center;justify-content:center}.lf-list-item .lf-list-item-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover}.lf-list-item .lf-list-item-title-wrapper{display:flex;flex-flow:column;align-items:flex-start;flex:1 1 200px;overflow:hidden}.lf-list-item .lf-list-item-title-wrapper .lf-list-item-title{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lf-list-item .lf-list-item-title-wrapper .lf-list-item-subtitle{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:.8rem}.lf-list-item .lf-list-item-buttons{flex:0 0 auto;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.lf-list-item.lf-list-item-header{font-weight:500}.lf-list-item.lf-list-item-header .lf-list-item-title-wrapper span{width:80px}.lf-list-item.lf-list-item-data:hover{background-color:#00000014}.lf-list-item .flex-row{display:flex!important;flex-flow:row nowrap;align-items:center}.drop-zone{width:100%;height:72px;border:2px dashed rgba(128,128,128,.8);border-radius:4px;box-sizing:border-box}.clickable{cursor:pointer!important}.cdk-drag-preview{color:var(--mat-app-text-color, inherit)!important;background:var(--mat-app-background-color, inherit)!important;box-sizing:border-box;border-radius:4px;opacity:.8;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:.4}.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "component", type: IconComponent, selector: "lf-icon", inputs: ["matIcon", "svgIcon", "verticalAlign"] }] }); }
|
|
1548
1554
|
}
|
|
1549
1555
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ListComponent, decorators: [{
|
|
1550
1556
|
type: Component,
|
|
1551
|
-
args: [{ selector: 'lf-list', standalone: true, imports: [SharedModule, IconComponent], template: "<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\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 <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (mode === \"group\" && groupedItems) {\r\n @for (group of groupedItems | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!header?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"header?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !header?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId\"\r\n cdkDropList\r\n [cdkDropListData]=\"items\"\r\n [cdkDropListDisabled]=\"!header?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId)\"\r\n [class.drop-zone]=\"header?.enableDragging && items.length <= 0\">\r\n @for (item of items; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !header?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <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-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle || subtitleTemplate) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (header?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n", styles: [".lf-list,.lf-list .lf-list-group{width:100%}.lf-list .lf-list-group .lf-list-group-header{font-weight:500;height:56px}.lf-list-item{width:100%;display:flex;flex-flow:row nowrap;align-items:center;justify-content:center;height:72px;border-radius:4px;box-sizing:border-box;overflow:hidden}.lf-list-item.disabled .lf-list-item-title-wrapper{opacity:.64}.lf-list-item .lf-list-item-sort-icon{font-size:16px;width:16px;height:16px;vertical-align:text-top}.lf-list-item .lf-list-item-checkbox{flex:0 0 40px}.lf-list-item .lf-list-item-avatar{flex:0 0 48px;display:flex;align-items:center;justify-content:center}.lf-list-item .lf-list-item-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover}.lf-list-item .lf-list-item-title-wrapper{display:flex;flex-flow:column;align-items:flex-start;flex:1 1 200px;overflow:hidden}.lf-list-item .lf-list-item-title-wrapper .lf-list-item-title{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lf-list-item .lf-list-item-title-wrapper .lf-list-item-subtitle{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:.8rem}.lf-list-item .lf-list-item-buttons{flex:0 0 auto;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.lf-list-item.lf-list-item-header{font-weight:500}.lf-list-item.lf-list-item-header .lf-list-item-title-wrapper span{width:80px}.lf-list-item.lf-list-item-data:hover{background-color:#00000014}.lf-list-item .flex-row{display:flex!important;flex-flow:row nowrap;align-items:center}.drop-zone{width:100%;height:72px;border:2px dashed rgba(128,128,128,.8);border-radius:4px;box-sizing:border-box}.clickable{cursor:pointer!important}.cdk-drag-preview{color:var(--mat-app-text-color, inherit)!important;background:var(--mat-app-background-color, inherit)!important;box-sizing:border-box;border-radius:4px;opacity:.8;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:.4}.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}\n"] }]
|
|
1552
|
-
}], propDecorators: {
|
|
1557
|
+
args: [{ selector: 'lf-list', standalone: true, imports: [SharedModule, IconComponent], template: "<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\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 <!-- checkbox -->\r\n @if (config?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (config?.mode === \"group\" && groupedItems) {\r\n @for (group of groupedItems | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n @if (group.key) {\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n }\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"config?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId\"\r\n cdkDropList\r\n [cdkDropListData]=\"items\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId)\"\r\n [class.drop-zone]=\"config?.enableDragging && items.length <= 0\">\r\n @for (item of items; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <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-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle || subtitleTemplate) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (config?.showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n", styles: [".lf-list,.lf-list .lf-list-group{width:100%}.lf-list .lf-list-group .lf-list-group-header{font-weight:500;height:56px}.lf-list-item{width:100%;display:flex;flex-flow:row nowrap;align-items:center;justify-content:center;height:72px;border-radius:4px;box-sizing:border-box;overflow:hidden}.lf-list-item.disabled .lf-list-item-title-wrapper{opacity:.64}.lf-list-item .lf-list-item-sort-icon{font-size:16px;width:16px;height:16px;vertical-align:text-top}.lf-list-item .lf-list-item-checkbox{flex:0 0 40px}.lf-list-item .lf-list-item-avatar{flex:0 0 48px;display:flex;align-items:center;justify-content:center}.lf-list-item .lf-list-item-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover}.lf-list-item .lf-list-item-title-wrapper{display:flex;flex-flow:column;align-items:flex-start;flex:1 1 200px;overflow:hidden}.lf-list-item .lf-list-item-title-wrapper .lf-list-item-title{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lf-list-item .lf-list-item-title-wrapper .lf-list-item-subtitle{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:.8rem}.lf-list-item .lf-list-item-buttons{flex:0 0 auto;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.lf-list-item.lf-list-item-header{font-weight:500}.lf-list-item.lf-list-item-header .lf-list-item-title-wrapper span{width:80px}.lf-list-item.lf-list-item-data:hover{background-color:#00000014}.lf-list-item .flex-row{display:flex!important;flex-flow:row nowrap;align-items:center}.drop-zone{width:100%;height:72px;border:2px dashed rgba(128,128,128,.8);border-radius:4px;box-sizing:border-box}.clickable{cursor:pointer!important}.cdk-drag-preview{color:var(--mat-app-text-color, inherit)!important;background:var(--mat-app-background-color, inherit)!important;box-sizing:border-box;border-radius:4px;opacity:.8;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:.4}.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}\n"] }]
|
|
1558
|
+
}], propDecorators: { config: [{
|
|
1559
|
+
type: Input
|
|
1560
|
+
}], header: [{
|
|
1553
1561
|
type: Input
|
|
1554
1562
|
}], items: [{
|
|
1555
1563
|
type: Input
|
|
@@ -1557,14 +1565,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
|
|
|
1557
1565
|
type: Input
|
|
1558
1566
|
}], buttons: [{
|
|
1559
1567
|
type: Input
|
|
1560
|
-
}], avatarFallbackPath: [{
|
|
1561
|
-
type: Input
|
|
1562
|
-
}], showDividers: [{
|
|
1563
|
-
type: Input
|
|
1564
1568
|
}], subtitleTemplate: [{
|
|
1565
1569
|
type: Input
|
|
1566
|
-
}], mode: [{
|
|
1567
|
-
type: Input
|
|
1568
1570
|
}], dropListId: [{
|
|
1569
1571
|
type: Input
|
|
1570
1572
|
}], connectedDropListIds: [{
|
|
@@ -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 { DragDropModule } from '@angular/cdk/drag-drop';\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 DragDropModule\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 verticalAlign: 'top' | 'middle' | 'bottom' | null = null;\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 [style.vertical-align]=\"verticalAlign\">\r\n {{ matIcon }}\r\n </mat-icon>\r\n <!-- svg icon -->\r\n} @else if (svgIcon) {\r\n <mat-icon class=\"lf-icon\" [svgIcon]=\"svgIcon\" [style.vertical-align]=\"verticalAlign\"></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 verticalAlign=\"bottom\"></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 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, EventEmitter, Input, OnInit, Output } 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 @Output() public drawerConfigUpdateEvent = new EventEmitter<DrawerConfig>();\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.drawerConfigUpdateEvent.emit({ ...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 drawerClosed(): void {\r\n if (this.drawerConfig) {\r\n this.drawerConfigUpdateEvent.emit({ ...this.drawerConfig, open: false });\r\n };\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)=\"drawerClosed()\"\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 floatingButtonConfigUpdateEvent = new EventEmitter<FloatingButtonConfig>();\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 const updatedFloatingButtonConfigConfig: FloatingButtonConfig = {\r\n ...this.floatingButtonConfig,\r\n matIcon: (!this.floatingButtonConfig.matIcon && !this.floatingButtonConfig.svgIcon) ? 'arrow_upward' : this.floatingButtonConfig.matIcon || this.floatingButtonConfig.svgIcon,\r\n horizontalPosition: this.floatingButtonConfig.horizontalPosition ?? 'right',\r\n bottomPositionPx: this.floatingButtonConfig.bottomPositionPx ?? this.DEFAULT_OFFSET,\r\n };\r\n\r\n if (JSON.stringify(updatedFloatingButtonConfigConfig) !== JSON.stringify(this.floatingButtonConfig)) {\r\n this.floatingButtonConfigUpdateEvent.emit(updatedFloatingButtonConfigConfig);\r\n }\r\n }\r\n\r\n }\r\n\r\n public buttonClicked(id?: string): void {\r\n this.floatingButtonClickEvent.emit(id);\r\n }\r\n\r\n 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 if (floatingButtonConfig.svgIcon) {\r\n <mat-icon [svgIcon]=\"floatingButtonConfig.svgIcon!\"></mat-icon>\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 $index; 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 headerConfigUpdateEvent = new EventEmitter<HeaderConfig>();\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 const updatedHeaderConfig: HeaderConfig = { ...this.headerConfig, inputConfig: { ...this.headerConfig?.inputConfig, enable: false } };\r\n this.headerConfigUpdateEvent.emit(updatedHeaderConfig);\r\n }\r\n }\r\n\r\n public buttonClicked(id?: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public inputChanged(value: string): void {\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n public inputClosed(): void {\r\n const updatedHeaderConfig: HeaderConfig = { ...this.headerConfig, inputConfig: { ...this.headerConfig?.inputConfig, enable: false } };\r\n this.headerConfigUpdateEvent.emit(updatedHeaderConfig);\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)=\"inputClosed()\"></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.id) {\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.id) {\r\n <!-- menu button -->\r\n @if (button.label) {\r\n <button\r\n mat-menu-item\r\n [class.lf-header-menu-button-active]=\"isActive(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\">\r\n <!-- icon -->\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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 mat-menu-item class=\"lf-menu-icons px-1\">\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- icon button -->\r\n @if (!button.label && (button.matIcon || button.svgIcon)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-menu-icon-button\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"top\"></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.id; let i = $index) {\r\n @if (i < 5) {\r\n <div\r\n class=\"lf-navbar-item\"\r\n [class.lf-navbar-item-active]=\"isActive(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <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 : \" \"\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 if (this.libraryConfig?.debugging) this.logger.log('[UPDATE] ScaffoldConfig', value);\r\n this._scaffoldConfig$.next(value);\r\n }\r\n\r\n public get scaffoldConfig(): ScaffoldConfig {\r\n return this._scaffoldConfig$.value;\r\n }\r\n\r\n // Header Input Change\r\n private _headerInputChangeValue$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get headerInputChangeValue$(): Observable<string> {\r\n return this._headerInputChangeValue$.asObservable();\r\n }\r\n\r\n public set headerInputChangeValue(value: string) {\r\n this._headerInputChangeValue$.next(value);\r\n }\r\n\r\n // Button Click Event\r\n private _buttonClickEventValue$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get buttonClickEventValue$(): Observable<string> {\r\n return this._buttonClickEventValue$.asObservable();\r\n }\r\n\r\n public set buttonClickEventValue(value: string) {\r\n this._buttonClickEventValue$.next(value);\r\n this._buttonClickEventValue$.next('');\r\n }\r\n\r\n // Drawer component\r\n private _drawerPortal$ = new BehaviorSubject<ComponentPortal<unknown> | TemplatePortal<unknown> | null>(null);\r\n\r\n public get drawerPortal$(): Observable<ComponentPortal<unknown> | TemplatePortal<unknown> | null> {\r\n return this._drawerPortal$.asObservable();\r\n }\r\n\r\n public set drawerPortal(value: ComponentType<unknown>) {\r\n const componentPortal: ComponentPortal<unknown> = new ComponentPortal(value);\r\n this._drawerPortal$.next(value ? componentPortal : null);\r\n }\r\n\r\n // Update a specific property in the ScaffoldConfig\r\n public updateScaffoldProperty<K extends keyof ScaffoldConfig>(property: K, value: ScaffoldConfig[K]): void {\r\n const currentState: ScaffoldConfig = this._scaffoldConfig$.getValue();\r\n\r\n if (currentState[property] === value) {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UNCHANGED] ScaffoldConfig.${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 // Header\r\n public headerConfigUpdated(headerConfig: HeaderConfig): void {\r\n this.scaffoldService.updateScaffoldProperty('headerConfig', headerConfig);\r\n }\r\n\r\n public headerButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public headerInputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public headerInputChanged(value: string): void {\r\n this.scaffoldService.headerInputChangeValue = value;\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n // Navbar\r\n public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Drawer\r\n public drawerConfigUpdated(drawerConfig: DrawerConfig): void {\r\n this.scaffoldService.updateScaffoldProperty('drawerConfig', drawerConfig);\r\n }\r\n\r\n // Content title card\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n // Floating button\r\n public floatingButtonConfigUpdated(floatingButtonConfig: FloatingButtonConfig): void {\r\n this.scaffoldService.updateScaffoldProperty('floatingButtonConfig', floatingButtonConfig);\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 // Bottom bar\r\n public bottomBarCloseClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n public bottomBarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n}\r\n","<!-- 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 (headerConfigUpdateEvent)=\"headerConfigUpdated($event)\"\r\n (headerButtonClickEvent)=\"headerButtonClicked($event)\"\r\n (headerInputSubmitEvent)=\"headerInputSubmitted($event)\"\r\n (headerInputChangeEvent)=\"headerInputChanged($event)\"></lf-header>\r\n <!-- navbar -->\r\n <lf-navbar\r\n [libraryConfig]=\"libraryConfig\"\r\n [navbarConfig]=\"navbarConfig\"\r\n [isMobile]=\"isMobile\"\r\n [currentRoute]=\"currentRoute\"\r\n (navbarButtonClickEvent)=\"navbarButtonClicked($event)\"></lf-navbar>\r\n <!-- content wrapper -->\r\n <div\r\n class=\"lf-content-wrapper\"\r\n [class.lf-show-navbar]=\"navbarConfig?.enable && !isMobile\"\r\n [class.lf-show-header]=\"headerConfig?.enable && !(navbarConfig?.enable && isMobile)\"\r\n [class.lf-show-navbar-mobile]=\"navbarConfig?.enable && isMobile && !headerConfig?.enable\"\r\n [class.lf-show-header-and-navbar-mobile]=\"\r\n headerConfig?.enable && navbarConfig?.enable && isMobile\r\n \"\r\n #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 (drawerConfigUpdateEvent)=\"drawerConfigUpdated($event)\">\r\n <!-- drawer content -->\r\n <ng-content select=\"[drawerContent]\" drawerContent></ng-content>\r\n <!-- content title card -->\r\n <lf-content-title-card\r\n [libraryConfig]=\"libraryConfig\"\r\n [contentTitleCardConfig]=\"contentTitleCardConfig\"\r\n [isMobile]=\"isMobile\"\r\n [routeHistory]=\"routeHistory\"\r\n (backButtonClickEvent)=\"backButtonClicked()\"></lf-content-title-card>\r\n <!-- main content -->\r\n <div\r\n class=\"lf-content\"\r\n [class.lf-content-mobile]=\"isMobile\"\r\n [class.lf-show-footer]=\"footerConfig?.enable\"\r\n #content>\r\n <ng-content></ng-content>\r\n </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 (floatingButtonConfigUpdateEvent)=\"floatingButtonConfigUpdated($event)\"\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.title) {\r\n <p class=\"lf-placeholder-title\">\r\n {{ placeholderConfig.title }}\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 verticalAlign=\"bottom\"></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 { CdkDragDrop, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, TemplateRef } 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 implements OnChanges {\r\n\r\n @Input() public header: ListHeader | null = null;\r\n @Input() public items: ListItem[] = [];\r\n @Input() public groupedItems: Map<string, ListItem[]> = new Map();\r\n @Input() public buttons: Button[] = [];\r\n @Input() public avatarFallbackPath: string;\r\n @Input() public showDividers: boolean = false;\r\n @Input() public subtitleTemplate: TemplateRef<any>;\r\n @Input() public mode: 'flat' | 'group' = 'flat';\r\n @Input() public dropListId: string;\r\n @Input() public connectedDropListIds: 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 itemDropEvent = new EventEmitter<{ items: ListItem[], id: string }>();\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 public allSelected: boolean = false;\r\n\r\n get someSelected(): boolean {\r\n return this.items.length > 0 && this.items.some((item: ListItem) => item.checked) && !this.allSelected;\r\n }\r\n\r\n get hasAvatars(): boolean {\r\n return !!this.items?.some((item: ListItem) => (item.avatar || item.matIcon || item.svgIcon));\r\n }\r\n\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['items']) {\r\n this.allSelected = this.items.length > 0 && this.items.every((item: ListItem) => item.checked);\r\n }\r\n }\r\n\r\n\r\n // Update the sort token\r\n public updateSortToken(sortToken: string | undefined): 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 // Select all items\r\n public selectAll(event: MatCheckboxChange): void {\r\n this.allSelected = event.checked;\r\n\r\n this.items.forEach((item: ListItem) => {\r\n if (!item.disabled) item.checked = this.allSelected;\r\n });\r\n\r\n this.selectionChangeEvent.emit(this.items);\r\n }\r\n\r\n // Select single item\r\n public selectItem(item: ListItem, event: MatCheckboxChange): void {\r\n this.allSelected = this.items.length > 0 && this.items.every((item: ListItem) => item.checked);\r\n item.checked = event.checked;\r\n this.selectionChangeEvent.emit([item]);\r\n }\r\n\r\n // Handle item click events\r\n public clickItem(item: ListItem, click: Event): void {\r\n this.stopPropagation(click);\r\n this.itemClickEvent.emit(item)\r\n }\r\n\r\n // Handle item drop events\r\n public dropItem(event: CdkDragDrop<ListItem[]>, id: string): void {\r\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n this.itemDropEvent.emit({ items: event.container.data, id });\r\n }\r\n\r\n // Handle button click events\r\n public clickButton(event: { buttonId: string, item: ListItem }, click: Event): void {\r\n this.stopPropagation(click);\r\n this.buttonClickEvent.emit(event);\r\n }\r\n\r\n // Combine list and item buttons\r\n public getCombinedButtons(item: ListItem): Button[] {\r\n return [...(item.buttons ?? []), ...(this.buttons ?? [])];\r\n }\r\n\r\n // Handle image errors\r\n public onImageError(event: Event): void {\r\n const target = event.target as HTMLImageElement;\r\n target.src = this.avatarFallbackPath || '';\r\n }\r\n\r\n // Stop click trough events\r\n public stopPropagation(click: Event): void {\r\n click.stopImmediatePropagation();\r\n }\r\n}\r\n","<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\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 <!-- checkbox -->\r\n @if (header.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (mode === \"group\" && groupedItems) {\r\n @for (group of groupedItems | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!header?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"header?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !header?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId\"\r\n cdkDropList\r\n [cdkDropListData]=\"items\"\r\n [cdkDropListDisabled]=\"!header?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId)\"\r\n [class.drop-zone]=\"header?.enableDragging && items.length <= 0\">\r\n @for (item of items; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !header?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <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-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle || subtitleTemplate) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (header?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (header?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\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 { DragDropModule } from '@angular/cdk/drag-drop';\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 DragDropModule\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 verticalAlign: 'top' | 'middle' | 'bottom' | null = null;\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 [style.vertical-align]=\"verticalAlign\">\r\n {{ matIcon }}\r\n </mat-icon>\r\n <!-- svg icon -->\r\n} @else if (svgIcon) {\r\n <mat-icon class=\"lf-icon\" [svgIcon]=\"svgIcon\" [style.vertical-align]=\"verticalAlign\"></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 verticalAlign=\"bottom\"></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 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, EventEmitter, Input, OnInit, Output } 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 @Output() public drawerConfigUpdateEvent = new EventEmitter<DrawerConfig>();\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.drawerConfigUpdateEvent.emit({ ...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 drawerClosed(): void {\r\n if (this.drawerConfig) {\r\n this.drawerConfigUpdateEvent.emit({ ...this.drawerConfig, open: false });\r\n };\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)=\"drawerClosed()\"\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 floatingButtonConfigUpdateEvent = new EventEmitter<FloatingButtonConfig>();\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 const updatedFloatingButtonConfigConfig: FloatingButtonConfig = {\r\n ...this.floatingButtonConfig,\r\n matIcon: (!this.floatingButtonConfig.matIcon && !this.floatingButtonConfig.svgIcon) ? 'arrow_upward' : this.floatingButtonConfig.matIcon || this.floatingButtonConfig.svgIcon,\r\n horizontalPosition: this.floatingButtonConfig.horizontalPosition ?? 'right',\r\n bottomPositionPx: this.floatingButtonConfig.bottomPositionPx ?? this.DEFAULT_OFFSET,\r\n };\r\n\r\n if (JSON.stringify(updatedFloatingButtonConfigConfig) !== JSON.stringify(this.floatingButtonConfig)) {\r\n this.floatingButtonConfigUpdateEvent.emit(updatedFloatingButtonConfigConfig);\r\n }\r\n }\r\n\r\n }\r\n\r\n public buttonClicked(id?: string): void {\r\n this.floatingButtonClickEvent.emit(id);\r\n }\r\n\r\n 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 if (floatingButtonConfig.svgIcon) {\r\n <mat-icon [svgIcon]=\"floatingButtonConfig.svgIcon!\"></mat-icon>\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 $index; 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 headerConfigUpdateEvent = new EventEmitter<HeaderConfig>();\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 const updatedHeaderConfig: HeaderConfig = { ...this.headerConfig, inputConfig: { ...this.headerConfig?.inputConfig, enable: false } };\r\n this.headerConfigUpdateEvent.emit(updatedHeaderConfig);\r\n }\r\n }\r\n\r\n public buttonClicked(id?: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public inputChanged(value: string): void {\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n public inputClosed(): void {\r\n const updatedHeaderConfig: HeaderConfig = { ...this.headerConfig, inputConfig: { ...this.headerConfig?.inputConfig, enable: false } };\r\n this.headerConfigUpdateEvent.emit(updatedHeaderConfig);\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)=\"inputClosed()\"></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.id) {\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.id) {\r\n <!-- menu button -->\r\n @if (button.label) {\r\n <button\r\n mat-menu-item\r\n [class.lf-header-menu-button-active]=\"isActive(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\">\r\n <!-- icon -->\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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 mat-menu-item class=\"lf-menu-icons px-1\">\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- icon button -->\r\n @if (!button.label && (button.matIcon || button.svgIcon)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-menu-icon-button\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"top\"></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.id; let i = $index) {\r\n @if (i < 5) {\r\n <div\r\n class=\"lf-navbar-item\"\r\n [class.lf-navbar-item-active]=\"isActive(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <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 : \" \"\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 if (this.libraryConfig?.debugging) this.logger.log('[UPDATE] ScaffoldConfig', value);\r\n this._scaffoldConfig$.next(value);\r\n }\r\n\r\n public get scaffoldConfig(): ScaffoldConfig {\r\n return this._scaffoldConfig$.value;\r\n }\r\n\r\n // Header Input Change\r\n private _headerInputChangeValue$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get headerInputChangeValue$(): Observable<string> {\r\n return this._headerInputChangeValue$.asObservable();\r\n }\r\n\r\n public set headerInputChangeValue(value: string) {\r\n this._headerInputChangeValue$.next(value);\r\n }\r\n\r\n // Button Click Event\r\n private _buttonClickEventValue$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get buttonClickEventValue$(): Observable<string> {\r\n return this._buttonClickEventValue$.asObservable();\r\n }\r\n\r\n public set buttonClickEventValue(value: string) {\r\n this._buttonClickEventValue$.next(value);\r\n this._buttonClickEventValue$.next('');\r\n }\r\n\r\n // Drawer component\r\n private _drawerPortal$ = new BehaviorSubject<ComponentPortal<unknown> | TemplatePortal<unknown> | null>(null);\r\n\r\n public get drawerPortal$(): Observable<ComponentPortal<unknown> | TemplatePortal<unknown> | null> {\r\n return this._drawerPortal$.asObservable();\r\n }\r\n\r\n public set drawerPortal(value: ComponentType<unknown>) {\r\n const componentPortal: ComponentPortal<unknown> = new ComponentPortal(value);\r\n this._drawerPortal$.next(value ? componentPortal : null);\r\n }\r\n\r\n // Update a specific property in the ScaffoldConfig\r\n public updateScaffoldProperty<K extends keyof ScaffoldConfig>(property: K, value: ScaffoldConfig[K]): void {\r\n const currentState: ScaffoldConfig = this._scaffoldConfig$.getValue();\r\n\r\n if (currentState[property] === value) {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UNCHANGED] ScaffoldConfig.${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 // Header\r\n public headerConfigUpdated(headerConfig: HeaderConfig): void {\r\n this.scaffoldService.updateScaffoldProperty('headerConfig', headerConfig);\r\n }\r\n\r\n public headerButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public headerInputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public headerInputChanged(value: string): void {\r\n this.scaffoldService.headerInputChangeValue = value;\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n // Navbar\r\n public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Drawer\r\n public drawerConfigUpdated(drawerConfig: DrawerConfig): void {\r\n this.scaffoldService.updateScaffoldProperty('drawerConfig', drawerConfig);\r\n }\r\n\r\n // Content title card\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n // Floating button\r\n public floatingButtonConfigUpdated(floatingButtonConfig: FloatingButtonConfig): void {\r\n this.scaffoldService.updateScaffoldProperty('floatingButtonConfig', floatingButtonConfig);\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 // Bottom bar\r\n public bottomBarCloseClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n public bottomBarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n}\r\n","<!-- 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 (headerConfigUpdateEvent)=\"headerConfigUpdated($event)\"\r\n (headerButtonClickEvent)=\"headerButtonClicked($event)\"\r\n (headerInputSubmitEvent)=\"headerInputSubmitted($event)\"\r\n (headerInputChangeEvent)=\"headerInputChanged($event)\"></lf-header>\r\n <!-- navbar -->\r\n <lf-navbar\r\n [libraryConfig]=\"libraryConfig\"\r\n [navbarConfig]=\"navbarConfig\"\r\n [isMobile]=\"isMobile\"\r\n [currentRoute]=\"currentRoute\"\r\n (navbarButtonClickEvent)=\"navbarButtonClicked($event)\"></lf-navbar>\r\n <!-- content wrapper -->\r\n <div\r\n class=\"lf-content-wrapper\"\r\n [class.lf-show-navbar]=\"navbarConfig?.enable && !isMobile\"\r\n [class.lf-show-header]=\"headerConfig?.enable && !(navbarConfig?.enable && isMobile)\"\r\n [class.lf-show-navbar-mobile]=\"navbarConfig?.enable && isMobile && !headerConfig?.enable\"\r\n [class.lf-show-header-and-navbar-mobile]=\"\r\n headerConfig?.enable && navbarConfig?.enable && isMobile\r\n \"\r\n #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 (drawerConfigUpdateEvent)=\"drawerConfigUpdated($event)\">\r\n <!-- drawer content -->\r\n <ng-content select=\"[drawerContent]\" drawerContent></ng-content>\r\n <!-- content title card -->\r\n <lf-content-title-card\r\n [libraryConfig]=\"libraryConfig\"\r\n [contentTitleCardConfig]=\"contentTitleCardConfig\"\r\n [isMobile]=\"isMobile\"\r\n [routeHistory]=\"routeHistory\"\r\n (backButtonClickEvent)=\"backButtonClicked()\"></lf-content-title-card>\r\n <!-- main content -->\r\n <div\r\n class=\"lf-content\"\r\n [class.lf-content-mobile]=\"isMobile\"\r\n [class.lf-show-footer]=\"footerConfig?.enable\"\r\n #content>\r\n <ng-content></ng-content>\r\n </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 (floatingButtonConfigUpdateEvent)=\"floatingButtonConfigUpdated($event)\"\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.title) {\r\n <p class=\"lf-placeholder-title\">\r\n {{ placeholderConfig.title }}\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 verticalAlign=\"bottom\"></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 { CdkDragDrop, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { Button, ListConfig, 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 implements OnInit, OnChanges {\r\n\r\n @Input() public config: ListConfig | null = null;\r\n @Input() public header: ListHeader | null = null;\r\n @Input() public items: ListItem[] = [];\r\n @Input() public groupedItems: Map<string, ListItem[]> = new Map();\r\n @Input() public buttons: Button[] = [];\r\n @Input() public subtitleTemplate: TemplateRef<any>;\r\n\r\n @Input() public dropListId: string;\r\n @Input() public connectedDropListIds: 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 itemDropEvent = new EventEmitter<{ items: ListItem[], id: string }>();\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 = true;\r\n public allSelected: boolean = false;\r\n\r\n get someSelected(): boolean {\r\n return this.items.length > 0 && this.items.some((item: ListItem) => item.checked) && !this.allSelected;\r\n }\r\n\r\n get hasAvatars(): boolean {\r\n return !!this.items?.some((item: ListItem) => (item.avatar || item.matIcon || item.svgIcon));\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n if (this.config) {\r\n this.sortToken = this.config.initialSortToken || '';\r\n this.sortAsc = this.config.initialSortAsc || false;\r\n this.updateSortToken(this.sortToken, true);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['items']) {\r\n this.allSelected = this.items.length > 0 && this.items.every((item: ListItem) => item.checked);\r\n }\r\n }\r\n\r\n\r\n // Update the sort token\r\n public updateSortToken(sortToken: string | undefined, initial?: boolean): void {\r\n if (!sortToken) return;\r\n if (this.sortToken === sortToken && !initial) this.sortAsc = !this.sortAsc;\r\n this.sortToken = sortToken;\r\n this.sortChangeEvent.emit({ sortToken: this.sortToken, sortAsc: this.sortAsc });\r\n }\r\n\r\n // Select all items\r\n public selectAll(event: MatCheckboxChange): void {\r\n this.allSelected = event.checked;\r\n\r\n this.items.forEach((item: ListItem) => {\r\n if (!item.disabled) item.checked = this.allSelected;\r\n });\r\n\r\n this.selectionChangeEvent.emit(this.items);\r\n }\r\n\r\n // Select single item\r\n public selectItem(item: ListItem, event: MatCheckboxChange): void {\r\n this.allSelected = this.items.length > 0 && this.items.every((item: ListItem) => item.checked);\r\n item.checked = event.checked;\r\n this.selectionChangeEvent.emit([item]);\r\n }\r\n\r\n // Handle item click events\r\n public clickItem(item: ListItem, click: Event): void {\r\n this.stopPropagation(click);\r\n this.itemClickEvent.emit(item)\r\n }\r\n\r\n // Handle item drop events\r\n public dropItem(event: CdkDragDrop<ListItem[]>, id: string): void {\r\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n this.itemDropEvent.emit({ items: event.container.data, id });\r\n }\r\n\r\n // Handle button click events\r\n public clickButton(event: { buttonId: string, item: ListItem }, click: Event): void {\r\n this.stopPropagation(click);\r\n this.buttonClickEvent.emit(event);\r\n }\r\n\r\n // Combine list and item buttons\r\n public getCombinedButtons(item: ListItem): Button[] {\r\n return [...(item.buttons ?? []), ...(this.buttons ?? [])];\r\n }\r\n\r\n // Handle image errors\r\n public onImageError(event: Event): void {\r\n const target = event.target as HTMLImageElement;\r\n target.src = this.config?.avatarFallbackPath || '';\r\n }\r\n\r\n // Stop click trough events\r\n public stopPropagation(click: Event): void {\r\n click.stopImmediatePropagation();\r\n }\r\n}\r\n","<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <lf-icon [matIcon]=\"header.matIcon\" [svgIcon]=\"header.svgIcon\"></lf-icon>\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\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 <!-- checkbox -->\r\n @if (config?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (config?.mode === \"group\" && groupedItems) {\r\n @for (group of groupedItems | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n @if (group.key) {\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n }\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"config?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId\"\r\n cdkDropList\r\n [cdkDropListData]=\"items\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId)\"\r\n [class.drop-zone]=\"config?.enableDragging && items.length <= 0\">\r\n @for (item of items; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <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-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n {{ item.title }}\r\n </span>\r\n @if (item.subtitle || subtitleTemplate) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n @if (button.matIcon || button.svgIcon) {\r\n <lf-icon\r\n [matIcon]=\"button.matIcon\"\r\n [svgIcon]=\"button.svgIcon\"\r\n verticalAlign=\"bottom\"></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-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <lf-icon [matIcon]=\"button.matIcon\" [svgIcon]=\"button.svgIcon\"></lf-icon>\r\n </button>\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (config?.showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n","import {\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
|
@@ -169,8 +169,15 @@ interface ListHeader {
|
|
|
169
169
|
avatar?: string;
|
|
170
170
|
items?: ListHeaderItem[];
|
|
171
171
|
buttons?: Button[];
|
|
172
|
+
}
|
|
173
|
+
interface ListConfig {
|
|
172
174
|
enableSelection?: boolean;
|
|
173
175
|
enableDragging?: boolean;
|
|
176
|
+
mode?: 'flat' | 'group';
|
|
177
|
+
initialSortToken?: string;
|
|
178
|
+
initialSortAsc?: boolean;
|
|
179
|
+
showDividers?: boolean;
|
|
180
|
+
avatarFallbackPath?: string;
|
|
174
181
|
}
|
|
175
182
|
interface ListHeaderItem {
|
|
176
183
|
title: string;
|
|
@@ -442,15 +449,13 @@ declare class FileUploadComponent {
|
|
|
442
449
|
static ɵcmp: i0.ɵɵComponentDeclaration<FileUploadComponent, "lf-file-upload", never, { "color": { "alias": "color"; "required": false; }; "label": { "alias": "label"; "required": false; }; "matIcon": { "alias": "matIcon"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; }, { "fileChangeEvent": "fileChangeEvent"; }, never, never, true, never>;
|
|
443
450
|
}
|
|
444
451
|
|
|
445
|
-
declare class ListComponent implements OnChanges {
|
|
452
|
+
declare class ListComponent implements OnInit, OnChanges {
|
|
453
|
+
config: ListConfig | null;
|
|
446
454
|
header: ListHeader | null;
|
|
447
455
|
items: ListItem[];
|
|
448
456
|
groupedItems: Map<string, ListItem[]>;
|
|
449
457
|
buttons: Button[];
|
|
450
|
-
avatarFallbackPath: string;
|
|
451
|
-
showDividers: boolean;
|
|
452
458
|
subtitleTemplate: TemplateRef<any>;
|
|
453
|
-
mode: 'flat' | 'group';
|
|
454
459
|
dropListId: string;
|
|
455
460
|
connectedDropListIds: string[];
|
|
456
461
|
sortChangeEvent: EventEmitter<{
|
|
@@ -472,8 +477,9 @@ declare class ListComponent implements OnChanges {
|
|
|
472
477
|
allSelected: boolean;
|
|
473
478
|
get someSelected(): boolean;
|
|
474
479
|
get hasAvatars(): boolean;
|
|
480
|
+
ngOnInit(): void;
|
|
475
481
|
ngOnChanges(changes: SimpleChanges): void;
|
|
476
|
-
updateSortToken(sortToken: string | undefined): void;
|
|
482
|
+
updateSortToken(sortToken: string | undefined, initial?: boolean): void;
|
|
477
483
|
selectAll(event: MatCheckboxChange): void;
|
|
478
484
|
selectItem(item: ListItem, event: MatCheckboxChange): void;
|
|
479
485
|
clickItem(item: ListItem, click: Event): void;
|
|
@@ -486,7 +492,7 @@ declare class ListComponent implements OnChanges {
|
|
|
486
492
|
onImageError(event: Event): void;
|
|
487
493
|
stopPropagation(click: Event): void;
|
|
488
494
|
static ɵfac: i0.ɵɵFactoryDeclaration<ListComponent, never>;
|
|
489
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ListComponent, "lf-list", never, { "
|
|
495
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ListComponent, "lf-list", never, { "config": { "alias": "config"; "required": false; }; "header": { "alias": "header"; "required": false; }; "items": { "alias": "items"; "required": false; }; "groupedItems": { "alias": "groupedItems"; "required": false; }; "buttons": { "alias": "buttons"; "required": false; }; "subtitleTemplate": { "alias": "subtitleTemplate"; "required": false; }; "dropListId": { "alias": "dropListId"; "required": false; }; "connectedDropListIds": { "alias": "connectedDropListIds"; "required": false; }; }, { "sortChangeEvent": "sortChangeEvent"; "selectionChangeEvent": "selectionChangeEvent"; "itemClickEvent": "itemClickEvent"; "itemDropEvent": "itemDropEvent"; "buttonClickEvent": "buttonClickEvent"; }, never, never, true, never>;
|
|
490
496
|
}
|
|
491
497
|
|
|
492
498
|
declare class BreakpointService {
|
|
@@ -715,4 +721,4 @@ declare class ScaffoldLoadingInterceptor implements HttpInterceptor {
|
|
|
715
721
|
}
|
|
716
722
|
|
|
717
723
|
export { BreakpointService, CONFIG, DialogService, FileUploadComponent, ListComponent, LocalStorageService, Logger, PlaceholderComponent, RouterService, ScaffoldComponent, ScaffoldLoadingInterceptor, ScaffoldModule, ScaffoldService, SeoService, SnackbarService, ThemeService };
|
|
718
|
-
export type { BottomBarConfig, Button, ConfirmDialogConfig, ContentTitleCardConfig, DrawerConfig, FloatingButtonConfig, FooterConfig, HeaderConfig, HeaderInputConfig, ListHeader, ListItem, MenuButton, NavbarConfig, NavigationLink, PlaceholderConfig, ScaffoldConfig, ScaffoldLibraryConfig, SeoConfig };
|
|
724
|
+
export type { BottomBarConfig, Button, ConfirmDialogConfig, ContentTitleCardConfig, DrawerConfig, FloatingButtonConfig, FooterConfig, HeaderConfig, HeaderInputConfig, ListConfig, ListHeader, ListItem, MenuButton, NavbarConfig, NavigationLink, PlaceholderConfig, ScaffoldConfig, ScaffoldLibraryConfig, SeoConfig };
|