@lukfel/ng-scaffold 21.1.1 → 21.1.3

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 CHANGED
@@ -76,29 +76,23 @@ import { ScaffoldService, DrawerConfig, HeaderConfig, MenuButton } from '@lukfel
76
76
 
77
77
  export class AppComponent {
78
78
 
79
- constructor(private scaffoldService: ScaffoldService) {
80
- this.scaffoldService.scaffoldConfig = this.scaffoldConfig;
81
- }
79
+ ...
82
80
 
83
81
  // Example #1: Toggle the drawer open state
84
82
  public toggleDrawer(): void {
85
- const currentDrawerConfig: DrawerConfig = this.scaffoldService.scaffoldConfig.drawerConfig!;
86
- const updatedDrawerConfig: DrawerConfig = { ...currentDrawerConfig, open: !currentDrawerConfig.open };
87
- this.scaffoldService.updateScaffoldProperty('drawerConfig', updatedDrawerConfig);
83
+ const open: boolean = this.scaffoldService?.scaffoldConfig?.drawerConfig?.open || false;
84
+ this.scaffoldService.updateScaffoldProperty('drawerConfig', { open: !open });
88
85
  }
89
86
 
90
87
  // Example #2: Enable the header input field
91
88
  public enableHeaderInput(): void {
92
- const currentHeaderConfig: HeaderConfig = this.scaffoldService.scaffoldConfig.headerConfig!;
93
- const updatedHeaderConfig: HeaderConfig = { ...currentHeaderConfig, inputConfig: { enable: true } };
94
- this.scaffoldService.updateScaffoldProperty('headerConfig', updatedHeaderConfig);
89
+ this.scaffoldService.updateScaffoldProperty('headerConfig', inputConfig: { enable: true });
95
90
  }
96
91
 
97
92
  // Example #2: Add new button to navbar
98
93
  public addNavbarButton(button: MenuButton): void {
99
- const currentNavbarConfig: NavbarConfig = this.scaffoldService.scaffoldConfig.navbarConfig!;
100
- const updatedNavbarConfig: NavbarConfig = { ...currentNavbarConfig, menuButtons: [...currentNavbarConfig.menuButtons!, button] };
101
- this.scaffoldService.updateScaffoldProperty('navbarConfig', updatedNavbarConfig);
94
+ const currentNavbarConfig: NavbarConfig = this.scaffoldService.scaffoldConfig.navbarConfig;
95
+ this.scaffoldService.updateScaffoldProperty('navbarConfig', { menuButtons: [...currentNavbarConfig.menuButtons, button] });
102
96
  }
103
97
  }
