@lukfel/ng-scaffold 22.1.2 → 22.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lukfel-ng-scaffold.mjs","sources":["../../../projects/ng-scaffold/src/lib/scaffold.config.ts","../../../projects/ng-scaffold/src/lib/services/breakpoint.service.ts","../../../projects/ng-scaffold/src/lib/services/dialog.service.ts","../../../projects/ng-scaffold/src/lib/services/logger.service.ts","../../../projects/ng-scaffold/src/lib/services/local-storage.service.ts","../../../projects/ng-scaffold/src/lib/services/overlay.service.ts","../../../projects/ng-scaffold/src/lib/services/router.service.ts","../../../projects/ng-scaffold/src/lib/services/scaffold.service.ts","../../../projects/ng-scaffold/src/lib/services/seo.service.ts","../../../projects/ng-scaffold/src/lib/services/snackbar.service.ts","../../../projects/ng-scaffold/src/lib/services/theme.service.ts","../../../projects/ng-scaffold/src/lib/services/translation.service.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.html","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.ts","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.html","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.ts","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.html","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.ts","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.html","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.ts","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.html","../../../projects/ng-scaffold/src/lib/shared/components/input/input.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/input/input.component.html","../../../projects/ng-scaffold/src/lib/components/header/header.component.ts","../../../projects/ng-scaffold/src/lib/components/header/header.component.html","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.ts","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.html","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.ts","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.html","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.ts","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.html","../../../projects/ng-scaffold/src/lib/shared/components/color-picker/color-picker.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/color-picker/color-picker.component.html","../../../projects/ng-scaffold/src/lib/shared/components/file-upload/file-upload.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/file-upload/file-upload.component.html","../../../projects/ng-scaffold/src/lib/directives/list/list-item-avatar.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-buttons.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-subtitle.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-title.directive.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.html","../../../projects/ng-scaffold/src/lib/shared/components/notification/notification.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/notification/notification.component.html","../../../projects/ng-scaffold/src/lib/shared/components/placeholder/placeholder.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/placeholder/placeholder.component.html","../../../projects/ng-scaffold/src/lib/interceptors/loading.interceptor.ts","../../../projects/ng-scaffold/src/public-api.ts","../../../projects/ng-scaffold/src/lukfel-ng-scaffold.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from './models';\r\n\r\nexport const CONFIG = new InjectionToken<ScaffoldLibraryConfig>('config');\r\n\r\nexport function provideScaffold(config: ScaffoldLibraryConfig = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders([{ provide: CONFIG, useValue: config }]);\r\n}\r\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { distinctUntilChanged } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BreakpointService {\r\n private breakpointObserver = inject(BreakpointObserver);\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","import { Injectable, Type, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfirmDialogConfig, HeaderInputConfig } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogService {\r\n private matDialog = inject(MatDialog);\r\n\r\n /**\r\n * Opens a simple pre-made confirm dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous boolean response\r\n */\r\n public async openConfirmDialog(config: ConfirmDialogConfig): Promise<boolean> {\r\n const { ConfirmDialogComponent } =\r\n await import('../shared/components/dialogs/confirm-dialog/confirm-dialog.component');\r\n\r\n const dialogRef = this.matDialog.open(ConfirmDialogComponent, {\r\n autoFocus: false,\r\n maxWidth: '368px',\r\n data: config,\r\n });\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a dialog with custom template and custom config\r\n *\r\n * @param templateRef reference to the component or template\r\n * @param config of the dialog\r\n * @returns an asynchronous any response\r\n */\r\n public openCustomDialog<T>(templateRef: Type<T>, config: MatDialogConfig): Promise<any> {\r\n const dialogRef = this.matDialog.open(templateRef, config);\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a simple pre-made input dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous string response\r\n */\r\n public async openInputDialog(config: HeaderInputConfig): Promise<string | undefined> {\r\n const { InputComponent } = await import('../shared/components/input/input.component');\r\n\r\n const dialogRef = this.matDialog.open(InputComponent, {\r\n autoFocus: false,\r\n width: '100vw',\r\n data: config,\r\n panelClass: 'lf-input-dialog',\r\n });\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Logger {\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n /**\r\n * Uses the regular console log but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n *\r\n * @param message message of the log\r\n * @param args arguments of the log\r\n */\r\n public log(message: string, ...args: any[]): void {\r\n if (this.libraryConfig?.production === false) {\r\n console.log(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n /**\r\n * Uses the regular console warn but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n *\r\n * @param message message of the warn\r\n * @param args arguments of the warn\r\n */\r\n public warn(message: string, ...args: any[]): void {\r\n if (this.libraryConfig?.production === false) {\r\n console.warn(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n /**\r\n * Uses the regular console error but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n *\r\n * @param message message of the error\r\n * @param args arguments of the error\r\n */\r\n public error(message: string, ...args: any[]): void {\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","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LocalStorageService {\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private platformId = inject(PLATFORM_ID);\r\n private logger = inject(Logger);\r\n\r\n /**\r\n * Set an item into the browser's local storage\r\n *\r\n * @param key key of the item\r\n * @param value value of the item\r\n */\r\n public setItem<T>(key: string, value: T | null): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n const stringValue: string = JSON.stringify(value);\r\n if (this.libraryConfig?.debugging)\r\n this.logger.log(`[SET ITEM] ${key} with value:`, stringValue);\r\n localStorage.setItem(key, stringValue);\r\n } catch (error) {\r\n this.logger.error(`[ERROR SET ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Set an item encoded into the browser's local storage\r\n *\r\n * @param key key of the item\r\n * @param value value of the item\r\n */\r\n public setItemEncoded<T>(key: string, value: T | null): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n const encodedValue: string = btoa(JSON.stringify(value));\r\n if (this.libraryConfig?.debugging)\r\n this.logger.log(`[SET ITEM] ${key} with value:`, encodedValue);\r\n localStorage.setItem(key, encodedValue);\r\n } catch (error) {\r\n this.logger.error(`[ERROR SET ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Get an item from the browser's local storage by key\r\n *\r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public getItem<T>(key: string): T | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item ? (JSON.parse(item, this.dateReviver) as T) : null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get an item and decode it from the browser's local storage by key\r\n *\r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public getItemDecoded<T>(key: string): T | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item ? (JSON.parse(atob(item), this.dateReviver) as T) : null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get an unparsed string item from the browser's local storage by key\r\n *\r\n * @param key key of the item\r\n */\r\n public getItemUnparsed(key: string): string | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item || null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Remove an item from the browser's local storage by key\r\n *\r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public removeItem(key: string): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[REMOVE ITEM] ${key}`);\r\n localStorage.removeItem(key);\r\n } catch (error) {\r\n this.logger.error(`[ERROR REMOVE ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Clear the browser's local storage for this application\r\n *\r\n */\r\n public clear(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n localStorage.clear();\r\n }\r\n\r\n private dateReviver(key: any, value: any): any {\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/.test(value)) {\r\n return new Date(value);\r\n }\r\n return value;\r\n }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OverlayService {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private overlay = inject(Overlay);\r\n private logger = inject(Logger);\r\n\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n public open<T>(component: ComponentType<T>): void {\r\n if (this.overlayRef) return;\r\n\r\n this.overlayRef = this.overlay.create({\r\n hasBackdrop: true,\r\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n });\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[Overlay] attach', this.overlayRef);\r\n\r\n const portal: ComponentPortal<T> = new ComponentPortal(component);\r\n this.overlayRef.attach(portal);\r\n }\r\n\r\n public close(): void {\r\n if (!this.overlayRef) return;\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[Overlay] detach', this.overlayRef);\r\n this.overlayRef.detach();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { NavigationEnd, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable, take } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RouterService {\r\n private router = inject(Router);\r\n private platformId = inject(PLATFORM_ID);\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) {\r\n asyncLoadCount++;\r\n }\r\n if (event instanceof RouteConfigLoadEnd) {\r\n asyncLoadCount--;\r\n }\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","import { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldConfig, ScaffoldLibraryConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ScaffoldService {\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private logger = inject(Logger);\r\n\r\n // Scaffold Config\r\n private _scaffoldConfig$: BehaviorSubject<ScaffoldConfig> = new BehaviorSubject<ScaffoldConfig>(\r\n {},\r\n );\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<\r\n ComponentPortal<unknown> | TemplatePortal<unknown> | null\r\n >(null);\r\n\r\n public get drawerPortal$(): Observable<\r\n ComponentPortal<unknown> | TemplatePortal<unknown> | null\r\n > {\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>(\r\n property: K,\r\n value: Partial<ScaffoldConfig[K]> | ScaffoldConfig[K],\r\n ): 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)\r\n this.logger.log(`[UNCHANGED] ScaffoldConfig.${property}`, newValue);\r\n return;\r\n }\r\n\r\n if (this.libraryConfig?.debugging)\r\n this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, newValue);\r\n this._scaffoldConfig$.next({ ...currentState, [property]: newValue });\r\n }\r\n}\r\n","import { 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 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 * Pass a configuration to set meta tags such as title, description and image for search results and social media\r\n *\r\n * @param seoConfig config that contains all the meta information\r\n *\r\n */\r\n public setMetaTags(seoConfig: SeoConfig): void {\r\n this._config$.next(seoConfig);\r\n\r\n const autoTrim: boolean = seoConfig.autoTrim || false;\r\n const title: string = seoConfig.metaPageTitle || '';\r\n const description: string = seoConfig.metaPageDescription || '';\r\n const imagePath: string = seoConfig.metaImagePath || '';\r\n const imagePathIsAbsolute: boolean = seoConfig.metaImagePathIsAbsolute || false;\r\n const titleLimit: number = 60;\r\n const descriptionLimit: number = 160;\r\n\r\n // Set meta title\r\n if (title) {\r\n if (autoTrim && title.length > titleLimit) {\r\n this.logger.error(\r\n `[SeoService] The set meta title is too long. Recommended length is ${titleLimit}. The title will be trimmed.`,\r\n );\r\n }\r\n const titleTrim: string =\r\n 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(\r\n `[SeoService] The set meta description is too long. Recommended length is ${descriptionLimit}. The description will be trimmed.`,\r\n );\r\n }\r\n const descriptionTrim: string =\r\n description.length > descriptionLimit\r\n ? description.substring(0, descriptionLimit - 3) + '...'\r\n : description;\r\n this._setMetaDescription(autoTrim ? descriptionTrim : description);\r\n }\r\n\r\n // Set meta image\r\n const host: string = this.document.location.origin;\r\n if (imagePath) {\r\n this._setMetaImage(imagePathIsAbsolute ? imagePath : `${host}/${imagePath}`);\r\n }\r\n }\r\n\r\n // Set all meta titles\r\n private _setMetaTitle(title: string): void {\r\n this.metaTitle.setTitle(title);\r\n this.metaTags.updateTag({ property: 'og:title', content: title });\r\n this.metaTags.updateTag({ name: 'twitter:title', content: title });\r\n }\r\n\r\n // Set all meta descriptions\r\n private _setMetaDescription(description: string): void {\r\n this.metaTags.updateTag({ name: 'description', content: description });\r\n this.metaTags.updateTag({ property: 'og:description', content: description });\r\n this.metaTags.updateTag({ name: 'twitter:description', content: description });\r\n }\r\n\r\n // Set all meta images\r\n private _setMetaImage(image: string): void {\r\n this.metaTags.updateTag({ property: 'og:image', content: image });\r\n this.metaTags.updateTag({ name: 'twitter:image', content: image });\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport {\r\n MatSnackBar,\r\n MatSnackBarConfig,\r\n MatSnackBarHorizontalPosition,\r\n MatSnackBarVerticalPosition,\r\n} 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 private readonly SNACKBAR_DURATION: number = 5000;\r\n private readonly SNACKBAR_POSITION_HORIZONTAL: MatSnackBarHorizontalPosition = 'center';\r\n private readonly SNACKBAR_POSITION_VERTICAL: MatSnackBarVerticalPosition = 'bottom';\r\n\r\n private readonly actionConfig: MatSnackBarConfig = {\r\n duration: this.SNACKBAR_DURATION,\r\n horizontalPosition: this.SNACKBAR_POSITION_HORIZONTAL,\r\n verticalPosition: this.SNACKBAR_POSITION_VERTICAL,\r\n };\r\n\r\n private readonly defaultConfig: MatSnackBarConfig = {\r\n duration: this.SNACKBAR_DURATION / 2,\r\n horizontalPosition: this.SNACKBAR_POSITION_HORIZONTAL,\r\n verticalPosition: this.SNACKBAR_POSITION_VERTICAL,\r\n };\r\n\r\n // Opens a generic snackbar with a message\r\n public openSnackbar(message: string, closeLabel?: string, config?: MatSnackBarConfig): void {\r\n this.snackbar.open(message, closeLabel, config ? config : this.defaultConfig);\r\n }\r\n\r\n // Opens a snackbar with an action to wait for\r\n public openSnackbarWithAction(\r\n message: string,\r\n action: string,\r\n config?: MatSnackBarConfig,\r\n ): 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","import { 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 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 { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { DOCUMENT, Injectable, PLATFORM_ID, Signal, inject, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable, filter, firstValueFrom } from 'rxjs';\nimport { TransMap, TranslationConfig } from '../models';\nimport { CONFIG } from '../scaffold.config';\nimport { LocalStorageService } from './local-storage.service';\nimport { Logger } from './logger.service';\n\nconst DEFAULT_CONFIG: Required<Omit<TranslationConfig, 'locales' | 'fallbackLocale'>> = {\n path: 'assets/i18n/',\n persist: true,\n};\n\n/**\n * Runtime translation service that switches between per-locale JSON files.\n *\n * Configure it through `provideScaffold({ language: { ... } })`. Each app keeps\n * its own strongly-typed `TransMap` interface and reads the labels via\n * {@link TranslationService.transMapAs}.\n */\n@Injectable({ providedIn: 'root' })\nexport class TranslationService {\n private readonly http = inject(HttpClient);\n private readonly document = inject<Document>(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly storage = inject(LocalStorageService);\n private readonly logger = inject(Logger);\n private readonly config = this.resolveConfig(inject(CONFIG, { optional: true })?.language);\n\n private readonly STORAGE_KEY = 'LANGUAGE';\n\n /** In-memory cache of raw (un-merged) locale files, keyed by locale. */\n private readonly cache = new Map<string, TransMap>();\n\n /** Distinct empty seed so `transMap$` can suppress the pre-load emission. */\n private readonly EMPTY: TransMap = {};\n\n private readonly _locale = signal<string>(this.config.fallbackLocale);\n private readonly _transMap = signal<TransMap>(this.EMPTY);\n private readonly _loading = signal<boolean>(false);\n\n /** The active locale, e.g. `'de'`. */\n public readonly locale = this._locale.asReadonly();\n /** Labels for the active locale (with fallback keys merged in). */\n public readonly transMap = this._transMap.asReadonly();\n /** `true` while a locale file is being fetched. */\n public readonly loading = this._loading.asReadonly();\n /** All configured locales — drives a language picker. */\n public readonly locales: readonly string[] = this.config.locales;\n\n /** Observable interop for `| async` templates and rxjs consumers. */\n public readonly locale$: Observable<string> = toObservable(this._locale);\n // Suppress the empty seed so subscribers only see loaded translations —\n // consumers that guard on a falsy `transMap` (null/undefined) keep working.\n public readonly transMap$: Observable<TransMap> = toObservable(this._transMap).pipe(\n filter((transMap: TransMap) => transMap !== this.EMPTY),\n );\n public readonly loading$: Observable<boolean> = toObservable(this._loading);\n\n constructor() {\n this.init();\n }\n\n /**\n * Typed signal accessor: reads the active labels as the app's own `TransMap`\n * shape, preserving compile-time key checking. Emits `{}` until the first load.\n */\n public transMapAs<T>(): Signal<T> {\n return this._transMap as unknown as Signal<T>;\n }\n\n /**\n * Typed observable accessor: like {@link transMapAs} but as a stream that only\n * emits once translations are loaded (never the empty seed) — matching a\n * `null`/`undefined`-until-loaded consumption pattern.\n */\n public transMapStream<T>(): Observable<T> {\n return this.transMap$ as unknown as Observable<T>;\n }\n\n /**\n * Switch the active locale. Unknown locales fall back to `fallbackLocale`.\n * Persistence is governed by the `persist` config option.\n *\n * @param locale target locale (must be one of the configured `locales`)\n */\n public async setLocale(locale: string): Promise<void> {\n await this.applyLocale(locale, this.config.persist);\n }\n\n private async applyLocale(locale: string, persist: boolean): Promise<void> {\n const target: string = this.config.locales.includes(locale)\n ? locale\n : this.config.fallbackLocale;\n\n this._locale.set(target);\n this.setHtmlLangAttribute(target);\n\n if (persist) {\n this.storage.setItem(this.STORAGE_KEY, target);\n }\n\n await this.loadTranslations(target);\n }\n\n private init(): void {\n // No locales configured — stay inert (no stray request to `<fallback>.json`).\n if (!this.config.locales.length) {\n return;\n }\n\n const stored: string | null = this.config.persist\n ? this.storage.getItem<string>(this.STORAGE_KEY)\n : null;\n const initial: string =\n stored && this.config.locales.includes(stored) ? stored : this.detectLocale();\n // Already persisted (or intentionally not) — don't rewrite storage on startup.\n this.applyLocale(initial, false);\n }\n\n private detectLocale(): string {\n if (!isPlatformBrowser(this.platformId)) {\n return this.config.fallbackLocale;\n }\n\n const browserLocale: string = navigator.language.slice(0, 2);\n return this.config.locales.includes(browserLocale) ? browserLocale : this.config.fallbackLocale;\n }\n\n private async loadTranslations(locale: string): Promise<void> {\n this._loading.set(true);\n\n try {\n const active: TransMap = await this.fetchLocale(locale);\n\n let merged: TransMap = active;\n if (locale !== this.config.fallbackLocale) {\n try {\n const fallback: TransMap = await this.fetchLocale(this.config.fallbackLocale);\n merged = deepMerge(fallback, active);\n } catch (error) {\n // Fallback file unavailable — keep the loaded active locale rather than\n // discarding it and rendering blank.\n this.logger.warn(\n `[TRANSLATION] Fallback locale '${this.config.fallbackLocale}' failed to load`,\n error,\n );\n }\n }\n\n // Ignore stale responses if the locale changed while loading.\n if (this._locale() === locale) {\n this._transMap.set(merged);\n }\n } catch (error) {\n this.logger.error(`[TRANSLATION] Failed to load locale '${locale}'`, error);\n } finally {\n this._loading.set(false);\n }\n }\n\n private async fetchLocale(locale: string): Promise<TransMap> {\n const cached: TransMap | undefined = this.cache.get(locale);\n if (cached) {\n return cached;\n }\n\n const data: TransMap = await firstValueFrom(\n this.http.get<TransMap>(`${this.config.path}${locale}.json`),\n );\n this.cache.set(locale, data);\n return data;\n }\n\n private setHtmlLangAttribute(locale: string): void {\n this.document?.documentElement?.setAttribute('lang', locale);\n }\n\n private resolveConfig(config?: TranslationConfig): Required<TranslationConfig> {\n const path: string = config?.path ?? DEFAULT_CONFIG.path;\n return {\n locales: config?.locales ?? [],\n fallbackLocale: config?.fallbackLocale ?? config?.locales?.[0] ?? 'en',\n path: path.endsWith('/') ? path : `${path}/`,\n persist: config?.persist ?? DEFAULT_CONFIG.persist,\n };\n }\n}\n\n/** Deep-merges `override` onto `base`, returning a new object (pure). */\nfunction deepMerge(base: TransMap, override: TransMap): TransMap {\n const result: TransMap = { ...base };\n\n for (const key of Object.keys(override)) {\n const overrideValue: string | TransMap = override[key];\n const baseValue: string | TransMap | undefined = result[key];\n\n result[key] =\n isTransMap(baseValue) && isTransMap(overrideValue)\n ? deepMerge(baseValue, overrideValue)\n : overrideValue;\n }\n\n return result;\n}\n\n// Only plain objects are merged recursively; arrays (and other leaf values) are\n// replaced wholesale by the override locale so array shapes are never corrupted.\nfunction isTransMap(value: unknown): value is TransMap {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BottomBarConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-bottom-bar',\r\n templateUrl: './bottom-bar.component.html',\r\n styleUrls: ['./bottom-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatButtonModule, MatIconModule, MatToolbarModule, MatTooltipModule, NgClass],\r\n})\r\nexport class BottomBarComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly bottomBarConfig = input<BottomBarConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly navbarEnabled = input<boolean>(false);\r\n\r\n public readonly bottomBarCloseClickEvent = output<string>();\r\n public readonly bottomBarButtonClickEvent = output<string>();\r\n\r\n 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","@if (bottomBarConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-toolbar\r\n animate.enter=\"lf-anim-slide-up-enter\"\r\n animate.leave=\"lf-anim-slide-up-leave\"\r\n class=\"lf-bottom-bar lf-transitions px-4\"\r\n color=\"accent\"\r\n [ngClass]=\"config.cssClass\"\r\n [class.lf-bottom-bar-show-navbar]=\"!isMobile() && navbarEnabled()\"\r\n [class.lf-bottom-bar-show-navbar-mobile]=\"isMobile() && navbarEnabled()\">\r\n @if (config.closeButtonId) {\r\n <button mat-icon-button (click)=\"closeClicked(config.closeButtonId)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (config.message) {\r\n <span class=\"ml-2\">{{ config.message }}</span>\r\n }\r\n @if (config.buttons) {\r\n <div class=\"lf-bottom-bar-buttons ml-4\">\r\n @for (button of config.buttons; track button.id) {\r\n <!-- label button -->\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-bottom-bar-button ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ button.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else {\r\n <button\r\n mat-icon-button\r\n color=\"accent\"\r\n class=\"lf-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </mat-toolbar>\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ContentTitleCardConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-content-title-card',\r\n templateUrl: './content-title-card.component.html',\r\n styleUrls: ['./content-title-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatCardModule, MatButtonModule, MatIconModule, NgClass],\r\n})\r\nexport class ContentTitleCardComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly contentTitleCardConfig = input<ContentTitleCardConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly routeHistory = input<string[]>([]);\r\n\r\n public readonly backButtonClickEvent = output<void>();\r\n\r\n public backButtonClicked(): void {\r\n this.backButtonClickEvent.emit();\r\n }\r\n}\r\n","@if (contentTitleCardConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-card\r\n class=\"lf-content-title-card mat-elevation-z2\"\r\n [class.lf-content-title-card-mobile]=\"isMobile()\"\r\n [class.px-4]=\"!isMobile()\"\r\n [class.px-2]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\">\r\n <!-- back button -->\r\n @if (config.showBackButton && routeHistory().length > 0) {\r\n <button mat-icon-button color=\"accent\" (click)=\"backButtonClicked()\">\r\n <mat-icon>arrow_back_ios</mat-icon>\r\n </button>\r\n }\r\n <!-- spacer -->\r\n <div class=\"flex-auto\"></div>\r\n <!-- label -->\r\n <span class=\"lf-content-title-card-label\">\r\n {{ config.label || '' }}\r\n </span>\r\n <!-- spacer -->\r\n <div class=\"flex-auto\"></div>\r\n <!-- empty button spacer -->\r\n <div\r\n [style.width]=\"config.showBackButton && routeHistory().length > 1 ? '48px' : '0px'\"></div>\r\n </mat-card>\r\n }\r\n}\r\n","import { ComponentPortal, PortalModule, TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { DrawerConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-drawer',\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [PortalModule, MatSidenavModule, NgClass, NgTemplateOutlet],\r\n host: {\r\n '(document:touchstart)': 'onTouchStart($event)',\r\n '(document:touchend)': 'onTouchEnd($event)',\r\n },\r\n})\r\nexport class DrawerComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly drawerConfig = input<DrawerConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly headerEnabled = input<boolean>(false);\r\n public readonly drawerPortal = input<ComponentPortal<unknown> | TemplatePortal<unknown> | null>();\r\n\r\n public readonly drawerConfigUpdateEvent = output<Partial<DrawerConfig>>();\r\n\r\n private readonly initialized = signal<boolean>(false);\r\n\r\n private touchStartX = 0;\r\n private readonly TOUCH_ZONE_WIDTH_PX: number = 40;\r\n private readonly SWIPE_THRESHOLD_PX: number = 30;\r\n\r\n constructor() {\r\n effect(() => {\r\n const drawerConfig: DrawerConfig | null = this.drawerConfig();\r\n if (!drawerConfig || this.initialized()) return;\r\n\r\n this.initialized.set(true);\r\n\r\n if (this.isMobile() && drawerConfig.enable && drawerConfig.open) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n }\r\n });\r\n }\r\n\r\n // Detect when the drawer is closed without clicking a button\r\n public drawerClosed(): void {\r\n if (this.drawerConfig()) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n }\r\n }\r\n\r\n // Track touches starting within the left-edge swipe zone\r\n public onTouchStart(event: TouchEvent): void {\r\n const x = event.touches[0].clientX;\r\n this.touchStartX = x <= this.TOUCH_ZONE_WIDTH_PX ? x : -1;\r\n }\r\n\r\n // Open drawer on rightward swipe originating from the left edge\r\n public onTouchEnd(event: TouchEvent): void {\r\n if (this.touchStartX < 0) return;\r\n const deltaX: number = event.changedTouches[0].clientX - this.touchStartX;\r\n if (\r\n deltaX >= this.SWIPE_THRESHOLD_PX &&\r\n this.isMobile() &&\r\n this.drawerConfig()?.enable &&\r\n !this.drawerConfig()?.open\r\n ) {\r\n this.drawerConfigUpdateEvent.emit({ open: true });\r\n }\r\n }\r\n}\r\n","@if (drawerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-sidenav-container class=\"lf-drawer-container lf-transitions\" [ngClass]=\"config.cssClass\">\r\n <!-- drawer -->\r\n <mat-sidenav\r\n #drawer\r\n class=\"lf-drawer mat-elevation-z2\"\r\n [class.mobile]=\"isMobile()\"\r\n [mode]=\"isMobile() ? 'over' : 'side'\"\r\n [opened]=\"config.open\"\r\n [autoFocus]=\"false\"\r\n [fixedInViewport]=\"config.fixed\"\r\n [class.lf-drawer-show-header]=\"headerEnabled() && config.fixed\"\r\n (closed)=\"drawerClosed()\">\r\n <!-- drawer content -->\r\n <!-- <ng-content select=\"[drawerContent]\"></ng-content> -->\r\n @if (drawerPortal()) {\r\n <ng-template [cdkPortalOutlet]=\"drawerPortal()\"></ng-template>\r\n } @else {\r\n <ng-content select=\"[drawerContent]\"></ng-content>\r\n }\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"overflow-unset\">\r\n <!-- main content -->\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n }\r\n} @else {\r\n <!-- render content without drawer -->\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n}\r\n\r\n<!-- this template is required to allow multiple <ng-content></ng-content> -->\r\n<ng-template #content><ng-content></ng-content></ng-template>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FloatingButtonConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-floating-button',\r\n templateUrl: './floating-button.component.html',\r\n styleUrls: ['./floating-button.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatButtonModule, MatIconModule, MatTooltipModule, NgClass],\r\n})\r\nexport class FloatingButtonComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly floatingButtonConfig = input<FloatingButtonConfig | null>(null);\r\n public readonly onTop = input<boolean>(false);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly drawerEnabled = input<boolean>(false);\r\n public readonly navbarEnabled = input<boolean>(false);\r\n public readonly bottomBarEnabled = input<boolean>(false);\r\n\r\n public readonly floatingButtonConfigUpdateEvent = output<Partial<FloatingButtonConfig>>();\r\n public readonly floatingButtonClickEvent = output<string>();\r\n\r\n private readonly initialized = signal<boolean>(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n const floatingButtonConfig: FloatingButtonConfig | null = this.floatingButtonConfig();\r\n if (!floatingButtonConfig || this.initialized()) return;\r\n\r\n this.initialized.set(true);\r\n\r\n const updatedFloatingButtonConfigConfig: Partial<FloatingButtonConfig> = {\r\n matIcon:\r\n !floatingButtonConfig.matIcon && !floatingButtonConfig.svgIcon\r\n ? 'arrow_upward'\r\n : floatingButtonConfig.matIcon || floatingButtonConfig.svgIcon,\r\n horizontalPosition: floatingButtonConfig.horizontalPosition ?? 'right',\r\n };\r\n\r\n if (\r\n JSON.stringify(updatedFloatingButtonConfigConfig) !== JSON.stringify(floatingButtonConfig)\r\n ) {\r\n this.floatingButtonConfigUpdateEvent.emit(updatedFloatingButtonConfigConfig);\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","@if (floatingButtonConfig(); as config) {\r\n @if (config.enable && (!config.autoHide || !onTop())) {\r\n <button\r\n mat-fab\r\n color=\"accent\"\r\n class=\"lf-floating-button lf-transitions\"\r\n [ngClass]=\"config.cssClass + ' ' + config.horizontalPosition\"\r\n [class.sticky]=\"config.sticky\"\r\n [class.show-navbar]=\"isMobile() && navbarEnabled() && !bottomBarEnabled()\"\r\n [class.show-bottom-bar]=\"bottomBarEnabled() && !(isMobile() && navbarEnabled())\"\r\n [class.show-navbar-and-bottom-bar]=\"isMobile() && navbarEnabled() && bottomBarEnabled()\"\r\n [class.show-drawer]=\"!isMobile() && drawerEnabled()\"\r\n [extended]=\"!!config.label\"\r\n [disabled]=\"config.disabled\"\r\n (click)=\"buttonClicked(config.id)\"\r\n [matTooltip]=\"config.tooltip!\">\r\n <!-- icon -->\r\n @if (config.matIcon) {\r\n <mat-icon>\r\n {{ config.matIcon }}\r\n </mat-icon>\r\n } @else if (config.svgIcon) {\r\n <mat-icon [svgIcon]=\"config.svgIcon\"></mat-icon>\r\n }\r\n <!-- svg icon -->\r\n <!-- label -->\r\n @if (config.label) {\r\n <span class=\"lf-floating-button-label\">\r\n {{ config.label }}\r\n </span>\r\n }\r\n </button>\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FooterConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [RouterModule, MatCardModule, MatIconModule, NgClass],\r\n})\r\nexport class FooterComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly footerConfig = input<FooterConfig | null>(null);\r\n}\r\n","@if (footerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-card class=\"lf-footer lf-transitions mat-elevation-z2 p-4\" [ngClass]=\"config.cssClass\">\r\n <!-- svg logo -->\r\n @if (config.svgLogo) {\r\n <mat-icon\r\n class=\"lf-footer-logo mb-4\"\r\n color=\"primary\"\r\n [svgIcon]=\"config.svgLogo!\"></mat-icon>\r\n } @else {\r\n @if (config.imgLogo) {\r\n <img class=\"lf-footer-logo mb-4\" [src]=\"config.imgLogo\" alt=\"Logo\" />\r\n }\r\n }\r\n <!-- img logo -->\r\n <!-- links -->\r\n @if (config.links) {\r\n <div class=\"lf-footer-links mb-4\">\r\n @for (link of config.links; track $index; let i = $index) {\r\n <div class=\"lf-footer-link\" [class.mr-2]=\"i < config.links!.length - 1\">\r\n @if (link.routerLink) {\r\n <a [routerLink]=\"[link.routerLink]\">{{ link.label || '' }}</a>\r\n } @else {\r\n <a [href]=\"link.href\" [target]=\"link.externalTab ? '_blank' : null\">\r\n {{ link.label }}\r\n </a>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n <!-- copyright -->\r\n @if (config.copyright) {\r\n <span class=\"lf-footer-copyright\">\r\n {{ config.copyright }}\r\n </span>\r\n }\r\n </mat-card>\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { HeaderInputConfig } from '../../../models';\r\n\r\n@Component({\r\n selector: 'lf-input',\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [FormsModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule],\r\n})\r\nexport class InputComponent {\r\n private dialogRef = inject<MatDialogRef<InputComponent>>(MatDialogRef, { optional: true });\r\n private inputConfigDialog = inject<HeaderInputConfig>(MAT_DIALOG_DATA, { optional: true });\r\n private destroyRef = inject(DestroyRef);\r\n\r\n public readonly input = viewChild<ElementRef>('input');\r\n\r\n public readonly inputConfig = input<HeaderInputConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n\r\n public readonly inputSubmitEvent = output<string>();\r\n public readonly inputChangeEvent = output<string>();\r\n public readonly inputPrefixActionEvent = output<void>();\r\n\r\n public inputConfigComputed = computed<HeaderInputConfig>(\r\n () => this.inputConfigDialog ?? this.inputConfig() ?? {},\r\n );\r\n\r\n public inputValue = model<string>('');\r\n\r\n constructor() {\r\n effect(() => {\r\n const input: ElementRef | undefined = this.input();\r\n if (input && this.inputConfigComputed().autoFocus) {\r\n input.nativeElement.focus();\r\n }\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.inputValue.set('');\r\n });\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n if (!this.destroyRef.destroyed) {\r\n this.inputSubmitEvent.emit(value);\r\n }\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 if (!this.destroyRef.destroyed) {\r\n this.inputChangeEvent.emit(value);\r\n }\r\n }\r\n\r\n public inputPrefixAction(): void {\r\n if (!this.destroyRef.destroyed) {\r\n this.inputPrefixActionEvent.emit();\r\n }\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n public clearInput(): void {\r\n this.inputValue.set('');\r\n\r\n if (!this.destroyRef.destroyed) {\r\n this.inputChangeEvent.emit(this.inputValue());\r\n }\r\n }\r\n}\r\n","@if (inputConfigComputed(); as config) {\r\n @if (config) {\r\n <mat-form-field class=\"lf-input\" appearance=\"fill\" [class.lf-hide-hint]=\"!config.hint\">\r\n <mat-label>{{ config.label || 'Search' }}</mat-label>\r\n @if (config.hint) {\r\n <mat-hint>{{ config.hint }}</mat-hint>\r\n }\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n [disabled]=\"config.disabled!\"\r\n (keyup.enter)=\"inputSubmitted(inputValue())\"\r\n (ngModelChange)=\"inputChanged($event)\"\r\n #input />\r\n @if (isMobile()) {\r\n <button mat-icon-button matPrefix color=\"accent\" (click)=\"inputPrefixAction()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n @if (inputValue()) {\r\n <button class=\"lf-input-close-button\" mat-icon-button matSuffix (click)=\"clearInput()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (config.matIconSubmit) {\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n color=\"accent\"\r\n type=\"submit\"\r\n (click)=\"inputSubmitted(inputValue())\">\r\n <mat-icon>\r\n {{ config.matIconSubmit }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n}\r\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { RouterModule } from '@angular/router';\r\nimport { HeaderConfig, MenuButton, ScaffoldLibraryConfig } from '../../models';\r\nimport { InputComponent } from '../../shared/components/input/input.component';\r\n\r\n@Component({\r\n selector: 'lf-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n RouterModule,\r\n MatToolbarModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n NgClass,\r\n NgTemplateOutlet,\r\n InputComponent,\r\n ],\r\n})\r\nexport class HeaderComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly headerConfig = input<HeaderConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly routeLoading = input<boolean>(false);\r\n public readonly currentRoute = input<string>();\r\n\r\n public readonly headerConfigUpdateEvent = output<Partial<HeaderConfig>>();\r\n public readonly headerButtonClickEvent = output<string>();\r\n public readonly headerInputSubmitEvent = output<string>();\r\n public readonly headerInputChangeEvent = output<string>();\r\n\r\n public isActive = computed(() => {\r\n const currentRoute = this.currentRoute();\r\n const route: string = currentRoute?.substring(currentRoute.indexOf('/') + 1) || '';\r\n return (id: string): boolean => !!route && !!id && route === id;\r\n });\r\n\r\n public rightMobileButton = computed<MenuButton | null>(() => {\r\n const headerConfig = this.headerConfig();\r\n const rightMenuButtons = headerConfig?.rightMenuButtons ?? [];\r\n\r\n if (!rightMenuButtons.length) return null;\r\n\r\n const config = headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n const includedButtons = rightMenuButtons.filter(\r\n (button) => !config.excludeButtonIds?.includes(button.id),\r\n );\r\n\r\n return {\r\n id: '',\r\n matIcon: !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 rightExcludedButtons = computed<MenuButton[] | null>(() => {\r\n const headerConfig = this.headerConfig();\r\n const rightMenuButtons = headerConfig?.rightMenuButtons ?? [];\r\n\r\n if (!rightMenuButtons.length) return null;\r\n\r\n const config = headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n return rightMenuButtons.filter((button) => config.excludeButtonIds?.includes(button.id));\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","@if (headerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-toolbar\r\n class=\"lf-header lf-transitions mat-elevation-z3\"\r\n [class.px-4]=\"!isMobile()\"\r\n [class.px-1]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\"\r\n [class.lf-gradient]=\"config.gradient\"\r\n color=\"primary\">\r\n <!-- left menu button -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: config.leftMenuButton!,\r\n hideLabel: true,\r\n }\"></ng-container>\r\n <!-- logo & title -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper ml-1 mr-2\"\r\n [class.ml-10]=\"config.leftMenuButton && !isMobile()\">\r\n <!-- link wrapper -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper-link\"\r\n [class.lf-clickable]=\"config.titleRouterLink\"\r\n [routerLink]=\"config.titleRouterLink ? [config.titleRouterLink] : null\">\r\n <!-- svg logo -->\r\n @if (config.svgLogo) {\r\n <mat-icon\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"config.title\"\r\n [svgIcon]=\"config.svgLogo!\"></mat-icon>\r\n <!-- img logo -->\r\n } @else {\r\n @if (config.imgLogo) {\r\n <img\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"config.title\"\r\n [src]=\"config.imgLogo\"\r\n alt=\"Logo\" />\r\n }\r\n }\r\n <!-- title -->\r\n @if (config.title) {\r\n <div class=\"lf-header-title-wrapper\">\r\n @if (config.title) {\r\n <span class=\"lf-header-title\">\r\n {{ config.title }}\r\n </span>\r\n }\r\n @if (config.subtitle) {\r\n <span class=\"lf-header-subtitle\">\r\n {{ config.subtitle }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- input -->\r\n @if (config.inputConfig?.enable) {\r\n <div class=\"spacer\"></div>\r\n <lf-input\r\n [class.lf-header-input-mobile]=\"isMobile()\"\r\n [class.mx-3]=\"!isMobile()\"\r\n [inputConfig]=\"config.inputConfig!\"\r\n [isMobile]=\"isMobile()\"\r\n (inputSubmitEvent)=\"inputSubmitted($event)\"\r\n (inputChangeEvent)=\"inputChanged($event)\"\r\n (inputPrefixActionEvent)=\"inputClosed()\"></lf-input>\r\n }\r\n <!-- spacer -->\r\n <div class=\"spacer\"></div>\r\n <!-- right menu buttons -->\r\n @if (config.responsiveConfig?.enable && isMobile()) {\r\n @let exludedButtons = rightExcludedButtons();\r\n @for (button of exludedButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n @let mobileButton = rightMobileButton();\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: mobileButton,\r\n }\"></ng-container>\r\n } @else {\r\n @for (button of config.rightMenuButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n }\r\n </mat-toolbar>\r\n <!-- loading bar -->\r\n @if (config.loading || (config.showRouteLoading && routeLoading())) {\r\n <mat-progress-bar\r\n class=\"lf-header-progress-bar\"\r\n color=\"accent\"\r\n mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n }\r\n}\r\n\r\n<!-- header menu button -->\r\n<ng-template #menuButtonTemplate let-menuButton=\"menuButton\" let-hideLabel=\"hideLabel\">\r\n @if (menuButton) {\r\n <!-- label button -->\r\n @if (menuButton.label && !hideLabel) {\r\n <button\r\n mat-button\r\n class=\"lf-header-menu-button\"\r\n [class.lf-header-menu-button-active]=\"isActive()(menuButton.id) && !menuButton.disabled\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n [disabled]=\"menuButton.disabled\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [aria-label]=\"menuButton.label || menuButton.tooltip\"\r\n [matTooltip]=\"menuButton.tooltip\">\r\n <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon>\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ menuButton.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else if (menuButton.matIcon || menuButton.svgIcon) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-header-menu-button\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n [disabled]=\"menuButton.disabled\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [aria-label]=\"menuButton.id || menuButton.tooltip\">\r\n <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon>\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n <!-- img button -->\r\n } @else if (menuButton.imgIcon) {\r\n <img\r\n class=\"lf-header-menu-img\"\r\n [src]=\"menuButton.imgIcon\"\r\n width=\"48\"\r\n height=\"48\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [aria-label]=\"menuButton.id || menuButton.tooltip\" />\r\n }\r\n <!-- menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <!-- label menu buttons -->\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- menu button -->\r\n @if (button.label) {\r\n <button\r\n mat-menu-item\r\n [class.lf-header-menu-button-active]=\"isActive()(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.label\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <span>{{ button.label }}</span>\r\n </button>\r\n }\r\n }\r\n <!-- icon menu buttons -->\r\n <div mat-menu-item class=\"lf-menu-icons px-1\" [disableRipple]=\"true\">\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- icon button -->\r\n @if (!button.label && (button.matIcon || button.svgIcon)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-menu-icon-button\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n tabindex=\"0\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n</ng-template>\r\n","import { ComponentPortal, PortalModule } from '@angular/cdk/portal';\r\nimport { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\nimport { LoadingOverlayConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { CONFIG } from '../../scaffold.config';\r\nimport { ScaffoldService } from '../../services';\r\n\r\n@Component({\r\n selector: 'lf-loading-overlay',\r\n templateUrl: './loading-overlay.component.html',\r\n styleUrls: ['./loading-overlay.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [PortalModule, MatProgressSpinner, NgClass],\r\n})\r\nexport class LoadingOverlayComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n\r\n public loadingOverlayConfig = signal<LoadingOverlayConfig | null>(null);\r\n public portal = signal<ComponentPortal<any> | null>(null);\r\n\r\n constructor() {\r\n this.loadingOverlayConfig.set(\r\n this.scaffoldService.scaffoldConfig?.loadingOverlayConfig || null,\r\n );\r\n\r\n const customComponent: any = this.loadingOverlayConfig()?.customComponent || null;\r\n if (customComponent) {\r\n this.portal.set(new ComponentPortal(customComponent));\r\n }\r\n }\r\n}\r\n","@if (portal(); as portal) {\r\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\r\n} @else {\r\n <div\r\n [ngClass]=\"loadingOverlayConfig()?.cssClass\"\r\n [class.lf-gradient-spinner]=\"loadingOverlayConfig()?.gradient\">\r\n <mat-progress-spinner mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NavbarConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-navbar',\r\n templateUrl: './navbar.component.html',\r\n styleUrls: ['./navbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatIconModule, MatTooltipModule, NgClass],\r\n})\r\nexport class NavbarComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly navbarConfig = input<NavbarConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly currentRoute = input<string>();\r\n\r\n public readonly navbarButtonClickEvent = output<string>();\r\n\r\n public isActive = computed(() => {\r\n const currentRoute = this.currentRoute();\r\n const route: string = currentRoute?.substring(currentRoute.indexOf('/') + 1) || '';\r\n return (id: string): boolean => !!route && !!id && route === id;\r\n });\r\n\r\n 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","@if (navbarConfig(); as config) {\r\n @if (config.enable) {\r\n <div\r\n [animate.enter]=\"isMobile() ? 'lf-anim-slide-up-enter' : 'lf-anim-slide-left-enter'\"\r\n [animate.leave]=\"isMobile() ? 'lf-anim-slide-up-leave' : 'lf-anim-slide-left-leave'\"\r\n class=\"mat-app-background lf-transitions mat-elevation-z3\"\r\n [class.lf-navbar]=\"!isMobile()\"\r\n [class.lf-navbar-mobile]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\">\r\n <!-- items -->\r\n <div [class.lf-navbar-items]=\"!isMobile()\" [class.lf-navbar-mobile-items]=\"isMobile()\">\r\n <!-- item -->\r\n @for (button of config.buttons; track button.id; let i = $index) {\r\n @if (i < 5) {\r\n <div\r\n class=\"lf-navbar-item\"\r\n [class.lf-navbar-item-active]=\"isActive()(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <!-- show a protected space on desktop so the icon doesn't move up and down -->\r\n @if (button?.label) {\r\n <span class=\"lf-navbar-item-label\">\r\n {{\r\n isActive()(button.id) || config.showAllLabels\r\n ? button.label\r\n : isMobile()\r\n ? ''\r\n : ' '\r\n }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n}\r\n","import { Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass } from '@angular/common';\r\nimport {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n DOCUMENT,\r\n effect,\r\n ElementRef,\r\n inject,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { debounceTime, distinctUntilChanged, fromEvent, map, tap } from 'rxjs';\r\nimport {\r\n BottomBarConfig,\r\n ContentTitleCardConfig,\r\n DrawerConfig,\r\n FloatingButtonConfig,\r\n FooterConfig,\r\n HeaderConfig,\r\n NavbarConfig,\r\n ScaffoldConfig,\r\n ScaffoldLibraryConfig,\r\n} from '../../models';\r\nimport { CONFIG } from '../../scaffold.config';\r\nimport {\r\n BreakpointService,\r\n Logger,\r\n OverlayService,\r\n RouterService,\r\n ScaffoldService,\r\n} from '../../services';\r\nimport { BottomBarComponent } from '../bottom-bar/bottom-bar.component';\r\nimport { ContentTitleCardComponent } from '../content-title-card/content-title-card.component';\r\nimport { DrawerComponent } from '../drawer/drawer.component';\r\nimport { FloatingButtonComponent } from '../floating-button/floating-button.component';\r\nimport { FooterComponent } from '../footer/footer.component';\r\nimport { HeaderComponent } from '../header/header.component';\r\nimport { LoadingOverlayComponent } from '../loading-overlay/loading-overlay.component';\r\nimport { NavbarComponent } from '../navbar/navbar.component';\r\n\r\n@Component({\r\n selector: 'lf-scaffold',\r\n templateUrl: './scaffold.component.html',\r\n styleUrls: ['./scaffold.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n NgClass,\r\n HeaderComponent,\r\n NavbarComponent,\r\n DrawerComponent,\r\n FooterComponent,\r\n ContentTitleCardComponent,\r\n FloatingButtonComponent,\r\n BottomBarComponent,\r\n ],\r\n})\r\nexport class ScaffoldComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private scaffoldService = inject(ScaffoldService);\r\n private breakpointService = inject(BreakpointService);\r\n private routerService = inject(RouterService);\r\n private overlayService = inject(OverlayService);\r\n private route = inject(ActivatedRoute);\r\n private document = inject<Document>(DOCUMENT);\r\n private logger = inject(Logger);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n public readonly scrollContainer = viewChild<ElementRef>('scrollContainer');\r\n public readonly content = viewChild<ElementRef>('content');\r\n\r\n public readonly headerButtonClickEvent = output<string>();\r\n public readonly headerInputSubmitEvent = output<string>();\r\n public readonly headerInputChangeEvent = output<string>();\r\n public readonly navbarButtonClickEvent = output<string>();\r\n public readonly floatingButtonClickEvent = output<string>();\r\n public readonly bottomBarButtonClickEvent = output<string>();\r\n\r\n public scaffoldConfig = toSignal<ScaffoldConfig | null>(this.scaffoldService.scaffoldConfig$, {\r\n initialValue: null,\r\n });\r\n public headerConfig = computed<HeaderConfig | null>(\r\n () => this.scaffoldConfig()?.headerConfig || null,\r\n );\r\n public navbarConfig = computed<NavbarConfig | null>(\r\n () => this.scaffoldConfig()?.navbarConfig || null,\r\n );\r\n public drawerConfig = computed<DrawerConfig | null>(\r\n () => this.scaffoldConfig()?.drawerConfig || null,\r\n );\r\n public drawerPortal = toSignal<ComponentPortal<unknown> | TemplatePortal<unknown> | null>(\r\n this.scaffoldService.drawerPortal$,\r\n );\r\n public footerConfig = computed<FooterConfig | null>(\r\n () => this.scaffoldConfig()?.footerConfig || null,\r\n );\r\n public contentTitleCardConfig = computed<ContentTitleCardConfig | null>(\r\n () => this.scaffoldConfig()?.contentTitleCardConfig || null,\r\n );\r\n public floatingButtonConfig = computed<FloatingButtonConfig | null>(\r\n () => this.scaffoldConfig()?.floatingButtonConfig || null,\r\n );\r\n public bottomBarConfig = computed<BottomBarConfig | null>(\r\n () => this.scaffoldConfig()?.bottomBarConfig || null,\r\n );\r\n\r\n public routeHistory = toSignal<string[]>(\r\n this.routerService.routeHistory$.pipe(\r\n tap((routeHistory: string[]) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteHistory]', routeHistory);\r\n const scrollContainer: ElementRef | undefined = this.scrollContainer();\r\n if (scrollContainer && this.scaffoldConfig()?.scrollPositionRestoration) {\r\n scrollContainer.nativeElement.scrollTop = 0;\r\n }\r\n }),\r\n ),\r\n );\r\n public currentRoute = toSignal<string>(this.routerService.currentRoute$);\r\n public routeLoading = toSignal<boolean>(this.routerService.loading$);\r\n public isMobile = toSignal<boolean>(\r\n this.breakpointService.breakpoint$.pipe(\r\n map((breakpointState: BreakpointState) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[BreakpointState]', breakpointState);\r\n return (\r\n breakpointState.breakpoints[Breakpoints.XSmall] ||\r\n breakpointState.breakpoints[Breakpoints.Small]\r\n );\r\n }),\r\n ),\r\n );\r\n\r\n public scrollTopPosition = signal<number>(0);\r\n public initialized = signal<boolean>(false);\r\n\r\n private fragmentAnimationFrameId: number | null = null;\r\n private readonly FRAGMENT_SCROLL_MAX_ATTEMPTS: number = 180;\r\n\r\n constructor() {\r\n effect(() => {\r\n const scaffoldConfig: ScaffoldConfig | null = this.scaffoldConfig();\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[ScaffoldConfig]', scaffoldConfig);\r\n if (!scaffoldConfig) return;\r\n\r\n this.toggleLoadingOverlay(scaffoldConfig.loading || false);\r\n });\r\n\r\n effect((onCleanup) => {\r\n const scrollContainer: ElementRef | undefined = this.scrollContainer();\r\n if (!scrollContainer) return;\r\n\r\n const element: HTMLElement = scrollContainer.nativeElement;\r\n const subscription = fromEvent(element, 'scroll')\r\n .pipe(distinctUntilChanged(), debounceTime(100))\r\n .subscribe((e: Event) => {\r\n const target: HTMLElement = e.target as HTMLElement;\r\n this.scrollTopPosition.set(target.scrollTop);\r\n });\r\n\r\n onCleanup(() => {\r\n subscription.unsubscribe();\r\n });\r\n });\r\n\r\n this.route.fragment.pipe(takeUntilDestroyed()).subscribe((fragment: string | null) => {\r\n if (!this.scaffoldConfig()?.anchorScrolling || !fragment) return;\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteFragment]', fragment);\r\n\r\n this.scrollToFragmentWhenReady(fragment);\r\n });\r\n\r\n afterNextRender(() => {\r\n this.initialized.set(true);\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.cancelFragmentScroll();\r\n });\r\n }\r\n\r\n // Header\r\n public headerConfigUpdated(headerConfig: Partial<HeaderConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('headerConfig', headerConfig);\r\n }\r\n\r\n public headerButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public headerInputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public headerInputChanged(value: string): void {\r\n this.scaffoldService.headerInputChangeValue = value;\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n // Navbar\r\n public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Drawer\r\n public drawerConfigUpdated(drawerConfig: Partial<DrawerConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('drawerConfig', drawerConfig);\r\n }\r\n\r\n // Content title card\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n // Floating button\r\n public floatingButtonConfigUpdated(floatingButtonConfig: Partial<FloatingButtonConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('floatingButtonConfig', floatingButtonConfig);\r\n }\r\n\r\n public floatingButtonClicked(id: string): void {\r\n const scrollContainer = this.scrollContainer();\r\n if (!id && scrollContainer) {\r\n scrollContainer.nativeElement.scrollTop = 0;\r\n } else {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.floatingButtonClickEvent.emit(id);\r\n }\r\n }\r\n\r\n // Bottom bar\r\n public bottomBarCloseClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n public bottomBarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Loading overlay\r\n private async toggleLoadingOverlay(loading: boolean): Promise<void> {\r\n if (loading) {\r\n this.overlayService.open(LoadingOverlayComponent);\r\n } else {\r\n this.overlayService.close();\r\n }\r\n }\r\n\r\n // Anchor scrolling\r\n private scrollToFragmentWhenReady(fragment: string): void {\r\n this.cancelFragmentScroll();\r\n\r\n const defaultView: Window | null = this.document.defaultView;\r\n if (!defaultView) return;\r\n\r\n let attempts: number = 0;\r\n\r\n const tryScroll = (): void => {\r\n if (this.tryScrollToFragment(fragment)) {\r\n this.fragmentAnimationFrameId = null;\r\n return;\r\n }\r\n\r\n attempts += 1;\r\n if (attempts >= this.FRAGMENT_SCROLL_MAX_ATTEMPTS) {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteFragmentNotFound]', fragment);\r\n this.fragmentAnimationFrameId = null;\r\n return;\r\n }\r\n\r\n this.fragmentAnimationFrameId = defaultView.requestAnimationFrame(tryScroll);\r\n };\r\n\r\n this.fragmentAnimationFrameId = defaultView.requestAnimationFrame(tryScroll);\r\n }\r\n\r\n // Tries to scroll to the element with the given fragment as id. Returns true if successful, false otherwise.\r\n private tryScrollToFragment(fragment: string): boolean {\r\n const element: HTMLElement | null = this.document.getElementById(fragment);\r\n if (!element) return false;\r\n\r\n element.scrollIntoView({ behavior: 'auto', block: 'start', inline: 'nearest' });\r\n return true;\r\n }\r\n\r\n private cancelFragmentScroll(): void {\r\n const defaultView: Window | null = this.document.defaultView;\r\n if (!defaultView || this.fragmentAnimationFrameId === null) return;\r\n\r\n defaultView.cancelAnimationFrame(this.fragmentAnimationFrameId);\r\n this.fragmentAnimationFrameId = null;\r\n }\r\n}\r\n","<div\r\n class=\"lf-scaffold lf-transitions mat-app-background mat-typography\"\r\n [ngClass]=\"scaffoldConfig()?.cssClass\">\r\n <!-- header -->\r\n <lf-header\r\n [libraryConfig]=\"libraryConfig\"\r\n [headerConfig]=\"headerConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [routeLoading]=\"routeLoading()!\"\r\n [currentRoute]=\"currentRoute()\"\r\n (headerConfigUpdateEvent)=\"headerConfigUpdated($event)\"\r\n (headerButtonClickEvent)=\"headerButtonClicked($event)\"\r\n (headerInputSubmitEvent)=\"headerInputSubmitted($event)\"\r\n (headerInputChangeEvent)=\"headerInputChanged($event)\"></lf-header>\r\n <!-- navbar -->\r\n <lf-navbar\r\n [libraryConfig]=\"libraryConfig\"\r\n [navbarConfig]=\"navbarConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [currentRoute]=\"currentRoute()\"\r\n (navbarButtonClickEvent)=\"navbarButtonClicked($event)\"></lf-navbar>\r\n <!-- content wrapper -->\r\n <div\r\n class=\"lf-content-wrapper\"\r\n [class.lf-show-navbar]=\"navbarConfig()?.enable && !isMobile()\"\r\n [class.lf-show-header]=\"headerConfig()?.enable && !(navbarConfig()?.enable && isMobile())\"\r\n [class.lf-show-navbar-mobile]=\"navbarConfig()?.enable && isMobile() && !headerConfig()?.enable\"\r\n [class.lf-show-header-and-navbar-mobile]=\"\r\n headerConfig()?.enable && navbarConfig()?.enable && isMobile()\r\n \"\r\n [class.lf-transitions]=\"initialized()\"\r\n #scrollContainer\r\n cdkScrollable>\r\n <!-- drawer -->\r\n <lf-drawer\r\n [libraryConfig]=\"libraryConfig\"\r\n [drawerConfig]=\"drawerConfig()\"\r\n [drawerPortal]=\"drawerPortal()\"\r\n [isMobile]=\"isMobile()!\"\r\n [headerEnabled]=\"headerConfig()?.enable!\"\r\n (drawerConfigUpdateEvent)=\"drawerConfigUpdated($event)\">\r\n <!-- drawer content -->\r\n <ng-content select=\"[drawerContent]\" drawerContent></ng-content>\r\n <!-- content title card -->\r\n <lf-content-title-card\r\n [libraryConfig]=\"libraryConfig\"\r\n [contentTitleCardConfig]=\"contentTitleCardConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [routeHistory]=\"routeHistory()!\"\r\n (backButtonClickEvent)=\"backButtonClicked()\"></lf-content-title-card>\r\n <!-- main content -->\r\n <div\r\n class=\"lf-content\"\r\n [class.lf-content-mobile]=\"isMobile()\"\r\n [class.lf-show-footer]=\"footerConfig()?.enable\"\r\n #content>\r\n <ng-content></ng-content>\r\n <!-- to top button -->\r\n <lf-floating-button\r\n [libraryConfig]=\"libraryConfig\"\r\n [floatingButtonConfig]=\"floatingButtonConfig()\"\r\n [onTop]=\"scrollTopPosition() <= 0\"\r\n [isMobile]=\"isMobile()!\"\r\n [drawerEnabled]=\"drawerConfig()?.enable! && drawerConfig()?.open!\"\r\n [navbarEnabled]=\"navbarConfig()?.enable!\"\r\n [bottomBarEnabled]=\"bottomBarConfig()?.enable!\"\r\n (floatingButtonConfigUpdateEvent)=\"floatingButtonConfigUpdated($event)\"\r\n (floatingButtonClickEvent)=\"floatingButtonClicked($event)\"></lf-floating-button>\r\n </div>\r\n <!-- footer -->\r\n <lf-footer [libraryConfig]=\"libraryConfig\" [footerConfig]=\"footerConfig()\"></lf-footer>\r\n </lf-drawer>\r\n </div>\r\n <!-- bottom bar -->\r\n <lf-bottom-bar\r\n [libraryConfig]=\"libraryConfig\"\r\n [bottomBarConfig]=\"bottomBarConfig()\"\r\n [isMobile]=\"isMobile()! && navbarConfig()?.enable!\"\r\n [navbarEnabled]=\"navbarConfig()?.enable!\"\r\n (bottomBarCloseClickEvent)=\"bottomBarCloseClicked($event)\"\r\n (bottomBarButtonClickEvent)=\"bottomBarButtonClicked($event)\"></lf-bottom-bar>\r\n</div>\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-color-picker',\r\n templateUrl: './color-picker.component.html',\r\n styleUrls: ['./color-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [FormsModule, MatButtonModule, MatIconModule, MatTooltipModule],\r\n})\r\nexport class ColorPickerComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn' | string>('primary');\r\n public readonly label = input<string>();\r\n public readonly matIcon = input<string>();\r\n public readonly disabled = input<boolean>(false);\r\n public readonly tooltip = input<string>();\r\n\r\n public readonly colorChangeEvent = output<string>();\r\n\r\n public isSafari = signal<boolean>(false);\r\n\r\n public selectedColor = linkedSignal<string>(() => {\r\n const color: 'primary' | 'accent' | 'warn' | string = this.color();\r\n if (color && color !== 'primary' && color !== 'accent' && color !== 'warn') {\r\n return color;\r\n }\r\n\r\n return '';\r\n });\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.isSafari.set(/^((?!chrome|android).)*safari/i.test(navigator.userAgent));\r\n }\r\n }\r\n\r\n public labelColor = computed<string>(() => {\r\n const hex = this.selectedColor().replace('#', '');\r\n\r\n const r = parseInt(hex.substr(0, 2), 16);\r\n const g = parseInt(hex.substr(2, 2), 16);\r\n const b = parseInt(hex.substr(4, 2), 16);\r\n\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n\r\n return brightness > 128 ? '#000000' : '#ffffff';\r\n });\r\n\r\n public selectColor(event: string): void {\r\n this.selectedColor.set(event);\r\n this.colorChangeEvent.emit(event);\r\n }\r\n}\r\n","@if (!isSafari()) {\r\n <input\r\n style=\"opacity: 0; position: absolute; width: 0; height: 36px; border: none\"\r\n #colorPicker\r\n type=\"color\"\r\n onclick=\"this.value = null\"\r\n [ngModel]=\"selectedColor()\"\r\n (ngModelChange)=\"selectColor($event)\" />\r\n\r\n <button\r\n mat-flat-button\r\n class=\"lf-button\"\r\n type=\"button\"\r\n [color]=\"selectedColor() ? null : color()\"\r\n [style.background]=\"selectedColor()\"\r\n [style.color]=\"labelColor()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"colorPicker.click()\"\r\n [matTooltip]=\"tooltip()\">\r\n <!-- icon -->\r\n @if (matIcon()) {\r\n <mat-icon>\r\n {{ matIcon() }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n {{ label() }}\r\n </button>\r\n} @else {\r\n <input\r\n style=\"width: 36px; height: 36px\"\r\n #colorPicker\r\n type=\"color\"\r\n [ngModel]=\"selectedColor()\"\r\n (ngModelChange)=\"selectColor($event)\" />\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\nimport { Logger } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-file-upload',\r\n templateUrl: './file-upload.component.html',\r\n styleUrls: ['./file-upload.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [FormsModule, MatButtonModule, MatIconModule, MatTooltipModule],\r\n})\r\nexport class FileUploadComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private logger: Logger = inject(Logger);\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn'>('primary');\r\n public readonly label = input<string>();\r\n public readonly matIcon = input<string>();\r\n // @Input() public loading: boolean;\r\n public readonly disabled = input<boolean>(false);\r\n public readonly accept = input<string>();\r\n public readonly tooltip = input<string>();\r\n\r\n public readonly fileChangeEvent = output<File>();\r\n\r\n public selectFile(event: Event): void {\r\n const input: HTMLInputElement = event.target as HTMLInputElement;\r\n\r\n if (!input || !input.files) return;\r\n const file: File = input.files[0];\r\n\r\n if (!file) return;\r\n\r\n this.logger.log('[FileUploadComponent]', file);\r\n this.fileChangeEvent.emit(file);\r\n }\r\n}\r\n","<input\r\n hidden\r\n #file\r\n type=\"file\"\r\n onclick=\"this.value = null\"\r\n [accept]=\"accept()\"\r\n (change)=\"selectFile($event)\" />\r\n\r\n<button\r\n mat-flat-button\r\n class=\"lf-button\"\r\n type=\"button\"\r\n [color]=\"color()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"file.click()\"\r\n [matTooltip]=\"tooltip()\">\r\n <!-- icon -->\r\n @if (matIcon()) {\r\n <mat-icon>\r\n {{ matIcon() }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n <!-- } -->\r\n {{ label() }}\r\n <!-- </span> -->\r\n</button>\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemAvatar]',\r\n})\r\nexport class ListItemAvatarDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}\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}\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}\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}\r\n","import { CdkDragDrop, DragDropModule, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { KeyValuePipe, NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n contentChild,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { map } from 'rxjs';\r\nimport {\r\n ListItemAvatarDirective,\r\n ListItemButtonsDirective,\r\n ListItemSubtitleDirective,\r\n ListItemTitleDirective,\r\n} from '../../../directives';\r\nimport { Button, ListConfig, ListHeader, ListItem, ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\nimport { BreakpointService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-list',\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n DragDropModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatRippleModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatDividerModule,\r\n KeyValuePipe,\r\n NgClass,\r\n NgTemplateOutlet,\r\n ],\r\n})\r\nexport class ListComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private breakpointService = inject(BreakpointService);\r\n\r\n public readonly avatarTemplate = contentChild(ListItemAvatarDirective);\r\n public readonly titleTemplate = contentChild(ListItemTitleDirective);\r\n public readonly subtitleTemplate = contentChild(ListItemSubtitleDirective);\r\n public readonly buttonsTemplate = contentChild(ListItemButtonsDirective);\r\n\r\n public readonly config = input<ListConfig | null>(null);\r\n public readonly header = input<ListHeader | null>(null);\r\n public readonly items = input<ListItem[]>([]);\r\n public readonly groupedItems = input<Map<string, ListItem[]>>(new Map());\r\n public readonly buttons = input<Button[]>([]);\r\n\r\n public readonly dropListId = input<string>();\r\n public readonly connectedDropListIds = input<string[]>();\r\n\r\n public readonly sortChangeEvent = output<{ sortToken: string; sortAsc: boolean }>();\r\n public readonly selectionChangeEvent = output<ListItem[]>();\r\n public readonly itemClickEvent = output<ListItem>();\r\n public readonly itemDropEvent = output<{ items: ListItem[]; id: string }>();\r\n public readonly buttonClickEvent = output<{ buttonId: string; item: ListItem }>();\r\n\r\n public isMobile = toSignal(\r\n this.breakpointService.breakpoint$.pipe(\r\n map((state: BreakpointState) => state.breakpoints[Breakpoints.XSmall]),\r\n ),\r\n );\r\n\r\n public sortToken = signal<string>('');\r\n public sortAsc = signal<boolean>(true);\r\n public allSelected = model<boolean>(false);\r\n\r\n get someSelected(): boolean {\r\n return (\r\n this.items().length > 0 &&\r\n this.items().some((item: ListItem) => item.checked) &&\r\n !this.allSelected()\r\n );\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 constructor() {\r\n effect(() => {\r\n const config: ListConfig | null = this.config();\r\n if (!config) return;\r\n\r\n const initialSortToken: string = config.initialSortToken || '';\r\n const initialSortAsc: boolean = config.initialSortAsc || false;\r\n\r\n this.sortToken.set(initialSortToken);\r\n this.sortAsc.set(initialSortAsc);\r\n\r\n if (initialSortToken) {\r\n queueMicrotask(() => {\r\n this.updateSortToken(initialSortToken, true);\r\n });\r\n }\r\n });\r\n\r\n effect(() => {\r\n const items: ListItem[] = this.items();\r\n this.allSelected.set(items.length > 0 && items.every((item: ListItem) => item.checked));\r\n });\r\n }\r\n\r\n // Update the sort token\r\n public updateSortToken(sortToken: string | undefined, initial?: boolean): void {\r\n if (!sortToken) return;\r\n if (this.sortToken() === sortToken && !initial) this.sortAsc.set(!this.sortAsc());\r\n this.sortToken.set(sortToken);\r\n this.sortChangeEvent.emit({ sortToken: this.sortToken(), sortAsc: this.sortAsc() });\r\n }\r\n\r\n // Select all items\r\n public selectAll(event: MatCheckboxChange): void {\r\n this.allSelected.set(event.checked);\r\n\r\n this.items().forEach((item: ListItem) => {\r\n if (!item.disabled) item.checked = this.allSelected();\r\n });\r\n\r\n this.selectionChangeEvent.emit(this.items());\r\n }\r\n\r\n // Select single item\r\n public selectItem(item: ListItem, event: MatCheckboxChange): void {\r\n if (this.config()?.disableMultiselect)\r\n this.items().forEach((item: ListItem) => {\r\n item.checked = false;\r\n });\r\n this.allSelected.set(\r\n this.items().length > 0 && this.items().every((item: ListItem) => item.checked),\r\n );\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(\r\n event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex,\r\n );\r\n this.itemDropEvent.emit({ items: event.container.data, id });\r\n }\r\n\r\n // Handle button click events\r\n public clickButton(event: { buttonId: string; item: ListItem }, click: Event): void {\r\n this.stopPropagation(click);\r\n this.buttonClickEvent.emit(event);\r\n }\r\n\r\n // Combine list and item buttons\r\n public getCombinedButtons(item: ListItem): Button[] {\r\n return [...(item.buttons ?? []), ...(this.buttons() ?? [])];\r\n }\r\n\r\n // Handle image errors\r\n public onImageError(event: Event): void {\r\n const target = event.target as HTMLImageElement;\r\n target.src = this.config()?.avatarFallbackPath || '';\r\n }\r\n\r\n // Stop click trough events\r\n public stopPropagation(click: Event): void {\r\n // click.preventDefault();\r\n // click.stopPropagation();\r\n click.stopImmediatePropagation();\r\n }\r\n}\r\n","<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header(); as header) {\r\n <div\r\n class=\"lf-list-item lf-list-item-header\"\r\n [class.gap-2]=\"!isMobile()\"\r\n [class.gap-1]=\"isMobile()\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-1\">\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-1\">\r\n <!-- icon -->\r\n @if (header.matIcon) {\r\n <mat-icon>\r\n {{ header.matIcon }}\r\n </mat-icon>\r\n } @else if (header.svgIcon) {\r\n <mat-icon [svgIcon]=\"header.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-1\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row\">\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\" [class.gap-2]=\"!isMobile()\" [class.gap-1]=\"isMobile()\">\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\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config()?.enableSelection && !config()?.disableMultiselect) {\r\n <div class=\"lf-list-item-checkbox\">\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\r\n class=\"lf-list-item lf-list-group-header\"\r\n [class.gap-2]=\"!isMobile()\"\r\n [class.gap-1]=\"isMobile()\">\r\n <div class=\"lf-list-item-avatar px-1\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row\">\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.gap-2]=\"!isMobile()\"\r\n [class.gap-1]=\"isMobile()\"\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-1\">\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-1\">\r\n <!-- icon -->\r\n @if (item.matIcon) {\r\n <mat-icon>\r\n {{ item.matIcon }}\r\n </mat-icon>\r\n } @else if (item.svgIcon) {\r\n <mat-icon [svgIcon]=\"item.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper\">\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\" [class.gap-2]=\"!isMobile()\" [class.gap-1]=\"isMobile()\">\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\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config()?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n [aria-label]=\"'Drag handle'\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config()?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (config()?.showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n","import { BreakpointState, Breakpoints } from '@angular/cdk/layout';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { map } from 'rxjs';\r\nimport { BreakpointService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-notification',\r\n templateUrl: './notification.component.html',\r\n styleUrls: ['./notification.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatButtonModule, MatIconModule],\r\n})\r\nexport class NotificationComponent {\r\n private breakpointService = inject(BreakpointService);\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn'>('primary');\r\n public readonly message = input<string>('');\r\n public readonly link = input<string>('');\r\n public readonly linkText = input<string>('');\r\n public readonly action = input<string>('');\r\n public readonly matIcon = input<string>('');\r\n public readonly svgIcon = input<string>('');\r\n public readonly static = input<boolean>(false);\r\n public readonly minimal = input<boolean>(false);\r\n public readonly cssClass = input<string>('');\r\n\r\n public readonly clickEvent = output();\r\n\r\n public isMobile = toSignal(\r\n this.breakpointService.breakpoint$.pipe(\r\n map((state: BreakpointState) => state.breakpoints[Breakpoints.XSmall]),\r\n ),\r\n );\r\n}\r\n","<div\r\n class=\"lf-notification\"\r\n [class.mat-elevation-z2]=\"!static()\"\r\n [class.lf-notification-fixed]=\"!static()\"\r\n [class.lf-notification-static]=\"static()\"\r\n [class.lf-notification-minimal]=\"minimal()\"\r\n [class.lf-mobile]=\"isMobile()\"\r\n [class]=\"[cssClass(), color()]\"\r\n animate.enter=\"lf-anim-scale-enter\">\r\n <div\r\n class=\"lf-notification-content flex-row-nowrap gap-2\"\r\n [class.justify-center]=\"minimal()\"\r\n [class.justify-between]=\"!minimal()\"\r\n [class.flex-col]=\"isMobile()\"\r\n [class.align-center]=\"!isMobile()\"\r\n [class.align-start]=\"isMobile()\">\r\n <span\r\n class=\"lf-notification-message flex-row-nowrap align-center justify-start\"\r\n [class.gap-4]=\"!isMobile()\"\r\n [class.gap-2]=\"isMobile()\">\r\n @if (matIcon()) {\r\n <mat-icon class=\"flex-none\" [color]=\"color()\">{{ matIcon() }}</mat-icon>\r\n }\r\n <span [class.ml-1]=\"!matIcon()\">\r\n {{ message() }}\r\n @if (link() && linkText()) {\r\n <a class=\"lf-notification-link\" [href]=\"link()\">{{ linkText() }}</a>\r\n }\r\n </span>\r\n </span>\r\n\r\n @if (action(); as action) {\r\n <button\r\n mat-flat-button\r\n class=\"lf-notification-action\"\r\n [class.align-self-end]=\"isMobile()\"\r\n [color]=\"color()\"\r\n (click)=\"clickEvent.emit()\">\r\n {{ action }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { PlaceholderConfig, ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-placeholder',\r\n templateUrl: './placeholder.component.html',\r\n styleUrls: ['./placeholder.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatButtonModule, MatIconModule, MatTooltipModule, NgClass],\r\n})\r\nexport class PlaceholderComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n public readonly placeholderConfig = input<PlaceholderConfig>();\r\n\r\n public readonly buttonClickEvent = output<void>();\r\n}\r\n","@if (placeholderConfig(); as config) {\r\n <div class=\"lf-placeholder\" [ngClass]=\"config.cssClass\">\r\n <!-- icon -->\r\n @if (config.matIcon) {\r\n <mat-icon class=\"lf-placeholder-icon\">\r\n {{ config.matIcon }}\r\n </mat-icon>\r\n } @else if (config.svgIcon) {\r\n <mat-icon class=\"lf-placeholder-icon\" [svgIcon]=\"config.svgIcon\"></mat-icon>\r\n } @else if (config.imgIcon) {\r\n <img\r\n class=\"lf-placeholder-image\"\r\n [src]=\"config.imgIcon\"\r\n width=\"96\"\r\n alt=\"Placeholder image\"\r\n loading=\"lazy\" />\r\n }\r\n <!-- heading -->\r\n @if (config.title) {\r\n <p class=\"lf-placeholder-title mt-2\">\r\n {{ config.title }}\r\n </p>\r\n }\r\n <!-- message -->\r\n @if (config.message) {\r\n <p class=\"lf-placeholder-message mt-1\">\r\n {{ config.message }}\r\n </p>\r\n }\r\n <!-- action -->\r\n @if (config.button) {\r\n <button\r\n mat-button\r\n class=\"mt-4\"\r\n color=\"accent\"\r\n [ngClass]=\"config.button.cssClass\"\r\n [disabled]=\"config.button.disabled\"\r\n (click)=\"buttonClickEvent.emit()\"\r\n [matTooltip]=\"config.button.tooltip\">\r\n <!-- icon -->\r\n @if (config.button.matIcon) {\r\n <mat-icon>\r\n {{ config.button.matIcon }}\r\n </mat-icon>\r\n } @else if (config.button.svgIcon) {\r\n <mat-icon [svgIcon]=\"config.button.svgIcon\"></mat-icon>\r\n }\r\n {{ config.button.label }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable, finalize } from 'rxjs';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { Logger, ScaffoldService } from '../services';\r\n\r\n@Injectable()\r\nexport class ScaffoldLoadingInterceptor implements HttpInterceptor {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private scaffoldService = inject(ScaffoldService);\r\n private logger = inject(Logger);\r\n\r\n private activeRequests = 0;\r\n private loadingDelay = 100; // milliseconds\r\n private spinnerTimeout: ReturnType<typeof setTimeout>;\r\n\r\n public intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n this.activeRequests++;\r\n\r\n // Set a delayed spinner timeout\r\n if (this.activeRequests === 1) {\r\n this.spinnerTimeout = setTimeout(() => {\r\n this.scaffoldService.updateScaffoldProperty('loading', true);\r\n }, this.loadingDelay);\r\n }\r\n\r\n return next.handle(req).pipe(\r\n // tap({\r\n // next: (event) => {\r\n // if (event instanceof HttpResponse) {\r\n // // Successful response\r\n // }\r\n // },\r\n // error: (error: HttpErrorResponse) => {\r\n // // Handle error if needed\r\n // }\r\n // }),\r\n finalize(() => {\r\n this.activeRequests = Math.max(0, this.activeRequests - 1);\r\n if (this.libraryConfig?.debugging)\r\n this.logger.log(\r\n `[Interceptor] Request finalized: ${req.url}, Active requests now: ${this.activeRequests}`,\r\n );\r\n\r\n if (this.activeRequests === 0) {\r\n clearTimeout(this.spinnerTimeout);\r\n this.scaffoldService.updateScaffoldProperty('loading', false);\r\n }\r\n }),\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of components\r\n */\r\n\r\n/* CONFIG */\r\nexport * from './lib/scaffold.config';\r\n/* MODELS */\r\nexport * from './lib/models';\r\n/* COMPONENTS */\r\nexport * from './lib/components/scaffold/scaffold.component';\r\nexport * from './lib/shared/components/color-picker/color-picker.component';\r\nexport * from './lib/shared/components/file-upload/file-upload.component';\r\nexport * from './lib/shared/components/list/list.component';\r\nexport * from './lib/shared/components/notification/notification.component';\r\nexport * from './lib/shared/components/placeholder/placeholder.component';\r\n/* DIRECTIVES */\r\nexport * from './lib/directives';\r\n/* SERVICES */\r\nexport * from './lib/services';\r\n/* INTERCEPTORS */\r\nexport * from './lib/interceptors/loading.interceptor';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i2","i3","i1","i5","i6","i7"],"mappings":"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MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,K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"}
|
|
1
|
+
{"version":3,"file":"lukfel-ng-scaffold.mjs","sources":["../../../projects/ng-scaffold/src/lib/services/media-matcher.service.ts","../../../projects/ng-scaffold/src/lib/scaffold.config.ts","../../../projects/ng-scaffold/src/lib/services/breakpoint.service.ts","../../../projects/ng-scaffold/src/lib/services/dialog.service.ts","../../../projects/ng-scaffold/src/lib/services/logger.service.ts","../../../projects/ng-scaffold/src/lib/services/local-storage.service.ts","../../../projects/ng-scaffold/src/lib/services/overlay.service.ts","../../../projects/ng-scaffold/src/lib/services/router.service.ts","../../../projects/ng-scaffold/src/lib/services/scaffold.service.ts","../../../projects/ng-scaffold/src/lib/services/seo.service.ts","../../../projects/ng-scaffold/src/lib/services/snackbar.service.ts","../../../projects/ng-scaffold/src/lib/services/theme.service.ts","../../../projects/ng-scaffold/src/lib/services/translation.service.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.ts","../../../projects/ng-scaffold/src/lib/components/bottom-bar/bottom-bar.component.html","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.ts","../../../projects/ng-scaffold/src/lib/components/content-title-card/content-title-card.component.html","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.ts","../../../projects/ng-scaffold/src/lib/components/drawer/drawer.component.html","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.ts","../../../projects/ng-scaffold/src/lib/components/floating-button/floating-button.component.html","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.ts","../../../projects/ng-scaffold/src/lib/components/footer/footer.component.html","../../../projects/ng-scaffold/src/lib/shared/components/input/input.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/input/input.component.html","../../../projects/ng-scaffold/src/lib/components/header/header.component.ts","../../../projects/ng-scaffold/src/lib/components/header/header.component.html","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.ts","../../../projects/ng-scaffold/src/lib/components/loading-overlay/loading-overlay.component.html","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.ts","../../../projects/ng-scaffold/src/lib/components/navbar/navbar.component.html","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.ts","../../../projects/ng-scaffold/src/lib/components/scaffold/scaffold.component.html","../../../projects/ng-scaffold/src/lib/shared/components/color-picker/color-picker.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/color-picker/color-picker.component.html","../../../projects/ng-scaffold/src/lib/shared/components/file-upload/file-upload.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/file-upload/file-upload.component.html","../../../projects/ng-scaffold/src/lib/directives/list/list-item-avatar.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-buttons.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-subtitle.directive.ts","../../../projects/ng-scaffold/src/lib/directives/list/list-item-title.directive.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/list/list.component.html","../../../projects/ng-scaffold/src/lib/shared/components/notification/notification.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/notification/notification.component.html","../../../projects/ng-scaffold/src/lib/shared/components/placeholder/placeholder.component.ts","../../../projects/ng-scaffold/src/lib/shared/components/placeholder/placeholder.component.html","../../../projects/ng-scaffold/src/lib/interceptors/loading.interceptor.ts","../../../projects/ng-scaffold/src/public-api.ts","../../../projects/ng-scaffold/src/lukfel-ng-scaffold.ts"],"sourcesContent":["import { MediaMatcher } from '@angular/cdk/layout';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Injectable, PLATFORM_ID, REQUEST, inject } from '@angular/core';\n\n/**\n * Viewports assumed during SSR. A request reveals a device class, never an actual viewport, and\n * CDK exposes only query strings, so these are plausible device sizes rather than derived values.\n * They have to keep landing in `Breakpoints.XSmall` and `Breakpoints.Large`, which the spec asserts.\n */\nexport const SSR_MOBILE_VIEWPORT = { width: 390, height: 844 };\nexport const SSR_DESKTOP_VIEWPORT = { width: 1280, height: 800 };\n\nconst MOBILE_USER_AGENT_REGEX = /Android|iPhone|iPod|Windows Phone|IEMobile|BlackBerry|Opera Mini/i;\n\n/**\n * Answers media queries during SSR from the incoming request rather than matching nothing, so\n * breakpoint driven markup is server rendered for the requesting device class instead of always\n * falling back to desktop. On the browser it defers to the platform implementation.\n *\n * Opt in with `provideScaffold({ ssrBreakpoints: true })`. Doing so makes the SSR response depend\n * on the request, so whatever serves it must `Vary` on `Sec-CH-UA-Mobile` and `User-Agent` or a\n * cached mobile render will be handed to a desktop client.\n */\n@Injectable()\nexport class ScaffoldMediaMatcher extends MediaMatcher {\n private platformId = inject(PLATFORM_ID);\n private request = inject(REQUEST, { optional: true });\n\n public override matchMedia(query: string): MediaQueryList {\n if (isPlatformBrowser(this.platformId)) return super.matchMedia(query);\n\n const { width, height } = this.isMobileRequest() ? SSR_MOBILE_VIEWPORT : SSR_DESKTOP_VIEWPORT;\n\n return {\n matches: matchesMediaQuery(query, width, height),\n media: query,\n onchange: null,\n addListener: () => {},\n removeListener: () => {},\n addEventListener: () => {},\n removeEventListener: () => {},\n dispatchEvent: () => false,\n } as unknown as MediaQueryList;\n }\n\n // Sec-CH-UA-Mobile needs no Accept-CH opt in on Chromium; other browsers only give a User-Agent\n private isMobileRequest(): boolean {\n const headers: Headers | undefined = this.request?.headers;\n if (!headers) return false;\n\n const hint: string | null = headers.get('sec-ch-ua-mobile');\n if (hint) return hint.includes('?1');\n\n return MOBILE_USER_AGENT_REGEX.test(headers.get('user-agent') ?? '');\n }\n}\n\n/**\n * Evaluates the width and orientation parts of a media query against an assumed viewport.\n * Conditions a request cannot answer, such as `prefers-color-scheme`, never match.\n */\nexport function matchesMediaQuery(query: string, width: number, height: number): boolean {\n // A comma separated query matches when any of its branches matches\n return query.split(',').some((branch: string) =>\n branch.split(' and ').every((condition: string) => {\n const min: RegExpMatchArray | null = condition.match(/min-width:\\s*([\\d.]+)px/);\n if (min) return width >= parseFloat(min[1]);\n\n const max: RegExpMatchArray | null = condition.match(/max-width:\\s*([\\d.]+)px/);\n if (max) return width <= parseFloat(max[1]);\n\n if (/orientation:\\s*portrait/.test(condition)) return height >= width;\n if (/orientation:\\s*landscape/.test(condition)) return width > height;\n\n return false;\n }),\n );\n}\n","import { MediaMatcher } from '@angular/cdk/layout';\r\nimport {\r\n EnvironmentProviders,\r\n InjectionToken,\r\n Provider,\r\n makeEnvironmentProviders,\r\n} from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from './models';\r\nimport { ScaffoldMediaMatcher } from './services/media-matcher.service';\r\n\r\nexport const CONFIG = new InjectionToken<ScaffoldLibraryConfig>('config');\r\n\r\nexport function provideScaffold(config: ScaffoldLibraryConfig = {}): EnvironmentProviders {\r\n const providers: Provider[] = [{ provide: CONFIG, useValue: config }];\r\n\r\n // Opt in, because it makes the SSR response depend on the request and therefore on Vary\r\n if (config.ssrBreakpoints) {\r\n providers.push({ provide: MediaMatcher, useClass: ScaffoldMediaMatcher });\r\n }\r\n\r\n return makeEnvironmentProviders(providers);\r\n}\r\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { distinctUntilChanged } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BreakpointService {\r\n private breakpointObserver = inject(BreakpointObserver);\r\n\r\n public readonly breakpoint$ = this.breakpointObserver\r\n .observe([Breakpoints.Large, Breakpoints.Medium, Breakpoints.Small, Breakpoints.XSmall])\r\n .pipe(distinctUntilChanged());\r\n}\r\n","import { Injectable, Type, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfirmDialogConfig, HeaderInputConfig } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogService {\r\n private matDialog = inject(MatDialog);\r\n\r\n /**\r\n * Opens a simple pre-made confirm dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous boolean response\r\n */\r\n public async openConfirmDialog(config: ConfirmDialogConfig): Promise<boolean> {\r\n const { ConfirmDialogComponent } =\r\n await import('../shared/components/dialogs/confirm-dialog/confirm-dialog.component');\r\n\r\n const dialogRef = this.matDialog.open(ConfirmDialogComponent, {\r\n autoFocus: false,\r\n maxWidth: '368px',\r\n data: config,\r\n });\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a dialog with custom template and custom config\r\n *\r\n * @param templateRef reference to the component or template\r\n * @param config of the dialog\r\n * @returns an asynchronous any response\r\n */\r\n public openCustomDialog<T>(templateRef: Type<T>, config: MatDialogConfig): Promise<any> {\r\n const dialogRef = this.matDialog.open(templateRef, config);\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n\r\n /**\r\n * Opens a simple pre-made input dialog\r\n *\r\n * @param config of the dialog\r\n * @returns an asynchronous string response\r\n */\r\n public async openInputDialog(config: HeaderInputConfig): Promise<string | undefined> {\r\n const { InputComponent } = await import('../shared/components/input/input.component');\r\n\r\n const dialogRef = this.matDialog.open(InputComponent, {\r\n autoFocus: false,\r\n width: '100vw',\r\n data: config,\r\n panelClass: 'lf-input-dialog',\r\n });\r\n return firstValueFrom(dialogRef.afterClosed());\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Logger {\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n /**\r\n * Uses the regular console log but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n *\r\n * @param message message of the log\r\n * @param args arguments of the log\r\n */\r\n public log(message: string, ...args: any[]): void {\r\n if (this.libraryConfig?.production === false) {\r\n console.log(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n /**\r\n * Uses the regular console warn but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n *\r\n * @param message message of the warn\r\n * @param args arguments of the warn\r\n */\r\n public warn(message: string, ...args: any[]): void {\r\n if (this.libraryConfig?.production === false) {\r\n console.warn(message, ...args); // eslint-disable-line no-console\r\n }\r\n }\r\n\r\n /**\r\n * Uses the regular console error but can be automatically disabled during production by using the ScaffoldLibraryConfig in the scaffoldProvider\r\n *\r\n * @param message message of the error\r\n * @param args arguments of the error\r\n */\r\n public error(message: string, ...args: any[]): void {\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","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LocalStorageService {\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private platformId = inject(PLATFORM_ID);\r\n private logger = inject(Logger);\r\n\r\n /**\r\n * Set an item into the browser's local storage\r\n *\r\n * @param key key of the item\r\n * @param value value of the item\r\n */\r\n public setItem<T>(key: string, value: T | null): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n const stringValue: string = JSON.stringify(value);\r\n if (this.libraryConfig?.debugging)\r\n this.logger.log(`[SET ITEM] ${key} with value:`, stringValue);\r\n localStorage.setItem(key, stringValue);\r\n } catch (error) {\r\n this.logger.error(`[ERROR SET ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Set an item encoded into the browser's local storage\r\n *\r\n * @param key key of the item\r\n * @param value value of the item\r\n */\r\n public setItemEncoded<T>(key: string, value: T | null): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n const encodedValue: string = btoa(JSON.stringify(value));\r\n if (this.libraryConfig?.debugging)\r\n this.logger.log(`[SET ITEM] ${key} with value:`, encodedValue);\r\n localStorage.setItem(key, encodedValue);\r\n } catch (error) {\r\n this.logger.error(`[ERROR SET ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Get an item from the browser's local storage by key\r\n *\r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public getItem<T>(key: string): T | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item ? (JSON.parse(item, this.dateReviver) as T) : null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get an item and decode it from the browser's local storage by key\r\n *\r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public getItemDecoded<T>(key: string): T | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item ? (JSON.parse(atob(item), this.dateReviver) as T) : null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get an unparsed string item from the browser's local storage by key\r\n *\r\n * @param key key of the item\r\n */\r\n public getItemUnparsed(key: string): string | null {\r\n if (!isPlatformBrowser(this.platformId)) return null;\r\n\r\n try {\r\n const item: string | null = localStorage.getItem(key);\r\n if (this.libraryConfig?.debugging) this.logger.log(`[GET ITEM] ${key} with value:`, item);\r\n return item || null;\r\n } catch (error) {\r\n this.logger.error(`[ERROR GET ITEM] ${key}: ${error}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Remove an item from the browser's local storage by key\r\n *\r\n * @param key key of the item\r\n * @returns value of the item\r\n */\r\n public removeItem(key: string): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n try {\r\n if (this.libraryConfig?.debugging) this.logger.log(`[REMOVE ITEM] ${key}`);\r\n localStorage.removeItem(key);\r\n } catch (error) {\r\n this.logger.error(`[ERROR REMOVE ITEM] ${key}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Clear the browser's local storage for this application\r\n *\r\n */\r\n public clear(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n localStorage.clear();\r\n }\r\n\r\n private dateReviver(key: any, value: any): any {\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/.test(value)) {\r\n return new Date(value);\r\n }\r\n return value;\r\n }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OverlayService {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private overlay = inject(Overlay);\r\n private logger = inject(Logger);\r\n\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n public open<T>(component: ComponentType<T>): void {\r\n if (this.overlayRef) return;\r\n\r\n this.overlayRef = this.overlay.create({\r\n hasBackdrop: true,\r\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n });\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[Overlay] attach', this.overlayRef);\r\n\r\n const portal: ComponentPortal<T> = new ComponentPortal(component);\r\n this.overlayRef.attach(portal);\r\n }\r\n\r\n public close(): void {\r\n if (!this.overlayRef) return;\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[Overlay] detach', this.overlayRef);\r\n this.overlayRef.detach();\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { NavigationEnd, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable, take } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RouterService {\r\n private router = inject(Router);\r\n private platformId = inject(PLATFORM_ID);\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) {\r\n asyncLoadCount++;\r\n }\r\n if (event instanceof RouteConfigLoadEnd) {\r\n asyncLoadCount--;\r\n }\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","import { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { ScaffoldConfig, ScaffoldLibraryConfig } from '../models';\r\nimport { Logger } from './logger.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ScaffoldService {\r\n private libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private logger = inject(Logger);\r\n\r\n // Scaffold Config\r\n private _scaffoldConfig$: BehaviorSubject<ScaffoldConfig> = new BehaviorSubject<ScaffoldConfig>(\r\n {},\r\n );\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<\r\n ComponentPortal<unknown> | TemplatePortal<unknown> | null\r\n >(null);\r\n\r\n public get drawerPortal$(): Observable<\r\n ComponentPortal<unknown> | TemplatePortal<unknown> | null\r\n > {\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>(\r\n property: K,\r\n value: Partial<ScaffoldConfig[K]> | ScaffoldConfig[K],\r\n ): 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)\r\n this.logger.log(`[UNCHANGED] ScaffoldConfig.${property}`, newValue);\r\n return;\r\n }\r\n\r\n if (this.libraryConfig?.debugging)\r\n this.logger.log(`[UPDATE] ScaffoldConfig.${property}`, newValue);\r\n this._scaffoldConfig$.next({ ...currentState, [property]: newValue });\r\n }\r\n}\r\n","import { 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 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 * Pass a configuration to set meta tags such as title, description and image for search results and social media\r\n *\r\n * @param seoConfig config that contains all the meta information\r\n *\r\n */\r\n public setMetaTags(seoConfig: SeoConfig): void {\r\n this._config$.next(seoConfig);\r\n\r\n const autoTrim: boolean = seoConfig.autoTrim || false;\r\n const title: string = seoConfig.metaPageTitle || '';\r\n const description: string = seoConfig.metaPageDescription || '';\r\n const imagePath: string = seoConfig.metaImagePath || '';\r\n const imagePathIsAbsolute: boolean = seoConfig.metaImagePathIsAbsolute || false;\r\n const titleLimit: number = 60;\r\n const descriptionLimit: number = 160;\r\n\r\n // Set meta title\r\n if (title) {\r\n if (autoTrim && title.length > titleLimit) {\r\n this.logger.error(\r\n `[SeoService] The set meta title is too long. Recommended length is ${titleLimit}. The title will be trimmed.`,\r\n );\r\n }\r\n const titleTrim: string =\r\n 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(\r\n `[SeoService] The set meta description is too long. Recommended length is ${descriptionLimit}. The description will be trimmed.`,\r\n );\r\n }\r\n const descriptionTrim: string =\r\n description.length > descriptionLimit\r\n ? description.substring(0, descriptionLimit - 3) + '...'\r\n : description;\r\n this._setMetaDescription(autoTrim ? descriptionTrim : description);\r\n }\r\n\r\n // Set meta image\r\n const host: string = this.document.location.origin;\r\n if (imagePath) {\r\n this._setMetaImage(imagePathIsAbsolute ? imagePath : `${host}/${imagePath}`);\r\n }\r\n }\r\n\r\n // Set all meta titles\r\n private _setMetaTitle(title: string): void {\r\n this.metaTitle.setTitle(title);\r\n this.metaTags.updateTag({ property: 'og:title', content: title });\r\n this.metaTags.updateTag({ name: 'twitter:title', content: title });\r\n }\r\n\r\n // Set all meta descriptions\r\n private _setMetaDescription(description: string): void {\r\n this.metaTags.updateTag({ name: 'description', content: description });\r\n this.metaTags.updateTag({ property: 'og:description', content: description });\r\n this.metaTags.updateTag({ name: 'twitter:description', content: description });\r\n }\r\n\r\n // Set all meta images\r\n private _setMetaImage(image: string): void {\r\n this.metaTags.updateTag({ property: 'og:image', content: image });\r\n this.metaTags.updateTag({ name: 'twitter:image', content: image });\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport {\r\n MatSnackBar,\r\n MatSnackBarConfig,\r\n MatSnackBarHorizontalPosition,\r\n MatSnackBarVerticalPosition,\r\n} 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 private readonly SNACKBAR_DURATION: number = 5000;\r\n private readonly SNACKBAR_POSITION_HORIZONTAL: MatSnackBarHorizontalPosition = 'center';\r\n private readonly SNACKBAR_POSITION_VERTICAL: MatSnackBarVerticalPosition = 'bottom';\r\n\r\n private readonly actionConfig: MatSnackBarConfig = {\r\n duration: this.SNACKBAR_DURATION,\r\n horizontalPosition: this.SNACKBAR_POSITION_HORIZONTAL,\r\n verticalPosition: this.SNACKBAR_POSITION_VERTICAL,\r\n };\r\n\r\n private readonly defaultConfig: MatSnackBarConfig = {\r\n duration: this.SNACKBAR_DURATION / 2,\r\n horizontalPosition: this.SNACKBAR_POSITION_HORIZONTAL,\r\n verticalPosition: this.SNACKBAR_POSITION_VERTICAL,\r\n };\r\n\r\n // Opens a generic snackbar with a message\r\n public openSnackbar(message: string, closeLabel?: string, config?: MatSnackBarConfig): void {\r\n this.snackbar.open(message, closeLabel, config ? config : this.defaultConfig);\r\n }\r\n\r\n // Opens a snackbar with an action to wait for\r\n public openSnackbarWithAction(\r\n message: string,\r\n action: string,\r\n config?: MatSnackBarConfig,\r\n ): 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","import { 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 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 { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { DOCUMENT, Injectable, PLATFORM_ID, Signal, inject, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable, filter, firstValueFrom } from 'rxjs';\nimport { TransMap, TranslationConfig } from '../models';\nimport { CONFIG } from '../scaffold.config';\nimport { LocalStorageService } from './local-storage.service';\nimport { Logger } from './logger.service';\n\nconst DEFAULT_CONFIG: Required<Omit<TranslationConfig, 'locales' | 'fallbackLocale'>> = {\n path: 'assets/i18n/',\n persist: true,\n};\n\n/**\n * Runtime translation service that switches between per-locale JSON files.\n *\n * Configure it through `provideScaffold({ language: { ... } })`. Each app keeps\n * its own strongly-typed `TransMap` interface and reads the labels via\n * {@link TranslationService.transMapAs}.\n */\n@Injectable({ providedIn: 'root' })\nexport class TranslationService {\n private readonly http = inject(HttpClient);\n private readonly document = inject<Document>(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly storage = inject(LocalStorageService);\n private readonly logger = inject(Logger);\n private readonly config = this.resolveConfig(inject(CONFIG, { optional: true })?.language);\n\n private readonly STORAGE_KEY = 'LANGUAGE';\n\n /** In-memory cache of raw (un-merged) locale files, keyed by locale. */\n private readonly cache = new Map<string, TransMap>();\n\n /** Distinct empty seed so `transMap$` can suppress the pre-load emission. */\n private readonly EMPTY: TransMap = {};\n\n private readonly _locale = signal<string>(this.config.fallbackLocale);\n private readonly _transMap = signal<TransMap>(this.EMPTY);\n private readonly _loading = signal<boolean>(false);\n\n /** The active locale, e.g. `'de'`. */\n public readonly locale = this._locale.asReadonly();\n /** Labels for the active locale (with fallback keys merged in). */\n public readonly transMap = this._transMap.asReadonly();\n /** `true` while a locale file is being fetched. */\n public readonly loading = this._loading.asReadonly();\n /** All configured locales — drives a language picker. */\n public readonly locales: readonly string[] = this.config.locales;\n\n /** Observable interop for `| async` templates and rxjs consumers. */\n public readonly locale$: Observable<string> = toObservable(this._locale);\n // Suppress the empty seed so subscribers only see loaded translations —\n // consumers that guard on a falsy `transMap` (null/undefined) keep working.\n public readonly transMap$: Observable<TransMap> = toObservable(this._transMap).pipe(\n filter((transMap: TransMap) => transMap !== this.EMPTY),\n );\n public readonly loading$: Observable<boolean> = toObservable(this._loading);\n\n constructor() {\n this.init();\n }\n\n /**\n * Typed signal accessor: reads the active labels as the app's own `TransMap`\n * shape, preserving compile-time key checking. Emits `{}` until the first load.\n */\n public transMapAs<T>(): Signal<T> {\n return this._transMap as unknown as Signal<T>;\n }\n\n /**\n * Typed observable accessor: like {@link transMapAs} but as a stream that only\n * emits once translations are loaded (never the empty seed) — matching a\n * `null`/`undefined`-until-loaded consumption pattern.\n */\n public transMapStream<T>(): Observable<T> {\n return this.transMap$ as unknown as Observable<T>;\n }\n\n /**\n * Switch the active locale. Unknown locales fall back to `fallbackLocale`.\n * Persistence is governed by the `persist` config option.\n *\n * @param locale target locale (must be one of the configured `locales`)\n */\n public async setLocale(locale: string): Promise<void> {\n await this.applyLocale(locale, this.config.persist);\n }\n\n private async applyLocale(locale: string, persist: boolean): Promise<void> {\n const target: string = this.config.locales.includes(locale)\n ? locale\n : this.config.fallbackLocale;\n\n this._locale.set(target);\n this.setHtmlLangAttribute(target);\n\n if (persist) {\n this.storage.setItem(this.STORAGE_KEY, target);\n }\n\n await this.loadTranslations(target);\n }\n\n private init(): void {\n // No locales configured — stay inert (no stray request to `<fallback>.json`).\n if (!this.config.locales.length) {\n return;\n }\n\n const stored: string | null = this.config.persist\n ? this.storage.getItem<string>(this.STORAGE_KEY)\n : null;\n const initial: string =\n stored && this.config.locales.includes(stored) ? stored : this.detectLocale();\n // Already persisted (or intentionally not) — don't rewrite storage on startup.\n this.applyLocale(initial, false);\n }\n\n private detectLocale(): string {\n if (!isPlatformBrowser(this.platformId)) {\n return this.config.fallbackLocale;\n }\n\n const browserLocale: string = navigator.language.slice(0, 2);\n return this.config.locales.includes(browserLocale) ? browserLocale : this.config.fallbackLocale;\n }\n\n private async loadTranslations(locale: string): Promise<void> {\n this._loading.set(true);\n\n try {\n const active: TransMap = await this.fetchLocale(locale);\n\n let merged: TransMap = active;\n if (locale !== this.config.fallbackLocale) {\n try {\n const fallback: TransMap = await this.fetchLocale(this.config.fallbackLocale);\n merged = deepMerge(fallback, active);\n } catch (error) {\n // Fallback file unavailable — keep the loaded active locale rather than\n // discarding it and rendering blank.\n this.logger.warn(\n `[TRANSLATION] Fallback locale '${this.config.fallbackLocale}' failed to load`,\n error,\n );\n }\n }\n\n // Ignore stale responses if the locale changed while loading.\n if (this._locale() === locale) {\n this._transMap.set(merged);\n }\n } catch (error) {\n this.logger.error(`[TRANSLATION] Failed to load locale '${locale}'`, error);\n } finally {\n this._loading.set(false);\n }\n }\n\n private async fetchLocale(locale: string): Promise<TransMap> {\n const cached: TransMap | undefined = this.cache.get(locale);\n if (cached) {\n return cached;\n }\n\n const data: TransMap = await firstValueFrom(\n this.http.get<TransMap>(`${this.config.path}${locale}.json`),\n );\n this.cache.set(locale, data);\n return data;\n }\n\n private setHtmlLangAttribute(locale: string): void {\n this.document?.documentElement?.setAttribute('lang', locale);\n }\n\n private resolveConfig(config?: TranslationConfig): Required<TranslationConfig> {\n const path: string = config?.path ?? DEFAULT_CONFIG.path;\n return {\n locales: config?.locales ?? [],\n fallbackLocale: config?.fallbackLocale ?? config?.locales?.[0] ?? 'en',\n path: path.endsWith('/') ? path : `${path}/`,\n persist: config?.persist ?? DEFAULT_CONFIG.persist,\n };\n }\n}\n\n/** Deep-merges `override` onto `base`, returning a new object (pure). */\nfunction deepMerge(base: TransMap, override: TransMap): TransMap {\n const result: TransMap = { ...base };\n\n for (const key of Object.keys(override)) {\n const overrideValue: string | TransMap = override[key];\n const baseValue: string | TransMap | undefined = result[key];\n\n result[key] =\n isTransMap(baseValue) && isTransMap(overrideValue)\n ? deepMerge(baseValue, overrideValue)\n : overrideValue;\n }\n\n return result;\n}\n\n// Only plain objects are merged recursively; arrays (and other leaf values) are\n// replaced wholesale by the override locale so array shapes are never corrupted.\nfunction isTransMap(value: unknown): value is TransMap {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BottomBarConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-bottom-bar',\r\n templateUrl: './bottom-bar.component.html',\r\n styleUrls: ['./bottom-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatButtonModule, MatIconModule, MatToolbarModule, MatTooltipModule, NgClass],\r\n})\r\nexport class BottomBarComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly bottomBarConfig = input<BottomBarConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly navbarEnabled = input<boolean>(false);\r\n\r\n public readonly bottomBarCloseClickEvent = output<string>();\r\n public readonly bottomBarButtonClickEvent = output<string>();\r\n\r\n 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","@if (bottomBarConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-toolbar\r\n animate.enter=\"lf-anim-slide-up-enter\"\r\n animate.leave=\"lf-anim-slide-up-leave\"\r\n class=\"lf-bottom-bar lf-transitions px-4\"\r\n color=\"accent\"\r\n [ngClass]=\"config.cssClass\"\r\n [class.lf-bottom-bar-show-navbar]=\"!isMobile() && navbarEnabled()\"\r\n [class.lf-bottom-bar-show-navbar-mobile]=\"isMobile() && navbarEnabled()\">\r\n @if (config.closeButtonId) {\r\n <button mat-icon-button (click)=\"closeClicked(config.closeButtonId)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (config.message) {\r\n <span class=\"ml-2\">{{ config.message }}</span>\r\n }\r\n @if (config.buttons) {\r\n <div class=\"lf-bottom-bar-buttons ml-4\">\r\n @for (button of config.buttons; track button.id) {\r\n <!-- label button -->\r\n @if (button.label) {\r\n <button\r\n mat-button\r\n class=\"lf-bottom-bar-button ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ button.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else {\r\n <button\r\n mat-icon-button\r\n color=\"accent\"\r\n class=\"lf-bottom-bar-button-icon ml-2\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </mat-toolbar>\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ContentTitleCardConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-content-title-card',\r\n templateUrl: './content-title-card.component.html',\r\n styleUrls: ['./content-title-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatCardModule, MatButtonModule, MatIconModule, NgClass],\r\n})\r\nexport class ContentTitleCardComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly contentTitleCardConfig = input<ContentTitleCardConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly routeHistory = input<string[]>([]);\r\n\r\n public readonly backButtonClickEvent = output<void>();\r\n\r\n public backButtonClicked(): void {\r\n this.backButtonClickEvent.emit();\r\n }\r\n}\r\n","@if (contentTitleCardConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-card\r\n class=\"lf-content-title-card mat-elevation-z2\"\r\n [class.lf-content-title-card-mobile]=\"isMobile()\"\r\n [class.px-4]=\"!isMobile()\"\r\n [class.px-2]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\">\r\n <!-- back button -->\r\n @if (config.showBackButton && routeHistory().length > 0) {\r\n <button mat-icon-button color=\"accent\" (click)=\"backButtonClicked()\">\r\n <mat-icon>arrow_back_ios</mat-icon>\r\n </button>\r\n }\r\n <!-- spacer -->\r\n <div class=\"flex-auto\"></div>\r\n <!-- label -->\r\n <span class=\"lf-content-title-card-label\">\r\n {{ config.label || '' }}\r\n </span>\r\n <!-- spacer -->\r\n <div class=\"flex-auto\"></div>\r\n <!-- empty button spacer -->\r\n <div\r\n [style.width]=\"config.showBackButton && routeHistory().length > 0 ? '48px' : '0px'\"></div>\r\n </mat-card>\r\n }\r\n}\r\n","import { ComponentPortal, PortalModule, TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { DrawerConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-drawer',\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [PortalModule, MatSidenavModule, NgClass, NgTemplateOutlet],\r\n host: {\r\n '(document:touchstart)': 'onTouchStart($event)',\r\n '(document:touchend)': 'onTouchEnd($event)',\r\n },\r\n})\r\nexport class DrawerComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly drawerConfig = input<DrawerConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly headerEnabled = input<boolean>(false);\r\n public readonly drawerPortal = input<ComponentPortal<unknown> | TemplatePortal<unknown> | null>();\r\n\r\n public readonly drawerConfigUpdateEvent = output<Partial<DrawerConfig>>();\r\n\r\n private readonly initialized = signal<boolean>(false);\r\n\r\n private touchStartX = 0;\r\n private readonly TOUCH_ZONE_WIDTH_PX: number = 40;\r\n private readonly SWIPE_THRESHOLD_PX: number = 30;\r\n\r\n constructor() {\r\n effect(() => {\r\n const drawerConfig: DrawerConfig | null = this.drawerConfig();\r\n if (!drawerConfig || this.initialized()) return;\r\n\r\n this.initialized.set(true);\r\n\r\n if (this.isMobile() && drawerConfig.enable && drawerConfig.open) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n }\r\n });\r\n }\r\n\r\n // Detect when the drawer is closed without clicking a button\r\n public drawerClosed(): void {\r\n if (this.drawerConfig()) {\r\n this.drawerConfigUpdateEvent.emit({ open: false });\r\n }\r\n }\r\n\r\n // Track touches starting within the left-edge swipe zone\r\n public onTouchStart(event: TouchEvent): void {\r\n const x = event.touches[0].clientX;\r\n this.touchStartX = x <= this.TOUCH_ZONE_WIDTH_PX ? x : -1;\r\n }\r\n\r\n // Open drawer on rightward swipe originating from the left edge\r\n public onTouchEnd(event: TouchEvent): void {\r\n if (this.touchStartX < 0) return;\r\n const deltaX: number = event.changedTouches[0].clientX - this.touchStartX;\r\n if (\r\n deltaX >= this.SWIPE_THRESHOLD_PX &&\r\n this.isMobile() &&\r\n this.drawerConfig()?.enable &&\r\n !this.drawerConfig()?.open\r\n ) {\r\n this.drawerConfigUpdateEvent.emit({ open: true });\r\n }\r\n }\r\n}\r\n","@if (drawerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-sidenav-container class=\"lf-drawer-container lf-transitions\" [ngClass]=\"config.cssClass\">\r\n <!-- drawer -->\r\n <mat-sidenav\r\n #drawer\r\n class=\"lf-drawer mat-elevation-z2\"\r\n [class.mobile]=\"isMobile()\"\r\n [mode]=\"isMobile() ? 'over' : 'side'\"\r\n [opened]=\"config.open\"\r\n [autoFocus]=\"false\"\r\n [fixedInViewport]=\"config.fixed\"\r\n [class.lf-drawer-show-header]=\"headerEnabled() && config.fixed\"\r\n (closed)=\"drawerClosed()\">\r\n <!-- drawer content -->\r\n <!-- <ng-content select=\"[drawerContent]\"></ng-content> -->\r\n @if (drawerPortal()) {\r\n <ng-template [cdkPortalOutlet]=\"drawerPortal()\"></ng-template>\r\n } @else {\r\n <ng-content select=\"[drawerContent]\"></ng-content>\r\n }\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"overflow-unset\">\r\n <!-- main content -->\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n }\r\n} @else {\r\n <!-- render content without drawer -->\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n}\r\n\r\n<!-- this template is required to allow multiple <ng-content></ng-content> -->\r\n<ng-template #content><ng-content></ng-content></ng-template>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FloatingButtonConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-floating-button',\r\n templateUrl: './floating-button.component.html',\r\n styleUrls: ['./floating-button.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatButtonModule, MatIconModule, MatTooltipModule, NgClass],\r\n})\r\nexport class FloatingButtonComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly floatingButtonConfig = input<FloatingButtonConfig | null>(null);\r\n public readonly onTop = input<boolean>(false);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly drawerEnabled = input<boolean>(false);\r\n public readonly navbarEnabled = input<boolean>(false);\r\n public readonly bottomBarEnabled = input<boolean>(false);\r\n\r\n public readonly floatingButtonConfigUpdateEvent = output<Partial<FloatingButtonConfig>>();\r\n public readonly floatingButtonClickEvent = output<string>();\r\n\r\n private readonly initialized = signal<boolean>(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n const floatingButtonConfig: FloatingButtonConfig | null = this.floatingButtonConfig();\r\n if (!floatingButtonConfig || this.initialized()) return;\r\n\r\n this.initialized.set(true);\r\n\r\n const updatedFloatingButtonConfigConfig: Partial<FloatingButtonConfig> = {\r\n matIcon:\r\n !floatingButtonConfig.matIcon && !floatingButtonConfig.svgIcon\r\n ? 'arrow_upward'\r\n : floatingButtonConfig.matIcon || floatingButtonConfig.svgIcon,\r\n horizontalPosition: floatingButtonConfig.horizontalPosition ?? 'right',\r\n };\r\n\r\n if (\r\n JSON.stringify(updatedFloatingButtonConfigConfig) !== JSON.stringify(floatingButtonConfig)\r\n ) {\r\n this.floatingButtonConfigUpdateEvent.emit(updatedFloatingButtonConfigConfig);\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","@if (floatingButtonConfig(); as config) {\r\n @if (config.enable && (!config.autoHide || !onTop())) {\r\n <button\r\n mat-fab\r\n color=\"accent\"\r\n class=\"lf-floating-button lf-transitions\"\r\n [ngClass]=\"config.cssClass + ' ' + config.horizontalPosition\"\r\n [class.sticky]=\"config.sticky\"\r\n [class.show-navbar]=\"isMobile() && navbarEnabled() && !bottomBarEnabled()\"\r\n [class.show-bottom-bar]=\"bottomBarEnabled() && !(isMobile() && navbarEnabled())\"\r\n [class.show-navbar-and-bottom-bar]=\"isMobile() && navbarEnabled() && bottomBarEnabled()\"\r\n [class.show-drawer]=\"!isMobile() && drawerEnabled()\"\r\n [extended]=\"!!config.label\"\r\n [disabled]=\"config.disabled\"\r\n (click)=\"buttonClicked(config.id)\"\r\n [matTooltip]=\"config.tooltip!\">\r\n <!-- icon -->\r\n @if (config.matIcon) {\r\n <mat-icon>\r\n {{ config.matIcon }}\r\n </mat-icon>\r\n } @else if (config.svgIcon) {\r\n <mat-icon [svgIcon]=\"config.svgIcon\"></mat-icon>\r\n }\r\n <!-- svg icon -->\r\n <!-- label -->\r\n @if (config.label) {\r\n <span class=\"lf-floating-button-label\">\r\n {{ config.label }}\r\n </span>\r\n }\r\n </button>\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FooterConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [RouterModule, MatCardModule, MatIconModule, NgClass],\r\n})\r\nexport class FooterComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly footerConfig = input<FooterConfig | null>(null);\r\n}\r\n","@if (footerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-card class=\"lf-footer lf-transitions mat-elevation-z2 p-4\" [ngClass]=\"config.cssClass\">\r\n <!-- svg logo -->\r\n @if (config.svgLogo) {\r\n <mat-icon\r\n class=\"lf-footer-logo mb-4\"\r\n color=\"primary\"\r\n [svgIcon]=\"config.svgLogo!\"></mat-icon>\r\n } @else {\r\n @if (config.imgLogo) {\r\n <img class=\"lf-footer-logo mb-4\" [src]=\"config.imgLogo\" alt=\"Logo\" />\r\n }\r\n }\r\n <!-- img logo -->\r\n <!-- links -->\r\n @if (config.links) {\r\n <div class=\"lf-footer-links mb-4\">\r\n @for (link of config.links; track $index; let i = $index) {\r\n <div class=\"lf-footer-link\" [class.mr-2]=\"i < config.links!.length - 1\">\r\n @if (link.routerLink) {\r\n <a [routerLink]=\"[link.routerLink]\">{{ link.label || '' }}</a>\r\n } @else {\r\n <a [href]=\"link.href\" [target]=\"link.externalTab ? '_blank' : null\">\r\n {{ link.label }}\r\n </a>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n <!-- copyright -->\r\n @if (config.copyright) {\r\n <span class=\"lf-footer-copyright\">\r\n {{ config.copyright }}\r\n </span>\r\n }\r\n </mat-card>\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { HeaderInputConfig } from '../../../models';\r\n\r\n@Component({\r\n selector: 'lf-input',\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [FormsModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule],\r\n})\r\nexport class InputComponent {\r\n private dialogRef = inject<MatDialogRef<InputComponent>>(MatDialogRef, { optional: true });\r\n private inputConfigDialog = inject<HeaderInputConfig>(MAT_DIALOG_DATA, { optional: true });\r\n private destroyRef = inject(DestroyRef);\r\n\r\n public readonly input = viewChild<ElementRef>('input');\r\n\r\n public readonly inputConfig = input<HeaderInputConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n\r\n public readonly inputSubmitEvent = output<string>();\r\n public readonly inputChangeEvent = output<string>();\r\n public readonly inputPrefixActionEvent = output<void>();\r\n\r\n public inputConfigComputed = computed<HeaderInputConfig>(\r\n () => this.inputConfigDialog ?? this.inputConfig() ?? {},\r\n );\r\n\r\n public inputValue = model<string>('');\r\n\r\n constructor() {\r\n effect(() => {\r\n const input: ElementRef | undefined = this.input();\r\n if (input && this.inputConfigComputed().autoFocus) {\r\n input.nativeElement.focus();\r\n }\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.inputValue.set('');\r\n });\r\n }\r\n\r\n public inputSubmitted(value: string): void {\r\n if (!this.destroyRef.destroyed) {\r\n this.inputSubmitEvent.emit(value);\r\n }\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 if (!this.destroyRef.destroyed) {\r\n this.inputChangeEvent.emit(value);\r\n }\r\n }\r\n\r\n public inputPrefixAction(): void {\r\n if (!this.destroyRef.destroyed) {\r\n this.inputPrefixActionEvent.emit();\r\n }\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n public clearInput(): void {\r\n this.inputValue.set('');\r\n\r\n if (!this.destroyRef.destroyed) {\r\n this.inputChangeEvent.emit(this.inputValue());\r\n }\r\n }\r\n}\r\n","@if (inputConfigComputed(); as config) {\r\n @if (config) {\r\n <mat-form-field class=\"lf-input\" appearance=\"fill\" [class.lf-hide-hint]=\"!config.hint\">\r\n <mat-label>{{ config.label || 'Search' }}</mat-label>\r\n @if (config.hint) {\r\n <mat-hint>{{ config.hint }}</mat-hint>\r\n }\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n [disabled]=\"config.disabled!\"\r\n (keyup.enter)=\"inputSubmitted(inputValue())\"\r\n (ngModelChange)=\"inputChanged($event)\"\r\n #input />\r\n @if (isMobile()) {\r\n <button mat-icon-button matPrefix color=\"accent\" (click)=\"inputPrefixAction()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n @if (inputValue()) {\r\n <button class=\"lf-input-close-button\" mat-icon-button matSuffix (click)=\"clearInput()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (config.matIconSubmit) {\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n color=\"accent\"\r\n type=\"submit\"\r\n (click)=\"inputSubmitted(inputValue())\">\r\n <mat-icon>\r\n {{ config.matIconSubmit }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n}\r\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { RouterModule } from '@angular/router';\r\nimport { HeaderConfig, MenuButton, ScaffoldLibraryConfig } from '../../models';\r\nimport { InputComponent } from '../../shared/components/input/input.component';\r\n\r\n@Component({\r\n selector: 'lf-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n RouterModule,\r\n MatToolbarModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n NgClass,\r\n NgTemplateOutlet,\r\n InputComponent,\r\n ],\r\n})\r\nexport class HeaderComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly headerConfig = input<HeaderConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly routeLoading = input<boolean>(false);\r\n public readonly currentRoute = input<string>();\r\n\r\n public readonly headerConfigUpdateEvent = output<Partial<HeaderConfig>>();\r\n public readonly headerButtonClickEvent = output<string>();\r\n public readonly headerInputSubmitEvent = output<string>();\r\n public readonly headerInputChangeEvent = output<string>();\r\n\r\n public isActive = computed(() => {\r\n const currentRoute = this.currentRoute();\r\n const route: string = currentRoute?.substring(currentRoute.indexOf('/') + 1) || '';\r\n return (id: string): boolean => !!route && !!id && route === id;\r\n });\r\n\r\n public rightMobileButton = computed<MenuButton | null>(() => {\r\n const headerConfig = this.headerConfig();\r\n const rightMenuButtons = headerConfig?.rightMenuButtons ?? [];\r\n\r\n if (!rightMenuButtons.length) return null;\r\n\r\n const config = headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n const includedButtons = rightMenuButtons.filter(\r\n (button) => !config.excludeButtonIds?.includes(button.id),\r\n );\r\n\r\n return {\r\n id: '',\r\n matIcon: !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 rightExcludedButtons = computed<MenuButton[] | null>(() => {\r\n const headerConfig = this.headerConfig();\r\n const rightMenuButtons = headerConfig?.rightMenuButtons ?? [];\r\n\r\n if (!rightMenuButtons.length) return null;\r\n\r\n const config = headerConfig?.responsiveConfig;\r\n if (!config?.enable) return null;\r\n\r\n return rightMenuButtons.filter((button) => config.excludeButtonIds?.includes(button.id));\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","@if (headerConfig(); as config) {\r\n @if (config.enable) {\r\n <mat-toolbar\r\n class=\"lf-header lf-transitions mat-elevation-z3\"\r\n [class.px-4]=\"!isMobile()\"\r\n [class.px-1]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\"\r\n [class.lf-gradient]=\"config.gradient\"\r\n color=\"primary\">\r\n <!-- left menu button -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: config.leftMenuButton!,\r\n hideLabel: true,\r\n }\"></ng-container>\r\n <!-- logo & title -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper ml-1 mr-2\"\r\n [class.ml-10]=\"config.leftMenuButton && !isMobile()\">\r\n <!-- link wrapper -->\r\n <div\r\n class=\"lf-header-logo-title-wrapper-link\"\r\n [class.lf-clickable]=\"config.titleRouterLink\"\r\n [routerLink]=\"config.titleRouterLink ? [config.titleRouterLink] : null\">\r\n <!-- svg logo -->\r\n @if (config.svgLogo) {\r\n <mat-icon\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"config.title\"\r\n [svgIcon]=\"config.svgLogo!\"></mat-icon>\r\n <!-- img logo -->\r\n } @else {\r\n @if (config.imgLogo) {\r\n <img\r\n class=\"lf-header-logo\"\r\n [class.mr-3]=\"config.title\"\r\n [src]=\"config.imgLogo\"\r\n alt=\"Logo\" />\r\n }\r\n }\r\n <!-- title -->\r\n @if (config.title) {\r\n <div class=\"lf-header-title-wrapper\">\r\n @if (config.title) {\r\n <span class=\"lf-header-title\">\r\n {{ config.title }}\r\n </span>\r\n }\r\n @if (config.subtitle) {\r\n <span class=\"lf-header-subtitle\">\r\n {{ config.subtitle }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- input -->\r\n @if (config.inputConfig?.enable) {\r\n <div class=\"spacer\"></div>\r\n <lf-input\r\n [class.lf-header-input-mobile]=\"isMobile()\"\r\n [class.mx-3]=\"!isMobile()\"\r\n [inputConfig]=\"config.inputConfig!\"\r\n [isMobile]=\"isMobile()\"\r\n (inputSubmitEvent)=\"inputSubmitted($event)\"\r\n (inputChangeEvent)=\"inputChanged($event)\"\r\n (inputPrefixActionEvent)=\"inputClosed()\"></lf-input>\r\n }\r\n <!-- spacer -->\r\n <div class=\"spacer\"></div>\r\n <!-- right menu buttons -->\r\n @if (config.responsiveConfig?.enable && isMobile()) {\r\n @let exludedButtons = rightExcludedButtons();\r\n @for (button of exludedButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n @let mobileButton = rightMobileButton();\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: mobileButton,\r\n }\"></ng-container>\r\n } @else {\r\n @for (button of config.rightMenuButtons; track button.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuButtonTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n menuButton: button,\r\n }\"></ng-container>\r\n }\r\n }\r\n </mat-toolbar>\r\n <!-- loading bar -->\r\n @if (config.loading || (config.showRouteLoading && routeLoading())) {\r\n <mat-progress-bar\r\n class=\"lf-header-progress-bar\"\r\n color=\"accent\"\r\n mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n }\r\n}\r\n\r\n<!-- header menu button -->\r\n<ng-template #menuButtonTemplate let-menuButton=\"menuButton\" let-hideLabel=\"hideLabel\">\r\n @if (menuButton) {\r\n <!-- label button -->\r\n @if (menuButton.label && !hideLabel) {\r\n <button\r\n mat-button\r\n class=\"lf-header-menu-button\"\r\n [class.lf-header-menu-button-active]=\"isActive()(menuButton.id) && !menuButton.disabled\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n [disabled]=\"menuButton.disabled\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [aria-label]=\"menuButton.label || menuButton.tooltip\"\r\n [matTooltip]=\"menuButton.tooltip\">\r\n <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon>\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n {{ menuButton.label }}\r\n </button>\r\n <!-- icon button -->\r\n } @else if (menuButton.matIcon || menuButton.svgIcon) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-header-menu-button\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n [disabled]=\"menuButton.disabled\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [aria-label]=\"menuButton.id || menuButton.tooltip\">\r\n <!-- icon -->\r\n @if (menuButton.matIcon) {\r\n <mat-icon>\r\n {{ menuButton.matIcon }}\r\n </mat-icon>\r\n } @else if (menuButton.svgIcon) {\r\n <mat-icon [svgIcon]=\"menuButton.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n <!-- img button -->\r\n } @else if (menuButton.imgIcon) {\r\n <img\r\n class=\"lf-header-menu-img\"\r\n [src]=\"menuButton.imgIcon\"\r\n width=\"48\"\r\n height=\"48\"\r\n [ngClass]=\"menuButton.cssClass\"\r\n (click)=\"buttonClicked(menuButton.id)\"\r\n [matMenuTriggerFor]=\"menuButton.menuButtons ? menu : null\"\r\n [matTooltip]=\"menuButton.tooltip\"\r\n [aria-label]=\"menuButton.id || menuButton.tooltip\" />\r\n }\r\n <!-- menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <!-- label menu buttons -->\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- menu button -->\r\n @if (button.label) {\r\n <button\r\n mat-menu-item\r\n [class.lf-header-menu-button-active]=\"isActive()(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.label\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <span>{{ button.label }}</span>\r\n </button>\r\n }\r\n }\r\n <!-- icon menu buttons -->\r\n <div mat-menu-item class=\"lf-menu-icons px-1\" [disableRipple]=\"true\">\r\n @for (button of menuButton.menuButtons; track button.id) {\r\n <!-- icon button -->\r\n @if (!button.label && (button.matIcon || button.svgIcon)) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-menu-icon-button\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n (click)=\"buttonClicked(button.id)\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n tabindex=\"0\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n</ng-template>\r\n","import { ComponentPortal, PortalModule } from '@angular/cdk/portal';\r\nimport { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\nimport { LoadingOverlayConfig, ScaffoldLibraryConfig } from '../../models';\r\nimport { CONFIG } from '../../scaffold.config';\r\nimport { ScaffoldService } from '../../services';\r\n\r\n@Component({\r\n selector: 'lf-loading-overlay',\r\n templateUrl: './loading-overlay.component.html',\r\n styleUrls: ['./loading-overlay.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [PortalModule, MatProgressSpinner, NgClass],\r\n})\r\nexport class LoadingOverlayComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n private scaffoldService = inject(ScaffoldService);\r\n\r\n public loadingOverlayConfig = signal<LoadingOverlayConfig | null>(null);\r\n public portal = signal<ComponentPortal<any> | null>(null);\r\n\r\n constructor() {\r\n this.loadingOverlayConfig.set(\r\n this.scaffoldService.scaffoldConfig?.loadingOverlayConfig || null,\r\n );\r\n\r\n const customComponent: any = this.loadingOverlayConfig()?.customComponent || null;\r\n if (customComponent) {\r\n this.portal.set(new ComponentPortal(customComponent));\r\n }\r\n }\r\n}\r\n","@if (portal(); as portal) {\r\n <ng-template [cdkPortalOutlet]=\"portal\"></ng-template>\r\n} @else {\r\n <div\r\n [ngClass]=\"loadingOverlayConfig()?.cssClass\"\r\n [class.lf-gradient-spinner]=\"loadingOverlayConfig()?.gradient\">\r\n <mat-progress-spinner mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NavbarConfig, ScaffoldLibraryConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'lf-navbar',\r\n templateUrl: './navbar.component.html',\r\n styleUrls: ['./navbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatIconModule, MatTooltipModule, NgClass],\r\n})\r\nexport class NavbarComponent {\r\n public readonly libraryConfig = input<ScaffoldLibraryConfig | null>(null);\r\n public readonly navbarConfig = input<NavbarConfig | null>(null);\r\n public readonly isMobile = input<boolean>(false);\r\n public readonly currentRoute = input<string>();\r\n\r\n public readonly navbarButtonClickEvent = output<string>();\r\n\r\n public isActive = computed(() => {\r\n const currentRoute = this.currentRoute();\r\n const route: string = currentRoute?.substring(currentRoute.indexOf('/') + 1) || '';\r\n return (id: string): boolean => !!route && !!id && route === id;\r\n });\r\n\r\n 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","@if (navbarConfig(); as config) {\r\n @if (config.enable) {\r\n <div\r\n [animate.enter]=\"isMobile() ? 'lf-anim-slide-up-enter' : 'lf-anim-slide-left-enter'\"\r\n [animate.leave]=\"isMobile() ? 'lf-anim-slide-up-leave' : 'lf-anim-slide-left-leave'\"\r\n class=\"mat-app-background lf-transitions mat-elevation-z3\"\r\n [class.lf-navbar]=\"!isMobile()\"\r\n [class.lf-navbar-mobile]=\"isMobile()\"\r\n [ngClass]=\"config.cssClass\">\r\n <!-- items -->\r\n <div [class.lf-navbar-items]=\"!isMobile()\" [class.lf-navbar-mobile-items]=\"isMobile()\">\r\n <!-- item -->\r\n @for (button of config.buttons; track button.id; let i = $index) {\r\n @if (i < 5) {\r\n <div\r\n class=\"lf-navbar-item\"\r\n [class.lf-navbar-item-active]=\"isActive()(button.id)\"\r\n [ngClass]=\"button.cssClass\"\r\n (click)=\"buttonClicked(button.id)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [matTooltip]=\"button.tooltip\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n <!-- label -->\r\n <!-- show a protected space on desktop so the icon doesn't move up and down -->\r\n @if (button?.label) {\r\n <span class=\"lf-navbar-item-label\">\r\n {{\r\n isActive()(button.id) || config.showAllLabels\r\n ? button.label\r\n : isMobile()\r\n ? ''\r\n : ' '\r\n }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n}\r\n","import { Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass } from '@angular/common';\r\nimport {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n DOCUMENT,\r\n effect,\r\n ElementRef,\r\n inject,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { debounceTime, distinctUntilChanged, fromEvent, map, tap } from 'rxjs';\r\nimport {\r\n BottomBarConfig,\r\n ContentTitleCardConfig,\r\n DrawerConfig,\r\n FloatingButtonConfig,\r\n FooterConfig,\r\n HeaderConfig,\r\n NavbarConfig,\r\n ScaffoldConfig,\r\n ScaffoldLibraryConfig,\r\n} from '../../models';\r\nimport { CONFIG } from '../../scaffold.config';\r\nimport {\r\n BreakpointService,\r\n Logger,\r\n OverlayService,\r\n RouterService,\r\n ScaffoldService,\r\n} from '../../services';\r\nimport { BottomBarComponent } from '../bottom-bar/bottom-bar.component';\r\nimport { ContentTitleCardComponent } from '../content-title-card/content-title-card.component';\r\nimport { DrawerComponent } from '../drawer/drawer.component';\r\nimport { FloatingButtonComponent } from '../floating-button/floating-button.component';\r\nimport { FooterComponent } from '../footer/footer.component';\r\nimport { HeaderComponent } from '../header/header.component';\r\nimport { LoadingOverlayComponent } from '../loading-overlay/loading-overlay.component';\r\nimport { NavbarComponent } from '../navbar/navbar.component';\r\n\r\n@Component({\r\n selector: 'lf-scaffold',\r\n templateUrl: './scaffold.component.html',\r\n styleUrls: ['./scaffold.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n NgClass,\r\n HeaderComponent,\r\n NavbarComponent,\r\n DrawerComponent,\r\n FooterComponent,\r\n ContentTitleCardComponent,\r\n FloatingButtonComponent,\r\n BottomBarComponent,\r\n ],\r\n})\r\nexport class ScaffoldComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private scaffoldService = inject(ScaffoldService);\r\n private breakpointService = inject(BreakpointService);\r\n private routerService = inject(RouterService);\r\n private overlayService = inject(OverlayService);\r\n private route = inject(ActivatedRoute);\r\n private document = inject<Document>(DOCUMENT);\r\n private logger = inject(Logger);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n public readonly scrollContainer = viewChild<ElementRef>('scrollContainer');\r\n public readonly content = viewChild<ElementRef>('content');\r\n\r\n public readonly headerButtonClickEvent = output<string>();\r\n public readonly headerInputSubmitEvent = output<string>();\r\n public readonly headerInputChangeEvent = output<string>();\r\n public readonly navbarButtonClickEvent = output<string>();\r\n public readonly floatingButtonClickEvent = output<string>();\r\n public readonly bottomBarButtonClickEvent = output<string>();\r\n\r\n public scaffoldConfig = toSignal<ScaffoldConfig | null>(this.scaffoldService.scaffoldConfig$, {\r\n initialValue: null,\r\n });\r\n public headerConfig = computed<HeaderConfig | null>(\r\n () => this.scaffoldConfig()?.headerConfig || null,\r\n );\r\n public navbarConfig = computed<NavbarConfig | null>(\r\n () => this.scaffoldConfig()?.navbarConfig || null,\r\n );\r\n public drawerConfig = computed<DrawerConfig | null>(\r\n () => this.scaffoldConfig()?.drawerConfig || null,\r\n );\r\n public drawerPortal = toSignal<ComponentPortal<unknown> | TemplatePortal<unknown> | null>(\r\n this.scaffoldService.drawerPortal$,\r\n );\r\n public footerConfig = computed<FooterConfig | null>(\r\n () => this.scaffoldConfig()?.footerConfig || null,\r\n );\r\n public contentTitleCardConfig = computed<ContentTitleCardConfig | null>(\r\n () => this.scaffoldConfig()?.contentTitleCardConfig || null,\r\n );\r\n public floatingButtonConfig = computed<FloatingButtonConfig | null>(\r\n () => this.scaffoldConfig()?.floatingButtonConfig || null,\r\n );\r\n public bottomBarConfig = computed<BottomBarConfig | null>(\r\n () => this.scaffoldConfig()?.bottomBarConfig || null,\r\n );\r\n\r\n public routeHistory = toSignal<string[]>(\r\n this.routerService.routeHistory$.pipe(\r\n tap((routeHistory: string[]) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteHistory]', routeHistory);\r\n const scrollContainer: ElementRef | undefined = this.scrollContainer();\r\n if (scrollContainer && this.scaffoldConfig()?.scrollPositionRestoration) {\r\n scrollContainer.nativeElement.scrollTop = 0;\r\n }\r\n }),\r\n ),\r\n );\r\n public currentRoute = toSignal<string>(this.routerService.currentRoute$);\r\n public routeLoading = toSignal<boolean>(this.routerService.loading$);\r\n public isMobile = toSignal<boolean>(\r\n this.breakpointService.breakpoint$.pipe(\r\n map((breakpointState: BreakpointState) => {\r\n if (this.libraryConfig?.debugging) this.logger.log('[BreakpointState]', breakpointState);\r\n return (\r\n breakpointState.breakpoints[Breakpoints.XSmall] ||\r\n breakpointState.breakpoints[Breakpoints.Small]\r\n );\r\n }),\r\n ),\r\n );\r\n\r\n public scrollTopPosition = signal<number>(0);\r\n public initialized = signal<boolean>(false);\r\n\r\n private fragmentAnimationFrameId: number | null = null;\r\n private readonly FRAGMENT_SCROLL_MAX_ATTEMPTS: number = 180;\r\n\r\n constructor() {\r\n effect(() => {\r\n const scaffoldConfig: ScaffoldConfig | null = this.scaffoldConfig();\r\n\r\n if (this.libraryConfig?.debugging) this.logger.log('[ScaffoldConfig]', scaffoldConfig);\r\n if (!scaffoldConfig) return;\r\n\r\n this.toggleLoadingOverlay(scaffoldConfig.loading || false);\r\n });\r\n\r\n effect((onCleanup) => {\r\n const scrollContainer: ElementRef | undefined = this.scrollContainer();\r\n if (!scrollContainer) return;\r\n\r\n const element: HTMLElement = scrollContainer.nativeElement;\r\n const subscription = fromEvent(element, 'scroll')\r\n .pipe(distinctUntilChanged(), debounceTime(100))\r\n .subscribe((e: Event) => {\r\n const target: HTMLElement = e.target as HTMLElement;\r\n this.scrollTopPosition.set(target.scrollTop);\r\n });\r\n\r\n onCleanup(() => {\r\n subscription.unsubscribe();\r\n });\r\n });\r\n\r\n this.route.fragment.pipe(takeUntilDestroyed()).subscribe((fragment: string | null) => {\r\n if (!this.scaffoldConfig()?.anchorScrolling || !fragment) return;\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteFragment]', fragment);\r\n\r\n this.scrollToFragmentWhenReady(fragment);\r\n });\r\n\r\n afterNextRender(() => {\r\n this.initialized.set(true);\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.cancelFragmentScroll();\r\n });\r\n }\r\n\r\n // Header\r\n public headerConfigUpdated(headerConfig: Partial<HeaderConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('headerConfig', headerConfig);\r\n }\r\n\r\n public headerButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.headerButtonClickEvent.emit(id);\r\n }\r\n\r\n public headerInputSubmitted(value: string): void {\r\n this.headerInputSubmitEvent.emit(value);\r\n }\r\n\r\n public headerInputChanged(value: string): void {\r\n this.scaffoldService.headerInputChangeValue = value;\r\n this.headerInputChangeEvent.emit(value);\r\n }\r\n\r\n // Navbar\r\n public navbarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.navbarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Drawer\r\n public drawerConfigUpdated(drawerConfig: Partial<DrawerConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('drawerConfig', drawerConfig);\r\n }\r\n\r\n // Content title card\r\n public backButtonClicked(): void {\r\n this.routerService.navigateBack();\r\n }\r\n\r\n // Floating button\r\n public floatingButtonConfigUpdated(floatingButtonConfig: Partial<FloatingButtonConfig>): void {\r\n this.scaffoldService.updateScaffoldProperty('floatingButtonConfig', floatingButtonConfig);\r\n }\r\n\r\n public floatingButtonClicked(id: string): void {\r\n const scrollContainer = this.scrollContainer();\r\n if (!id && scrollContainer) {\r\n scrollContainer.nativeElement.scrollTop = 0;\r\n } else {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.floatingButtonClickEvent.emit(id);\r\n }\r\n }\r\n\r\n // Bottom bar\r\n public bottomBarCloseClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n public bottomBarButtonClicked(id: string): void {\r\n this.scaffoldService.buttonClickEventValue = id;\r\n this.bottomBarButtonClickEvent.emit(id);\r\n }\r\n\r\n // Loading overlay\r\n private async toggleLoadingOverlay(loading: boolean): Promise<void> {\r\n if (loading) {\r\n this.overlayService.open(LoadingOverlayComponent);\r\n } else {\r\n this.overlayService.close();\r\n }\r\n }\r\n\r\n // Anchor scrolling\r\n private scrollToFragmentWhenReady(fragment: string): void {\r\n this.cancelFragmentScroll();\r\n\r\n const defaultView: Window | null = this.document.defaultView;\r\n if (!defaultView) return;\r\n\r\n let attempts: number = 0;\r\n\r\n const tryScroll = (): void => {\r\n if (this.tryScrollToFragment(fragment)) {\r\n this.fragmentAnimationFrameId = null;\r\n return;\r\n }\r\n\r\n attempts += 1;\r\n if (attempts >= this.FRAGMENT_SCROLL_MAX_ATTEMPTS) {\r\n if (this.libraryConfig?.debugging) this.logger.log('[RouteFragmentNotFound]', fragment);\r\n this.fragmentAnimationFrameId = null;\r\n return;\r\n }\r\n\r\n this.fragmentAnimationFrameId = defaultView.requestAnimationFrame(tryScroll);\r\n };\r\n\r\n this.fragmentAnimationFrameId = defaultView.requestAnimationFrame(tryScroll);\r\n }\r\n\r\n // Tries to scroll to the element with the given fragment as id. Returns true if successful, false otherwise.\r\n private tryScrollToFragment(fragment: string): boolean {\r\n const element: HTMLElement | null = this.document.getElementById(fragment);\r\n if (!element) return false;\r\n\r\n element.scrollIntoView({ behavior: 'auto', block: 'start', inline: 'nearest' });\r\n return true;\r\n }\r\n\r\n private cancelFragmentScroll(): void {\r\n const defaultView: Window | null = this.document.defaultView;\r\n if (!defaultView || this.fragmentAnimationFrameId === null) return;\r\n\r\n defaultView.cancelAnimationFrame(this.fragmentAnimationFrameId);\r\n this.fragmentAnimationFrameId = null;\r\n }\r\n}\r\n","<div\r\n class=\"lf-scaffold lf-transitions mat-app-background mat-typography\"\r\n [ngClass]=\"scaffoldConfig()?.cssClass\">\r\n <!-- header -->\r\n <lf-header\r\n [libraryConfig]=\"libraryConfig\"\r\n [headerConfig]=\"headerConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [routeLoading]=\"routeLoading()!\"\r\n [currentRoute]=\"currentRoute()\"\r\n (headerConfigUpdateEvent)=\"headerConfigUpdated($event)\"\r\n (headerButtonClickEvent)=\"headerButtonClicked($event)\"\r\n (headerInputSubmitEvent)=\"headerInputSubmitted($event)\"\r\n (headerInputChangeEvent)=\"headerInputChanged($event)\"></lf-header>\r\n <!-- navbar -->\r\n <lf-navbar\r\n [libraryConfig]=\"libraryConfig\"\r\n [navbarConfig]=\"navbarConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [currentRoute]=\"currentRoute()\"\r\n (navbarButtonClickEvent)=\"navbarButtonClicked($event)\"></lf-navbar>\r\n <!-- content wrapper -->\r\n <div\r\n class=\"lf-content-wrapper\"\r\n [class.lf-show-navbar]=\"navbarConfig()?.enable && !isMobile()\"\r\n [class.lf-show-header]=\"headerConfig()?.enable && !(navbarConfig()?.enable && isMobile())\"\r\n [class.lf-show-navbar-mobile]=\"navbarConfig()?.enable && isMobile() && !headerConfig()?.enable\"\r\n [class.lf-show-header-and-navbar-mobile]=\"\r\n headerConfig()?.enable && navbarConfig()?.enable && isMobile()\r\n \"\r\n [class.lf-transitions]=\"initialized()\"\r\n #scrollContainer\r\n cdkScrollable>\r\n <!-- drawer -->\r\n <lf-drawer\r\n [libraryConfig]=\"libraryConfig\"\r\n [drawerConfig]=\"drawerConfig()\"\r\n [drawerPortal]=\"drawerPortal()\"\r\n [isMobile]=\"isMobile()!\"\r\n [headerEnabled]=\"headerConfig()?.enable!\"\r\n (drawerConfigUpdateEvent)=\"drawerConfigUpdated($event)\">\r\n <!-- drawer content -->\r\n <ng-content select=\"[drawerContent]\" drawerContent></ng-content>\r\n <!-- content title card -->\r\n <lf-content-title-card\r\n [libraryConfig]=\"libraryConfig\"\r\n [contentTitleCardConfig]=\"contentTitleCardConfig()\"\r\n [isMobile]=\"isMobile()!\"\r\n [routeHistory]=\"routeHistory()!\"\r\n (backButtonClickEvent)=\"backButtonClicked()\"></lf-content-title-card>\r\n <!-- main content -->\r\n <div\r\n class=\"lf-content\"\r\n [class.lf-content-mobile]=\"isMobile()\"\r\n [class.lf-show-footer]=\"footerConfig()?.enable\"\r\n #content>\r\n <ng-content></ng-content>\r\n <!-- to top button -->\r\n <lf-floating-button\r\n [libraryConfig]=\"libraryConfig\"\r\n [floatingButtonConfig]=\"floatingButtonConfig()\"\r\n [onTop]=\"scrollTopPosition() <= 0\"\r\n [isMobile]=\"isMobile()!\"\r\n [drawerEnabled]=\"drawerConfig()?.enable! && drawerConfig()?.open!\"\r\n [navbarEnabled]=\"navbarConfig()?.enable!\"\r\n [bottomBarEnabled]=\"bottomBarConfig()?.enable!\"\r\n (floatingButtonConfigUpdateEvent)=\"floatingButtonConfigUpdated($event)\"\r\n (floatingButtonClickEvent)=\"floatingButtonClicked($event)\"></lf-floating-button>\r\n </div>\r\n <!-- footer -->\r\n <lf-footer [libraryConfig]=\"libraryConfig\" [footerConfig]=\"footerConfig()\"></lf-footer>\r\n </lf-drawer>\r\n </div>\r\n <!-- bottom bar -->\r\n <lf-bottom-bar\r\n [libraryConfig]=\"libraryConfig\"\r\n [bottomBarConfig]=\"bottomBarConfig()\"\r\n [isMobile]=\"isMobile()! && navbarConfig()?.enable!\"\r\n [navbarEnabled]=\"navbarConfig()?.enable!\"\r\n (bottomBarCloseClickEvent)=\"bottomBarCloseClicked($event)\"\r\n (bottomBarButtonClickEvent)=\"bottomBarButtonClicked($event)\"></lf-bottom-bar>\r\n</div>\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-color-picker',\r\n templateUrl: './color-picker.component.html',\r\n styleUrls: ['./color-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [FormsModule, MatButtonModule, MatIconModule, MatTooltipModule],\r\n})\r\nexport class ColorPickerComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn' | string>('primary');\r\n public readonly label = input<string>();\r\n public readonly matIcon = input<string>();\r\n public readonly disabled = input<boolean>(false);\r\n public readonly tooltip = input<string>();\r\n\r\n public readonly colorChangeEvent = output<string>();\r\n\r\n public isSafari = signal<boolean>(false);\r\n\r\n public selectedColor = linkedSignal<string>(() => {\r\n const color: 'primary' | 'accent' | 'warn' | string = this.color();\r\n if (color && color !== 'primary' && color !== 'accent' && color !== 'warn') {\r\n return color;\r\n }\r\n\r\n return '';\r\n });\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.isSafari.set(/^((?!chrome|android).)*safari/i.test(navigator.userAgent));\r\n }\r\n }\r\n\r\n public labelColor = computed<string>(() => {\r\n const hex = this.selectedColor().replace('#', '');\r\n\r\n const r = parseInt(hex.substr(0, 2), 16);\r\n const g = parseInt(hex.substr(2, 2), 16);\r\n const b = parseInt(hex.substr(4, 2), 16);\r\n\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n\r\n return brightness > 128 ? '#000000' : '#ffffff';\r\n });\r\n\r\n public selectColor(event: string): void {\r\n this.selectedColor.set(event);\r\n this.colorChangeEvent.emit(event);\r\n }\r\n}\r\n","@if (!isSafari()) {\r\n <input\r\n style=\"opacity: 0; position: absolute; width: 0; height: 36px; border: none\"\r\n #colorPicker\r\n type=\"color\"\r\n onclick=\"this.value = null\"\r\n [ngModel]=\"selectedColor()\"\r\n (ngModelChange)=\"selectColor($event)\" />\r\n\r\n <button\r\n mat-flat-button\r\n class=\"lf-button\"\r\n type=\"button\"\r\n [color]=\"selectedColor() ? null : color()\"\r\n [style.background]=\"selectedColor()\"\r\n [style.color]=\"labelColor()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"colorPicker.click()\"\r\n [matTooltip]=\"tooltip()\">\r\n <!-- icon -->\r\n @if (matIcon()) {\r\n <mat-icon>\r\n {{ matIcon() }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n {{ label() }}\r\n </button>\r\n} @else {\r\n <input\r\n style=\"width: 36px; height: 36px\"\r\n #colorPicker\r\n type=\"color\"\r\n [ngModel]=\"selectedColor()\"\r\n (ngModelChange)=\"selectColor($event)\" />\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\nimport { Logger } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-file-upload',\r\n templateUrl: './file-upload.component.html',\r\n styleUrls: ['./file-upload.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [FormsModule, MatButtonModule, MatIconModule, MatTooltipModule],\r\n})\r\nexport class FileUploadComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private logger: Logger = inject(Logger);\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn'>('primary');\r\n public readonly label = input<string>();\r\n public readonly matIcon = input<string>();\r\n // @Input() public loading: boolean;\r\n public readonly disabled = input<boolean>(false);\r\n public readonly accept = input<string>();\r\n public readonly tooltip = input<string>();\r\n\r\n public readonly fileChangeEvent = output<File>();\r\n\r\n public selectFile(event: Event): void {\r\n const input: HTMLInputElement = event.target as HTMLInputElement;\r\n\r\n if (!input || !input.files) return;\r\n const file: File = input.files[0];\r\n\r\n if (!file) return;\r\n\r\n this.logger.log('[FileUploadComponent]', file);\r\n this.fileChangeEvent.emit(file);\r\n }\r\n}\r\n","<input\r\n hidden\r\n #file\r\n type=\"file\"\r\n onclick=\"this.value = null\"\r\n [accept]=\"accept()\"\r\n (change)=\"selectFile($event)\" />\r\n\r\n<button\r\n mat-flat-button\r\n class=\"lf-button\"\r\n type=\"button\"\r\n [color]=\"color()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"file.click()\"\r\n [matTooltip]=\"tooltip()\">\r\n <!-- icon -->\r\n @if (matIcon()) {\r\n <mat-icon>\r\n {{ matIcon() }}\r\n </mat-icon>\r\n }\r\n <!-- @else if (svgIcon) {\r\n <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\r\n } -->\r\n <!-- } -->\r\n {{ label() }}\r\n <!-- </span> -->\r\n</button>\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[lfListItemAvatar]',\r\n})\r\nexport class ListItemAvatarDirective {\r\n public templateRef = inject(TemplateRef<any>);\r\n}\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}\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}\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}\r\n","import { CdkDragDrop, DragDropModule, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { KeyValuePipe, NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n contentChild,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { map } from 'rxjs';\r\nimport {\r\n ListItemAvatarDirective,\r\n ListItemButtonsDirective,\r\n ListItemSubtitleDirective,\r\n ListItemTitleDirective,\r\n} from '../../../directives';\r\nimport { Button, ListConfig, ListHeader, ListItem, ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\nimport { BreakpointService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-list',\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n DragDropModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatRippleModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatDividerModule,\r\n KeyValuePipe,\r\n NgClass,\r\n NgTemplateOutlet,\r\n ],\r\n})\r\nexport class ListComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private breakpointService = inject(BreakpointService);\r\n\r\n public readonly avatarTemplate = contentChild(ListItemAvatarDirective);\r\n public readonly titleTemplate = contentChild(ListItemTitleDirective);\r\n public readonly subtitleTemplate = contentChild(ListItemSubtitleDirective);\r\n public readonly buttonsTemplate = contentChild(ListItemButtonsDirective);\r\n\r\n public readonly config = input<ListConfig | null>(null);\r\n public readonly header = input<ListHeader | null>(null);\r\n public readonly items = input<ListItem[]>([]);\r\n public readonly groupedItems = input<Map<string, ListItem[]>>(new Map());\r\n public readonly buttons = input<Button[]>([]);\r\n\r\n public readonly dropListId = input<string>();\r\n public readonly connectedDropListIds = input<string[]>();\r\n\r\n public readonly sortChangeEvent = output<{ sortToken: string; sortAsc: boolean }>();\r\n public readonly selectionChangeEvent = output<ListItem[]>();\r\n public readonly itemClickEvent = output<ListItem>();\r\n public readonly itemDropEvent = output<{ items: ListItem[]; id: string }>();\r\n public readonly buttonClickEvent = output<{ buttonId: string; item: ListItem }>();\r\n\r\n public isMobile = toSignal(\r\n this.breakpointService.breakpoint$.pipe(\r\n map((state: BreakpointState) => state.breakpoints[Breakpoints.XSmall]),\r\n ),\r\n );\r\n\r\n public sortToken = signal<string>('');\r\n public sortAsc = signal<boolean>(true);\r\n public allSelected = model<boolean>(false);\r\n\r\n get someSelected(): boolean {\r\n return (\r\n this.items().length > 0 &&\r\n this.items().some((item: ListItem) => item.checked) &&\r\n !this.allSelected()\r\n );\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 constructor() {\r\n effect(() => {\r\n const config: ListConfig | null = this.config();\r\n if (!config) return;\r\n\r\n const initialSortToken: string = config.initialSortToken || '';\r\n const initialSortAsc: boolean = config.initialSortAsc || false;\r\n\r\n this.sortToken.set(initialSortToken);\r\n this.sortAsc.set(initialSortAsc);\r\n\r\n if (initialSortToken) {\r\n queueMicrotask(() => {\r\n this.updateSortToken(initialSortToken, true);\r\n });\r\n }\r\n });\r\n\r\n effect(() => {\r\n const items: ListItem[] = this.items();\r\n this.allSelected.set(items.length > 0 && items.every((item: ListItem) => item.checked));\r\n });\r\n }\r\n\r\n // Update the sort token\r\n public updateSortToken(sortToken: string | undefined, initial?: boolean): void {\r\n if (!sortToken) return;\r\n if (this.sortToken() === sortToken && !initial) this.sortAsc.set(!this.sortAsc());\r\n this.sortToken.set(sortToken);\r\n this.sortChangeEvent.emit({ sortToken: this.sortToken(), sortAsc: this.sortAsc() });\r\n }\r\n\r\n // Select all items\r\n public selectAll(event: MatCheckboxChange): void {\r\n this.allSelected.set(event.checked);\r\n\r\n this.items().forEach((item: ListItem) => {\r\n if (!item.disabled) item.checked = this.allSelected();\r\n });\r\n\r\n this.selectionChangeEvent.emit(this.items());\r\n }\r\n\r\n // Select single item\r\n public selectItem(item: ListItem, event: MatCheckboxChange): void {\r\n if (this.config()?.disableMultiselect)\r\n this.items().forEach((item: ListItem) => {\r\n item.checked = false;\r\n });\r\n this.allSelected.set(\r\n this.items().length > 0 && this.items().every((item: ListItem) => item.checked),\r\n );\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(\r\n event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex,\r\n );\r\n this.itemDropEvent.emit({ items: event.container.data, id });\r\n }\r\n\r\n // Handle button click events\r\n public clickButton(event: { buttonId: string; item: ListItem }, click: Event): void {\r\n this.stopPropagation(click);\r\n this.buttonClickEvent.emit(event);\r\n }\r\n\r\n // Combine list and item buttons\r\n public getCombinedButtons(item: ListItem): Button[] {\r\n return [...(item.buttons ?? []), ...(this.buttons() ?? [])];\r\n }\r\n\r\n // Handle image errors\r\n public onImageError(event: Event): void {\r\n const target = event.target as HTMLImageElement;\r\n target.src = this.config()?.avatarFallbackPath || '';\r\n }\r\n\r\n // Stop click trough events\r\n public stopPropagation(click: Event): void {\r\n // click.preventDefault();\r\n // click.stopPropagation();\r\n click.stopImmediatePropagation();\r\n }\r\n}\r\n","<div class=\"lf-list\" cdkDropListGroup>\r\n <!-- Header -->\r\n @if (header(); as header) {\r\n <div\r\n class=\"lf-list-item lf-list-item-header\"\r\n [class.gap-2]=\"!isMobile()\"\r\n [class.gap-1]=\"isMobile()\">\r\n <!-- avatar -->\r\n @if (header.avatar) {\r\n <div class=\"lf-list-item-avatar px-1\">\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-1\">\r\n <!-- icon -->\r\n @if (header.matIcon) {\r\n <mat-icon>\r\n {{ header.matIcon }}\r\n </mat-icon>\r\n } @else if (header.svgIcon) {\r\n <mat-icon [svgIcon]=\"header.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n } @else if (hasAvatars) {\r\n <div class=\"lf-list-item-avatar px-1\"></div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper flex-row\">\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\" [class.gap-2]=\"!isMobile()\" [class.gap-1]=\"isMobile()\">\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\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon\"\r\n [class.disabled]=\"button.disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"button.disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item: null! }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config()?.enableSelection && !config()?.disableMultiselect) {\r\n <div class=\"lf-list-item-checkbox\">\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\r\n class=\"lf-list-item lf-list-group-header\"\r\n [class.gap-2]=\"!isMobile()\"\r\n [class.gap-1]=\"isMobile()\">\r\n <div class=\"lf-list-item-avatar px-1\"></div>\r\n <div class=\"lf-list-item-title-wrapper flex-row\">\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.gap-2]=\"!isMobile()\"\r\n [class.gap-1]=\"isMobile()\"\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-1\">\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-1\">\r\n <!-- icon -->\r\n @if (item.matIcon) {\r\n <mat-icon>\r\n {{ item.matIcon }}\r\n </mat-icon>\r\n } @else if (item.svgIcon) {\r\n <mat-icon [svgIcon]=\"item.svgIcon\"></mat-icon>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- title -->\r\n <div class=\"lf-list-item-title-wrapper\">\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\" [class.gap-2]=\"!isMobile()\" [class.gap-1]=\"isMobile()\">\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\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n {{ button.label }}\r\n </button>\r\n } @else {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"button.cssClass\"\r\n [disabled]=\"disabled\"\r\n [matTooltip]=\"button.tooltip\"\r\n [aria-label]=\"button.id || button.tooltip\"\r\n (click)=\"clickButton({ buttonId: button.id, item }, $event)\">\r\n <!-- icon -->\r\n @if (button.matIcon) {\r\n <mat-icon>\r\n {{ button.matIcon }}\r\n </mat-icon>\r\n } @else if (button.svgIcon) {\r\n <mat-icon [svgIcon]=\"button.svgIcon\"></mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n }\r\n }\r\n\r\n <!-- drag -->\r\n @if (config()?.enableDragging) {\r\n <button\r\n mat-icon-button\r\n class=\"lf-list-item-icon\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n [aria-label]=\"'Drag handle'\"\r\n (click)=\"stopPropagation($event)\"\r\n cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- checkbox -->\r\n @if (config()?.enableSelection) {\r\n <div class=\"lf-list-item-checkbox\">\r\n <mat-checkbox\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled!\"\r\n (change)=\"selectItem(item, $event)\"\r\n (click)=\"stopPropagation($event)\"></mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (config()?.showDividers && !last) {\r\n <mat-divider></mat-divider>\r\n }\r\n </ng-template>\r\n</div>\r\n","import { BreakpointState, Breakpoints } from '@angular/cdk/layout';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { map } from 'rxjs';\r\nimport { BreakpointService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'lf-notification',\r\n templateUrl: './notification.component.html',\r\n styleUrls: ['./notification.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatButtonModule, MatIconModule],\r\n})\r\nexport class NotificationComponent {\r\n private breakpointService = inject(BreakpointService);\r\n\r\n public readonly color = input<'primary' | 'accent' | 'warn'>('primary');\r\n public readonly message = input<string>('');\r\n public readonly link = input<string>('');\r\n public readonly linkText = input<string>('');\r\n public readonly action = input<string>('');\r\n public readonly matIcon = input<string>('');\r\n public readonly svgIcon = input<string>('');\r\n public readonly static = input<boolean>(false);\r\n public readonly minimal = input<boolean>(false);\r\n public readonly cssClass = input<string>('');\r\n\r\n public readonly clickEvent = output();\r\n\r\n public isMobile = toSignal(\r\n this.breakpointService.breakpoint$.pipe(\r\n map((state: BreakpointState) => state.breakpoints[Breakpoints.XSmall]),\r\n ),\r\n );\r\n}\r\n","<div\r\n class=\"lf-notification\"\r\n [class.mat-elevation-z2]=\"!static()\"\r\n [class.lf-notification-fixed]=\"!static()\"\r\n [class.lf-notification-static]=\"static()\"\r\n [class.lf-notification-minimal]=\"minimal()\"\r\n [class.lf-mobile]=\"isMobile()\"\r\n [class]=\"[cssClass(), color()]\"\r\n animate.enter=\"lf-anim-scale-enter\">\r\n <div\r\n class=\"lf-notification-content flex-row-nowrap gap-2\"\r\n [class.justify-center]=\"minimal()\"\r\n [class.justify-between]=\"!minimal()\"\r\n [class.flex-col]=\"isMobile()\"\r\n [class.align-center]=\"!isMobile()\"\r\n [class.align-start]=\"isMobile()\">\r\n <span\r\n class=\"lf-notification-message flex-row-nowrap align-center justify-start\"\r\n [class.gap-4]=\"!isMobile()\"\r\n [class.gap-2]=\"isMobile()\">\r\n @if (matIcon()) {\r\n <mat-icon class=\"flex-none\" [color]=\"color()\">{{ matIcon() }}</mat-icon>\r\n }\r\n <span [class.ml-1]=\"!matIcon()\">\r\n {{ message() }}\r\n @if (link() && linkText()) {\r\n <a class=\"lf-notification-link\" [href]=\"link()\">{{ linkText() }}</a>\r\n }\r\n </span>\r\n </span>\r\n\r\n @if (action(); as action) {\r\n <button\r\n mat-flat-button\r\n class=\"lf-notification-action\"\r\n [class.align-self-end]=\"isMobile()\"\r\n [color]=\"color()\"\r\n (click)=\"clickEvent.emit()\">\r\n {{ action }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { PlaceholderConfig, ScaffoldLibraryConfig } from '../../../models';\r\nimport { CONFIG } from '../../../scaffold.config';\r\n\r\n@Component({\r\n selector: 'lf-placeholder',\r\n templateUrl: './placeholder.component.html',\r\n styleUrls: ['./placeholder.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatButtonModule, MatIconModule, MatTooltipModule, NgClass],\r\n})\r\nexport class PlaceholderComponent {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n\r\n public readonly placeholderConfig = input<PlaceholderConfig>();\r\n\r\n public readonly buttonClickEvent = output<void>();\r\n}\r\n","@if (placeholderConfig(); as config) {\r\n <div class=\"lf-placeholder\" [ngClass]=\"config.cssClass\">\r\n <!-- icon -->\r\n @if (config.matIcon) {\r\n <mat-icon class=\"lf-placeholder-icon\">\r\n {{ config.matIcon }}\r\n </mat-icon>\r\n } @else if (config.svgIcon) {\r\n <mat-icon class=\"lf-placeholder-icon\" [svgIcon]=\"config.svgIcon\"></mat-icon>\r\n } @else if (config.imgIcon) {\r\n <img\r\n class=\"lf-placeholder-image\"\r\n [src]=\"config.imgIcon\"\r\n width=\"96\"\r\n alt=\"Placeholder image\"\r\n loading=\"lazy\" />\r\n }\r\n <!-- heading -->\r\n @if (config.title) {\r\n <p class=\"lf-placeholder-title mt-2\">\r\n {{ config.title }}\r\n </p>\r\n }\r\n <!-- message -->\r\n @if (config.message) {\r\n <p class=\"lf-placeholder-message mt-1\">\r\n {{ config.message }}\r\n </p>\r\n }\r\n <!-- action -->\r\n @if (config.button) {\r\n <button\r\n mat-button\r\n class=\"mt-4\"\r\n color=\"accent\"\r\n [ngClass]=\"config.button.cssClass\"\r\n [disabled]=\"config.button.disabled\"\r\n (click)=\"buttonClickEvent.emit()\"\r\n [matTooltip]=\"config.button.tooltip\">\r\n <!-- icon -->\r\n @if (config.button.matIcon) {\r\n <mat-icon>\r\n {{ config.button.matIcon }}\r\n </mat-icon>\r\n } @else if (config.button.svgIcon) {\r\n <mat-icon [svgIcon]=\"config.button.svgIcon\"></mat-icon>\r\n }\r\n {{ config.button.label }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable, finalize } from 'rxjs';\r\nimport { ScaffoldLibraryConfig } from '../models';\r\nimport { CONFIG } from '../scaffold.config';\r\nimport { Logger, ScaffoldService } from '../services';\r\n\r\n@Injectable()\r\nexport class ScaffoldLoadingInterceptor implements HttpInterceptor {\r\n public libraryConfig = inject<ScaffoldLibraryConfig>(CONFIG, { optional: true });\r\n private scaffoldService = inject(ScaffoldService);\r\n private logger = inject(Logger);\r\n\r\n private activeRequests = 0;\r\n private loadingDelay = 100; // milliseconds\r\n private spinnerTimeout: ReturnType<typeof setTimeout>;\r\n\r\n public intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n this.activeRequests++;\r\n\r\n // Set a delayed spinner timeout\r\n if (this.activeRequests === 1) {\r\n this.spinnerTimeout = setTimeout(() => {\r\n this.scaffoldService.updateScaffoldProperty('loading', true);\r\n }, this.loadingDelay);\r\n }\r\n\r\n return next.handle(req).pipe(\r\n // tap({\r\n // next: (event) => {\r\n // if (event instanceof HttpResponse) {\r\n // // Successful response\r\n // }\r\n // },\r\n // error: (error: HttpErrorResponse) => {\r\n // // Handle error if needed\r\n // }\r\n // }),\r\n finalize(() => {\r\n this.activeRequests = Math.max(0, this.activeRequests - 1);\r\n if (this.libraryConfig?.debugging)\r\n this.logger.log(\r\n `[Interceptor] Request finalized: ${req.url}, Active requests now: ${this.activeRequests}`,\r\n );\r\n\r\n if (this.activeRequests === 0) {\r\n clearTimeout(this.spinnerTimeout);\r\n this.scaffoldService.updateScaffoldProperty('loading', false);\r\n }\r\n }),\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of components\r\n */\r\n\r\n/* CONFIG */\r\nexport * from './lib/scaffold.config';\r\n/* MODELS */\r\nexport * from './lib/models';\r\n/* COMPONENTS */\r\nexport * from './lib/components/scaffold/scaffold.component';\r\nexport * from './lib/shared/components/color-picker/color-picker.component';\r\nexport * from './lib/shared/components/file-upload/file-upload.component';\r\nexport * from './lib/shared/components/list/list.component';\r\nexport * from './lib/shared/components/notification/notification.component';\r\nexport * from './lib/shared/components/placeholder/placeholder.component';\r\n/* DIRECTIVES */\r\nexport * from './lib/directives';\r\n/* SERVICES */\r\nexport * from './lib/services';\r\n/* INTERCEPTORS */\r\nexport * from './lib/interceptors/loading.interceptor';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i2","i3","i1","i5","i6","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;;AAIG;AACI,MAAM,mBAAmB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AACvD,MAAM,oBAAoB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AAEhE,MAAM,uBAAuB,GAAG,mEAAmE;AAEnG;;;;;;;;AAQG;AAEG,MAAO,oBAAqB,SAAQ,YAAY,CAAA;AADtD,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AA6BtD,IAAA;AA3BiB,IAAA,UAAU,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AAEtE,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,mBAAmB,GAAG,oBAAoB;QAE7F,OAAO;YACL,OAAO,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;AAChD,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,WAAW,EAAE,MAAK,EAAE,CAAC;AACrB,YAAA,cAAc,EAAE,MAAK,EAAE,CAAC;AACxB,YAAA,gBAAgB,EAAE,MAAK,EAAE,CAAC;AAC1B,YAAA,mBAAmB,EAAE,MAAK,EAAE,CAAC;AAC7B,YAAA,aAAa,EAAE,MAAM,KAAK;SACE;IAChC;;IAGQ,eAAe,GAAA;AACrB,QAAA,MAAM,OAAO,GAAwB,IAAI,CAAC,OAAO,EAAE,OAAO;AAC1D,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAE1B,MAAM,IAAI,GAAkB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAC3D,QAAA,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEpC,QAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACtE;8GA9BW,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;AAkCD;;;AAGG;SACa,iBAAiB,CAAC,KAAa,EAAE,KAAa,EAAE,MAAc,EAAA;;IAE5E,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAc,KAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,SAAiB,KAAI;QAChD,MAAM,GAAG,GAA4B,SAAS,CAAC,KAAK,CAAC,yBAAyB,CAAC;AAC/E,QAAA,IAAI,GAAG;YAAE,OAAO,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3C,MAAM,GAAG,GAA4B,SAAS,CAAC,KAAK,CAAC,yBAAyB,CAAC;AAC/E,QAAA,IAAI,GAAG;YAAE,OAAO,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3C,QAAA,IAAI,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO,MAAM,IAAI,KAAK;AACrE,QAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,GAAG,MAAM;AAErE,QAAA,OAAO,KAAK;IACd,CAAC,CAAC,CACH;AACH;;MCnEa,MAAM,GAAG,IAAI,cAAc,CAAwB,QAAQ;AAElE,SAAU,eAAe,CAAC,MAAA,GAAgC,EAAE,EAAA;AAChE,IAAA,MAAM,SAAS,GAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;;AAGrE,IAAA,IAAI,MAAM,CAAC,cAAc,EAAE;AACzB,QAAA,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IAC3E;AAEA,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;MChBa,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAEvC,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;AAChC,IAAA;8GANY,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;;;MCIrB,aAAa,CAAA;AAH1B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAiDtC,IAAA;AA/CC;;;;;AAKG;IACI,MAAM,iBAAiB,CAAC,MAA2B,EAAA;QACxD,MAAM,EAAE,sBAAsB,EAAE,GAC9B,MAAM,OAAO,4DAAsE,CAAC;QAEtF,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,MAAM;AACb,SAAA,CAAC;AACF,QAAA,OAAO,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IAChD;AAEA;;;;;;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;IACI,MAAM,eAAe,CAAC,MAAyB,EAAA;QACpD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,+DAAoD;QAErF,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,iBAAiB;AAC9B,SAAA,CAAC;AACF,QAAA,OAAO,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IAChD;8GAjDW,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,MAAM;AACnB,iBAAA;;;MCFY,MAAM,CAAA;AADnB,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAqClF,IAAA;AAnCC;;;;;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;8GArCW,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;;;MCKrB,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;QAIU,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAiIhC,IAAA;AA/HC;;;;;AAKG;IACI,OAAO,CAAI,GAAW,EAAE,KAAe,EAAA;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;AAEzC,QAAA,IAAI;YACF,MAAM,WAAW,GAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACjD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,YAAA,CAAc,EAAE,WAAW,CAAC;AAC/D,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,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;AAEzC,QAAA,IAAI;YACF,MAAM,YAAY,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,YAAA,CAAc,EAAE,YAAY,CAAC;AAChE,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,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,IAAI;AAEpD,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,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAO,GAAG,IAAI;QAChE;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,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,IAAI;AAEpD,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,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAO,GAAG,IAAI;QACtE;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,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,IAAI;AAEpD,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,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;AAEzC,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;AACV,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QAEzC,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;8GAnIW,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,MAAM;AACnB,iBAAA;;;MCEY,cAAc,CAAA;AAH3B,IAAA,WAAA,GAAA;QAIS,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAEvB,IAAA,CAAA,UAAU,GAAsB,IAAI;AAyB7C,IAAA;AAvBQ,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,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC;AAEvF,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;AAEtB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC;AACvF,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;8GA7BW,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,MAAM;AACnB,iBAAA;;;MCHY,aAAa,CAAA;AAMxB,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;AAnCQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhC,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,CAAC,KAAK,KAAI;YACrC,IAAI,cAAc,GAAW,CAAC;AAE9B,YAAA,IAAI,KAAK,YAAY,oBAAoB,EAAE;AACzC,gBAAA,cAAc,EAAE;YAClB;AACA,YAAA,IAAI,KAAK,YAAY,kBAAkB,EAAE;AACvC,gBAAA,cAAc,EAAE;YAClB;AACA,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,CAAC,YAAY,KAAI;AAC3D,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,CAAC,MAAM,KAAI;wBAClF,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;8GAlGW,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,cADA,MAAM,EAAA,CAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAGvB,QAAA,IAAA,CAAA,gBAAgB,GAAoC,IAAI,eAAe,CAC7E,EAAE,CACH;;AAgBO,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,CAE1C,IAAI,CAAC;AAsCR,IAAA;AA7EC,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;AAOA,IAAA,IAAW,aAAa,GAAA;AAGtB,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,CAC3B,QAAW,EACX,KAAqD,EAAA;QAErD,MAAM,YAAY,GAAmB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AACrE,QAAA,MAAM,YAAY,GAAsB,YAAY,CAAC,QAAQ,CAAC;AAC9D,QAAA,IAAI,QAA2B;AAE/B,QAAA,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC1F,QAAQ,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAuB;QAC/D;aAAO;YACL,QAAQ,GAAG,KAA0B;QACvC;AAEA,QAAA,IAAI,QAAQ,KAAK,YAAY,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAE,EAAE,QAAQ,CAAC;YACrE;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAE,EAAE,QAAQ,CAAC;AAClE,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;IACvE;8GArFW,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;;;MCErB,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;AAEvB,QAAA,IAAA,CAAA,QAAQ,GAAsC,IAAI,eAAe,CAAmB,IAAI,CAAC;AA2ElG,IAAA;AAzEC,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;IACrC;AAEA;;;;;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;AACvD,QAAA,MAAM,mBAAmB,GAAY,SAAS,CAAC,uBAAuB,IAAI,KAAK;QAC/E,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,CACf,CAAA,mEAAA,EAAsE,UAAU,CAAA,4BAAA,CAA8B,CAC/G;YACH;YACA,MAAM,SAAS,GACb,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK;AAChF,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,CACf,CAAA,yEAAA,EAA4E,gBAAgB,CAAA,kCAAA,CAAoC,CACjI;YACH;AACA,YAAA,MAAM,eAAe,GACnB,WAAW,CAAC,MAAM,GAAG;AACnB,kBAAE,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,GAAG;kBACjD,WAAW;AACjB,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;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,GAAG,SAAS,GAAG,CAAA,EAAG,IAAI,IAAI,SAAS,CAAA,CAAE,CAAC;QAC9E;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;8GAhFW,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,MAAM;AACnB,iBAAA;;;MCIY,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;QAErB,IAAA,CAAA,iBAAiB,GAAW,IAAI;QAChC,IAAA,CAAA,4BAA4B,GAAkC,QAAQ;QACtE,IAAA,CAAA,0BAA0B,GAAgC,QAAQ;AAElE,QAAA,IAAA,CAAA,YAAY,GAAsB;YACjD,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,kBAAkB,EAAE,IAAI,CAAC,4BAA4B;YACrD,gBAAgB,EAAE,IAAI,CAAC,0BAA0B;SAClD;AAEgB,QAAA,IAAA,CAAA,aAAa,GAAsB;AAClD,YAAA,QAAQ,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC;YACpC,kBAAkB,EAAE,IAAI,CAAC,4BAA4B;YACrD,gBAAgB,EAAE,IAAI,CAAC,0BAA0B;SAClD;AAgBF,IAAA;;AAbQ,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,CAC3B,OAAe,EACf,MAAc,EACd,MAA0B,EAAA;QAE1B,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;8GAhCW,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,MAAM;AACnB,iBAAA;;;MCJY,YAAY,CAAA;AAQvB,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;AAEA,IAAA,WAAA,GAAA;AAXQ,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC5C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;QAE5B,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;8GA5DW,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,MAAM;AACnB,iBAAA;;;ACID,MAAM,cAAc,GAAoE;AACtF,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,OAAO,EAAE,IAAI;CACd;AAED;;;;;;AAMG;MAEU,kBAAkB,CAAA;AAsC7B,IAAA,WAAA,GAAA;AArCiB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACrC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;QAEzE,IAAA,CAAA,WAAW,GAAG,UAAU;;AAGxB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAoB;;QAGnC,IAAA,CAAA,KAAK,GAAa,EAAE;AAEpB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAS,IAAI,CAAC,MAAM,CAAC,cAAc;oFAAC;AACpD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAW,IAAI,CAAC,KAAK;sFAAC;QACxC,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAU,KAAK;qFAAC;;AAGlC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;;AAElC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;;AAEtC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;;AAEpC,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,CAAC,MAAM,CAAC,OAAO;;AAGhD,QAAA,IAAA,CAAA,OAAO,GAAuB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;;;QAGxD,IAAA,CAAA,SAAS,GAAyB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CACjF,MAAM,CAAC,CAAC,QAAkB,KAAK,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,CACxD;AACe,QAAA,IAAA,CAAA,QAAQ,GAAwB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAGzE,IAAI,CAAC,IAAI,EAAE;IACb;AAEA;;;AAGG;IACI,UAAU,GAAA;QACf,OAAO,IAAI,CAAC,SAAiC;IAC/C;AAEA;;;;AAIG;IACI,cAAc,GAAA;QACnB,OAAO,IAAI,CAAC,SAAqC;IACnD;AAEA;;;;;AAKG;IACI,MAAM,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IACrD;AAEQ,IAAA,MAAM,WAAW,CAAC,MAAc,EAAE,OAAgB,EAAA;QACxD,MAAM,MAAM,GAAW,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;AACxD,cAAE;AACF,cAAE,IAAI,CAAC,MAAM,CAAC,cAAc;AAE9B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAEjC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;QAChD;AAEA,QAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACrC;IAEQ,IAAI,GAAA;;QAEV,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YAC/B;QACF;AAEA,QAAA,MAAM,MAAM,GAAkB,IAAI,CAAC,MAAM,CAAC;cACtC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAS,IAAI,CAAC,WAAW;cAC7C,IAAI;QACR,MAAM,OAAO,GACX,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;;AAE/E,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;IAClC;IAEQ,YAAY,GAAA;QAClB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc;QACnC;AAEA,QAAA,MAAM,aAAa,GAAW,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;IACjG;IAEQ,MAAM,gBAAgB,CAAC,MAAc,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAEvB,QAAA,IAAI;YACF,MAAM,MAAM,GAAa,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAEvD,IAAI,MAAM,GAAa,MAAM;YAC7B,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AACzC,gBAAA,IAAI;AACF,oBAAA,MAAM,QAAQ,GAAa,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;AAC7E,oBAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACtC;gBAAE,OAAO,KAAK,EAAE;;;AAGd,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,CAAA,+BAAA,EAAkC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAA,gBAAA,CAAkB,EAC9E,KAAK,CACN;gBACH;YACF;;AAGA,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE;AAC7B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5B;QACF;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,qCAAA,EAAwC,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;QAC7E;gBAAU;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B;IACF;IAEQ,MAAM,WAAW,CAAC,MAAc,EAAA;QACtC,MAAM,MAAM,GAAyB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3D,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;QAEA,MAAM,IAAI,GAAa,MAAM,cAAc,CACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAA,KAAA,CAAO,CAAC,CAC7D;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC5B,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,oBAAoB,CAAC,MAAc,EAAA;QACzC,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;IAC9D;AAEQ,IAAA,aAAa,CAAC,MAA0B,EAAA;QAC9C,MAAM,IAAI,GAAW,MAAM,EAAE,IAAI,IAAI,cAAc,CAAC,IAAI;QACxD,OAAO;AACL,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;AAC9B,YAAA,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI;AACtE,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;AAC5C,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,cAAc,CAAC,OAAO;SACnD;IACH;8GArKW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,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,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAyKlC;AACA,SAAS,SAAS,CAAC,IAAc,EAAE,QAAkB,EAAA;AACnD,IAAA,MAAM,MAAM,GAAa,EAAE,GAAG,IAAI,EAAE;IAEpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACvC,QAAA,MAAM,aAAa,GAAsB,QAAQ,CAAC,GAAG,CAAC;AACtD,QAAA,MAAM,SAAS,GAAkC,MAAM,CAAC,GAAG,CAAC;QAE5D,MAAM,CAAC,GAAG,CAAC;AACT,YAAA,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,aAAa;AAC/C,kBAAE,SAAS,CAAC,SAAS,EAAE,aAAa;kBAClC,aAAa;IACrB;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;AACA;AACA,SAAS,UAAU,CAAC,KAAc,EAAA;AAChC,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7E;;MCpMa,kBAAkB,CAAA;AAR/B,IAAA,WAAA,GAAA;QASkB,IAAA,CAAA,aAAa,GAAG,KAAK,CAA+B,IAAI;0FAAC;QACzD,IAAA,CAAA,eAAe,GAAG,KAAK,CAAyB,IAAI;4FAAC;QACrD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK;0FAAC;QAErC,IAAA,CAAA,wBAAwB,GAAG,MAAM,EAAU;QAC3C,IAAA,CAAA,yBAAyB,GAAG,MAAM,EAAU;AAa7D,IAAA;AAXQ,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;8GAnBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB/B,8kFAoEA,EAAA,MAAA,EAAA,CAAA,qlBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtDY,eAAe,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,UAAA,EAAA,IAAA,EAAE,aAAa,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,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,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,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE1E,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,mBAGR,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,8kFAAA,EAAA,MAAA,EAAA,CAAA,qlBAAA,CAAA,EAAA;;;MEC3E,yBAAyB,CAAA;AARtC,IAAA,WAAA,GAAA;QASkB,IAAA,CAAA,aAAa,GAAG,KAAK,CAA+B,IAAI;0FAAC;QACzD,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAgC,IAAI;mGAAC;QACnE,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,YAAY,GAAG,KAAK,CAAW,EAAE;yFAAC;QAElC,IAAA,CAAA,oBAAoB,GAAG,MAAM,EAAQ;AAKtD,IAAA;IAHQ,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;IAClC;8GAVW,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,uBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECftC,ihCA4BA,EAAA,MAAA,EAAA,CAAA,ujBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDfY,aAAa,8IAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAErD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBARrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,eAAA,EAGhB,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,ihCAAA,EAAA,MAAA,EAAA,CAAA,ujBAAA,CAAA,EAAA;;;MEKtD,eAAe,CAAA;AAe1B,IAAA,WAAA,GAAA;QAdgB,IAAA,CAAA,aAAa,GAAG,KAAK,CAA+B,IAAI;0FAAC;QACzD,IAAA,CAAA,YAAY,GAAG,KAAK,CAAsB,IAAI;yFAAC;QAC/C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK;0FAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK;oGAA6D;QAEjF,IAAA,CAAA,uBAAuB,GAAG,MAAM,EAAyB;QAExD,IAAA,CAAA,WAAW,GAAG,MAAM,CAAU,KAAK;wFAAC;QAE7C,IAAA,CAAA,WAAW,GAAG,CAAC;QACN,IAAA,CAAA,mBAAmB,GAAW,EAAE;QAChC,IAAA,CAAA,kBAAkB,GAAW,EAAE;QAG9C,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,YAAY,GAAwB,IAAI,CAAC,YAAY,EAAE;AAC7D,YAAA,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE;AAEzC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAE1B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,EAAE;gBAC/D,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACpD;AACF,QAAA,CAAC,CAAC;IACJ;;IAGO,YAAY,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACvB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACpD;IACF;;AAGO,IAAA,YAAY,CAAC,KAAiB,EAAA;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D;;AAGO,IAAA,UAAU,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;YAAE;AAC1B,QAAA,MAAM,MAAM,GAAW,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW;AACzE,QAAA,IACE,MAAM,IAAI,IAAI,CAAC,kBAAkB;YACjC,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM;AAC3B,YAAA,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAC1B;YACA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACnD;IACF;8GArDW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB5B,ygDAqCA,EAAA,MAAA,EAAA,CAAA,iZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzBY,YAAY,mMAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,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,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMxD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAZ3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,mBAGJ,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAA,IAAA,EAC9D;AACJ,wBAAA,uBAAuB,EAAE,sBAAsB;AAC/C,wBAAA,qBAAqB,EAAE,oBAAoB;AAC5C,qBAAA,EAAA,QAAA,EAAA,ygDAAA,EAAA,MAAA,EAAA,CAAA,iZAAA,CAAA,EAAA;;;MEDU,uBAAuB,CAAA;AAclC,IAAA,WAAA,GAAA;QAbgB,IAAA,CAAA,aAAa,GAAG,KAAK,CAA+B,IAAI;0FAAC;QACzD,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAA8B,IAAI;iGAAC;QAC/D,IAAA,CAAA,KAAK,GAAG,KAAK,CAAU,KAAK;kFAAC;QAC7B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK;0FAAC;QACrC,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK;0FAAC;QACrC,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK;6FAAC;QAExC,IAAA,CAAA,+BAA+B,GAAG,MAAM,EAAiC;QACzE,IAAA,CAAA,wBAAwB,GAAG,MAAM,EAAU;QAE1C,IAAA,CAAA,WAAW,GAAG,MAAM,CAAU,KAAK;wFAAC;QAGnD,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,oBAAoB,GAAgC,IAAI,CAAC,oBAAoB,EAAE;AACrF,YAAA,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE;AAEjD,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAE1B,YAAA,MAAM,iCAAiC,GAAkC;gBACvE,OAAO,EACL,CAAC,oBAAoB,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC;AACrD,sBAAE;AACF,sBAAE,oBAAoB,CAAC,OAAO,IAAI,oBAAoB,CAAC,OAAO;AAClE,gBAAA,kBAAkB,EAAE,oBAAoB,CAAC,kBAAkB,IAAI,OAAO;aACvE;AAED,YAAA,IACE,IAAI,CAAC,SAAS,CAAC,iCAAiC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAC1F;AACA,gBAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,iCAAiC,CAAC;YAC9E;AACF,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,aAAa,CAAC,EAAW,EAAA;QAC9B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9C;8GAvCW,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,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfpC,myCAkCA,EAAA,MAAA,EAAA,CAAA,qxCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrBY,eAAe,4MAAE,aAAa,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,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,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,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAExD,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,myCAAA,EAAA,MAAA,EAAA,CAAA,qxCAAA,CAAA,EAAA;;;MEEzD,eAAe,CAAA;AAR5B,IAAA,WAAA,GAAA;QASkB,IAAA,CAAA,aAAa,GAAG,KAAK,CAA+B,IAAI;0FAAC;QACzD,IAAA,CAAA,YAAY,GAAG,KAAK,CAAsB,IAAI;yFAAC;AAChE,IAAA;8GAHY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECf5B,65CAwCA,EAAA,MAAA,EAAA,CAAA,kpBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3BY,YAAY,+RAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAElD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,65CAAA,EAAA,MAAA,EAAA,CAAA,kpBAAA,CAAA,EAAA;;;MEgBnD,cAAc,CAAA;AAoBzB,IAAA,WAAA,GAAA;QAnBQ,IAAA,CAAA,SAAS,GAAG,MAAM,CAA+B,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClF,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAoB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClF,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEvB,IAAA,CAAA,KAAK,GAAG,SAAS,CAAa,OAAO;kFAAC;QAEtC,IAAA,CAAA,WAAW,GAAG,KAAK,CAA2B,IAAI;wFAAC;QACnD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAEhC,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAU;QACnC,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAU;QACnC,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAQ;AAEhD,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CACnC,MAAM,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;gGACzD;QAEM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,EAAE;uFAAC;QAGnC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAA2B,IAAI,CAAC,KAAK,EAAE;YAClD,IAAI,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE;AACjD,gBAAA,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;YAC7B;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,cAAc,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;AAEA,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,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;IACF;IAEO,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACxB;IACF;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YAC9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C;IACF;8GAjEW,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,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7B3B,q2CAwCA,EAAA,MAAA,EAAA,CAAA,qaAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDbY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,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,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,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,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,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,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE9E,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,mBAGH,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,q2CAAA,EAAA,MAAA,EAAA,CAAA,qaAAA,CAAA,EAAA;6FAO5C,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;;;;;;MEH1C,eAAe,CAAA;AAnB5B,IAAA,WAAA,GAAA;QAoBkB,IAAA,CAAA,aAAa,GAAG,KAAK,CAA+B,IAAI;0FAAC;QACzD,IAAA,CAAA,YAAY,GAAG,KAAK,CAAsB,IAAI;yFAAC;QAC/C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,KAAK;yFAAC;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK;oGAAU;QAE9B,IAAA,CAAA,uBAAuB,GAAG,MAAM,EAAyB;QACzD,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAU;QACzC,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAU;QACzC,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAU;AAElD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,MAAM,KAAK,GAAW,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAClF,YAAA,OAAO,CAAC,EAAU,KAAc,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,KAAK,EAAE;QACjE,CAAC;qFAAC;AAEK,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAoB,MAAK;AAC1D,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,MAAM,gBAAgB,GAAG,YAAY,EAAE,gBAAgB,IAAI,EAAE;YAE7D,IAAI,CAAC,gBAAgB,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI;AAEzC,YAAA,MAAM,MAAM,GAAG,YAAY,EAAE,gBAAgB;YAC7C,IAAI,CAAC,MAAM,EAAE,MAAM;AAAE,gBAAA,OAAO,IAAI;YAEhC,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAC7C,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAC1D;YAED,OAAO;AACL,gBAAA,EAAE,EAAE,EAAE;gBACN,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC,OAAO;gBAC3F,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,WAAW,EAAE,eAAe;aAC7B;QACH,CAAC;8FAAC;AAEK,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAsB,MAAK;AAC/D,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,MAAM,gBAAgB,GAAG,YAAY,EAAE,gBAAgB,IAAI,EAAE;YAE7D,IAAI,CAAC,gBAAgB,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI;AAEzC,YAAA,MAAM,MAAM,GAAG,YAAY,EAAE,gBAAgB;YAC7C,IAAI,CAAC,MAAM,EAAE,MAAM;AAAE,gBAAA,OAAO,IAAI;YAEhC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;iGAAC;AAqBH,IAAA;AAnBQ,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;AAChB,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;IACvE;8GAtEW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,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,EC/B5B,g2QA+NA,EAAA,MAAA,EAAA,CAAA,8gEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5MI,YAAY,+RACZ,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,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,UAAA,EAAA,IAAA,EACb,eAAe,0iBACf,aAAa,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,UAAA,EAAA,IAAA,EACb,oBAAoB,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,UAAA,EAAA,IAAA,EACpB,gBAAgB,+TAChB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGL,eAAe,EAAA,UAAA,EAAA,CAAA;kBAnB3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,mBAGJ,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,gBAAgB;wBAChB,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,oBAAoB;wBACpB,gBAAgB;wBAChB,OAAO;wBACP,gBAAgB;wBAChB,cAAc;AACf,qBAAA,EAAA,QAAA,EAAA,g2QAAA,EAAA,MAAA,EAAA,CAAA,8gEAAA,CAAA,EAAA;;;MEbU,uBAAuB,CAAA;AAQlC,IAAA,WAAA,GAAA;QAPO,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAE1C,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAA8B,IAAI;iGAAC;QAChE,IAAA,CAAA,MAAM,GAAG,MAAM,CAA8B,IAAI;mFAAC;AAGvD,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAC3B,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,oBAAoB,IAAI,IAAI,CAClE;QAED,MAAM,eAAe,GAAQ,IAAI,CAAC,oBAAoB,EAAE,EAAE,eAAe,IAAI,IAAI;QACjF,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,eAAe,CAAC,CAAC;QACvD;IACF;8GAjBW,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,8EChBpC,kVASA,EAAA,MAAA,EAAA,CAAA,kgBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,+KAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAExC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,kVAAA,EAAA,MAAA,EAAA,CAAA,kgBAAA,CAAA,EAAA;;;MEAzC,eAAe,CAAA;AAR5B,IAAA,WAAA,GAAA;QASkB,IAAA,CAAA,aAAa,GAAG,KAAK,CAA+B,IAAI;0FAAC;QACzD,IAAA,CAAA,YAAY,GAAG,KAAK,CAAsB,IAAI;yFAAC;QAC/C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK;oGAAU;QAE9B,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAU;AAElD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,MAAM,KAAK,GAAW,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAClF,YAAA,OAAO,CAAC,EAAU,KAAc,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,KAAK,EAAE;QACjE,CAAC;qFAAC;AASH,IAAA;AAPQ,IAAA,aAAa,CAAC,EAAU,EAAA;QAC7B,IAAI,CAAC,EAAE,EAAE;YACP;QACF;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC;8GApBW,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,2rBCd5B,g+DAkDA,EAAA,MAAA,EAAA,CAAA,+zCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtCY,aAAa,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,UAAA,EAAA,IAAA,EAAE,gBAAgB,+TAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEvC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,g+DAAA,EAAA,MAAA,EAAA,CAAA,+zCAAA,CAAA,EAAA;;;MEqDxC,iBAAiB,CAAA;AAgF5B,IAAA,WAAA,GAAA;QA/EO,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,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,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;AACrC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEvB,IAAA,CAAA,eAAe,GAAG,SAAS,CAAa,iBAAiB;4FAAC;QAC1D,IAAA,CAAA,OAAO,GAAG,SAAS,CAAa,SAAS;oFAAC;QAE1C,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAU;QACzC,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAU;QACzC,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAU;QACzC,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAU;QACzC,IAAA,CAAA,wBAAwB,GAAG,MAAM,EAAU;QAC3C,IAAA,CAAA,yBAAyB,GAAG,MAAM,EAAU;QAErD,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAwB,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;AAC5F,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC;AACK,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAC5B,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,IAAI,IAAI;yFAClD;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAC5B,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,IAAI,IAAI;yFAClD;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAC5B,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,IAAI,IAAI;yFAClD;QACM,IAAA,CAAA,YAAY,GAAG,QAAQ,CAC5B,IAAI,CAAC,eAAe,CAAC,aAAa,CACnC;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAC5B,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,IAAI,IAAI;yFAClD;AACM,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,sBAAsB,IAAI,IAAI;mGAC5D;AACM,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CACpC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,oBAAoB,IAAI,IAAI;iGAC1D;AACM,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAC/B,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,eAAe,IAAI,IAAI;4FACrD;AAEM,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAC5B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CACnC,GAAG,CAAC,CAAC,YAAsB,KAAI;AAC7B,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC;AAClF,YAAA,MAAM,eAAe,GAA2B,IAAI,CAAC,eAAe,EAAE;YACtE,IAAI,eAAe,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,yBAAyB,EAAE;AACvE,gBAAA,eAAe,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;YAC7C;QACF,CAAC,CAAC,CACH,CACF;QACM,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAS,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QACjE,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAU,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7D,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CACxB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,eAAgC,KAAI;AACvC,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,eAAe,CAAC;YACxF,QACE,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC/C,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;QAElD,CAAC,CAAC,CACH,CACF;QAEM,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAS,CAAC;8FAAC;QACrC,IAAA,CAAA,WAAW,GAAG,MAAM,CAAU,KAAK;wFAAC;QAEnC,IAAA,CAAA,wBAAwB,GAAkB,IAAI;QACrC,IAAA,CAAA,4BAA4B,GAAW,GAAG;QAGzD,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,cAAc,GAA0B,IAAI,CAAC,cAAc,EAAE;AAEnE,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC;AACtF,YAAA,IAAI,CAAC,cAAc;gBAAE;YAErB,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,OAAO,IAAI,KAAK,CAAC;AAC5D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,eAAe,GAA2B,IAAI,CAAC,eAAe,EAAE;AACtE,YAAA,IAAI,CAAC,eAAe;gBAAE;AAEtB,YAAA,MAAM,OAAO,GAAgB,eAAe,CAAC,aAAa;AAC1D,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ;iBAC7C,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC;AAC9C,iBAAA,SAAS,CAAC,CAAC,CAAQ,KAAI;AACtB,gBAAA,MAAM,MAAM,GAAgB,CAAC,CAAC,MAAqB;gBACnD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AAC9C,YAAA,CAAC,CAAC;YAEJ,SAAS,CAAC,MAAK;gBACb,YAAY,CAAC,WAAW,EAAE;AAC5B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAuB,KAAI;YACnF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,eAAe,IAAI,CAAC,QAAQ;gBAAE;AAC1D,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC;AAE/E,YAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC;AAC1C,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;;AAGO,IAAA,mBAAmB,CAAC,YAAmC,EAAA;QAC5D,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,YAAmC,EAAA;QAC5D,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,oBAAmD,EAAA;QACpF,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;IAC3F;AAEO,IAAA,qBAAqB,CAAC,EAAU,EAAA;AACrC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAA,IAAI,CAAC,EAAE,IAAI,eAAe,EAAE;AAC1B,YAAA,eAAe,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;QAC7C;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;;IAGQ,MAAM,oBAAoB,CAAC,OAAgB,EAAA;QACjD,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACnD;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC7B;IACF;;AAGQ,IAAA,yBAAyB,CAAC,QAAgB,EAAA;QAChD,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,MAAM,WAAW,GAAkB,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC5D,QAAA,IAAI,CAAC,WAAW;YAAE;QAElB,IAAI,QAAQ,GAAW,CAAC;QAExB,MAAM,SAAS,GAAG,MAAW;AAC3B,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;gBACpC;YACF;YAEA,QAAQ,IAAI,CAAC;AACb,YAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACjD,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC;AACvF,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;gBACpC;YACF;YAEA,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC;AAC9E,QAAA,CAAC;QAED,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC;IAC9E;;AAGQ,IAAA,mBAAmB,CAAC,QAAgB,EAAA;QAC1C,MAAM,OAAO,GAAuB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC1E,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;AAE1B,QAAA,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/E,QAAA,OAAO,IAAI;IACb;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,WAAW,GAAkB,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC5D,QAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,wBAAwB,KAAK,IAAI;YAAE;AAE5D,QAAA,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,wBAAwB,CAAC;AAC/D,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;IACtC;8GA5OW,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,mnBCjE9B,0qHAkFA,EAAA,MAAA,EAAA,CAAA,kgCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3BI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,eAAe,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,EACf,eAAe,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,EACf,eAAe,oLACf,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,yBAAyB,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,EACzB,uBAAuB,uQACvB,kBAAkB,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,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGT,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAjB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,mBAGN,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP;wBACP,OAAO;wBACP,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,yBAAyB;wBACzB,uBAAuB;wBACvB,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,0qHAAA,EAAA,MAAA,EAAA,CAAA,kgCAAA,CAAA,EAAA;AAauD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,iBAAiB,iEACzB,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MElD9C,oBAAoB,CAAA;AAuB/B,IAAA,WAAA,GAAA;QAtBO,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QAExB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAyC,SAAS;kFAAC;AAChE,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAU;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;QACzB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;AAChC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;QAEzB,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAU;QAE5C,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAU,KAAK;qFAAC;AAEjC,QAAA,IAAA,CAAA,aAAa,GAAG,YAAY,CAAS,MAAK;AAC/C,YAAA,MAAM,KAAK,GAA2C,IAAI,CAAC,KAAK,EAAE;AAClE,YAAA,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,EAAE;AAC1E,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,OAAO,EAAE;QACX,CAAC;0FAAC;AAQK,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAS,MAAK;AACxC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAEjD,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAExC,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI;YAEvD,OAAO,UAAU,GAAG,GAAG,GAAG,SAAS,GAAG,SAAS;QACjD,CAAC;uFAAC;AAfA,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/E;IACF;AAcO,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;8GA5CW,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,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BjC,sjCAsCA,EAAA,MAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDbY,WAAW,8sBAAE,eAAe,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,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,UAAA,EAAA,IAAA,EAAE,gBAAgB,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,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE5D,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,sjCAAA,EAAA,MAAA,EAAA,CAAA,6BAAA,CAAA,EAAA;;;MER7D,mBAAmB,CAAA;AARhC,IAAA,WAAA,GAAA;QASS,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,QAAA,IAAA,CAAA,MAAM,GAAW,MAAM,CAAC,MAAM,CAAC;QAEvB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAgC,SAAS;kFAAC;AACvD,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAU;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;;QAEzB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;AAChC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK;8FAAU;AACxB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;QAEzB,IAAA,CAAA,eAAe,GAAG,MAAM,EAAQ;AAajD,IAAA;AAXQ,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;8GAxBW,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,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBhC,2nBA6BA,EAAA,MAAA,EAAA,CAAA,kHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDdY,WAAW,8BAAE,eAAe,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,UAAA,EAAA,IAAA,EAAE,aAAa,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,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,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,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE5D,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,2nBAAA,EAAA,MAAA,EAAA,CAAA,kHAAA,CAAA,EAAA;;;MEV7D,uBAAuB,CAAA;AAHpC,IAAA,WAAA,GAAA;AAIS,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAC9C,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;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;;;MCCY,wBAAwB,CAAA;AAHrC,IAAA,WAAA,GAAA;AAIS,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAC9C,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;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAChC,iBAAA;;;MCCY,yBAAyB,CAAA;AAHtC,IAAA,WAAA,GAAA;AAIS,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAC9C,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;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA;;;MCCY,sBAAsB,CAAA;AAHnC,IAAA,WAAA,GAAA;AAIS,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAgB,EAAC;AAC9C,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;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;;MCiDY,aAAa,CAAA;AAkCxB,IAAA,IAAI,YAAY,GAAA;QACd,QACE,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,OAAO,CAAC;AACnD,YAAA,CAAC,IAAI,CAAC,WAAW,EAAE;IAEvB;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IAC9F;AAEA,IAAA,WAAA,GAAA;QA7CO,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAErC,IAAA,CAAA,cAAc,GAAG,YAAY,CAAC,uBAAuB;2FAAC;QACtD,IAAA,CAAA,aAAa,GAAG,YAAY,CAAC,sBAAsB;0FAAC;QACpD,IAAA,CAAA,gBAAgB,GAAG,YAAY,CAAC,yBAAyB;6FAAC;QAC1D,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,wBAAwB;4FAAC;QAExD,IAAA,CAAA,MAAM,GAAG,KAAK,CAAoB,IAAI;mFAAC;QACvC,IAAA,CAAA,MAAM,GAAG,KAAK,CAAoB,IAAI;mFAAC;QACvC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAa,EAAE;kFAAC;AAC7B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA0B,IAAI,GAAG,EAAE;yFAAC;QACxD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAW,EAAE;oFAAC;AAE7B,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAU;AAC5B,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK;4GAAY;QAExC,IAAA,CAAA,eAAe,GAAG,MAAM,EAA2C;QACnE,IAAA,CAAA,oBAAoB,GAAG,MAAM,EAAc;QAC3C,IAAA,CAAA,cAAc,GAAG,MAAM,EAAY;QACnC,IAAA,CAAA,aAAa,GAAG,MAAM,EAAqC;QAC3D,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAwC;AAE1E,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CACxB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,KAAsB,KAAK,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CACvE,CACF;QAEM,IAAA,CAAA,SAAS,GAAG,MAAM,CAAS,EAAE;sFAAC;QAC9B,IAAA,CAAA,OAAO,GAAG,MAAM,CAAU,IAAI;oFAAC;QAC/B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK;wFAAC;QAexC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAsB,IAAI,CAAC,MAAM,EAAE;AAC/C,YAAA,IAAI,CAAC,MAAM;gBAAE;AAEb,YAAA,MAAM,gBAAgB,GAAW,MAAM,CAAC,gBAAgB,IAAI,EAAE;AAC9D,YAAA,MAAM,cAAc,GAAY,MAAM,CAAC,cAAc,IAAI,KAAK;AAE9D,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAEhC,IAAI,gBAAgB,EAAE;gBACpB,cAAc,CAAC,MAAK;AAClB,oBAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAC9C,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;AACzF,QAAA,CAAC,CAAC;IACJ;;IAGO,eAAe,CAAC,SAA6B,EAAE,OAAiB,EAAA;AACrE,QAAA,IAAI,CAAC,SAAS;YAAE;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACjF,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACrF;;AAGO,IAAA,SAAS,CAAC,KAAwB,EAAA;QACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAc,KAAI;YACtC,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AACvD,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9C;;IAGO,UAAU,CAAC,IAAc,EAAE,KAAwB,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB;YACnC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAc,KAAI;AACtC,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,IAAc,KAAK,IAAI,CAAC,OAAO,CAAC,CAChF;AACD,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,CACf,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAC5B,KAAK,CAAC,SAAS,CAAC,IAAI,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CACnB;AACD,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;QACtC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D;;AAGO,IAAA,YAAY,CAAC,KAAY,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,IAAI,EAAE;IACtD;;AAGO,IAAA,eAAe,CAAC,KAAY,EAAA;;;QAGjC,KAAK,CAAC,wBAAwB,EAAE;IAClC;8GA7IW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,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,WAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIsB,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACxB,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnB,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAC1B,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5DzE,s0XAmTA,EAAA,MAAA,EAAA,CAAA,08EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3QI,WAAW,kWACX,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,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,EAAAA,IAAA,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,EAAAA,IAAA,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,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,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,UAAA,EAAA,IAAA,EACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,UAAA,EAAA,IAAA,EACjB,eAAe,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,UAAA,EAAA,IAAA,EACf,aAAa,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,UAAA,EAAA,IAAA,EACb,gBAAgB,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,UAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEhB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,gBAAgB,+IAFhB,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKH,aAAa,EAAA,UAAA,EAAA,CAAA;kBApBzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,mBAGF,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;wBAChB,YAAY;wBACZ,OAAO;wBACP,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,s0XAAA,EAAA,MAAA,EAAA,CAAA,08EAAA,CAAA,EAAA;AAM6C,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,uBAAuB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACxB,sBAAsB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACnB,yBAAyB,iGAC1B,wBAAwB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME5C5D,qBAAqB,CAAA;AARlC,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAErC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAgC,SAAS;kFAAC;QACvD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAS,EAAE;oFAAC;QAC3B,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,EAAE;iFAAC;QACxB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE;qFAAC;QAC5B,IAAA,CAAA,MAAM,GAAG,KAAK,CAAS,EAAE;mFAAC;QAC1B,IAAA,CAAA,OAAO,GAAG,KAAK,CAAS,EAAE;oFAAC;QAC3B,IAAA,CAAA,OAAO,GAAG,KAAK,CAAS,EAAE;oFAAC;QAC3B,IAAA,CAAA,MAAM,GAAG,KAAK,CAAU,KAAK;mFAAC;QAC9B,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK;oFAAC;QAC/B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE;qFAAC;QAE5B,IAAA,CAAA,UAAU,GAAG,MAAM,EAAE;AAE9B,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CACxB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,KAAsB,KAAK,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CACvE,CACF;AACF,IAAA;8GArBY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBlC,w+CA2CA,EAAA,MAAA,EAAA,CAAA,8+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7BY,eAAe,mXAAE,aAAa,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,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE7B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;+BACE,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,eAAe,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,w+CAAA,EAAA,MAAA,EAAA,CAAA,8+DAAA,CAAA,EAAA;;;MEE9B,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;QASS,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEhE,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK;yGAAqB;QAE9C,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAQ;AAClD,IAAA;8GANY,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,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBjC,+mDAoDA,EAAA,MAAA,EAAA,CAAA,8oBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtCY,eAAe,mXAAE,aAAa,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,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,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,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAExD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,OAAA,EACP,CAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,+mDAAA,EAAA,MAAA,EAAA,CAAA,8oBAAA,CAAA,EAAA;;;MENzD,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;QAES,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAEvB,IAAA,CAAA,cAAc,GAAG,CAAC;AAClB,QAAA,IAAA,CAAA,YAAY,GAAG,GAAG,CAAC;AAsC5B,IAAA;IAnCQ,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;AACZ,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAC1D,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS;AAC/B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,CAAA,iCAAA,EAAoC,GAAG,CAAC,GAAG,0BAA0B,IAAI,CAAC,cAAc,CAAA,CAAE,CAC3F;AAEH,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AAC7B,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;8GA3CW,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;;;ACPD;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
|