104
98
  ```
@@ -146,13 +146,13 @@ class DrawerComponent {
146
146
  ngOnInit() {
147
147
  // Avoid initializing an open drawer on mobile
148
148
  if (this.isMobile && this.drawerConfig?.enable && this.drawerConfig?.open) {
149
- this.drawerConfigUpdateEvent.emit({ ...this.drawerConfig, open: false });
149
+ this.drawerConfigUpdateEvent.emit({ open: false });
150
150
  }
151
151
  }
152
152
  // Detect when the drawer is closed without clicking a button
153
153
  drawerClosed() {
154
154
  if (this.drawerConfig) {
155
- this.drawerConfigUpdateEvent.emit({ ...this.drawerConfig, open: false });
155
+ this.drawerConfigUpdateEvent.emit({ open: false });
156
156
  }
157
157
  ;
158
158
  }
@@ -189,7 +189,6 @@ class FloatingButtonComponent {
189
189
  ngOnInit() {
190
190
  if (this.floatingButtonConfig) {
191
191
  const updatedFloatingButtonConfigConfig = {
192
- ...this.floatingButtonConfig,
193
192
  matIcon: (!this.floatingButtonConfig.matIcon && !this.floatingButtonConfig.svgIcon) ? 'arrow_upward' : this.floatingButtonConfig.matIcon || this.floatingButtonConfig.svgIcon,
194
193
  horizontalPosition: this.floatingButtonConfig.horizontalPosition ?? 'right'
195
194
  };
@@ -431,13 +430,6 @@ class HeaderComponent {
431
430
  this.headerInputSubmitEvent = new EventEmitter();
432
431
  this.headerInputChangeEvent = new EventEmitter();
433
432
  }
434
- ngOnInit() {
435
- // Avoid initializing the header with an open input field on mobile
436
- if (this.isMobile && this.headerConfig?.inputConfig?.enable) {
437
- const updatedHeaderConfig = { ...this.headerConfig, inputConfig: { ...this.headerConfig?.inputConfig, enable: false } };
438
- this.headerConfigUpdateEvent.emit(updatedHeaderConfig);
439
- }
440
- }
441
433
  buttonClicked(id) {
442
434
  if (!id) {
443
435
  return;
@@ -451,8 +443,7 @@ class HeaderComponent {
451
443
  this.headerInputChangeEvent.emit(value);
452
444
  }
453
445
  inputClosed() {
454
- const updatedHeaderConfig = { ...this.headerConfig, inputConfig: { ...this.headerConfig?.inputConfig, enable: false } };
455
- this.headerConfigUpdateEvent.emit(updatedHeaderConfig);
446
+ this.headerConfigUpdateEvent.emit({ inputConfig: { enable: false } });
456
447
  }
457
448
  isActive(id) {
458
449
  if (!id || !this.currentRoute) {
@@ -953,15 +944,22 @@ class ScaffoldService {
953
944
  // Update a specific property in the ScaffoldConfig
954
945
  updateScaffoldProperty(property, value) {
955
946
  const currentState = this._scaffoldConfig$.getValue();
956
- if (currentState[property] === value) {
947
+ const currentValue = currentState[property];
948
+ let newValue;
949
+ if (currentValue && typeof currentValue === 'object' && value && typeof value === 'object') {
950
+ newValue = { ...currentValue, ...value };
951
+ }
952
+ else {
953
+ newValue = value;
954
+ }
955
+ if (newValue === currentValue) {
957
956
  if (this.libraryConfig?.debugging)
958
- this.logger.log(`[UNCHANGED] ScaffoldConfig.${property}`, value);
957
+ this.logger.log(`[UNCHANGED] ScaffoldConfig.${property}`, newValue);
959
958
  return;
960
959
  }
961
- const updatedState = { ...currentState, [property]: value };
962
960
  if (this.libraryConfig?.debugging)
963
- this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, value);
964
- this._scaffoldConfig$.next(updatedState);
961
+ this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, newValue);
962
+ this._scaffoldConfig$.next({ ...currentState, [property]: newValue });
965
963
  }
966
964
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ScaffoldService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
967
965
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ScaffoldService, providedIn: 'root' }); }
@@ -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/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/modules/material.module.ts","../../../projects/ng-scaffold/src/lib/shared/shared.module.ts","../../../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/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/overlay.service.ts","../../../projects/ng-scaffold/src/lib/services/router.service.ts","../../../projects/ng-scaffold/src/lib/services/scaffold.service.ts","../../../projects/ng-scaffold/src/lib/services/seo.service.ts","../../../projects/ng-scaffold/src/lib/services/snackbar.service.ts","../../../projects/ng-scaffold/src/lib/services/theme.service.ts","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.ts","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.html","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.ts","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.html","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.ts","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.html","../../../projects/ng-scaffold/src/lib/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/directives/list/list-item-avatar.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-buttons.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-subtitle.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-title.directive.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.html","../../../projects/ng-scaffold/src/lib/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 { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { 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 animations: [\r\n trigger('slideUpDown', [\r\n state('void', style({ transform: 'translateY(100%)' })),\r\n state('*', style({ transform: 'translateY(0)' })),\r\n transition(':enter', [style({ transform: 'translateY(100%)' }), animate('200ms linear')]),\r\n transition(':leave', [animate('200ms linear', style({ transform: 'translateY(100%)' }))])\r\n ])\r\n ],\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 [@slideUpDown]\r\n class=\"lf-bottom-bar lf-transitions 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 <!-- label button -->\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-bottom-bar-button ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ button.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else {\r\n <button\r\n mat-icon-button\r\n color=\"accent\"\r\n class=\"lf-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n","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 > 0) {\r\n <button mat-icon-button color=\"accent\" (click)=\"backButtonClicked()\">\r\n <mat-icon>arrow_back_ios</mat-icon>\r\n </button>\r\n }\r\n <!-- spacer -->\r\n <div 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 headerEnabled: boolean = false;\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\r\n class=\"lf-drawer-container lf-transitions\"\r\n [ngClass]=\"drawerConfig.cssClass\">\r\n <!-- drawer -->\r\n <mat-sidenav\r\n class=\"lf-drawer mat-elevation-z2\"\r\n [class.mobile]=\"isMobile\"\r\n [mode]=\"isMobile ? 'over' : 'side'\"\r\n [opened]=\"drawerConfig.open\"\r\n [autoFocus]=\"false\"\r\n [fixedInViewport]=\"drawerConfig.fixed\"\r\n [class.lf-drawer-show-header]=\"headerEnabled && drawerConfig.fixed\"\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 style=\"overflow: unset !important\">\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 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 };\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}\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 lf-transitions\"\r\n [ngClass]=\"floatingButtonConfig.cssClass\"\r\n [ngClass]=\"floatingButtonConfig.horizontalPosition\"\r\n [class.sticky]=\"floatingButtonConfig.sticky\"\r\n [class.show-navbar]=\"isMobile && !bottomBarEnabled\"\r\n [class.show-bottom-bar]=\"bottomBarEnabled && !isMobile\"\r\n [class.show-navbar-and-bottom-bar]=\"isMobile && bottomBarEnabled\"\r\n [extended]=\"!!floatingButtonConfig.label\"\r\n (click)=\"buttonClicked(floatingButtonConfig.id)\"\r\n [matTooltip]=\"floatingButtonConfig.tooltip!\">\r\n <!-- 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 lf-transitions 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 { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { NgModule } from '@angular/core';\r\n\r\n//Angular Material Components\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\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 { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\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 { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatRippleModule } from '@angular/material/core';\r\n\r\n\r\n@NgModule({\r\n declarations: [],\r\n exports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatCardModule,\r\n MatExpansionModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatRippleModule,\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 { 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 { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { HeaderConfig, HeaderResponsiveConfig, MenuButton, 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 animations: [\r\n trigger('slideDownUp', [\r\n state('void', style({ transform: 'translateY(-100%)' })),\r\n state('*', style({ transform: 'translateY(0)' })),\r\n transition(':enter', [style({ transform: 'translateY(-100%)' }), animate('200ms ease-out', style({ transform: 'translateY(0)' }))]),\r\n transition(':leave', [animate('200ms ease-in', style({ transform: 'translateY(-100%)' }))])\r\n ])\r\n ],\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 public mobileButton: MenuButton;\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 public getRightMobileButton(): MenuButton | null {\r\n const rightMenuButtons: MenuButton[] = this.headerConfig?.rightMenuButtons || [];\r\n if (!rightMenuButtons?.length) return null;\r\n\r\n const config: HeaderResponsiveConfig | undefined = this.headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n const includedButtons: MenuButton[] = rightMenuButtons.filter((button: MenuButton) => !config?.excludeButtonIds?.includes(button.id));\r\n return {\r\n id: '',\r\n matIcon: (!config.matIcon && !config.svgIcon && !config.label) ? 'more_vert' : config.matIcon,\r\n svgIcon: config.svgIcon,\r\n label: config.label,\r\n menuButtons: [...includedButtons]\r\n };\r\n }\r\n\r\n public getRightExcludedButtons(): MenuButton[] | null {\r\n const rightMenuButtons: MenuButton[] = this.headerConfig?.rightMenuButtons || [];\r\n if (!rightMenuButtons?.length) return null;\r\n\r\n const config: HeaderResponsiveConfig | undefined = this.headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n const excludedButtons: MenuButton[] = rightMenuButtons.filter((button: MenuButton) => config?.excludeButtonIds?.includes(button.id));\r\n return excludedButtons;\r\n }\r\n\r\n}\r\n","@if (headerConfig && headerConfig.enable) {\r\n <mat-toolbar\r\n class=\"lf-header lf-transitions mat-elevation-z3\"\r\n [class.px-4]=\"!isMobile\"\r\n [class.px-1]=\"isMobile\"\r\n [ngClass]=\"headerConfig.cssClass\"\r\n [class.lf-gradient]=\"headerConfig.gradient\"\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 <!-- img logo -->\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 <!-- 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 @if (headerConfig.responsiveConfig?.enable && isMobile) {\r\n @let exludedButtons = getRightExcludedButtons();\r\n @for (button of exludedButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n @let mobileButton = getRightMobileButton();\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: mobileButton,\r\n }\"></ng-container>\r\n } @else {\r\n @for (button of 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 }\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 <!-- label button -->\r\n @if (menuButton.label && !hideLabel) {\r\n <button\r\n mat-button\r\n class=\"lf-header-menu-button\"\r\n [class.lf-header-menu-button-active]=\"isActive(menuButton.id)\"\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 <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ menuButton.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else if (menuButton.matIcon || menuButton.svgIcon) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-header-menu-button\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n (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 @if (menuButton.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n <!-- img button -->\r\n } @else if (menuButton.imgIcon) {\r\n <img\r\n class=\"lf-header-menu-img px-1\"\r\n [src]=\"menuButton.imgIcon\"\r\n width=\"48\"\r\n height=\"48\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [attr.aria-label]=\"menuButton.id\" />\r\n }\r\n <!-- menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <!-- label menu buttons -->\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- menu button -->\r\n @if (button.label) {\r\n <button\r\n mat-menu-item\r\n [class.lf-header-menu-button-active]=\"isActive(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <span>{{ button.label }}</span>\r\n </button>\r\n }\r\n }\r\n <!-- icon menu buttons -->\r\n <div mat-menu-item class=\"lf-menu-icons px-1\" [disableRipple]=\"true\">\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- icon button -->\r\n @if (!button.label && (button.matIcon || button.svgIcon)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-menu-icon-button\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n tabindex=\"0\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n</ng-template>\r\n","import { 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(distinctUntilChanged());\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 { Injectable, Type, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfirmDialogConfig, HeaderInputConfig } from '../models';\r\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<T>(templateRef: Type<T>, config: MatDialogConfig): Promise<any> { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n const dialogRef = this.matDialog.open(templateRef, config);\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a simple pre-made 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","\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OverlayService {\r\n private overlay = inject(Overlay);\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n\r\n public open<T>(component: ComponentType<T>): void {\r\n if (this.overlayRef) return;\r\n\r\n this.overlayRef = this.overlay.create({\r\n hasBackdrop: true,\r\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n });\r\n\r\n const portal: ComponentPortal<T> = new ComponentPortal(component);\r\n this.overlayRef.attach(portal);\r\n }\r\n\r\n public close(): void {\r\n if (!this.overlayRef) return;\r\n this.overlayRef.detach();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { NavigationEnd, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable, take } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n\r\nexport class RouterService {\r\n private router = inject(Router);\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n\r\n private _loading$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n public get loading$(): Observable<boolean> {\r\n return this._loading$.asObservable();\r\n }\r\n\r\n private _routeHistory$: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);\r\n\r\n public get routeHistory$(): Observable<string[]> {\r\n return this._routeHistory$.asObservable();\r\n }\r\n\r\n private _currentRoute$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get currentRoute$(): Observable<string> {\r\n return this._currentRoute$.asObservable();\r\n }\r\n\r\n public get currentRoute(): string {\r\n return this._currentRoute$.value;\r\n }\r\n\r\n private _previousRoute$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get previousRoute$(): Observable<string> {\r\n return this._previousRoute$.asObservable();\r\n }\r\n\r\n public get previousRoute(): string {\r\n return this._previousRoute$.value;\r\n }\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n history.replaceState({ ...history.state, back: false }, '');\r\n }\r\n\r\n this.router.events.subscribe(event => {\r\n let asyncLoadCount: number = 0;\r\n\r\n if (event instanceof RouteConfigLoadStart) { asyncLoadCount++; }\r\n if (event instanceof RouteConfigLoadEnd) { asyncLoadCount--; }\r\n if (event instanceof NavigationEnd) {\r\n const previousRoute: string = this._currentRoute$.value;\r\n this._previousRoute$.next(previousRoute);\r\n\r\n const currentRoute: string = event.urlAfterRedirects;\r\n this._currentRoute$.next(currentRoute);\r\n\r\n if (!this.router.currentNavigation()?.extras?.state?.['back']) {\r\n if (previousRoute) {\r\n const routeHistory: string[] = this._routeHistory$.value;\r\n routeHistory.push(previousRoute);\r\n this._routeHistory$.next(routeHistory);\r\n }\r\n }\r\n }\r\n\r\n this._loading$.next(!!asyncLoadCount);\r\n });\r\n }\r\n\r\n /**\r\n * Navigates to the previous route found in the routeHistory Observable\r\n * \r\n * @param fallbackRoute fallback in case there is no previous route\r\n */\r\n public navigateBack(fallbackRoute?: string): void {\r\n this._routeHistory$.pipe(take(1)).subscribe(routeHistory => {\r\n if (routeHistory.length > 0) {\r\n const previousRoute: string = routeHistory[routeHistory.length - 1];\r\n\r\n if (previousRoute) {\r\n this.router.navigateByUrl(previousRoute, { state: { back: true } }).then(result => {\r\n if (result) {\r\n routeHistory.pop();\r\n }\r\n });\r\n } else if (fallbackRoute) {\r\n this.router.navigate([fallbackRoute]);\r\n }\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Clear the current route history\r\n */\r\n public clearRouteHistory(): void {\r\n this._routeHistory$.next([]);\r\n }\r\n\r\n}\r\n","import { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { CONFIG } from '../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 { BehaviorSubject, Observable } from 'rxjs';\r\nimport { SeoConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SeoService {\r\n private metaTitle = inject(Title);\r\n private metaTags = inject(Meta);\r\n private document = inject<Document>(DOCUMENT);\r\n private logger = inject(Logger);\r\n\r\n\r\n private _config$: BehaviorSubject<SeoConfig | null> = new BehaviorSubject<SeoConfig | null>(null);\r\n\r\n public get config$(): Observable<SeoConfig | null> {\r\n return this._config$.asObservable();\r\n }\r\n\r\n\r\n /**\r\n * Pass a configuration to set meta tags such as title, description and image for search results and social media\r\n * \r\n * @param seoConfig config that contains all the meta information\r\n * \r\n */\r\n public setMetaTags(seoConfig: SeoConfig): void {\r\n this._config$.next(seoConfig);\r\n\r\n const autoTrim: boolean = seoConfig.autoTrim || false;\r\n const title: string = seoConfig.metaPageTitle || '';\r\n const description: string = seoConfig.metaPageDescription || '';\r\n const imagePath: string = seoConfig.metaImagePath || '';\r\n const 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 { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n 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 { ComponentPortal } from '@angular/cdk/portal';\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { CONFIG } from '../../config/config.token';\r\nimport { LoadingOverlayConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { ScaffoldService } from '../../services';\r\n\r\n@Component({\r\n selector: 'lf-loading-overlay',\r\n templateUrl: './loading-overlay.component.html',\r\n styleUrls: ['./loading-overlay.component.scss'],\r\n standalone: false\r\n})\r\nexport class LoadingOverlayComponent implements OnInit {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n\r\n\r\n public portal: ComponentPortal<any> | null = null;\r\n public loadingOverlayConfig: LoadingOverlayConfig | null = null;\r\n\r\n\r\n ngOnInit(): void {\r\n this.loadingOverlayConfig = this.scaffoldService.scaffoldConfig?.loadingOverlayConfig || null;\r\n\r\n if (this.loadingOverlayConfig?.customComponent) {\r\n this.portal = new ComponentPortal(this.loadingOverlayConfig?.customComponent);\r\n }\r\n }\r\n}\r\n","@if (!portal) {\r\n <div\r\n [ngClass]=\"loadingOverlayConfig?.cssClass\"\r\n [class.lf-gradient-spinner]=\"loadingOverlayConfig?.gradient\">\r\n <mat-progress-spinner mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n} @else {\r\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { 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 animations: [\r\n trigger('responsiveSlide', [\r\n // States for desktop and mobile\r\n state('desktop', style({ transform: 'translateX(0)' })),\r\n state('mobile', style({ transform: 'translateY(0)' })),\r\n\r\n // Desktop enter (slide in from left)\r\n transition('void => desktop', [\r\n style({ transform: 'translateX(-100%)' }),\r\n animate('200ms linear')\r\n ]),\r\n // Desktop leave (slide back to left)\r\n transition('desktop => void', [\r\n animate('200ms linear', style({ transform: 'translateX(-100%)' }))\r\n ]),\r\n\r\n // Mobile enter (slide in from bottom)\r\n transition('void => mobile', [\r\n style({ transform: 'translateY(100%)' }),\r\n animate('200ms linear')\r\n ]),\r\n // Mobile leave (slide back to bottom)\r\n transition('mobile => void', [\r\n animate('200ms linear', style({ transform: 'translateY(100%)' }))\r\n ]),\r\n ])\r\n ],\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 [@responsiveSlide]=\"isMobile ? 'mobile' : 'desktop'\"\r\n class=\"mat-app-background lf-transitions mat-elevation-z3\"\r\n [class.lf-navbar]=\"!isMobile\"\r\n [class.lf-navbar-mobile]=\"isMobile\"\r\n [ngClass]=\"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.buttons; track button.id; let i = $index) {\r\n @if (i < 5) {\r\n <div\r\n class=\"lf-navbar-item\"\r\n [class.lf-navbar-item-active]=\"isActive(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <!-- show a protected space on desktop so the icon doesn't move up and down -->\r\n @if (button?.label) {\r\n <span class=\"lf-navbar-item-label\">\r\n {{\r\n isActive(button.id) || navbarConfig.showAllLabels\r\n ? button.label\r\n : isMobile\r\n ? \"\"\r\n : \"&nbsp;\"\r\n }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import { 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, OverlayService, RouterService, ScaffoldService } from '../../services';\r\nimport { LoadingOverlayComponent } from '../loading-overlay/loading-overlay.component';\r\n\r\n@Component({\r\n selector: 'lf-scaffold',\r\n templateUrl: './scaffold.component.html',\r\n styleUrls: ['./scaffold.component.scss'],\r\n 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 overlayService = inject(OverlayService)\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 public initialized: boolean = false;\r\n\r\n private _subscription: Subscription = new Subscription;\r\n\r\n\r\n ngOnInit(): void {\r\n // Listen for config changes\r\n this._subscription.add(this.scaffoldService.scaffoldConfig$.subscribe((scaffoldConfig: ScaffoldConfig) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[ScaffoldConfig]', scaffoldConfig);\r\n\r\n if (scaffoldConfig.loading) {\r\n this.overlayService.open(LoadingOverlayComponent);\r\n } else {\r\n this.overlayService.close();\r\n }\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 setTimeout(() => { this.initialized = true; });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._subscription) {\r\n this._subscription.unsubscribe();\r\n }\r\n }\r\n\r\n // 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","<div\r\n class=\"lf-scaffold lf-transitions mat-app-background mat-typography\"\r\n [ngClass]=\"scaffoldConfig?.cssClass\">\r\n <!-- header -->\r\n <lf-header\r\n [libraryConfig]=\"libraryConfig\"\r\n [headerConfig]=\"headerConfig\"\r\n [isMobile]=\"isMobile\"\r\n [routeLoading]=\"routeLoading\"\r\n [currentRoute]=\"currentRoute\"\r\n (headerConfigUpdateEvent)=\"headerConfigUpdated($event)\"\r\n (headerButtonClickEvent)=\"headerButtonClicked($event)\"\r\n (headerInputSubmitEvent)=\"headerInputSubmitted($event)\"\r\n (headerInputChangeEvent)=\"headerInputChanged($event)\"></lf-header>\r\n <!-- navbar -->\r\n <lf-navbar\r\n [libraryConfig]=\"libraryConfig\"\r\n [navbarConfig]=\"navbarConfig\"\r\n [isMobile]=\"isMobile\"\r\n [currentRoute]=\"currentRoute\"\r\n (navbarButtonClickEvent)=\"navbarButtonClicked($event)\"></lf-navbar>\r\n <!-- content wrapper -->\r\n <div\r\n class=\"lf-content-wrapper\"\r\n [class.lf-show-navbar]=\"navbarConfig?.enable && !isMobile\"\r\n [class.lf-show-header]=\"headerConfig?.enable && !(navbarConfig?.enable && isMobile)\"\r\n [class.lf-show-navbar-mobile]=\"navbarConfig?.enable && isMobile && !headerConfig?.enable\"\r\n [class.lf-show-header-and-navbar-mobile]=\"\r\n headerConfig?.enable && navbarConfig?.enable && isMobile\r\n \"\r\n [class.lf-transitions]=\"initialized\"\r\n #scrollContainer\r\n cdkScrollable>\r\n <!-- drawer -->\r\n <lf-drawer\r\n [libraryConfig]=\"libraryConfig\"\r\n [drawerConfig]=\"drawerConfig\"\r\n [drawerPortal]=\"drawerPortal\"\r\n [isMobile]=\"isMobile\"\r\n [headerEnabled]=\"headerConfig?.enable!\"\r\n (drawerConfigUpdateEvent)=\"drawerConfigUpdated($event)\">\r\n <!-- drawer content -->\r\n <ng-content select=\"[drawerContent]\" drawerContent></ng-content>\r\n <!-- content title card -->\r\n <lf-content-title-card\r\n [libraryConfig]=\"libraryConfig\"\r\n [contentTitleCardConfig]=\"contentTitleCardConfig\"\r\n [isMobile]=\"isMobile\"\r\n [routeHistory]=\"routeHistory\"\r\n (backButtonClickEvent)=\"backButtonClicked()\"></lf-content-title-card>\r\n <!-- main content -->\r\n <div\r\n class=\"lf-content\"\r\n [class.lf-content-mobile]=\"isMobile\"\r\n [class.lf-show-footer]=\"footerConfig?.enable\"\r\n #content>\r\n <ng-content></ng-content>\r\n <!-- to top button -->\r\n <lf-floating-button\r\n [libraryConfig]=\"libraryConfig\"\r\n [floatingButtonConfig]=\"floatingButtonConfig\"\r\n [onTop]=\"scrollTopPosition <= 0\"\r\n [isMobile]=\"isMobile && navbarConfig?.enable!\"\r\n [bottomBarEnabled]=\"bottomBarConfig?.enable!\"\r\n (floatingButtonConfigUpdateEvent)=\"floatingButtonConfigUpdated($event)\"\r\n (floatingButtonClickEvent)=\"floatingButtonClicked($event)\"></lf-floating-button>\r\n </div>\r\n <!-- footer -->\r\n <lf-footer [libraryConfig]=\"libraryConfig\" [footerConfig]=\"footerConfig\"></lf-footer>\r\n </lf-drawer>\r\n </div>\r\n <!-- bottom bar -->\r\n <lf-bottom-bar\r\n [libraryConfig]=\"libraryConfig\"\r\n [bottomBarConfig]=\"bottomBarConfig\"\r\n [isMobile]=\"isMobile && navbarConfig?.enable!\"\r\n [navbarEnabled]=\"navbarConfig?.enable!\"\r\n (bottomBarCloseClickEvent)=\"bottomBarCloseClicked($event)\"\r\n (bottomBarButtonClickEvent)=\"bottomBarButtonClicked($event)\"></lf-bottom-bar>\r\n</div>\r\n","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 { 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 ],\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, inject, Input, Output } from '@angular/core';\r\nimport { CONFIG } from '../../../config/config.token';\r\nimport { PlaceholderConfig, ScaffoldLibraryConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\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]\r\n})\r\nexport class PlaceholderComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\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 @if (placeholderConfig.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ placeholderConfig.matIcon }}\r\n </mat-icon>\r\n } @else if (placeholderConfig.svgIcon) {\r\n <mat-icon [svgIcon]=\"placeholderConfig.svgIcon\"></mat-icon>\r\n }\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 <!-- icon -->\r\n @if (placeholderConfig.button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ placeholderConfig.button.matIcon }}\r\n </mat-icon>\r\n } @else if (placeholderConfig.button.svgIcon) {\r\n <mat-icon [svgIcon]=\"placeholderConfig.button.svgIcon\"></mat-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 { CONFIG } from '../../../config/config.token';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\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 public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\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 <!-- icon -->\r\n @if (matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ matIcon }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n {{ label }}\r\n</button>\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemAvatar]'\r\n})\r\nexport class ListItemAvatarDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemButtons]'\r\n})\r\nexport class ListItemButtonsDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemSubtitle]'\r\n})\r\nexport class ListItemSubtitleDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemTitle]'\r\n})\r\nexport class ListItemTitleDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { CdkDragDrop, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { Component, ContentChild, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { CONFIG } from '../../../config/config.token';\r\nimport { ListItemAvatarDirective, ListItemButtonsDirective, ListItemSubtitleDirective, ListItemTitleDirective } from '../../../directives';\r\nimport { Button, ListConfig, ListHeader, ListItem, ScaffoldLibraryConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\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]\r\n})\r\nexport class ListComponent implements OnInit, OnChanges {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n @ContentChild(ListItemAvatarDirective) public avatarTemplate?: ListItemAvatarDirective;\r\n @ContentChild(ListItemTitleDirective) public titleTemplate?: ListItemTitleDirective;\r\n @ContentChild(ListItemSubtitleDirective) public subtitleTemplate?: ListItemSubtitleDirective;\r\n @ContentChild(ListItemButtonsDirective) public buttonsTemplate?: ListItemButtonsDirective;\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\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.preventDefault();\r\n // click.stopPropagation();\r\n click.stopImmediatePropagation();\r\n }\r\n}\r\n","<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <!-- icon -->\r\n @if (header.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ header.matIcon }}\r\n </mat-icon>\r\n } @else if (header.svgIcon) {\r\n <mat-icon [svgIcon]=\"header.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (config?.mode === \"group\" && groupedItems) {\r\n @for (group of groupedItems | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n @if (group.key) {\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n }\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"config?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId\"\r\n cdkDropList\r\n [cdkDropListData]=\"items\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId)\"\r\n [class.drop-zone]=\"config?.enableDragging && items.length <= 0\">\r\n @for (item of items; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n matRipple\r\n [matRippleDisabled]=\"!item.clickable\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (avatarTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"avatarTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <!-- icon -->\r\n @if (item.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ item.matIcon }}\r\n </mat-icon>\r\n } @else if (item.svgIcon) {\r\n <mat-icon [svgIcon]=\"item.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n @if (titleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"titleTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.title }}\r\n }\r\n </span>\r\n @if (item.subtitle || subtitleTemplate) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @if (buttonsTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"buttonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n (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/* DIRECTIVES */\r\nexport * from './lib/directives';\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":["i3","i4","i2","i1","i6","i8","i9.InputComponent","i3.HeaderComponent","i4.NavbarComponent","i5.DrawerComponent","i6.FooterComponent","i7.ContentTitleCardComponent","i8.FloatingButtonComponent","i9.BottomBarComponent","i5","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAGa,MAAM,GAAG,IAAI,cAAc,CAAwB,QAAQ;;MCe3D,kBAAkB,CAAA;AAd/B,IAAA,WAAA,GAAA;QAgBkB,IAAA,CAAA,aAAa,GAAiC,IAAI;QAClD,IAAA,CAAA,eAAe,GAA2B,IAAI;QAC9C,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,aAAa,GAAY,KAAK;AAE7B,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,YAAY,EAAU;AACrD,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,YAAY,EAAU;AAexE,IAAA;AAZQ,IAAA,aAAa,CAAC,EAAW,EAAA;QAC9B,IAAI,CAAC,EAAE,EAAE;YACP;QACF;AAEA,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;IACzC;AAEO,IAAA,YAAY,CAAC,aAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC;IACnD;8GArBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB/B,85EA8DA,EAAA,MAAA,EAAA,CAAA,2uBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EDtDc;YACV,OAAO,CAAC,aAAa,EAAE;gBACrB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBACvD,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;AACjD,gBAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;AACzF,gBAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;aACzF;AACF,SAAA,EAAA,CAAA,CAAA;;2FAGU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,UAAA,EAGb;wBACV,OAAO,CAAC,aAAa,EAAE;4BACrB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;4BACvD,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;AACjD,4BAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;AACzF,4BAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;yBACzF;AACF,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,85EAAA,EAAA,MAAA,EAAA,CAAA,2uBAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;MEjBU,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;QAQkB,IAAA,CAAA,aAAa,GAAiC,IAAI;QAClD,IAAA,CAAA,sBAAsB,GAAkC,IAAI;QAC5D,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,YAAY,GAAa,EAAE;AAE1B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAQ;AAOjE,IAAA;IAJQ,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;IAClC;8GAZW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+RCTtC,o7BAyBA,EAAA,MAAA,EAAA,CAAA,mVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDhBa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,o7BAAA,EAAA,MAAA,EAAA,CAAA,mVAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBAEA;;;MENU,eAAe,CAAA;AAN5B,IAAA,WAAA,GAAA;QAQkB,IAAA,CAAA,aAAa,GAAiC,IAAI;QAClD,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,aAAa,GAAY,KAAK;AAG7B,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAgB;AAiB5E,IAAA;IAdC,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE;AACzE,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1E;IACF;;IAGO,YAAY,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1E;QAAC;IACH;8GAvBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,qSCV5B,u5CAoCA,EAAA,MAAA,EAAA,CAAA,uUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD1Ba,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cAGT,KAAK,EAAA,QAAA,EAAA,u5CAAA,EAAA,MAAA,EAAA,CAAA,uUAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;METU,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;QAQkB,IAAA,CAAA,aAAa,GAAiC,IAAI;QAClD,IAAA,CAAA,oBAAoB,GAAgC,IAAI;QACxD,IAAA,CAAA,KAAK,GAAY,KAAK;QACtB,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,gBAAgB,GAAY,KAAK;AAEhC,QAAA,IAAA,CAAA,+BAA+B,GAAG,IAAI,YAAY,EAAwB;AAC1E,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,YAAY,EAAU;AAsBvE,IAAA;IAnBC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,MAAM,iCAAiC,GAAyB;gBAC9D,GAAG,IAAI,CAAC,oBAAoB;AAC5B,gBAAA,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,IAAI,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO;AAC7K,gBAAA,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,IAAI;aACrE;AAED,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,iCAAiC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE;AACnG,gBAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,iCAAiC,CAAC;YAC9E;QACF;IAEF;AAEO,IAAA,aAAa,CAAC,EAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;IACxC;8GA7BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,4XCTpC,uzCAiCA,EAAA,MAAA,EAAA,CAAA,wgCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDxBa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,uzCAAA,EAAA,MAAA,EAAA,CAAA,wgCAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;METU,eAAe,CAAA;AAN5B,IAAA,WAAA,GAAA;QAQkB,IAAA,CAAA,aAAa,GAAiC,IAAI;QAClD,IAAA,CAAA,YAAY,GAAwB,IAAI;AAEzD,IAAA;8GALY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,gJCT5B,23CAsCA,EAAA,MAAA,EAAA,CAAA,+mBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD7Ba,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cAGT,KAAK,EAAA,QAAA,EAAA,23CAAA,EAAA,MAAA,EAAA,CAAA,+mBAAA,CAAA,EAAA;;sBAIhB;;sBACA;;;ME8CU,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YA3BvB,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,qBAAqB;YACrB,kBAAkB;YAClB,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,gBAAgB;YAChB,aAAa;YACb,aAAa;YACb,kBAAkB;YAClB,aAAa;YACb,wBAAwB;YACxB,oBAAoB;YACpB,eAAe;YACf,gBAAgB;YAChB,iBAAiB;YACjB,eAAe;YACf,YAAY;YACZ,cAAc,CAAA,EAAA,CAAA,CAAA;AAKL,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YA3BvB,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,qBAAqB;YACrB,kBAAkB;YAClB,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,gBAAgB;YAChB,aAAa;YACb,aAAa;YACb,kBAAkB;YAClB,aAAa;YACb,wBAAwB;YACxB,oBAAoB;YACpB,eAAe;YACf,gBAAgB;YAChB,iBAAiB;YACjB,eAAe;YACf,YAAY;YACZ,cAAc,CAAA,EAAA,CAAA,CAAA;;2FAKL,cAAc,EAAA,UAAA,EAAA,CAAA;kBA9B1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,eAAe;wBACf,cAAc;wBACd,qBAAqB;wBACrB,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBACf,oBAAoB;wBACpB,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;wBAChB,aAAa;wBACb,aAAa;wBACb,kBAAkB;wBAClB,aAAa;wBACb,wBAAwB;wBACxB,oBAAoB;wBACpB,eAAe;wBACf,gBAAgB;wBAChB,iBAAiB;wBACjB,eAAe;wBACf,YAAY;wBACZ;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,SAAS,EAAE;AACZ,iBAAA;;;MCxCY,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAVrB,YAAY;YACZ,WAAW;AACX,YAAA,cAAc,aAGd,YAAY;YACZ,WAAW;YACX,cAAc,CAAA,EAAA,CAAA,CAAA;AAGL,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAVrB,YAAY;YACZ,WAAW;AACX,YAAA,cAAc,EAGd,YAAY;YACZ,WAAW;YACX,cAAc,CAAA,EAAA,CAAA,CAAA;;2FAGL,YAAY,EAAA,UAAA,EAAA,CAAA;kBAZxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX;AACD;AACF,iBAAA;;;MCJY,cAAc,CAAA;AAP3B,IAAA,WAAA,GAAA;QASU,IAAA,CAAA,SAAS,GAAG,MAAM,CAA+B,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClF,IAAA,CAAA,MAAM,GAAG,MAAM,CAAoB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvE,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAGX,IAAA,CAAA,KAAK,GAAe,IAAK;QAEpC,IAAA,CAAA,WAAW,GAAsB,EAAE;QACnC,IAAA,CAAA,QAAQ,GAAY,KAAK;AAExB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AAC7C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AAC7C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ;QAG3D,IAAA,CAAA,UAAU,GAAW,EAAE;AA4C/B,IAAA;IA1CC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM;QAChC;IACF;IAEA,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;AAC5C,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;QACzB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7C;AAEO,IAAA,cAAc,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AAEjC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B;IACF;AAEO,IAAA,YAAY,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;IAEO,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;AAElC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACxB;IACF;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7C;8GA5DW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ3B,0wCAsCA,EAAA,MAAA,EAAA,CAAA,qaAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5BY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,UAAA,EAGR,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,0wCAAA,EAAA,MAAA,EAAA,CAAA,qaAAA,CAAA,EAAA;;sBAStB,SAAS;uBAAC,OAAO;;sBAEjB;;sBACA;;sBAEA;;sBACA;;sBACA;;;MERU,eAAe,CAAA;AAd5B,IAAA,WAAA,GAAA;QAgBkB,IAAA,CAAA,aAAa,GAAiC,IAAI;QAClD,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,YAAY,GAAY,KAAK;AAG5B,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,YAAY,EAAgB;AAC1D,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AACnD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AACnD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AAwErE,IAAA;IAlEC,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE;YAC3D,MAAM,mBAAmB,GAAiB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;AACrI,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACxD;IACF;AAEO,IAAA,aAAa,CAAC,EAAW,EAAA;QAC9B,IAAI,CAAC,EAAE,EAAE;YACP;QACF;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC;AAEO,IAAA,cAAc,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC;AAEO,IAAA,YAAY,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC;IAEO,WAAW,GAAA;QAChB,MAAM,mBAAmB,GAAiB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;AACrI,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACxD;AAEO,IAAA,QAAQ,CAAC,EAAU,EAAA;QACxB,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,KAAK,GAAW,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrF,OAAO,KAAK,KAAK,EAAE;IACrB;IAEO,oBAAoB,GAAA;QACzB,MAAM,gBAAgB,GAAiB,IAAI,CAAC,YAAY,EAAE,gBAAgB,IAAI,EAAE;QAChF,IAAI,CAAC,gBAAgB,EAAE,MAAM;AAAE,YAAA,OAAO,IAAI;AAE1C,QAAA,MAAM,MAAM,GAAuC,IAAI,CAAC,YAAY,EAAE,gBAAgB;QACtF,IAAI,CAAC,MAAM,EAAE,MAAM;AAAE,YAAA,OAAO,IAAI;QAEhC,MAAM,eAAe,GAAiB,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAkB,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrI,OAAO;AACL,YAAA,EAAE,EAAE,EAAE;YACN,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,WAAW,GAAG,MAAM,CAAC,OAAO;YAC7F,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,WAAW,EAAE,CAAC,GAAG,eAAe;SACjC;IACH;IAEO,uBAAuB,GAAA;QAC5B,MAAM,gBAAgB,GAAiB,IAAI,CAAC,YAAY,EAAE,gBAAgB,IAAI,EAAE;QAChF,IAAI,CAAC,gBAAgB,EAAE,MAAM;AAAE,YAAA,OAAO,IAAI;AAE1C,QAAA,MAAM,MAAM,GAAuC,IAAI,CAAC,YAAY,EAAE,gBAAgB;QACtF,IAAI,CAAC,MAAM,EAAE,MAAM;AAAE,YAAA,OAAO,IAAI;QAEhC,MAAM,eAAe,GAAiB,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAkB,KAAK,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACpI,QAAA,OAAO,eAAe;IACxB;8GAjFW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB5B,+lQAsNA,EAAA,MAAA,EAAA,CAAA,i+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,ED9Mc;YACV,OAAO,CAAC,aAAa,EAAE;gBACrB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBACxD,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;gBACjD,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;AACnI,gBAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;aAC3F;AACF,SAAA,EAAA,CAAA,CAAA;;2FAGU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAd3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,UAAA,EAGT;wBACV,OAAO,CAAC,aAAa,EAAE;4BACrB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;4BACxD,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;4BACjD,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;AACnI,4BAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;yBAC3F;AACF,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,+lQAAA,EAAA,MAAA,EAAA,CAAA,i+DAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;;MExBU,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAGvC,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC;AAChC,aAAA,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;AACtF,aAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEhC,IAAA;8GARY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCMrB,sBAAsB,CAAA;AANnC,IAAA,WAAA,GAAA;AAOS,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAsB,eAAe,CAAC;AAE7D,IAAA;8GAHY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,8ECVnC,moBAwBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDda,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,moBAAA,EAAA;;;MEER,aAAa,CAAA;AAH1B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AA6CtC,IAAA;AA1CC;;;;;;AAMG;IACI,gBAAgB,CAAI,WAAoB,EAAE,MAAuB,EAAA;AACtE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1D,QAAA,OAAO,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IAChD;AAEA;;;;;AAKG;AACI,IAAA,iBAAiB,CAAC,MAA2B,EAAA;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC5D,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AACF,QAAA,OAAO,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IAChD;AAEA;;;;;AAKG;AACI,IAAA,eAAe,CAAC,MAAyB,EAAA;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE;AACpD,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;AACF,QAAA,OAAO,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IAChD;8GA7CW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCJY,MAAM,CAAA;AADnB,IAAA,WAAA,GAAA;QAGU,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAuClF,IAAA;AApCC;;;;;AAKG;AACI,IAAA,GAAG,CAAC,OAAe,EAAE,GAAG,IAAW,EAAA;QACxC,IAAI,IAAI,CAAC,aAAa,EAAE,UAAU,KAAK,KAAK,EAAE;YAC5C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAChC;IACF;AAEA;;;;;AAKG;AACI,IAAA,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW,EAAA;QACzC,IAAI,IAAI,CAAC,aAAa,EAAE,UAAU,KAAK,KAAK,EAAE;YAC5C,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACjC;IACF;AAEA;;;;;AAKG;AACI,IAAA,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW,EAAA;QAC1C,IAAI,IAAI,CAAC,aAAa,EAAE,UAAU,KAAK,KAAK,EAAE;YAC5C,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAClC;IACF;8GAvCW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAN,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAM,cADO,MAAM,EAAA,CAAA,CAAA;;2FACnB,MAAM,EAAA,UAAA,EAAA,CAAA;kBADlB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCIrB,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;QAKU,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAkHhC,IAAA;AA/GC;;;;;AAKG;IACI,OAAO,CAAI,GAAW,EAAE,KAAe,EAAA;AAC5C,QAAA,IAAI;YACF,MAAM,WAAW,GAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACjD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,YAAA,CAAc,EAAE,WAAW,CAAC;AAChG,YAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC;QACxC;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;QACxD;IACF;AAEA;;;;;AAKG;IACI,cAAc,CAAI,GAAW,EAAE,KAAe,EAAA;AACnD,QAAA,IAAI;YACF,MAAM,YAAY,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,YAAA,CAAc,EAAE,YAAY,CAAC;AACjG,YAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC;QACzC;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;QACxD;IACF;AAEA;;;;;AAKG;AACI,IAAA,OAAO,CAAI,GAAW,EAAA;AAC3B,QAAA,IAAI;YACF,MAAM,IAAI,GAAkB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACrD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,YAAA,CAAc,EAAE,IAAI,CAAC;AACzF,YAAA,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAM,GAAG,IAAI;QAC9D;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;AACtD,YAAA,OAAO,IAAI;QACb;IACF;AAEA;;;;;AAKG;AACI,IAAA,cAAc,CAAI,GAAW,EAAA;AAClC,QAAA,IAAI;YACF,MAAM,IAAI,GAAkB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACrD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,YAAA,CAAc,EAAE,IAAI,CAAC;YACzF,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAM,GAAG,IAAI;QACpE;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;AACtD,YAAA,OAAO,IAAI;QACb;IACF;AAEA;;;;AAIG;AACI,IAAA,eAAe,CAAC,GAAW,EAAA;AAChC,QAAA,IAAI;YACF,MAAM,IAAI,GAAkB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACrD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,YAAA,CAAc,EAAE,IAAI,CAAC;YACzF,OAAO,IAAI,IAAI,IAAI;QACrB;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;AACtD,YAAA,OAAO,IAAI;QACb;IACF;AAEA;;;;;AAKG;AACI,IAAA,UAAU,CAAC,GAAW,EAAA;AAC3B,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,CAAC;AAC1E,YAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9B;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,oBAAA,EAAuB,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;QAC3D;IACF;AAEA;;;AAGG;IACI,KAAK,GAAA;QACV,YAAY,CAAC,KAAK,EAAE;IACtB;IAEQ,WAAW,CAAC,GAAQ,EAAE,KAAU,EAAA;AACtC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,8CAA8C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC3F,YAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;QACxB;AACA,QAAA,OAAO,KAAK;IACd;8GApHW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,cAAc,CAAA;AAH3B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACzB,IAAA,CAAA,UAAU,GAAsB,IAAI;AAsB7C,IAAA;AAnBQ,IAAA,IAAI,CAAI,SAA2B,EAAA;QACxC,IAAI,IAAI,CAAC,UAAU;YAAE;QAErB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,EAAE;YAC1F,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACtD,SAAA,CAAC;AAEF,QAAA,MAAM,MAAM,GAAuB,IAAI,eAAe,CAAC,SAAS,CAAC;AACjE,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IAChC;IAEO,KAAK,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;8GAvBW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCAY,aAAa,CAAA;AAOxB,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;AAIA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;AAIA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;AAEA,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK;IAClC;AAIA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IAC5C;AAEA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;IACnC;AAEA,IAAA,WAAA,GAAA;AApCQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAGhC,QAAA,IAAA,CAAA,SAAS,GAA6B,IAAI,eAAe,CAAU,KAAK,CAAC;AAMzE,QAAA,IAAA,CAAA,cAAc,GAA8B,IAAI,eAAe,CAAW,EAAE,CAAC;AAM7E,QAAA,IAAA,CAAA,cAAc,GAA4B,IAAI,eAAe,CAAS,EAAE,CAAC;AAUzE,QAAA,IAAA,CAAA,eAAe,GAA4B,IAAI,eAAe,CAAS,EAAE,CAAC;AAWhF,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,OAAO,CAAC,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC7D;QAEA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;YACnC,IAAI,cAAc,GAAW,CAAC;AAE9B,YAAA,IAAI,KAAK,YAAY,oBAAoB,EAAE;AAAE,gBAAA,cAAc,EAAE;YAAE;AAC/D,YAAA,IAAI,KAAK,YAAY,kBAAkB,EAAE;AAAE,gBAAA,cAAc,EAAE;YAAE;AAC7D,YAAA,IAAI,KAAK,YAAY,aAAa,EAAE;AAClC,gBAAA,MAAM,aAAa,GAAW,IAAI,CAAC,cAAc,CAAC,KAAK;AACvD,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;AAExC,gBAAA,MAAM,YAAY,GAAW,KAAK,CAAC,iBAAiB;AACpD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;AAEtC,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE;oBAC7D,IAAI,aAAa,EAAE;AACjB,wBAAA,MAAM,YAAY,GAAa,IAAI,CAAC,cAAc,CAAC,KAAK;AACxD,wBAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAChC,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;oBACxC;gBACF;YACF;YAEA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;AACI,IAAA,YAAY,CAAC,aAAsB,EAAA;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,IAAG;AACzD,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,MAAM,aAAa,GAAW,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEnE,IAAI,aAAa,EAAE;oBACjB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAG;wBAChF,IAAI,MAAM,EAAE;4BACV,YAAY,CAAC,GAAG,EAAE;wBACpB;AACF,oBAAA,CAAC,CAAC;gBACJ;qBAAO,IAAI,aAAa,EAAE;oBACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC;gBACvC;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACI,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9B;8GA/FW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFA,MAAM,EAAA,CAAA,CAAA;;2FAEnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBAFzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;QAGU,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAIvB,QAAA,IAAA,CAAA,gBAAgB,GAAoC,IAAI,eAAe,CAAiB,EAAE,CAAC;;AAgB3F,QAAA,IAAA,CAAA,wBAAwB,GAA4B,IAAI,eAAe,CAAS,EAAE,CAAC;;AAWnF,QAAA,IAAA,CAAA,uBAAuB,GAA4B,IAAI,eAAe,CAAS,EAAE,CAAC;;AAYlF,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAA4D,IAAI,CAAC;AAyB9G,IAAA;AA9DC,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;IAC7C;IAEA,IAAW,cAAc,CAAC,KAAqB,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC;AACpF,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK;IACpC;AAKA,IAAA,IAAW,uBAAuB,GAAA;AAChC,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;IACrD;IAEA,IAAW,sBAAsB,CAAC,KAAa,EAAA;AAC7C,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C;AAKA,IAAA,IAAW,sBAAsB,GAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE;IACpD;IAEA,IAAW,qBAAqB,CAAC,KAAa,EAAA;AAC5C,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;IACvC;AAKA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;IAEA,IAAW,YAAY,CAAC,KAA6B,EAAA;AACnD,QAAA,MAAM,eAAe,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC;AAC5E,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC;IAC1D;;IAGO,sBAAsB,CAAiC,QAAW,EAAE,KAAwB,EAAA;QACjG,MAAM,YAAY,GAAmB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAErE,QAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAE,EAAE,KAAK,CAAC;YACnG;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC,QAAQ,GAAG,KAAK,EAAE;AAC3D,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAE,EAAE,KAAK,CAAC;AAEhG,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;IAC1C;8GAtEW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,UAAU,CAAA;AAHvB,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;AACrC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAGvB,QAAA,IAAA,CAAA,QAAQ,GAAsC,IAAI,eAAe,CAAmB,IAAI,CAAC;AAmElG,IAAA;AAjEC,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;IACrC;AAGA;;;;;AAKG;AACI,IAAA,WAAW,CAAC,SAAoB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAE7B,QAAA,MAAM,QAAQ,GAAY,SAAS,CAAC,QAAQ,IAAI,KAAK;AACrD,QAAA,MAAM,KAAK,GAAW,SAAS,CAAC,aAAa,IAAI,EAAE;AACnD,QAAA,MAAM,WAAW,GAAW,SAAS,CAAC,mBAAmB,IAAI,EAAE;AAC/D,QAAA,MAAM,SAAS,GAAW,SAAS,CAAC,aAAa,IAAI,EAAE;QACvD,MAAM,UAAU,GAAW,EAAE;QAC7B,MAAM,gBAAgB,GAAW,GAAG;;QAGpC,IAAI,KAAK,EAAE;YACT,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,UAAU,EAAE;gBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,mEAAA,EAAsE,UAAU,CAAA,4BAAA,CAA8B,CAAC;YACnI;AACA,YAAA,MAAM,SAAS,GAAW,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK;AAC1G,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;QAClD;;QAGA,IAAI,WAAW,EAAE;YACf,IAAI,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE;gBACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,yEAAA,EAA4E,gBAAgB,CAAA,kCAAA,CAAoC,CAAC;YACrJ;AACA,YAAA,MAAM,eAAe,GAAW,CAAC,WAAW,CAAC,MAAM,GAAG,gBAAgB,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,WAAW;AAC9I,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,eAAe,GAAG,WAAW,CAAC;QACpE;;QAGA,MAAM,IAAI,GAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;QAClD,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC;QAC5C;IACF;;AAGQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACpE;;AAGQ,IAAA,mBAAmB,CAAC,WAAmB,EAAA;AAC7C,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACtE,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC7E,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAChF;;AAGQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACpE;8GAzEW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCFY,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;QAGrB,IAAA,CAAA,iBAAiB,GAAW,IAAI;QAChC,IAAA,CAAA,4BAA4B,GAAkC,QAAQ;QACtE,IAAA,CAAA,0BAA0B,GAAgC,QAAQ;AAElE,QAAA,IAAA,CAAA,YAAY,GAAsB;YACjD,kBAAkB,EAAE,IAAI,CAAC,4BAA4B;YACrD,gBAAgB,EAAE,IAAI,CAAC;SACxB;AAEgB,QAAA,IAAA,CAAA,aAAa,GAAsB;YAClD,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,kBAAkB,EAAE,IAAI,CAAC,4BAA4B;YACrD,gBAAgB,EAAE,IAAI,CAAC;SACxB;AAaF,IAAA;;AAVQ,IAAA,YAAY,CAAC,OAAe,EAAE,UAAmB,EAAE,MAA0B,EAAA;QAClF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;IAC/E;;AAGO,IAAA,sBAAsB,CAAC,OAAe,EAAE,MAAc,EAAE,MAA0B,EAAA;QACvF,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;AAC5F,QAAA,OAAO,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC/C;8GA5BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCEY,YAAY,CAAA;AASvB,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;AAEA,IAAA,WAAA,GAAA;AAZQ,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC5C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;QAG5B,IAAA,CAAA,SAAS,GAAW,OAAO;AAEpC,QAAA,IAAA,CAAA,cAAc,GAA4B,IAAI,eAAe,CAAS,EAAE,CAAC;QAO/E,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;;;AAKG;IACI,QAAQ,CAAC,QAAgB,EAAE,eAAyB,EAAA;AACzD,QAAA,MAAM,YAAY,GAAW,IAAI,CAAC,cAAc,CAAC,KAAK;AAEtD,QAAA,IAAI,QAAQ,KAAK,YAAY,EAAE;YAC7B;QACF;QAEA,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;QACnD;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;QAElC,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAE1C,IAAI,eAAe,EAAE;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACvE;QACF;aAAO;YACL,IAAI,eAAe,EAAE;gBACnB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAChD;QACF;IACF;AAEA;;;AAGG;IACK,SAAS,GAAA;AACf,QAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAExE,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC;8GA7DW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCKY,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;QAQW,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAG1C,IAAA,CAAA,MAAM,GAAgC,IAAI;QAC1C,IAAA,CAAA,oBAAoB,GAAgC,IAAI;AAUlE,IAAA;IAPG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,oBAAoB,IAAI,IAAI;AAE7F,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,eAAe,EAAE;AAC5C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC;QACjF;IACJ;8GAjBS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,+ECZpC,kUASA,EAAA,MAAA,EAAA,CAAA,4bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDGa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,kUAAA,EAAA,MAAA,EAAA,CAAA,4bAAA,CAAA,EAAA;;;ME2BR,eAAe,CAAA;AAjC5B,IAAA,WAAA,GAAA;QAmCkB,IAAA,CAAA,aAAa,GAAiC,IAAI;QAClD,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,QAAQ,GAAY,KAAK;AAGxB,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AAoBrE,IAAA;AAjBQ,IAAA,aAAa,CAAC,EAAU,EAAA;QAC7B,IAAI,CAAC,EAAE,EAAE;YACP;QACF;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC;AAEO,IAAA,QAAQ,CAAC,EAAU,EAAA;QACxB,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,KAAK,GAAW,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrF,OAAO,KAAK,KAAK,EAAE;IACrB;8GAzBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrC5B,szDA+CA,EAAA,MAAA,EAAA,CAAA,8zCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EDvCc;YACV,OAAO,CAAC,iBAAiB,EAAE;;gBAEzB,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;gBACvD,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;;gBAGtD,UAAU,CAAC,iBAAiB,EAAE;AAC5B,oBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;oBACzC,OAAO,CAAC,cAAc;iBACvB,CAAC;;gBAEF,UAAU,CAAC,iBAAiB,EAAE;oBAC5B,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;iBAClE,CAAC;;gBAGF,UAAU,CAAC,gBAAgB,EAAE;AAC3B,oBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;oBACxC,OAAO,CAAC,cAAc;iBACvB,CAAC;;gBAEF,UAAU,CAAC,gBAAgB,EAAE;oBAC3B,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;iBACjE,CAAC;aACH;AACF,SAAA,EAAA,CAAA,CAAA;;2FAGU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjC3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,UAAA,EAGT;wBACV,OAAO,CAAC,iBAAiB,EAAE;;4BAEzB,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;4BACvD,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;;4BAGtD,UAAU,CAAC,iBAAiB,EAAE;AAC5B,gCAAA,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;gCACzC,OAAO,CAAC,cAAc;6BACvB,CAAC;;4BAEF,UAAU,CAAC,iBAAiB,EAAE;gCAC5B,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;6BAClE,CAAC;;4BAGF,UAAU,CAAC,gBAAgB,EAAE;AAC3B,gCAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;gCACxC,OAAO,CAAC,cAAc;6BACvB,CAAC;;4BAEF,UAAU,CAAC,gBAAgB,EAAE;gCAC3B,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;6BACjE,CAAC;yBACH;AACF,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,szDAAA,EAAA,MAAA,EAAA,CAAA,8zCAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBAEA;;;ME3BU,iBAAiB,CAAA;AAN9B,IAAA,WAAA,GAAA;QAQS,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;AAM5B,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AACnD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AACnD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AACnD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAU;AACnD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,YAAY,EAAU;AACrD,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,YAAY,EAAU;QAGhE,IAAA,CAAA,cAAc,GAA0B,IAAI;QAC5C,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,YAAY,GAAwB,IAAI;QAExC,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,sBAAsB,GAAkC,IAAI;QAC5D,IAAA,CAAA,oBAAoB,GAAgC,IAAI;QACxD,IAAA,CAAA,eAAe,GAA2B,IAAI;QAE9C,IAAA,CAAA,YAAY,GAAa,EAAE;QAE3B,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,YAAY,GAAY,KAAK;QAC7B,IAAA,CAAA,iBAAiB,GAAW,CAAC;QAE7B,IAAA,CAAA,WAAW,GAAY,KAAK;QAE3B,IAAA,CAAA,aAAa,GAAiB,IAAI,YAAY;AAsKvD,IAAA;IAnKC,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,cAA8B,KAAI;AACvG,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC;AAEtF,YAAA,IAAI,cAAc,CAAC,OAAO,EAAE;AAC1B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACnD;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAC7B;AAEA,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc;YACpC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAa;YACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAa;YACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAa;YACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAa;YACrD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAuB;YACzE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAqB;YACrE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAgB;QAC7D,CAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,YAAuE,KAAI;AAC9I,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC;AAElF,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;QAClC,CAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,eAAgC,KAAI;AACvG,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,eAAe,CAAC;YAExF,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AACnD,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACtB;iBAAO,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACzD,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACtB;iBAAO,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AAC1D,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACvB;iBAAO,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACzD,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACvB;QACF,CAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,YAAsB,KAAI;AAC3F,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC;YAElF,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,YAAY,GAAG,YAAY;YAClC;YAEA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,EAAE,yBAAyB,EAAE;gBAC1E,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;YAClD;QACF,CAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,WAAmB,KAAI;AACxF,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW;QACjC,CAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAqB,KAAI;AACrF,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;QAClC,CAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,MAAM,OAAO,GAAgB,IAAI,CAAC,eAAe,CAAC,aAAa;AAE/D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CACtD,oBAAoB,EAAE,EACtB,YAAY,CAAC,GAAG,CAAC,CAClB,CAAC,SAAS,CAAC,CAAC,CAAQ,KAAI;AACvB,gBAAA,MAAM,MAAM,GAAgB,CAAC,CAAC,MAAqB;AACnD,gBAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,SAAS;YAC3C,CAAC,CAAC,CAAC;QACL;;AAGA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAuB,KAAI;gBAC/E,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC;oBAC/E,UAAU,CAAC,MAAK;AACd,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC;wBAC3D,IAAI,OAAO,EAAE;AACX,4BAAA,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;wBACjF;oBACF,CAAC,EAAE,GAAG,CAAC;gBACT;YACF,CAAC,CAAC,CAAC;QACL;AAEA,QAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;QAClC;IACF;;AAGO,IAAA,mBAAmB,CAAC,YAA0B,EAAA;QACnD,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,cAAc,EAAE,YAAY,CAAC;IAC3E;AAEO,IAAA,mBAAmB,CAAC,EAAU,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,EAAE;AAC/C,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC;AAEO,IAAA,oBAAoB,CAAC,KAAa,EAAA;AACvC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC;AAEO,IAAA,kBAAkB,CAAC,KAAa,EAAA;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,KAAK;AACnD,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC;;AAGO,IAAA,mBAAmB,CAAC,EAAU,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,EAAE;AAC/C,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC;;AAGO,IAAA,mBAAmB,CAAC,YAA0B,EAAA;QACnD,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,cAAc,EAAE,YAAY,CAAC;IAC3E;;IAGO,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IACnC;;AAGO,IAAA,2BAA2B,CAAC,oBAA0C,EAAA;QAC3E,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;IAC3F;AAEO,IAAA,qBAAqB,CAAC,EAAU,EAAA;AACrC,QAAA,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;QAClD;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,EAAE;AAC/C,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC;IACF;;AAGO,IAAA,qBAAqB,CAAC,EAAU,EAAA;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,EAAE;AAC/C,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;IACzC;AAEO,IAAA,sBAAsB,CAAC,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,EAAE;AAC/C,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;IACzC;8GA9MW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,gnBCjB9B,o+GAgFA,EAAA,MAAA,EAAA,CAAA,8/BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iCAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD/Da,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,o+GAAA,EAAA,MAAA,EAAA,CAAA,8/BAAA,CAAA,EAAA;;sBAehB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAC7C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAErC;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEGU,cAAc,CAAA;IAClB,OAAO,OAAO,CAAC,MAA8B,EAAA;QAClD,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;AACpC;SACF;IACH;8GARW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBArBvB,iBAAiB;YACjB,uBAAuB;YACvB,eAAe;YACf,eAAe;YACf,eAAe;YACf,eAAe;YACf,yBAAyB;YACzB,uBAAuB;YACvB,sBAAsB;AACtB,YAAA,kBAAkB,aAGlB,aAAa;YACb,YAAY;YACZ,YAAY;AACZ,YAAA,cAAc,aAGd,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAGR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YATvB,aAAa;YACb,YAAY;YACZ,YAAY;YACZ,cAAc,CAAA,EAAA,CAAA,CAAA;;2FAML,cAAc,EAAA,UAAA,EAAA,CAAA;kBAvB1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;wBACjB,uBAAuB;wBACvB,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,yBAAyB;wBACzB,uBAAuB;wBACvB,sBAAsB;wBACtB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,aAAa;wBACb,YAAY;wBACZ,YAAY;wBACZ;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;MC5BY,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;QASS,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAK/D,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC7D,IAAA;8GARY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZjC,ykDA4CA,EAAA,MAAA,EAAA,CAAA,6iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlCY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EAGd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,ykDAAA,EAAA,MAAA,EAAA,CAAA,6iBAAA,CAAA,EAAA;;sBAOtB;;sBAEA;;;MENU,mBAAmB,CAAA;AAPhC,IAAA,WAAA,GAAA;QASS,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,MAAM,GAAW,MAAM,CAAC,MAAM,CAAC;QAKvB,IAAA,CAAA,KAAK,GAAkC,SAAS;QAGhD,IAAA,CAAA,QAAQ,GAAY,KAAK;AAIxB,QAAA,IAAA,CAAA,eAAe,GAAuB,IAAI,YAAY,EAAQ;AAkBhF,IAAA;AAfQ,IAAA,UAAU,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,KAAK,GAAqB,KAAK,CAAC,MAA0B;AAEhE,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE;QAC5B,MAAM,IAAI,GAAS,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAEO,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;IACxC;8GAjCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbhC,qoBA2BA,EAAA,MAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EAGd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,qoBAAA,EAAA,MAAA,EAAA,CAAA,6BAAA,CAAA,EAAA;;sBAStB,SAAS;uBAAC,MAAM;;sBAEhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;MExBU,uBAAuB,CAAA;AAHpC,IAAA,WAAA,GAAA;AAIW,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAChD,IAAA;8GAFY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MCCY,wBAAwB,CAAA;AAHrC,IAAA,WAAA,GAAA;AAIW,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAChD,IAAA;8GAFY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MCCY,yBAAyB,CAAA;AAHtC,IAAA,WAAA,GAAA;AAIW,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAChD,IAAA;8GAFY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MCCY,sBAAsB,CAAA;AAHnC,IAAA,WAAA,GAAA;AAIW,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAChD,IAAA;8GAFY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MCWY,aAAa,CAAA;AAP1B,IAAA,WAAA,GAAA;QASS,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAQhE,IAAA,CAAA,MAAM,GAAsB,IAAI;QAChC,IAAA,CAAA,MAAM,GAAsB,IAAI;QAChC,IAAA,CAAA,KAAK,GAAe,EAAE;AACtB,QAAA,IAAA,CAAA,YAAY,GAA4B,IAAI,GAAG,EAAE;QACjD,IAAA,CAAA,OAAO,GAAa,EAAE;AAKrB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAA2C;AAC7E,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAc;AACrD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAY;AAC7C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAqC;AACrE,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAwC;QAIrF,IAAA,CAAA,OAAO,GAAY,IAAI;QACvB,IAAA,CAAA,WAAW,GAAY,KAAK;AAuFpC,IAAA;AArFC,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;IACxG;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAc,MAAM,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9F;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE;YACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK;YAClD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;QAC5C;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,OAAO,CAAC;QAChG;IACF;;IAIO,eAAe,CAAC,SAA6B,EAAE,OAAiB,EAAA;AACrE,QAAA,IAAI,CAAC,SAAS;YAAE;AAChB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,OAAO;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;AAC1E,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACjF;;AAGO,IAAA,SAAS,CAAC,KAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO;QAEhC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAc,KAAI;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW;AACrD,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5C;;IAGO,UAAU,CAAC,IAAc,EAAE,KAAwB,EAAA;QACxD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,OAAO,CAAC;AAC9F,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;QAC5B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACxC;;IAGO,SAAS,CAAC,IAAc,EAAE,KAAY,EAAA;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;;IAGO,QAAQ,CAAC,KAA8B,EAAE,EAAU,EAAA;QACxD,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;AAC9G,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;IAC9D;;IAGO,WAAW,CAAC,KAA2C,EAAE,KAAY,EAAA;AAC1E,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;;AAGO,IAAA,kBAAkB,CAAC,IAAc,EAAA;AACtC,QAAA,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC3D;;AAGO,IAAA,YAAY,CAAC,KAAY,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,kBAAkB,IAAI,EAAE;IACpD;;AAGO,IAAA,eAAe,CAAC,KAAY,EAAA;;;QAGjC,KAAK,CAAC,wBAAwB,EAAE;IAClC;8GAlHW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKV,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACvB,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACtB,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACzB,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBxC,2lXAwSA,EAAA,MAAA,EAAA,CAAA,08EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3RY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAa,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEX,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,UAAA,EAGP,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,2lXAAA,EAAA,MAAA,EAAA,CAAA,08EAAA,CAAA,EAAA;;sBAOtB,YAAY;uBAAC,uBAAuB;;sBACpC,YAAY;uBAAC,sBAAsB;;sBACnC,YAAY;uBAAC,yBAAyB;;sBACtC,YAAY;uBAAC,wBAAwB;;sBAErC;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;;ME3BU,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAEzC,IAAA,CAAA,cAAc,GAAG,CAAC;AAClB,QAAA,IAAA,CAAA,YAAY,GAAG,GAAG,CAAC;AAmC5B,IAAA;IAhCQ,SAAS,CAAC,GAAyB,EAAE,IAAiB,EAAA;QAC3D,IAAI,CAAC,cAAc,EAAE;;AAGrB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;gBACpC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC;AAC9D,YAAA,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;QACvB;AAEA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;;;;;;;;;;;QAW1B,QAAQ,CAAC,MAAK;YACZ,IAAI,CAAC,cAAc,EAAE;AAErB,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;;AAE7B,gBAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;gBACjC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC;YAC/D;QACF,CAAC,CAAC,CACH;IACH;8GAtCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA1B,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACVD;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
1
+ {"version":3,"file":"lukfel-ng-scaffold.mjs","sources":["../../../projects/ng-scaffold/src/lib/config/config.token.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.html","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.ts","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.html","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.ts","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.html","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.ts","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.html","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.ts","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.html","../../../projects/ng-scaffold/src/lib/shared/modules/material.module.ts","../../../projects/ng-scaffold/src/lib/shared/shared.module.ts","../../../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/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/overlay.service.ts","../../../projects/ng-scaffold/src/lib/services/router.service.ts","../../../projects/ng-scaffold/src/lib/services/scaffold.service.ts","../../../projects/ng-scaffold/src/lib/services/seo.service.ts","../../../projects/ng-scaffold/src/lib/services/snackbar.service.ts","../../../projects/ng-scaffold/src/lib/services/theme.service.ts","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.ts","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.html","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.ts","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.html","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.ts","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.html","../../../projects/ng-scaffold/src/lib/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/directives/list/list-item-avatar.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-buttons.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-subtitle.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-title.directive.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.html","../../../projects/ng-scaffold/src/lib/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 { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { 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 animations: [\r\n trigger('slideUpDown', [\r\n state('void', style({ transform: 'translateY(100%)' })),\r\n state('*', style({ transform: 'translateY(0)' })),\r\n transition(':enter', [style({ transform: 'translateY(100%)' }), animate('200ms linear')]),\r\n transition(':leave', [animate('200ms linear', style({ transform: 'translateY(100%)' }))])\r\n ])\r\n ],\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 [@slideUpDown]\r\n class=\"lf-bottom-bar lf-transitions 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 <!-- label button -->\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-bottom-bar-button ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ button.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else {\r\n <button\r\n mat-icon-button\r\n color=\"accent\"\r\n class=\"lf-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n","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 > 0) {\r\n <button mat-icon-button color=\"accent\" (click)=\"backButtonClicked()\">\r\n <mat-icon>arrow_back_ios</mat-icon>\r\n </button>\r\n }\r\n <!-- spacer -->\r\n <div 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 headerEnabled: boolean = false;\r\n @Input() public drawerPortal: ComponentPortal<unknown> | TemplatePortal<unknown> | null;\r\n\r\n @Output() public drawerConfigUpdateEvent = new EventEmitter<Partial<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({ open: false });\r\n }\r\n }\r\n\r\n\r\n // Detect when the drawer is closed without clicking a button\r\n public drawerClosed(): void {\r\n if (this.drawerConfig) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n };\r\n }\r\n\r\n}\r\n","@if (drawerConfig && drawerConfig.enable) {\r\n <mat-sidenav-container\r\n class=\"lf-drawer-container lf-transitions\"\r\n [ngClass]=\"drawerConfig.cssClass\">\r\n <!-- drawer -->\r\n <mat-sidenav\r\n class=\"lf-drawer mat-elevation-z2\"\r\n [class.mobile]=\"isMobile\"\r\n [mode]=\"isMobile ? 'over' : 'side'\"\r\n [opened]=\"drawerConfig.open\"\r\n [autoFocus]=\"false\"\r\n [fixedInViewport]=\"drawerConfig.fixed\"\r\n [class.lf-drawer-show-header]=\"headerEnabled && drawerConfig.fixed\"\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 style=\"overflow: unset !important\">\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<Partial<FloatingButtonConfig>>();\r\n @Output() public floatingButtonClickEvent = new EventEmitter<string>();\r\n\r\n\r\n ngOnInit(): void {\r\n if (this.floatingButtonConfig) {\r\n const updatedFloatingButtonConfigConfig: Partial<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 };\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}\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 lf-transitions\"\r\n [ngClass]=\"floatingButtonConfig.cssClass\"\r\n [ngClass]=\"floatingButtonConfig.horizontalPosition\"\r\n [class.sticky]=\"floatingButtonConfig.sticky\"\r\n [class.show-navbar]=\"isMobile && !bottomBarEnabled\"\r\n [class.show-bottom-bar]=\"bottomBarEnabled && !isMobile\"\r\n [class.show-navbar-and-bottom-bar]=\"isMobile && bottomBarEnabled\"\r\n [extended]=\"!!floatingButtonConfig.label\"\r\n (click)=\"buttonClicked(floatingButtonConfig.id)\"\r\n [matTooltip]=\"floatingButtonConfig.tooltip!\">\r\n <!-- 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 lf-transitions 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 { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { NgModule } from '@angular/core';\r\n\r\n//Angular Material Components\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\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 { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\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 { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatRippleModule } from '@angular/material/core';\r\n\r\n\r\n@NgModule({\r\n declarations: [],\r\n exports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatCardModule,\r\n MatExpansionModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatRippleModule,\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 { 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 { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { HeaderConfig, HeaderResponsiveConfig, MenuButton, 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 animations: [\r\n trigger('slideDownUp', [\r\n state('void', style({ transform: 'translateY(-100%)' })),\r\n state('*', style({ transform: 'translateY(0)' })),\r\n transition(':enter', [style({ transform: 'translateY(-100%)' }), animate('200ms ease-out', style({ transform: 'translateY(0)' }))]),\r\n transition(':leave', [animate('200ms ease-in', style({ transform: 'translateY(-100%)' }))])\r\n ])\r\n ],\r\n standalone: false\r\n})\r\nexport class HeaderComponent {\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<Partial<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 public mobileButton: MenuButton;\r\n\r\n\r\n public buttonClicked(id?: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public inputChanged(value: string): void {\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n public inputClosed(): void {\r\n this.headerConfigUpdateEvent.emit({ inputConfig: { enable: false } });\r\n }\r\n\r\n 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 public getRightMobileButton(): MenuButton | null {\r\n const rightMenuButtons: MenuButton[] = this.headerConfig?.rightMenuButtons || [];\r\n if (!rightMenuButtons?.length) return null;\r\n\r\n const config: HeaderResponsiveConfig | undefined = this.headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n const includedButtons: MenuButton[] = rightMenuButtons.filter((button: MenuButton) => !config?.excludeButtonIds?.includes(button.id));\r\n return {\r\n id: '',\r\n matIcon: (!config.matIcon && !config.svgIcon && !config.label) ? 'more_vert' : config.matIcon,\r\n svgIcon: config.svgIcon,\r\n label: config.label,\r\n menuButtons: [...includedButtons]\r\n };\r\n }\r\n\r\n public getRightExcludedButtons(): MenuButton[] | null {\r\n const rightMenuButtons: MenuButton[] = this.headerConfig?.rightMenuButtons || [];\r\n if (!rightMenuButtons?.length) return null;\r\n\r\n const config: HeaderResponsiveConfig | undefined = this.headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n const excludedButtons: MenuButton[] = rightMenuButtons.filter((button: MenuButton) => config?.excludeButtonIds?.includes(button.id));\r\n return excludedButtons;\r\n }\r\n\r\n}\r\n","@if (headerConfig && headerConfig.enable) {\r\n <mat-toolbar\r\n class=\"lf-header lf-transitions mat-elevation-z3\"\r\n [class.px-4]=\"!isMobile\"\r\n [class.px-1]=\"isMobile\"\r\n [ngClass]=\"headerConfig.cssClass\"\r\n [class.lf-gradient]=\"headerConfig.gradient\"\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 <!-- img logo -->\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 <!-- 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 @if (headerConfig.responsiveConfig?.enable && isMobile) {\r\n @let exludedButtons = getRightExcludedButtons();\r\n @for (button of exludedButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n @let mobileButton = getRightMobileButton();\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: mobileButton,\r\n }\"></ng-container>\r\n } @else {\r\n @for (button of 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 }\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 <!-- label button -->\r\n @if (menuButton.label && !hideLabel) {\r\n <button\r\n mat-button\r\n class=\"lf-header-menu-button\"\r\n [class.lf-header-menu-button-active]=\"isActive(menuButton.id)\"\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 <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ menuButton.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else if (menuButton.matIcon || menuButton.svgIcon) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-header-menu-button\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n (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 @if (menuButton.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n <!-- img button -->\r\n } @else if (menuButton.imgIcon) {\r\n <img\r\n class=\"lf-header-menu-img px-1\"\r\n [src]=\"menuButton.imgIcon\"\r\n width=\"48\"\r\n height=\"48\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [attr.aria-label]=\"menuButton.id\" />\r\n }\r\n <!-- menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <!-- label menu buttons -->\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- menu button -->\r\n @if (button.label) {\r\n <button\r\n mat-menu-item\r\n [class.lf-header-menu-button-active]=\"isActive(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <span>{{ button.label }}</span>\r\n </button>\r\n }\r\n }\r\n <!-- icon menu buttons -->\r\n <div mat-menu-item class=\"lf-menu-icons px-1\" [disableRipple]=\"true\">\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- icon button -->\r\n @if (!button.label && (button.matIcon || button.svgIcon)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-menu-icon-button\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n tabindex=\"0\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n</ng-template>\r\n","import { 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(distinctUntilChanged());\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 { Injectable, Type, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfirmDialogConfig, HeaderInputConfig } from '../models';\r\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<T>(templateRef: Type<T>, config: MatDialogConfig): Promise<any> { // eslint-disable-line @typescript-eslint/no-explicit-any\r\n const dialogRef = this.matDialog.open(templateRef, config);\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a simple pre-made 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","\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OverlayService {\r\n private overlay = inject(Overlay);\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n\r\n public open<T>(component: ComponentType<T>): void {\r\n if (this.overlayRef) return;\r\n\r\n this.overlayRef = this.overlay.create({\r\n hasBackdrop: true,\r\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n });\r\n\r\n const portal: ComponentPortal<T> = new ComponentPortal(component);\r\n this.overlayRef.attach(portal);\r\n }\r\n\r\n public close(): void {\r\n if (!this.overlayRef) return;\r\n this.overlayRef.detach();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { NavigationEnd, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable, take } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n\r\nexport class RouterService {\r\n private router = inject(Router);\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n\r\n private _loading$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n public get loading$(): Observable<boolean> {\r\n return this._loading$.asObservable();\r\n }\r\n\r\n private _routeHistory$: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);\r\n\r\n public get routeHistory$(): Observable<string[]> {\r\n return this._routeHistory$.asObservable();\r\n }\r\n\r\n private _currentRoute$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get currentRoute$(): Observable<string> {\r\n return this._currentRoute$.asObservable();\r\n }\r\n\r\n public get currentRoute(): string {\r\n return this._currentRoute$.value;\r\n }\r\n\r\n private _previousRoute$: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n public get previousRoute$(): Observable<string> {\r\n return this._previousRoute$.asObservable();\r\n }\r\n\r\n public get previousRoute(): string {\r\n return this._previousRoute$.value;\r\n }\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n history.replaceState({ ...history.state, back: false }, '');\r\n }\r\n\r\n this.router.events.subscribe(event => {\r\n let asyncLoadCount: number = 0;\r\n\r\n if (event instanceof RouteConfigLoadStart) { asyncLoadCount++; }\r\n if (event instanceof RouteConfigLoadEnd) { asyncLoadCount--; }\r\n if (event instanceof NavigationEnd) {\r\n const previousRoute: string = this._currentRoute$.value;\r\n this._previousRoute$.next(previousRoute);\r\n\r\n const currentRoute: string = event.urlAfterRedirects;\r\n this._currentRoute$.next(currentRoute);\r\n\r\n if (!this.router.currentNavigation()?.extras?.state?.['back']) {\r\n if (previousRoute) {\r\n const routeHistory: string[] = this._routeHistory$.value;\r\n routeHistory.push(previousRoute);\r\n this._routeHistory$.next(routeHistory);\r\n }\r\n }\r\n }\r\n\r\n this._loading$.next(!!asyncLoadCount);\r\n });\r\n }\r\n\r\n /**\r\n * Navigates to the previous route found in the routeHistory Observable\r\n * \r\n * @param fallbackRoute fallback in case there is no previous route\r\n */\r\n public navigateBack(fallbackRoute?: string): void {\r\n this._routeHistory$.pipe(take(1)).subscribe(routeHistory => {\r\n if (routeHistory.length > 0) {\r\n const previousRoute: string = routeHistory[routeHistory.length - 1];\r\n\r\n if (previousRoute) {\r\n this.router.navigateByUrl(previousRoute, { state: { back: true } }).then(result => {\r\n if (result) {\r\n routeHistory.pop();\r\n }\r\n });\r\n } else if (fallbackRoute) {\r\n this.router.navigate([fallbackRoute]);\r\n }\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Clear the current route history\r\n */\r\n public clearRouteHistory(): void {\r\n this._routeHistory$.next([]);\r\n }\r\n\r\n}\r\n","import { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { CONFIG } from '../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: Partial<ScaffoldConfig[K]> | ScaffoldConfig[K]): void {\r\n const currentState: ScaffoldConfig = this._scaffoldConfig$.getValue();\r\n const currentValue: ScaffoldConfig[K] = currentState[property];\r\n let newValue: ScaffoldConfig[K];\r\n\r\n if (currentValue && typeof currentValue === 'object' && value && typeof value === 'object') {\r\n newValue = { ...currentValue, ...value } as ScaffoldConfig[K];\r\n } else {\r\n newValue = value as ScaffoldConfig[K];\r\n }\r\n\r\n if (newValue === currentValue) {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UNCHANGED] ScaffoldConfig.${property}`, newValue)\r\n return;\r\n }\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, newValue);\r\n this._scaffoldConfig$.next({ ...currentState, [property]: newValue });\r\n }\r\n}\r\n","\r\nimport { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { SeoConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SeoService {\r\n private metaTitle = inject(Title);\r\n private metaTags = inject(Meta);\r\n private document = inject<Document>(DOCUMENT);\r\n private logger = inject(Logger);\r\n\r\n\r\n private _config$: BehaviorSubject<SeoConfig | null> = new BehaviorSubject<SeoConfig | null>(null);\r\n\r\n public get config$(): Observable<SeoConfig | null> {\r\n return this._config$.asObservable();\r\n }\r\n\r\n\r\n /**\r\n * Pass a configuration to set meta tags such as title, description and image for search results and social media\r\n * \r\n * @param seoConfig config that contains all the meta information\r\n * \r\n */\r\n public setMetaTags(seoConfig: SeoConfig): void {\r\n this._config$.next(seoConfig);\r\n\r\n const autoTrim: boolean = seoConfig.autoTrim || false;\r\n const title: string = seoConfig.metaPageTitle || '';\r\n const description: string = seoConfig.metaPageDescription || '';\r\n const imagePath: string = seoConfig.metaImagePath || '';\r\n const 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 { DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n 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 { ComponentPortal } from '@angular/cdk/portal';\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { CONFIG } from '../../config/config.token';\r\nimport { LoadingOverlayConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { ScaffoldService } from '../../services';\r\n\r\n@Component({\r\n selector: 'lf-loading-overlay',\r\n templateUrl: './loading-overlay.component.html',\r\n styleUrls: ['./loading-overlay.component.scss'],\r\n standalone: false\r\n})\r\nexport class LoadingOverlayComponent implements OnInit {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n\r\n\r\n public portal: ComponentPortal<any> | null = null;\r\n public loadingOverlayConfig: LoadingOverlayConfig | null = null;\r\n\r\n\r\n ngOnInit(): void {\r\n this.loadingOverlayConfig = this.scaffoldService.scaffoldConfig?.loadingOverlayConfig || null;\r\n\r\n if (this.loadingOverlayConfig?.customComponent) {\r\n this.portal = new ComponentPortal(this.loadingOverlayConfig?.customComponent);\r\n }\r\n }\r\n}\r\n","@if (!portal) {\r\n <div\r\n [ngClass]=\"loadingOverlayConfig?.cssClass\"\r\n [class.lf-gradient-spinner]=\"loadingOverlayConfig?.gradient\">\r\n <mat-progress-spinner mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n} @else {\r\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { 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 animations: [\r\n trigger('responsiveSlide', [\r\n // States for desktop and mobile\r\n state('desktop', style({ transform: 'translateX(0)' })),\r\n state('mobile', style({ transform: 'translateY(0)' })),\r\n\r\n // Desktop enter (slide in from left)\r\n transition('void => desktop', [\r\n style({ transform: 'translateX(-100%)' }),\r\n animate('200ms linear')\r\n ]),\r\n // Desktop leave (slide back to left)\r\n transition('desktop => void', [\r\n animate('200ms linear', style({ transform: 'translateX(-100%)' }))\r\n ]),\r\n\r\n // Mobile enter (slide in from bottom)\r\n transition('void => mobile', [\r\n style({ transform: 'translateY(100%)' }),\r\n animate('200ms linear')\r\n ]),\r\n // Mobile leave (slide back to bottom)\r\n transition('mobile => void', [\r\n animate('200ms linear', style({ transform: 'translateY(100%)' }))\r\n ]),\r\n ])\r\n ],\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 [@responsiveSlide]=\"isMobile ? 'mobile' : 'desktop'\"\r\n class=\"mat-app-background lf-transitions mat-elevation-z3\"\r\n [class.lf-navbar]=\"!isMobile\"\r\n [class.lf-navbar-mobile]=\"isMobile\"\r\n [ngClass]=\"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.buttons; track button.id; let i = $index) {\r\n @if (i < 5) {\r\n <div\r\n class=\"lf-navbar-item\"\r\n [class.lf-navbar-item-active]=\"isActive(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <!-- show a protected space on desktop so the icon doesn't move up and down -->\r\n @if (button?.label) {\r\n <span class=\"lf-navbar-item-label\">\r\n {{\r\n isActive(button.id) || navbarConfig.showAllLabels\r\n ? button.label\r\n : isMobile\r\n ? \"\"\r\n : \"&nbsp;\"\r\n }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import { 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, OverlayService, RouterService, ScaffoldService } from '../../services';\r\nimport { LoadingOverlayComponent } from '../loading-overlay/loading-overlay.component';\r\n\r\n@Component({\r\n selector: 'lf-scaffold',\r\n templateUrl: './scaffold.component.html',\r\n styleUrls: ['./scaffold.component.scss'],\r\n 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 overlayService = inject(OverlayService)\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 public initialized: boolean = false;\r\n\r\n private _subscription: Subscription = new Subscription;\r\n\r\n\r\n ngOnInit(): void {\r\n // Listen for config changes\r\n this._subscription.add(this.scaffoldService.scaffoldConfig$.subscribe((scaffoldConfig: ScaffoldConfig) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[ScaffoldConfig]', scaffoldConfig);\r\n\r\n if (scaffoldConfig.loading) {\r\n this.overlayService.open(LoadingOverlayComponent);\r\n } else {\r\n this.overlayService.close();\r\n }\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 setTimeout(() => { this.initialized = true; });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._subscription) {\r\n this._subscription.unsubscribe();\r\n }\r\n }\r\n\r\n // Header\r\n public headerConfigUpdated(headerConfig: Partial<HeaderConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('headerConfig', headerConfig);\r\n }\r\n\r\n public headerButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public headerInputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public headerInputChanged(value: string): void {\r\n this.scaffoldService.headerInputChangeValue = value;\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n // Navbar\r\n public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Drawer\r\n public drawerConfigUpdated(drawerConfig: Partial<DrawerConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('drawerConfig', drawerConfig);\r\n }\r\n\r\n // Content title card\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n // Floating button\r\n public floatingButtonConfigUpdated(floatingButtonConfig: Partial<FloatingButtonConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('floatingButtonConfig', floatingButtonConfig);\r\n }\r\n\r\n public floatingButtonClicked(id: string): void {\r\n 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","<div\r\n class=\"lf-scaffold lf-transitions mat-app-background mat-typography\"\r\n [ngClass]=\"scaffoldConfig?.cssClass\">\r\n <!-- header -->\r\n <lf-header\r\n [libraryConfig]=\"libraryConfig\"\r\n [headerConfig]=\"headerConfig\"\r\n [isMobile]=\"isMobile\"\r\n [routeLoading]=\"routeLoading\"\r\n [currentRoute]=\"currentRoute\"\r\n (headerConfigUpdateEvent)=\"headerConfigUpdated($event)\"\r\n (headerButtonClickEvent)=\"headerButtonClicked($event)\"\r\n (headerInputSubmitEvent)=\"headerInputSubmitted($event)\"\r\n (headerInputChangeEvent)=\"headerInputChanged($event)\"></lf-header>\r\n <!-- navbar -->\r\n <lf-navbar\r\n [libraryConfig]=\"libraryConfig\"\r\n [navbarConfig]=\"navbarConfig\"\r\n [isMobile]=\"isMobile\"\r\n [currentRoute]=\"currentRoute\"\r\n (navbarButtonClickEvent)=\"navbarButtonClicked($event)\"></lf-navbar>\r\n <!-- content wrapper -->\r\n <div\r\n class=\"lf-content-wrapper\"\r\n [class.lf-show-navbar]=\"navbarConfig?.enable && !isMobile\"\r\n [class.lf-show-header]=\"headerConfig?.enable && !(navbarConfig?.enable && isMobile)\"\r\n [class.lf-show-navbar-mobile]=\"navbarConfig?.enable && isMobile && !headerConfig?.enable\"\r\n [class.lf-show-header-and-navbar-mobile]=\"\r\n headerConfig?.enable && navbarConfig?.enable && isMobile\r\n \"\r\n [class.lf-transitions]=\"initialized\"\r\n #scrollContainer\r\n cdkScrollable>\r\n <!-- drawer -->\r\n <lf-drawer\r\n [libraryConfig]=\"libraryConfig\"\r\n [drawerConfig]=\"drawerConfig\"\r\n [drawerPortal]=\"drawerPortal\"\r\n [isMobile]=\"isMobile\"\r\n [headerEnabled]=\"headerConfig?.enable!\"\r\n (drawerConfigUpdateEvent)=\"drawerConfigUpdated($event)\">\r\n <!-- drawer content -->\r\n <ng-content select=\"[drawerContent]\" drawerContent></ng-content>\r\n <!-- content title card -->\r\n <lf-content-title-card\r\n [libraryConfig]=\"libraryConfig\"\r\n [contentTitleCardConfig]=\"contentTitleCardConfig\"\r\n [isMobile]=\"isMobile\"\r\n [routeHistory]=\"routeHistory\"\r\n (backButtonClickEvent)=\"backButtonClicked()\"></lf-content-title-card>\r\n <!-- main content -->\r\n <div\r\n class=\"lf-content\"\r\n [class.lf-content-mobile]=\"isMobile\"\r\n [class.lf-show-footer]=\"footerConfig?.enable\"\r\n #content>\r\n <ng-content></ng-content>\r\n <!-- to top button -->\r\n <lf-floating-button\r\n [libraryConfig]=\"libraryConfig\"\r\n [floatingButtonConfig]=\"floatingButtonConfig\"\r\n [onTop]=\"scrollTopPosition <= 0\"\r\n [isMobile]=\"isMobile && navbarConfig?.enable!\"\r\n [bottomBarEnabled]=\"bottomBarConfig?.enable!\"\r\n (floatingButtonConfigUpdateEvent)=\"floatingButtonConfigUpdated($event)\"\r\n (floatingButtonClickEvent)=\"floatingButtonClicked($event)\"></lf-floating-button>\r\n </div>\r\n <!-- footer -->\r\n <lf-footer [libraryConfig]=\"libraryConfig\" [footerConfig]=\"footerConfig\"></lf-footer>\r\n </lf-drawer>\r\n </div>\r\n <!-- bottom bar -->\r\n <lf-bottom-bar\r\n [libraryConfig]=\"libraryConfig\"\r\n [bottomBarConfig]=\"bottomBarConfig\"\r\n [isMobile]=\"isMobile && navbarConfig?.enable!\"\r\n [navbarEnabled]=\"navbarConfig?.enable!\"\r\n (bottomBarCloseClickEvent)=\"bottomBarCloseClicked($event)\"\r\n (bottomBarButtonClickEvent)=\"bottomBarButtonClicked($event)\"></lf-bottom-bar>\r\n</div>\r\n","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 { 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 ],\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, inject, Input, Output } from '@angular/core';\r\nimport { CONFIG } from '../../../config/config.token';\r\nimport { PlaceholderConfig, ScaffoldLibraryConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\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]\r\n})\r\nexport class PlaceholderComponent {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\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 @if (placeholderConfig.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ placeholderConfig.matIcon }}\r\n </mat-icon>\r\n } @else if (placeholderConfig.svgIcon) {\r\n <mat-icon [svgIcon]=\"placeholderConfig.svgIcon\"></mat-icon>\r\n }\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 <!-- icon -->\r\n @if (placeholderConfig.button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ placeholderConfig.button.matIcon }}\r\n </mat-icon>\r\n } @else if (placeholderConfig.button.svgIcon) {\r\n <mat-icon [svgIcon]=\"placeholderConfig.button.svgIcon\"></mat-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 { CONFIG } from '../../../config/config.token';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\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 public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\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 <!-- icon -->\r\n @if (matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ matIcon }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n {{ label }}\r\n</button>\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemAvatar]'\r\n})\r\nexport class ListItemAvatarDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemButtons]'\r\n})\r\nexport class ListItemButtonsDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemSubtitle]'\r\n})\r\nexport class ListItemSubtitleDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemTitle]'\r\n})\r\nexport class ListItemTitleDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}","import { CdkDragDrop, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { Component, ContentChild, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { CONFIG } from '../../../config/config.token';\r\nimport { ListItemAvatarDirective, ListItemButtonsDirective, ListItemSubtitleDirective, ListItemTitleDirective } from '../../../directives';\r\nimport { Button, ListConfig, ListHeader, ListItem, ScaffoldLibraryConfig } from '../../../models';\r\nimport { SharedModule } from '../../shared.module';\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]\r\n})\r\nexport class ListComponent implements OnInit, OnChanges {\r\n\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n\r\n @ContentChild(ListItemAvatarDirective) public avatarTemplate?: ListItemAvatarDirective;\r\n @ContentChild(ListItemTitleDirective) public titleTemplate?: ListItemTitleDirective;\r\n @ContentChild(ListItemSubtitleDirective) public subtitleTemplate?: ListItemSubtitleDirective;\r\n @ContentChild(ListItemButtonsDirective) public buttonsTemplate?: ListItemButtonsDirective;\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\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.preventDefault();\r\n // click.stopPropagation();\r\n click.stopImmediatePropagation();\r\n }\r\n}\r\n","<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header) {\r\n <div class=\"lf-list-item lf-list-item-header\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img [src]=\"header.avatar\" alt=\"Avatar of header\" (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (header.matIcon || header.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <!-- icon -->\r\n @if (header.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ header.matIcon }}\r\n </mat-icon>\r\n } @else if (header.svgIcon) {\r\n <mat-icon [svgIcon]=\"header.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n @for (item of header.items; track $index) {\r\n <span [class.clickable]=\"item.sortToken\" (click)=\"updateSortToken(item.sortToken)\">\r\n {{ item.title }}\r\n @if (sortToken === item.sortToken) {\r\n <mat-icon class=\"lf-list-item-sort-icon\">\r\n {{ sortAsc ? \"arrow_downward\" : \"arrow_upward\" }}\r\n </mat-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @for (button of header.buttons; track button.id) {\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox ml-3\">\r\n <mat-checkbox\r\n [(ngModel)]=\"allSelected\"\r\n [indeterminate]=\"someSelected\"\r\n (change)=\"selectAll($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n <mat-divider></mat-divider>\r\n }\r\n\r\n <!-- Grouped Items -->\r\n @if (config?.mode === \"group\" && groupedItems) {\r\n @for (group of groupedItems | keyvalue; track group.key; let first = $first) {\r\n <div class=\"lf-list-group\" [class.mt-4]=\"!first\">\r\n @if (group.key) {\r\n <div class=\"lf-list-item lf-list-group-header\">\r\n <div class=\"lf-list-item-avatar px-2\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row px-2\">\r\n <span>{{ group.key }}</span>\r\n </div>\r\n </div>\r\n }\r\n <div\r\n [id]=\"group.key\"\r\n cdkDropList\r\n [cdkDropListData]=\"group.value\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, group.key)\"\r\n [class.drop-zone]=\"config?.enableDragging && group.value.length <= 0\">\r\n @for (item of group.value; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Flat Items -->\r\n } @else {\r\n <div\r\n [id]=\"dropListId\"\r\n cdkDropList\r\n [cdkDropListData]=\"items\"\r\n [cdkDropListDisabled]=\"!config?.enableDragging\"\r\n [cdkDropListConnectedTo]=\"connectedDropListIds\"\r\n (cdkDropListDropped)=\"dropItem($event, dropListId)\"\r\n [class.drop-zone]=\"config?.enableDragging && items.length <= 0\">\r\n @for (item of items; track item.id; let last = $last) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"item.disabled || !config?.enableDragging\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"listItemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, last: last }\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Item (template) -->\r\n <ng-template #listItemTemplate let-item let-last=\"last\">\r\n <div\r\n class=\"lf-list-item lf-list-item-data\"\r\n [class.active]=\"item.checked\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.clickable]=\"item.clickable && !item.disabled\"\r\n [ngClass]=\"item.cssClass\"\r\n matRipple\r\n [matRippleDisabled]=\"!item.clickable\"\r\n (click)=\"item.clickable && !item.disabled ? clickItem(item, $event) : null\">\r\n <!-- avatar -->\r\n @if (avatarTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"avatarTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else if (item.avatar) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <img\r\n [src]=\"item.avatar\"\r\n [alt]=\"'Avatar of ' + item.title\"\r\n (error)=\"onImageError($event)\" />\r\n </div>\r\n } @else if (item.matIcon || item.svgIcon) {\r\n <div class=\"lf-list-item-avatar px-2\">\r\n <!-- icon -->\r\n @if (item.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ item.matIcon }}\r\n </mat-icon>\r\n } @else if (item.svgIcon) {\r\n <mat-icon [svgIcon]=\"item.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper px-2\">\r\n <span class=\"lf-list-item-title\">\r\n @if (titleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"titleTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.title }}\r\n }\r\n </span>\r\n @if (item.subtitle || subtitleTemplate) {\r\n <span class=\"lf-list-item-subtitle\">\r\n @if (subtitleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"subtitleTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.subtitle }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"lf-list-item-buttons\">\r\n @if (buttonsTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"buttonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n @let combinedButtons = getCombinedButtons(item);\r\n @for (button of combinedButtons; track button.id) {\r\n @if (!item.hiddenButtonIds?.includes(button.id)) {\r\n @let disabled =\r\n button.disabled || item.disabled || item.disabledButtonIds?.includes(button.id);\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-list-item-button ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon [class.material-icons-outlined]=\"libraryConfig?.outlineIcons\">\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon ml-2\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n (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/* DIRECTIVES */\r\nexport * from './lib/directives';\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":["i3","i4","i2","i1","i6","i8","i9.InputComponent","i3.HeaderComponent","i4.NavbarComponent","i5.DrawerComponent","i6.FooterComponent","i7.ContentTitleCardComponent","i8.FloatingButtonComponent","i9.BottomBarComponent","i5","i7"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lukfel/ng-scaffold",
3
- "version": "21.1.1",
3
+ "version": "21.1.3",
4
4
  "description": "This Angular library provides a basic UI scaffold and services for modern web and mobile apps",
5
5
  "license": "MIT",
6
6
  "author": {
package/styles/style.scss CHANGED
@@ -21,6 +21,7 @@ body {
21
21
 
22
22
  ::-webkit-scrollbar {
23
23
  width: 8px;
24
+ height: 8px;
24
25
  }
25
26
 
26
27
  ::-webkit-scrollbar-thumb {
@@ -265,14 +265,14 @@ declare class ScaffoldComponent implements OnInit, OnDestroy {
265
265
  private _subscription;
266
266
  ngOnInit(): void;
267
267
  ngOnDestroy(): void;
268
- headerConfigUpdated(headerConfig: HeaderConfig): void;
268
+ headerConfigUpdated(headerConfig: Partial<HeaderConfig>): void;
269
269
  headerButtonClicked(id: string): void;
270
270
  headerInputSubmitted(value: string): void;
271
271
  headerInputChanged(value: string): void;
272
272
  navbarButtonClicked(id: string): void;
273
- drawerConfigUpdated(drawerConfig: DrawerConfig): void;
273
+ drawerConfigUpdated(drawerConfig: Partial<DrawerConfig>): void;
274
274
  backButtonClicked(): void;
275
- floatingButtonConfigUpdated(floatingButtonConfig: FloatingButtonConfig): void;
275
+ floatingButtonConfigUpdated(floatingButtonConfig: Partial<FloatingButtonConfig>): void;
276
276
  floatingButtonClicked(id: string): void;
277
277
  bottomBarCloseClicked(id: string): void;
278
278
  bottomBarButtonClicked(id: string): void;
@@ -290,18 +290,17 @@ declare class LoadingOverlayComponent implements OnInit {
290
290
  static ɵcmp: i0.ɵɵComponentDeclaration<LoadingOverlayComponent, "lf-loading-overlay", never, {}, {}, never, never, false, never>;
291
291
  }
292
292
 
293
- declare class HeaderComponent implements OnInit {
293
+ declare class HeaderComponent {
294
294
  libraryConfig: ScaffoldLibraryConfig | null;
295
295
  headerConfig: HeaderConfig | null;
296
296
  isMobile: boolean;
297
297
  routeLoading: boolean;
298
298
  currentRoute: string;
299
- headerConfigUpdateEvent: EventEmitter<HeaderConfig>;
299
+ headerConfigUpdateEvent: EventEmitter<Partial<HeaderConfig>>;
300
300
  headerButtonClickEvent: EventEmitter<string>;
301
301
  headerInputSubmitEvent: EventEmitter<string>;
302
302
  headerInputChangeEvent: EventEmitter<string>;
303
303
  mobileButton: MenuButton;
304
- ngOnInit(): void;
305
304
  buttonClicked(id?: string): void;
306
305
  inputSubmitted(value: string): void;
307
306
  inputChanged(value: string): void;
@@ -331,7 +330,7 @@ declare class DrawerComponent implements OnInit {
331
330
  isMobile: boolean;
332
331
  headerEnabled: boolean;
333
332
  drawerPortal: ComponentPortal<unknown> | TemplatePortal<unknown> | null;
334
- drawerConfigUpdateEvent: EventEmitter<DrawerConfig>;
333
+ drawerConfigUpdateEvent: EventEmitter<Partial<DrawerConfig>>;
335
334
  ngOnInit(): void;
336
335
  drawerClosed(): void;
337
336
  static ɵfac: i0.ɵɵFactoryDeclaration<DrawerComponent, never>;
@@ -362,7 +361,7 @@ declare class FloatingButtonComponent implements OnInit {
362
361
  onTop: boolean;
363
362
  isMobile: boolean;
364
363
  bottomBarEnabled: boolean;
365
- floatingButtonConfigUpdateEvent: EventEmitter<FloatingButtonConfig>;
364
+ floatingButtonConfigUpdateEvent: EventEmitter<Partial<FloatingButtonConfig>>;
366
365
  floatingButtonClickEvent: EventEmitter<string>;
367
366
  ngOnInit(): void;
368
367
  buttonClicked(id?: string): void;
@@ -698,7 +697,7 @@ declare class ScaffoldService {
698
697
  private _drawerPortal$;
699
698
  get drawerPortal$(): Observable<ComponentPortal<unknown> | TemplatePortal<unknown> | null>;
700
699
  set drawerPortal(value: ComponentType<unknown>);
701
- updateScaffoldProperty<K extends keyof ScaffoldConfig>(property: K, value: ScaffoldConfig[K]): void;
700
+ updateScaffoldProperty<K extends keyof ScaffoldConfig>(property: K, value: Partial<ScaffoldConfig[K]> | ScaffoldConfig[K]): void;
702
701
  static ɵfac: i0.ɵɵFactoryDeclaration<ScaffoldService, never>;
703
702
  static ɵprov: i0.ɵɵInjectableDeclaration<ScaffoldService>;
704
703
  }