@vallift/ngl 0.0.1 → 0.0.2

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":"vallift-ngl.mjs","sources":["../../../projects/ngl/src/ngl-config.token.ts","../../../projects/ngl/src/base/base-api.service.ts","../../../projects/ngl/src/base/base-control-value-accessor.ts","../../../projects/ngl/src/base/base-control-value-accessor-v2.ts","../../../projects/ngl/src/base/base-control-value-accessor-v3.ts","../../../projects/ngl/src/base/base-state.ts","../../../projects/ngl/src/base/base-pagination-state.ts","../../../projects/ngl/src/components/spinner/spinner.component.ts","../../../projects/ngl/src/components/spinner/spinner.component.html","../../../projects/ngl/src/components/app-svg-icon/app-svg-icon.component.ts","../../../projects/ngl/src/components/app-svg-icon/app-svg-icon.component.html","../../../projects/ngl/src/components/button/button.component.ts","../../../projects/ngl/src/components/button/button.component.html","../../../projects/ngl/src/components/overlay/alert-dialog/alert-dialog.component.ts","../../../projects/ngl/src/components/overlay/alert-dialog/alert-dialog.component.html","../../../projects/ngl/src/components/overlay/overlay.service.ts","../../../projects/ngl/src/base/unsaved-aware.directive.ts","../../../projects/ngl/src/common-utils/template-resolver.ts","../../../projects/ngl/src/components/no-data/no-data.component.ts","../../../projects/ngl/src/components/no-data/no-data.component.html","../../../projects/ngl/src/components/no-data-table/no-data-table.component.ts","../../../projects/ngl/src/components/no-data-table/no-data-table.component.html","../../../projects/ngl/src/components/shimmer/shimmer.component.ts","../../../projects/ngl/src/components/shimmer/shimmer.component.html","../../../projects/ngl/src/components/pagination/pagination.component.ts","../../../projects/ngl/src/components/pagination/pagination.component.html","../../../projects/ngl/src/components/_base/base-table/base-table.component.ts","../../../projects/ngl/src/components/_base/base-table/base-table.component.html","../../../projects/ngl/src/components/_base/base-table/sortable-table.directive.ts","../../../projects/ngl/src/components/_base/base-table/resizable-column.directive.ts","../../../projects/ngl/src/components/_base/base-table/table-resizable-columns.directive.ts","../../../projects/ngl/src/components/breadcrumb/breadcrumb.component.ts","../../../projects/ngl/src/components/breadcrumb/breadcrumb.component.html","../../../projects/ngl/src/components/close-button/close-button.component.ts","../../../projects/ngl/src/components/close-button/close-button.component.html","../../../projects/ngl/src/components/context-menu/context-menu.component.ts","../../../projects/ngl/src/components/context-menu/context-menu.component.html","../../../projects/ngl/src/components/context-menu-button/overlay-context-menu/overlay-context-menu.component.ts","../../../projects/ngl/src/components/context-menu-button/overlay-context-menu/overlay-context-menu.component.html","../../../projects/ngl/src/components/context-menu-button/context-menu-button.component.ts","../../../projects/ngl/src/components/context-menu-button/context-menu-button.component.html","../../../projects/ngl/src/components/context-menu-icon/context-menu-icon.component.ts","../../../projects/ngl/src/components/context-menu-icon/context-menu-icon.component.html","../../../projects/ngl/src/components/data-table/table-custom-component/table-custom.component.ts","../../../projects/ngl/src/components/data-table/table-custom-component/table-custom.component.html","../../../projects/ngl/src/components/status-badge/status-badge.component.ts","../../../projects/ngl/src/components/status-badge/status-badge.component.html","../../../projects/ngl/src/inputs/checkbox/checkbox.component.ts","../../../projects/ngl/src/inputs/checkbox/checkbox.component.html","../../../projects/ngl/src/inputs/form-errors.ts","../../../projects/ngl/src/inputs/humanize-form-messages.pipe.ts","../../../projects/ngl/src/inputs/_base/base-input/base-input.component.ts","../../../projects/ngl/src/inputs/_base/base-input/base-input.component.html","../../../projects/ngl/src/inputs/text-input/text-input.component.ts","../../../projects/ngl/src/inputs/text-input/text-input.component.html","../../../projects/ngl/src/components/text-button-small/text-button-small.component.ts","../../../projects/ngl/src/components/text-button-small/text-button-small.component.html","../../../projects/ngl/src/components/dynamic-renderer/dynamic-renderer.component.ts","../../../projects/ngl/src/components/dynamic-renderer/dynamic-renderer.component.html","../../../projects/ngl/src/components/data-table/data-table.component.ts","../../../projects/ngl/src/components/data-table/data-table.component.html","../../../projects/ngl/src/components/env-banner/env-banner.component.ts","../../../projects/ngl/src/components/env-banner/env-banner.component.html","../../../projects/ngl/src/components/loader/loader.service.ts","../../../projects/ngl/src/components/loader/loader.component.ts","../../../projects/ngl/src/components/loader/loader.component.html","../../../projects/ngl/src/components/network-image/network-image.component.ts","../../../projects/ngl/src/components/network-image/network-image.component.html","../../../projects/ngl/src/components/overlay/base-overlay/base-overlay.component.ts","../../../projects/ngl/src/components/overlay/base-overlay/base-overlay.component.html","../../../projects/ngl/src/components/overlay/overlay-wizard-utils.ts","../../../projects/ngl/src/components/responsive-helper/responsive-helper.component.ts","../../../projects/ngl/src/components/responsive-helper/responsive-helper.component.html","../../../projects/ngl/src/components/svg-url-icon/svg-url-icon.component.ts","../../../projects/ngl/src/components/svg-url-icon/svg-url-icon.component.html","../../../projects/ngl/src/components/toast/models/toast-type.ts","../../../projects/ngl/src/components/toast/toast.service.ts","../../../projects/ngl/src/components/toast/components/toast/toast-close-button/toast-close-button.component.ts","../../../projects/ngl/src/components/toast/components/toast/toast-close-button/toast-close-button.component.html","../../../projects/ngl/src/components/toast/components/toast/toast.component.ts","../../../projects/ngl/src/components/toast/components/toast/toast.component.html","../../../projects/ngl/src/components/toast/components/toaster/toaster.component.ts","../../../projects/ngl/src/components/toast/components/toaster/toaster.component.html","../../../projects/ngl/src/components/tooltip/tooltip.enums.ts","../../../projects/ngl/src/components/tooltip/tooltip.component.ts","../../../projects/ngl/src/components/tooltip/tooltip.component.html","../../../projects/ngl/src/directives/click-outside.directive.ts","../../../projects/ngl/src/directives/invalid-control-scroll.directive.ts","../../../projects/ngl/src/directives/invalid-control-scroll-container.directive.ts","../../../projects/ngl/src/inputs/_utils/base-input-utils.ts","../../../projects/ngl/src/inputs/_utils/form-validation-utils.ts","../../../projects/ngl/src/inputs/app-error/app-error.component.ts","../../../projects/ngl/src/inputs/app-error/app-error.component.html","../../../projects/ngl/src/inputs/date-picker/date-picker.component.ts","../../../projects/ngl/src/inputs/date-picker/date-picker.component.html","../../../projects/ngl/src/inputs/date-input/date-picker-overlay/date-picker-overlay.component.ts","../../../projects/ngl/src/inputs/date-input/date-picker-overlay/date-picker-overlay.component.html","../../../projects/ngl/src/validators/only-past-date-validator.ts","../../../projects/ngl/src/validators/only-future-date-validator.ts","../../../projects/ngl/src/inputs/date-input/date-input.component.ts","../../../projects/ngl/src/inputs/date-input/date-input.component.html","../../../projects/ngl/src/inputs/date-range-picker/date-range-picker.component.ts","../../../projects/ngl/src/inputs/date-range-picker/date-range-picker.component.html","../../../projects/ngl/src/inputs/dropdown/dropdown.component.ts","../../../projects/ngl/src/inputs/dropdown/dropdown.component.html","../../../projects/ngl/src/inputs/file-uploader/file-uploader.component.ts","../../../projects/ngl/src/inputs/file-uploader/file-uploader.component.html","../../../projects/ngl/src/shared-constants.ts","../../../projects/ngl/src/inputs/multi-select-dropdown/multi-select-dropdown.component.ts","../../../projects/ngl/src/inputs/multi-select-dropdown/multi-select-dropdown.component.html","../../../projects/ngl/src/inputs/multi-selection-field/multi-selection-field.component.ts","../../../projects/ngl/src/inputs/multi-selection-field/multi-selection-field.component.html","../../../projects/ngl/src/inputs/number-input/number-input.component.ts","../../../projects/ngl/src/inputs/number-input/number-input.component.html","../../../projects/ngl/src/inputs/phone-number-input/phone-number-input.component.ts","../../../projects/ngl/src/inputs/phone-number-input/phone-number-input.component.html","../../../projects/ngl/src/inputs/radio-button/radio-button.component.ts","../../../projects/ngl/src/inputs/radio-button/radio-button.component.html","../../../projects/ngl/src/inputs/single-item-picker-input/single-item-picker-input.component.ts","../../../projects/ngl/src/inputs/single-item-picker-input/single-item-picker-input.component.html","../../../projects/ngl/src/inputs/single-selection-field/single-selection-field.component.ts","../../../projects/ngl/src/inputs/single-selection-field/single-selection-field.component.html","../../../projects/ngl/src/inputs/switch/switch.component.ts","../../../projects/ngl/src/inputs/switch/switch.component.html","../../../projects/ngl/src/inputs/text-area-input/text-area-input.component.ts","../../../projects/ngl/src/inputs/text-area-input/text-area-input.component.html","../../../projects/ngl/src/inputs/time-picker/time-picker.component.ts","../../../projects/ngl/src/inputs/time-picker/time-picker.component.html","../../../projects/ngl/src/utils/date-utils.ts","../../../projects/ngl/src/utils/form-utils.ts","../../../projects/ngl/src/utils/html-utils.ts","../../../projects/ngl/src/utils/jwt-decode-utils.ts","../../../projects/ngl/src/utils/string-utils.ts","../../../projects/ngl/src/validators/mmddyyyy-date.validator.ts","../../../projects/ngl/src/ngl.service.ts","../../../projects/ngl/src/provide-ngl-config.ts","../../../projects/ngl/src/vallift-ngl.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n\nexport interface NglConfig {\n baseApiUrl: string;\n enableUnsavedChangesWarning: boolean;\n enableDevTools: boolean;\n}\n\nexport const NGL_CONFIG = new InjectionToken<NglConfig>('NGL_CONFIG');\n","import {inject, Injectable, Injector} from '@angular/core';\nimport {HttpClient, HttpHeaders, HttpEvent, HttpErrorResponse, HttpRequest, HttpParams} from '@angular/common/http';\nimport {Observable, retry, Subject, throwError} from 'rxjs';\nimport {catchError, map} from 'rxjs/operators';\nimport {NGL_CONFIG} from '../ngl-config.token';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BaseApiService {\n\n config = inject(NGL_CONFIG);\n\n protected defaultHeaders: HttpHeaders;\n protected baseUrl: string = this.config.baseApiUrl;\n\n private http = inject(HttpClient);\n\n constructor() {\n this.defaultHeaders = new HttpHeaders();\n }\n\n setDefaultHeaders(headers: HttpHeaders) {\n this.defaultHeaders = headers;\n }\n\n // Set the base URL\n setBaseUrl(baseUrl: string) {\n this.baseUrl = baseUrl;\n }\n\n protected get<T>(\n url: string,\n queryParams?: { [key: string]: any },\n customHeaders?: HttpHeaders,\n useCache: boolean = false,\n cacheDurationMinutes: number = 0\n ) {\n const headers = this.mergeHeaders(customHeaders);\n\n // Set cache-related headers\n if (useCache) {\n const cacheDurationSeconds = cacheDurationMinutes * 60; // Convert minutes to seconds\n headers.set('Cache-Control', `max-age=${cacheDurationSeconds}`);\n } else {\n headers.set('Cache-Control', 'no-cache');\n }\n\n if (queryParams) {\n const queryString = Object.keys(queryParams)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)\n .join('&');\n url += `?${queryString}`;\n }\n\n const options = {headers};\n return this.http.get<T>(this.getFullUrl(url), options).pipe(\n map((data: any) => this.transformResponse(data)),\n catchError(this.handleHttpError)\n );\n }\n\n protected fromFile<T>(url: string) {\n return this.http.get<T>(url);\n }\n\n\n protected getWithRetry<T>(\n url: string,\n customHeaders?: HttpHeaders,\n useCache: boolean = false,\n cacheDurationMinutes: number = 0,\n maxRetries: number = 0, // Default retry count is 0\n retryDelayMs: number = 1000,\n enableRetry: boolean = false\n ) {\n const headers = this.mergeHeaders(customHeaders);\n\n // Set cache-related headers\n if (useCache) {\n const cacheDurationSeconds = cacheDurationMinutes * 60; // Convert minutes to seconds\n headers.set('Cache-Control', `max-age=${cacheDurationSeconds}`);\n } else {\n headers.set('Cache-Control', 'no-cache');\n }\n\n const options = {headers};\n\n return this.http.get<T>(this.getFullUrl(url), options).pipe(\n map((data: any) => this.transformResponse(data)),\n enableRetry && maxRetries > 0\n ? retry(maxRetries)\n : catchError(this.handleHttpError)\n );\n }\n\n protected post<T>(url: string,\n body: any,\n queryParams?: { [key: string]: any },\n customHeaders?: HttpHeaders,) {\n if (queryParams) {\n const queryString = Object.keys(queryParams)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)\n .join('&');\n url += `?${queryString}`;\n }\n const headers = this.mergeHeaders(customHeaders);\n return this.http.post<T>(this.getFullUrl(url), body, {headers}).pipe(\n map((data: any) => this.transformResponse(data)),\n catchError(this.handleHttpError)\n );\n }\n\n protected put<T>(url: string,\n body: any,\n queryParams?: { [key: string]: any },\n customHeaders?: HttpHeaders,) {\n if (queryParams) {\n const queryString = Object.keys(queryParams)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)\n .join('&');\n url += `?${queryString}`;\n }\n const headers = this.mergeHeaders(customHeaders);\n return this.http.put<T>(this.getFullUrl(url), body, {headers}).pipe(\n map((data: any) => this.transformResponse(data)),\n catchError(this.handleHttpError)\n );\n }\n\n protected delete<T>(url: string,\n queryParams?: { [key: string]: any },\n customHeaders?: HttpHeaders) {\n if (queryParams) {\n const queryString = Object.keys(queryParams)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)\n .join('&');\n url += `?${queryString}`;\n }\n const headers = this.mergeHeaders(customHeaders);\n return this.http.delete<T>(this.getFullUrl(url), {headers}).pipe(\n map((data: any) => this.transformResponse(data)),\n catchError(this.handleHttpError)\n );\n }\n\n protected uploadFile(url: string, file: File, customHeaders?: HttpHeaders): Observable<HttpEvent<any>> {\n const headers = this.mergeHeaders(customHeaders);\n const formData = new FormData();\n formData.append('file', file, file.name);\n\n const request = new HttpRequest('POST', this.getFullUrl(url), formData, {\n headers,\n reportProgress: true\n });\n\n return this.http.request(request).pipe(\n catchError(this.handleHttpError)\n );\n }\n\n protected uploadFiles(url: string, files: FileList, customHeaders?: HttpHeaders): Observable<HttpEvent<any>> {\n const headers = this.mergeHeaders(customHeaders);\n const formData = new FormData();\n for (let i = 0; i < files.length; i++) {\n formData.append(`file${i}`, files[i], files[i].name);\n }\n\n return this.http.post(this.getFullUrl(url), formData, {headers, reportProgress: true, observe: 'events'});\n }\n\n protected uploadFormData(url: string, formData: FormData, customHeaders?: HttpHeaders, cancelSubject?: Subject<void>): Observable<HttpEvent<any>> {\n const headers = this.mergeHeaders(customHeaders);\n\n return this.http.post(this.getFullUrl(url), formData, {headers, reportProgress: true, observe: 'events'});\n }\n\n protected transformResponse(data: any): any {\n // You can implement auth transformation logic here\n return data;\n }\n\n private handleHttpError(error: HttpErrorResponse): Observable<never> {\n return throwError(() => error);\n }\n\n private mergeHeaders(customHeaders?: HttpHeaders): HttpHeaders {\n let mergedHeaders = this.defaultHeaders;\n\n if (customHeaders) {\n customHeaders.keys().forEach(key => {\n mergedHeaders = mergedHeaders.set(key, customHeaders.get(key)!);\n });\n }\n\n return mergedHeaders;\n }\n\n private getFullUrl(url: string): string {\n if (url.startsWith('http://') || url.startsWith('https://')) {\n return url;\n } else {\n return this.baseUrl + url;\n }\n }\n}\n","import {AbstractControl, ControlValueAccessor, FormControl} from \"@angular/forms\";\nimport {signal} from \"@angular/core\";\n\nexport abstract class BaseControlValueAccessor implements ControlValueAccessor {\n\n disabled = signal(false);\n touched = signal(false);\n public formControl = new FormControl();\n writeToInherited = false;\n\n get hasErrors() {\n return this.formControl && this.formControl.touched && this.formControl.errors;\n }\n\n onChange: any = () => {\n };\n\n onTouched: any = () => {\n };\n\n writeValue(value: any): void {\n if (value !== null && value !== undefined && !this.writeToInherited) {\n this.onWriteValue(value);\n this.writeToInherited = true;\n }\n }\n\n protected abstract onWriteValue(obj: any): void;\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n markAsTouched() {\n if (!this.touched()) {\n this.onTouched();\n this.touched.set(true);\n }\n }\n\n hasRequiredValidator(): boolean {\n if (this.formControl?.validator) {\n const validator = this.formControl.validator({} as AbstractControl);\n return !!(validator && validator['required']);\n }\n return false;\n }\n\n}\n","import {AbstractControl, ControlValueAccessor, FormControl, NgControl} from \"@angular/forms\";\nimport {AfterContentInit, inject, output, signal} from \"@angular/core\";\n\nexport abstract class BaseControlValueAccessorV2<T> implements ControlValueAccessor {\n\n controlValue = signal<T | null>(null);\n actualValue: any;\n\n disabled = signal(false);\n touched = signal(false);\n public formControl = new FormControl();\n writeToInherited = false;\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n initFormControl() {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n get hasErrors() {\n return this.formControl && this.formControl.touched && this.formControl.errors;\n }\n\n onChange: any = () => {\n };\n\n onTouched: any = () => {\n };\n\n writeValue(value: T): void {\n // if (value !== null && value !== undefined && !this.writeToInherited) {\n // this.controlValue.set(value);\n // this.onValueReady(value);\n // this.writeToInherited = true;\n // }\n\n // if (value !== null && value !== undefined) {\n // this.actualValue = value;\n // this.controlValue.set(value);\n // this.onValueReady(value);\n // this.writeToInherited = true;\n // }\n\n this.actualValue = value;\n this.controlValue.set(value);\n this.onValueReady(value);\n }\n\n createInstance<T>(ClassRef: new () => T): T {\n return new ClassRef(); // Create an instance of T\n }\n\n isOfType<T>(value: any, check: (value: any) => boolean): value is T {\n return check(value);\n }\n\n\n protected abstract onValueReady(value: T): void;\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n markAsTouched() {\n if (!this.touched()) {\n this.onTouched();\n this.touched.set(true);\n }\n }\n\n hasRequiredValidator(): boolean {\n if (this.formControl?.validator) {\n const validator = this.formControl.validator({} as AbstractControl);\n return !!(validator && validator['required']);\n }\n return false;\n }\n\n updateValue(newValue: any) {\n this.controlValue.set(newValue);\n this.onChange(newValue);\n }\n\n}\n\n\nexport type Schema<T> = {\n [K in keyof T]: (value: any) => boolean;\n};\n\nexport function isValid<T>(value: any, schema: Schema<T>): value is T {\n if (typeof value !== 'object' || value === null) return false;\n\n return Object.keys(schema).every(key => {\n const typeCheck = schema[key as keyof T];\n return typeCheck(value[key as keyof T]);\n });\n}\n\nexport function isDynamicType<T>(value: any, typeDefinition: new (...args: any[]) => T): boolean {\n // Check if typeDefinition is a class constructor\n if (typeof typeDefinition !== 'function') {\n return false; // Type definition must be a class constructor\n }\n\n // Check if value is an instance of the class\n if (!(value instanceof typeDefinition)) {\n return false; // Value must be an instance of typeDefinition\n }\n\n // Get the prototype of the type definition\n const prototype = typeDefinition.prototype;\n\n // Get the keys of the type definition's prototype\n const keys = Object.keys(prototype) as Array<keyof T>;\n\n // Check each property in the type definition\n for (const key of keys) {\n const expectedType = typeof prototype[key];\n const actualType = typeof value[key];\n\n // Check for nested object types\n if (expectedType === 'object' && actualType === 'object') {\n if (prototype[key] !== null && value[key] !== null) {\n // Recursively check for nested objects\n const isNestedObjectValid = isDynamicType(value[key], (prototype[key] as any).constructor);\n if (!isNestedObjectValid) {\n return false; // Nested object check failed\n }\n } else if (value[key] === null) {\n return false; // If expected to be an object, it shouldn't be null\n }\n } else if (expectedType !== actualType) {\n return false; // Type mismatch\n }\n }\n\n return true; // All checks passed\n}\n\nexport function getDynamicTypeStructure(obj: any): string {\n if (obj === null) return 'null';\n\n if (Array.isArray(obj)) {\n return `Array<${obj.map(item => getDynamicTypeStructure(item)).join(', ')}>`;\n }\n\n if (typeof obj === 'object') {\n const properties = Object.keys(obj).map(key => {\n return `${key}: ${getDynamicTypeStructure(obj[key])}`;\n });\n return `Object { ${properties.join(', ')} }`;\n }\n\n return typeof obj; // For primitive types (number, string, etc.)\n}\n","import {AbstractControl, ControlValueAccessor, FormControl, NgControl} from \"@angular/forms\";\nimport {AfterContentInit, Component, inject, input, output, signal} from \"@angular/core\";\n\n\n@Component({\n imports: [],\n template: '',\n})\nexport abstract class BaseControlValueAccessorV3<T> implements ControlValueAccessor, AfterContentInit {\n errorMessages = input<{ [key: string]: string }>({});\n\n valueChanged = output<T>();\n\n disabled = signal(false);\n touched = signal(false);\n public formControl = new FormControl();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n actualValue: T | undefined;\n\n protected abstract onValueReady(value: T): void;\n\n get controlValue(): T | undefined {\n return this.formControl.value ?? this.actualValue;\n }\n\n constructor() {\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngAfterContentInit() {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n get hasErrors() {\n return this.formControl && this.formControl.touched && this.formControl.errors;\n }\n\n private onChange: any = () => {\n };\n\n onTouched: any = () => {\n };\n\n writeValue(value: T): void {\n if (value != this.formControl.value) {\n this.formControl.setValue(value);\n }\n this.actualValue = value;\n setTimeout(() => {\n this.onValueReady(value);\n });\n }\n\n\n onValueChange(value: T) {\n this.valueChanged.emit(value);\n this.actualValue = value;\n this.onChange(value);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n markAsTouched() {\n if (!this.touched()) {\n this.onTouched();\n this.touched.set(true);\n }\n }\n\n hasRequiredValidator(): boolean {\n if (this.formControl?.validator) {\n const validator = this.formControl.validator({} as AbstractControl);\n return !!(validator && validator['required']);\n }\n return false;\n }\n}\n","import {signal} from \"@angular/core\";\n\nexport interface BaseStateImpl<T> {\n notifyLoading(): void;\n\n notifySuccess(data: T): void;\n\n notifyError(errorMsg: string): void;\n\n clearState(): void;\n}\n\nexport class State<T> implements BaseStateImpl<T> {\n responseSignal = signal<T | null>(null);\n private initialLoadingSignal = signal<boolean>(false);\n private loadingSignal = signal<boolean>(false);\n private successSignal = signal<boolean>(false);\n private failedSignal = signal<boolean>(false);\n private errorSignal = signal<string | null>(null);\n private stateSignal = signal<RequestState | null>(null);\n\n readonly response = this.responseSignal.asReadonly();\n readonly initialLoading = this.initialLoadingSignal.asReadonly();\n readonly loading = this.loadingSignal.asReadonly();\n readonly success = this.successSignal.asReadonly();\n readonly failed = this.failedSignal.asReadonly();\n readonly error = this.errorSignal.asReadonly();\n readonly state = this.stateSignal.asReadonly();\n\n constructor() {\n this.stateSignal.set(RequestState.idle);\n }\n\n notifyInitialLoading() {\n this.responseSignal.set(null);\n this.initialLoadingSignal.set(true);\n this.loadingSignal.set(true);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.initialLoading);\n }\n\n notifyLoading() {\n // this.responseSignal.set(null);\n this.initialLoadingSignal.set(false);\n this.loadingSignal.set(true);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.loading);\n }\n\n notifySuccess(data: T) {\n this.responseSignal.set(data);\n this.initialLoadingSignal.set(false);\n this.loadingSignal.set(false);\n this.successSignal.set(true);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.success);\n }\n\n notifyError(errorMsg: string) {\n this.responseSignal.set(null);\n this.initialLoadingSignal.set(false);\n this.loadingSignal.set(false);\n this.successSignal.set(false);\n this.failedSignal.set(true);\n this.errorSignal.set(errorMsg);\n this.stateSignal.set(RequestState.error);\n }\n\n clearState() {\n this.responseSignal.set(null);\n this.initialLoadingSignal.set(false);\n this.loadingSignal.set(false);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.idle);\n }\n}\n\nexport enum RequestState {\n idle = 'idle',\n initialLoading = 'initialLoading',\n loading = 'loading',\n error = 'error',\n success = 'success'\n}\n\n// export class BaseState<T> implements BaseStateImpl<T> {\n// private dataSubject = new BehaviorSubject<T | null>(null);\n// private loadingSubject = new BehaviorSubject<boolean>(false);\n// private errorSubject = new BehaviorSubject<string | null>(null);\n// private stateSubject = new BehaviorSubject<RequestState | null>(null);\n//\n// auth$: Observable<T | null> = this.dataSubject.asObservable();\n// loading$: Observable<boolean> = this.loadingSubject.asObservable();\n// error$: Observable<string | null> = this.errorSubject.asObservable();\n// state$: Observable<RequestState | null> = this.stateSubject.asObservable();\n//\n// constructor() {\n// this.stateSubject.next(RequestState.initial);\n// }\n//\n// notifyLoading() {\n// this.loadingSubject.next(true);\n// this.dataSubject.next(null);\n// this.errorSubject.next(null);\n// this.stateSubject.next(RequestState.loading);\n// }\n//\n// notifySuccess(auth: T) {\n// this.loadingSubject.next(false);\n// this.dataSubject.next(auth);\n// this.errorSubject.next(null);\n// this.stateSubject.next(RequestState.success);\n// }\n//\n// notifyError(errorMsg: string) {\n// this.loadingSubject.next(false);\n// this.dataSubject.next(null);\n// this.errorSubject.next(errorMsg);\n// this.stateSubject.next(RequestState.error);\n// }\n//\n// clearState() {\n// this.loadingSubject.next(false);\n// this.dataSubject.next(null);\n// this.errorSubject.next(null);\n// this.stateSubject.next(RequestState.initial);\n// }\n// }\n\n\n","import {signal} from \"@angular/core\";\nimport {RequestState} from './base-state';\n\nexport class PaginationState<T> {\n responseSignal = signal<T | null>(null);\n private loadingSignal = signal<boolean>(false);\n private successSignal = signal<boolean>(false);\n private failedSignal = signal<boolean>(false);\n private errorSignal = signal<string | null>(null);\n private stateSignal = signal<RequestState | null>(null);\n\n readonly response = this.responseSignal.asReadonly();\n readonly loading = this.loadingSignal.asReadonly();\n readonly success = this.successSignal.asReadonly();\n readonly failed = this.failedSignal.asReadonly();\n readonly error = this.errorSignal.asReadonly();\n readonly state = this.stateSignal.asReadonly();\n\n items = signal<any[]>([]);\n pageNumber = signal<number>(1);\n pageSize = signal<number>(1);\n totalRecords = signal<number>(0);\n totalPages = signal<number>(0);\n\n constructor() {\n this.stateSignal.set(RequestState.idle);\n }\n\n notifyLoading() {\n this.loadingSignal.set(true);\n this.responseSignal.set(null);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.loading);\n }\n\n notifySuccess(response: any) {\n this.loadingSignal.set(false);\n this.responseSignal.set(response);\n this.successSignal.set(true);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.success);\n\n\n if (Array.isArray(response?.data)) {\n this.items.update(prev => {\n return [...prev, ...response.data];\n });\n }\n\n if (response?.pageNumber) {\n this.pageNumber.set(response.pageNumber);\n }\n\n if (response?.pageSize) {\n this.pageSize.set(response.pageSize);\n }\n\n if (response?.totalRecords) {\n this.totalRecords.set(response.totalRecords);\n }\n\n if (response?.totalPages) {\n this.totalPages.set(response.totalPages);\n }\n\n }\n\n notifyError(errorMsg: string) {\n this.loadingSignal.set(false);\n this.responseSignal.set(null);\n this.successSignal.set(false);\n this.failedSignal.set(true);\n this.errorSignal.set(errorMsg);\n this.stateSignal.set(RequestState.error);\n }\n\n clearState() {\n this.loadingSignal.set(false);\n this.responseSignal.set(null);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.idle);\n\n this.items.set([]);\n this.pageNumber.set(1);\n this.pageSize.set(0);\n this.totalRecords.set(0);\n this.totalPages.set(0);\n }\n}\n","import {Component, input} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-spinner',\n standalone: true,\n imports: [\n NgClass\n ],\n templateUrl: './spinner.component.html',\n styleUrl: './spinner.component.scss'\n})\nexport class SpinnerComponent {\n borderColor = input('border-primary-500');\n}\n","<div\n class=\"inline-block h-4 w-4 animate-spin rounded-full border-2 border-primary-500 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]\"\n [ngClass]=\"borderColor()\"\n role=\"status\">\n</div>\n","import {Component, input, Input} from '@angular/core';\nimport {SvgIconComponent} from \"angular-svg-icon\";\n\n@Component({\n selector: 'app-svg-icon',\n standalone: true,\n imports: [\n SvgIconComponent\n ],\n templateUrl: './app-svg-icon.component.html',\n styleUrl: './app-svg-icon.component.scss'\n})\nexport class AppSvgIconComponent {\n\n src = input.required<string>();\n stretch = input(false);\n size = input(24);\n svgStyle = input<{ [key: string]: any }>({});\n}\n","<svg-icon [src]=\"src()\" [stretch]=\"stretch()\" [svgStyle]=\"{ 'width.px':size() }\">\n</svg-icon>\n","import {Component, ElementRef, EventEmitter, inject, input, Input, OnInit, Output, Renderer2} from '@angular/core';\nimport {DOCUMENT, NgClass} from \"@angular/common\";\nimport {SpinnerComponent} from \"../spinner/spinner.component\";\nimport {FormGroup, FormGroupDirective} from \"@angular/forms\";\nimport {AppSvgIconComponent} from \"../app-svg-icon/app-svg-icon.component\";\n\n@Component({\n selector: 'app-button',\n standalone: true,\n imports: [\n NgClass,\n SpinnerComponent,\n AppSvgIconComponent\n ],\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss'\n})\nexport class ButtonComponent {\n elementRef = inject(ElementRef);\n document = inject(DOCUMENT);\n renderer = inject(Renderer2);\n\n type = input<'button' | 'submit' | 'reset'>('button');\n disabled = input<boolean>(false);\n fullWidth = input<boolean>(false);\n appearance = input<'textType' | 'primary' | 'outline' | 'primaryRounded' | 'outlineRounded'>('primary');\n loading = input<boolean>(false);\n iconSize = input<number>(18);\n iconSrc = input<string | null>();\n iconColor = input<string | null>(null);\n buttonColor = input<string>('bg-primary-500');\n outlineColor = input<string>('border-primary-500');\n textButtonColor = input<string>('text-primary-500');\n size = input<'small' | 'medium' | 'large'>('medium');\n\n @Output() buttonClick = new EventEmitter<void>();\n\n formGroupDirective = inject(FormGroupDirective, {optional: true});\n\n getButtonClass(): string {\n let base = 'inline-flex items-center justify-center text-button leading-5 transition-all duration-200';\n\n const sizeClasses = {\n small: 'px-4 py-2 text-sm',\n medium: 'px-6 py-3 text-base',\n large: 'px-6 py-4 text-lg'\n };\n\n const appearanceClasses = {\n primary: `text-white rounded-md ${this.buttonColor()}`,\n primaryRounded: `text-white rounded-full ${this.buttonColor()}`,\n outline: `${this.textButtonColor()} rounded-md bg-white border ${this.outlineColor()} outline-none`,\n outlineRounded: `${this.textButtonColor()} rounded-full bg-white border ${this.outlineColor()} outline-none`,\n textType: `${this.textButtonColor()} rounded-md border border-transparent rounded-md bg-white outline-none focus:outline-none`\n };\n\n return `${base} ${sizeClasses[this.size()]} ${appearanceClasses[this.appearance()]} ${this.disabled() ? 'cursor-not-allowed' : ''} ${this.fullWidth() ? 'w-full' : ''}`;\n }\n\n getIconClass() {\n if (this.iconColor() != null) {\n return this.iconColor();\n }\n\n switch (this.appearance()) {\n case 'outline':\n return 'text-primary-500';\n case 'outlineRounded':\n return 'text-primary-500';\n case 'textType':\n return 'text-primary-500';\n case 'primaryRounded':\n return 'text-white';\n case 'primary':\n default:\n return 'text-white';\n }\n }\n\n getLoaderColor() {\n let borderClass = 'border-white';\n switch (this.appearance()) {\n case 'outline':\n borderClass = 'border-primary-500';\n break;\n case 'outlineRounded':\n borderClass = 'border-primary-500';\n break;\n case 'textType':\n borderClass = 'border-primary-500';\n break;\n case 'primaryRounded':\n borderClass = 'border-white';\n break;\n case 'primary':\n default:\n borderClass = 'border-white';\n break;\n }\n\n return borderClass\n }\n\n onClick(): void {\n if (this.loading()) {\n return;\n }\n if (this.type() == 'submit' && this.formGroupDirective) {\n const formGroup = this.formGroupDirective.form;\n this.validateForm(formGroup);\n }\n this.buttonClick.emit();\n }\n\n validateForm(formGroup: FormGroup) {\n formGroup.markAllAsTouched();\n formGroup.markAsPristine();\n }\n}\n","<button\n (click)=\"onClick()\"\n [type]=\"type()\"\n class=\"relative whitespace-nowrap\"\n [ngClass]=\"getButtonClass()\">\n\n @if (iconSrc()) {\n <app-svg-icon [src]=\"iconSrc()!\" [size]=\"iconSize()\" class=\"mr-3\"\n [ngClass]=\"loading() ? 'text-transparent' : getIconClass()\"></app-svg-icon>\n }\n\n <app-spinner class=\"w-min absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\"\n [borderColor]=\"loading() ? getLoaderColor() : 'border-transparent'\"></app-spinner>\n\n <div [ngClass]=\"loading() ? 'text-transparent' : 'text-body2'\">\n <ng-content></ng-content>\n </div>\n\n</button>\n","import {Component, inject} from '@angular/core';\nimport {DIALOG_DATA, DialogRef} from \"@angular/cdk/dialog\";\nimport {ButtonComponent} from '../../button/button.component';\n\n@Component({\n selector: 'app-alert-dialog',\n standalone: true,\n imports: [\n ButtonComponent,\n ],\n templateUrl: './alert-dialog.component.html',\n styleUrl: './alert-dialog.component.scss'\n})\nexport class AlertDialogComponent {\n\n dialogRef = inject(DialogRef);\n data = inject(DIALOG_DATA);\n\n onNoClicked() {\n this.dialogRef.close(false);\n }\n\n onYesClicked() {\n this.dialogRef.close(true);\n }\n}\n","<div class=\"flex flex-col gap-2 text-start px-4 py-3\">\n <p class=\"text-body1 text-error\">{{ data.title }}</p>\n <p class=\"text-body2\">{{ data.message }}</p>\n <div class=\"flex justify-end gap-4 mt-3\">\n <app-button appearance=\"outline\" (click)=\"onNoClicked()\">Cancel\n </app-button>\n <app-button buttonColor=\"bg-primary-500\"\n (click)=\"onYesClicked()\">Yes\n </app-button>\n </div>\n</div>\n","import {inject, Injectable, Renderer2, RendererFactory2} from '@angular/core';\nimport {Dialog, DialogRef} from '@angular/cdk/dialog';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n GlobalPositionStrategy,\n Overlay,\n} from '@angular/cdk/overlay';\nimport {ComponentType} from '@angular/cdk/portal';\nimport {BreakpointObserver, Breakpoints} from \"@angular/cdk/layout\";\nimport {AlertDialogComponent} from './alert-dialog/alert-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OverlayService {\n\n private dialog = inject(Dialog);\n private overlay = inject(Overlay);\n private breakpointObserver = inject(BreakpointObserver);\n private rendererFactory = inject(RendererFactory2);\n\n private renderer!: Renderer2;\n\n constructor() {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n private basePanelClass = ['bg-white', 'shadow-2'];\n\n modalMaxHeightClass = 'max-h-[80vh]';\n\n openNearElement<T>(\n component: ComponentType<T>,\n triggerElement: HTMLElement,\n options?: {\n positions?: ConnectedPosition[];\n disableClose?: boolean;\n data?: any;\n scrollStrategy?: 'noop' | 'block' | 'reposition' | 'close';\n isMobileResponsive?: boolean;\n }\n ): DialogRef<any, T> {\n\n const {\n positions = [\n {originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8}, // Default: Centered Below\n {originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8}, // Fallback: Centered Above\n {originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 8}, // **New Fallback: Align Left if Overflowing Right**\n {originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -8}], // **New Fallback: Align Left if Overflowing Right and not enough space below**\n disableClose = false,\n data,\n scrollStrategy = 'block',\n isMobileResponsive = false\n } = options ?? {};\n\n const isMobile = this.breakpointObserver.isMatched([Breakpoints.XSmall, Breakpoints.Small]);\n\n let positionStrategy: FlexibleConnectedPositionStrategy | GlobalPositionStrategy | null;\n\n if (isMobile && isMobileResponsive) {\n positionStrategy = this.overlay.position()\n .global()\n .centerHorizontally()\n .centerVertically();\n } else {\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(triggerElement)\n .withFlexibleDimensions(false)\n .withPush(true)\n .withPositions(positions);\n }\n\n const scrollStrategyMapping = {\n noop: this.overlay.scrollStrategies.noop(),\n block: this.overlay.scrollStrategies.block(),\n reposition: this.overlay.scrollStrategies.reposition(),\n close: this.overlay.scrollStrategies.close(),\n };\n\n const appliedScrollStrategy = scrollStrategyMapping[scrollStrategy] ?? this.overlay.scrollStrategies.block();\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n scrollStrategy: appliedScrollStrategy,\n disableClose: disableClose,\n backdropClass: ['bg-black/5', 'overflow-clip'],\n panelClass: [...this.basePanelClass, 'rounded-3xl'],\n data: data,\n });\n\n return dialogRef;\n\n }\n\n openAlert(title: string, message: string): DialogRef<any, AlertDialogComponent> {\n let dialogRef = this.dialog.open(AlertDialogComponent, {\n width: '300px',\n data: {\n title: title,\n message: message\n },\n panelClass: [...this.basePanelClass, 'rounded-3xl']\n });\n\n return dialogRef;\n }\n\n openModal<T>(component: ComponentType<T>, options?: {\n disableClose?: boolean,\n maxHeightClass?: string,\n data?: any\n }):\n DialogRef<any, T> {\n\n const {disableClose = false, maxHeightClass, data} = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically();\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n backdropClass: ['bg-black/20'],\n panelClass: [...this.basePanelClass, maxHeightClass ?? this.modalMaxHeightClass, 'rounded-3xl', 'sm:w-4/5', 'md:w-3/5', 'lg:w-2/5'],\n data: data\n });\n\n this.setOverlayMaxHeight(maxHeightClass ?? this.modalMaxHeightClass);\n\n return dialogRef;\n }\n\n private setOverlayMaxHeight(maxHeightClass: string): void {\n const overlayElement = document.querySelector('.base-overlay') as HTMLElement;\n if (overlayElement) {\n this.renderer.addClass(overlayElement, maxHeightClass);\n }\n }\n\n openBackdrop<T>(\n component: ComponentType<T>,\n options?: {\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {disableClose = false, data} = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .bottom('0px');\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'w-[100%]', 'h-[90%]', 'rounded-t-3xl', 'overflow-clip'],\n data: data\n });\n\n return dialogRef;\n }\n\n openBottomSheet<T>(\n component: ComponentType<T>,\n options?: {\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {disableClose = false, data} = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .bottom('0px');\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'w-max-[300px]', 'h-[70%]', 'rounded-t-3xl', 'overflow-clip', 'overflow-y-scroll'],\n data: data\n });\n\n return dialogRef;\n }\n\n openFullScreen<T>(\n component: ComponentType<T>,\n options?: {\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {disableClose = false, data} = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .bottom('0px');\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'w-dvw', 'h-dvh', 'overflow-clip', 'overflow-y-scroll'],\n data: data\n });\n\n return dialogRef;\n }\n\n openSidePanelRight<T>(\n component: ComponentType<T>,\n options?: {\n widthInPx?: number;\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {\n widthInPx = 350,\n disableClose = false,\n data\n } = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .top('0px')\n .right('0px')\n .width(`${widthInPx}px`);\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'h-dvh', 'w-full', 'overflow-clip', 'overflow-y-scroll'],\n data: data\n });\n\n return dialogRef;\n }\n\n openSidePanelLeft<T>(\n component: ComponentType<T>,\n options?: {\n widthInPx?: number;\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {\n widthInPx = 350,\n disableClose = false,\n data\n } = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .top('0px')\n .left('0px')\n .width(`${widthInPx}px`);\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'h-dvh', 'w-full', 'overflow-clip', 'overflow-y-scroll'],\n data: data\n });\n\n return dialogRef;\n }\n\n}\n","import {\n Directive,\n OnDestroy,\n HostListener,\n inject\n} from '@angular/core';\nimport {FormGroupDirective} from '@angular/forms';\nimport {Router, NavigationStart, Event} from '@angular/router';\nimport {Subscription} from 'rxjs';\nimport {OverlayService} from '../components/overlay/overlay.service';\nimport {NGL_CONFIG} from '../ngl-config.token';\n\n@Directive({\n selector: 'form[unSavedAware]'\n})\nexport class UnsavedAwareDirective implements OnDestroy {\n config = inject(NGL_CONFIG);\n\n HANDLE_UNSAVED_CHANGES = false;\n\n formGroupDirective = inject(FormGroupDirective);\n router = inject(Router);\n overlayService = inject(OverlayService);\n\n private routerSubscription?: Subscription;\n private isConfirming = false;\n\n constructor() {\n this.routerSubscription = this.router.events.subscribe((event: Event) => {\n\n if (this.config.enableUnsavedChangesWarning && !this.HANDLE_UNSAVED_CHANGES) {\n return;\n }\n\n if (event instanceof NavigationStart && this.formGroupDirective.form?.dirty) {\n\n if (this.isConfirming) {\n return;\n }\n\n this.isConfirming = true;\n\n this.confirmUnsavedChanges().then((value) => {\n this.isConfirming = false;\n if (value) {\n this.formGroupDirective.resetForm();\n this.router.navigateByUrl(event.url);\n } else {\n this.router.navigateByUrl(this.router.url);\n }\n });\n\n this.router.navigateByUrl(this.router.url);\n }\n });\n }\n\n async confirmUnsavedChanges(): Promise<boolean> {\n try {\n const result = await this.overlayService.openAlert('Unsaved Changes', 'You have unsaved changes! Do you really want to leave?').closed.toPromise();\n return result;\n } catch (error) {\n console.error('Error while showing confirmation dialog:', error);\n return false;\n }\n }\n\n ngOnDestroy(): void {\n this.routerSubscription?.unsubscribe();\n }\n\n @HostListener('window:beforeunload', ['$event'])\n unloadNotification($event: BeforeUnloadEvent): void {\n if (this.config.enableUnsavedChangesWarning && !this.HANDLE_UNSAVED_CHANGES) {\n return;\n }\n\n if (this.formGroupDirective.form?.dirty) {\n $event.returnValue = 'You have unsaved changes! Do you really want to leave?';\n }\n }\n}\n","type AnyObject = { [key: string]: any };\n\n\nexport function resolveTemplateWithObject(\n obj: AnyObject,\n expression: string,\n fallback: string = \"N/A\"\n): string {\n return expression.replace(/\\$([a-zA-Z0-9_.\\[\\]]+)/g, (_, key: string) => {\n const keys: string[] = key.split(/[\\.\\[\\]]/).filter(k => k !== \"\");\n let value: any = obj;\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n\n // THOUSAND_FORMAT\n if (k === \"THOUSAND_FORMAT\") {\n if (!isNaN(Number(value))) {\n return (Number(value) / 1_000).toFixed(2) + \"K\"; // Format as thousands\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n\n // MILLION_FORMAT\n if (k === \"MILLION_FORMAT\") {\n if (!isNaN(Number(value))) {\n return (Number(value) / 1_000_000).toFixed(2) + \"M\"; // Format as millions\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n\n // BILLION_FORMAT\n if (k === \"BILLION_FORMAT\") {\n if (!isNaN(Number(value))) {\n return (Number(value) / 1_000_000_000).toFixed(2) + \"B\"; // Format as billions\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n // CURRENCY_FORMAT\n if (k === \"CURRENCY_FORMAT\") {\n if (!isNaN(Number(value))) {\n return Number(value).toLocaleString(\"en-US\", { minimumFractionDigits: 2 });\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n // PERCENTAGE_FORMAT\n if (k === \"PERCENTAGE_FORMAT\") {\n if (!isNaN(Number(value))) {\n return (Number(value) * 100).toFixed(2) + \"%\"; // Format as percentage\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n // DECIMAL_FORMAT(n) where 'n' is the number of decimal places\n if (k.startsWith(\"DECIMAL_FORMAT\")) {\n if (!isNaN(Number(value))) {\n const decimalPlaces = parseInt(k.match(/\\((\\d+)\\)/)?.[1] || \"2\", 10);\n return Number(value).toFixed(decimalPlaces); // Format with decimal places\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n // ROUND_FORMAT\n if (k === \"ROUND_FORMAT\") {\n if (!isNaN(Number(value))) {\n return Math.round(Number(value)).toString(); // Round the value\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n\n // Handle arrays and array indexing\n if (Array.isArray(value)) {\n if (k === \"COUNT\") {\n return value.length.toString(); // Return the count of array elements\n }\n\n const index = parseInt(k);\n if (isNaN(index) || index >= value.length || index < 0) {\n return fallback; // Invalid index\n }\n value = value[index];\n } else {\n // Handle object properties\n value = value[k as keyof typeof value];\n }\n\n if (value === undefined) return fallback; // Return fallback if key not found\n }\n\n return value;\n });\n}\n\n\nexport enum TemplateResolverFormat {\n THOUSAND_FORMAT = \"THOUSAND_FORMAT\",\n MILLION_FORMAT = \"MILLION_FORMAT\",\n BILLION_FORMAT = \"BILLION_FORMAT\",\n CURRENCY_FORMAT = \"CURRENCY_FORMAT\",\n PERCENTAGE_FORMAT = \"PERCENTAGE_FORMAT\",\n ROUND_FORMAT = \"ROUND_FORMAT\"\n}\n\nexport enum TemplateResolverArrayUtil {\n COUNT = \"COUNT\",\n}\n","import {Component, input} from '@angular/core';\n\n@Component({\n selector: 'app-no-data',\n standalone: true,\n imports: [\n ],\n templateUrl: './no-data.component.html',\n styleUrl: './no-data.component.scss'\n})\nexport class NoDataComponent {\n size = input(250);\n message = input.required<string>();\n}\n","<div class=\"inline-flex flex-col gap-3 items-center justify-center\">\n <svg class=\"svg-icon text-neutral-200 h-16 w-16\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 20H4C2.89 20 2 19.1 2 18V6C2 4.89 2.89 4 4 4H10L12 6H19C19.5304 6 20.0391 6.21071 20.4142 6.58579C20.7893 6.96086 21 7.46957 21 8H4V18L6.14 10H23.21L20.93 18.5C20.7 19.37 19.92 20 19 20Z\"\n fill=\"currentColor\"/>\n </svg>\n <p class=\"text-body2 text-neutral-500\">{{ message() }}</p>\n</div>\n","import {Component, input} from '@angular/core';\nimport {NoDataComponent} from \"../no-data/no-data.component\";\n\n@Component({\n selector: 'app-no-data-table',\n standalone: true,\n imports: [\n NoDataComponent\n ],\n templateUrl: './no-data-table.component.html',\n styleUrl: './no-data-table.component.scss'\n})\nexport class NoDataTableComponent {\n message = input<string>();\n}\n","<tbody class=\"bg-white text-center py-14\">\n<tr>\n <td colspan=\"10\">\n <div class=\"py-14\">\n <app-no-data class=\"\" [message]=\"message() ?? 'No data found'\"></app-no-data>\n </div>\n </td>\n</tr>\n</tbody>\n","import {Component, computed, input} from '@angular/core';\n\n@Component({\n selector: 'app-shimmer',\n standalone: true,\n imports: [],\n templateUrl: './shimmer.component.html',\n styleUrl: './shimmer.component.scss'\n})\nexport class ShimmerComponent {\n type = input<'grid' | 'list' | 'single-line' | 'multiline'>('grid');\n count = input(1);\n loop = computed(() => {\n return Array(this.count()).fill(1).map((x, i) => i);\n });\n}\n","@switch (type()) {\n @case ('grid') {\n <div class=\"space-y-5 rounded-2xl bg-white/1 animate-pulse\">\n <div class=\"h-24 rounded-lg bg-neutral-400/10\"></div>\n <div class=\"space-y-3\">\n <div class=\"h-3 w-3/5 rounded-lg bg-neutral-400/10\"></div>\n <div class=\"h-3 w-4/5 rounded-lg bg-neutral-400/15\"></div>\n <div class=\"h-3 w-2/5 rounded-lg bg-neutral-400/15\"></div>\n </div>\n </div>\n }\n @case ('list') {\n <div class=\"flex gap-3 rounded-2xl bg-white/1 animate-pulse\">\n <div class=\"w-24 rounded-lg bg-neutral-400/10\"></div>\n <div class=\"flex flex-col gap-3 w-full\">\n <div class=\"h-3 w-full rounded-lg bg-neutral-400/10\"></div>\n <div class=\"h-2 w-4/5 rounded-lg bg-neutral-400/15\"></div>\n <div class=\"h-2 w-2/5 rounded-lg bg-neutral-400/15\"></div>\n </div>\n </div>\n }\n @case ('single-line') {\n <div class=\"flex gap-3 rounded-2xl bg-white/1 animate-pulse\">\n <div class=\"flex flex-col gap-3 w-full\">\n <div class=\"h-3 w-full rounded-lg bg-neutral-400/10\"></div>\n </div>\n </div>\n }\n @case ('multiline') {\n <div class=\"flex gap-3 rounded-2xl bg-white/1 animate-pulse\">\n <div class=\"flex flex-col gap-3 w-full\">\n <div class=\"h-3 w-full rounded-lg bg-neutral-400/10\"></div>\n <div class=\"h-2 w-4/5 rounded-lg bg-neutral-400/15\"></div>\n </div>\n </div>\n }\n}\n\n\n","import {Component, Input, input, output} from '@angular/core';\nimport {FormsModule} from \"@angular/forms\";\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-pagination',\n standalone: true,\n imports: [\n FormsModule,\n NgClass\n ],\n templateUrl: './pagination.component.html',\n styleUrl: './pagination.component.scss'\n})\nexport class PaginationComponent {\n totalItems = input<number>(0);\n pageSizeOptions = input<number[]>([10, 25, 50, 100]);\n @Input() pageSize: number = 25; // Default page size\n\n pageChange = output<PaginationEvent>();\n\n currentPage: number = 1;\n\n get totalPages(): number {\n return Math.ceil(this.totalItems() / this.pageSize);\n }\n\n get startItem(): number {\n return this.totalItems() === 0 ? 0 : (this.currentPage - 1) * this.pageSize + 1;\n }\n\n get endItem(): number {\n return Math.min(this.currentPage * this.pageSize, this.totalItems());\n }\n\n changePageSize(event: string): void {\n const newSize = +event;\n this.pageSize = newSize;\n this.currentPage = 1; // Reset to first page when page size changes\n this.emitPageChange();\n }\n\n goToPage(page: number): void {\n if (page >= 1 && page <= this.totalPages) {\n this.currentPage = page;\n this.emitPageChange();\n }\n }\n\n goToFirstPage(): void {\n this.goToPage(1);\n }\n\n goToLastPage(): void {\n this.goToPage(this.totalPages);\n }\n\n goToNextPage(): void {\n if (this.currentPage < this.totalPages) {\n this.goToPage(this.currentPage + 1);\n }\n }\n\n goToPreviousPage(): void {\n if (this.currentPage > 1) {\n this.goToPage(this.currentPage - 1);\n }\n }\n\n emitPageChange(): void {\n this.pageChange.emit({ pageNumber: this.currentPage, pageSize: this.pageSize });\n }\n}\n\nexport interface PaginationEvent {\n pageNumber: number;\n pageSize: number;\n}\n","<div class=\"flex w-full items-center justify-between p-4 bg-white border-t border-neutral-50\">\n <div>\n <!-- Showing items text -->\n <p class=\"text-sm text-gray-700 text-nowrap\">\n Showing <span class=\"font-semibold\">{{ startItem }}</span> to <span class=\"font-semibold\">{{ endItem }}</span>\n of <span class=\"font-semibold\">{{ totalItems() }}</span> results\n </p>\n </div>\n\n <div class=\"flex items-center space-x-4\">\n\n <span class=\"text-body2\">Items per page:</span>\n\n <div class=\"relative inline-block border rounded p-2 text-caption\">\n <select [(ngModel)]=\"pageSize\" (ngModelChange)=\"changePageSize($event)\"\n class=\"\">\n @for (size of pageSizeOptions(); track size) {\n <option [value]=\"size\">{{ size }}</option>\n }\n </select>\n </div>\n\n <span class=\"text-caption\">{{ startItem }} - {{ endItem }} of {{ totalItems() }}</span>\n\n <button\n class=\"px-2 py-1 text-neutral-500 rounded disabled:text-neutral-500 disabled:cursor-not-allowed\"\n [ngClass]=\"{ 'opacity-50': currentPage === 1 }\"\n [disabled]=\"currentPage === 1\"\n (click)=\"goToFirstPage()\">\n <svg class=\"text-neutral-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M18.41 16.59L13.82 12L18.41 7.41L17 6L11 12L17 18L18.41 16.59ZM6 6H8V18H6V6Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <button\n class=\"px-2 py-1 text-neutral-500 rounded disabled:text-neutral-500 disabled:cursor-not-allowed\"\n [ngClass]=\"{ 'opacity-50': currentPage === 1 }\"\n [disabled]=\"currentPage === 1\"\n (click)=\"goToPreviousPage()\">\n <svg class=\"text-neutral-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15.41 16.58L10.83 12L15.41 7.41L14 6L8 12L14 18L15.41 16.58Z\" fill=\"black\"/>\n </svg>\n </button>\n\n <button\n class=\"px-2 py-1 text-neutral-500 rounded disabled:text-neutral-500 disabled:cursor-not-allowed\"\n [ngClass]=\"{ 'opacity-50': currentPage === totalPages }\"\n [disabled]=\"currentPage === totalPages\"\n (click)=\"goToNextPage()\">\n <svg class=\"text-neutral-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M8.59 16.58L13.17 12L8.59 7.41L10 6L16 12L10 18L8.59 16.58Z\" fill=\"black\"/>\n </svg>\n </button>\n\n <button\n class=\"px-2 py-1 text-neutral-500 rounded disabled:text-neutral-500 disabled:cursor-not-allowed\"\n [ngClass]=\"{ 'opacity-50': currentPage === totalPages }\"\n [disabled]=\"currentPage === totalPages\"\n (click)=\"goToLastPage()\">\n <svg class=\"text-neutral-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M5.59 7.41L10.18 12L5.59 16.59L7 18L13 12L7 6L5.59 7.41ZM16 6H18V18H16V6Z\" fill=\"black\"/>\n </svg>\n </button>\n </div>\n</div>\n","import {AfterViewInit, Component, input, output, signal} from '@angular/core';\nimport {NoDataTableComponent} from \"../../no-data-table/no-data-table.component\";\nimport {ShimmerComponent} from \"../../shimmer/shimmer.component\";\nimport {NgClass} from \"@angular/common\";\nimport {PaginationComponent, PaginationEvent} from \"../../pagination/pagination.component\";\nimport {State} from '../../../base/base-state';\n\n@Component({\n selector: 'app-base-table',\n standalone: true,\n imports: [\n NoDataTableComponent,\n ShimmerComponent,\n NgClass,\n PaginationComponent\n ],\n templateUrl: './base-table.component.html',\n styleUrl: './base-table.component.scss'\n})\nexport class BaseTableComponent<T> implements AfterViewInit {\n\n pageSize = input(10);\n state = input<State<any>>();\n isHorizontallyScrollable = input(false);\n itemsPerPage = input(10);\n\n pageChange = output<PaginationEvent>();\n\n ngAfterViewInit(): void {\n this.pageChange.emit({pageNumber: 1, pageSize: this.pageSize()});\n }\n\n onPageChange(event: PaginationEvent) {\n this.pageChange.emit(event);\n }\n\n}\n\nexport interface PagingEvent {\n pageNumber: number;\n pageSize: number;\n}\n","<div class=\"bg-white rounded-lg h-full\">\n <table class=\"w-full h-full min-w-full bg-white\" [ngClass]=\"isHorizontallyScrollable() ? 'overflow-x-auto' : ''\">\n\n <!-- Table header-->\n <thead class=\"sticky top-0 bg-white z-10\">\n <tr class=\"text-overline text-neutral-500 text-nowrap h-min\">\n <ng-content select=\"[head]\"></ng-content>\n </tr>\n <tr>\n <th colspan=\"100\">\n <div class=\"border-b border-neutral-200\"></div>\n </th>\n </tr>\n </thead>\n\n <!-- List Items-->\n <tbody class=\"h-min\">\n <ng-content select=\"[body]\"></ng-content>\n </tbody>\n\n <!-- Shimmer-->\n @if (state()?.loading()) {\n <tbody class=\"bg-white text-center py-14\">\n <tr>\n <td colspan=\"100\" class=\"h-min\">\n <div class=\"flex flex-col gap-10 px-6 py-8\">\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n </div>\n </td>\n </tr>\n </tbody>\n }\n\n <!-- No Table Indicator-->\n @if (state()?.success() && (state()?.response()?.data ?? []).length <= 0) {\n <tbody>\n <tr>\n <td colspan=\"1000\">\n <div class=\"flex flex-col justify-center items-center gap-8 px-6 py-8\">\n <app-no-data-table></app-no-data-table>\n </div>\n </td>\n </tr>\n </tbody>\n }\n\n <tbody class=\"h-full\"></tbody>\n\n\n <!-- Paginator-->\n <tbody class=\"bottom-0 sticky\">\n <tr>\n <td colspan=\"100\">\n <div class=\"bg-white w-full\">\n <app-pagination\n class=\"w-full\"\n [pageSize]=\"itemsPerPage()\"\n [totalItems]=\"state()?.response()?.totalCount ?? 0\"\n (pageChange)=\"onPageChange($event)\">\n </app-pagination>\n </div>\n </td>\n </tr>\n </tbody>\n\n </table>\n</div>\n\n\n<!--Example-->\n<!-- <app-base-table appTableResizableColumns sortableTable [state]=\"driverListState\">-->\n<!-- <ng-container head>-->\n<!-- <th class=\"p-4 text-left\">FULL NAME</th>-->\n<!-- <th class=\"p-4 text-center \">CONTACT</th>-->\n<!-- <th class=\"p-4 text-center \">HIRED DATA</th>-->\n<!-- &lt;!&ndash; <th class=\"p-4 text-center \">LICENSE EXPIRING</th>&ndash;&gt;-->\n<!-- <th class=\"p-4 text-center \">STATUS</th>-->\n<!-- <th class=\"p-4 text-center \"></th>-->\n<!-- </ng-container>-->\n\n<!-- <ng-container body>-->\n<!-- @for (item of driverListState.response()?.data; track item; ) {-->\n<!-- <tr class=\"border-b border-neutral-100 w-full\">-->\n<!-- <td class=\"px-4 py-2 text-left\">-->\n<!-- <div class=\"flex flex-col gap-2\">-->\n<!-- <span class=\"text-body2 text-neutral-800\">{{ item.fullName }}</span>-->\n<!-- <span class=\"text-caption text-neutral-500\">{{ item.code }}</span>-->\n<!-- </div>-->\n<!-- </td>-->\n<!-- <td class=\"px-4 py-2 text-center\">-->\n<!-- <div class=\"flex flex-col gap-2\">-->\n<!-- <span class=\"text-body2 text-info-500\">{{ item.email }}</span>-->\n<!-- <span class=\"text-body2 text-neutral-500\">{{ item.phoneNumber }}</span>-->\n<!-- </div>-->\n<!-- </td>-->\n<!-- <td class=\"px-4 text-body2 text-center\">{{ item.hiredDate | date:'MMM d, y' }}</td>-->\n<!-- &lt;!&ndash; <td class=\"px-4 text-body2 text-center\">{{ item.licenseExpiringDate |date:'MMM d, y h:mm a' }}</td>&ndash;&gt;-->\n<!-- <td class=\"px-4\">-->\n<!-- <div class=\"flex justify-center\">-->\n<!-- <app-driver-status-badge [driver]=\"item\"></app-driver-status-badge>-->\n<!-- </div>-->\n<!-- </td>-->\n<!-- <td class=\"p-4 cursor-pointer items-center\">-->\n<!-- <div class=\"flex justify-center items-center\">-->\n<!-- <app-button (click)=\"onViewDriverClicked(item)\" appearance=\"textType\" textButtonColor=\"text-info-500\">-->\n<!-- View-->\n<!-- </app-button>-->\n<!-- <app-context-menu-icon></app-context-menu-icon>-->\n<!-- </div>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!-- }-->\n<!-- </ng-container>-->\n<!-- </app-base-table>-->\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n OnInit,\n output,\n Renderer2\n} from '@angular/core';\n\n@Directive({\n selector: '[sortableTable]',\n standalone: true\n})\nexport class SortableTableDirective implements OnInit, AfterViewInit {\n\n sortChange = output<TableSortEvent>();\n\n private currentKey: string = '';\n private currentDirection: 'asc' | 'desc' | '' = '';\n\n constructor(private el: ElementRef, private renderer: Renderer2) {\n }\n\n ngOnInit() {\n\n }\n\n ngAfterViewInit(): void {\n // Find all <th> elements inside the table with data-sortable-key\n const thElements = this.el.nativeElement.querySelectorAll('th[data-sortable-key]');\n\n // Add click listeners to each <th>\n thElements.forEach((th: HTMLElement) => {\n // this.renderer.addClass(th, 'flex');\n this.renderer.setStyle(th, 'cursor', 'pointer');\n\n // Add hover listener to show the default up arrow on hover\n this.renderer.listen(th, 'mouseenter', () => this.onMouseEnter(th));\n this.renderer.listen(th, 'mouseleave', () => this.onMouseLeave(th));\n\n // Add click listener for sorting\n this.renderer.listen(th, 'click', () => this.onHeaderClick(th));\n });\n }\n\n // Handle hover enter - show the up arrow\n onMouseEnter(th: HTMLElement) {\n const key = th.getAttribute('data-sortable-key');\n if (!key) return;\n // If no sorting is active, show the default up arrow on hover\n if ((!this.currentKey || this.currentKey !== key)) {\n this.addSvgIcon(th, 'asc', true); // Add default up arrow on hover\n }\n }\n\n // Handle hover leave - remove the hover arrow if it wasn't sorted\n onMouseLeave(th: HTMLElement) {\n const key = th.getAttribute('data-sortable-key');\n if (!key) return;\n\n if (this.currentDirection == '') {\n this.currentKey = '';\n }\n\n // If it's not the current sorted column, remove the hover icon\n if (!this.currentKey || this.currentKey !== key) {\n const iconContainer = th.querySelector('.sort-icon-container');\n if (iconContainer) {\n iconContainer.remove(); // Remove the hover arrow\n }\n }\n }\n\n onHeaderClick(th: HTMLElement) {\n const key = th.getAttribute('data-sortable-key');\n\n if (this.currentKey === key) {\n // Toggle direction if the same header is clicked\n this.currentDirection = this.currentDirection === 'asc' ? 'desc' : this.currentDirection === 'desc' ? '' : 'asc';\n } else {\n // Start with ascending order if a new header is clicked\n this.currentDirection = 'asc';\n this.currentKey = key!;\n }\n\n // Emit the sorting event\n let event: TableSortEvent = {key: this.currentKey, direction: this.currentDirection};\n this.sortChange.emit(event);\n\n // Update the sort indicators by injecting SVG icons\n this.updateSortIndicators(th);\n }\n\n updateSortIndicators(th: HTMLElement) {\n const thElements = this.el.nativeElement.querySelectorAll('th[data-sortable-key]');\n\n // Clear all existing sort indicators\n thElements.forEach((header: HTMLElement) => {\n const icon = header.querySelector('.sort-icon');\n if (icon) {\n icon.remove(); // Remove existing icon\n }\n });\n\n // Add the correct sort icon to the clicked header\n if (this.currentDirection === 'asc') {\n this.addSvgIcon(th, 'asc');\n } else if (this.currentDirection === 'desc') {\n this.addSvgIcon(th, 'desc');\n }\n }\n\n addSvgIcon(th: HTMLElement, direction: 'asc' | 'desc', isHover = false) {\n const existingIconContainer = th.querySelector('.sort-icon-container');\n if (existingIconContainer) {\n existingIconContainer.remove();\n }\n // Create a span to contain the icon\n const iconContainer = this.renderer.createElement('span');\n this.renderer.addClass(iconContainer, 'absolute');\n this.renderer.addClass(iconContainer, 'right-2');\n this.renderer.addClass(iconContainer, 'top-1/2');\n this.renderer.addClass(iconContainer, '-translate-y-1/2');\n this.renderer.addClass(iconContainer, 'sort-icon-container');\n this.renderer.addClass(iconContainer, 'inline-flex');\n this.renderer.addClass(iconContainer, 'align-sub');\n this.renderer.setStyle(iconContainer, 'margin-left', '0.25rem');\n // Create the SVG icon\n const svgIcon = this.renderer.createElement('svg', 'http://www.w3.org/2000/svg');\n this.renderer.setAttribute(svgIcon, 'class', `sort-icon sort-${direction}`);\n this.renderer.setAttribute(svgIcon, 'width', '12');\n this.renderer.setAttribute(svgIcon, 'height', '12');\n this.renderer.setAttribute(svgIcon, 'viewBox', '0 0 24 24');\n this.renderer.setAttribute(svgIcon, 'fill', 'currentColor');\n // this.renderer.setAttribute(svgIcon, 'stroke', 'currentColor');\n\n let upArrow = 'M13 20H11V8.00003L5.49996 13.5L4.07996 12.08L12 4.16003L19.92 12.08L18.5 13.5L13 8.00003V20Z';\n let downArrow = 'M11.1115 4.30078H13.1115V16.3008L18.6115 10.8008L20.0315 12.2208L12.1115 20.1408L4.19153 12.2208L5.61153 10.8008L11.1115 16.3008V4.30078Z';\n const path = this.renderer.createElement('path', 'http://www.w3.org/2000/svg');\n const pathData = direction === 'asc' ? upArrow : downArrow;\n this.renderer.setAttribute(path, 'd', pathData);\n\n // Append the path to the SVG\n this.renderer.appendChild(svgIcon, path);\n\n // Append the SVG icon to the span\n this.renderer.appendChild(iconContainer, svgIcon);\n\n // Find the div with the class 'column-resizer'\n const resizerDiv = th.querySelector('.column-resizer');\n\n // Insert the icon container before the resizer div\n if (resizerDiv) {\n this.renderer.insertBefore(th, iconContainer, resizerDiv);\n } else {\n this.renderer.appendChild(th, iconContainer);\n }\n\n if (isHover) {\n this.renderer.setStyle(svgIcon, 'fill', 'grey');\n } else {\n this.renderer.setStyle(svgIcon, 'fill', 'black');\n }\n }\n}\n\nexport interface TableSortEvent {\n key?: string | null;\n direction?: string | null;\n}\n","import {AfterViewInit, Directive, ElementRef, inject, Renderer2} from '@angular/core';\n\n@Directive({\n selector: '[appResizableColumn]',\n standalone: true\n})\nexport class ResizableColumnDirective implements AfterViewInit {\n private startX!: number;\n private startWidth!: number;\n private resizeColumnHandler: any;\n private stopResizeHandler: any;\n\n el = inject(ElementRef);\n renderer = inject(Renderer2);\n\n ngAfterViewInit(): void {\n // Set necessary styles on the th element\n this.renderer.setStyle(this.el.nativeElement, 'position', 'relative');\n this.renderer.setStyle(this.el.nativeElement, 'white-space', 'nowrap');\n\n // Create the div with class p-[2px]\n const resizeDiv = this.renderer.createElement('div');\n this.renderer.setAttribute(resizeDiv, 'class', 'column-resizer absolute flex justify-center top-1/2 -translate-y-1/2 right-0 bottom-0 w-[8px] h-[80%] cursor-col-resize z-10');\n\n // Create the span with the Tailwind CSS classes\n const resizeHandle = this.renderer.createElement('span');\n this.renderer.setAttribute(resizeHandle, 'class', 'bg-gray-100 w-[1px] h-full block');\n\n // Append the span to the div\n this.renderer.appendChild(resizeDiv, resizeHandle);\n\n // Append the div to the th element\n this.renderer.appendChild(this.el.nativeElement, resizeDiv);\n\n // Add mousedown listener to the resize handle\n this.renderer.listen(resizeDiv, 'mousedown', this.startResize.bind(this));\n }\n\n startResize(event: MouseEvent) {\n event.preventDefault();\n this.startX = event.pageX;\n this.startWidth = this.el.nativeElement.offsetWidth;\n\n // Bind event listeners for mousemove and mouseup\n this.resizeColumnHandler = this.resizeColumn.bind(this);\n this.stopResizeHandler = this.stopResize.bind(this);\n document.addEventListener('mousemove', this.resizeColumnHandler);\n document.addEventListener('mouseup', this.stopResizeHandler);\n }\n\n resizeColumn(event: MouseEvent) {\n const diffX = event.pageX - this.startX;\n const newWidth = this.startWidth + diffX;\n this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);\n }\n\n stopResize() {\n // Remove the event listeners once the resize is done\n document.removeEventListener('mousemove', this.resizeColumnHandler);\n document.removeEventListener('mouseup', this.stopResizeHandler);\n }\n}\n","import {AfterViewInit, Directive, ElementRef, inject, Input, Renderer2} from '@angular/core';\n\n@Directive({\n selector: '[appTableResizableColumns]',\n standalone: true\n})\nexport class TableResizableColumnsDirective implements AfterViewInit {\n\n el = inject(ElementRef);\n renderer = inject(Renderer2);\n\n @Input('appTableResizableColumns') applyResizableColumn!: boolean;\n\n constructor() {\n\n }\n\n ngAfterViewInit(): void {\n if (!this.applyResizableColumn) {\n return;\n }\n this.applyDirectiveLogic();\n }\n\n applyDirectiveLogic() {\n const thElements = this.el.nativeElement.querySelectorAll('thead tr th');\n\n thElements.forEach((thElement: HTMLElement) => {\n // Set necessary styles on each th element\n this.renderer.setStyle(thElement, 'position', 'relative');\n this.renderer.setStyle(thElement, 'white-space', 'nowrap');\n\n // Create the div with the necessary classes\n const resizeDiv = this.renderer.createElement('div');\n this.renderer.setAttribute(resizeDiv, 'class', 'column-resizer absolute flex justify-center top-1/2 -translate-y-1/2 right-0 bottom-0 w-[8px] h-[80%] cursor-col-resize z-10');\n\n // Create the span with the necessary Tailwind CSS classes\n const resizeHandle = this.renderer.createElement('span');\n this.renderer.setAttribute(resizeHandle, 'class', 'bg-gray-100 w-[1px] h-full block');\n\n // Append the span to the div\n this.renderer.appendChild(resizeDiv, resizeHandle);\n\n // Append the div to the th element\n this.renderer.appendChild(thElement, resizeDiv);\n\n // Add the resize functionality to each th element\n this.addResizeFunctionality(thElement, resizeDiv);\n });\n }\n\n addResizeFunctionality(thElement: HTMLElement, resizeDiv: HTMLElement) {\n let startX: number;\n let startWidth: number;\n\n const startResize = (event: MouseEvent) => {\n event.preventDefault(); // Prevent text selection\n startX = event.pageX;\n startWidth = thElement.offsetWidth;\n\n // Bind event listeners for mousemove and mouseup\n document.addEventListener('mousemove', resizeColumn);\n document.addEventListener('mouseup', stopResize);\n };\n\n const resizeColumn = (event: MouseEvent) => {\n const diffX = event.pageX - startX;\n const newWidth = startWidth + diffX;\n this.renderer.setStyle(thElement, 'width', `${newWidth}px`);\n };\n\n const stopResize = () => {\n // Remove the event listeners once resizing is complete\n document.removeEventListener('mousemove', resizeColumn);\n document.removeEventListener('mouseup', stopResize);\n };\n\n // Add mousedown listener to the resize handle (div)\n this.renderer.listen(resizeDiv, 'mousedown', startResize);\n }\n\n}\n","import {Component, inject, input, OnDestroy, OnInit} from '@angular/core';\nimport {Subscription} from \"rxjs\";\nimport {filter} from \"rxjs/operators\";\nimport {NavigationEnd, Router} from \"@angular/router\";\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-breadcrumb',\n standalone: true,\n imports: [\n NgClass\n ],\n templateUrl: './breadcrumb.component.html',\n styleUrl: './breadcrumb.component.scss'\n})\nexport class BreadcrumbComponent implements OnInit, OnDestroy {\n router = inject(Router);\n breadcrumbs: Breadcrumb[] = [];\n\n private subscription: Subscription | undefined;\n\n\n ngOnInit(): void {\n this.generateBreadcrumbs();\n this.subscription = this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n this.generateBreadcrumbs();\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n private generateBreadcrumbs(): void {\n const url = this.router.url.split('?')[0]; // Remove query parameters\n const urlSegments = url.split('/').filter((segment) => segment); // Split by '/' and remove empty segments\n\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; // Regex to match UUIDs\n\n let accumulatedPath = '';\n this.breadcrumbs = urlSegments\n .filter((segment) => !uuidRegex.test(segment)) // Skip segments matching the UUID format\n .map((segment) => {\n accumulatedPath += `/${segment}`; // Accumulate path for breadcrumb route\n return {\n title: this.formatSegment(segment), // Convert to readable title\n route: accumulatedPath,\n };\n });\n }\n\n private formatSegment(segment: string): string {\n return segment\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n\n navigate(route: string): void {\n this.router.navigate([route]);\n }\n}\n\n\nexport interface Breadcrumb {\n title: string;\n route?: string;\n}\n","<div class=\"flex items-center\">\n @for (breadcrumb of breadcrumbs; track i; let last = $last; let i = $index) {\n <div class=\"flex items-center\">\n\n <span (click)=\"!last ? navigate(breadcrumb.route!) : null\"\n class=\"text-caption cursor-pointer px-2.5 py-1.5 rounded-full transition-all duration-500\"\n [ngClass]=\"[last ? 'text-black font-medium' : 'text-neutral-500 hover:bg-neutral-200/80']\">\n {{ breadcrumb.title }}\n </span>\n\n @if (!last) {\n <span class=\"mx-2 text-caption text-neutral-400\">\n <svg class=\"w-[16px] h-[16px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" fill=\"currentColor\"/>\n </svg>\n </span>\n }\n </div>\n }\n</div>\n","import { Component } from '@angular/core';\nimport {AppSvgIconComponent} from \"../app-svg-icon/app-svg-icon.component\";\n\n@Component({\n selector: 'app-close-button',\n standalone: true,\n imports: [\n AppSvgIconComponent\n ],\n templateUrl: './close-button.component.html',\n styleUrl: './close-button.component.scss'\n})\nexport class CloseButtonComponent {\n\n}\n","<p class=\"rounded-lg p-3 border border-neutral-300 cursor-pointer hover:bg-neutral-50\">\n <app-svg-icon src=\"assets/icons/close.svg\" class=\"text-neutral-800\" [size]=\"12\"></app-svg-icon>\n</p>\n","import {Component, input, output} from '@angular/core';\n\n@Component({\n selector: 'app-context-menu',\n standalone: true,\n imports: [\n ],\n templateUrl: './context-menu.component.html',\n styleUrl: './context-menu.component.scss'\n})\nexport class ContextMenuComponent {\n actions = input<ContextMenuAction[]>();\n onActionClicked = output<string>();\n\n _onActionClicked($event: MouseEvent, action: ContextMenuAction) {\n $event.stopPropagation();\n this.onActionClicked.emit(action.actionKey);\n }\n}\n\n\nexport interface ContextMenuAction {\n iconPath?: string;\n label: string;\n actionKey: string;\n}\n\n","<!--<button mat-icon-button [matMenuTriggerFor]=\"menu\">-->\n<!-- <app-context-menu-icon></app-context-menu-icon>-->\n<!--&lt;!&ndash; <svg class=\"h-[20px] w-[20px] text-neutral-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">&ndash;&gt;-->\n<!--&lt;!&ndash; <path d=\"M12 16C12.5304 16 13.0391 16.2107 13.4142 16.5858C13.7893 16.9609 14 17.4696 14 18C14 18.5304 13.7893 19.0391 13.4142 19.4142C13.0391 19.7893 12.5304 20 12 20C11.4696 20 10.9609 19.7893 10.5858 19.4142C10.2107 19.0391 10 18.5304 10 18C10 17.4696 10.2107 16.9609 10.5858 16.5858C10.9609 16.2107 11.4696 16 12 16ZM12 10C12.5304 10 13.0391 10.2107 13.4142 10.5858C13.7893 10.9609 14 11.4696 14 12C14 12.5304 13.7893 13.0391 13.4142 13.4142C13.0391 13.7893 12.5304 14 12 14C11.4696 14 10.9609 13.7893 10.5858 13.4142C10.2107 13.0391 10 12.5304 10 12C10 11.4696 10.2107 10.9609 10.5858 10.5858C10.9609 10.2107 11.4696 10 12 10ZM12 4C12.5304 4 13.0391 4.21071 13.4142 4.58579C13.7893 4.96086 14 5.46957 14 6C14 6.53043 13.7893 7.03914 13.4142 7.41421C13.0391 7.78929 12.5304 8 12 8C11.4696 8 10.9609 7.78929 10.5858 7.41421C10.2107 7.03914 10 6.53043 10 6C10 5.46957 10.2107 4.96086 10.5858 4.58579C10.9609 4.21071 11.4696 4 12 4Z\" fill=\"currentColor\"/>&ndash;&gt;-->\n<!--&lt;!&ndash; </svg>&ndash;&gt;-->\n<!--</button>-->\n\n<!--<mat-menu #menu=\"matMenu\">-->\n\n<!-- @for (action of actions(); track action.actionKey) {-->\n<!-- <div (click)=\"_onActionClicked($event, action)\" class=\"flex items-center gap-3 py-3 px-3 hover:bg-neutral-100 cursor-pointer\">-->\n<!-- @if(action.iconPath != null && action.iconPath != '') {-->\n<!-- <app-svg-icon class=\"text-neutral-600\" [src]=\"action.iconPath\" [size]=\"20\"></app-svg-icon>-->\n<!-- }-->\n<!-- <span class=\"text-body2 text-neutral-600 font-medium\">{{ action.label }}</span>-->\n<!-- </div>-->\n<!-- }-->\n<!--</mat-menu>-->\n","import {Component, inject, output} from '@angular/core';\nimport {DIALOG_DATA, DialogRef} from \"@angular/cdk/dialog\";\nimport {AppSvgIconComponent} from '../../app-svg-icon/app-svg-icon.component';\nimport {ContextMenuButtonAction} from '../context-menu-button.component';\n\n@Component({\n selector: 'app-overlay-context-menu',\n imports: [\n AppSvgIconComponent,\n ],\n templateUrl: './overlay-context-menu.component.html',\n styleUrl: './overlay-context-menu.component.scss'\n})\nexport class OverlayContextMenuComponent {\n\n dialogRef = inject(DialogRef);\n actions: ContextMenuButtonAction[] = inject(DIALOG_DATA);\n\n _onActionClicked($event: MouseEvent, action: ContextMenuButtonAction) {\n this.dialogRef.close(action.actionKey);\n $event.stopPropagation();\n }\n}\n","<div class=\"flex flex-col gap-2 min-w-[200px] py-2\">\n @for (action of actions; track action.actionKey) {\n <div (click)=\"_onActionClicked($event, action)\"\n class=\"flex items-center gap-3 py-3 px-3 hover:bg-neutral-100/80 cursor-pointer\">\n @if (action.iconPath != null && action.iconPath != '') {\n <app-svg-icon class=\"text-neutral-600\" [src]=\"action.iconPath\" [size]=\"20\"></app-svg-icon>\n }\n <span class=\"text-caption text-neutral-600 font-normal\">{{ action.label }}</span>\n </div>\n }\n</div>\n","import {Component, ElementRef, inject, input, OnDestroy, output, ViewChild} from '@angular/core';\nimport {FlexibleConnectedPositionStrategy, GlobalPositionStrategy, Overlay} from \"@angular/cdk/overlay\";\nimport {Dialog, DialogRef} from \"@angular/cdk/dialog\";\nimport {Subscription} from \"rxjs\";\nimport {OverlayContextMenuComponent} from './overlay-context-menu/overlay-context-menu.component';\n\n@Component({\n selector: 'app-context-menu-button',\n imports: [],\n templateUrl: './context-menu-button.component.html',\n standalone: true,\n styleUrl: './context-menu-button.component.scss'\n})\nexport class ContextMenuButtonComponent implements OnDestroy {\n\n @ViewChild('trigger', {static: true}) trigger!: ElementRef;\n overlay = inject(Overlay);\n dialog = inject(Dialog);\n\n actions = input<ContextMenuButtonAction[]>();\n positionPreference = input<'topLeft' | 'topRight' | 'topCenter' |\n 'bottomLeft' | 'bottomRight' | 'bottomCenter' |\n 'leftTop' | 'leftCenter' | 'leftBottom' |\n 'rightTop' | 'rightCenter' | 'rightBottom' |\n 'center'>('bottomCenter');\n onActionClicked = output<string>();\n\n private basePanelClass = ['bg-white', 'shadow-2'];\n\n private dialogRef?: DialogRef<any, OverlayContextMenuComponent>;\n private subscription?: Subscription;\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n onMenuClicked() {\n\n let positionStrategy: FlexibleConnectedPositionStrategy | GlobalPositionStrategy | null;\n let scrollStrategy: 'noop' | 'block' | 'reposition' | 'close' = 'block';\n\n let disableClose = false;\n\n const positionMappings: any = {\n // **BOTTOM POSITIONS**\n bottomRight: [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 8 },\n ],\n bottomCenter: [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\n ],\n bottomLeft: [\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 8 },\n ],\n\n // **TOP POSITIONS**\n topRight: [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -8 },\n ],\n topCenter: [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\n ],\n topLeft: [\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -8 },\n ],\n\n // **LEFT POSITIONS**\n leftBottom: [\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },\n ],\n leftCenter: [\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\n ],\n leftTop: [\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -8 },\n ],\n\n // **RIGHT POSITIONS**\n rightBottom: [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },\n ],\n rightCenter: [\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\n ],\n rightTop: [\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 8 },\n ],\n\n // **CENTER**\n center: [\n { originX: 'center', originY: 'center', overlayX: 'center', overlayY: 'center' },\n ]\n };\n\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.trigger)\n .withFlexibleDimensions(false)\n .withPush(true)\n .withPositions(positionMappings[this.positionPreference()] || positionMappings.bottomCenter);\n\n\n const scrollStrategyMapping = {\n noop: this.overlay.scrollStrategies.noop(),\n block: this.overlay.scrollStrategies.block(),\n reposition: this.overlay.scrollStrategies.reposition(),\n close: this.overlay.scrollStrategies.close(),\n };\n\n const appliedScrollStrategy = scrollStrategyMapping[scrollStrategy] ?? this.overlay.scrollStrategies.block();\n\n this.dialogRef = this.dialog.open(OverlayContextMenuComponent, {\n positionStrategy: positionStrategy,\n scrollStrategy: appliedScrollStrategy,\n disableClose: disableClose,\n backdropClass: ['overflow-clip'],\n panelClass: [...this.basePanelClass, 'rounded-xl', 'overflow-clip'],\n data: this.actions()\n });\n\n this.subscription = this.dialogRef.closed.subscribe((actionKey: string) => {\n this.onActionClicked.emit(actionKey);\n });\n }\n}\n\n\nexport interface ContextMenuButtonAction {\n iconPath?: string;\n label: string;\n actionKey: string;\n}\n","<div #trigger (click)=\"onMenuClicked()\" class=\"flex w-min h-min justify-center items-center p-2 rounded-full hover:bg-neutral-100 cursor-pointer transition-all duration-300\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" class=\"size-6 text-neutral-500\">\n <path d=\"M12 16C12.5304 16 13.0391 16.2107 13.4142 16.5858C13.7893 16.9609 14 17.4696 14 18C14 18.5304 13.7893 19.0391 13.4142 19.4142C13.0391 19.7893 12.5304 20 12 20C11.4696 20 10.9609 19.7893 10.5858 19.4142C10.2107 19.0391 10 18.5304 10 18C10 17.4696 10.2107 16.9609 10.5858 16.5858C10.9609 16.2107 11.4696 16 12 16ZM12 10C12.5304 10 13.0391 10.2107 13.4142 10.5858C13.7893 10.9609 14 11.4696 14 12C14 12.5304 13.7893 13.0391 13.4142 13.4142C13.0391 13.7893 12.5304 14 12 14C11.4696 14 10.9609 13.7893 10.5858 13.4142C10.2107 13.0391 10 12.5304 10 12C10 11.4696 10.2107 10.9609 10.5858 10.5858C10.9609 10.2107 11.4696 10 12 10ZM12 4C12.5304 4 13.0391 4.21071 13.4142 4.58579C13.7893 4.96086 14 5.46957 14 6C14 6.53043 13.7893 7.03914 13.4142 7.41421C13.0391 7.78929 12.5304 8 12 8C11.4696 8 10.9609 7.78929 10.5858 7.41421C10.2107 7.03914 10 6.53043 10 6C10 5.46957 10.2107 4.96086 10.5858 4.58579C10.9609 4.21071 11.4696 4 12 4Z\" fill=\"currentColor\"/>\n </svg>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-context-menu-icon',\n standalone: true,\n imports: [\n ],\n templateUrl: './context-menu-icon.component.html',\n styleUrl: './context-menu-icon.component.scss'\n})\nexport class ContextMenuIconComponent {\n\n}\n","<div class=\"flex w-min h-min justify-center items-center p-2 rounded-full hover:bg-neutral-100 cursor-pointer transition-all duration-300\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" class=\"size-6 text-neutral-500\">\n <path d=\"M12 16C12.5304 16 13.0391 16.2107 13.4142 16.5858C13.7893 16.9609 14 17.4696 14 18C14 18.5304 13.7893 19.0391 13.4142 19.4142C13.0391 19.7893 12.5304 20 12 20C11.4696 20 10.9609 19.7893 10.5858 19.4142C10.2107 19.0391 10 18.5304 10 18C10 17.4696 10.2107 16.9609 10.5858 16.5858C10.9609 16.2107 11.4696 16 12 16ZM12 10C12.5304 10 13.0391 10.2107 13.4142 10.5858C13.7893 10.9609 14 11.4696 14 12C14 12.5304 13.7893 13.0391 13.4142 13.4142C13.0391 13.7893 12.5304 14 12 14C11.4696 14 10.9609 13.7893 10.5858 13.4142C10.2107 13.0391 10 12.5304 10 12C10 11.4696 10.2107 10.9609 10.5858 10.5858C10.9609 10.2107 11.4696 10 12 10ZM12 4C12.5304 4 13.0391 4.21071 13.4142 4.58579C13.7893 4.96086 14 5.46957 14 6C14 6.53043 13.7893 7.03914 13.4142 7.41421C13.0391 7.78929 12.5304 8 12 8C11.4696 8 10.9609 7.78929 10.5858 7.41421C10.2107 7.03914 10 6.53043 10 6C10 5.46957 10.2107 4.96086 10.5858 4.58579C10.9609 4.21071 11.4696 4 12 4Z\" fill=\"currentColor\"/>\n </svg>\n</div>\n","import {Component, input, Input, output} from '@angular/core';\nimport {TableActionEvent} from '../data-table.component';\n\n@Component({\n selector: 'lib-table-custom-component',\n imports: [],\n templateUrl: './table-custom.component.html',\n styleUrl: './table-custom.component.scss'\n})\nexport class TableCustomComponent<T> {\n @Input() rowData!: T;\n @Input() data: any;\n @Input() rowPosition: number | undefined;\n @Input() isLastRow: boolean = false;\n\n actionPerformed = output<TableActionEvent>();\n}\n","","import {Component, input, Input} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-status-badge',\n imports: [\n NgClass\n ],\n templateUrl: './status-badge.component.html',\n standalone: true,\n styleUrls: ['./status-badge.component.scss']\n})\nexport class StatusBadgeComponent {\n status = input.required<string | null | undefined>();\n backgroundColorClass = input.required<string | null>();\n indicatorColor = input<string | null>();\n textColorClass = input.required<string | null>();\n borderColorClass = input.required<string | null>();\n isUpperCase = input<boolean>(false);\n}\n","<div class=\"flex px-2.5 py-1.5 border items-center rounded-full gap-2\"\n [ngClass]=\"[backgroundColorClass() ?? 'bg-neutral-50', borderColorClass() ?? '']\">\n @if(indicatorColor()) {\n <span class=\"h-[6px] w-[6px] rounded-full\" [ngClass]=\"indicatorColor() ?? 'bg-neutral-500'\"></span>\n }\n <span class=\"text-overline\"\n [ngClass]=\"[textColorClass() ?? 'text-neutral-500', isUpperCase() ? 'uppercase' : '']\">{{ status() ?? 'Unknown' }}</span>\n</div>\n","import {AfterContentInit, Component, input, OnInit, signal} from '@angular/core';\nimport {ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\n\n\n\n@Component({\n selector: 'app-checkbox',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n ],\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss'\n})\nexport class CheckboxComponent extends BaseControlValueAccessorV3<boolean> implements OnInit, AfterContentInit {\n title = input<string | null>();\n id = signal<string>('');\n\n ngOnInit(): void {\n this.id.set(this.getId());\n }\n\n protected override onValueReady(value: boolean): void {}\n\n onCheckboxSelected($event: Event, enterKeyPressed: boolean = false) {\n if (!this.disabled()) {\n this.markAsTouched();\n let checkbox = $event.target as HTMLInputElement;\n let value = ($event.target as HTMLInputElement).checked;\n if(enterKeyPressed) {\n value = !value;\n checkbox.checked = value;\n }\n this.onValueChange(value);\n }\n }\n\n private getId(): string {\n const randomNumber = Math.floor(1000 + Math.random() * 9000);\n return `checkbox-${randomNumber.toString()}`;\n }\n\n handleKeydown($event: KeyboardEvent) {\n if($event.key == 'Enter') {\n this.onCheckboxSelected($event, true);\n }\n }\n}\n","<div class=\"flex items-center gap-3\">\n <label class=\"relative flex items-center rounded-full cursor-pointer py-3\" [for]=\"id()\">\n <input type=\"checkbox\"\n (change)=\"onCheckboxSelected($event)\"\n [formControl]=\"formControl\"\n class=\"before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-sm border-2 border-neutral-600 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-primary-200 before:opacity-0 before:transition-opacity checked:border-primary-500 checked:bg-primary-500 checked:before:bg-neutral-900\"\n [id]=\"id()\"\n (keydown)=\"handleKeydown($event)\"/>\n <span\n class=\"absolute text-white transition-opacity opacity-0 pointer-events-none top-2/4 left-2/4 -translate-y-2/4 -translate-x-2/4 peer-checked:opacity-100\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-3.5 w-3.5\" viewBox=\"0 0 20 20\" fill=\"currentColor\"\n stroke=\"currentColor\" stroke-width=\"1\">\n <path fill-rule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clip-rule=\"evenodd\"></path>\n </svg>\n </span>\n </label>\n @if(title()) {\n <label class=\"m-0 text-body2 cursor-pointer select-none\" [for]=\"id()\">{{ title() }}</label>\n }\n</div>\n","import {InjectionToken} from '@angular/core';\n\nexport const defaultErrors = {\n required: () => `Required`,\n minlength: ({requiredLength, actualLength}: any) =>\n `Minimum ${requiredLength} characters required`,\n maxlength: ({requiredLength, actualLength}: any) =>\n `Maximum ${requiredLength} characters allowed`,\n min: ({min, actual}: any) => `Minimum ${min} required`,\n max: ({max, actual}: any) => `Maximum ${max} allowed`,\n matchOthers: () => 'Passwords does not match',\n email: () => 'Please enter a valid email',\n invalidDate: (errorMessage: any) => errorMessage,\n};\n\nexport const FORM_ERRORS = new InjectionToken('FORM_ERRORS', {\n providedIn: 'root',\n factory: () => defaultErrors\n});\n","import {Inject, Pipe, PipeTransform} from '@angular/core';\nimport {ValidationErrors} from '@angular/forms';\nimport {FORM_ERRORS} from './form-errors';\n\n@Pipe({standalone: true, name: 'humanizeFormMessages'})\nexport class HumanizeFormMessagesPipe implements PipeTransform {\n constructor(@Inject(FORM_ERRORS) private messages: any) {\n }\n\n transform(\n validationErrors: ValidationErrors,\n overriddenMessages: { [key: string]: string }\n ) {\n if (!validationErrors) {\n return '';\n }\n\n // Allow the possibility to override messages\n const messages = {\n ...this.messages,\n ...overriddenMessages\n };\n\n const messageKey = Object.keys(validationErrors)[0];\n const getMessage = messages[messageKey];\n const message = getMessage\n ? getMessage(validationErrors[messageKey])\n : 'Invalid field';\n return message;\n }\n}\n","import {Component, input, signal} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-base-input',\n standalone: true,\n imports: [\n NgClass\n ],\n templateUrl: './base-input.component.html',\n styleUrl: './base-input.component.scss'\n})\nexport class BaseInputComponent {\n title = input<string | null | undefined>(null);\n isRequiredField = input<boolean>(false);\n fullWidth = input<boolean>(false);\n inputType = input<'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url' | 'file'>('text');\n}\n","<div class=\"app-form-control inline-flex items-center cursor-pointer select-none\"\n [ngClass]=\"fullWidth() ? 'w-full' : ''\">\n <div class=\"flex gap-6 items-center w-full\">\n <div class=\"flex flex-col justify-center gap-2 w-full\">\n @if (title()) {\n <div class=\"flex gap-1\">\n <span class=\"text-body2 text-nowrap text-primary-900\">{{ title() }}</span>\n @if (isRequiredField()) {\n <span class=\"text-body2 text-error-600\">*</span>\n }\n </div>\n }\n <ng-content class=\"w-full\" select=\"[input]\"></ng-content>\n\n <ng-content select=\"[error]\"></ng-content>\n\n </div>\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n</div>\n","import {\n AfterContentInit, AfterViewInit,\n Component,\n inject,\n input, OnDestroy,\n output,\n signal\n} from '@angular/core';\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {NgClass} from \"@angular/common\";\nimport {CommonModule} from '@angular/common';\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {NgxMaskDirective} from \"ngx-mask\";\nimport {debounceTime, Subject} from \"rxjs\";\n\n@Component({\n selector: 'app-text-input',\n standalone: true,\n imports: [\n NgClass,\n ReactiveFormsModule,\n HumanizeFormMessagesPipe,\n AppSvgIconComponent,\n CommonModule,\n BaseInputComponent,\n NgxMaskDirective\n ],\n templateUrl: './text-input.component.html',\n styleUrl: './text-input.component.scss'\n})\nexport class TextInputComponent extends BaseControlValueAccessor implements AfterContentInit, AfterViewInit, OnDestroy {\n\n appearance = input<'fill' | 'outline'>('outline');\n type = input<'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url' | 'time'>('text');\n viewType = input<'text' | 'text-area'>('text');\n iconSrc = input<string | null>();\n actionIcon = input<string | null>();\n label = input<string | null>();\n fullWidth = input<boolean>(false);\n placeholder = input<string>('');\n errorMessages = input<{ [key: string]: string }>({});\n showErrorSpace = input<boolean>(false);\n mask = input<string | null>(null);\n debounceSearchEnabled = input<boolean>(true);\n\n changeValue = output<string>();\n actionIconClicked = output();\n\n isFocused = signal(false);\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n private searchSubject: Subject<string> = new Subject<string>();\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n ngAfterViewInit(): void {\n if (this.debounceSearchEnabled()) {\n this.searchSubject.pipe(debounceTime(600)).subscribe((value: string) => {\n this.changeValue.emit(value); // Emit the value after debounce\n });\n }\n }\n\n ngOnDestroy(): void {\n try {\n this.searchSubject.complete();\n } catch (e) {\n }\n }\n\n onValueChange(event: any) {\n const target = event.target as HTMLInputElement;\n this.onChange(target.value);\n if (this.debounceSearchEnabled()) {\n this.searchSubject.next(target.value);\n } else {\n this.changeValue.emit(target.value);\n }\n }\n\n getClass() {\n let cls = '';\n if (this.iconSrc()) {\n cls = cls + 'pr-3 pl-10';\n } else {\n cls = cls + 'px-3';\n }\n\n if (this.fullWidth()) {\n cls = cls + ' ' + 'w-full';\n }\n\n return cls;\n }\n\n onActionClicked() {\n this.actionIconClicked.emit();\n }\n\n onFocus() {\n this.isFocused.set(true);\n }\n\n onBlur() {\n this.onTouched();\n this.isFocused.set(false);\n }\n}\n","<app-base-input #inputElement [title]=\"label()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"relative flex items-center w-full text-neutral-400 bg-white shadow-1 rounded-md\">\n @if (iconSrc()) {\n <app-svg-icon [size]=\"18\" [src]=\"iconSrc()!\"\n class=\"absolute pointer-events-none ml-3 text-neutral-400\"></app-svg-icon>\n }\n\n<!-- <p>{{ formControl.getError('required') ? placeholder + ' ' : placeholder }}</p>-->\n\n <input\n [mask]=\"mask()\"\n class=\"h-[46px] placeholder-neutral-400 text-black rounded-md border-none outline-none focus:border-none ring-1 ring-neutral-300 focus:ring-primary-500 focus:ring-2 transition-all duration-300\"\n [class.text-neutral-400]=\"formControl.disabled\"\n [class.disabled-placeholder]=\"formControl.disabled\"\n [formControl]=\"formControl\"\n [ngClass]=\"getClass()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (input)=\"onValueChange($event)\">\n\n @if (actionIcon()) {\n <div (click)=\"onActionClicked()\"\n class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full\">\n <app-svg-icon [size]=\"18\" [src]=\"actionIcon()!\" class=\"text-neutral-400 cursor-pointer\">\n </app-svg-icon>\n </div>\n }\n </div>\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-text-button-small',\n standalone: true,\n imports: [],\n templateUrl: './text-button-small.component.html',\n styleUrl: './text-button-small.component.scss'\n})\nexport class TextButtonSmall {\n\n}\n","<span class=\"text-body2 cursor-pointer py-2 px-4 text-info-500 hover:bg-info-50 rounded-full transition-all duration-300\">\n <ng-content></ng-content>\n</span>\n","import {\n Component,\n ComponentRef, input,\n Input,\n OnChanges, OnDestroy, output, OutputEmitterRef, OutputRefSubscription,\n SimpleChanges,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {TableActionEvent} from '../data-table/data-table.component';\n\n@Component({\n selector: 'app-dynamic-renderer',\n imports: [],\n templateUrl: './dynamic-renderer.component.html',\n styleUrl: './dynamic-renderer.component.scss'\n})\nexport class DynamicRendererComponent<T> implements OnChanges, OnDestroy {\n @Input() component!: Type<any>;\n @Input() rowData!: T;\n data = input<any>();\n rowPosition = input<number | undefined>();\n isLastRow = input<boolean>(false);\n\n actionPerformed = output<TableActionEvent>();\n\n @ViewChild('container', {read: ViewContainerRef, static: true})\n container!: ViewContainerRef;\n\n private componentRef?: ComponentRef<any>;\n private actionSubscription?: OutputRefSubscription;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['component'] || changes['rowData'] || changes['data'] || changes['rowPosition'] || changes['isLastRow']) {\n this.loadComponent();\n }\n }\n\n private loadComponent(): void {\n if (!this.component) {\n return;\n }\n\n this.container.clear();\n\n this.componentRef = this.container.createComponent(this.component);\n\n\n if (this.componentRef.instance) {\n (this.componentRef.instance as any).rowData = this.rowData;\n (this.componentRef.instance as any).data = this.data();\n (this.componentRef.instance as any).rowPosition = this.rowPosition();\n (this.componentRef.instance as any).isLastRow = this.isLastRow();\n\n this.actionSubscription?.unsubscribe();\n\n let emitter: OutputEmitterRef<any> = this.componentRef.instance.actionPerformed;\n if (emitter) {\n this.actionSubscription = emitter.subscribe(\n (event: any) => {\n this.actionPerformed.emit(event);\n }\n );\n }\n\n }\n }\n\n ngOnDestroy(): void {\n this.actionSubscription?.unsubscribe();\n }\n}\n","<ng-container #container></ng-container>\n","import {\n AfterViewInit,\n Component,\n ContentChildren,\n inject,\n Injector,\n input,\n output, OutputEmitterRef, OutputRefSubscription,\n QueryList,\n signal, Type,\n ViewChild\n} from '@angular/core';\nimport {State} from \"../../base/base-state\";\nimport {PaginationComponent, PaginationEvent} from \"../pagination/pagination.component\";\nimport {NoDataTableComponent} from \"../no-data-table/no-data-table.component\";\nimport {ShimmerComponent} from \"../shimmer/shimmer.component\";\nimport {DatePipe, NgClass} from \"@angular/common\";\nimport {resolveTemplateWithObject} from \"../../common-utils/template-resolver\";\nimport {ContextMenuAction, ContextMenuComponent} from \"../context-menu/context-menu.component\";\nimport {AppSvgIconComponent} from \"../app-svg-icon/app-svg-icon.component\";\nimport {StatusBadgeComponent} from \"../status-badge/status-badge.component\";\nimport {SortableTableDirective, TableSortEvent} from \"../_base/base-table/sortable-table.directive\";\nimport {TableResizableColumnsDirective} from \"../_base/base-table/table-resizable-columns.directive\";\nimport {Overlay, OverlayConfig} from \"@angular/cdk/overlay\";\nimport {CdkPortal} from \"@angular/cdk/portal\";\nimport {CheckboxComponent} from \"../../inputs/checkbox/checkbox.component\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TextInputComponent} from '../../inputs/text-input/text-input.component';\nimport {TextButtonSmall} from '../text-button-small/text-button-small.component';\nimport {DynamicRendererComponent} from '../dynamic-renderer/dynamic-renderer.component';\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\n\n@Component({\n selector: 'app-data-table',\n standalone: true,\n imports: [\n PaginationComponent,\n NoDataTableComponent,\n ShimmerComponent,\n NgClass,\n DatePipe,\n AppSvgIconComponent,\n ContextMenuComponent,\n StatusBadgeComponent,\n SortableTableDirective,\n TableResizableColumnsDirective,\n CdkPortal,\n CheckboxComponent,\n FormsModule,\n TextInputComponent,\n TextButtonSmall,\n DynamicRendererComponent\n ],\n templateUrl: './data-table.component.html',\n styleUrl: './data-table.component.scss',\n})\nexport class DataTableComponent<T> extends BaseControlValueAccessorV3<TableStateEvent> implements AfterViewInit {\n\n @ContentChildren('filter') headerComponents!: QueryList<any>;\n\n columnDefs = input.required<ColumnDef[]>();\n state = input.required<State<any>>();\n pageSize = input(50);\n enableHorizontallyScrollable = input(false);\n enableResizableColumns = input(false);\n enableClickableRows = input(false);\n expandableComponent = input<any>();\n enableColumnsConfig = input(false);\n filterComponent = input<any>();\n enableSearch = input(true);\n disableInitialLoad = input(false);\n\n pageChange = output<PaginationEvent>();\n sortChanged = output<TableSortEvent>();\n tableStateChanged = output<TableStateEvent>();\n onActionPerformed = output<TableActionEvent>();\n filterChanged = output<any>();\n onRowClicked = output<any>();\n\n subscriptions: OutputRefSubscription[] = [];\n\n overlay = inject(Overlay);\n @ViewChild(CdkPortal) portal!: CdkPortal;\n\n paginationEvent?: PaginationEvent;\n tableSortEvent?: TableSortEvent;\n private searchText: string = '';\n\n ngAfterViewInit(): void {\n let paginationEvent: PaginationEvent = {\n pageNumber: 1, pageSize: this.pageSize()\n }\n this.pageChange.emit(paginationEvent);\n\n let tableStateEvent: TableStateEvent = {\n searchText: '',\n paginationEvent: paginationEvent,\n tableSortEvent: this.tableSortEvent\n };\n\n if (!this.disableInitialLoad()) {\n this.tableStateChanged.emit(tableStateEvent);\n }\n\n this.onValueChange(tableStateEvent);\n\n this.headerComponents.forEach((component) => {\n if (component.filtersChanged) {\n let emitter: OutputEmitterRef<any> = component.filtersChanged;\n const sub = emitter.subscribe((newFilters: any) => {\n this.filterChanged.emit(newFilters);\n });\n this.subscriptions.push(sub);\n }\n });\n }\n\n protected override onValueReady(value: TableStateEvent): void {\n }\n\n onColumnSettingsClicked(columnsConfigTriggerElement: HTMLDivElement) {\n const config = new OverlayConfig({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(columnsConfigTriggerElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: 20,\n offsetY: 10,\n }\n ]),\n hasBackdrop: true,\n backdropClass: ['bg-black', 'bg-opacity-0', 'shadow-1']\n });\n\n const overlayRef = this.overlay.create(config);\n overlayRef.attach(this.portal);\n\n overlayRef.backdropClick().subscribe(() => overlayRef.detach());\n }\n\n onSearchTextChanged($event: string) {\n this.searchText = $event;\n let paginationEvent: PaginationEvent = {\n pageNumber: 1, pageSize: this.pageSize()\n }\n let tableStateEvent: TableStateEvent = {\n searchText: this.searchText,\n paginationEvent: paginationEvent,\n tableSortEvent: this.tableSortEvent\n };\n this.tableStateChanged.emit(tableStateEvent);\n this.onValueChange(tableStateEvent);\n }\n\n onColumnVisibleOrHide($event: boolean, column: ColumnDef) {\n column.visible = $event;\n }\n\n onSelectAllColumnClicked() {\n let columns = this.columnDefs() ?? [];\n columns.forEach(column => {\n column.visible = true;\n });\n }\n\n getPropertyValue(item: any, column: ColumnDef,): any {\n\n if (column.displayTemplate) {\n return resolveTemplateWithObject(item, column.displayTemplate);\n }\n\n let value = '';\n\n if (column.key) {\n value = column.key.split('.').reduce((acc, part) => acc && acc[part], item);\n }\n\n if (column.formatter) {\n return column.formatter ? column.formatter(value) : value;\n } else if (column.objectFormatter) {\n return column.objectFormatter ? column.objectFormatter(item) : item;\n } else {\n return value;\n }\n }\n\n onPageChange(event: PaginationEvent) {\n let tableStateEvent: TableStateEvent = {\n searchText: this.searchText,\n paginationEvent: event,\n tableSortEvent: this.tableSortEvent\n };\n this.pageChange.emit(event);\n this.tableStateChanged.emit(tableStateEvent);\n this.onValueChange(tableStateEvent);\n }\n\n onSortChanged(event: TableSortEvent) {\n let tableStateEvent: TableStateEvent = {\n searchText: '',\n paginationEvent: {\n pageNumber: 1,\n pageSize: this.pageSize()\n },\n tableSortEvent: event\n };\n this.sortChanged.emit(event);\n this.tableStateChanged.emit(tableStateEvent);\n this.onValueChange(tableStateEvent);\n }\n\n getThTrClass(column: ColumnDef) {\n switch (column.alignment) {\n case 'left':\n return 'text-left';\n case 'center':\n return 'text-center';\n case 'right':\n return 'text-right';\n default:\n return 'text-left';\n }\n }\n\n getFlexJustify(column: ColumnDef) {\n switch (column.alignment) {\n case 'left':\n return 'justify-start';\n case 'center':\n return 'justify-center';\n case 'right':\n return 'justify-end';\n default:\n return 'justify-start';\n }\n\n }\n\n getBadgeProperty(item: any, column: ColumnDef): BadgeConfigProperty | null {\n let badgeConfigProperties = column.badgeConfig?.properties ?? [];\n let matchedBadgeConfigProperty: BadgeConfigProperty | null = null;\n\n badgeConfigProperties.forEach(badgeConfigProperty => {\n let value = this.getPropertyValue(item, column);\n if (value === badgeConfigProperty.data) {\n matchedBadgeConfigProperty = badgeConfigProperty;\n }\n });\n return matchedBadgeConfigProperty;\n }\n\n getContextMenuActions(actions: ContextMenuActionConfig[]) {\n return actions.map(action => {\n let configAction: ContextMenuAction = {\n iconPath: action.iconPath,\n label: action.label,\n actionKey: action.actionKey\n };\n return configAction;\n })\n }\n\n _onActionClicked($event: string, item: any, mouseEvent: MouseEvent | null) {\n if (mouseEvent) {\n mouseEvent.stopPropagation();\n }\n let tableActionEvent: TableActionEvent = {\n actionKey: $event,\n item: item\n };\n this.onActionPerformed.emit(tableActionEvent);\n }\n\n expandedRowIndex = signal<number | null>(null);\n\n onRowExpandedClicked(i: number) {\n if (this.expandedRowIndex() == i) {\n this.expandedRowIndex.set(null);\n } else {\n this.expandedRowIndex.set(i);\n }\n }\n\n _onRowClicked(item: any) {\n this.onRowClicked.emit(item);\n }\n\n onCellActionPerformed($event: TableActionEvent) {\n this.onActionPerformed.emit($event);\n }\n\n onRowActionPerformed($event: TableActionEvent) {\n this.onActionPerformed.emit($event);\n }\n}\n\nexport interface ColumnDef {\n title: string;\n key?: string;\n displayTemplate?: string;\n sortKey?: string;\n alignment?: 'left' | 'center' | 'right';\n type: 'text' | 'date' | 'badge' | 'custom' | 'actions';\n pinned?: 'left' | 'right' | null;\n visible?: boolean | null;\n\n component?: Type<any>;\n\n textConfig?: TextConfig;\n dateConfig?: DateConfig;\n badgeConfig?: BadgeConfig;\n customConfig?: CustomRendererConfig;\n actionsConfig?: ActionConfig;\n\n formatter?: (value: any) => any;\n objectFormatter?: (value: any) => any;\n propertyStyle?: (value: any) => any;\n}\n\n\nexport interface TextConfig {\n textColorClass?: string;\n}\n\nexport interface DateConfig {\n dateFormat?: string;\n showIcon?: boolean;\n}\n\nexport interface BadgeConfig {\n properties: BadgeConfigProperty[];\n}\n\nexport interface BadgeConfigProperty {\n data: string;\n displayText: string;\n backgroundColorClass?: string;\n borderColorClass?: string;\n textColorClass?: string;\n indicatorColorClass?: string;\n}\n\nexport interface CustomRendererConfig {\n data?: any;\n}\n\nexport interface ActionConfig {\n iconActions?: IconAction[];\n threeDotMenuActions?: ContextMenuActionConfig[] | null;\n textMenuActions?: ContextMenuActionConfig[] | null;\n components?: Type<any>[];\n}\n\nexport interface IconAction {\n iconPath: string;\n actionKey: string;\n label?: string;\n}\n\nexport interface ContextMenuActionConfig {\n iconPath?: string;\n actionKey: string;\n label: string;\n}\n\nexport interface TableActionEvent {\n actionKey: string;\n item: any;\n data?: any;\n}\n\n\nexport interface TableStateEvent {\n searchText: string;\n paginationEvent?: PaginationEvent;\n tableSortEvent?: TableSortEvent;\n}\n","<div class=\"flex flex-col bg-white rounded-2xl overflow-clip h-full\">\n\n @if (enableSearch() || headerComponents.length > 0) {\n <div class=\"flex px-6 py-5 border-b border-neutral-100 justify-between\">\n @if (enableSearch()) {\n <app-text-input [iconSrc]=\"'assets/icons/search.svg'\"\n placeholder=\"Search...\"\n type=\"search\"\n [fullWidth]=\"false\"\n (changeValue)=\"onSearchTextChanged($event)\">\n </app-text-input>\n }\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n }\n\n <div class=\"grow h-full w-full min-w-full bg-white overflow-x-auto\">\n <table class=\"h-min w-full\"\n [ngClass]=\"[enableHorizontallyScrollable() ? 'overflow-x-auto' : '']\"\n [appTableResizableColumns]=\"enableResizableColumns()\">\n\n <!-- Table header-->\n <thead class=\"sticky top-0 bg-white z-10\">\n <tr sortableTable (sortChange)=\"onSortChanged($event)\" class=\"text-overline text-neutral-500 text-nowrap h-min\">\n\n @if (expandableComponent()) {\n <th class=\"sticky left-0 z-50 bg-white border-b border-gray-200 px-4 py-3\"></th>\n }\n\n @for (column of columnDefs(); track column) {\n @let isColumnVisible = column.visible || column.visible == undefined || false;\n @if (isColumnVisible) {\n <th\n [attr.data-sortable-key]=\"column.sortKey\"\n class=\"relative cursor-pointer border-b border-gray-200 px-4 py-3 text-caption font-semibold text-gray-700 uppercase tracking-wider\"\n [ngClass]=\"getThTrClass(column)\">\n {{ column.title }}\n </th>\n }\n }\n\n @if (enableColumnsConfig()) {\n <th\n class=\"sticky right-0 bg-white flex justify-center cursor-pointer items-center border-b border-gray-200 px-1.5 py-3\">\n <div\n #columnsConfigTriggerElement\n (click)=\"onColumnSettingsClicked(columnsConfigTriggerElement)\"\n class=\"flex justify-center items-center h-[28px] w-[28px] cursor-pointer rounded-full hover:bg-neutral-100 transition-all duration-500\">\n <svg class=\"h-[16px] w-[16px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 8C13.0608 8 14.0782 8.42143 14.8284 9.17157C15.5785 9.92172 16 10.9391 16 12C16 13.0609 15.5785 14.0783 14.8284 14.8284C14.0782 15.5786 13.0608 16 12 16C10.9391 16 9.92168 15.5786 9.17153 14.8284C8.42139 14.0783 7.99996 13.0609 7.99996 12C7.99996 10.9391 8.42139 9.92172 9.17153 9.17157C9.92168 8.42143 10.9391 8 12 8ZM12 10C11.4695 10 10.9608 10.2107 10.5857 10.5858C10.2107 10.9609 9.99996 11.4696 9.99996 12C9.99996 12.5304 10.2107 13.0391 10.5857 13.4142C10.9608 13.7893 11.4695 14 12 14C12.5304 14 13.0391 13.7893 13.4142 13.4142C13.7892 13.0391 14 12.5304 14 12C14 11.4696 13.7892 10.9609 13.4142 10.5858C13.0391 10.2107 12.5304 10 12 10ZM9.99996 22C9.74996 22 9.53996 21.82 9.49996 21.58L9.12996 18.93C8.49996 18.68 7.95996 18.34 7.43996 17.94L4.94996 18.95C4.72996 19.03 4.45996 18.95 4.33996 18.73L2.33996 15.27C2.20996 15.05 2.26996 14.78 2.45996 14.63L4.56996 12.97L4.49996 12L4.56996 11L2.45996 9.37C2.26996 9.22 2.20996 8.95 2.33996 8.73L4.33996 5.27C4.45996 5.05 4.72996 4.96 4.94996 5.05L7.43996 6.05C7.95996 5.66 8.49996 5.32 9.12996 5.07L9.49996 2.42C9.53996 2.18 9.74996 2 9.99996 2H14C14.25 2 14.46 2.18 14.5 2.42L14.87 5.07C15.5 5.32 16.04 5.66 16.56 6.05L19.05 5.05C19.27 4.96 19.54 5.05 19.66 5.27L21.66 8.73C21.79 8.95 21.73 9.22 21.54 9.37L19.43 11L19.5 12L19.43 13L21.54 14.63C21.73 14.78 21.79 15.05 21.66 15.27L19.66 18.73C19.54 18.95 19.27 19.04 19.05 18.95L16.56 17.95C16.04 18.34 15.5 18.68 14.87 18.93L14.5 21.58C14.46 21.82 14.25 22 14 22H9.99996ZM11.25 4L10.88 6.61C9.67996 6.86 8.61996 7.5 7.84996 8.39L5.43996 7.35L4.68996 8.65L6.79996 10.2C6.39996 11.37 6.39996 12.64 6.79996 13.8L4.67996 15.36L5.42996 16.66L7.85996 15.62C8.62996 16.5 9.67996 17.14 10.87 17.38L11.24 20H12.76L13.13 17.39C14.32 17.14 15.37 16.5 16.14 15.62L18.57 16.66L19.32 15.36L17.2 13.81C17.6 12.64 17.6 11.37 17.2 10.2L19.31 8.65L18.56 7.35L16.15 8.39C15.38 7.5 14.32 6.86 13.12 6.62L12.75 4H11.25Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n </th>\n }\n\n </tr>\n </thead>\n\n <!-- List Items-->\n <tbody class=\"h-min\">\n <ng-content select=\"[body]\"></ng-content>\n </tbody>\n\n <!-- Shimmer-->\n @if (state().initialLoading()) {\n <tbody class=\"bg-white text-center py-14\">\n <tr>\n <td colspan=\"100\" class=\"h-min\">\n <div class=\"flex flex-col gap-6 px-6 py-4\">\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n </div>\n </td>\n </tr>\n </tbody>\n }\n\n <!-- No Table Indicator-->\n @if (state().success() && (state().response()?.data ?? []).length <= 0) {\n <tbody>\n <tr>\n <td colspan=\"1000\">\n <div class=\"flex flex-col justify-center items-center gap-8 px-6 py-8\">\n <app-no-data-table></app-no-data-table>\n </div>\n </td>\n </tr>\n </tbody>\n }\n\n @if ((state().response()?.data ?? []).length > 0) {\n <tbody class=\"\">\n @for (item of state().response()?.data ?? []; track i; let i = $index) {\n <tr (click)=\"_onRowClicked(item)\"\n [ngClass]=\"[enableClickableRows() ? 'hover:bg-neutral-50 cursor-pointer' : '']\">\n\n @if (expandableComponent()) {\n <td class=\"sticky left-0 bg-white z-50 px-1 py-2 border-b border-gray-100 w-min select-none\">\n <div\n (click)=\"onRowExpandedClicked(i)\"\n class=\"mx-auto flex items-center justify-center h-[40px] w-[40px] rounded-full bg-neutral-50 hover:bg-neutral-100 cursor-pointer transition-all duration-500\">\n <svg class=\"h-[20px] w-[20px] text-neutral-500\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M7.41 8.58L12 13.17L16.59 8.58L18 10L12 16L6 10L7.41 8.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n </td>\n }\n\n @for (column of columnDefs(); track column) {\n\n @let isColumnVisible = column.visible || column.visible == undefined || false;\n @if (isColumnVisible) {\n <td\n class=\"px-4 py-3 border-b border-gray-100 relative text-body2 text-gray-800\"\n [ngClass]=\"[getThTrClass(column)]\">\n\n @switch (column.type) {\n @default {\n <span class=\"text-body2 text-neutral-700\"\n [ngClass]=\"column.textConfig?.textColorClass\">{{ getPropertyValue(item, column) }}</span>\n }\n @case ('text') {\n <span class=\"text-body2 text-neutral-700 text-nowrap\"\n [ngClass]=\"column.textConfig?.textColorClass\">{{ getPropertyValue(item, column) }}</span>\n }\n @case ('date') {\n <div class=\"flex items-center gap-3\" [ngClass]=\"[getFlexJustify(column)]\">\n @if (column.dateConfig?.showIcon == undefined ? true : (column.dateConfig?.showIcon)) {\n <svg class=\"h-4 w-4 text-neutral-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M19 19H5V8H19M16 1V3H8V1H6V3H5C3.89 3 3 3.89 3 5V19C3 19.5304 3.21071 20.0391 3.58579 20.4142C3.96086 20.7893 4.46957 21 5 21H19C19.5304 21 20.0391 20.7893 20.4142 20.4142C20.7893 20.0391 21 19.5304 21 19V5C21 3.89 20.1 3 19 3H18V1M17 12H12V17H17V12Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n\n @let date = getPropertyValue(item, column);\n @if (date && date != 'null') {\n <span\n class=\"text-body2 text-nowrap\">{{ date | date:column.dateConfig?.dateFormat ?? 'MMM d, y, h:mm a' }}</span>\n }\n </div>\n }\n @case ('badge') {\n @let badgeProperty = getBadgeProperty(item, column);\n <div class=\"flex items-center\" [ngClass]=\"getFlexJustify(column)\">\n <app-status-badge [backgroundColorClass]=\"badgeProperty?.backgroundColorClass ?? null\"\n [indicatorColor]=\"badgeProperty?.indicatorColorClass ?? null\"\n [borderColorClass]=\"badgeProperty?.borderColorClass ?? null\"\n [textColorClass]=\"badgeProperty?.textColorClass ?? null\"\n [isUpperCase]=\"true\"\n [status]=\"badgeProperty?.displayText ?? 'Unknown'\">\n </app-status-badge>\n </div>\n }\n @case ('custom') {\n @if (column.component) {\n <div class=\"flex items-center\">\n <app-dynamic-renderer\n [component]=\"column.component\"\n [rowData]=\"item\"\n [data]=\"column.customConfig?.data\"\n [rowPosition]=\"$index + 1\"\n [isLastRow]=\"$last\"\n (actionPerformed)=\"onRowActionPerformed($event)\">\n </app-dynamic-renderer>\n </div>\n }\n }\n @case ('actions') {\n\n <div class=\"flex items-center gap-3\" [ngClass]=\"getFlexJustify(column)\">\n @if (column.actionsConfig?.iconActions) {\n @for (iconAction of column.actionsConfig?.iconActions ?? []; track iconAction) {\n <div\n (click)=\"_onActionClicked(iconAction.actionKey, item, $event)\"\n class=\"flex items-center justify-center h-[36px] w-[36px] cursor-pointer rounded-full hover:bg-neutral-100\">\n <!-- <app-svg-icon class=\"text-neutral-500\"-->\n <!-- [matTooltip]=\"iconAction.label\"-->\n <!-- matTooltipClass=\"mt-2\"-->\n <!-- [src]=\"iconAction.iconPath\"-->\n <!-- [size]=\"20\"></app-svg-icon>-->\n <app-svg-icon class=\"text-neutral-500\"\n [src]=\"iconAction.iconPath\"\n [size]=\"20\"></app-svg-icon>\n </div>\n }\n }\n @if (column.actionsConfig?.threeDotMenuActions) {\n <app-context-menu (onActionClicked)=\"_onActionClicked($event, item, null)\"\n [actions]=\"getContextMenuActions(column.actionsConfig?.threeDotMenuActions ?? [])\"></app-context-menu>\n }\n\n @if (column.actionsConfig?.textMenuActions) {\n @for (textAction of column.actionsConfig?.textMenuActions ?? []; track textAction) {\n <app-text-button-small\n (click)=\"_onActionClicked(textAction.actionKey, item, $event)\">{{ textAction.label }}\n </app-text-button-small>\n }\n }\n\n @if (column.actionsConfig?.components) {\n <div class=\"flex items-center\">\n @for (component of (column.actionsConfig?.components ?? []); track $index) {\n <app-dynamic-renderer\n [component]=\"component\"\n [rowData]=\"item\"\n [data]=\"column.customConfig?.data\"\n [rowPosition]=\"$index + 1\"\n [isLastRow]=\"$last\"\n (actionPerformed)=\"onRowActionPerformed($event)\">\n </app-dynamic-renderer>\n }\n </div>\n }\n\n </div>\n\n }\n\n }\n\n </td>\n }\n\n }\n\n @if (enableColumnsConfig()) {\n <td\n class=\"px-1 py-3 border-b border-gray-100 w-min\">\n </td>\n }\n </tr>\n\n @if (expandableComponent()) {\n @if (i == expandedRowIndex()) {\n <tr class=\"transition-all duration-700\">\n <td colspan=\"100\">\n <div class=\"mx-4 my-4 p-4 bg-neutral-50 rounded-lg\">\n <app-dynamic-renderer\n [component]=\"expandableComponent()\"\n [rowData]=\"item\"\n (actionPerformed)=\"onCellActionPerformed($event)\">\n </app-dynamic-renderer>\n </div>\n\n </td>\n </tr>\n }\n }\n\n }\n\n </tbody>\n }\n\n <tbody class=\"h-full\"></tbody>\n\n\n </table>\n </div>\n\n <app-pagination\n [pageSize]=\"pageSize()\"\n [totalItems]=\"state().response()?.totalCount ?? 0\"\n (pageChange)=\"onPageChange($event)\">\n </app-pagination>\n</div>\n\n<ng-template cdkPortal>\n <div\n class=\"flex flex-col gap-3 px-2 py-2 bg-white rounded-md max-h-[400px] border border-neutral-200 shadow-2\">\n <div class=\"flex flex-col overflow-y-scroll\">\n @for (column of columnDefs(); track column; let index = $index) {\n @if (column.type != 'actions') {\n <div class=\"grow flex items-center min-w-[200px] px-1\">\n @let isColumnVisible = column.visible || column.visible == undefined || false;\n <app-checkbox [title]=\"column.title\" [ngModel]=\"isColumnVisible\"\n (valueChanged)=\"onColumnVisibleOrHide($event, column)\"></app-checkbox>\n </div>\n }\n }\n </div>\n\n <span (click)=\"onSelectAllColumnClicked()\" class=\"px-4 text-overline text-info-500 cursor-pointer\">Select All</span>\n </div>\n</ng-template>\n\n","import {Component, inject} from '@angular/core';\nimport {NGL_CONFIG} from '../../ngl-config.token';\n\n@Component({\n selector: 'app-env-banner',\n standalone: true,\n imports: [],\n templateUrl: './env-banner.component.html',\n styleUrl: './env-banner.component.scss'\n})\nexport class EnvBannerComponent {\n config = inject(NGL_CONFIG);\n}\n","@if(config.enableDevTools) {\n <div\n class=\"banner fixed top-6 left-0 bg-black bg-opacity-80 text-xs text-white transform -rotate-45 translate-y-1/4 -translate-x-1/4 w-36 text-center px-1 py-1\">\n DEV\n </div>\n}\n","import {Injectable, signal} from '@angular/core';\nimport {Observable} from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoaderService {\n\n loadingCount = signal(0);\n\n show() {\n this.loadingCount.update((current) => current + 1);\n }\n\n hide() {\n this.loadingCount.update((current) => current - 1);\n }\n\n}\n","import {Component, inject} from '@angular/core';\nimport {LoaderService} from \"./loader.service\";\nimport {SpinnerComponent} from \"../spinner/spinner.component\";\n\n@Component({\n selector: 'app-loader',\n standalone: true,\n imports: [\n SpinnerComponent\n ],\n templateUrl: './loader.component.html',\n styleUrl: './loader.component.scss'\n})\nexport class LoaderComponent {\n\n loaderService = inject(LoaderService);\n}\n","@if (loaderService.loadingCount() > 0) {\n <div class=\"fixed left-1/2 top-1/2 py-3 px-5 shadow-2 bg-white loader rounded-md\">\n <app-spinner></app-spinner>\n </div>\n}\n","import {Component, computed, input, signal} from '@angular/core';\n\n\n@Component({\n selector: 'lib-network-image',\n standalone: true,\n imports: [],\n templateUrl: './network-image.component.html',\n styleUrl: './network-image.component.scss'\n})\nexport class NetworkImageComponent {\n\n placeholderImage = input<string | undefined>();\n imageUrl = input<string | undefined>();\n\n isError = signal(false);\n\n placeHolderUrl = computed(() => {\n return this.placeholderImage() ?? 'assets/images/background/restaurant-placeholder.png';\n })\n\n sourceUrl = computed(() => {\n if (this.imageUrl()) {\n return this.imageUrl();\n } else {\n return this.placeholderImage() ?? 'assets/images/background/restaurant-placeholder.png';\n }\n })\n\n handleImageError() {\n this.isError.update((c) => true);\n }\n}\n","@if (isError()) {\n <img\n [src]=\"placeHolderUrl()\"\n class=\"object-cover w-full h-full transition-all duration-200 transform group-hover:scale-105\" alt=\"Image\">\n} @else {\n <img\n [src]=\"sourceUrl()\"\n (error)=\"handleImageError()\" alt=\"\"\n class=\"object-cover w-full h-full transition-all duration-200 transform group-hover:scale-105\">\n}\n","import {DialogRef} from '@angular/cdk/dialog';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n inject,\n input, output,\n Renderer2,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\n\n@Component({\n selector: 'app-base-overlay',\n imports: [],\n templateUrl: './base-overlay.component.html',\n standalone: true,\n styleUrl: './base-overlay.component.scss'\n})\nexport class BaseOverlayComponent implements AfterViewInit {\n\n @ViewChild('container', {read: ViewContainerRef, static: true}) container!: ViewContainerRef;\n @ViewChild('actions', {static: false}) actionsDiv!: ElementRef<HTMLDivElement>;\n @ViewChild('actionsContainer', {static: false}) actionsContainerDiv!: ElementRef<HTMLDivElement>;\n\n title = input.required<String>();\n showTitle = input(true);\n showBackButton = input(false);\n\n\n onBackClicked = output<void>();\n\n renderer = inject(Renderer2);\n dialogRef = inject(DialogRef<any>);\n\n\n ngOnInit(): void {\n\n }\n\n ngAfterViewInit(): void {\n if (this.actionsDiv) {\n const children = this.actionsDiv.nativeElement.children;\n if (children.length === 0) {\n this.renderer.setStyle(this.actionsContainerDiv.nativeElement, 'display', 'none');\n }\n }\n }\n\n goBack() {\n this.onBackClicked.emit();\n }\n\n onCloseClicked() {\n this.dialogRef.close();\n }\n}\n","<div class=\"base-overlay flex flex-col rounded-3xl h-full overflow-hidden bg-white relative\">\n @if (showTitle()) {\n <div class=\"flex justify-center items-center px-3 py-6 border-b border-neutral-200\">\n\n @if(showBackButton()) {\n <div class=\"absolute left-3 rounded-full p-3 cursor-pointer hover:bg-neutral-50 transition-all duration-500\" (click)=\"goBack()\">\n <svg class=\"w-[18px] h-[18px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M20 11V13H8.00003L13.5 18.5L12.08 19.92L4.16003 12L12.08 4.07996L13.5 5.49996L8.00003 11H20Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n\n <span class=\"text-body1\">{{ title() }}</span>\n <div class=\"absolute right-3 rounded-lg p-2 border border-neutral-300 cursor-pointer hover:bg-neutral-50\"\n (click)=\"onCloseClicked()\">\n <svg class=\"w-[18px] h-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n }\n\n\n\n <div class=\"flex-1 min-h-0 px-5 py-4 overflow-y-auto\">\n <ng-content select=\"[body]\">\n <ng-container #container></ng-container>\n </ng-content>\n </div>\n\n\n <div #actionsContainer class=\"actions-container border-t px-4 py-4\">\n <div #actions class=\"w-full\">\n <ng-content select=\"[actions]\"></ng-content>\n </div>\n </div>\n\n</div>\n","import {signal, WritableSignal} from \"@angular/core\";\n\nexport class OverlayWizardUtils {\n\n uiState = signal<OverlayWizard[]>([]);\n wizard = signal<OverlayWizard[]>([]);\n\n showBackButton(): boolean {\n return this.uiState().length > 1;\n }\n\n activeWizard(): OverlayWizard {\n return this.uiState()[this.uiState().length - 1];\n };\n\n constructor(wizard: WritableSignal<OverlayWizard[]>, uiState?: WritableSignal<OverlayWizard[]> | null) {\n this.wizard = wizard;\n if (uiState) {\n this.uiState = uiState;\n } else {\n let fistState = wizard()[0];\n if (fistState) {\n this.uiState.set([fistState]);\n }\n }\n }\n\n goBack() {\n if (this.uiState().length > 1) {\n this.uiState.update(prev => prev.slice(0, prev.length - 1));\n }\n }\n\n append(wizardKey: any) {\n let wizard = this.wizard().find(x => x.key == wizardKey);\n if (wizard) {\n this.uiState.update(prev => {\n return [...prev, wizard];\n });\n }\n console.log(wizard);\n console.log(this.uiState());\n }\n\n closeUntil(wizard: any) {\n const wizardList = this.wizard();\n for (let i = wizardList.length - 1; i >= 0; i--) {\n if (wizardList[i].key === wizard) {\n const updatedList = wizardList.slice(0, i + 1);\n this.uiState.set(updatedList);\n break;\n }\n }\n }\n}\n\nexport interface OverlayWizard {\n title: string;\n key: any;\n}\n","import {Component, HostListener, inject, OnInit, signal} from '@angular/core';\nimport {DOCUMENT} from \"@angular/common\";\nimport {NGL_CONFIG} from '../../ngl-config.token';\n\n@Component({\n selector: 'app-responsive-helper',\n standalone: true,\n imports: [],\n templateUrl: './responsive-helper.component.html',\n styleUrl: './responsive-helper.component.scss'\n})\nexport class ResponsiveHelperComponent implements OnInit {\n\n config = inject(NGL_CONFIG);\n\n document = inject(DOCUMENT);\n screenWidth = signal(0);\n\n constructor() {\n this.screenWidth.set(this.document.documentElement.clientWidth);\n }\n\n ngOnInit(): void {\n this.document.addEventListener('resize', this.onResize.bind(this));\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event: any) {\n this.screenWidth.set(this.document.documentElement.clientWidth);\n }\n}\n","@if (config.enableDevTools) {\n <div\n class=\"fixed bottom-5 left-5 align-middle font-medium sm:block space-x-2 select-none pointer-events-none\">\n <div\n class=\"hidden sm:inline-flex sm:flex-col py-1 px-3 bg-black bg-opacity-50 text-white rounded-md text-caption pointer-events-none\">\n <!-- <span class=\"block sm:hidden\">mob</span>-->\n <span class=\"hidden sm:block md:hidden\">sm</span>\n <span class=\"hidden md:block lg:hidden\">md</span>\n <span class=\"hidden lg:block xl:hidden\">lg</span>\n <span class=\"hidden xl:block 2xl:hidden\">xl</span>\n <span class=\"hidden 2xl:block\">2xl</span>\n </div>\n\n <span\n class=\"text-caption py-1 px-3 bg-black text-white rounded-md bg-opacity-50 select-none pointer-events-none\">{{ screenWidth() }}\n px</span>\n </div>\n}\n","import {Component, input, OnInit} from '@angular/core';\nimport {DomSanitizer, SafeHtml} from \"@angular/platform-browser\";\nimport {HttpClient} from \"@angular/common/http\";\n\n@Component({\n selector: 'app-svg-url-icon',\n standalone: true,\n imports: [],\n templateUrl: './svg-url-icon.component.html',\n styleUrl: './svg-url-icon.component.scss'\n})\nexport class SvgUrlIconComponent implements OnInit {\n svgIcon: SafeHtml | null = null;\n\n svgUrl = input.required<string>();\n\n constructor(private http: HttpClient, private sanitizer: DomSanitizer) {}\n\n ngOnInit(): void {\n this.http.get(this.svgUrl(), { responseType: 'text' }).subscribe(\n (svgContent) => {\n this.svgIcon = this.sanitizer.bypassSecurityTrustHtml(svgContent);\n },\n (error) => {\n console.error('Failed to load SVG:', error);\n }\n );\n }\n}\n","<div [innerHTML]=\"svgIcon\"></div>\n","export enum ToastType {\n success = 'success',\n info = 'info',\n warning = 'warning',\n error = 'error',\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, Subject} from \"rxjs\";\nimport {ToastEvent} from \"./models/toast-event\";\nimport {ToastType} from \"./models/toast-type\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToastService {\n static defaultDuration = 3500;\n toastEvents: Observable<ToastEvent>;\n private _toastEvents = new Subject<ToastEvent>();\n\n constructor() {\n this.toastEvents = this._toastEvents.asObservable();\n }\n\n /**\n * Show success toast notification.\n * @param title Toast title\n * @param message Toast message\n * @param duration\n */\n success(message: string, {title, duration}: { title?: string, duration?: number } = {}) {\n this._toastEvents.next({\n message,\n title,\n type: ToastType.success,\n duration: duration,\n });\n }\n\n /**\n * Show error toast notification.\n * @param title Toast title\n * @param message Toast message\n * @param duration\n */\n error(message: string, {title, duration}: { title?: string, duration?: number } = {}) {\n this._toastEvents.next({\n message,\n title,\n type: ToastType.error,\n duration: duration\n });\n }\n\n /**\n * Show info toast notification.\n * @param title Toast title\n * @param message Toast message\n * @param duration\n */\n info(message: string, {title, duration}: { title?: string, duration?: number } = {}) {\n this._toastEvents.next({\n message,\n title,\n type: ToastType.info,\n duration: duration\n });\n }\n\n /**\n * Show warning toast notification.\n * @param title Toast title\n * @param message Toast message\n * @param duration\n */\n warning(message: string, {title, duration}: { title?: string, duration?: number } = {}) {\n this._toastEvents.next({\n message,\n title,\n type: ToastType.warning,\n duration: duration\n });\n }\n}\n","import {Component, EventEmitter, Output} from '@angular/core';\n\n@Component({\n selector: 'app-toast-close-button',\n standalone: true,\n imports: [],\n templateUrl: './toast-close-button.component.html',\n styleUrl: './toast-close-button.component.scss'\n})\nexport class ToastCloseButtonComponent {\n\n @Output() closeEvent = new EventEmitter();\n onCloseClick() {\n this.closeEvent.emit();\n }\n}\n","<div class=\"p-1 text-neutral-400 rounded-full hover:bg-neutral-50 hover:cursor-pointer\" (click)=\"onCloseClick()\">\n <svg class=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"close\">\n <path id=\"Vector\" d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z\" fill=\"currentColor\"/>\n </g>\n </svg>\n</div>\n","import {\n Component,\n computed,\n ElementRef,\n EventEmitter,\n input,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {ToastType} from \"../../models/toast-type\";\nimport {ToastCloseButtonComponent} from \"./toast-close-button/toast-close-button.component\";\nimport {ToastService} from \"../../toast.service\";\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-toast',\n standalone: true,\n imports: [\n ToastCloseButtonComponent,\n NgClass\n ],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss'\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n\n @Output() disposeEvent = new EventEmitter();\n\n @Input()\n type!: ToastType;\n\n @Input()\n title?: string;\n\n @Input()\n message!: string;\n\n @Input()\n duration?: number;\n\n themeType = input<'light' | 'dark'>('light');\n\n themeClass = computed(() => {\n let classes = '';\n switch (this.themeType()) {\n case 'light':\n classes = 'bg-white';\n break;\n case 'dark':\n classes = 'bg-black';\n break;\n }\n return classes;\n });\n\n protected readonly ToastType = ToastType;\n\n ngOnInit() {\n this.show();\n }\n\n show() {\n setTimeout(() => {\n this.hide();\n }, this.duration ?? ToastService.defaultDuration);\n }\n\n hide() {\n this.disposeEvent.emit();\n }\n\n ngOnDestroy(): void {\n }\n}\n","<div class=\"shadow-2 border border-neutral-200 px-3 py-3 mb-5 min-w-72 max-w-80 rounded-md z-50\" [ngClass]=\"themeClass()\">\n <div class=\"flex items-center gap-3\">\n <div class=\"flex justify-center items-center h-6 w-6\">\n @switch (type) {\n @case (ToastType.success) {\n <svg height=\"18\" width=\"18\" class=\"text-green-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"currentColor\">\n <path\n d=\"M12 2C6.5 2 2 6.5 2 12C2 17.5 6.5 22 12 22C17.5 22 22 17.5 22 12C22 6.5 17.5 2 12 2ZM12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM16.59 7.58L10 14.17L7.41 11.59L6 13L10 17L18 9L16.59 7.58Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n @case (ToastType.error) {\n <svg height=\"18\" width=\"18\" class=\"text-red-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path\n d=\"M12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM12 2C6.47 2 2 6.47 2 12C2 17.53 6.47 22 12 22C17.53 22 22 17.53 22 12C22 6.47 17.53 2 12 2ZM14.59 8L12 10.59L9.41 8L8 9.41L10.59 12L8 14.59L9.41 16L12 13.41L14.59 16L16 14.59L13.41 12L16 9.41L14.59 8Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n @case (ToastType.info) {\n <svg height=\"18\" width=\"18\" class=\"text-blue-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path\n d=\"M11 9H13V7H11M12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2ZM11 17H13V11H11V17Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n @case (ToastType.warning) {\n <svg height=\"18\" width=\"18\" class=\"text-amber-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"currentColor\">\n <path\n d=\"M12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM12 2C6.47 2 2 6.47 2 12C2 17.53 6.47 22 12 22C17.53 22 22 17.53 22 12C22 6.47 17.53 2 12 2ZM14.59 8L12 10.59L9.41 8L8 9.41L10.59 12L8 14.59L9.41 16L12 13.41L14.59 16L16 14.59L13.41 12L16 9.41L14.59 8Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n }\n </div>\n\n <div class=\"flex flex-col gap-2\">\n @if (title) {\n <p class=\"text-body1\">{{ title }}</p>\n }\n <p class=\"text-body2 text-neutral-400\">{{ message }}</p>\n </div>\n <div class=\"flex-grow\"></div>\n\n <app-toast-close-button (closeEvent)=\"hide()\"></app-toast-close-button>\n\n </div>\n</div>\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, input, OnInit} from '@angular/core';\nimport {ToastComponent} from \"../toast/toast.component\";\nimport {ToastEvent} from \"../../models/toast-event\";\nimport {ToastService} from \"../../toast.service\";\n\n@Component({\n selector: 'app-toaster',\n standalone: true,\n imports: [\n ToastComponent\n ],\n templateUrl: './toaster.component.html',\n styleUrl: './toaster.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToasterComponent implements OnInit {\n themeType = input<'light' | 'dark'>('light');\n\n currentToasts: ToastEvent[] = [];\n\n constructor(\n private toastService: ToastService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.subscribeToToasts();\n }\n\n subscribeToToasts() {\n this.toastService.toastEvents.subscribe((toast) => {\n toast.themeType = this.themeType();\n this.currentToasts.push(toast);\n this.cdr.detectChanges();\n });\n }\n\n dispose(index: number) {\n this.currentToasts.splice(index, 1);\n this.cdr.detectChanges();\n }\n}\n","<div class=\"toaster fixed top-1 right-1 px-3 py-2\">\n @for (toast of currentToasts; track toast; let i = $index) {\n <div>\n <app-toast\n [type]=\"toast.type\"\n [title]=\"toast.title\"\n [message]=\"toast.message\"\n [duration]=\"toast.duration\"\n (disposeEvent)=\"dispose(i)\"\n [themeType]=\"toast.themeType ?? 'light'\"\n ></app-toast>\n </div>\n }\n</div>\n","export enum TooltipPosition {\n ABOVE = 'above',\n BELOW = 'below',\n LEFT = 'left',\n RIGHT = 'right',\n DYNAMIC = 'dynamic',\n DEFAULT = 'above'\n}\n\nexport enum TooltipTheme {\n DARK = 'dark',\n LIGHT = 'light',\n DEFAULT = 'dark'\n}\n","import {Component, OnInit} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Component({\n selector: 'app-tooltip',\n standalone: true,\n imports: [\n NgClass\n ],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss'\n})\nexport class TooltipComponent implements OnInit {\n tooltipPosition: TooltipPosition = TooltipPosition.DEFAULT;\n tooltipTheme: TooltipTheme = TooltipTheme.DEFAULT;\n tooltip = '';\n left = 0;\n top = 0;\n visible = false;\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n}\n","<div class=\"tooltip\"\n [ngClass]=\"['tooltip--'+tooltipPosition, 'tooltip--'+tooltipTheme]\"\n [class.tooltip--visible]=\"visible\"\n [style.left]=\"left + 'px'\"\n [style.top]=\"top + 'px'\">\n {{tooltip}}\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport {AfterViewInit, Directive, ElementRef, EventEmitter, inject, Inject, OnDestroy, Output} from '@angular/core';\nimport { filter, fromEvent, Subscription } from 'rxjs';\n\n@Directive({\n selector: '[clickOutside]',\n standalone: true,\n})\nexport class ClickOutsideDirective implements AfterViewInit, OnDestroy {\n @Output() clickOutside = new EventEmitter<void>();\n\n documentClickSubscription: Subscription | undefined;\n document = inject(DOCUMENT);\n element = inject(ElementRef);\n\n ngAfterViewInit(): void {\n this.documentClickSubscription = fromEvent(this.document, 'click')\n .pipe(\n filter((event) => {\n return !this.isInside(event.target as HTMLElement);\n }),\n )\n .subscribe(() => {\n this.clickOutside.emit();\n });\n }\n\n ngOnDestroy(): void {\n this.documentClickSubscription?.unsubscribe();\n }\n\n isInside(elementToCheck: HTMLElement): boolean {\n let isInside = elementToCheck === this.element.nativeElement || this.element.nativeElement.contains(elementToCheck);\n return isInside;\n }\n}\n","import {Directive, ElementRef, HostListener, inject} from '@angular/core';\nimport {FormGroupDirective} from \"@angular/forms\";\nimport {debounceTime, fromEvent, take} from \"rxjs\";\n\n@Directive({\n selector: '[appInvalidControlScroll]',\n standalone: true\n})\nexport class InvalidControlScrollDirective {\n\n elementRef = inject(ElementRef);\n formGroupDirective = inject(FormGroupDirective);\n\n constructor() {\n }\n\n @HostListener(\"ngSubmit\") onSubmit() {\n this.formGroupDirective.control.markAllAsTouched();\n if (this.formGroupDirective.control.invalid) {\n this.scrollToFirstInvalidControl();\n }\n }\n\n private scrollToFirstInvalidControl() {\n const firstInvalidControl: HTMLElement = this.elementRef.nativeElement.querySelector(\n \".ng-invalid\"\n );\n\n const scrollOffset = this.getTopOffset(firstInvalidControl);\n if (scrollOffset) {\n window.scroll({\n top: scrollOffset,\n left: 0,\n behavior: \"smooth\"\n });\n\n fromEvent(window, \"scroll\")\n .pipe(\n debounceTime(100),\n take(1)\n )\n .subscribe(() => firstInvalidControl.focus());\n }\n }\n\n private getTopOffset(controlEl: HTMLElement): number | null {\n try {\n const labelOffset = 50;\n return controlEl.getBoundingClientRect().top + window.scrollY - labelOffset;\n } catch (e) {\n return null;\n }\n }\n\n}\n","import {Directive, ElementRef, HostListener, inject} from '@angular/core';\nimport {FormGroupDirective} from \"@angular/forms\";\nimport {debounceTime, fromEvent, take} from \"rxjs\";\n\n@Directive({\n selector: '[appInvalidControlScrollContainer]',\n standalone: true\n})\nexport class InvalidControlScrollContainerDirective {\n\n\n elementRef = inject(ElementRef);\n formGroupDirective = inject(FormGroupDirective);\n scrollContainerDir = inject(InvalidControlScrollContainerDirective, {optional: true});\n\n private get containerEl(): HTMLElement | any {\n return this.scrollContainerDir\n ? this.scrollContainerDir.containerEl\n : window;\n }\n\n constructor() { }\n\n @HostListener(\"ngSubmit\") onSubmit() {\n if (this.formGroupDirective.control.invalid) {\n this.scrollToFirstInvalidControl();\n }\n }\n\n private scrollToFirstInvalidControl() {\n const firstInvalidControl: HTMLElement = this.elementRef.nativeElement.querySelector(\n \".ng-invalid\"\n );\n\n this.containerEl.scroll({\n top: this.getTopOffset(firstInvalidControl),\n left: 0,\n behavior: \"smooth\"\n });\n\n fromEvent(this.containerEl, \"scroll\")\n .pipe(\n debounceTime(100),\n take(1)\n )\n .subscribe(() => firstInvalidControl.focus());\n }\n\n private getTopOffset(controlEl: HTMLElement): number {\n const labelOffset = 50;\n const controlElTop = controlEl.getBoundingClientRect().top;\n\n if (this.scrollContainerDir) {\n const containerTop = this.containerEl.getBoundingClientRect().top;\n const absoluteControlElTop = controlElTop + this.containerEl.scrollTop;\n\n return absoluteControlElTop - containerTop - labelOffset;\n } else {\n const absoluteControlElTop = controlElTop + window.scrollY;\n\n return absoluteControlElTop - labelOffset;\n }\n }\n\n}\n","export function deepEqual(obj1: any, obj2: any): boolean {\n // Check if both values are identical\n if (obj1 === obj2) {\n return true;\n }\n\n // Check if both values are objects\n if (typeof obj1 !== \"object\" || typeof obj2 !== \"object\" || obj1 === null || obj2 === null) {\n return false;\n }\n\n // Get the keys of both objects\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n\n // Check if both objects have the same number of keys\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n // Check if all keys and values are equal\n for (const key of keys1) {\n if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function jsonEqual(json1: string, json2: string): boolean {\n return json1 === json2;\n}\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\n\nexport class FormValidationUtils {\n updateValidatorsIfNeeded(control: AbstractControl | null, addValidators: ValidatorFn[]) {\n if (!control) return;\n\n const existingValidator = control.validator;\n const currentValidators: ValidatorFn[] = [];\n\n if (existingValidator) {\n currentValidators.push(existingValidator);\n }\n\n const toAdd = addValidators.filter(\n newVal => !currentValidators.includes(newVal)\n );\n\n if (toAdd.length) {\n control.setValidators([...currentValidators, ...toAdd]);\n control.updateValueAndValidity();\n }\n }\n\n}\n\n","import {Component, input} from '@angular/core';\nimport {AbstractControl} from \"@angular/forms\";\nimport {HumanizeFormMessagesPipe} from '../humanize-form-messages.pipe';\n\n@Component({\n selector: 'app-error',\n imports: [\n HumanizeFormMessagesPipe\n ],\n templateUrl: './app-error.component.html',\n styleUrl: './app-error.component.scss'\n})\nexport class AppErrorComponent {\n\n control = input.required<AbstractControl<any, any> | null>();\n errorMessages = input<{ [key: string]: string }>({});\n\n get hasErrors() {\n return (this.control() && this.control()?.touched && this.control()?.errors) ?? false;\n }\n}\n","@if (control()?.errors && hasErrors) {\n <div class=\"flex mt-1\">\n <span class=\"text-caption text-red-500\">\n {{ control()?.errors! | humanizeFormMessages: errorMessages() }}\n </span>\n </div>\n}\n","import {Component, input, OnInit, output, signal} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\n\nexport type Weekday = 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday';\n\n@Component({\n selector: 'app-date-picker',\n imports: [\n NgClass\n ],\n standalone: true,\n templateUrl: './date-picker.component.html',\n styleUrl: './date-picker.component.scss'\n})\nexport class DatePickerComponent extends BaseControlValueAccessorV3<Date> implements OnInit {\n minDate = input<Date | null>();\n maxDate = input<Date | null>();\n allowOnlyPast = input<boolean>(false);\n allowOnlyFuture = input<boolean>(false);\n allowToday = input<boolean>(false);\n disabledDays = input<Weekday[]>([]);\n disabledDates = input<Date[]>([]);\n\n dateSelected = output<Date>();\n\n // days = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n days: { day: Weekday, displayName: string }[] = [\n {day: 'sunday', displayName: 'Su'},\n {day: 'monday', displayName: 'Mo'},\n {day: 'tuesday', displayName: 'Tu'},\n {day: 'wednesday', displayName: 'We'},\n {day: 'thursday', displayName: 'Th'},\n {day: 'friday', displayName: 'Fr'},\n {day: 'saturday', displayName: 'Sa'}\n ];\n months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n\n uiMode = signal<'date' | 'month' | 'year'>('date');\n\n activeMonth!: number;\n activeYear!: number;\n selectedDate?: Date | null;\n\n years: { value: number; isEnabled: boolean }[] = [];\n daysOfMonth: { value: number; isEnabled: boolean }[] = [];\n blankDays: number[] = [];\n\n ngOnInit(): void {\n this.initDate();\n this.populateDays();\n }\n\n protected override onValueReady(value: Date): void {\n if (value) {\n this.selectedDate = value;\n this.activeMonth = value?.getMonth();\n this.activeYear = value?.getFullYear();\n } else {\n this.initDate();\n }\n\n this.populateDays();\n }\n\n initDate() {\n let today = this.controlValue ?? new Date();\n this.activeMonth = today.getMonth();\n this.activeYear = today.getFullYear();\n }\n\n getMMMYYYY() {\n return `${this.months[this.activeMonth]} ${this.activeYear}`;\n }\n\n populateYears(): void {\n let startYear = Math.floor(this.activeYear / 24) * 24;\n if (startYear <= 0) startYear = 1;\n\n const todayYear = new Date().getFullYear();\n\n this.years = Array.from({length: 24}, (_, i) => {\n const year = startYear + i;\n let isEnabled = true;\n\n if (this.allowOnlyPast() && year > todayYear) isEnabled = false;\n if (this.allowOnlyFuture() && year < todayYear) isEnabled = false;\n\n if (isEnabled && this.minDate()) {\n isEnabled = year >= this.minDate()!.getFullYear();\n }\n\n if (isEnabled && this.maxDate()) {\n isEnabled = isEnabled && year <= this.maxDate()!.getFullYear();\n }\n\n return {value: year, isEnabled};\n });\n }\n\n populateDays() {\n const daysInMonth = new Date(this.activeYear, this.activeMonth + 1, 0).getDate();\n\n this.blankDays = Array.from({length: new Date(this.activeYear, this.activeMonth).getDay()}, (_, i) => i + 1);\n\n this.daysOfMonth = Array.from({length: daysInMonth}, (_, i) => {\n const day = i + 1;\n const currentDate = new Date(this.activeYear, this.activeMonth, day);\n let isEnabled = true;\n\n if (this.allowOnlyFuture() && currentDate < new Date()) {\n isEnabled = false;\n }\n if (this.allowOnlyPast() && currentDate > new Date()) {\n isEnabled = false;\n }\n\n if (isEnabled && this.minDate()) {\n isEnabled = currentDate >= this.minDate()!;\n }\n if (isEnabled && this.maxDate()) {\n isEnabled = isEnabled && currentDate <= this.maxDate()!;\n }\n\n if(this.allowToday() && this.isToday(day)) {\n isEnabled = true;\n }\n\n const dayName = this.days[currentDate.getDay()];\n if (this.disabledDays()?.includes(dayName.day)) {\n isEnabled = false;\n }\n\n if (this.disabledDates()?.some(date => this.isSameDate(date, currentDate))) {\n isEnabled = false;\n }\n\n return {value: day, isEnabled};\n });\n }\n\n isSameDate(date1: Date, date2: Date): boolean {\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n isMonthEnabled(month: number): boolean {\n const monthStartDate = new Date(this.activeYear, month, 1);\n const today = new Date();\n const todayMonthStart = new Date(today.getFullYear(), today.getMonth(), 1);\n\n if (this.allowOnlyPast() && monthStartDate > todayMonthStart) return false;\n if (this.allowOnlyFuture() && monthStartDate < todayMonthStart) return false;\n\n if (this.minDate()) {\n const minMonthStart = new Date(this.minDate()!.getFullYear(), this.minDate()!.getMonth(), 1);\n if (monthStartDate < minMonthStart) return false;\n }\n\n if (this.maxDate()) {\n const maxMonthStart = new Date(this.maxDate()!.getFullYear(), this.maxDate()!.getMonth(), 1);\n if (monthStartDate > maxMonthStart) return false;\n }\n\n return true;\n }\n\n onYearSelected(year: number): void {\n this.activeYear = year;\n this.uiMode.set('month');\n }\n\n onMonthSelected(month: number): void {\n this.activeMonth = month;\n this.uiMode.set('date');\n this.populateDays();\n }\n\n isToday(day: number) {\n const today = new Date();\n const d = new Date(this.activeYear, this.activeMonth, day);\n return today.toDateString() === d.toDateString();\n }\n\n onDaySelected(day: number) {\n this.selectedDate = new Date(this.activeYear, this.activeMonth, day);\n this.onValueChange(this.selectedDate);\n this.dateSelected.emit(this.selectedDate);\n }\n\n resetPicker(): void {\n this.selectedDate = null;\n this.initDate();\n this.populateDays();\n }\n\n isSelected(day: number): boolean {\n const d = new Date(this.activeYear, this.activeMonth, day);\n return this.selectedDate?.toDateString() === d.toDateString();\n }\n\n previousMonthPressed() {\n switch (this.uiMode()) {\n case 'year':\n if (this.activeYear > 24) {\n this.activeYear -= 24;\n this.populateYears();\n }\n break;\n\n case 'month':\n if (this.activeYear > 1) {\n this.activeYear--;\n }\n break;\n\n case 'date':\n if (this.activeMonth === 0) {\n if (this.activeYear > 1) {\n this.activeYear--;\n this.activeMonth = 11;\n }\n } else {\n this.activeMonth--;\n }\n this.populateDays();\n break;\n\n default:\n console.warn('Unknown mode:', this.uiMode());\n }\n }\n\n nextMonthPressed() {\n switch (this.uiMode()) {\n case 'year':\n this.activeYear += 24;\n this.populateYears();\n break;\n\n case 'month':\n this.activeYear++;\n break;\n\n case 'date':\n if (this.activeMonth === 11) {\n this.activeYear++;\n this.activeMonth = 0;\n } else {\n this.activeMonth++;\n }\n this.populateDays();\n break;\n\n default:\n console.warn('Unknown mode:', this.uiMode());\n }\n }\n\n onYearSelectionPressed() {\n switch (this.uiMode()) {\n case 'year':\n this.uiMode.set('date');\n break;\n case \"month\":\n this.uiMode.set('year');\n break;\n case \"date\":\n this.populateYears();\n this.uiMode.set('year');\n break;\n }\n\n }\n\n getFirstYear() {\n return this.years[0].value;\n }\n\n getLastYear() {\n return this.years[this.years.length - 1].value;\n }\n}\n","<div\n class=\"flex flex-col gap-3 bg-white rounded-md border border-neutral-100 min-h-96 px-3 py-3 shadow-1 select-none w-min\">\n\n <div class=\"flex items-center justify-between w-[280px]\">\n\n <div (click)=\"onYearSelectionPressed()\"\n class=\"flex items-center gap-1 px-2.5 py-2 hover:bg-neutral-100 rounded-full cursor-pointer\">\n @switch (uiMode()) {\n @case ('date') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ getMMMYYYY() }}</span>\n <svg class=\"h-[18px] w-[18px] text-neutral-900\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M7 10L12 15L17 10H7Z\" fill=\"currentColor\"/>\n </svg>\n }\n @case ('month') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ activeYear }}</span>\n }\n @case ('year') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ getFirstYear() }} - {{ getLastYear() }}</span>\n <svg class=\"h-[18px] w-[18px] text-neutral-900\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7 15L12 10L17 15H7Z\" fill=\"currentColor\"/>\n </svg>\n }\n }\n\n </div>\n\n <div class=\"flex items-center gap-2\">\n\n <div (click)=\"previousMonthPressed()\"\n class=\"flex items-center justify-center h-[36px] w-[36px] rounded-full hover:bg-neutral-100 cursor-pointer select-none\">\n <svg class=\"h-[24px] w-[24px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M15.41 16.58L10.83 12L15.41 7.41L14 6L8 12L14 18L15.41 16.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div (click)=\"nextMonthPressed()\"\n class=\"flex items-center justify-center h-[36px] w-[36px] rounded-full hover:bg-neutral-100 cursor-pointer select-none\">\n <svg class=\"h-[24px] w-[24px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M8.58997 16.58L13.17 12L8.58997 7.41L9.99997 6L16 12L9.99997 18L8.58997 16.58Z\" fill=\"black\"/>\n </svg>\n </div>\n\n </div>\n\n </div>\n\n @if (uiMode() == 'date') {\n <div class=\"grid grid-cols-7 text-xs text-center text-gray-900 gap-y-1\">\n @for (day of days; track day) {\n <span\n class=\"flex items-center justify-center w-[40px] h-[40px] font-semibold rounded-lg\">{{ day.displayName }}</span>\n }\n\n @for (blankDay of blankDays; track blankDay) {\n <span\n class=\"flex items-center justify-center w-[40px] h-[40px] font-semibold rounded-lg text-transparent\"></span>\n }\n\n @for (day of daysOfMonth; track day) {\n <span (click)=\"day.isEnabled ? onDaySelected(day.value) : null\"\n [ngClass]=\"{\n 'text-neutral-400' : !day.isEnabled,\n '!bg-primary-500 !text-white': isSelected(day.value),\n 'today-and-selected bg-primary-500 text-white': isToday(day.value) && isSelected(day.value),\n 'border border-primary-500 text-primary-900': isToday(day.value),\n 'not-today-not-selected text-gray-700 hover:bg-primary-50': !isToday(day.value) && !isSelected(day.value) && day.isEnabled,\n 'not-today-selected text-gray-700 hover:bg-primary-500': !isToday(day.value) && isSelected(day.value),\n }\"\n class=\"flex items-center justify-center w-[40px] h-[40px] text-gray-700 rounded-lg select-none cursor-pointer\">{{ day.value }}</span>\n }\n </div>\n }\n\n @if (uiMode() == 'month') {\n <div class=\"grid grid-cols-4 text-xs text-center text-gray-900\">\n @for (month of months; track month; let i = $index) {\n <span (click)=\"onMonthSelected(i)\"\n [ngClass]=\"isMonthEnabled(i) ? '' : 'text-neutral-400'\"\n class=\"flex items-center px-2 py-2.5 justify-center cursor-pointer select-none hover:bg-neutral-100 rounded-lg uppercase\">{{ month }}</span>\n }\n </div>\n }\n\n\n @if (uiMode() == 'year') {\n <div class=\"grid grid-cols-4 text-xs text-center text-gray-900\">\n @for (year of years; track year; let i = $index) {\n <span (click)=\"year.isEnabled ? onYearSelected(year.value) : null\"\n [ngClass]=\"{\n 'text-neutral-400' : !year.isEnabled,\n }\"\n class=\"flex items-center px-2 py-2.5 justify-center cursor-pointer select-none hover:bg-neutral-100 rounded-lg\">{{ year.value }}</span>\n }\n </div>\n }\n\n</div>\n","import {Component, inject} from '@angular/core';\nimport {DIALOG_DATA, DialogRef} from \"@angular/cdk/dialog\";\nimport {DatePickerComponent, Weekday} from '../../date-picker/date-picker.component';\n\n@Component({\n selector: 'app-date-picker-overlay',\n imports: [\n DatePickerComponent\n ],\n templateUrl: './date-picker-overlay.component.html',\n styleUrl: './date-picker-overlay.component.scss'\n})\nexport class DatePickerOverlayComponent {\n\n dialogRef = inject(DialogRef);\n data: {\n selectedDate: Date | null;\n minDate: Date | null;\n maxDate: Date | null;\n allowOnlyPast: boolean;\n allowOnlyFuture: boolean;\n disabledDays: Weekday[];\n disabledDates: Date[];\n } = inject(DIALOG_DATA);\n\n onDateSelected($event: Date) {\n this.dialogRef.close($event);\n }\n}\n","<app-date-picker [minDate]=\"data.minDate\"\n [maxDate]=\"data.maxDate\"\n [allowOnlyPast]=\"data.allowOnlyPast\"\n [allowOnlyFuture]=\"data.allowOnlyFuture\"\n [disabledDays]=\"data.disabledDays\"\n [disabledDates]=\"data.disabledDates\"\n (dateSelected)=\"onDateSelected($event)\">\n</app-date-picker>\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\n\nexport function onlyPastDateValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value)\n return null;\n\n let selectedDate = new Date(control.value);\n let today = new Date();\n today.setHours(0, 0, 0, 0);\n\n return selectedDate < today ? null : {invalidDate: 'Date must be in the past.'};\n };\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\n\nexport function onlyFutureDateValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) return null;\n\n let selectedDate = new Date(control.value);\n let today = new Date();\n today.setHours(0, 0, 0, 0);\n\n return selectedDate > today ? null : {invalidDate: 'Date must be in the future.'};\n };\n}\n","import {Component, ElementRef, inject, input, OnDestroy, output, signal, ViewChild,} from '@angular/core';\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {NgxMaskDirective} from \"ngx-mask\";\nimport {FormsModule, ReactiveFormsModule, ValidatorFn} from \"@angular/forms\";\nimport {NgClass} from \"@angular/common\";\nimport {Subscription} from \"rxjs\";\nimport {isValidDate} from \"rxjs/internal/util/isDate\";\nimport {BaseInputComponent} from '../_base/base-input/base-input.component';\nimport { AppSvgIconComponent } from '../../components/app-svg-icon/app-svg-icon.component';\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\nimport { Weekday } from '../date-picker/date-picker.component';\nimport {OverlayService} from '../../components/overlay/overlay.service';\nimport {FormValidationUtils} from '../_utils/form-validation-utils';\nimport {onlyPastDateValidator} from '../../validators/only-past-date-validator';\nimport {onlyFutureDateValidator} from '../../validators/only-future-date-validator';\nimport {DatePickerOverlayComponent} from './date-picker-overlay/date-picker-overlay.component';\n\nexport enum InputDateFormat {\n mmddyyyy,\n ddmmyyyy\n}\n\n@Component({\n selector: 'app-date-input',\n standalone: true,\n imports: [\n HumanizeFormMessagesPipe,\n NgxMaskDirective,\n ReactiveFormsModule,\n NgClass,\n BaseInputComponent,\n AppSvgIconComponent,\n FormsModule\n ],\n templateUrl: './date-input.component.html',\n styleUrl: './date-input.component.scss'\n})\nexport class DateInputComponent extends BaseControlValueAccessorV3<Date | null> implements OnDestroy {\n @ViewChild('trigger', {static: true}) trigger!: ElementRef;\n\n label = input<string | null>();\n iconSrc = input<string | null>();\n showDatePickerIcon = input<boolean>(true);\n fullWidth = input<boolean>(false);\n showErrorSpace = input<boolean>(false);\n\n minDate = input<Date | null>();\n maxDate = input<Date | null>();\n allowOnlyPast = input<boolean>(false);\n allowOnlyFuture = input<boolean>(false);\n disabledDays = input<Weekday[]>([]);\n disabledDates = input<Date[]>([]);\n inputDateFormat = input<InputDateFormat>(InputDateFormat.mmddyyyy);\n\n overlayService = inject(OverlayService);\n\n isFocused = signal(false);\n\n textInputValue = signal<string | null>(null);\n private subscription?: Subscription;\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n protected onValueReady(value: any): void {\n this.updateValidations();\n if (value == null) {\n return;\n }\n\n if (value instanceof Date) {\n if (isValidDate(value)) {\n this.selValue(value);\n } else {\n this.selValue(null);\n }\n return;\n }\n\n const date = new Date(value);\n\n if (this.isValidDate(date)) {\n this.selValue(date);\n return;\n } else {\n this.selValue(null);\n }\n }\n\n updateValidations() {\n let formUtils = new FormValidationUtils();\n const validatorsToAdd: ValidatorFn[] = [];\n\n if (this.allowOnlyPast()) {\n validatorsToAdd.push(onlyPastDateValidator());\n }\n\n if (this.allowOnlyFuture()) {\n validatorsToAdd.push(onlyFutureDateValidator());\n }\n\n formUtils.updateValidatorsIfNeeded(this.formControl, validatorsToAdd);\n }\n\n selValue(value: any) {\n setTimeout(() => {\n if (value) {\n this.textInputValue.set(this.formatDate(value));\n this.onValueChange(value);\n } else {\n this.onValueChange(null);\n }\n }, 100);\n }\n\n isValidDate(date: any): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n get placeHolder(): string {\n switch (this.inputDateFormat()) {\n case InputDateFormat.mmddyyyy:\n return 'mm/dd/yyyy';\n case InputDateFormat.ddmmyyyy:\n return 'dd/mm/yyyy';\n }\n }\n\n getClass() {\n let cls = '';\n if (this.iconSrc()) {\n cls = cls + 'pr-3 pl-10';\n } else {\n cls = cls + 'px-3';\n }\n\n if (this.fullWidth()) {\n cls = cls + ' ' + 'w-full';\n }\n\n return cls;\n }\n\n onFocus() {\n this.isFocused.set(true);\n }\n\n onBlur() {\n this.isFocused.set(false);\n this.onTouched();\n }\n\n onInputChanged($event: Event) {\n const target = $event.target as HTMLInputElement;\n const inputValue = target.value.trim();\n\n // Remove non-numeric characters for length validation\n const numericValue = inputValue.replace(/[^0-9]/g, '');\n const parsedDate = this.parseDate(inputValue);\n\n if (parsedDate) {\n this.onValueChange(parsedDate);\n } else if (numericValue.length === 8) {\n this.textInputValue.set(null);\n this.onValueChange(null);\n }\n }\n\n onDatePickerIconClicked() {\n let dialogRef = this.overlayService.openNearElement(DatePickerOverlayComponent, this.trigger.nativeElement, {\n data: {\n selectedDate: this.controlValue,\n minDate: this.minDate(),\n maxDate: this.maxDate(),\n allowOnlyPast: this.allowOnlyPast(),\n allowOnlyFuture: this.allowOnlyFuture(),\n disabledDays: this.disabledDays(),\n disabledDates: this.disabledDates()\n }\n });\n this.subscription = dialogRef.closed.subscribe((date: Date) => {\n let formattedDate = this.formatDate(date);\n this.textInputValue.set(formattedDate);\n this.onValueChange(date);\n });\n }\n\n private parseDate(dateStr: string | null): Date | null {\n if (!dateStr) return null;\n const parts = dateStr.split('/');\n if (parts.length !== 3) return null;\n\n const [part1, part2, part3] = parts.map(Number);\n const [mm, dd, yyyy] = this.inputDateFormat() === InputDateFormat.mmddyyyy ? [part1, part2, part3] : [part2, part1, part3];\n\n if (!mm || !dd || !yyyy || mm > 12 || dd > 31 || yyyy < 1000 || yyyy > 9999) return null;\n\n const parsedDate = new Date(yyyy, mm - 1, dd);\n if (parsedDate.getMonth() + 1 !== mm || parsedDate.getDate() !== dd || parsedDate.getFullYear() !== yyyy) {\n return null; // Ensures the date is valid\n }\n\n return parsedDate;\n }\n\n private formatDate(date: Date): string {\n const mm = String(date.getMonth() + 1).padStart(2, '0');\n const dd = String(date.getDate()).padStart(2, '0');\n const yyyy = date.getFullYear();\n return this.inputDateFormat() === InputDateFormat.mmddyyyy ? `${mm}/${dd}/${yyyy}` : `${dd}/${mm}/${yyyy}`;\n }\n}\n","<app-base-input #inputElement [title]=\"label()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"relative flex items-center w-full text-neutral-400 bg-white shadow-1 rounded-md\">\n @if (iconSrc()) {\n <app-svg-icon [size]=\"18\" [src]=\"iconSrc()!\"\n class=\"absolute pointer-events-none ml-3 text-neutral-400\"></app-svg-icon>\n }\n\n\n <!-- <p>{{ formControl.getError('required') ? placeholder + ' ' : placeholder }}</p>-->\n\n <input\n [mask]=\"'00/00/0000'\"\n [showMaskTyped]=\"isFocused()\"\n class=\"w-full h-[46px] placeholder-neutral-400 text-black rounded-md border-none outline-none focus:border-none ring-1 ring-neutral-300 focus:ring-primary-500 focus:ring-2 transition-all duration-300\"\n [class.text-neutral-400]=\"formControl.disabled\"\n [class.disabled-placeholder]=\"formControl.disabled\"\n [(ngModel)]=\"textInputValue\"\n (focus)=\"onFocus()\"\n [ngClass]=\"getClass()\"\n [placeholder]=\"placeHolder\"\n (blur)=\"onBlur()\"\n (input)=\"onInputChanged($event)\">\n\n\n <div #trigger (click)=\"onDatePickerIconClicked()\"\n class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\"\n class=\"w-[18px] h-[18px] text-neutral-500\">\n <path\n d=\"M19 19H5V8H19M16 1V3H8V1H6V3H5C3.89 3 3 3.89 3 5V19C3 19.5304 3.21071 20.0391 3.58579 20.4142C3.96086 20.7893 4.46957 21 5 21H19C19.5304 21 20.0391 20.7893 20.4142 20.4142C20.7893 20.0391 21 19.5304 21 19V5C21 3.89 20.1 3 19 3H18V1M17 12H12V17H17V12Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n\n </div>\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"flex mt-1\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import {Component, input, OnInit, output, signal} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\nimport {BaseControlValueAccessorV3} from \"../../base/base-control-value-accessor-v3\";\nimport {Weekday} from '../date-picker/date-picker.component';\n\n@Component({\n selector: 'app-date-range-picker',\n imports: [\n NgClass\n ],\n standalone: true,\n templateUrl: './date-range-picker.component.html',\n styleUrl: './date-range-picker.component.scss'\n})\nexport class DateRangePickerComponent extends BaseControlValueAccessorV3<DateRangeEvent | null> implements OnInit {\n\n minDate = input<Date | null>();\n maxDate = input<Date | null>();\n allowOnlyPast = input<boolean>(false);\n allowOnlyFuture = input<boolean>(false);\n allowToday = input<boolean>(false);\n\n dateRangeSelected = output<DateRangeEvent>();\n\n days: { day: Weekday, displayName: string }[] = [\n {day: 'sunday', displayName: 'Su'},\n {day: 'monday', displayName: 'Mo'},\n {day: 'tuesday', displayName: 'Tu'},\n {day: 'wednesday', displayName: 'We'},\n {day: 'thursday', displayName: 'Th'},\n {day: 'friday', displayName: 'Fr'},\n {day: 'saturday', displayName: 'Sa'}\n ];\n\n months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n\n uiMode = signal<'date' | 'month' | 'year'>('date');\n\n activeMonth!: number;\n activeYear!: number;\n startDate?: Date | null;\n endDate?: Date | null;\n\n selectingStart = true;\n hoveredDate: Date | null = null;\n\n years: { value: number; isEnabled: boolean }[] = [];\n daysOfMonth: { value: number; isEnabled: boolean }[] = [];\n blankDays: number[] = [];\n\n ngOnInit(): void {\n this.initDate();\n this.populateDays();\n }\n\n protected override onValueReady(value: DateRangeEvent): void {\n if (value?.startDate && value?.endDate) {\n this.startDate = new Date(value.startDate);\n this.endDate = new Date(value.endDate);\n this.activeMonth = this.startDate.getMonth();\n this.activeYear = this.startDate.getFullYear();\n } else {\n this.initDate();\n }\n\n this.populateDays();\n }\n\n initDate() {\n let today: Date = this.controlValue?.startDate ?? new Date();\n this.activeMonth = today.getMonth();\n this.activeYear = today.getFullYear();\n }\n\n getMMMYYYY() {\n return `${this.months[this.activeMonth]} ${this.activeYear}`;\n }\n\n populateYears(): void {\n let startYear = Math.floor(this.activeYear / 24) * 24;\n if (startYear <= 0) startYear = 1;\n\n const todayYear = new Date().getFullYear();\n\n this.years = Array.from({ length: 24 }, (_, i) => {\n const year = startYear + i;\n let isEnabled = true;\n\n if (this.allowOnlyPast() && year > todayYear) isEnabled = false;\n if (this.allowOnlyFuture() && year < todayYear) isEnabled = false;\n\n if (isEnabled && this.minDate()) {\n isEnabled = year >= this.minDate()!.getFullYear();\n }\n\n if (isEnabled && this.maxDate()) {\n isEnabled = isEnabled && year <= this.maxDate()!.getFullYear();\n }\n\n return { value: year, isEnabled };\n });\n }\n\n populateDays() {\n const daysInMonth = new Date(this.activeYear, this.activeMonth + 1, 0).getDate();\n this.blankDays = Array.from({length: new Date(this.activeYear, this.activeMonth).getDay()}, (_, i) => i + 1);\n\n this.daysOfMonth = Array.from({length: daysInMonth}, (_, i) => {\n const day = i + 1;\n const currentDate = new Date(this.activeYear, this.activeMonth, day);\n let isEnabled = true;\n\n if (this.allowOnlyFuture() && currentDate < new Date()) {\n isEnabled = false;\n }\n\n if (this.allowOnlyPast() && currentDate > new Date()) {\n isEnabled = false;\n }\n\n if (isEnabled && this.minDate()) {\n isEnabled = currentDate >= this.minDate()!;\n }\n\n if (isEnabled && this.maxDate()) {\n isEnabled = isEnabled && currentDate <= this.maxDate()!;\n }\n\n if(this.allowToday() && this.isToday(day)) {\n isEnabled = true;\n }\n\n return {value: day, isEnabled};\n });\n }\n\n\n isMonthEnabled(month: number): boolean {\n const monthStartDate = new Date(this.activeYear, month, 1);\n const today = new Date();\n const todayMonthStart = new Date(today.getFullYear(), today.getMonth(), 1);\n\n if (this.allowOnlyPast() && monthStartDate > todayMonthStart) return false;\n if (this.allowOnlyFuture() && monthStartDate < todayMonthStart) return false;\n\n if (this.minDate()) {\n const minMonthStart = new Date(this.minDate()!.getFullYear(), this.minDate()!.getMonth(), 1);\n if (monthStartDate < minMonthStart) return false;\n }\n\n if (this.maxDate()) {\n const maxMonthStart = new Date(this.maxDate()!.getFullYear(), this.maxDate()!.getMonth(), 1);\n if (monthStartDate > maxMonthStart) return false;\n }\n\n return true;\n }\n\n onYearSelected(year: number): void {\n this.activeYear = year;\n this.uiMode.set('month');\n }\n\n onMonthSelected(month: number): void {\n this.activeMonth = month;\n this.uiMode.set('date');\n this.populateDays();\n }\n\n isToday(day: number) {\n const today = new Date();\n const d = new Date(this.activeYear, this.activeMonth, day);\n return today.toDateString() === d.toDateString();\n }\n\n onDaySelected(day: number) {\n const selectedDate = new Date(this.activeYear, this.activeMonth, day);\n\n if (!this.startDate || selectedDate < this.startDate) {\n this.startDate = selectedDate;\n this.endDate = null;\n this.hoveredDate = null;\n this.selectingStart = false;\n } else {\n this.endDate = selectedDate;\n\n let event: DateRangeEvent = {startDate: this.startDate, endDate: this.endDate};\n this.dateRangeSelected.emit(event);\n this.selectingStart = true;\n }\n\n\n if (this.startDate && this.endDate) {\n this.onValueChange({startDate: this.startDate, endDate: this.endDate});\n }\n }\n\n onDayHovered(day: number) {\n if (this.startDate && !this.endDate) {\n this.hoveredDate = new Date(this.activeYear, this.activeMonth, day);\n } else {\n this.hoveredDate = null;\n }\n }\n\n\n isDateInSelectionRange(day: number): boolean {\n\n let date = new Date(this.activeYear, this.activeMonth, day);\n if (this.startDate && this.endDate) {\n return date >= this.startDate && date <= this.endDate;\n }\n return false;\n }\n\n isDateInHoveredRange(day: number): boolean {\n let date = new Date(this.activeYear, this.activeMonth, day);\n\n if (this.startDate && this.hoveredDate && !this.endDate) {\n const adjustedHoveredDate = new Date(this.hoveredDate);\n adjustedHoveredDate.setDate(this.hoveredDate.getDate() - 1);\n return (\n date > this.startDate &&\n date < this.hoveredDate\n );\n }\n return false;\n }\n\n isDateHovered(day: number): boolean {\n let date = new Date(this.activeYear, this.activeMonth, day);\n return this.hoveredDate?.getTime() === date.getTime();\n }\n\n isDateInRange(day: number): boolean {\n let date = new Date(this.activeYear, this.activeMonth, day);\n return this.isDateInSelectionRange(day) || this.isDateInHoveredRange(day);\n }\n\n isSelectionStartDate(day: number): boolean | null | undefined {\n const date = new Date(this.activeYear, this.activeMonth, day);\n return (this.startDate && date.toDateString() === this.startDate.toDateString());\n }\n\n isSelectionEndDate(day: number): boolean | null | undefined {\n const date = new Date(this.activeYear, this.activeMonth, day);\n return (this.endDate && date.toDateString() === this.endDate.toDateString());\n }\n\n previousMonthPressed() {\n switch (this.uiMode()) {\n case 'year':\n if (this.activeYear > 24) {\n this.activeYear -= 24;\n this.populateYears();\n }\n break;\n\n case 'month':\n if (this.activeYear > 1) {\n this.activeYear--;\n }\n break;\n\n case 'date':\n if (this.activeMonth === 0) {\n if (this.activeYear > 1) {\n this.activeYear--;\n this.activeMonth = 11;\n }\n } else {\n this.activeMonth--;\n }\n this.populateDays();\n break;\n\n default:\n console.warn('Unknown mode:', this.uiMode());\n }\n }\n\n nextMonthPressed() {\n switch (this.uiMode()) {\n case 'year':\n this.activeYear += 24;\n this.populateYears();\n break;\n\n case 'month':\n this.activeYear++;\n break;\n\n case 'date':\n if (this.activeMonth === 11) {\n this.activeYear++;\n this.activeMonth = 0;\n } else {\n this.activeMonth++;\n }\n this.populateDays();\n break;\n\n default:\n console.warn('Unknown mode:', this.uiMode());\n }\n }\n\n onYearSelectionPressed() {\n switch (this.uiMode()) {\n case 'year':\n this.uiMode.set('date');\n break;\n case \"month\":\n this.uiMode.set('year');\n break;\n case \"date\":\n this.populateYears();\n this.uiMode.set('year');\n break;\n }\n\n }\n\n getFirstYear() {\n return this.years[0].value;\n }\n\n getLastYear() {\n return this.years[this.years.length - 1].value;\n }\n\n resetSelection() {\n this.startDate = null;\n this.endDate = null;\n this.hoveredDate = null;\n\n this.onValueChange(null);\n }\n}\n\nexport interface DateRangeEvent {\n startDate: Date;\n endDate: Date;\n}\n","<div\n class=\"flex flex-col gap-3 bg-white rounded-md border border-neutral-100 min-h-96 px-3 py-3 shadow-1 select-none\">\n\n <div class=\"grow flex flex-col gap-3 w-[280px]\">\n\n <div class=\"flex items-center justify-between\">\n\n <div (click)=\"onYearSelectionPressed()\"\n class=\"flex items-center gap-1 px-2.5 py-2 hover:bg-neutral-100 rounded-full cursor-pointer\">\n @switch (uiMode()) {\n @case ('date') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ getMMMYYYY() }}</span>\n <svg class=\"h-[18px] w-[18px] text-neutral-900\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M7 10L12 15L17 10H7Z\" fill=\"currentColor\"/>\n </svg>\n }\n @case ('month') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ activeYear }}</span>\n }\n @case ('year') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ getFirstYear() }} - {{ getLastYear() }}</span>\n <svg class=\"h-[18px] w-[18px] text-neutral-900\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7 15L12 10L17 15H7Z\" fill=\"currentColor\"/>\n </svg>\n }\n }\n\n </div>\n\n <div class=\"flex items-center gap-2\">\n\n <div (click)=\"previousMonthPressed()\"\n class=\"flex items-center justify-center h-[36px] w-[36px] rounded-full hover:bg-neutral-100 cursor-pointer select-none\">\n <svg class=\"h-[24px] w-[24px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M15.41 16.58L10.83 12L15.41 7.41L14 6L8 12L14 18L15.41 16.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div (click)=\"nextMonthPressed()\"\n class=\"flex items-center justify-center h-[36px] w-[36px] rounded-full hover:bg-neutral-100 cursor-pointer select-none\">\n <svg class=\"h-[24px] w-[24px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M8.58997 16.58L13.17 12L8.58997 7.41L9.99997 6L16 12L9.99997 18L8.58997 16.58Z\" fill=\"black\"/>\n </svg>\n </div>\n\n </div>\n\n </div>\n <div class=\"flex gap-3\">\n <span (click)=\"resetSelection()\"\n class=\"text-overline px-2 py-1.5 rounded-md transition-all duration-300 bg-info-50 cursor-pointer select-none text-info-500\">Today</span>\n </div>\n\n @if (uiMode() == 'date') {\n <div class=\"grid grid-cols-7 gap-y-1 text-xs text-center text-gray-900\">\n @for (day of days; track day) {\n <span class=\"flex items-center justify-center w-[40px] h-[40px] font-semibold rounded-lg\">{{ day.displayName }}</span>\n }\n\n @for (blankDay of blankDays; track blankDay) {\n <span class=\"flex items-center justify-center w-[40px] h-[40px] font-semibold rounded-lg text-transparent\"></span>\n }\n\n @for (day of daysOfMonth; track day) {\n <span (click)=\"day.isEnabled ? onDaySelected(day.value) : null\"\n (mouseover)=\"onDayHovered(day.value)\"\n [ngClass]=\"{\n 'text-neutral-400' : !day.isEnabled,\n 'border rounded-lg border-primary-500 text-primary-900': isToday(day.value) && !isSelectionStartDate(day.value) && !isSelectionEndDate(day.value),\n 'bg-primary-500 rounded-tl-lg rounded-bl-lg text-white': isSelectionStartDate(day.value),\n 'bg-primary-500 !rounded-tr-lg !rounded-br-lg text-white': isSelectionEndDate(day.value),\n 'bg-primary-50 text-primary-900': isDateInSelectionRange(day.value),\n 'border-t border-b border-r rounded-tr-lg rounded-br-lg border-dashed border-gray-500 bg-neutral-100 text-primary-900': isDateHovered(day.value),\n '!border-t !border-b !border-r-none !border-dashed !border-gray-500 !text-primary-900': isDateInHoveredRange(day.value),\n }\"\n class=\"flex items-center justify-center w-[40px] h-[40px] text-gray-700 select-none cursor-pointer\">{{ day.value }}</span>\n }\n </div>\n }\n\n @if (uiMode() == 'month') {\n <div class=\"grid grid-cols-4 text-xs text-center text-gray-900\">\n @for (month of months; track month; let i = $index) {\n <span (click)=\"onMonthSelected(i)\"\n [ngClass]=\"isMonthEnabled(i) ? '' : 'text-neutral-400'\"\n class=\"flex items-center px-2 py-2.5 justify-center cursor-pointer select-none hover:bg-neutral-100 rounded-lg uppercase\">{{ month }}</span>\n }\n </div>\n }\n\n\n @if (uiMode() == 'year') {\n <div class=\"grid grid-cols-4 text-xs text-center text-gray-900\">\n @for (year of years; track year; let i = $index) {\n <span (click)=\"year.isEnabled ? onYearSelected(year.value) : null\"\n [ngClass]=\"{\n 'text-neutral-400' : !year.isEnabled,\n }\"\n class=\"flex items-center px-2 py-2.5 justify-center cursor-pointer select-none hover:bg-neutral-100 rounded-lg\">{{ year.value }}</span>\n }\n </div>\n }\n </div>\n\n\n <div class=\"flex items-center justify-end\">\n <span (click)=\"resetSelection()\"\n class=\"text-overline px-2 py-2 rounded-md transition-all duration-300 hover:bg-info-50 cursor-pointer select-none text-info-500\">Reset</span>\n </div>\n\n</div>\n","import {\n AfterContentInit, ChangeDetectorRef,\n Component, ElementRef, HostListener,\n inject,\n input, OnChanges,\n output, Renderer2,\n signal, SimpleChanges, viewChild, ViewChild\n} from '@angular/core';\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {FormControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseInputComponent} from '../_base/base-input/base-input.component';\nimport {State} from '../../base/base-state';\nimport {NgClass} from \"@angular/common\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {\n CdkConnectedOverlay,\n Overlay\n} from \"@angular/cdk/overlay\";\nimport {resolveTemplateWithObject} from \"../../common-utils/template-resolver\";\nimport {BaseControlValueAccessorV2} from \"../../base/base-control-value-accessor-v2\";\n\n@Component({\n selector: 'app-dropdown',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n BaseInputComponent,\n NgClass,\n HumanizeFormMessagesPipe,\n CdkConnectedOverlay,\n AppSvgIconComponent\n ],\n templateUrl: './dropdown.component.html',\n styleUrl: './dropdown.component.scss'\n})\nexport class DropdownComponent<T> extends BaseControlValueAccessorV2<any> implements AfterContentInit, OnChanges {\n\n cdr = inject(ChangeDetectorRef);\n renderer = inject(Renderer2);\n overlay = inject(Overlay);\n\n title = input<string | null>();\n items = input<T[]>([]);\n placeholder = input<string>('Select');\n prefixIconPath = input<string | null>();\n isTitlePrefix = input<boolean>(false);\n display = input<string | null>();\n displayTemplate = input<string | null>();\n value = input<string | null>();\n searchKeyMatch = input<string | null>();\n // identifier = input<string>();\n noDataMessage = input<string>();\n state = input<State<any>>();\n fullWidth = input<boolean>(false);\n showErrorSpace = input<boolean>(false);\n enableSearch = input<boolean>(false);\n addActionText = input<string | null>();\n minimumPopupWidth = input(250);\n noBorder = input<boolean>(false);\n\n isOpen = signal(false);\n highlightedIndex = signal(-1);\n selectedItem = signal<T | null>(null);\n dropUp = signal(false);\n dropdownWidth = signal(300);\n filteredList = signal<T[]>([]);\n errorMessages = signal<{ [key: string]: string }>({});\n\n valueChanged = output<T | null>();\n addActionClicked = output<void>();\n\n @ViewChild('dropdownButton', {static: true}) dropdownButton!: ElementRef;\n @ViewChild('dropdown', {static: true}) dropdown!: ElementRef;\n @ViewChild('dropdownListContainer', {static: false}) dropdownListContainer!: ElementRef;\n @ViewChild('dropdownList', {static: false}) dropdownList!: ElementRef;\n private searchField = viewChild<ElementRef<HTMLInputElement>>('searchField');\n\n scrollStrategy = this.overlay.scrollStrategies.block();\n\n ngOnChanges(changes: SimpleChanges): void {\n let value = this.actualValue;\n if (value != null) {\n if (this.value() != null) {\n let matchingItem = this.getObjectByPathValue(this.items(), this.value()!, value);\n this.selectedItem.set(matchingItem ?? null);\n } else {\n this.selectedItem.set(value);\n }\n }\n }\n\n protected onValueReady(value: any): void {\n if (value != null) {\n if (this.value() != null) {\n let matchingItem = this.getObjectByPathValue(this.items(), this.value()!, value);\n this.selectedItem.set(matchingItem ?? null);\n } else {\n this.selectedItem.set(value);\n }\n } else {\n this.selectedItem.set(null);\n }\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n getDisplayString(item: T | null): any {\n\n let object = item as any;\n if (object == null) {\n return null;\n }\n\n if (this.display() != null && this.display() != '') {\n return this.display()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if (this.displayTemplate() != null && this.displayTemplate() != '') {\n return resolveTemplateWithObject(object, this.displayTemplate()!);\n }\n\n return item;\n\n }\n\n getButtonClass(): string {\n if (this.noBorder()) {\n return 'border-none outline-none ring-none';\n } else {\n return 'border-none outline-none border-gray-300 ring-1 focus:ring-2 ring-neutral-300 focus:ring-primary-500 shadow-1 focus:border-none focus:outline-none';\n }\n }\n\n filterList(event: Event) {\n const searchKeyword = (event.target as HTMLInputElement)?.value;\n\n if (this.enableSearch()) {\n this.updateFilteredList(searchKeyword);\n } else {\n const firstMatchingItem = this.findFirstMatch(searchKeyword);\n let index = this.filteredList().findIndex(item => item == firstMatchingItem);\n this.highlightedIndex.set(index);\n }\n }\n\n updateFilteredList(searchKeyword?: string) {\n\n if (!searchKeyword || searchKeyword.trim() === '') {\n return;\n }\n\n const filterResult = this.items().filter((item) => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString.toLowerCase().includes(searchKeyword.toLowerCase());\n }\n return false;\n });\n\n this.filteredList.set(filterResult);\n this.updateHighlightedIndex();\n }\n\n findFirstMatch(searchKeyword?: string): T | null {\n if (!searchKeyword || searchKeyword.trim() === '') {\n return null;\n }\n return this.filteredList().find((item) => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString.toLowerCase().includes(searchKeyword.toLowerCase());\n }\n return false;\n }) || null;\n }\n\n getValue(item: T): any {\n if (this.value() == null || this.value() == '') {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getSelectedItem(): T | null {\n let items = this.filteredList() ?? [];\n let selectedItem = items.find(item => this.getValue(item) == this.formControl.value);\n return selectedItem ?? this.selectedItem() ?? null;\n }\n\n toggleDropdown(): void {\n this.isOpen.update(prev => !prev);\n if (this.isOpen()) {\n this.filteredList.set(this.items());\n this.updateHighlightedIndex();\n this.adjustDropdownPosition();\n this.setPopupWidth();\n this.cdr.detectChanges();\n this.setDropdownMaxHeight();\n this.scrollToHighlightedItem();\n this.searchField()?.nativeElement.focus();\n }\n }\n\n updateHighlightedIndex() {\n let index = this.filteredList().findIndex(item => item == this.selectedItem());\n this.highlightedIndex.set(index);\n }\n\n setPopupWidth() {\n const buttonWidth = this.dropdownButton.nativeElement.offsetWidth;\n if (buttonWidth < this.minimumPopupWidth()) {\n this.dropdownWidth.set(this.minimumPopupWidth());\n return;\n }\n\n this.dropdownWidth.set(this.dropdownButton.nativeElement.offsetWidth);\n }\n\n onClickOutside() {\n this.isOpen.set(false);\n this.dropdown?.nativeElement.focus();\n }\n\n onItemClicked(item: T): void {\n this.onClickOutside();\n this.selectedItem.set(item);\n if (this.formControl.enabled) {\n this.markAsTouched();\n const value = this.getValue(item);\n if (value == this.formControl.value) {\n this.onChange(value);\n this.valueChanged.emit(null);\n } else {\n this.onChange(value);\n this.valueChanged.emit(item);\n }\n }\n }\n\n setDropdownMaxHeight() {\n const buttonRect = this.dropdownButton.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - buttonRect.bottom;\n const spaceAbove = buttonRect.top;\n\n let maxHeight;\n if (this.dropUp()) {\n maxHeight = spaceAbove - 36;\n } else {\n maxHeight = spaceBelow - 36;\n }\n\n if (this.dropdownListContainer) {\n this.renderer.setStyle(this.dropdownListContainer.nativeElement, 'max-height', `${maxHeight}px`);\n }\n }\n\n adjustDropdownPosition() {\n const buttonRect = this.dropdownButton.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - buttonRect.bottom;\n const spaceAbove = buttonRect.top;\n this.dropUp.set(spaceAbove > spaceBelow && spaceBelow < 200);\n }\n\n scrollToHighlightedItem() {\n if (this.dropdownList && this.dropdownList.nativeElement.children[this.highlightedIndex()]) {\n const highlightedItem = this.dropdownList.nativeElement.children[this.highlightedIndex()];\n highlightedItem.scrollIntoView({block: 'nearest'});\n }\n }\n\n @HostListener('window:resize')\n onResize() {\n if (this.isOpen()) {\n this.adjustDropdownPosition();\n }\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (!this.isOpen()) {\n return;\n }\n switch (event.key) {\n case 'ArrowDown':\n if (this.highlightedIndex() < this.filteredList().length - 1) {\n this.highlightedIndex.update(prev => prev + 1);\n }\n this.scrollToHighlightedItem();\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (this.highlightedIndex() > 0) {\n this.highlightedIndex.update(prev => prev - 1);\n }\n this.scrollToHighlightedItem();\n event.preventDefault();\n break;\n case 'Enter':\n this.onItemClicked(this.filteredList()[this.highlightedIndex()]);\n this.isOpen.set(false);\n event.preventDefault();\n break;\n case 'Escape':\n this.isOpen.set(false);\n event.preventDefault();\n break;\n }\n\n\n if (!this.enableSearch()) {\n let key = event.key;\n if (key.length === 1 && /^[a-zA-Z]$/.test(key)) {\n const matchingIndex = this.filteredList().findIndex(item => {\n let resolvedText = '';\n if (this.searchKeyMatch() != null && this.searchKeyMatch() != '') {\n resolvedText = resolveTemplateWithObject(item as any, `$${this.searchKeyMatch()}`);\n } else {\n resolvedText = this.getDisplayString(item);\n }\n return resolvedText.toLowerCase().startsWith(key);\n }\n );\n\n if (matchingIndex !== -1) {\n this.highlightedIndex.set(matchingIndex);\n this.scrollToHighlightedItem()\n }\n }\n }\n }\n\n onClearSearchClicked() {\n if (this.searchField()) {\n this.searchField()!.nativeElement.value = '';\n this.filteredList.set(this.items());\n this.highlightedIndex.set(0);\n this.scrollToHighlightedItem();\n this.searchField()!.nativeElement.focus();\n }\n }\n\n onAddActionClicked() {\n this.addActionClicked.emit();\n }\n\n getObjectByPathValue(objects: any[], path: string, value: any): T | null {\n const pathParts = path.split('.');\n if(objects == null) {\n return null;\n }\n\n return objects.find((obj) => {\n let current = obj;\n for (const part of pathParts) {\n if (current && part in current) {\n current = current[part];\n } else {\n return false;\n }\n }\n return current === value;\n });\n }\n}\n","<app-base-input [title]=\"isTitlePrefix() ? null : title()\" [fullWidth]=\"fullWidth()\" (keydown)=\"handleKeydown($event)\"\n [isRequiredField]=\"hasRequiredValidator()\">\n <div #dropdownButton input class=\"relative inline text-left min-w-28 w-full\">\n\n <button #dropdown (click)=\"toggleDropdown()\"\n type=\"button\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"isOpen()\"\n class=\"h-[46px] flex items-center gap-3 w-full px-3 py-2 text-sm justify-between font-medium text-gray-700 bg-white rounded-md transition-all duration-300\"\n [ngClass]=\"getButtonClass()\">\n\n <div class=\"flex items-center gap-3 w-full\">\n @if(prefixIconPath()) {\n <app-svg-icon [size]=\"18\" [src]=\"prefixIconPath()!\"></app-svg-icon>\n }\n @if (isTitlePrefix()) {\n <span class=\"text-body2 text-neutral-500 whitespace-nowrap\">{{ title() }}:</span>\n }\n <span class=\"w-full text-body2 text-left truncate overflow-hidden text-ellipsis ... line-clamp-2\"\n [ngClass]=\"((formControl.value != null && formControl.value != '') || (selectedItem() != null && selectedItem() != '')) ? 'text-black' : 'text-gray-400'\">{{ getDisplayString(selectedItem()) || getDisplayString(getSelectedItem()) || placeholder() }}</span>\n </div>\n\n <svg class=\"-mr-1 h-[20px] w-[20px] text-gray-500\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M7.41 8.57996L12 13.17L16.59 8.57996L18 9.99996L12 16L6 9.99996L7.41 8.57996Z\"\n fill=\"currentColor\"/>\n </svg>\n </button>\n\n <ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"dropdownButton\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n (overlayOutsideClick)=\"onClickOutside()\"\n [cdkConnectedOverlayBackdropClass]=\"['bg-black', 'bg-opacity-20']\"\n [cdkConnectedOverlayPositions]=\"[\n {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},\n {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}\n ]\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayOffsetY]=\"10\">\n <div #dropdownListContainer\n class=\"flex flex-col rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none overflow-clip\">\n @if (enableSearch()) {\n <div class=\"relative flex items-center w-full text-neutral-400 bg-white border border-b border-neutral-200\">\n <svg class=\"absolute pointer-events-none ml-3 text-neutral-400 w-[20px] h-[20px]\"\n viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.5 3C11.2239 3 12.8772 3.68482 14.0962 4.90381C15.3152 6.12279 16 7.77609 16 9.5C16 11.11 15.41 12.59 14.44 13.73L14.71 14H15.5L20.5 19L19 20.5L14 15.5V14.71L13.73 14.44C12.59 15.41 11.11 16 9.5 16C7.77609 16 6.12279 15.3152 4.90381 14.0962C3.68482 12.8772 3 11.2239 3 9.5C3 7.77609 3.68482 6.12279 4.90381 4.90381C6.12279 3.68482 7.77609 3 9.5 3ZM9.5 5C7 5 5 7 5 9.5C5 12 7 14 9.5 14C12 14 14 12 14 9.5C14 7 12 5 9.5 5Z\"\n fill=\"currentColor\"/>\n </svg>\n\n <input (input)=\"filterList($event)\" (keydown)=\"handleKeydown($event)\" #searchField\n class=\"h-[46px] pr-3 pl-10 placeholder-neutral-400 text-black border-none outline-none focus:border-none w-full\">\n\n <div\n class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full cursor-pointer\"\n (click)=\"onClearSearchClicked()\">\n <svg class=\"h-[16px] w-[16px] text-neutral-400\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 2C17.53 2 22 6.47 22 12C22 17.53 17.53 22 12 22C6.47 22 2 17.53 2 12C2 6.47 6.47 2 12 2ZM15.59 7L12 10.59L8.41 7L7 8.41L10.59 12L7 15.59L8.41 17L12 13.41L15.59 17L17 15.59L13.41 12L17 8.41L15.59 7Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n }\n\n @if (addActionText()) {\n <div class=\"flex gap-3 px-4 py-4 bg-neutral-50 w-full cursor-pointer border-b border-neutral-100\"\n (click)=\"onAddActionClicked()\">\n <svg class=\"text-primary-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M19 13H13V19H11V13H5V11H11V5H13V11H19V13Z\" fill=\"currentColor\"/>\n </svg>\n <span class=\"text-body2 text-primary-500\">{{ addActionText() }}</span>\n </div>\n }\n\n <div #dropdownList class=\"overflow-y-scroll scrollbar scrollbar-thumb-gray-500 scrollbar-track-gray-300\"\n role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"options-menu\" tabindex=\"-1\"\n [style.width.px]=\"dropdownWidth()\">\n\n @for (item of filteredList(); track item; let i = $index) {\n <span class=\"text-gray-700 block px-4 py-3 text-sm hover:bg-neutral-100 cursor-pointer\"\n [ngClass]=\"(highlightedIndex() == i) ? 'bg-neutral-200' : 'bg-neutral-50'\" role=\"menuitem\"\n tabindex=\"-1\" (click)=\"onItemClicked(item)\">{{ getDisplayString(item) }}</span>\n } @empty {\n <span class=\"text-gray-400 block px-4 py-4 text-sm select-none\" role=\"menuitem\" tabindex=\"-1\">No options available</span>\n }\n </div>\n </div>\n </ng-template>\n\n </div>\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import {\n Component,\n OnInit,\n inject,\n input,\n output,\n AfterContentInit,\n signal\n} from '@angular/core';\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {FormControl, NgControl} from \"@angular/forms\";\nimport {SpinnerComponent} from \"../../components/spinner/spinner.component\";\nimport {HumanizeFormMessagesPipe} from '../humanize-form-messages.pipe';\n\n@Component({\n selector: 'app-file-uploader',\n standalone: true,\n imports: [\n SpinnerComponent,\n HumanizeFormMessagesPipe\n ],\n templateUrl: './file-uploader.component.html',\n styleUrls: ['./file-uploader.component.scss']\n})\nexport class FileUploaderComponent extends BaseControlValueAccessor implements OnInit, AfterContentInit {\n fullWidth = input(false);\n label = input<string | null>();\n isRequired = input(false);\n uploading = input(false);\n errorMessages = input<{ [key: string]: string }>({});\n\n fileSelected = output<File>();\n fileRemoved = output<void>();\n\n id = signal<string>('');\n\n selectedFile = signal<File | null>(null);\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n ngOnInit(): void {\n this.id.set(this.getId());\n }\n\n onFileChange(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const firstFile = input.files[0];\n this.onChange(firstFile);\n this.fileSelected.emit(firstFile);\n this.selectedFile.set(firstFile);\n }\n }\n\n onRemoveFileClicked() {\n this.onChange(null);\n this.selectedFile.set(null);\n this.fileRemoved.emit();\n }\n\n onViewFileClicked() {\n if (this.formControl.value == null) {\n return;\n }\n\n if (this.formControl.value instanceof File) {\n const file = this.formControl.value as File;\n if (file) {\n const url = URL.createObjectURL(file);\n window.open(url, '_blank');\n }\n } else {\n window.open(this.formControl.value, '_blank');\n }\n }\n\n private getId(): string {\n const randomNumber = Math.floor(1000 + Math.random() * 9000);\n return `file-input-${randomNumber.toString()}`;\n }\n\n getFileNameFromUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n const pathname = parsedUrl.pathname;\n const fileName = pathname.split('/').pop();\n\n return fileName ? decodeURIComponent(fileName) : '';\n } catch {\n const fileName = url.split('/').pop();\n return fileName ? decodeURIComponent(fileName) : '';\n }\n }\n}\n","<div\n class=\"flex items-center rounded border-2 border-dashed border-info-300 px-4 py-4 gap-2 cursor-pointer\">\n <div class=\"flex flex-row items-center gap-2 w-full\">\n <div class=\"flex items-center gap-2 grow\">\n <label [for]=\"id()\" class=\"flex items-center gap-3 text-caption cursor-pointer grow\">\n <svg viewBox=\"0 0 24 24\" class=\"h-[24px] w-[24px] text-neutral-500\" fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16.5 6V17.5C16.5 18.5609 16.0786 19.5783 15.3284 20.3284C14.5783 21.0786 13.5609 21.5 12.5 21.5C11.4391 21.5 10.4217 21.0786 9.67157 20.3284C8.92143 19.5783 8.5 18.5609 8.5 17.5V5C8.5 4.33696 8.76339 3.70107 9.23223 3.23223C9.70107 2.76339 10.337 2.5 11 2.5C11.663 2.5 12.2989 2.76339 12.7678 3.23223C13.2366 3.70107 13.5 4.33696 13.5 5V15.5C13.5 15.7652 13.3946 16.0196 13.2071 16.2071C13.0196 16.3946 12.7652 16.5 12.5 16.5C12.2348 16.5 11.9804 16.3946 11.7929 16.2071C11.6054 16.0196 11.5 15.7652 11.5 15.5V6H10V15.5C10 16.163 10.2634 16.7989 10.7322 17.2678C11.2011 17.7366 11.837 18 12.5 18C13.163 18 13.7989 17.7366 14.2678 17.2678C14.7366 16.7989 15 16.163 15 15.5V5C15 3.93913 14.5786 2.92172 13.8284 2.17157C13.0783 1.42143 12.0609 1 11 1C9.93913 1 8.92172 1.42143 8.17157 2.17157C7.42143 2.92172 7 3.93913 7 5V17.5C7 18.9587 7.57946 20.3576 8.61091 21.3891C9.64236 22.4205 11.0413 23 12.5 23C13.9587 23 15.3576 22.4205 16.3891 21.3891C17.4205 20.3576 18 18.9587 18 17.5V6H16.5Z\"\n fill=\"currentColor\"/>\n </svg>\n <span class=\"text-caption text-neutral-900\">{{ label() }}</span>\n @if (hasRequiredValidator() || isRequired()) {\n <span class=\"text-caption text-error-500\">*</span>\n }\n </label>\n </div>\n\n @if (formControl.value || selectedFile()) {\n <div class=\"flex gap-3 items-center\">\n <span class=\"text-body2 text-info-500 px-2 underline\"\n (click)=\"onViewFileClicked()\">{{ formControl.value?.name || getFileNameFromUrl(formControl.value) || selectedFile()?.name }}</span>\n @if (!uploading()) {\n <div class=\"flex items-center gap-1 cursor-pointer\" (click)=\"onRemoveFileClicked()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-[16px] w-[16px] text-error-500 underline\"\n viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path\n d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z\"\n fill=\"currentColor\"/>\n </svg>\n <span class=\"text-caption underline text-red-500\">Remove</span>\n </div>\n }\n </div>\n }\n\n @if (uploading()) {\n <app-spinner></app-spinner>\n }\n\n </div>\n <input type=\"file\" [id]=\"id()\" (change)=\"onFileChange($event)\" hidden/>\n</div>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n}\n\n","export class SharedConstants {\n static inputIdentifier = 'id';\n}\n","import {\n AfterContentInit, ChangeDetectorRef,\n Component,\n ElementRef, HostListener,\n inject,\n input,\n output, Renderer2,\n signal,\n viewChild,\n ViewChild\n} from '@angular/core';\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {FormControl, FormsModule, NgControl} from \"@angular/forms\";\nimport {State} from \"../../base/base-state\";\nimport {CdkConnectedOverlay, Overlay} from \"@angular/cdk/overlay\";\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {NgClass} from \"@angular/common\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {resolveTemplateWithObject} from \"../../common-utils/template-resolver\";\nimport {deepEqual} from \"../_utils/base-input-utils\";\nimport {CheckboxComponent} from \"../checkbox/checkbox.component\";\nimport {SharedConstants} from \"../../shared-constants\";\n\n@Component({\n selector: 'app-multi-select-dropdown',\n standalone: true,\n imports: [\n BaseInputComponent,\n NgClass,\n HumanizeFormMessagesPipe,\n CdkConnectedOverlay,\n CheckboxComponent,\n FormsModule\n ],\n templateUrl: './multi-select-dropdown.component.html',\n styleUrl: './multi-select-dropdown.component.scss'\n})\nexport class MultiSelectDropdownComponent<T> extends BaseControlValueAccessor implements AfterContentInit {\n\n cdr = inject(ChangeDetectorRef);\n renderer = inject(Renderer2);\n overlay = inject(Overlay);\n\n title = input<string | null>();\n items = input<T[]>([]);\n placeholder = input<string>('Select');\n display = input<string | null>();\n displayTemplate = input<string | null>();\n value = input<string>('');\n identifier = input<string>(SharedConstants.inputIdentifier);\n searchKeyMatch = input<string | null>();\n noDataMessage = input<string>();\n state = input<State<any>>();\n fullWidth = input<boolean>(false);\n showErrorSpace = input<boolean>(false);\n enableSearch = input<boolean>(false);\n addActionText = input<string | null>();\n minimumPopupWidth = input(250);\n appearance = input<MultiSelectDropdownAppearance>(MultiSelectDropdownAppearance.standard);\n\n valueChanged = output<T[]>();\n addActionClicked = output<void>();\n\n isOpen = signal(false);\n highlightedIndex = signal(-1);\n dropUp = signal(false);\n dropdownWidth = signal(300);\n selectedItems = signal<T[]>([]);\n filteredList = signal<T[]>([]);\n errorMessages = signal<{ [key: string]: string }>({});\n\n @ViewChild('dropdownButton', {static: true}) dropdownButton!: ElementRef;\n @ViewChild('dropdownListContainer', {static: false}) dropdownListContainer!: ElementRef;\n @ViewChild('dropdownList', {static: false}) dropdownList!: ElementRef;\n private searchField = viewChild<ElementRef<HTMLInputElement>>('searchField');\n\n scrollStrategy = this.overlay.scrollStrategies.block();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n MultiSelectDropdownAppearance = MultiSelectDropdownAppearance;\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n if (this.formControl.value == null) {\n this.formControl.setValue([]);\n }\n if (!Array.isArray(this.formControl.value)) {\n this.formControl.setValue([]);\n }\n }\n }\n\n getValue(item: T): any {\n if (!this.value()) {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getAllValues(): any[] {\n let items = this.selectedItems() ?? [];\n let values = items.map((item: T) => this.getValue(item));\n return values;\n }\n\n getObjectUsingValue(selectedItem: T): any {\n if (this.value() == null || this.value() == '') {\n return selectedItem;\n }\n\n let valuePath = this.value()!;\n return this.items().find(item => {\n const propertyValue = valuePath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === this.getValue(selectedItem);\n });\n }\n\n getObjectUsingIdentifier(selectedItem: T): T | undefined {\n if (this.identifier() == null || this.identifier() == '') {\n return selectedItem;\n }\n let identifierPath = this.identifier()!;\n return this.items().find(item => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === this.getIdentifier(selectedItem);\n });\n }\n\n getIdentifier(item: T): any {\n if (!this.identifier()) {\n return item;\n }\n let object = item as any;\n let identifier = this.identifier()!.split('.').reduce((acc, part) => acc && acc[part], object);\n return identifier;\n }\n\n isItemExistInFormControl(item: T) {\n const controlValue = (this.formControl.value as T[]) ?? [];\n let identifierPath = this.identifier() ?? '';\n let value = this.getIdentifier(item);\n\n\n let anyMatch = controlValue.some(x => x == value);\n if (anyMatch) {\n return true;\n }\n\n if (identifierPath == null || identifierPath == '') {\n return controlValue.some(x => deepEqual(x, item));\n }\n let isEqual = controlValue.find(x => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], x as any);\n return propertyValue === this.getIdentifier(item);\n });\n return isEqual;\n }\n\n isItemExistInNormalSelectionList(item: T) {\n const controlValue = (this.selectedItems()) ?? [];\n let identifierPath = this.identifier()!;\n if (identifierPath == null || identifierPath == '') {\n return controlValue.some(x => deepEqual(x, item));\n }\n let isEqual = controlValue.find(x => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], x as any);\n return propertyValue === this.getIdentifier(item);\n });\n return isEqual;\n }\n\n onItemClicked(item: T) {\n this.markAsTouched();\n\n const controlValue = (this.formControl.value as T[]) ?? [];\n const valueExistInFormControl = this.isItemExistInFormControl(item);\n const valueExistInSelections = this.isItemExistInNormalSelectionList(item);\n\n\n if (valueExistInFormControl || valueExistInSelections) {\n const index = controlValue.indexOf(item);\n controlValue.splice(index, 1);\n this.selectedItems.update(prev => {\n let index = prev.findIndex(x => deepEqual(x, item));\n prev.splice(index, 1);\n return prev;\n });\n let value = this.getAllValues();\n this.valueChanged.emit(value);\n this.onChange(controlValue);\n } else {\n controlValue.push(item);\n this.selectedItems.update(prev => {\n prev.push(item);\n return prev;\n });\n let value = this.getAllValues();\n this.valueChanged.emit(value);\n this.onChange(controlValue);\n }\n }\n\n getDisplayString(item: T | null): any {\n\n let object = item as any;\n if (object == null) {\n return null;\n }\n\n if (this.display() != null && this.display() != '') {\n return this.display()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if (this.displayTemplate() != null && this.displayTemplate() != '') {\n return resolveTemplateWithObject(object, this.displayTemplate()!);\n }\n\n return item;\n\n }\n\n filterList(event: Event) {\n const searchKeyword = (event.target as HTMLInputElement)?.value;\n\n if (this.enableSearch()) {\n this.updateFilteredList(searchKeyword);\n } else {\n const firstMatchingItem = this.findFirstMatch(searchKeyword);\n let index = this.filteredList().findIndex(item => item == firstMatchingItem);\n this.highlightedIndex.set(index);\n }\n }\n\n updateFilteredList(searchKeyword?: string) {\n\n if (!searchKeyword || searchKeyword.trim() === '') {\n return;\n }\n\n const filterResult = this.items().filter((item) => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString.toLowerCase().includes(searchKeyword.toLowerCase());\n }\n return false;\n });\n\n this.filteredList.set(filterResult);\n this.updateHighlightedIndex();\n }\n\n findFirstMatch(searchKeyword?: string): T | null {\n if (!searchKeyword || searchKeyword.trim() === '') {\n return null;\n }\n return this.filteredList().find((item) => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString.toLowerCase().includes(searchKeyword.toLowerCase());\n }\n return false;\n }) || null;\n }\n\n updateHighlightedIndex() {\n // TODO\n // let index = this.filteredList().findIndex(item => item == this.selectedItem());\n this.highlightedIndex.set(0);\n }\n\n setPopupWidth() {\n const buttonWidth = this.dropdownButton.nativeElement.offsetWidth;\n if (buttonWidth < this.minimumPopupWidth()) {\n this.dropdownWidth.set(this.minimumPopupWidth());\n return;\n }\n\n this.dropdownWidth.set(this.dropdownButton.nativeElement.offsetWidth);\n }\n\n onClickOutside() {\n this.isOpen.set(false);\n }\n\n toggleDropdown(): void {\n this.isOpen.update(prev => !prev);\n if (this.isOpen()) {\n this.filteredList.set(this.items());\n this.updateHighlightedIndex();\n this.adjustDropdownPosition();\n this.setPopupWidth();\n this.cdr.detectChanges();\n this.setDropdownMaxHeight();\n this.scrollToHighlightedItem();\n this.searchField()?.nativeElement.focus();\n }\n }\n\n setDropdownMaxHeight() {\n const buttonRect = this.dropdownButton.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - buttonRect.bottom;\n const spaceAbove = buttonRect.top;\n\n let maxHeight;\n if (this.dropUp()) {\n maxHeight = spaceAbove - 36;\n } else {\n maxHeight = spaceBelow - 36;\n }\n\n if (this.dropdownListContainer) {\n this.renderer.setStyle(this.dropdownListContainer.nativeElement, 'max-height', `${maxHeight}px`);\n }\n }\n\n adjustDropdownPosition() {\n const buttonRect = this.dropdownButton.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - buttonRect.bottom;\n const spaceAbove = buttonRect.top;\n this.dropUp.set(spaceAbove > spaceBelow && spaceBelow < 200);\n }\n\n scrollToHighlightedItem() {\n if (this.dropdownList && this.dropdownList.nativeElement.children[this.highlightedIndex()]) {\n const highlightedItem = this.dropdownList.nativeElement.children[this.highlightedIndex()];\n highlightedItem.scrollIntoView({block: 'nearest'});\n }\n }\n\n @HostListener('window:resize')\n onResize() {\n if (this.isOpen()) {\n this.adjustDropdownPosition();\n }\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (!this.isOpen()) {\n return;\n }\n switch (event.key) {\n case 'ArrowDown':\n if (this.highlightedIndex() < this.filteredList().length - 1) {\n this.highlightedIndex.update(prev => prev + 1);\n }\n this.scrollToHighlightedItem();\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (this.highlightedIndex() > 0) {\n this.highlightedIndex.update(prev => prev - 1);\n }\n this.scrollToHighlightedItem();\n event.preventDefault();\n break;\n case 'Enter':\n this.onItemClicked(this.filteredList()[this.highlightedIndex()]);\n event.preventDefault();\n break;\n case 'Escape':\n this.isOpen.set(false);\n event.preventDefault();\n break;\n }\n\n\n if (!this.enableSearch()) {\n let key = event.key;\n if (key.length === 1 && /^[a-zA-Z]$/.test(key)) {\n const matchingIndex = this.filteredList().findIndex(item => {\n let resolvedText = '';\n if (this.searchKeyMatch() != null && this.searchKeyMatch() != '') {\n resolvedText = resolveTemplateWithObject(item as any, `$${this.searchKeyMatch()}`);\n } else {\n resolvedText = this.getDisplayString(item);\n }\n return resolvedText.toLowerCase().startsWith(key);\n }\n );\n\n if (matchingIndex !== -1) {\n this.highlightedIndex.set(matchingIndex);\n this.scrollToHighlightedItem()\n }\n }\n }\n }\n\n onClearSearchClicked() {\n if (this.searchField()) {\n this.searchField()!.nativeElement.value = '';\n this.filteredList.set(this.items());\n this.highlightedIndex.set(0);\n this.scrollToHighlightedItem();\n this.searchField()!.nativeElement.focus();\n }\n }\n\n onSelectAllClicked() {\n this.formControl.setValue(this.items());\n this.selectedItems.set(this.items());\n this.valueChanged.emit(this.items());\n }\n\n onClearSelectionClicked() {\n this.formControl.setValue([]);\n this.selectedItems.set([]);\n this.valueChanged.emit([]);\n }\n\n getCsv(): string | null {\n let selectedItems = this.items().filter(x => {\n return this.isItemExistInFormControl(x) || this.isItemExistInNormalSelectionList(x);\n });\n\n let csv = selectedItems.map(item => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString;\n }\n return '';\n }).join(', ');\n\n if (csv == '') {\n return null;\n }\n return csv;\n }\n\n onAddActionClicked() {\n this.addActionClicked.emit();\n }\n\n}\n\nexport enum MultiSelectDropdownAppearance {\n standard,\n csv,\n chips\n}\n","<app-base-input [title]=\"title()\" [fullWidth]=\"fullWidth()\" (keydown)=\"handleKeydown($event)\"\n [isRequiredField]=\"hasRequiredValidator()\">\n\n <div #dropdownButton input class=\"relative inline-block text-left min-w-52\">\n <div>\n <button (click)=\"toggleDropdown()\"\n type=\"button\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"isOpen()\"\n class=\"h-[46px] inline-flex items-center w-full px-4 py-2 text-sm justify-between font-medium text-gray-700 bg-white border-none outline-none border-gray-300 ring-1 focus:ring-2 ring-neutral-300 focus:ring-primary-500 rounded-md shadow-1 focus:border-none focus:outline-none transition-all duration-300\">\n @switch (appearance()) {\n @case (MultiSelectDropdownAppearance.standard) {\n <span class=\"text-body1 text-left overflow-ellipsis\"\n [ngClass]=\"((formControl.value != null && formControl.value?.length > 0) || selectedItems().length > 0) ? 'text-black' : 'text-gray-400'\">{{ ((selectedItems().length > 0 || formControl.value?.length > 0) ? (selectedItems().length || formControl.value?.length) + ' Selected' : placeholder()) }}</span>\n }\n @case (MultiSelectDropdownAppearance.csv) {\n <div class=\"flex flex-wrap gap-2 w-full\">\n <span class=\"text-body1 text-left w-full truncate overflow-ellipsis\"\n [ngClass]=\"((formControl.value != null && formControl.value?.length > 0) || selectedItems().length > 0) ? 'text-black' : 'text-gray-400'\">{{ getCsv() ?? placeholder() }}</span>\n </div>\n }\n @default {\n <span class=\"text-body1 text-left overflow-ellipsis\"\n [ngClass]=\"((formControl.value != null && formControl.value?.length > 0) || selectedItems().length > 0) ? 'text-black' : 'text-gray-400'\">{{ ((selectedItems().length > 0 || formControl.value?.length > 0) ? (selectedItems().length || formControl.value?.length) + ' Selected' : placeholder()) }}</span>\n }\n }\n <div class=\"flex items-center gap-2 -mr-1\">\n <svg class=\"h-[20px] w-[20px] text-gray-500\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M7.41 8.57996L12 13.17L16.59 8.57996L18 9.99996L12 16L6 9.99996L7.41 8.57996Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n\n </button>\n </div>\n </div>\n\n <ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"dropdownButton\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayBackdropClass]=\"['bg-black', 'bg-opacity-20']\"\n (overlayOutsideClick)=\"onClickOutside()\"\n [cdkConnectedOverlayPositions]=\"[\n {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},\n {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}\n ]\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayOffsetY]=\"10\">\n <div #dropdownListContainer\n class=\"flex flex-col rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none overflow-clip\">\n\n @if (enableSearch()) {\n <div class=\"relative flex items-center w-full text-neutral-400 bg-white border border-b border-neutral-200\">\n <svg class=\"absolute pointer-events-none ml-3 text-neutral-400 w-[20px] h-[20px]\"\n viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.5 3C11.2239 3 12.8772 3.68482 14.0962 4.90381C15.3152 6.12279 16 7.77609 16 9.5C16 11.11 15.41 12.59 14.44 13.73L14.71 14H15.5L20.5 19L19 20.5L14 15.5V14.71L13.73 14.44C12.59 15.41 11.11 16 9.5 16C7.77609 16 6.12279 15.3152 4.90381 14.0962C3.68482 12.8772 3 11.2239 3 9.5C3 7.77609 3.68482 6.12279 4.90381 4.90381C6.12279 3.68482 7.77609 3 9.5 3ZM9.5 5C7 5 5 7 5 9.5C5 12 7 14 9.5 14C12 14 14 12 14 9.5C14 7 12 5 9.5 5Z\"\n fill=\"currentColor\"/>\n </svg>\n\n <input (input)=\"filterList($event)\" (keydown)=\"handleKeydown($event)\" #searchField\n class=\"h-[46px] pr-3 pl-10 placeholder-neutral-400 text-black border-none outline-none focus:border-none w-full\">\n\n <div\n class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full cursor-pointer\"\n (click)=\"onClearSearchClicked()\">\n <svg class=\"h-[16px] w-[16px] text-neutral-400\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 2C17.53 2 22 6.47 22 12C22 17.53 17.53 22 12 22C6.47 22 2 17.53 2 12C2 6.47 6.47 2 12 2ZM15.59 7L12 10.59L8.41 7L7 8.41L10.59 12L7 15.59L8.41 17L12 13.41L15.59 17L17 15.59L13.41 12L17 8.41L15.59 7Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n }\n\n @if(addActionText()) {\n <div class=\"flex gap-3 px-4 py-4 bg-neutral-50 w-full cursor-pointer border-b border-neutral-100\" (click)=\"onAddActionClicked()\">\n <svg class=\"text-primary-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M19 13H13V19H11V13H5V11H11V5H13V11H19V13Z\" fill=\"currentColor\"/>\n </svg>\n <span class=\"text-body2 text-primary-500\">{{ addActionText() }}</span>\n </div>\n }\n\n <div class=\"flex items-center justify-between px-4 py-4 bg-neutral-50\">\n <span class=\"text-overline text-blue-500 cursor-pointer\"\n (click)=\"onSelectAllClicked()\">SELECT ALL</span>\n <span class=\"text-overline text-blue-500 cursor-pointer\"\n (click)=\"onClearSelectionClicked()\">CLEAR</span>\n </div>\n\n <div #dropdownList class=\"overflow-y-scroll scrollbar scrollbar-thumb-gray-500 scrollbar-track-gray-300\"\n role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"options-menu\" tabindex=\"-1\"\n [style.width.px]=\"dropdownWidth()\">\n\n @for (item of filteredList(); track item; let i = $index) {\n <div (click)=\"onItemClicked(item)\"\n class=\"flex gap-2 items-center px-2 hover:bg-neutral-100 cursor-pointer\"\n [ngClass]=\"{\n 'bg-neutral-200': (highlightedIndex() == i),\n 'bg-primary-50': isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item),\n 'bg-opacity-30': isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item),\n }\"\n role=\"menuitem\"\n tabindex=\"-1\">\n <app-checkbox\n [ngModel]=\"isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item)\"></app-checkbox>\n <span class=\"text-gray-700 block text-sm\">{{ getDisplayString(item) }}</span>\n </div>\n } @empty {\n <span class=\"text-gray-400 block px-4 py-4 text-sm select-none\" role=\"menuitem\" tabindex=\"-1\">No options available</span>\n }\n </div>\n </div>\n </ng-template>\n\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import {AfterContentInit, Component, inject, input, OnChanges, output, signal, SimpleChanges} from '@angular/core';\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {State} from \"../../base/base-state\";\nimport {FormControl, NgControl} from \"@angular/forms\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {ShimmerComponent} from \"../../components/shimmer/shimmer.component\";\nimport {NgClass, NgStyle} from \"@angular/common\";\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {deepEqual, jsonEqual} from \"../_utils/base-input-utils\";\nimport {resolveTemplateWithObject} from \"../../common-utils/template-resolver\";\nimport {SharedConstants} from '../../shared-constants';\n\n@Component({\n selector: 'app-multi-selection-field',\n standalone: true,\n imports: [\n BaseInputComponent,\n HumanizeFormMessagesPipe,\n ShimmerComponent,\n NgClass,\n AppSvgIconComponent,\n NgStyle\n ],\n templateUrl: './multi-selection-field.component.html',\n styleUrl: './multi-selection-field.component.scss'\n})\nexport class MultiSelectionFieldComponent<T> extends BaseControlValueAccessor implements AfterContentInit, OnChanges {\n title = input<string | null>();\n items = input<T[]>([]);\n display = input<string | null>();\n displayTemplate = input<string | null>();\n iconSrc = input<string | null>();\n dynamicIconPath = input<string>();\n imageUrl = input<string | null>();\n dynamicImageUrlPath = input<string>();\n value = input<string | null>(null);\n identifier = input<string>(SharedConstants.inputIdentifier);\n noDataMessage = input<string>();\n state = input<State<any>>();\n iconColor = input<string>();\n dynamicIconColor = input<string>();\n customActionText = input<string>();\n fullWidth = input<boolean>(false);\n itemWidth = input<number | null>(null);\n isItemCentered = input<boolean>(false);\n showSelectionTickMark = input<boolean>(true);\n maximumDisplayItems = input<number | null>(null);\n\n valueChanged = output<T[]>();\n onCustomActionClicked = output<void>();\n\n showAll = signal(false);\n\n selectedItems = signal<T[]>([]);\n errorMessages = signal<{ [key: string]: string }>({});\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateValue();\n }\n\n override onWriteValue(value: any[]): void {\n this.updateValue();\n }\n\n updateValue() {\n let formValue = this.formControl.value ?? [];\n if (formValue == null) {\n return;\n }\n\n if (!Array.isArray(formValue)) {\n return;\n }\n\n let items = formValue.map(x => {\n let item = this.getObjectUsingIdentifierValue(x);\n return item;\n });\n\n this.selectedItems.set(items);\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n if (this.formControl.value == null) {\n this.formControl.setValue([]);\n }\n if(!Array.isArray(this.formControl.value)){\n this.formControl.setValue([]);\n }\n }\n }\n\n getVisibleItems(): T[] {\n if (this.showAll()) return this.items();\n return this.maximumDisplayItems() !== null ? this.items().slice(0, this.maximumDisplayItems()!) : this.items();\n }\n\n showMoreButton(): boolean {\n return !this.showAll() && this.maximumDisplayItems() !== null && this.items().length > this.maximumDisplayItems()!;\n }\n\n showLessButton(): boolean {\n return this.showAll() && this.maximumDisplayItems() !== null;\n }\n\n showAllItems() {\n this.showAll.set(true);\n }\n\n shrinkItems() {\n this.showAll.set(false);\n }\n\n getObjectUsingValue(selectedItem: T): any {\n if (this.value() == null || this.value() == '') {\n return selectedItem;\n }\n\n let valuePath = this.value()!;\n return this.items().find(item => {\n const propertyValue = valuePath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === this.getValue(selectedItem);\n });\n }\n\n getObjectUsingIdentifier(selectedItem: T): T | undefined {\n if (this.identifier() == null || this.identifier() == '') {\n return selectedItem;\n }\n let identifierPath = this.identifier()!;\n return this.items().find(item => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === this.getIdentifier(selectedItem);\n });\n }\n\n getObjectUsingIdentifierValue(value: any): any | undefined {\n if (this.identifier() == null || this.identifier() == '') {\n return value;\n }\n let identifierPath = this.identifier()!;\n return this.items().find(item => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === value;\n });\n }\n\n getDisplayString(item: T): any {\n let object = item as any;\n if(object == null) {\n return null;\n }\n\n if(this.display() != null && this.display() != '') {\n return this.display()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if(this.displayTemplate() != null && this.displayTemplate() != '') {\n return resolveTemplateWithObject(object, this.displayTemplate()!);\n }\n\n return item;\n }\n\n getValue(item: T): any {\n if (!this.value()) {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getAllValues(): any[] {\n let items = this.selectedItems() ?? [];\n let values = items.map((item: T) => this.getValue(item));\n return values;\n }\n\n getIdentifier(item: T): any {\n if (!this.identifier()) {\n return item;\n }\n let object = item as any;\n let identifier = this.identifier()!.split('.').reduce((acc, part) => acc && acc[part], object);\n return identifier;\n }\n\n isItemExistInFormControl(item: T) {\n const controlValue = (this.formControl.value as T[]) ?? [];\n let identifierPath = this.identifier() ?? '';\n let value = this.getIdentifier(item);\n\n\n let anyMatch = controlValue.some(x => x == value);\n if (anyMatch) {\n return true;\n }\n\n if (identifierPath == null || identifierPath == '') {\n return controlValue.some(x => deepEqual(x, item));\n }\n let isEqual = controlValue.find(x => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], x as any);\n return propertyValue === this.getIdentifier(item);\n });\n return isEqual;\n }\n\n isItemExistInNormalSelectionList(item: T) {\n const controlValue = (this.selectedItems()) ?? [];\n let identifierPath = this.identifier()!;\n if (identifierPath == null || identifierPath == '') {\n return controlValue.some(x => deepEqual(x, item));\n }\n let isEqual = controlValue.find(x => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], x as any);\n return propertyValue === this.getIdentifier(item);\n });\n return isEqual;\n }\n\n onItemClicked(item: T) {\n this.markAsTouched();\n\n const controlValue = (this.formControl.value as T[]) ?? [];\n const valueExistInFormControl = this.isItemExistInFormControl(item);\n const valueExistInSelections = this.isItemExistInNormalSelectionList(item);\n\n\n if (valueExistInFormControl || valueExistInSelections) {\n const index = controlValue.indexOf(item);\n controlValue.splice(index, 1);\n this.selectedItems.update(prev => {\n let index = prev.findIndex(x => deepEqual(x, item));\n prev.splice(index, 1);\n return prev;\n });\n let value = this.getAllValues();\n this.valueChanged.emit(value);\n this.onChange(value);\n } else {\n controlValue.push(item);\n this.selectedItems.update(prev => {\n prev.push(item);\n return prev;\n });\n let value = this.getAllValues();\n this.valueChanged.emit(value);\n this.onChange(value);\n }\n }\n\n getImageType(item: T): 'svg' | 'url' | null {\n\n if (this.iconSrc() != null && this.iconSrc() != '') {\n return 'svg';\n }\n\n if (this.dynamicIconPath() != null && this.dynamicIconPath() != '') {\n return 'svg';\n }\n\n if (this.imageUrl() != null && this.imageUrl() != '') {\n return 'url';\n }\n\n if (this.dynamicImageUrlPath() != null && this.dynamicImageUrlPath() != '') {\n return 'url';\n }\n\n return null;\n }\n\n getDynamicIcon(item: T): string | null | undefined {\n if (this.iconSrc() != null && this.iconSrc() != '') {\n return this.iconSrc();\n }\n\n if (this.dynamicIconPath() != null && this.dynamicIconPath() != '') {\n let object = item as any;\n return this.dynamicIconPath()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if (this.imageUrl() != null && this.imageUrl() != '') {\n return this.imageUrl();\n }\n\n if (this.dynamicImageUrlPath() != null && this.dynamicImageUrlPath() != '') {\n let object = item as any;\n return this.dynamicImageUrlPath()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n return null;\n }\n\n getDynamicIconColor(item: T): string | null | undefined {\n if (this.iconColor()) {\n return this.iconColor();\n }\n\n if (this.dynamicIconColor() == null || this.dynamicIconColor() == '') {\n return this.iconColor();\n }\n let object = item as any;\n const color = this.dynamicIconColor()!.split('.').reduce((acc, part) => acc && acc[part], object);\n return color;\n }\n\n customActionClicked() {\n this.onCustomActionClicked.emit();\n }\n\n handleKeydown(event: KeyboardEvent, item: T) {\n switch (event.key) {\n case 'Enter':\n this.onItemClicked(item);\n event.preventDefault();\n break;\n }\n }\n}\n","<app-base-input [title]=\"title()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"flex flex-wrap justify-start gap-3\">\n\n @for (item of getVisibleItems(); track item; let index = $index) {\n <div class=\"relative flex items-center rounded-lg px-4 py-2 gap-3 cursor-pointer border-2 border-neutral-300\"\n tabindex=\"0\"\n (keydown)=\"handleKeydown($event, item)\"\n [ngStyle]=\"{ 'width': itemWidth() ? itemWidth() + 'px' : null }\"\n (click)=\"onItemClicked(item)\"\n [ngClass]=\"{\n 'border-primary-600': isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item),\n 'justify-center': isItemCentered()\n }\">\n\n\n @if ((isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item)) && showSelectionTickMark()) {\n <div class=\"absolute -top-[8px] -right-[8px]\">\n <svg class=\"h-[18px] w-[18px] text-primary-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z\"\n fill=\"white\"/>\n <path\n d=\"M10 17L5 12L6.41 10.58L10 14.17L17.59 6.58L19 8M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n }\n\n @if (getDynamicIcon(item)) {\n @switch (getImageType(item)) {\n @case ('url') {\n <img class=\"object-contain\" height=\"20px\" width=\"20px\" [src]=\"getDynamicIcon(item)\" alt=\"\">\n }\n @case ('svg') {\n <app-svg-icon [src]=\"getDynamicIcon(item)!\" [size]=\"18\"\n [ngStyle]=\"{'color': getDynamicIconColor(item)}\"></app-svg-icon>\n }\n }\n }\n <p\n class=\"text-caption text-center text-black overflow-hidden text-ellipsis whitespace-nowrap\">{{ getDisplayString(item) }}</p>\n </div>\n }\n\n @if (showMoreButton()) {\n <span\n (click)=\"showAllItems()\"\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border border-neutral-200 text-info-500\">\n More\n </span>\n }\n\n @if (showLessButton()) {\n <span\n (click)=\"shrinkItems()\"\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border border-neutral-200 text-error-500\">\n Less\n </span>\n }\n\n @if (customActionText()) {\n <div (click)=\"customActionClicked()\"\n class=\"flex items-center rounded-lg px-3 py-3 gap-4 cursor-pointer bg-primary-500\">\n <p class=\"text-caption text-white\">{{ customActionText() }}</p>\n </div>\n }\n\n @if (state()?.success() && items().length <= 0) {\n <p class=\"text-caption text-red-700\">{{ noDataMessage() ?? 'No data found' }}</p>\n }\n\n @if ((state()?.failed()) && items().length <= 0) {\n <p\n class=\"text-caption text-red-700\">{{ (state()?.error() != null || state()?.error() != '') ? state()?.error() : noDataMessage() ?? 'No data found' }}</p>\n }\n\n @if (state()?.loading()) {\n <app-shimmer class=\"w-full\" type=\"multiline\"></app-shimmer>\n }\n </div>\n\n <div error>\n @if (formControl.errors && hasErrors) {\n <p class=\"text-caption text-red-500\">\n {{ formControl.errors | humanizeFormMessages: errorMessages() }}\n </p>\n }\n </div>\n</app-base-input>\n","import {AfterContentInit, Component, output} from '@angular/core';\nimport {\n BaseControlValueAccessorV2,\n} from \"../../base/base-control-value-accessor-v2\";\nimport {ButtonComponent} from \"../../components/button/button.component\";\nimport {TimePickerValue} from \"../time-picker/time-picker.component\";\n\n@Component({\n selector: 'app-number-input',\n standalone: true,\n imports: [\n ButtonComponent\n ],\n templateUrl: './number-input.component.html',\n styleUrl: './number-input.component.scss'\n})\nexport class NumberInputComponent extends BaseControlValueAccessorV2<TimePickerValue> implements AfterContentInit {\n valueChanged = output<number>();\n\n ngAfterContentInit(): void {\n super.initFormControl();\n }\n\n protected override onValueReady(value: TimePickerValue): void {\n // this.formValue.set(value);\n }\n\n increment() {\n // let newValue = (this.value() ?? 0) + 1;\n // this.updateValue(newValue);\n // this.valueChanged.emit(newValue);\n }\n\n private text(someType: Object) {\n\n }\n}\n","<!--<pre> {{ formValue() | json }}</pre>-->\n<app-button (click)=\"increment()\">Increment</app-button>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-phone-number-input',\n imports: [],\n templateUrl: './phone-number-input.component.html',\n styleUrl: './phone-number-input.component.scss'\n})\nexport class PhoneNumberInputComponent {\n\n}\n","","import {AfterContentInit, Component, EventEmitter, inject, input, OnInit, Output, signal} from '@angular/core';\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\n\n@Component({\n selector: 'app-radio-button',\n standalone: true,\n imports: [\n ReactiveFormsModule\n ],\n templateUrl: './radio-button.component.html',\n styleUrl: './radio-button.component.scss'\n})\nexport class RadioButtonComponent extends BaseControlValueAccessor implements OnInit, AfterContentInit {\n title = input<string | null>();\n groupName = input.required<string>();\n value = input<any | null>();\n\n id = signal<string>('');\n\n @Output()\n valueChanged = new EventEmitter<any>();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n errorMessages = input<{ [key: string]: string }>({});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n protected override onWriteValue(obj: any): void {\n\n }\n\n ngOnInit(): void {\n this.id.set(this.getId());\n }\n\n onRadioSelected($event: Event) {\n if (!this.disabled()) {\n this.markAsTouched();\n const value = ($event.target as HTMLInputElement).value;\n // this.onChange(value);\n this.valueChanged.emit(value);\n }\n }\n\n private getId(): string {\n const randomNumber = Math.floor(1000 + Math.random() * 9000);\n return `radio-button-${randomNumber.toString()}`;\n }\n}\n","<div class=\"flex items-center gap-3\">\n <label class=\"relative align-baseline flex items-center rounded-full cursor-pointer\" [for]=\"id()\">\n @if(ngControl?.name) {\n <input type=\"radio\"\n [name]=\"groupName()\"\n [value]=\"value()\"\n [attr.name]=\"groupName()\"\n [attr.value]=\"value()\"\n [formControl]=\"formControl\"\n (change)=\"onRadioSelected($event)\"\n class=\"before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-full border-2 border-neutral-600 text-neutral-900 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-primary-200 before:opacity-0 before:transition-opacity checked:border-primary-500 checked:before:bg-primary-500 hover:before:opacity-10\"\n [id]=\"id()\"/>\n } @else {\n <input type=\"radio\"\n [name]=\"groupName()\"\n [value]=\"value()\"\n [attr.name]=\"groupName()\"\n [attr.value]=\"value()\"\n [disabled]=\"formControl.disabled\"\n [checked]=\"formControl.value\"\n (change)=\"onRadioSelected($event)\"\n class=\"before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-full border-2 border-neutral-600 text-neutral-900 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-primary-200 before:opacity-0 before:transition-opacity checked:border-primary-500 checked:before:bg-primary-500 hover:before:opacity-10\"\n [id]=\"id()\"/>\n }\n\n <span\n class=\"absolute text-primary-500 transition-opacity opacity-0 pointer-events-none top-2/4 left-2/4 -translate-y-2/4 -translate-x-2/4 peer-checked:opacity-100\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-2.5 w-2.5\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <circle data-name=\"ellipse\" cx=\"8\" cy=\"8\" r=\"8\"></circle>\n </svg>\n </span>\n </label>\n @if(title()) {\n <label class=\"text-body2 cursor-pointer select-none\" [for]=\"id()\">{{ title() }}</label>\n }\n</div>\n","import {AfterContentInit, Component, EventEmitter, inject, input, Output, signal} from '@angular/core';\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {ClickOutsideDirective} from \"../../directives/click-outside.directive\";\n\n\nimport {FormControl, NgControl} from \"@angular/forms\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\n\n@Component({\n selector: 'app-single-item-picker-input',\n standalone: true,\n imports: [\n AppSvgIconComponent,\n ClickOutsideDirective,\n HumanizeFormMessagesPipe\n ],\n templateUrl: './single-item-picker-input.component.html',\n styleUrl: './single-item-picker-input.component.scss'\n})\nexport class SingleItemPickerInputComponent<T> extends BaseControlValueAccessor implements AfterContentInit {\n title = input.required<string>();\n items = input<T[]>([]);\n display = input.required<string>();\n value = input<string>();\n\n errorMessages = signal<{ [key: string]: string }>({});\n ngControl = inject(NgControl, {optional: true, self: true});\n\n isPopUpOpen = signal(false);\n\n @Output()\n valueChanged: EventEmitter<T | null> = new EventEmitter<T | null>();\n\n constructor() {\n super();\n if(this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if(formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n getProperty(item: T): any {\n if(this.display() == null || this.display() == '') {\n return item;\n }\n let object = item as any;\n return this.display().split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getPropertyId(item: T): any {\n if (!this.value()) {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n onItemClicked(item: T) {\n this.isPopUpOpen.update(p => false);\n this.markAsTouched();\n const value = this.getPropertyId(item);\n if (value == this.formControl.value) {\n this.onChange(value);\n this.valueChanged.emit(null);\n } else {\n this.onChange(value);\n this.valueChanged.emit(item);\n }\n }\n\n outsideClicked() {\n this.isPopUpOpen.update(p => false);\n }\n\n togglePopup() {\n this.isPopUpOpen.update(p => !p);\n }\n}\n","<div class=\"flex-inline relative hover:bg-neutral-50 py-2 px-4 rounded-lg select-none cursor-pointer\"\n (clickOutside)=\"outsideClicked()\">\n <div class=\"flex gap-4 items-center\" (click)=\"togglePopup()\">\n <div class=\"flex flex-col gap-2\">\n <p class=\"text-body2 text-neutral-500\">{{ title() }}</p>\n <p class=\"text-caption sm:text-body2\">{{ (formControl.value != null && formControl.value != '') ? getProperty(formControl.value) : '-' }}</p>\n </div>\n <app-svg-icon src=\"assets/icons/chevron-down.svg\" class=\"text-neutral-400\" [size]=\"12\"></app-svg-icon>\n </div>\n @if (isPopUpOpen()) {\n <div class=\"absolute z-50 mt-6 min-w-72 transform -translate-x-1/3 rounded-md bg-white shadow-2 p-3 max-h-60 overflow-y-scroll\">\n <div class=\"flex flex-col gap-2\">\n <p class=\"text-body2 text-neutral-600\">Time</p>\n <div class=\"grid grid-cols-3 w-full gap-2\">\n @for (item of items(); track item) {\n <div class=\"inline-flex justify-center items-center cursor-pointer\" (click)=\"onItemClicked(item)\">\n <p\n class=\"text-caption hover:border-primary-500 border-2 border-neutral-200 hover:border-2 p-2 rounded\">{{ getProperty(item) }}</p>\n </div>\n }\n </div>\n @if(items().length <= 0) {\n <span class=\"text-neutral-400 block px-4 py-4 text-sm select-none\" role=\"menuitem\" tabindex=\"-1\">No options available</span>\n }\n </div>\n </div>\n }\n</div>\n\n<div>\n @if (formControl.errors && hasErrors) {\n <p class=\"text-caption text-red-500\">\n {{ formControl.errors | humanizeFormMessages: errorMessages() }}\n </p>\n }\n</div>\n","import {\n AfterContentInit,\n Component,\n inject,\n input,\n output,\n signal\n} from '@angular/core';\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {NgClass, NgStyle} from \"@angular/common\";\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {State} from \"../../base/base-state\";\nimport {ShimmerComponent} from \"../../components/shimmer/shimmer.component\";\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {resolveTemplateWithObject} from '../../common-utils/template-resolver';\n\n@Component({\n selector: 'app-single-selection-field',\n standalone: true,\n imports: [\n BaseInputComponent,\n NgClass,\n ReactiveFormsModule,\n HumanizeFormMessagesPipe,\n AppSvgIconComponent,\n NgStyle,\n ShimmerComponent\n ],\n templateUrl: './single-selection-field.component.html',\n styleUrl: './single-selection-field.component.scss'\n})\nexport class SingleSelectionFieldComponent<T> extends BaseControlValueAccessor implements AfterContentInit {\n title = input<string | null>();\n items = input<T[]>([]);\n display = input<string>();\n displayTemplate = input<string | null>();\n iconSrc = input<string | null>();\n dynamicIconPath = input<string>();\n imageUrl = input<string | null>();\n dynamicImageUrlPath = input<string>();\n iconColor = input<string>();\n dynamicIconColor = input<string>();\n value = input<string>();\n noDataMessage = input<string>();\n state = input<State<any>>();\n customActionText = input<string>();\n fullWidth = input(false);\n itemWidth = input<number | null>(null);\n isItemCentered = input<boolean>(false);\n showSelectionTickMark = input<boolean>(true);\n itemPlacement = input<'start' | 'space-between'>('start');\n maximumDisplayItems = input<number | null>(null);\n\n valueChanged = output<T | null>();\n onCustomActionClicked = output<void>();\n\n\n selectedItem = signal<T | null>(null);\n\n showAll = signal(false);\n\n errorMessages = signal<{ [key: string]: string }>({});\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n getVisibleItems(): T[] {\n if (this.showAll()) return this.items();\n return this.maximumDisplayItems() !== null ? this.items().slice(0, this.maximumDisplayItems()!) : this.items();\n }\n\n showMoreButton(): boolean {\n return !this.showAll() && this.maximumDisplayItems() !== null && this.items().length > this.maximumDisplayItems()!;\n }\n\n showLessButton(): boolean {\n return this.showAll() && this.maximumDisplayItems() !== null;\n }\n\n showAllItems() {\n this.showAll.set(true);\n }\n\n shrinkItems() {\n this.showAll.set(false);\n }\n\n getDisplayString(item: T): any {\n let object = item as any;\n if(object == null) {\n return null;\n }\n\n if(this.display() != null && this.display() != '') {\n return this.display()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if(this.displayTemplate() != null && this.displayTemplate() != '') {\n return resolveTemplateWithObject(object, this.displayTemplate()!);\n }\n\n return item;\n }\n\n getPropertyId(item: T | null): any {\n if (this.value() == null || this.value() == '') {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getImageType(item: T): 'svg' | 'url' | null {\n\n if (this.iconSrc() != null && this.iconSrc() != '') {\n return 'svg';\n }\n\n if (this.dynamicIconPath() != null && this.dynamicIconPath() != '') {\n return 'svg';\n }\n\n if (this.imageUrl() != null && this.imageUrl() != '') {\n return 'url';\n }\n\n if (this.dynamicImageUrlPath() != null && this.dynamicImageUrlPath() != '') {\n return 'url';\n }\n\n return null;\n }\n\n getDynamicIcon(item: T): string | null | undefined {\n if (this.iconSrc() != null && this.iconSrc() != '') {\n return this.iconSrc();\n }\n\n if (this.dynamicIconPath() != null && this.dynamicIconPath() != '') {\n let object = item as any;\n return this.dynamicIconPath()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if (this.imageUrl() != null && this.imageUrl() != '') {\n return this.imageUrl();\n }\n\n if (this.dynamicImageUrlPath() != null && this.dynamicImageUrlPath() != '') {\n let object = item as any;\n return this.dynamicImageUrlPath()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n return null;\n }\n\n getDynamicIconColor(item: T): string | null | undefined {\n if (this.iconColor()) {\n return this.iconColor();\n }\n\n if (this.dynamicIconColor() == null || this.dynamicIconColor() == '') {\n return this.iconColor();\n }\n let object = item as any;\n const color = this.dynamicIconColor()!.split('.').reduce((acc, part) => acc && acc[part], object);\n return color;\n }\n\n onItemClicked(item: T) {\n this.markAsTouched();\n const value = this.getPropertyId(item);\n this.selectedItem.set(item);\n if (value == this.formControl.value) {\n this.onChange(null);\n this.valueChanged.emit(null);\n } else {\n this.onChange(value);\n this.valueChanged.emit(value);\n }\n }\n\n customActionClicked() {\n this.onCustomActionClicked.emit();\n }\n\n handleKeydown(event: KeyboardEvent, item: T) {\n switch (event.key) {\n case 'Enter':\n this.onItemClicked(item);\n event.preventDefault();\n break;\n }\n }\n}\n","<app-base-input [title]=\"title()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"flex flex-wrap gap-3\"\n [ngClass]=\"[\n itemPlacement() == 'start' ? 'justify-start' : '',\n itemPlacement() == 'space-between' ? 'justify-between' : '']\">\n\n @for (item of getVisibleItems(); track item) {\n <div\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border-2 border-neutral-300\"\n tabindex=\"0\"\n (keydown)=\"handleKeydown($event, item)\"\n [ngStyle]=\"{ 'width': itemWidth() ? itemWidth() + 'px' : null }\"\n (click)=\"onItemClicked(item)\"\n [ngClass]=\"{\n 'border-primary-600': getPropertyId(item) == formControl.value || selectedItem() == item,\n 'justify-center': isItemCentered()\n }\">\n\n @if ((getPropertyId(item) == formControl.value || selectedItem() == item) && showSelectionTickMark()) {\n <div class=\"absolute -top-[8px] -right-[8px]\">\n <svg class=\"h-[18px] w-[18px] text-primary-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z\"\n fill=\"white\"/>\n <path\n d=\"M10 17L5 12L6.41 10.58L10 14.17L17.59 6.58L19 8M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n }\n\n @if (getDynamicIcon(item)) {\n @switch (getImageType(item)) {\n @case ('url') {\n <img class=\"object-contain\" height=\"20px\" width=\"20px\" [src]=\"getDynamicIcon(item)\" alt=\"\">\n }\n @case ('svg') {\n <app-svg-icon [src]=\"getDynamicIcon(item)!\" [size]=\"18\"\n [ngStyle]=\"{'color': getDynamicIconColor(item)}\"></app-svg-icon>\n }\n }\n }\n <p\n class=\"w-full text-caption text-center text-black overflow-hidden text-ellipsis whitespace-nowrap\">{{ getDisplayString(item) }}</p>\n <ng-content select=\"[post]\"></ng-content>\n </div>\n }\n\n @if (showMoreButton()) {\n <span\n (click)=\"showAllItems()\"\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border border-neutral-200 text-info-500\">\n More\n </span>\n }\n\n @if (showLessButton()) {\n <span\n (click)=\"shrinkItems()\"\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border border-neutral-200 text-error-500\">\n Less\n </span>\n }\n\n @if (customActionText()) {\n <div (click)=\"customActionClicked()\"\n class=\"flex items-center rounded-lg px-3 py-3 gap-4 cursor-pointer bg-primary-500\">\n <p class=\"text-caption text-white\">{{ customActionText() }}</p>\n </div>\n }\n\n @if ((state()?.success()) && items().length <= 0) {\n <p class=\"text-caption text-red-700\">{{ noDataMessage() ?? 'No data found' }}</p>\n }\n\n @if ((state()?.error()) && items().length <= 0) {\n <p\n class=\"text-caption text-red-700\">{{ (state()?.error() != null || state()?.error() != '') ? state()?.error() : noDataMessage() ?? 'No data found' }}</p>\n }\n\n @if (state()?.loading()) {\n <app-shimmer class=\"w-full\" type=\"multiline\"></app-shimmer>\n }\n </div>\n\n <div error>\n @if (formControl.errors && hasErrors) {\n <p class=\"text-caption text-red-500\">\n {{ formControl.errors | humanizeFormMessages: errorMessages() }}\n </p>\n }\n </div>\n</app-base-input>\n\n","import {\n AfterContentInit,\n Component,\n EventEmitter,\n inject,\n input,\n OnInit,\n Output,\n signal\n} from '@angular/core';\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\n\n@Component({\n selector: 'app-switch',\n standalone: true,\n imports: [\n ReactiveFormsModule\n ],\n templateUrl: './switch.component.html',\n styleUrl: './switch.component.scss'\n})\nexport class SwitchComponent extends BaseControlValueAccessor implements OnInit, AfterContentInit {\n title = input<string | null>();\n\n id = signal<string>('');\n\n @Output()\n valueChanged = new EventEmitter<boolean>();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n errorMessages = input<{ [key: string]: string }>({});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n ngOnInit(): void {\n this.id.set(this.getId());\n }\n\n protected override onWriteValue(value: any): void {\n\n }\n\n onSwitchSelected($event: Event) {\n if (!this.disabled()) {\n this.markAsTouched();\n const value = ($event.target as HTMLInputElement).checked;\n this.onChange(value);\n this.valueChanged.emit(value);\n }\n }\n\n private getId(): string {\n const randomNumber = Math.floor(1000 + Math.random() * 9000);\n return `checkbox-${randomNumber.toString()}`;\n }\n}\n","<!--<label for=\"toggle\" class=\"flex items-center cursor-pointer\">-->\n<!-- <div class=\"relative\">-->\n<!-- <input id=\"toggle\" type=\"checkbox\" class=\"sr-only peer\" [checked]=\"checked()\" (change)=\"toggleSwitch()\">-->\n<!-- <div class=\"w-16 h-8 bg-gray-100 rounded-full shadow-inner\"></div>-->\n<!-- <span-->\n<!-- class=\"absolute left-1 top-1 w-2/5 h-4/5 bg-primary-500 rounded-full peer-checked:bg-primary-500 peer-checked:left-8 transition-all duration-300\"></span>-->\n<!-- </div>-->\n<!-- <div class=\"ml-3 text-gray-700 font-medium\">Toggle</div>-->\n<!--</label>-->\n\n<!--<div class=\"flex items-center cursor-pointer\">-->\n<!-- <label id=\"id()\" class=\"flex items-center m-0\">-->\n<!-- <div class=\"relative\">-->\n<!-- <input [id]=\"id()\" type=\"checkbox\" class=\"sr-only peer\"-->\n<!-- [checked]=\"formControl.value\"-->\n<!-- (change)=\"onSwitchSelected($event)\">-->\n<!-- <div class=\"w-16 h-8 bg-gray-100 peer-checked:bg-primary-50 rounded-full shadow-inner\"></div>-->\n<!-- <span-->\n<!-- class=\"w-2/5 h-4/5 bg-primary-500 absolute rounded-full left-1 top-1 peer-checked:bg-primary-500 transition-all duration-300\"-->\n<!-- [ngClass]=\"formControl.value ? 'translate-x-7' : 'translate-x-0'\">-->\n<!-- </span>-->\n<!-- </div>-->\n<!-- @if (title()) {-->\n<!-- <label class=\"text-body2 cursor-pointer select-none\" [for]=\"id()\">{{ title() }}</label>-->\n<!-- }-->\n<!-- </label>-->\n<!--</div>-->\n\n\n<div class=\"flex items-center\">\n <label [for]=\"id()\" class=\"flex m-0 items-center cursor-pointer\">\n <!-- Toggle Switch -->\n <div class=\"relative\">\n <input type=\"checkbox\" [id]=\"id()\" [name]=\"id()\"\n class=\"sr-only\"\n [disabled]=\"formControl.disabled\"\n [checked]=\"formControl.value\"\n (change)=\"onSwitchSelected($event)\"/>\n <div class=\"toggle-bg peer-checked:bg-primary-500\">\n <div class=\"dot\">\n </div>\n </div>\n </div>\n @if (title()) {\n <span class=\"toggle-label text-sm text-gray-700\">{{ title() }}</span>\n }\n </label>\n</div>\n","import {AfterContentInit, Component, inject, input, output} from '@angular/core';\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\n\n@Component({\n selector: 'app-text-area-input',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n HumanizeFormMessagesPipe,\n BaseInputComponent\n ],\n templateUrl: './text-area-input.component.html',\n styleUrl: './text-area-input.component.scss'\n})\nexport class TextAreaInputComponent extends BaseControlValueAccessor implements AfterContentInit {\n appearance = input<'fill' | 'outline'>('outline');\n type = input<'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url'>('text');\n viewType = input<'text' | 'text-area'>('text');\n label = input.required<string>();\n fullWidth = input<boolean>(true);\n placeholder = input<string>('');\n rows = input<number>(4)\n errorMessages = input<{ [key: string]: string }>({});\n showErrorSpace = input<boolean>(false);\n\n changeValue = output<any>();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n super();\n if(this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if(formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n onValueChange(event: any) {\n const target = event.target as HTMLInputElement;\n this.onChange(target.value);\n this.changeValue.emit(target.value);\n }\n\n protected onWriteValue(obj: any): void {\n }\n}\n","<app-base-input [title]=\"label()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"relative flex items-center w-full text-neutral-400 bg-white shadow-1 rounded-md\">\n <textarea\n class=\"w-full p-2 placeholder-neutral-400 text-black rounded-md border-none outline-none focus:border-none ring-1 ring-neutral-300 focus:ring-primary-500 focus:ring-2 transition duration-300\"\n [formControl]=\"formControl\"\n\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onValueChange($event)\">\n </textarea>\n </div>\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import {\n AfterContentInit,\n Component, inject, input,\n output,\n signal\n} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\nimport {CheckboxComponent} from \"../checkbox/checkbox.component\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessorV2} from \"../../base/base-control-value-accessor-v2\";\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {NgxMaskDirective} from \"ngx-mask\";\nimport {Overlay} from \"@angular/cdk/overlay\";\nimport {CdkPortal} from \"@angular/cdk/portal\";\n\n@Component({\n selector: 'app-time-picker',\n standalone: true,\n imports: [\n NgClass,\n FormsModule,\n BaseInputComponent,\n HumanizeFormMessagesPipe,\n NgxMaskDirective,\n ReactiveFormsModule,\n CheckboxComponent,\n CdkPortal,\n AppSvgIconComponent\n ],\n templateUrl: './time-picker.component.html',\n styleUrl: './time-picker.component.scss'\n})\nexport class TimePickerComponent extends BaseControlValueAccessorV2<TimePickerValue> implements AfterContentInit {\n\n overlay = inject(Overlay);\n\n iconSrc = input<string | null>();\n fullWidth = input<boolean>(false);\n showErrorSpace = input<boolean>(false);\n showTimePickerIcon = input<boolean>(true);\n\n valueChanged = output<TimePickerValueEvent>();\n\n scrollStrategy = this.overlay.scrollStrategies.block();\n\n\n isOpen = signal(false);\n errorMessages = signal<{ [key: string]: string }>({});\n enableApplyActions = signal<boolean>(false);\n hours = signal<number>(12);\n minutes = signal<number>(0);\n period = signal<'AM' | 'PM' | null>('AM');\n is24HourFormat = signal<boolean>(false);\n isFocused = signal(false);\n\n handleHourUpdate = false;\n previousValidHours: number = 12;\n previousValidMinutes: number = 0;\n\n protected override onValueReady(value: TimePickerValue): void {\n if (value) {\n let hours = value.hours;\n let minutes = value.minutes;\n\n if (hours < 0 || hours > 23) {\n hours = 12;\n }\n\n if (minutes < 0 || minutes > 59) {\n minutes = 0;\n }\n\n this.hours.set(hours);\n this.minutes.set(minutes);\n this.is24HourFormat.set(false);\n this.period.set('AM');\n }\n }\n\n ngAfterContentInit(): void {\n super.initFormControl();\n }\n\n onFocus() {\n this.isFocused.set(true);\n }\n\n onBlur() {\n this.onTouched();\n this.isFocused.set(false);\n }\n\n getClass() {\n let cls = '';\n if (this.iconSrc()) {\n cls = cls + 'pr-3 pl-10';\n } else {\n cls = cls + 'px-3';\n }\n\n if (this.fullWidth()) {\n cls = cls + ' ' + 'w-full';\n }\n\n return cls;\n }\n\n\n onHourUpClicked() {\n if (this.is24HourFormat()) {\n this.hours.update(prev => (prev === 23 ? 0 : prev + 1));\n } else {\n this.hours.update(prev => (prev === 12 ? 1 : prev + 1));\n }\n this.valueUpdated();\n }\n\n onHourDownClicked() {\n if (this.is24HourFormat()) {\n this.hours.update(prev => (prev === 0 ? 23 : prev - 1));\n } else {\n this.hours.update(prev => (prev === 1 ? 12 : prev - 1));\n }\n this.valueUpdated();\n }\n\n onMinuteUpClicked() {\n if (this.minutes() === 59) {\n this.minutes.set(0);\n if (this.handleHourUpdate) {\n this.onHourUpClicked();\n }\n } else {\n this.minutes.update(prev => prev + 1);\n }\n this.valueUpdated();\n }\n\n onMinuteDownClicked() {\n if (this.minutes() === 0) {\n this.minutes.set(59);\n if (this.handleHourUpdate) {\n this.onHourDownClicked();\n }\n } else {\n this.minutes.update(prev => prev - 1);\n }\n this.valueUpdated();\n }\n\n togglePeriod() {\n if (!this.is24HourFormat()) {\n this.period.update(prev => (prev === 'AM' ? 'PM' : 'AM'));\n }\n }\n\n toggle24HourFormat(isChecked: boolean) {\n this.is24HourFormat.set(isChecked);\n if (this.is24HourFormat()) {\n if (this.period() === 'PM' && this.hours() !== 12) {\n this.hours.set(this.hours() + 12);\n } else if (this.period() === 'AM' && this.hours() === 12) {\n this.hours.set(0);\n }\n this.period.set(null);\n } else {\n if (this.hours() >= 12) {\n this.period.set('PM');\n this.hours.set(this.hours() === 12 ? 12 : this.hours() - 12);\n } else {\n this.period.set('AM');\n this.hours.set(this.hours() === 0 ? 12 : this.hours());\n }\n }\n this.previousValidHours = this.hours();\n this.previousValidMinutes = this.minutes();\n }\n\n validateHours($event: FocusEvent) {\n const inputElement = $event.target as HTMLInputElement;\n const inputHours = parseInt(inputElement.value, 10);\n\n if (this.is24HourFormat()) {\n if (inputHours >= 0 && inputHours <= 23) {\n this.hours.set(inputHours);\n this.previousValidHours = inputHours;\n this.valueUpdated();\n } else {\n this.hours.set(this.previousValidHours);\n }\n } else {\n if (inputHours >= 1 && inputHours <= 12) {\n this.hours.set(inputHours);\n this.previousValidHours = inputHours;\n this.valueUpdated();\n } else {\n this.hours.set(this.previousValidHours);\n }\n }\n inputElement.value = this.getFormattedHours();\n }\n\n validateMinutes($event: FocusEvent) {\n const inputElement = $event.target as HTMLInputElement;\n const inputMinutes = parseInt(inputElement.value, 10);\n if (inputMinutes >= 0 && inputMinutes <= 59) {\n this.minutes.set(inputMinutes);\n this.previousValidMinutes = inputMinutes;\n this.valueUpdated();\n } else {\n this.minutes.set(this.previousValidMinutes);\n }\n inputElement.value = this.getFormattedMinutes();\n }\n\n getFormattedHours(): string {\n return this.hours() < 10 ? `0${this.hours()}` : `${this.hours()}`;\n }\n\n getFormattedMinutes(): string {\n return this.minutes() < 10 ? `0${this.minutes()}` : `${this.minutes()}`;\n }\n\n valueUpdated() {\n let value = {\n hours12F: this.hours(),\n minutes12F: this.minutes(),\n hours24F: this.is24HourFormat() ? this.hours() : this.period() === 'PM' ? this.hours() + 12 : this.hours(),\n minutes24F: this.minutes(),\n period: this.is24HourFormat() ? null : this.period()\n };\n this.onChange(value);\n this.valueChanged.emit(value);\n }\n\n onTimePickerIconClick() {\n this.isOpen.update(prev => !prev);\n }\n\n onClickOutside() {\n this.isOpen.set(false);\n }\n}\n\nexport interface TimePickerValue {\n hours: number;\n minutes: number;\n}\n\nexport interface TimePickerValueEvent {\n hours12F: number;\n minutes12F: number;\n hours24F: number;\n minutes24F: number;\n period: 'AM' | 'PM' | null;\n}\n","<app-base-input>\n <div input class=\"relative flex items-center w-full text-neutral-400 bg-white shadow-1 rounded-md\">\n @if (iconSrc()) {\n <app-svg-icon [size]=\"18\" [src]=\"iconSrc()!\"\n class=\"absolute pointer-events-none ml-3 text-neutral-400\"></app-svg-icon>\n }\n\n\n <!-- <p>{{ formControl.getError('required') ? placeholder + ' ' : placeholder }}</p>-->\n\n <input\n [mask]=\"'00:00'\"\n [showMaskTyped]=\"isFocused()\"\n class=\"h-[46px] placeholder-neutral-400 text-black rounded-md border-none outline-none focus:border-none ring-1 ring-neutral-300 focus:ring-primary-500 focus:ring-2 transition-all duration-300\"\n [class.text-neutral-400]=\"formControl.disabled\"\n [class.disabled-placeholder]=\"formControl.disabled\"\n [formControl]=\"formControl\"\n (focus)=\"onFocus()\"\n [ngClass]=\"getClass()\"\n [placeholder]=\"'HH:MM'\"\n (blur)=\"onBlur()\">\n\n\n @if (showTimePickerIcon()) {\n <div #timePickerIcon (click)=\"onTimePickerIconClick()\" class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full\">\n\n <svg class=\"w-[18px] h-[18px] text-neutral-500\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M12 20C16.4 20 20 16.4 20 12C20 7.6 16.4 4 12 4C7.6 4 4 7.6 4 12C4 16.4 7.6 20 12 20ZM12 2C17.5 2 22 6.5 22 12C22 17.5 17.5 22 12 22C6.5 22 2 17.5 2 12C2 6.5 6.5 2 12 2ZM17 13.9L16.3 15.2L11 12.3V7H12.5V11.4L17 13.9Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n\n <ng-template cdkPortal>\n\n </ng-template>\n\n<!-- <ng-template cdkConnectedOverlay-->\n<!-- [cdkConnectedOverlayOrigin]=\"timePickerIcon\"-->\n<!-- [cdkConnectedOverlayOpen]=\"isOpen()\"-->\n<!-- (overlayOutsideClick)=\"onClickOutside()\"-->\n<!-- [cdkConnectedOverlayBackdropClass]=\"['bg-black', 'bg-opacity-20']\"-->\n<!-- [cdkConnectedOverlayPositions]=\"[-->\n<!-- {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},-->\n<!-- {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}-->\n<!-- ]\"-->\n<!-- [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"-->\n<!-- [cdkConnectedOverlayOffsetY]=\"10\">-->\n<!-- </ng-template>-->\n </div>\n\n\n</app-base-input>\n\n<div class=\"flex flex-col gap-3\">\n <div class=\"flex items-center\">\n <app-checkbox title=\"24H\" (valueChanged)=\"toggle24HourFormat($event)\"></app-checkbox>\n </div>\n\n <div class=\"flex items-center gap-6\">\n <!-- Hour Controls -->\n <div class=\"flex flex-col items-center gap-2\">\n <div (click)=\"onHourUpClicked()\" class=\"p-2 rounded-full text-neutral-600 hover:bg-neutral-100 transition-all duration-300\">\n <svg class=\"size-[24px] cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7.41 15.41L12 10.83L16.59 15.41L18 14L12 8L6 14L7.41 15.41Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <input class=\"text-center text-body2 border-none outline-none appearance-none w-[30px] select-none\"\n [value]=\"getFormattedHours()\"\n (blur)=\"validateHours($event)\"\n type=\"number\">\n\n <div (click)=\"onHourDownClicked()\" class=\"p-2 rounded-full text-neutral-600 hover:bg-neutral-100 transition-all duration-300\">\n <svg class=\"size-[24px] cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7.41 8.58L12 13.17L16.59 8.58L18 10L12 16L6 10L7.41 8.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n\n <span class=\"text-body1 select-none\">:</span>\n\n <!-- Minute Controls -->\n <div class=\"flex flex-col items-center gap-2\">\n <div (click)=\"onMinuteUpClicked()\" class=\"p-2 rounded-full text-neutral-600 hover:bg-neutral-100 transition-all duration-300\">\n <svg class=\"size-[24px] cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7.41 15.41L12 10.83L16.59 15.41L18 14L12 8L6 14L7.41 15.41Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <input class=\"text-center text-body2 border-none outline-none appearance-none w-[30px] select-none\"\n [value]=\"getFormattedMinutes()\"\n (blur)=\"validateMinutes($event)\"\n type=\"number\">\n\n <div (click)=\"onMinuteDownClicked()\" class=\"p-2 rounded-full text-neutral-600 hover:bg-neutral-100 transition-all duration-300\">\n <svg class=\"size-[24px] cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7.41 8.58L12 13.17L16.59 8.58L18 10L12 16L6 10L7.41 8.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n\n <!-- AM/PM Toggle (Hide when 24-hour is selected) -->\n @if(!is24HourFormat()) {\n <div class=\"flex gap-3\">\n <span class=\"px-2 py-1 rounded-md text-blue-500 text-caption cursor-pointer hover:bg-neutral-100 select-none\"\n [ngClass]=\"period() === 'AM' ? 'bg-primary-500 hover:bg-primary-500 text-white' : ''\"\n (click)=\"togglePeriod()\">AM</span>\n <span class=\"px-2 py-1 rounded-md text-blue-500 text-caption cursor-pointer hover:bg-neutral-100 select-none\"\n [ngClass]=\"period() === 'PM' ? 'bg-primary-500 hover:bg-primary-500 text-white' : ''\"\n (click)=\"togglePeriod()\">PM</span>\n </div>\n }\n </div>\n\n @if(enableApplyActions()) {\n <div class=\"flex items-center justify-between\">\n <button class=\"py-2 text-primary-500 rounded-md transition-all duration-300\">Cancel</button>\n <button class=\"px-4 py-2 text-white bg-primary-500 rounded-md hover:bg-primary-600 transition-all duration-300\">Apply</button>\n </div>\n }\n</div>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","export class DateUtils {\n convertToMMDDYYYY(dateString: string | undefined | null): string | null {\n if (!dateString) {\n return null;\n }\n\n const date = new Date(dateString);\n\n // Check if the date is valid\n if (isNaN(date.getTime())) {\n return null;\n }\n\n const month = ('0' + (date.getMonth() + 1)).slice(-2);\n const day = ('0' + date.getDate()).slice(-2);\n const year = date.getFullYear();\n\n return `${month}/${day}/${year}`;\n }\n\n convertTohhmm(dateString: string | undefined | null): string | null {\n if (!dateString) {\n return null;\n }\n\n const date = new Date(dateString);\n\n // Check if the date is valid\n if (isNaN(date.getTime())) {\n return null;\n }\n\n const hours = ('0' + date.getHours()).slice(-2);\n const minutes = ('0' + date.getMinutes()).slice(-2);\n\n return `${hours}:${minutes}`;\n }\n\n convertToDateTimeString(date: string, time?: string): string | undefined {\n if (!date) {\n return undefined;\n }\n const [month, day, year] = date.split('/').map(Number); // mm/dd/yyyy format\n\n const [hours, minutes] = time ? time.split(':').map(Number) : [0, 0]; // 0 hours, 0 minutes (12:00 AM)\n const localDate = new Date(year, month - 1, day, hours, minutes);\n\n return localDate.toISOString();\n }\n\n convertToMMYYYYString(mmyyyy: string): string | null {\n if (!mmyyyy || mmyyyy.length !== 7) {\n return null;\n }\n\n const [month, year] = mmyyyy.split('/');\n\n return `${month}/${year}`;\n\n }\n\n getCurrentDateMMDDYYYY() {\n let today = new Date();\n let currentDate = this.convertToMMDDYYYY(today.toDateString());\n return currentDate;\n }\n}\n","import { FormGroup } from '@angular/forms';\n\nexport function printInvalidFields(formGroup: FormGroup): void {\n Object.keys(formGroup.controls).forEach(field => {\n const control = formGroup.get(field);\n\n if (control && control.invalid) {\n console.log(`Field: ${field}`);\n\n const errors = control.errors;\n if (errors) {\n Object.keys(errors).forEach(errorKey => {\n console.log(` - Validation Error: ${errorKey}, Value: ${errors[errorKey]}`);\n });\n }\n }\n\n // Check for nested FormGroup\n if (control instanceof FormGroup) {\n printInvalidFields(control);\n }\n });\n}\n","import {ElementRef} from \"@angular/core\";\n\nexport function openLink(link: string, openInNewTab: boolean = false, document: Document, elementRef: ElementRef) {\n const anchorElement = document.createElement('a');\n anchorElement.setAttribute('href', link);\n if(openInNewTab) {\n anchorElement.setAttribute('target', '_blank');\n }\n anchorElement.style.display = 'none';\n elementRef.nativeElement.appendChild(anchorElement);\n anchorElement.click();\n elementRef.nativeElement.removeChild(anchorElement);\n}\n","export interface JwtDecodeOptions {\n header?: boolean;\n}\n\nexport interface JwtHeader {\n typ?: string;\n alg?: string;\n kid?: string;\n}\n\nexport interface JwtPayload {\n iss?: string;\n sub?: string;\n aud?: string[] | string;\n exp?: number;\n nbf?: number;\n iat?: number;\n jti?: string;\n}\n\nexport class InvalidTokenError extends Error {}\n\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\n\nfunction b64DecodeUnicode(str: string) {\n return decodeURIComponent(\n atob(str).replace(/(.)/g, (m, p) => {\n let code = (p as string).charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }),\n );\n}\n\nfunction base64UrlDecode(str: string) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n\n try {\n return b64DecodeUnicode(output);\n } catch (err) {\n return atob(output);\n }\n}\n\nexport function jwtDecode<T = JwtHeader>(\n token: string,\n options: JwtDecodeOptions & { header: true },\n): T;\nexport function jwtDecode<T = JwtPayload>(token: string, options?: JwtDecodeOptions): T;\nexport function jwtDecode<T = JwtHeader | JwtPayload>(\n token: string,\n options?: JwtDecodeOptions,\n): T {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n\n options ||= {};\n\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n\n let decoded: string;\n try {\n decoded = base64UrlDecode(part);\n } catch (e) {\n throw new InvalidTokenError(\n `Invalid token specified: invalid base64 for part #${pos + 1} (${(e as Error).message})`,\n );\n }\n\n try {\n return JSON.parse(decoded) as T;\n } catch (e) {\n throw new InvalidTokenError(\n `Invalid token specified: invalid json for part #${pos + 1} (${(e as Error).message})`,\n );\n }\n}\n","export function arrayToCSV(arr: (string | null | undefined)[]): string {\n const filteredArr = arr.filter((item) => item !== null && item !== undefined && item !== '');\n return filteredArr.join(', ');\n}\n\nexport function arrayToSpaceSeparator(arr: (string | null | undefined)[]): string {\n const filteredArr = arr.filter((item) => item !== null && item !== undefined && item !== '');\n return filteredArr.join(' ');\n}\n\nexport function arrayToSeparator(arr: (string | null | undefined)[], separator: string = ','): string {\n const filteredArr = arr.filter((item) => item !== null && item !== undefined && item !== '');\n return filteredArr.join(`${separator}`);\n}\n\nexport function toSentenceCase(value: string): string {\n return value\n .replace(/([A-Z])/g, ' $1') // Insert spaces before capital letters\n .trim() // Remove leading spaces\n .replace(/^./, (str) => str.toUpperCase()); // Capitalize the first letter\n}\n\n","import { AbstractControl, ValidationErrors, AsyncValidatorFn } from '@angular/forms';\nimport { of } from 'rxjs';\nimport { delay, map } from 'rxjs/operators';\n\nexport function mmddyyyyDateValidatorAsync(): AsyncValidatorFn {\n return (control: AbstractControl): any => {\n const value: string = control.value;\n\n if (!value) {\n return of(null); // Don't validate if the input is empty.\n }\n\n // Regular expressions for mm/dd/yyyy and mmddyyyy formats\n const regexWithSlashes = /^(0[1-9]|1[0-2])\\/(0[1-9]|[12][0-9]|3[01])\\/\\d{4}$/;\n const regexWithoutSlashes = /^(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\\d{4}$/;\n\n // Simulate async validation with delay\n return of(value).pipe(\n delay(500), // Simulate a server call or async operation\n map(() => {\n // Validate mm/dd/yyyy format\n if (regexWithSlashes.test(value)) {\n const [month, day, year] = value.split('/').map(Number);\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n return { invalidDate: 'Invalid date. Make sure the day, month, and year are correct.' };\n }\n }\n // Validate mmddyyyy format\n else if (regexWithoutSlashes.test(value)) {\n const month = Number(value.substring(0, 2));\n const day = Number(value.substring(2, 4));\n const year = Number(value.substring(4, 8));\n\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n return { invalidDate: 'Invalid date. Make sure the day, month, and year are correct.' };\n }\n }\n else {\n return { invalidDate: 'Invalid date format. Use mm/dd/yyyy or mmddyyyy.' };\n }\n\n return null; // If valid, return null\n })\n );\n };\n}\n","import {inject, Injectable} from '@angular/core';\nimport {NGL_CONFIG} from './ngl-config.token';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NglService {\n\n private config = inject(NGL_CONFIG);\n\n constructor() {\n }\n\n getBaseUrl() {\n return this.config.baseApiUrl;\n }\n}\n","import {Provider} from '@angular/core';\nimport {NGL_CONFIG, NglConfig} from './ngl-config.token';\n\nexport function provideNglConfig(config: NglConfig): Provider {\n return {\n provide: NGL_CONFIG,\n useValue: config\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.ToastService","filter"],"mappings":"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"}
1
+ {"version":3,"file":"vallift-ngl.mjs","sources":["../../../projects/ngl/src/ngl-config.token.ts","../../../projects/ngl/src/base/base-api.service.ts","../../../projects/ngl/src/base/base-control-value-accessor.ts","../../../projects/ngl/src/base/base-control-value-accessor-v2.ts","../../../projects/ngl/src/base/base-control-value-accessor-v3.ts","../../../projects/ngl/src/base/base-state.ts","../../../projects/ngl/src/base/base-pagination-state.ts","../../../projects/ngl/src/components/spinner/spinner.component.ts","../../../projects/ngl/src/components/spinner/spinner.component.html","../../../projects/ngl/src/components/app-svg-icon/app-svg-icon.component.ts","../../../projects/ngl/src/components/app-svg-icon/app-svg-icon.component.html","../../../projects/ngl/src/components/button/button.component.ts","../../../projects/ngl/src/components/button/button.component.html","../../../projects/ngl/src/components/overlay/alert-dialog/alert-dialog.component.ts","../../../projects/ngl/src/components/overlay/alert-dialog/alert-dialog.component.html","../../../projects/ngl/src/components/overlay/overlay.service.ts","../../../projects/ngl/src/base/unsaved-aware.directive.ts","../../../projects/ngl/src/common-utils/template-resolver.ts","../../../projects/ngl/src/components/no-data/no-data.component.ts","../../../projects/ngl/src/components/no-data/no-data.component.html","../../../projects/ngl/src/components/no-data-table/no-data-table.component.ts","../../../projects/ngl/src/components/no-data-table/no-data-table.component.html","../../../projects/ngl/src/components/shimmer/shimmer.component.ts","../../../projects/ngl/src/components/shimmer/shimmer.component.html","../../../projects/ngl/src/components/pagination/pagination.component.ts","../../../projects/ngl/src/components/pagination/pagination.component.html","../../../projects/ngl/src/components/_base/base-table/base-table.component.ts","../../../projects/ngl/src/components/_base/base-table/base-table.component.html","../../../projects/ngl/src/components/_base/base-table/sortable-table.directive.ts","../../../projects/ngl/src/components/_base/base-table/resizable-column.directive.ts","../../../projects/ngl/src/components/_base/base-table/table-resizable-columns.directive.ts","../../../projects/ngl/src/components/breadcrumb/breadcrumb.component.ts","../../../projects/ngl/src/components/breadcrumb/breadcrumb.component.html","../../../projects/ngl/src/components/close-button/close-button.component.ts","../../../projects/ngl/src/components/close-button/close-button.component.html","../../../projects/ngl/src/components/context-menu/context-menu.component.ts","../../../projects/ngl/src/components/context-menu/context-menu.component.html","../../../projects/ngl/src/components/context-menu-button/overlay-context-menu/overlay-context-menu.component.ts","../../../projects/ngl/src/components/context-menu-button/overlay-context-menu/overlay-context-menu.component.html","../../../projects/ngl/src/components/context-menu-button/context-menu-button.component.ts","../../../projects/ngl/src/components/context-menu-button/context-menu-button.component.html","../../../projects/ngl/src/components/context-menu-icon/context-menu-icon.component.ts","../../../projects/ngl/src/components/context-menu-icon/context-menu-icon.component.html","../../../projects/ngl/src/components/data-table/table-custom-component/table-custom.component.ts","../../../projects/ngl/src/components/data-table/table-custom-component/table-custom.component.html","../../../projects/ngl/src/components/status-badge/status-badge.component.ts","../../../projects/ngl/src/components/status-badge/status-badge.component.html","../../../projects/ngl/src/inputs/checkbox/checkbox.component.ts","../../../projects/ngl/src/inputs/checkbox/checkbox.component.html","../../../projects/ngl/src/inputs/form-errors.ts","../../../projects/ngl/src/inputs/humanize-form-messages.pipe.ts","../../../projects/ngl/src/inputs/_base/base-input/base-input.component.ts","../../../projects/ngl/src/inputs/_base/base-input/base-input.component.html","../../../projects/ngl/src/inputs/text-input/text-input.component.ts","../../../projects/ngl/src/inputs/text-input/text-input.component.html","../../../projects/ngl/src/components/text-button-small/text-button-small.component.ts","../../../projects/ngl/src/components/text-button-small/text-button-small.component.html","../../../projects/ngl/src/components/dynamic-renderer/dynamic-renderer.component.ts","../../../projects/ngl/src/components/dynamic-renderer/dynamic-renderer.component.html","../../../projects/ngl/src/components/data-table/data-table.component.ts","../../../projects/ngl/src/components/data-table/data-table.component.html","../../../projects/ngl/src/components/env-banner/env-banner.component.ts","../../../projects/ngl/src/components/env-banner/env-banner.component.html","../../../projects/ngl/src/components/loader/loader.service.ts","../../../projects/ngl/src/components/loader/loader.component.ts","../../../projects/ngl/src/components/loader/loader.component.html","../../../projects/ngl/src/components/network-image/network-image.component.ts","../../../projects/ngl/src/components/network-image/network-image.component.html","../../../projects/ngl/src/components/overlay/base-overlay/base-overlay.component.ts","../../../projects/ngl/src/components/overlay/base-overlay/base-overlay.component.html","../../../projects/ngl/src/components/overlay/overlay-wizard-utils.ts","../../../projects/ngl/src/components/responsive-helper/responsive-helper.component.ts","../../../projects/ngl/src/components/responsive-helper/responsive-helper.component.html","../../../projects/ngl/src/components/svg-url-icon/svg-url-icon.component.ts","../../../projects/ngl/src/components/svg-url-icon/svg-url-icon.component.html","../../../projects/ngl/src/components/toast/models/toast-type.ts","../../../projects/ngl/src/components/toast/toast.service.ts","../../../projects/ngl/src/components/toast/components/toast/toast-close-button/toast-close-button.component.ts","../../../projects/ngl/src/components/toast/components/toast/toast-close-button/toast-close-button.component.html","../../../projects/ngl/src/components/toast/components/toast/toast.component.ts","../../../projects/ngl/src/components/toast/components/toast/toast.component.html","../../../projects/ngl/src/components/toast/components/toaster/toaster.component.ts","../../../projects/ngl/src/components/toast/components/toaster/toaster.component.html","../../../projects/ngl/src/components/tooltip/tooltip.enums.ts","../../../projects/ngl/src/components/tooltip/tooltip.component.ts","../../../projects/ngl/src/components/tooltip/tooltip.component.html","../../../projects/ngl/src/directives/click-outside.directive.ts","../../../projects/ngl/src/directives/invalid-control-scroll.directive.ts","../../../projects/ngl/src/directives/invalid-control-scroll-container.directive.ts","../../../projects/ngl/src/inputs/_utils/base-input-utils.ts","../../../projects/ngl/src/inputs/_utils/form-validation-utils.ts","../../../projects/ngl/src/inputs/app-error/app-error.component.ts","../../../projects/ngl/src/inputs/app-error/app-error.component.html","../../../projects/ngl/src/inputs/date-picker/date-picker.component.ts","../../../projects/ngl/src/inputs/date-picker/date-picker.component.html","../../../projects/ngl/src/inputs/date-input/date-picker-overlay/date-picker-overlay.component.ts","../../../projects/ngl/src/inputs/date-input/date-picker-overlay/date-picker-overlay.component.html","../../../projects/ngl/src/validators/only-past-date-validator.ts","../../../projects/ngl/src/validators/only-future-date-validator.ts","../../../projects/ngl/src/inputs/date-input/date-input.component.ts","../../../projects/ngl/src/inputs/date-input/date-input.component.html","../../../projects/ngl/src/inputs/date-range-picker/date-range-picker.component.ts","../../../projects/ngl/src/inputs/date-range-picker/date-range-picker.component.html","../../../projects/ngl/src/inputs/dropdown/dropdown.component.ts","../../../projects/ngl/src/inputs/dropdown/dropdown.component.html","../../../projects/ngl/src/inputs/file-uploader/file-uploader.component.ts","../../../projects/ngl/src/inputs/file-uploader/file-uploader.component.html","../../../projects/ngl/src/shared-constants.ts","../../../projects/ngl/src/inputs/multi-select-dropdown/multi-select-dropdown.component.ts","../../../projects/ngl/src/inputs/multi-select-dropdown/multi-select-dropdown.component.html","../../../projects/ngl/src/inputs/multi-selection-field/multi-selection-field.component.ts","../../../projects/ngl/src/inputs/multi-selection-field/multi-selection-field.component.html","../../../projects/ngl/src/inputs/number-input/number-input.component.ts","../../../projects/ngl/src/inputs/number-input/number-input.component.html","../../../projects/ngl/src/inputs/phone-number-input/phone-number-input.component.ts","../../../projects/ngl/src/inputs/phone-number-input/phone-number-input.component.html","../../../projects/ngl/src/inputs/radio-button/radio-button.component.ts","../../../projects/ngl/src/inputs/radio-button/radio-button.component.html","../../../projects/ngl/src/inputs/single-item-picker-input/single-item-picker-input.component.ts","../../../projects/ngl/src/inputs/single-item-picker-input/single-item-picker-input.component.html","../../../projects/ngl/src/inputs/single-selection-field/single-selection-field.component.ts","../../../projects/ngl/src/inputs/single-selection-field/single-selection-field.component.html","../../../projects/ngl/src/inputs/switch/switch.component.ts","../../../projects/ngl/src/inputs/switch/switch.component.html","../../../projects/ngl/src/inputs/text-area-input/text-area-input.component.ts","../../../projects/ngl/src/inputs/text-area-input/text-area-input.component.html","../../../projects/ngl/src/inputs/time-picker/time-picker.component.ts","../../../projects/ngl/src/inputs/time-picker/time-picker.component.html","../../../projects/ngl/src/utils/date-utils.ts","../../../projects/ngl/src/utils/form-utils.ts","../../../projects/ngl/src/utils/html-utils.ts","../../../projects/ngl/src/utils/jwt-decode-utils.ts","../../../projects/ngl/src/utils/string-utils.ts","../../../projects/ngl/src/validators/mmddyyyy-date.validator.ts","../../../projects/ngl/src/ngl.service.ts","../../../projects/ngl/src/provide-ngl-config.ts","../../../projects/ngl/src/vallift-ngl.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n\nexport interface NglConfig {\n baseApiUrl: string;\n enableUnsavedChangesWarning: boolean;\n enableDevTools: boolean;\n}\n\nexport const NGL_CONFIG = new InjectionToken<NglConfig>('NGL_CONFIG');\n","import {inject, Injectable, Injector} from '@angular/core';\nimport {HttpClient, HttpHeaders, HttpEvent, HttpErrorResponse, HttpRequest, HttpParams} from '@angular/common/http';\nimport {Observable, retry, Subject, throwError} from 'rxjs';\nimport {catchError, map} from 'rxjs/operators';\nimport {NGL_CONFIG} from '../ngl-config.token';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BaseApiService {\n\n config = inject(NGL_CONFIG);\n\n protected defaultHeaders: HttpHeaders;\n protected baseUrl: string = this.config.baseApiUrl;\n\n private http = inject(HttpClient);\n\n constructor() {\n this.defaultHeaders = new HttpHeaders();\n }\n\n setDefaultHeaders(headers: HttpHeaders) {\n this.defaultHeaders = headers;\n }\n\n // Set the base URL\n setBaseUrl(baseUrl: string) {\n this.baseUrl = baseUrl;\n }\n\n protected get<T>(\n url: string,\n queryParams?: { [key: string]: any },\n customHeaders?: HttpHeaders,\n useCache: boolean = false,\n cacheDurationMinutes: number = 0\n ) {\n const headers = this.mergeHeaders(customHeaders);\n\n // Set cache-related headers\n if (useCache) {\n const cacheDurationSeconds = cacheDurationMinutes * 60; // Convert minutes to seconds\n headers.set('Cache-Control', `max-age=${cacheDurationSeconds}`);\n } else {\n headers.set('Cache-Control', 'no-cache');\n }\n\n if (queryParams) {\n const queryString = Object.keys(queryParams)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)\n .join('&');\n url += `?${queryString}`;\n }\n\n const options = {headers};\n return this.http.get<T>(this.getFullUrl(url), options).pipe(\n map((data: any) => this.transformResponse(data)),\n catchError(this.handleHttpError)\n );\n }\n\n protected fromFile<T>(url: string) {\n return this.http.get<T>(url);\n }\n\n\n protected getWithRetry<T>(\n url: string,\n customHeaders?: HttpHeaders,\n useCache: boolean = false,\n cacheDurationMinutes: number = 0,\n maxRetries: number = 0, // Default retry count is 0\n retryDelayMs: number = 1000,\n enableRetry: boolean = false\n ) {\n const headers = this.mergeHeaders(customHeaders);\n\n // Set cache-related headers\n if (useCache) {\n const cacheDurationSeconds = cacheDurationMinutes * 60; // Convert minutes to seconds\n headers.set('Cache-Control', `max-age=${cacheDurationSeconds}`);\n } else {\n headers.set('Cache-Control', 'no-cache');\n }\n\n const options = {headers};\n\n return this.http.get<T>(this.getFullUrl(url), options).pipe(\n map((data: any) => this.transformResponse(data)),\n enableRetry && maxRetries > 0\n ? retry(maxRetries)\n : catchError(this.handleHttpError)\n );\n }\n\n protected post<T>(url: string,\n body: any,\n queryParams?: { [key: string]: any },\n customHeaders?: HttpHeaders,) {\n if (queryParams) {\n const queryString = Object.keys(queryParams)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)\n .join('&');\n url += `?${queryString}`;\n }\n const headers = this.mergeHeaders(customHeaders);\n return this.http.post<T>(this.getFullUrl(url), body, {headers}).pipe(\n map((data: any) => this.transformResponse(data)),\n catchError(this.handleHttpError)\n );\n }\n\n protected put<T>(url: string,\n body: any,\n queryParams?: { [key: string]: any },\n customHeaders?: HttpHeaders,) {\n if (queryParams) {\n const queryString = Object.keys(queryParams)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)\n .join('&');\n url += `?${queryString}`;\n }\n const headers = this.mergeHeaders(customHeaders);\n return this.http.put<T>(this.getFullUrl(url), body, {headers}).pipe(\n map((data: any) => this.transformResponse(data)),\n catchError(this.handleHttpError)\n );\n }\n\n protected delete<T>(url: string,\n queryParams?: { [key: string]: any },\n customHeaders?: HttpHeaders) {\n if (queryParams) {\n const queryString = Object.keys(queryParams)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)\n .join('&');\n url += `?${queryString}`;\n }\n const headers = this.mergeHeaders(customHeaders);\n return this.http.delete<T>(this.getFullUrl(url), {headers}).pipe(\n map((data: any) => this.transformResponse(data)),\n catchError(this.handleHttpError)\n );\n }\n\n protected uploadFile(url: string, file: File, customHeaders?: HttpHeaders): Observable<HttpEvent<any>> {\n const headers = this.mergeHeaders(customHeaders);\n const formData = new FormData();\n formData.append('file', file, file.name);\n\n const request = new HttpRequest('POST', this.getFullUrl(url), formData, {\n headers,\n reportProgress: true\n });\n\n return this.http.request(request).pipe(\n catchError(this.handleHttpError)\n );\n }\n\n protected uploadFiles(url: string, files: FileList, customHeaders?: HttpHeaders): Observable<HttpEvent<any>> {\n const headers = this.mergeHeaders(customHeaders);\n const formData = new FormData();\n for (let i = 0; i < files.length; i++) {\n formData.append(`file${i}`, files[i], files[i].name);\n }\n\n return this.http.post(this.getFullUrl(url), formData, {headers, reportProgress: true, observe: 'events'});\n }\n\n protected uploadFormData(url: string, formData: FormData, customHeaders?: HttpHeaders, cancelSubject?: Subject<void>): Observable<HttpEvent<any>> {\n const headers = this.mergeHeaders(customHeaders);\n\n return this.http.post(this.getFullUrl(url), formData, {headers, reportProgress: true, observe: 'events'});\n }\n\n protected transformResponse(data: any): any {\n // You can implement auth transformation logic here\n return data;\n }\n\n private handleHttpError(error: HttpErrorResponse): Observable<never> {\n return throwError(() => error);\n }\n\n private mergeHeaders(customHeaders?: HttpHeaders): HttpHeaders {\n let mergedHeaders = this.defaultHeaders;\n\n if (customHeaders) {\n customHeaders.keys().forEach(key => {\n mergedHeaders = mergedHeaders.set(key, customHeaders.get(key)!);\n });\n }\n\n return mergedHeaders;\n }\n\n private getFullUrl(url: string): string {\n if (url.startsWith('http://') || url.startsWith('https://')) {\n return url;\n } else {\n return this.baseUrl + url;\n }\n }\n}\n","import {AbstractControl, ControlValueAccessor, FormControl} from \"@angular/forms\";\nimport {signal} from \"@angular/core\";\n\nexport abstract class BaseControlValueAccessor implements ControlValueAccessor {\n\n disabled = signal(false);\n touched = signal(false);\n public formControl = new FormControl();\n writeToInherited = false;\n\n get hasErrors() {\n return this.formControl && this.formControl.touched && this.formControl.errors;\n }\n\n onChange: any = () => {\n };\n\n onTouched: any = () => {\n };\n\n writeValue(value: any): void {\n if (value !== null && value !== undefined && !this.writeToInherited) {\n this.onWriteValue(value);\n this.writeToInherited = true;\n }\n }\n\n protected abstract onWriteValue(obj: any): void;\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n markAsTouched() {\n if (!this.touched()) {\n this.onTouched();\n this.touched.set(true);\n }\n }\n\n hasRequiredValidator(): boolean {\n if (this.formControl?.validator) {\n const validator = this.formControl.validator({} as AbstractControl);\n return !!(validator && validator['required']);\n }\n return false;\n }\n\n}\n","import {AbstractControl, ControlValueAccessor, FormControl, NgControl} from \"@angular/forms\";\nimport {AfterContentInit, inject, output, signal} from \"@angular/core\";\n\nexport abstract class BaseControlValueAccessorV2<T> implements ControlValueAccessor {\n\n controlValue = signal<T | null>(null);\n actualValue: any;\n\n disabled = signal(false);\n touched = signal(false);\n public formControl = new FormControl();\n writeToInherited = false;\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n initFormControl() {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n get hasErrors() {\n return this.formControl && this.formControl.touched && this.formControl.errors;\n }\n\n onChange: any = () => {\n };\n\n onTouched: any = () => {\n };\n\n writeValue(value: T): void {\n // if (value !== null && value !== undefined && !this.writeToInherited) {\n // this.controlValue.set(value);\n // this.onValueReady(value);\n // this.writeToInherited = true;\n // }\n\n // if (value !== null && value !== undefined) {\n // this.actualValue = value;\n // this.controlValue.set(value);\n // this.onValueReady(value);\n // this.writeToInherited = true;\n // }\n\n this.actualValue = value;\n this.controlValue.set(value);\n this.onValueReady(value);\n }\n\n createInstance<T>(ClassRef: new () => T): T {\n return new ClassRef(); // Create an instance of T\n }\n\n isOfType<T>(value: any, check: (value: any) => boolean): value is T {\n return check(value);\n }\n\n\n protected abstract onValueReady(value: T): void;\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n markAsTouched() {\n if (!this.touched()) {\n this.onTouched();\n this.touched.set(true);\n }\n }\n\n hasRequiredValidator(): boolean {\n if (this.formControl?.validator) {\n const validator = this.formControl.validator({} as AbstractControl);\n return !!(validator && validator['required']);\n }\n return false;\n }\n\n updateValue(newValue: any) {\n this.controlValue.set(newValue);\n this.onChange(newValue);\n }\n\n}\n\n\nexport type Schema<T> = {\n [K in keyof T]: (value: any) => boolean;\n};\n\nexport function isValid<T>(value: any, schema: Schema<T>): value is T {\n if (typeof value !== 'object' || value === null) return false;\n\n return Object.keys(schema).every(key => {\n const typeCheck = schema[key as keyof T];\n return typeCheck(value[key as keyof T]);\n });\n}\n\nexport function isDynamicType<T>(value: any, typeDefinition: new (...args: any[]) => T): boolean {\n // Check if typeDefinition is a class constructor\n if (typeof typeDefinition !== 'function') {\n return false; // Type definition must be a class constructor\n }\n\n // Check if value is an instance of the class\n if (!(value instanceof typeDefinition)) {\n return false; // Value must be an instance of typeDefinition\n }\n\n // Get the prototype of the type definition\n const prototype = typeDefinition.prototype;\n\n // Get the keys of the type definition's prototype\n const keys = Object.keys(prototype) as Array<keyof T>;\n\n // Check each property in the type definition\n for (const key of keys) {\n const expectedType = typeof prototype[key];\n const actualType = typeof value[key];\n\n // Check for nested object types\n if (expectedType === 'object' && actualType === 'object') {\n if (prototype[key] !== null && value[key] !== null) {\n // Recursively check for nested objects\n const isNestedObjectValid = isDynamicType(value[key], (prototype[key] as any).constructor);\n if (!isNestedObjectValid) {\n return false; // Nested object check failed\n }\n } else if (value[key] === null) {\n return false; // If expected to be an object, it shouldn't be null\n }\n } else if (expectedType !== actualType) {\n return false; // Type mismatch\n }\n }\n\n return true; // All checks passed\n}\n\nexport function getDynamicTypeStructure(obj: any): string {\n if (obj === null) return 'null';\n\n if (Array.isArray(obj)) {\n return `Array<${obj.map(item => getDynamicTypeStructure(item)).join(', ')}>`;\n }\n\n if (typeof obj === 'object') {\n const properties = Object.keys(obj).map(key => {\n return `${key}: ${getDynamicTypeStructure(obj[key])}`;\n });\n return `Object { ${properties.join(', ')} }`;\n }\n\n return typeof obj; // For primitive types (number, string, etc.)\n}\n","import {AbstractControl, ControlValueAccessor, FormControl, NgControl} from \"@angular/forms\";\nimport {AfterContentInit, Component, inject, input, output, signal} from \"@angular/core\";\n\n\n@Component({\n imports: [],\n template: '',\n})\nexport abstract class BaseControlValueAccessorV3<T> implements ControlValueAccessor, AfterContentInit {\n errorMessages = input<{ [key: string]: string }>({});\n\n valueChanged = output<T>();\n\n disabled = signal(false);\n touched = signal(false);\n public formControl = new FormControl();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n actualValue: T | undefined;\n\n protected abstract onValueReady(value: T): void;\n\n get controlValue(): T | undefined {\n return this.formControl.value ?? this.actualValue;\n }\n\n constructor() {\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngAfterContentInit() {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n get hasErrors() {\n return this.formControl && this.formControl.touched && this.formControl.errors;\n }\n\n private onChange: any = () => {\n };\n\n onTouched: any = () => {\n };\n\n writeValue(value: T): void {\n if (value != this.formControl.value) {\n this.formControl.setValue(value);\n }\n this.actualValue = value;\n setTimeout(() => {\n this.onValueReady(value);\n });\n }\n\n\n onValueChange(value: T) {\n this.valueChanged.emit(value);\n this.actualValue = value;\n this.onChange(value);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n markAsTouched() {\n if (!this.touched()) {\n this.onTouched();\n this.touched.set(true);\n }\n }\n\n hasRequiredValidator(): boolean {\n if (this.formControl?.validator) {\n const validator = this.formControl.validator({} as AbstractControl);\n return !!(validator && validator['required']);\n }\n return false;\n }\n}\n","import {signal} from \"@angular/core\";\n\nexport interface BaseStateImpl<T> {\n notifyLoading(): void;\n\n notifySuccess(data: T): void;\n\n notifyError(errorMsg: string): void;\n\n clearState(): void;\n}\n\nexport class State<T> implements BaseStateImpl<T> {\n responseSignal = signal<T | null>(null);\n private initialLoadingSignal = signal<boolean>(false);\n private loadingSignal = signal<boolean>(false);\n private successSignal = signal<boolean>(false);\n private failedSignal = signal<boolean>(false);\n private errorSignal = signal<string | null>(null);\n private stateSignal = signal<RequestState | null>(null);\n\n readonly response = this.responseSignal.asReadonly();\n readonly initialLoading = this.initialLoadingSignal.asReadonly();\n readonly loading = this.loadingSignal.asReadonly();\n readonly success = this.successSignal.asReadonly();\n readonly failed = this.failedSignal.asReadonly();\n readonly error = this.errorSignal.asReadonly();\n readonly state = this.stateSignal.asReadonly();\n\n constructor() {\n this.stateSignal.set(RequestState.idle);\n }\n\n notifyInitialLoading() {\n this.responseSignal.set(null);\n this.initialLoadingSignal.set(true);\n this.loadingSignal.set(true);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.initialLoading);\n }\n\n notifyLoading() {\n // this.responseSignal.set(null);\n this.initialLoadingSignal.set(false);\n this.loadingSignal.set(true);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.loading);\n }\n\n notifySuccess(data: T) {\n this.responseSignal.set(data);\n this.initialLoadingSignal.set(false);\n this.loadingSignal.set(false);\n this.successSignal.set(true);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.success);\n }\n\n notifyError(errorMsg: string) {\n this.responseSignal.set(null);\n this.initialLoadingSignal.set(false);\n this.loadingSignal.set(false);\n this.successSignal.set(false);\n this.failedSignal.set(true);\n this.errorSignal.set(errorMsg);\n this.stateSignal.set(RequestState.error);\n }\n\n clearState() {\n this.responseSignal.set(null);\n this.initialLoadingSignal.set(false);\n this.loadingSignal.set(false);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.idle);\n }\n}\n\nexport enum RequestState {\n idle = 'idle',\n initialLoading = 'initialLoading',\n loading = 'loading',\n error = 'error',\n success = 'success'\n}\n\n// export class BaseState<T> implements BaseStateImpl<T> {\n// private dataSubject = new BehaviorSubject<T | null>(null);\n// private loadingSubject = new BehaviorSubject<boolean>(false);\n// private errorSubject = new BehaviorSubject<string | null>(null);\n// private stateSubject = new BehaviorSubject<RequestState | null>(null);\n//\n// auth$: Observable<T | null> = this.dataSubject.asObservable();\n// loading$: Observable<boolean> = this.loadingSubject.asObservable();\n// error$: Observable<string | null> = this.errorSubject.asObservable();\n// state$: Observable<RequestState | null> = this.stateSubject.asObservable();\n//\n// constructor() {\n// this.stateSubject.next(RequestState.initial);\n// }\n//\n// notifyLoading() {\n// this.loadingSubject.next(true);\n// this.dataSubject.next(null);\n// this.errorSubject.next(null);\n// this.stateSubject.next(RequestState.loading);\n// }\n//\n// notifySuccess(auth: T) {\n// this.loadingSubject.next(false);\n// this.dataSubject.next(auth);\n// this.errorSubject.next(null);\n// this.stateSubject.next(RequestState.success);\n// }\n//\n// notifyError(errorMsg: string) {\n// this.loadingSubject.next(false);\n// this.dataSubject.next(null);\n// this.errorSubject.next(errorMsg);\n// this.stateSubject.next(RequestState.error);\n// }\n//\n// clearState() {\n// this.loadingSubject.next(false);\n// this.dataSubject.next(null);\n// this.errorSubject.next(null);\n// this.stateSubject.next(RequestState.initial);\n// }\n// }\n\n\n","import {signal} from \"@angular/core\";\nimport {RequestState} from './base-state';\n\nexport class PaginationState<T> {\n responseSignal = signal<T | null>(null);\n private loadingSignal = signal<boolean>(false);\n private successSignal = signal<boolean>(false);\n private failedSignal = signal<boolean>(false);\n private errorSignal = signal<string | null>(null);\n private stateSignal = signal<RequestState | null>(null);\n\n readonly response = this.responseSignal.asReadonly();\n readonly loading = this.loadingSignal.asReadonly();\n readonly success = this.successSignal.asReadonly();\n readonly failed = this.failedSignal.asReadonly();\n readonly error = this.errorSignal.asReadonly();\n readonly state = this.stateSignal.asReadonly();\n\n items = signal<any[]>([]);\n pageNumber = signal<number>(1);\n pageSize = signal<number>(1);\n totalRecords = signal<number>(0);\n totalPages = signal<number>(0);\n\n constructor() {\n this.stateSignal.set(RequestState.idle);\n }\n\n notifyLoading() {\n this.loadingSignal.set(true);\n this.responseSignal.set(null);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.loading);\n }\n\n notifySuccess(response: any) {\n this.loadingSignal.set(false);\n this.responseSignal.set(response);\n this.successSignal.set(true);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.success);\n\n\n if (Array.isArray(response?.data)) {\n this.items.update(prev => {\n return [...prev, ...response.data];\n });\n }\n\n if (response?.pageNumber) {\n this.pageNumber.set(response.pageNumber);\n }\n\n if (response?.pageSize) {\n this.pageSize.set(response.pageSize);\n }\n\n if (response?.totalRecords) {\n this.totalRecords.set(response.totalRecords);\n }\n\n if (response?.totalPages) {\n this.totalPages.set(response.totalPages);\n }\n\n }\n\n notifyError(errorMsg: string) {\n this.loadingSignal.set(false);\n this.responseSignal.set(null);\n this.successSignal.set(false);\n this.failedSignal.set(true);\n this.errorSignal.set(errorMsg);\n this.stateSignal.set(RequestState.error);\n }\n\n clearState() {\n this.loadingSignal.set(false);\n this.responseSignal.set(null);\n this.successSignal.set(false);\n this.failedSignal.set(false);\n this.errorSignal.set(null);\n this.stateSignal.set(RequestState.idle);\n\n this.items.set([]);\n this.pageNumber.set(1);\n this.pageSize.set(0);\n this.totalRecords.set(0);\n this.totalPages.set(0);\n }\n}\n","import {Component, input} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-spinner',\n standalone: true,\n imports: [\n NgClass\n ],\n templateUrl: './spinner.component.html',\n styleUrl: './spinner.component.scss'\n})\nexport class SpinnerComponent {\n borderColor = input('border-primary-500');\n}\n","<div\n class=\"inline-block h-4 w-4 animate-spin rounded-full border-2 border-primary-500 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]\"\n [ngClass]=\"borderColor()\"\n role=\"status\">\n</div>\n","import {Component, Input} from '@angular/core';\nimport {SvgIconComponent} from \"angular-svg-icon\";\n\n@Component({\n selector: 'app-svg-icon',\n standalone: true,\n imports: [\n SvgIconComponent\n ],\n templateUrl: './app-svg-icon.component.html',\n styleUrl: './app-svg-icon.component.scss'\n})\nexport class AppSvgIconComponent {\n\n @Input() src!: string;\n @Input() stretch: boolean = false;\n @Input() size: number = 24;\n @Input() svgStyle: { [key: string]: any } = {};\n\n\n getStyle() {\n return {...this.svgStyle, 'width.px': this.size, 'height.px': this.size};\n }\n}\n","<svg-icon [src]=\"src\" [stretch]=\"stretch\" [svgStyle]=\"getStyle()\">\n</svg-icon>\n","import {Component, ElementRef, EventEmitter, inject, input, Input, OnInit, Output, Renderer2} from '@angular/core';\nimport {DOCUMENT, NgClass} from \"@angular/common\";\nimport {SpinnerComponent} from \"../spinner/spinner.component\";\nimport {FormGroup, FormGroupDirective} from \"@angular/forms\";\nimport {AppSvgIconComponent} from \"../app-svg-icon/app-svg-icon.component\";\n\n@Component({\n selector: 'app-button',\n standalone: true,\n imports: [\n NgClass,\n SpinnerComponent,\n AppSvgIconComponent\n ],\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss'\n})\nexport class ButtonComponent {\n elementRef = inject(ElementRef);\n document = inject(DOCUMENT);\n renderer = inject(Renderer2);\n\n type = input<'button' | 'submit' | 'reset'>('button');\n disabled = input<boolean>(false);\n fullWidth = input<boolean>(false);\n appearance = input<'textType' | 'primary' | 'outline' | 'primaryRounded' | 'outlineRounded'>('primary');\n loading = input<boolean>(false);\n iconSize = input<number>(18);\n iconSrc = input<string | null>();\n iconColor = input<string | null>(null);\n buttonColor = input<string>('bg-primary-500');\n outlineColor = input<string>('border-primary-500');\n textButtonColor = input<string>('text-primary-500');\n size = input<'small' | 'medium' | 'large'>('medium');\n\n @Output() buttonClick = new EventEmitter<void>();\n\n formGroupDirective = inject(FormGroupDirective, {optional: true});\n\n getButtonClass(): string {\n let base = 'inline-flex items-center justify-center text-button leading-5 transition-all duration-200';\n\n const sizeClasses = {\n small: 'px-4 py-2 text-sm',\n medium: 'px-6 py-3 text-base',\n large: 'px-6 py-4 text-lg'\n };\n\n const appearanceClasses = {\n primary: `text-white rounded-md ${this.buttonColor()}`,\n primaryRounded: `text-white rounded-full ${this.buttonColor()}`,\n outline: `${this.textButtonColor()} rounded-md bg-white border ${this.outlineColor()} outline-none`,\n outlineRounded: `${this.textButtonColor()} rounded-full bg-white border ${this.outlineColor()} outline-none`,\n textType: `${this.textButtonColor()} rounded-md border border-transparent rounded-md bg-white outline-none focus:outline-none`\n };\n\n return `${base} ${sizeClasses[this.size()]} ${appearanceClasses[this.appearance()]} ${this.disabled() ? 'cursor-not-allowed' : ''} ${this.fullWidth() ? 'w-full' : ''}`;\n }\n\n getIconClass() {\n if (this.iconColor() != null) {\n return this.iconColor();\n }\n\n switch (this.appearance()) {\n case 'outline':\n return 'text-primary-500';\n case 'outlineRounded':\n return 'text-primary-500';\n case 'textType':\n return 'text-primary-500';\n case 'primaryRounded':\n return 'text-white';\n case 'primary':\n default:\n return 'text-white';\n }\n }\n\n getLoaderColor() {\n let borderClass = 'border-white';\n switch (this.appearance()) {\n case 'outline':\n borderClass = 'border-primary-500';\n break;\n case 'outlineRounded':\n borderClass = 'border-primary-500';\n break;\n case 'textType':\n borderClass = 'border-primary-500';\n break;\n case 'primaryRounded':\n borderClass = 'border-white';\n break;\n case 'primary':\n default:\n borderClass = 'border-white';\n break;\n }\n\n return borderClass\n }\n\n onClick(): void {\n if (this.loading()) {\n return;\n }\n if (this.type() == 'submit' && this.formGroupDirective) {\n const formGroup = this.formGroupDirective.form;\n this.validateForm(formGroup);\n }\n this.buttonClick.emit();\n }\n\n validateForm(formGroup: FormGroup) {\n formGroup.markAllAsTouched();\n formGroup.markAsPristine();\n }\n}\n","<button\n (click)=\"onClick()\"\n [type]=\"type()\"\n class=\"relative whitespace-nowrap\"\n [ngClass]=\"getButtonClass()\">\n\n @if (iconSrc()) {\n <app-svg-icon [src]=\"iconSrc()!\" [size]=\"iconSize()\" class=\"mr-3\"\n [ngClass]=\"loading() ? 'text-transparent' : getIconClass()\"></app-svg-icon>\n }\n\n <app-spinner class=\"w-min absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\"\n [borderColor]=\"loading() ? getLoaderColor() : 'border-transparent'\"></app-spinner>\n\n <div [ngClass]=\"loading() ? 'text-transparent' : 'text-body2'\">\n <ng-content></ng-content>\n </div>\n\n</button>\n","import {Component, inject} from '@angular/core';\nimport {DIALOG_DATA, DialogRef} from \"@angular/cdk/dialog\";\nimport {ButtonComponent} from '../../button/button.component';\n\n@Component({\n selector: 'app-alert-dialog',\n standalone: true,\n imports: [\n ButtonComponent,\n ],\n templateUrl: './alert-dialog.component.html',\n styleUrl: './alert-dialog.component.scss'\n})\nexport class AlertDialogComponent {\n\n dialogRef = inject(DialogRef);\n data = inject(DIALOG_DATA);\n\n onNoClicked() {\n this.dialogRef.close(false);\n }\n\n onYesClicked() {\n this.dialogRef.close(true);\n }\n}\n","<div class=\"flex flex-col gap-2 text-start px-4 py-3\">\n <p class=\"text-body1 text-error\">{{ data.title }}</p>\n <p class=\"text-body2\">{{ data.message }}</p>\n <div class=\"flex justify-end gap-4 mt-3\">\n <app-button appearance=\"outline\" (click)=\"onNoClicked()\">Cancel\n </app-button>\n <app-button buttonColor=\"bg-primary-500\"\n (click)=\"onYesClicked()\">Yes\n </app-button>\n </div>\n</div>\n","import {inject, Injectable, Renderer2, RendererFactory2} from '@angular/core';\nimport {Dialog, DialogRef} from '@angular/cdk/dialog';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n GlobalPositionStrategy,\n Overlay,\n} from '@angular/cdk/overlay';\nimport {ComponentType} from '@angular/cdk/portal';\nimport {BreakpointObserver, Breakpoints} from \"@angular/cdk/layout\";\nimport {AlertDialogComponent} from './alert-dialog/alert-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OverlayService {\n\n private dialog = inject(Dialog);\n private overlay = inject(Overlay);\n private breakpointObserver = inject(BreakpointObserver);\n private rendererFactory = inject(RendererFactory2);\n\n private renderer!: Renderer2;\n\n constructor() {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n private basePanelClass = ['bg-white', 'shadow-2'];\n\n modalMaxHeightClass = 'max-h-[80vh]';\n\n openNearElement<T>(\n component: ComponentType<T>,\n triggerElement: HTMLElement,\n options?: {\n positions?: ConnectedPosition[];\n disableClose?: boolean;\n data?: any;\n scrollStrategy?: 'noop' | 'block' | 'reposition' | 'close';\n isMobileResponsive?: boolean;\n }\n ): DialogRef<any, T> {\n\n const {\n positions = [\n {originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8}, // Default: Centered Below\n {originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8}, // Fallback: Centered Above\n {originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 8}, // **New Fallback: Align Left if Overflowing Right**\n {originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -8}], // **New Fallback: Align Left if Overflowing Right and not enough space below**\n disableClose = false,\n data,\n scrollStrategy = 'block',\n isMobileResponsive = false\n } = options ?? {};\n\n const isMobile = this.breakpointObserver.isMatched([Breakpoints.XSmall, Breakpoints.Small]);\n\n let positionStrategy: FlexibleConnectedPositionStrategy | GlobalPositionStrategy | null;\n\n if (isMobile && isMobileResponsive) {\n positionStrategy = this.overlay.position()\n .global()\n .centerHorizontally()\n .centerVertically();\n } else {\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(triggerElement)\n .withFlexibleDimensions(false)\n .withPush(true)\n .withPositions(positions);\n }\n\n const scrollStrategyMapping = {\n noop: this.overlay.scrollStrategies.noop(),\n block: this.overlay.scrollStrategies.block(),\n reposition: this.overlay.scrollStrategies.reposition(),\n close: this.overlay.scrollStrategies.close(),\n };\n\n const appliedScrollStrategy = scrollStrategyMapping[scrollStrategy] ?? this.overlay.scrollStrategies.block();\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n scrollStrategy: appliedScrollStrategy,\n disableClose: disableClose,\n backdropClass: ['bg-black/5', 'overflow-clip'],\n panelClass: [...this.basePanelClass, 'rounded-3xl'],\n data: data,\n });\n\n return dialogRef;\n\n }\n\n openAlert(title: string, message: string): DialogRef<any, AlertDialogComponent> {\n let dialogRef = this.dialog.open(AlertDialogComponent, {\n width: '300px',\n data: {\n title: title,\n message: message\n },\n panelClass: [...this.basePanelClass, 'rounded-3xl']\n });\n\n return dialogRef;\n }\n\n openModal<T>(component: ComponentType<T>, options?: {\n disableClose?: boolean,\n maxHeightClass?: string,\n data?: any\n }):\n DialogRef<any, T> {\n\n const {disableClose = false, maxHeightClass, data} = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically();\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n backdropClass: ['bg-black/20'],\n panelClass: [...this.basePanelClass, maxHeightClass ?? this.modalMaxHeightClass, 'rounded-3xl', 'sm:w-4/5', 'md:w-3/5', 'lg:w-2/5'],\n data: data\n });\n\n this.setOverlayMaxHeight(maxHeightClass ?? this.modalMaxHeightClass);\n\n return dialogRef;\n }\n\n private setOverlayMaxHeight(maxHeightClass: string): void {\n const overlayElement = document.querySelector('.base-overlay') as HTMLElement;\n if (overlayElement) {\n this.renderer.addClass(overlayElement, maxHeightClass);\n }\n }\n\n openBackdrop<T>(\n component: ComponentType<T>,\n options?: {\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {disableClose = false, data} = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .bottom('0px');\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'w-[100%]', 'h-[90%]', 'rounded-t-3xl', 'overflow-clip'],\n data: data\n });\n\n return dialogRef;\n }\n\n openBottomSheet<T>(\n component: ComponentType<T>,\n options?: {\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {disableClose = false, data} = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .bottom('0px');\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'w-max-[300px]', 'h-[70%]', 'rounded-t-3xl', 'overflow-clip', 'overflow-y-scroll'],\n data: data\n });\n\n return dialogRef;\n }\n\n openFullScreen<T>(\n component: ComponentType<T>,\n options?: {\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {disableClose = false, data} = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .bottom('0px');\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'w-dvw', 'h-dvh', 'overflow-clip', 'overflow-y-scroll'],\n data: data\n });\n\n return dialogRef;\n }\n\n openSidePanelRight<T>(\n component: ComponentType<T>,\n options?: {\n widthInPx?: number;\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {\n widthInPx = 350,\n disableClose = false,\n data\n } = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .top('0px')\n .right('0px')\n .width(`${widthInPx}px`);\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'h-dvh', 'w-full', 'overflow-clip', 'overflow-y-scroll'],\n data: data\n });\n\n return dialogRef;\n }\n\n openSidePanelLeft<T>(\n component: ComponentType<T>,\n options?: {\n widthInPx?: number;\n disableClose?: boolean;\n data?: any;\n }\n ): DialogRef<any, T> {\n const {\n widthInPx = 350,\n disableClose = false,\n data\n } = options ?? {};\n\n const positionStrategy = this.overlay\n .position()\n .global()\n .top('0px')\n .left('0px')\n .width(`${widthInPx}px`);\n\n let dialogRef = this.dialog.open(component, {\n positionStrategy: positionStrategy,\n disableClose: disableClose,\n panelClass: [...this.basePanelClass, 'h-dvh', 'w-full', 'overflow-clip', 'overflow-y-scroll'],\n data: data\n });\n\n return dialogRef;\n }\n\n}\n","import {\n Directive,\n OnDestroy,\n HostListener,\n inject\n} from '@angular/core';\nimport {FormGroupDirective} from '@angular/forms';\nimport {Router, NavigationStart, Event} from '@angular/router';\nimport {Subscription} from 'rxjs';\nimport {OverlayService} from '../components/overlay/overlay.service';\nimport {NGL_CONFIG} from '../ngl-config.token';\n\n@Directive({\n selector: 'form[unSavedAware]'\n})\nexport class UnsavedAwareDirective implements OnDestroy {\n config = inject(NGL_CONFIG);\n\n HANDLE_UNSAVED_CHANGES = false;\n\n formGroupDirective = inject(FormGroupDirective);\n router = inject(Router);\n overlayService = inject(OverlayService);\n\n private routerSubscription?: Subscription;\n private isConfirming = false;\n\n constructor() {\n this.routerSubscription = this.router.events.subscribe((event: Event) => {\n\n if (this.config.enableUnsavedChangesWarning && !this.HANDLE_UNSAVED_CHANGES) {\n return;\n }\n\n if (event instanceof NavigationStart && this.formGroupDirective.form?.dirty) {\n\n if (this.isConfirming) {\n return;\n }\n\n this.isConfirming = true;\n\n this.confirmUnsavedChanges().then((value) => {\n this.isConfirming = false;\n if (value) {\n this.formGroupDirective.resetForm();\n this.router.navigateByUrl(event.url);\n } else {\n this.router.navigateByUrl(this.router.url);\n }\n });\n\n this.router.navigateByUrl(this.router.url);\n }\n });\n }\n\n async confirmUnsavedChanges(): Promise<boolean> {\n try {\n const result = await this.overlayService.openAlert('Unsaved Changes', 'You have unsaved changes! Do you really want to leave?').closed.toPromise();\n return result;\n } catch (error) {\n console.error('Error while showing confirmation dialog:', error);\n return false;\n }\n }\n\n ngOnDestroy(): void {\n this.routerSubscription?.unsubscribe();\n }\n\n @HostListener('window:beforeunload', ['$event'])\n unloadNotification($event: BeforeUnloadEvent): void {\n if (this.config.enableUnsavedChangesWarning && !this.HANDLE_UNSAVED_CHANGES) {\n return;\n }\n\n if (this.formGroupDirective.form?.dirty) {\n $event.returnValue = 'You have unsaved changes! Do you really want to leave?';\n }\n }\n}\n","type AnyObject = { [key: string]: any };\n\n\nexport function resolveTemplateWithObject(\n obj: AnyObject,\n expression: string,\n fallback: string = \"N/A\"\n): string {\n return expression.replace(/\\$([a-zA-Z0-9_.\\[\\]]+)/g, (_, key: string) => {\n const keys: string[] = key.split(/[\\.\\[\\]]/).filter(k => k !== \"\");\n let value: any = obj;\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n\n // THOUSAND_FORMAT\n if (k === \"THOUSAND_FORMAT\") {\n if (!isNaN(Number(value))) {\n return (Number(value) / 1_000).toFixed(2) + \"K\"; // Format as thousands\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n\n // MILLION_FORMAT\n if (k === \"MILLION_FORMAT\") {\n if (!isNaN(Number(value))) {\n return (Number(value) / 1_000_000).toFixed(2) + \"M\"; // Format as millions\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n\n // BILLION_FORMAT\n if (k === \"BILLION_FORMAT\") {\n if (!isNaN(Number(value))) {\n return (Number(value) / 1_000_000_000).toFixed(2) + \"B\"; // Format as billions\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n // CURRENCY_FORMAT\n if (k === \"CURRENCY_FORMAT\") {\n if (!isNaN(Number(value))) {\n return Number(value).toLocaleString(\"en-US\", { minimumFractionDigits: 2 });\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n // PERCENTAGE_FORMAT\n if (k === \"PERCENTAGE_FORMAT\") {\n if (!isNaN(Number(value))) {\n return (Number(value) * 100).toFixed(2) + \"%\"; // Format as percentage\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n // DECIMAL_FORMAT(n) where 'n' is the number of decimal places\n if (k.startsWith(\"DECIMAL_FORMAT\")) {\n if (!isNaN(Number(value))) {\n const decimalPlaces = parseInt(k.match(/\\((\\d+)\\)/)?.[1] || \"2\", 10);\n return Number(value).toFixed(decimalPlaces); // Format with decimal places\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n // ROUND_FORMAT\n if (k === \"ROUND_FORMAT\") {\n if (!isNaN(Number(value))) {\n return Math.round(Number(value)).toString(); // Round the value\n } else {\n return value; // If not resolvable, return the resolved value\n }\n }\n\n // Handle arrays and array indexing\n if (Array.isArray(value)) {\n if (k === \"COUNT\") {\n return value.length.toString(); // Return the count of array elements\n }\n\n const index = parseInt(k);\n if (isNaN(index) || index >= value.length || index < 0) {\n return fallback; // Invalid index\n }\n value = value[index];\n } else {\n // Handle object properties\n value = value[k as keyof typeof value];\n }\n\n if (value === undefined) return fallback; // Return fallback if key not found\n }\n\n return value;\n });\n}\n\n\nexport enum TemplateResolverFormat {\n THOUSAND_FORMAT = \"THOUSAND_FORMAT\",\n MILLION_FORMAT = \"MILLION_FORMAT\",\n BILLION_FORMAT = \"BILLION_FORMAT\",\n CURRENCY_FORMAT = \"CURRENCY_FORMAT\",\n PERCENTAGE_FORMAT = \"PERCENTAGE_FORMAT\",\n ROUND_FORMAT = \"ROUND_FORMAT\"\n}\n\nexport enum TemplateResolverArrayUtil {\n COUNT = \"COUNT\",\n}\n","import {Component, input} from '@angular/core';\n\n@Component({\n selector: 'app-no-data',\n standalone: true,\n imports: [\n ],\n templateUrl: './no-data.component.html',\n styleUrl: './no-data.component.scss'\n})\nexport class NoDataComponent {\n size = input(250);\n message = input.required<string>();\n}\n","<div class=\"inline-flex flex-col gap-3 items-center justify-center\">\n <svg class=\"svg-icon text-neutral-200 h-16 w-16\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 20H4C2.89 20 2 19.1 2 18V6C2 4.89 2.89 4 4 4H10L12 6H19C19.5304 6 20.0391 6.21071 20.4142 6.58579C20.7893 6.96086 21 7.46957 21 8H4V18L6.14 10H23.21L20.93 18.5C20.7 19.37 19.92 20 19 20Z\"\n fill=\"currentColor\"/>\n </svg>\n <p class=\"text-body2 text-neutral-500\">{{ message() }}</p>\n</div>\n","import {Component, input} from '@angular/core';\nimport {NoDataComponent} from \"../no-data/no-data.component\";\n\n@Component({\n selector: 'app-no-data-table',\n standalone: true,\n imports: [\n NoDataComponent\n ],\n templateUrl: './no-data-table.component.html',\n styleUrl: './no-data-table.component.scss'\n})\nexport class NoDataTableComponent {\n message = input<string>();\n}\n","<tbody class=\"bg-white text-center py-14\">\n<tr>\n <td colspan=\"10\">\n <div class=\"py-14\">\n <app-no-data class=\"\" [message]=\"message() ?? 'No data found'\"></app-no-data>\n </div>\n </td>\n</tr>\n</tbody>\n","import {Component, computed, input} from '@angular/core';\n\n@Component({\n selector: 'app-shimmer',\n standalone: true,\n imports: [],\n templateUrl: './shimmer.component.html',\n styleUrl: './shimmer.component.scss'\n})\nexport class ShimmerComponent {\n type = input<'grid' | 'list' | 'single-line' | 'multiline'>('grid');\n count = input(1);\n loop = computed(() => {\n return Array(this.count()).fill(1).map((x, i) => i);\n });\n}\n","@switch (type()) {\n @case ('grid') {\n <div class=\"space-y-5 rounded-2xl bg-white/1 animate-pulse\">\n <div class=\"h-24 rounded-lg bg-neutral-400/10\"></div>\n <div class=\"space-y-3\">\n <div class=\"h-3 w-3/5 rounded-lg bg-neutral-400/10\"></div>\n <div class=\"h-3 w-4/5 rounded-lg bg-neutral-400/15\"></div>\n <div class=\"h-3 w-2/5 rounded-lg bg-neutral-400/15\"></div>\n </div>\n </div>\n }\n @case ('list') {\n <div class=\"flex gap-3 rounded-2xl bg-white/1 animate-pulse\">\n <div class=\"w-24 rounded-lg bg-neutral-400/10\"></div>\n <div class=\"flex flex-col gap-3 w-full\">\n <div class=\"h-3 w-full rounded-lg bg-neutral-400/10\"></div>\n <div class=\"h-2 w-4/5 rounded-lg bg-neutral-400/15\"></div>\n <div class=\"h-2 w-2/5 rounded-lg bg-neutral-400/15\"></div>\n </div>\n </div>\n }\n @case ('single-line') {\n <div class=\"flex gap-3 rounded-2xl bg-white/1 animate-pulse\">\n <div class=\"flex flex-col gap-3 w-full\">\n <div class=\"h-3 w-full rounded-lg bg-neutral-400/10\"></div>\n </div>\n </div>\n }\n @case ('multiline') {\n <div class=\"flex gap-3 rounded-2xl bg-white/1 animate-pulse\">\n <div class=\"flex flex-col gap-3 w-full\">\n <div class=\"h-3 w-full rounded-lg bg-neutral-400/10\"></div>\n <div class=\"h-2 w-4/5 rounded-lg bg-neutral-400/15\"></div>\n </div>\n </div>\n }\n}\n\n\n","import {Component, Input, input, output} from '@angular/core';\nimport {FormsModule} from \"@angular/forms\";\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-pagination',\n standalone: true,\n imports: [\n FormsModule,\n NgClass\n ],\n templateUrl: './pagination.component.html',\n styleUrl: './pagination.component.scss'\n})\nexport class PaginationComponent {\n totalItems = input<number>(0);\n pageSizeOptions = input<number[]>([10, 25, 50, 100]);\n @Input() pageSize: number = 25; // Default page size\n\n pageChange = output<PaginationEvent>();\n\n currentPage: number = 1;\n\n get totalPages(): number {\n return Math.ceil(this.totalItems() / this.pageSize);\n }\n\n get startItem(): number {\n return this.totalItems() === 0 ? 0 : (this.currentPage - 1) * this.pageSize + 1;\n }\n\n get endItem(): number {\n return Math.min(this.currentPage * this.pageSize, this.totalItems());\n }\n\n changePageSize(event: string): void {\n const newSize = +event;\n this.pageSize = newSize;\n this.currentPage = 1; // Reset to first page when page size changes\n this.emitPageChange();\n }\n\n goToPage(page: number): void {\n if (page >= 1 && page <= this.totalPages) {\n this.currentPage = page;\n this.emitPageChange();\n }\n }\n\n goToFirstPage(): void {\n this.goToPage(1);\n }\n\n goToLastPage(): void {\n this.goToPage(this.totalPages);\n }\n\n goToNextPage(): void {\n if (this.currentPage < this.totalPages) {\n this.goToPage(this.currentPage + 1);\n }\n }\n\n goToPreviousPage(): void {\n if (this.currentPage > 1) {\n this.goToPage(this.currentPage - 1);\n }\n }\n\n emitPageChange(): void {\n this.pageChange.emit({ pageNumber: this.currentPage, pageSize: this.pageSize });\n }\n}\n\nexport interface PaginationEvent {\n pageNumber: number;\n pageSize: number;\n}\n","<div class=\"flex w-full items-center justify-between p-4 bg-white border-t border-neutral-50\">\n <div>\n <!-- Showing items text -->\n <p class=\"text-sm text-gray-700 text-nowrap\">\n Showing <span class=\"font-semibold\">{{ startItem }}</span> to <span class=\"font-semibold\">{{ endItem }}</span>\n of <span class=\"font-semibold\">{{ totalItems() }}</span> results\n </p>\n </div>\n\n <div class=\"flex items-center space-x-4\">\n\n <span class=\"text-body2\">Items per page:</span>\n\n <div class=\"relative inline-block border rounded p-2 text-caption\">\n <select [(ngModel)]=\"pageSize\" (ngModelChange)=\"changePageSize($event)\"\n class=\"\">\n @for (size of pageSizeOptions(); track size) {\n <option [value]=\"size\">{{ size }}</option>\n }\n </select>\n </div>\n\n <span class=\"text-caption\">{{ startItem }} - {{ endItem }} of {{ totalItems() }}</span>\n\n <button\n class=\"px-2 py-1 text-neutral-500 rounded disabled:text-neutral-500 disabled:cursor-not-allowed\"\n [ngClass]=\"{ 'opacity-50': currentPage === 1 }\"\n [disabled]=\"currentPage === 1\"\n (click)=\"goToFirstPage()\">\n <svg class=\"text-neutral-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M18.41 16.59L13.82 12L18.41 7.41L17 6L11 12L17 18L18.41 16.59ZM6 6H8V18H6V6Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <button\n class=\"px-2 py-1 text-neutral-500 rounded disabled:text-neutral-500 disabled:cursor-not-allowed\"\n [ngClass]=\"{ 'opacity-50': currentPage === 1 }\"\n [disabled]=\"currentPage === 1\"\n (click)=\"goToPreviousPage()\">\n <svg class=\"text-neutral-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15.41 16.58L10.83 12L15.41 7.41L14 6L8 12L14 18L15.41 16.58Z\" fill=\"black\"/>\n </svg>\n </button>\n\n <button\n class=\"px-2 py-1 text-neutral-500 rounded disabled:text-neutral-500 disabled:cursor-not-allowed\"\n [ngClass]=\"{ 'opacity-50': currentPage === totalPages }\"\n [disabled]=\"currentPage === totalPages\"\n (click)=\"goToNextPage()\">\n <svg class=\"text-neutral-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M8.59 16.58L13.17 12L8.59 7.41L10 6L16 12L10 18L8.59 16.58Z\" fill=\"black\"/>\n </svg>\n </button>\n\n <button\n class=\"px-2 py-1 text-neutral-500 rounded disabled:text-neutral-500 disabled:cursor-not-allowed\"\n [ngClass]=\"{ 'opacity-50': currentPage === totalPages }\"\n [disabled]=\"currentPage === totalPages\"\n (click)=\"goToLastPage()\">\n <svg class=\"text-neutral-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M5.59 7.41L10.18 12L5.59 16.59L7 18L13 12L7 6L5.59 7.41ZM16 6H18V18H16V6Z\" fill=\"black\"/>\n </svg>\n </button>\n </div>\n</div>\n","import {AfterViewInit, Component, input, output, signal} from '@angular/core';\nimport {NoDataTableComponent} from \"../../no-data-table/no-data-table.component\";\nimport {ShimmerComponent} from \"../../shimmer/shimmer.component\";\nimport {NgClass} from \"@angular/common\";\nimport {PaginationComponent, PaginationEvent} from \"../../pagination/pagination.component\";\nimport {State} from '../../../base/base-state';\n\n@Component({\n selector: 'app-base-table',\n standalone: true,\n imports: [\n NoDataTableComponent,\n ShimmerComponent,\n NgClass,\n PaginationComponent\n ],\n templateUrl: './base-table.component.html',\n styleUrl: './base-table.component.scss'\n})\nexport class BaseTableComponent<T> implements AfterViewInit {\n\n pageSize = input(10);\n state = input<State<any>>();\n isHorizontallyScrollable = input(false);\n itemsPerPage = input(10);\n\n pageChange = output<PaginationEvent>();\n\n ngAfterViewInit(): void {\n this.pageChange.emit({pageNumber: 1, pageSize: this.pageSize()});\n }\n\n onPageChange(event: PaginationEvent) {\n this.pageChange.emit(event);\n }\n\n}\n\nexport interface PagingEvent {\n pageNumber: number;\n pageSize: number;\n}\n","<div class=\"bg-white rounded-lg h-full\">\n <table class=\"w-full h-full min-w-full bg-white\" [ngClass]=\"isHorizontallyScrollable() ? 'overflow-x-auto' : ''\">\n\n <!-- Table header-->\n <thead class=\"sticky top-0 bg-white z-10\">\n <tr class=\"text-overline text-neutral-500 text-nowrap h-min\">\n <ng-content select=\"[head]\"></ng-content>\n </tr>\n <tr>\n <th colspan=\"100\">\n <div class=\"border-b border-neutral-200\"></div>\n </th>\n </tr>\n </thead>\n\n <!-- List Items-->\n <tbody class=\"h-min\">\n <ng-content select=\"[body]\"></ng-content>\n </tbody>\n\n <!-- Shimmer-->\n @if (state()?.loading()) {\n <tbody class=\"bg-white text-center py-14\">\n <tr>\n <td colspan=\"100\" class=\"h-min\">\n <div class=\"flex flex-col gap-10 px-6 py-8\">\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n </div>\n </td>\n </tr>\n </tbody>\n }\n\n <!-- No Table Indicator-->\n @if (state()?.success() && (state()?.response()?.data ?? []).length <= 0) {\n <tbody>\n <tr>\n <td colspan=\"1000\">\n <div class=\"flex flex-col justify-center items-center gap-8 px-6 py-8\">\n <app-no-data-table></app-no-data-table>\n </div>\n </td>\n </tr>\n </tbody>\n }\n\n <tbody class=\"h-full\"></tbody>\n\n\n <!-- Paginator-->\n <tbody class=\"bottom-0 sticky\">\n <tr>\n <td colspan=\"100\">\n <div class=\"bg-white w-full\">\n <app-pagination\n class=\"w-full\"\n [pageSize]=\"itemsPerPage()\"\n [totalItems]=\"state()?.response()?.totalCount ?? 0\"\n (pageChange)=\"onPageChange($event)\">\n </app-pagination>\n </div>\n </td>\n </tr>\n </tbody>\n\n </table>\n</div>\n\n\n<!--Example-->\n<!-- <app-base-table appTableResizableColumns sortableTable [state]=\"driverListState\">-->\n<!-- <ng-container head>-->\n<!-- <th class=\"p-4 text-left\">FULL NAME</th>-->\n<!-- <th class=\"p-4 text-center \">CONTACT</th>-->\n<!-- <th class=\"p-4 text-center \">HIRED DATA</th>-->\n<!-- &lt;!&ndash; <th class=\"p-4 text-center \">LICENSE EXPIRING</th>&ndash;&gt;-->\n<!-- <th class=\"p-4 text-center \">STATUS</th>-->\n<!-- <th class=\"p-4 text-center \"></th>-->\n<!-- </ng-container>-->\n\n<!-- <ng-container body>-->\n<!-- @for (item of driverListState.response()?.data; track item; ) {-->\n<!-- <tr class=\"border-b border-neutral-100 w-full\">-->\n<!-- <td class=\"px-4 py-2 text-left\">-->\n<!-- <div class=\"flex flex-col gap-2\">-->\n<!-- <span class=\"text-body2 text-neutral-800\">{{ item.fullName }}</span>-->\n<!-- <span class=\"text-caption text-neutral-500\">{{ item.code }}</span>-->\n<!-- </div>-->\n<!-- </td>-->\n<!-- <td class=\"px-4 py-2 text-center\">-->\n<!-- <div class=\"flex flex-col gap-2\">-->\n<!-- <span class=\"text-body2 text-info-500\">{{ item.email }}</span>-->\n<!-- <span class=\"text-body2 text-neutral-500\">{{ item.phoneNumber }}</span>-->\n<!-- </div>-->\n<!-- </td>-->\n<!-- <td class=\"px-4 text-body2 text-center\">{{ item.hiredDate | date:'MMM d, y' }}</td>-->\n<!-- &lt;!&ndash; <td class=\"px-4 text-body2 text-center\">{{ item.licenseExpiringDate |date:'MMM d, y h:mm a' }}</td>&ndash;&gt;-->\n<!-- <td class=\"px-4\">-->\n<!-- <div class=\"flex justify-center\">-->\n<!-- <app-driver-status-badge [driver]=\"item\"></app-driver-status-badge>-->\n<!-- </div>-->\n<!-- </td>-->\n<!-- <td class=\"p-4 cursor-pointer items-center\">-->\n<!-- <div class=\"flex justify-center items-center\">-->\n<!-- <app-button (click)=\"onViewDriverClicked(item)\" appearance=\"textType\" textButtonColor=\"text-info-500\">-->\n<!-- View-->\n<!-- </app-button>-->\n<!-- <app-context-menu-icon></app-context-menu-icon>-->\n<!-- </div>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!-- }-->\n<!-- </ng-container>-->\n<!-- </app-base-table>-->\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n OnInit,\n output,\n Renderer2\n} from '@angular/core';\n\n@Directive({\n selector: '[sortableTable]',\n standalone: true\n})\nexport class SortableTableDirective implements OnInit, AfterViewInit {\n\n sortChange = output<TableSortEvent>();\n\n private currentKey: string = '';\n private currentDirection: 'asc' | 'desc' | '' = '';\n\n constructor(private el: ElementRef, private renderer: Renderer2) {\n }\n\n ngOnInit() {\n\n }\n\n ngAfterViewInit(): void {\n // Find all <th> elements inside the table with data-sortable-key\n const thElements = this.el.nativeElement.querySelectorAll('th[data-sortable-key]');\n\n // Add click listeners to each <th>\n thElements.forEach((th: HTMLElement) => {\n // this.renderer.addClass(th, 'flex');\n this.renderer.setStyle(th, 'cursor', 'pointer');\n\n // Add hover listener to show the default up arrow on hover\n this.renderer.listen(th, 'mouseenter', () => this.onMouseEnter(th));\n this.renderer.listen(th, 'mouseleave', () => this.onMouseLeave(th));\n\n // Add click listener for sorting\n this.renderer.listen(th, 'click', () => this.onHeaderClick(th));\n });\n }\n\n // Handle hover enter - show the up arrow\n onMouseEnter(th: HTMLElement) {\n const key = th.getAttribute('data-sortable-key');\n if (!key) return;\n // If no sorting is active, show the default up arrow on hover\n if ((!this.currentKey || this.currentKey !== key)) {\n this.addSvgIcon(th, 'asc', true); // Add default up arrow on hover\n }\n }\n\n // Handle hover leave - remove the hover arrow if it wasn't sorted\n onMouseLeave(th: HTMLElement) {\n const key = th.getAttribute('data-sortable-key');\n if (!key) return;\n\n if (this.currentDirection == '') {\n this.currentKey = '';\n }\n\n // If it's not the current sorted column, remove the hover icon\n if (!this.currentKey || this.currentKey !== key) {\n const iconContainer = th.querySelector('.sort-icon-container');\n if (iconContainer) {\n iconContainer.remove(); // Remove the hover arrow\n }\n }\n }\n\n onHeaderClick(th: HTMLElement) {\n const key = th.getAttribute('data-sortable-key');\n\n if (this.currentKey === key) {\n // Toggle direction if the same header is clicked\n this.currentDirection = this.currentDirection === 'asc' ? 'desc' : this.currentDirection === 'desc' ? '' : 'asc';\n } else {\n // Start with ascending order if a new header is clicked\n this.currentDirection = 'asc';\n this.currentKey = key!;\n }\n\n // Emit the sorting event\n let event: TableSortEvent = {key: this.currentKey, direction: this.currentDirection};\n this.sortChange.emit(event);\n\n // Update the sort indicators by injecting SVG icons\n this.updateSortIndicators(th);\n }\n\n updateSortIndicators(th: HTMLElement) {\n const thElements = this.el.nativeElement.querySelectorAll('th[data-sortable-key]');\n\n // Clear all existing sort indicators\n thElements.forEach((header: HTMLElement) => {\n const icon = header.querySelector('.sort-icon');\n if (icon) {\n icon.remove(); // Remove existing icon\n }\n });\n\n // Add the correct sort icon to the clicked header\n if (this.currentDirection === 'asc') {\n this.addSvgIcon(th, 'asc');\n } else if (this.currentDirection === 'desc') {\n this.addSvgIcon(th, 'desc');\n }\n }\n\n addSvgIcon(th: HTMLElement, direction: 'asc' | 'desc', isHover = false) {\n const existingIconContainer = th.querySelector('.sort-icon-container');\n if (existingIconContainer) {\n existingIconContainer.remove();\n }\n // Create a span to contain the icon\n const iconContainer = this.renderer.createElement('span');\n this.renderer.addClass(iconContainer, 'absolute');\n this.renderer.addClass(iconContainer, 'right-2');\n this.renderer.addClass(iconContainer, 'top-1/2');\n this.renderer.addClass(iconContainer, '-translate-y-1/2');\n this.renderer.addClass(iconContainer, 'sort-icon-container');\n this.renderer.addClass(iconContainer, 'inline-flex');\n this.renderer.addClass(iconContainer, 'align-sub');\n this.renderer.setStyle(iconContainer, 'margin-left', '0.25rem');\n // Create the SVG icon\n const svgIcon = this.renderer.createElement('svg', 'http://www.w3.org/2000/svg');\n this.renderer.setAttribute(svgIcon, 'class', `sort-icon sort-${direction}`);\n this.renderer.setAttribute(svgIcon, 'width', '12');\n this.renderer.setAttribute(svgIcon, 'height', '12');\n this.renderer.setAttribute(svgIcon, 'viewBox', '0 0 24 24');\n this.renderer.setAttribute(svgIcon, 'fill', 'currentColor');\n // this.renderer.setAttribute(svgIcon, 'stroke', 'currentColor');\n\n let upArrow = 'M13 20H11V8.00003L5.49996 13.5L4.07996 12.08L12 4.16003L19.92 12.08L18.5 13.5L13 8.00003V20Z';\n let downArrow = 'M11.1115 4.30078H13.1115V16.3008L18.6115 10.8008L20.0315 12.2208L12.1115 20.1408L4.19153 12.2208L5.61153 10.8008L11.1115 16.3008V4.30078Z';\n const path = this.renderer.createElement('path', 'http://www.w3.org/2000/svg');\n const pathData = direction === 'asc' ? upArrow : downArrow;\n this.renderer.setAttribute(path, 'd', pathData);\n\n // Append the path to the SVG\n this.renderer.appendChild(svgIcon, path);\n\n // Append the SVG icon to the span\n this.renderer.appendChild(iconContainer, svgIcon);\n\n // Find the div with the class 'column-resizer'\n const resizerDiv = th.querySelector('.column-resizer');\n\n // Insert the icon container before the resizer div\n if (resizerDiv) {\n this.renderer.insertBefore(th, iconContainer, resizerDiv);\n } else {\n this.renderer.appendChild(th, iconContainer);\n }\n\n if (isHover) {\n this.renderer.setStyle(svgIcon, 'fill', 'grey');\n } else {\n this.renderer.setStyle(svgIcon, 'fill', 'black');\n }\n }\n}\n\nexport interface TableSortEvent {\n key?: string | null;\n direction?: string | null;\n}\n","import {AfterViewInit, Directive, ElementRef, inject, Renderer2} from '@angular/core';\n\n@Directive({\n selector: '[appResizableColumn]',\n standalone: true\n})\nexport class ResizableColumnDirective implements AfterViewInit {\n private startX!: number;\n private startWidth!: number;\n private resizeColumnHandler: any;\n private stopResizeHandler: any;\n\n el = inject(ElementRef);\n renderer = inject(Renderer2);\n\n ngAfterViewInit(): void {\n // Set necessary styles on the th element\n this.renderer.setStyle(this.el.nativeElement, 'position', 'relative');\n this.renderer.setStyle(this.el.nativeElement, 'white-space', 'nowrap');\n\n // Create the div with class p-[2px]\n const resizeDiv = this.renderer.createElement('div');\n this.renderer.setAttribute(resizeDiv, 'class', 'column-resizer absolute flex justify-center top-1/2 -translate-y-1/2 right-0 bottom-0 w-[8px] h-[80%] cursor-col-resize z-10');\n\n // Create the span with the Tailwind CSS classes\n const resizeHandle = this.renderer.createElement('span');\n this.renderer.setAttribute(resizeHandle, 'class', 'bg-gray-100 w-[1px] h-full block');\n\n // Append the span to the div\n this.renderer.appendChild(resizeDiv, resizeHandle);\n\n // Append the div to the th element\n this.renderer.appendChild(this.el.nativeElement, resizeDiv);\n\n // Add mousedown listener to the resize handle\n this.renderer.listen(resizeDiv, 'mousedown', this.startResize.bind(this));\n }\n\n startResize(event: MouseEvent) {\n event.preventDefault();\n this.startX = event.pageX;\n this.startWidth = this.el.nativeElement.offsetWidth;\n\n // Bind event listeners for mousemove and mouseup\n this.resizeColumnHandler = this.resizeColumn.bind(this);\n this.stopResizeHandler = this.stopResize.bind(this);\n document.addEventListener('mousemove', this.resizeColumnHandler);\n document.addEventListener('mouseup', this.stopResizeHandler);\n }\n\n resizeColumn(event: MouseEvent) {\n const diffX = event.pageX - this.startX;\n const newWidth = this.startWidth + diffX;\n this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);\n }\n\n stopResize() {\n // Remove the event listeners once the resize is done\n document.removeEventListener('mousemove', this.resizeColumnHandler);\n document.removeEventListener('mouseup', this.stopResizeHandler);\n }\n}\n","import {AfterViewInit, Directive, ElementRef, inject, Input, Renderer2} from '@angular/core';\n\n@Directive({\n selector: '[appTableResizableColumns]',\n standalone: true\n})\nexport class TableResizableColumnsDirective implements AfterViewInit {\n\n el = inject(ElementRef);\n renderer = inject(Renderer2);\n\n @Input('appTableResizableColumns') applyResizableColumn!: boolean;\n\n constructor() {\n\n }\n\n ngAfterViewInit(): void {\n if (!this.applyResizableColumn) {\n return;\n }\n this.applyDirectiveLogic();\n }\n\n applyDirectiveLogic() {\n const thElements = this.el.nativeElement.querySelectorAll('thead tr th');\n\n thElements.forEach((thElement: HTMLElement) => {\n // Set necessary styles on each th element\n this.renderer.setStyle(thElement, 'position', 'relative');\n this.renderer.setStyle(thElement, 'white-space', 'nowrap');\n\n // Create the div with the necessary classes\n const resizeDiv = this.renderer.createElement('div');\n this.renderer.setAttribute(resizeDiv, 'class', 'column-resizer absolute flex justify-center top-1/2 -translate-y-1/2 right-0 bottom-0 w-[8px] h-[80%] cursor-col-resize z-10');\n\n // Create the span with the necessary Tailwind CSS classes\n const resizeHandle = this.renderer.createElement('span');\n this.renderer.setAttribute(resizeHandle, 'class', 'bg-gray-100 w-[1px] h-full block');\n\n // Append the span to the div\n this.renderer.appendChild(resizeDiv, resizeHandle);\n\n // Append the div to the th element\n this.renderer.appendChild(thElement, resizeDiv);\n\n // Add the resize functionality to each th element\n this.addResizeFunctionality(thElement, resizeDiv);\n });\n }\n\n addResizeFunctionality(thElement: HTMLElement, resizeDiv: HTMLElement) {\n let startX: number;\n let startWidth: number;\n\n const startResize = (event: MouseEvent) => {\n event.preventDefault(); // Prevent text selection\n startX = event.pageX;\n startWidth = thElement.offsetWidth;\n\n // Bind event listeners for mousemove and mouseup\n document.addEventListener('mousemove', resizeColumn);\n document.addEventListener('mouseup', stopResize);\n };\n\n const resizeColumn = (event: MouseEvent) => {\n const diffX = event.pageX - startX;\n const newWidth = startWidth + diffX;\n this.renderer.setStyle(thElement, 'width', `${newWidth}px`);\n };\n\n const stopResize = () => {\n // Remove the event listeners once resizing is complete\n document.removeEventListener('mousemove', resizeColumn);\n document.removeEventListener('mouseup', stopResize);\n };\n\n // Add mousedown listener to the resize handle (div)\n this.renderer.listen(resizeDiv, 'mousedown', startResize);\n }\n\n}\n","import {Component, inject, input, OnDestroy, OnInit} from '@angular/core';\nimport {Subscription} from \"rxjs\";\nimport {filter} from \"rxjs/operators\";\nimport {NavigationEnd, Router} from \"@angular/router\";\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-breadcrumb',\n standalone: true,\n imports: [\n NgClass\n ],\n templateUrl: './breadcrumb.component.html',\n styleUrl: './breadcrumb.component.scss'\n})\nexport class BreadcrumbComponent implements OnInit, OnDestroy {\n router = inject(Router);\n breadcrumbs: Breadcrumb[] = [];\n\n private subscription: Subscription | undefined;\n\n\n ngOnInit(): void {\n this.generateBreadcrumbs();\n this.subscription = this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n this.generateBreadcrumbs();\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n private generateBreadcrumbs(): void {\n const url = this.router.url.split('?')[0]; // Remove query parameters\n const urlSegments = url.split('/').filter((segment) => segment); // Split by '/' and remove empty segments\n\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; // Regex to match UUIDs\n\n let accumulatedPath = '';\n this.breadcrumbs = urlSegments\n .filter((segment) => !uuidRegex.test(segment)) // Skip segments matching the UUID format\n .map((segment) => {\n accumulatedPath += `/${segment}`; // Accumulate path for breadcrumb route\n return {\n title: this.formatSegment(segment), // Convert to readable title\n route: accumulatedPath,\n };\n });\n }\n\n private formatSegment(segment: string): string {\n return segment\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n\n navigate(route: string): void {\n this.router.navigate([route]);\n }\n}\n\n\nexport interface Breadcrumb {\n title: string;\n route?: string;\n}\n","<div class=\"flex items-center\">\n @for (breadcrumb of breadcrumbs; track i; let last = $last; let i = $index) {\n <div class=\"flex items-center\">\n\n <span (click)=\"!last ? navigate(breadcrumb.route!) : null\"\n class=\"text-caption cursor-pointer px-2.5 py-1.5 rounded-full transition-all duration-500\"\n [ngClass]=\"[last ? 'text-black font-medium' : 'text-neutral-500 hover:bg-neutral-200/80']\">\n {{ breadcrumb.title }}\n </span>\n\n @if (!last) {\n <span class=\"mx-2 text-caption text-neutral-400\">\n <svg class=\"w-[16px] h-[16px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" fill=\"currentColor\"/>\n </svg>\n </span>\n }\n </div>\n }\n</div>\n","import { Component } from '@angular/core';\nimport {AppSvgIconComponent} from \"../app-svg-icon/app-svg-icon.component\";\n\n@Component({\n selector: 'app-close-button',\n standalone: true,\n imports: [\n AppSvgIconComponent\n ],\n templateUrl: './close-button.component.html',\n styleUrl: './close-button.component.scss'\n})\nexport class CloseButtonComponent {\n\n}\n","<p class=\"rounded-lg p-3 border border-neutral-300 cursor-pointer hover:bg-neutral-50\">\n <app-svg-icon src=\"assets/icons/close.svg\" class=\"text-neutral-800\" [size]=\"12\"></app-svg-icon>\n</p>\n","import {Component, input, output} from '@angular/core';\n\n@Component({\n selector: 'app-context-menu',\n standalone: true,\n imports: [\n ],\n templateUrl: './context-menu.component.html',\n styleUrl: './context-menu.component.scss'\n})\nexport class ContextMenuComponent {\n actions = input<ContextMenuAction[]>();\n onActionClicked = output<string>();\n\n _onActionClicked($event: MouseEvent, action: ContextMenuAction) {\n $event.stopPropagation();\n this.onActionClicked.emit(action.actionKey);\n }\n}\n\n\nexport interface ContextMenuAction {\n iconPath?: string;\n label: string;\n actionKey: string;\n}\n\n","<!--<button mat-icon-button [matMenuTriggerFor]=\"menu\">-->\n<!-- <app-context-menu-icon></app-context-menu-icon>-->\n<!--&lt;!&ndash; <svg class=\"h-[20px] w-[20px] text-neutral-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">&ndash;&gt;-->\n<!--&lt;!&ndash; <path d=\"M12 16C12.5304 16 13.0391 16.2107 13.4142 16.5858C13.7893 16.9609 14 17.4696 14 18C14 18.5304 13.7893 19.0391 13.4142 19.4142C13.0391 19.7893 12.5304 20 12 20C11.4696 20 10.9609 19.7893 10.5858 19.4142C10.2107 19.0391 10 18.5304 10 18C10 17.4696 10.2107 16.9609 10.5858 16.5858C10.9609 16.2107 11.4696 16 12 16ZM12 10C12.5304 10 13.0391 10.2107 13.4142 10.5858C13.7893 10.9609 14 11.4696 14 12C14 12.5304 13.7893 13.0391 13.4142 13.4142C13.0391 13.7893 12.5304 14 12 14C11.4696 14 10.9609 13.7893 10.5858 13.4142C10.2107 13.0391 10 12.5304 10 12C10 11.4696 10.2107 10.9609 10.5858 10.5858C10.9609 10.2107 11.4696 10 12 10ZM12 4C12.5304 4 13.0391 4.21071 13.4142 4.58579C13.7893 4.96086 14 5.46957 14 6C14 6.53043 13.7893 7.03914 13.4142 7.41421C13.0391 7.78929 12.5304 8 12 8C11.4696 8 10.9609 7.78929 10.5858 7.41421C10.2107 7.03914 10 6.53043 10 6C10 5.46957 10.2107 4.96086 10.5858 4.58579C10.9609 4.21071 11.4696 4 12 4Z\" fill=\"currentColor\"/>&ndash;&gt;-->\n<!--&lt;!&ndash; </svg>&ndash;&gt;-->\n<!--</button>-->\n\n<!--<mat-menu #menu=\"matMenu\">-->\n\n<!-- @for (action of actions(); track action.actionKey) {-->\n<!-- <div (click)=\"_onActionClicked($event, action)\" class=\"flex items-center gap-3 py-3 px-3 hover:bg-neutral-100 cursor-pointer\">-->\n<!-- @if(action.iconPath != null && action.iconPath != '') {-->\n<!-- <app-svg-icon class=\"text-neutral-600\" [src]=\"action.iconPath\" [size]=\"20\"></app-svg-icon>-->\n<!-- }-->\n<!-- <span class=\"text-body2 text-neutral-600 font-medium\">{{ action.label }}</span>-->\n<!-- </div>-->\n<!-- }-->\n<!--</mat-menu>-->\n","import {Component, inject, output} from '@angular/core';\nimport {DIALOG_DATA, DialogRef} from \"@angular/cdk/dialog\";\nimport {AppSvgIconComponent} from '../../app-svg-icon/app-svg-icon.component';\nimport {ContextMenuButtonAction} from '../context-menu-button.component';\n\n@Component({\n selector: 'app-overlay-context-menu',\n imports: [\n AppSvgIconComponent,\n ],\n templateUrl: './overlay-context-menu.component.html',\n styleUrl: './overlay-context-menu.component.scss'\n})\nexport class OverlayContextMenuComponent {\n\n dialogRef = inject(DialogRef);\n actions: ContextMenuButtonAction[] = inject(DIALOG_DATA);\n\n _onActionClicked($event: MouseEvent, action: ContextMenuButtonAction) {\n this.dialogRef.close(action.actionKey);\n $event.stopPropagation();\n }\n}\n","<div class=\"flex flex-col gap-2 min-w-[200px] py-2\">\n @for (action of actions; track action.actionKey) {\n <div (click)=\"_onActionClicked($event, action)\"\n class=\"flex items-center gap-3 py-3 px-3 hover:bg-neutral-100/80 cursor-pointer\">\n @if (action.iconPath != null && action.iconPath != '') {\n <app-svg-icon class=\"text-neutral-600\" [src]=\"action.iconPath\" [size]=\"20\"></app-svg-icon>\n }\n <span class=\"text-caption text-neutral-600 font-normal\">{{ action.label }}</span>\n </div>\n }\n</div>\n","import {Component, ElementRef, inject, input, OnDestroy, output, ViewChild} from '@angular/core';\nimport {FlexibleConnectedPositionStrategy, GlobalPositionStrategy, Overlay} from \"@angular/cdk/overlay\";\nimport {Dialog, DialogRef} from \"@angular/cdk/dialog\";\nimport {Subscription} from \"rxjs\";\nimport {OverlayContextMenuComponent} from './overlay-context-menu/overlay-context-menu.component';\n\n@Component({\n selector: 'app-context-menu-button',\n imports: [],\n templateUrl: './context-menu-button.component.html',\n standalone: true,\n styleUrl: './context-menu-button.component.scss'\n})\nexport class ContextMenuButtonComponent implements OnDestroy {\n\n @ViewChild('trigger', {static: true}) trigger!: ElementRef;\n overlay = inject(Overlay);\n dialog = inject(Dialog);\n\n actions = input<ContextMenuButtonAction[]>();\n positionPreference = input<'topLeft' | 'topRight' | 'topCenter' |\n 'bottomLeft' | 'bottomRight' | 'bottomCenter' |\n 'leftTop' | 'leftCenter' | 'leftBottom' |\n 'rightTop' | 'rightCenter' | 'rightBottom' |\n 'center'>('bottomCenter');\n onActionClicked = output<string>();\n\n private basePanelClass = ['bg-white', 'shadow-2'];\n\n private dialogRef?: DialogRef<any, OverlayContextMenuComponent>;\n private subscription?: Subscription;\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n onMenuClicked() {\n\n let positionStrategy: FlexibleConnectedPositionStrategy | GlobalPositionStrategy | null;\n let scrollStrategy: 'noop' | 'block' | 'reposition' | 'close' = 'block';\n\n let disableClose = false;\n\n const positionMappings: any = {\n // **BOTTOM POSITIONS**\n bottomRight: [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 8 },\n ],\n bottomCenter: [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\n ],\n bottomLeft: [\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 8 },\n ],\n\n // **TOP POSITIONS**\n topRight: [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -8 },\n ],\n topCenter: [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\n ],\n topLeft: [\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -8 },\n ],\n\n // **LEFT POSITIONS**\n leftBottom: [\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },\n ],\n leftCenter: [\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\n ],\n leftTop: [\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -8 },\n ],\n\n // **RIGHT POSITIONS**\n rightBottom: [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },\n ],\n rightCenter: [\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\n ],\n rightTop: [\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 8 },\n ],\n\n // **CENTER**\n center: [\n { originX: 'center', originY: 'center', overlayX: 'center', overlayY: 'center' },\n ]\n };\n\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.trigger)\n .withFlexibleDimensions(false)\n .withPush(true)\n .withPositions(positionMappings[this.positionPreference()] || positionMappings.bottomCenter);\n\n\n const scrollStrategyMapping = {\n noop: this.overlay.scrollStrategies.noop(),\n block: this.overlay.scrollStrategies.block(),\n reposition: this.overlay.scrollStrategies.reposition(),\n close: this.overlay.scrollStrategies.close(),\n };\n\n const appliedScrollStrategy = scrollStrategyMapping[scrollStrategy] ?? this.overlay.scrollStrategies.block();\n\n this.dialogRef = this.dialog.open(OverlayContextMenuComponent, {\n positionStrategy: positionStrategy,\n scrollStrategy: appliedScrollStrategy,\n disableClose: disableClose,\n backdropClass: ['overflow-clip'],\n panelClass: [...this.basePanelClass, 'rounded-xl', 'overflow-clip'],\n data: this.actions()\n });\n\n this.subscription = this.dialogRef.closed.subscribe((actionKey: string) => {\n this.onActionClicked.emit(actionKey);\n });\n }\n}\n\n\nexport interface ContextMenuButtonAction {\n iconPath?: string;\n label: string;\n actionKey: string;\n}\n","<div #trigger (click)=\"onMenuClicked()\" class=\"flex w-min h-min justify-center items-center p-2 rounded-full hover:bg-neutral-100 cursor-pointer transition-all duration-300\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" class=\"size-6 text-neutral-500\">\n <path d=\"M12 16C12.5304 16 13.0391 16.2107 13.4142 16.5858C13.7893 16.9609 14 17.4696 14 18C14 18.5304 13.7893 19.0391 13.4142 19.4142C13.0391 19.7893 12.5304 20 12 20C11.4696 20 10.9609 19.7893 10.5858 19.4142C10.2107 19.0391 10 18.5304 10 18C10 17.4696 10.2107 16.9609 10.5858 16.5858C10.9609 16.2107 11.4696 16 12 16ZM12 10C12.5304 10 13.0391 10.2107 13.4142 10.5858C13.7893 10.9609 14 11.4696 14 12C14 12.5304 13.7893 13.0391 13.4142 13.4142C13.0391 13.7893 12.5304 14 12 14C11.4696 14 10.9609 13.7893 10.5858 13.4142C10.2107 13.0391 10 12.5304 10 12C10 11.4696 10.2107 10.9609 10.5858 10.5858C10.9609 10.2107 11.4696 10 12 10ZM12 4C12.5304 4 13.0391 4.21071 13.4142 4.58579C13.7893 4.96086 14 5.46957 14 6C14 6.53043 13.7893 7.03914 13.4142 7.41421C13.0391 7.78929 12.5304 8 12 8C11.4696 8 10.9609 7.78929 10.5858 7.41421C10.2107 7.03914 10 6.53043 10 6C10 5.46957 10.2107 4.96086 10.5858 4.58579C10.9609 4.21071 11.4696 4 12 4Z\" fill=\"currentColor\"/>\n </svg>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-context-menu-icon',\n standalone: true,\n imports: [\n ],\n templateUrl: './context-menu-icon.component.html',\n styleUrl: './context-menu-icon.component.scss'\n})\nexport class ContextMenuIconComponent {\n\n}\n","<div class=\"flex w-min h-min justify-center items-center p-2 rounded-full hover:bg-neutral-100 cursor-pointer transition-all duration-300\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" class=\"size-6 text-neutral-500\">\n <path d=\"M12 16C12.5304 16 13.0391 16.2107 13.4142 16.5858C13.7893 16.9609 14 17.4696 14 18C14 18.5304 13.7893 19.0391 13.4142 19.4142C13.0391 19.7893 12.5304 20 12 20C11.4696 20 10.9609 19.7893 10.5858 19.4142C10.2107 19.0391 10 18.5304 10 18C10 17.4696 10.2107 16.9609 10.5858 16.5858C10.9609 16.2107 11.4696 16 12 16ZM12 10C12.5304 10 13.0391 10.2107 13.4142 10.5858C13.7893 10.9609 14 11.4696 14 12C14 12.5304 13.7893 13.0391 13.4142 13.4142C13.0391 13.7893 12.5304 14 12 14C11.4696 14 10.9609 13.7893 10.5858 13.4142C10.2107 13.0391 10 12.5304 10 12C10 11.4696 10.2107 10.9609 10.5858 10.5858C10.9609 10.2107 11.4696 10 12 10ZM12 4C12.5304 4 13.0391 4.21071 13.4142 4.58579C13.7893 4.96086 14 5.46957 14 6C14 6.53043 13.7893 7.03914 13.4142 7.41421C13.0391 7.78929 12.5304 8 12 8C11.4696 8 10.9609 7.78929 10.5858 7.41421C10.2107 7.03914 10 6.53043 10 6C10 5.46957 10.2107 4.96086 10.5858 4.58579C10.9609 4.21071 11.4696 4 12 4Z\" fill=\"currentColor\"/>\n </svg>\n</div>\n","import {Component, input, Input, output} from '@angular/core';\nimport {TableActionEvent} from '../data-table.component';\n\n@Component({\n selector: 'lib-table-custom-component',\n imports: [],\n templateUrl: './table-custom.component.html',\n styleUrl: './table-custom.component.scss'\n})\nexport class TableCustomComponent<T> {\n @Input() rowData!: T;\n @Input() data: any;\n @Input() rowPosition: number | undefined;\n @Input() isLastRow: boolean = false;\n\n actionPerformed = output<TableActionEvent>();\n}\n","","import {Component, input, Input} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-status-badge',\n imports: [\n NgClass\n ],\n templateUrl: './status-badge.component.html',\n standalone: true,\n styleUrls: ['./status-badge.component.scss']\n})\nexport class StatusBadgeComponent {\n status = input.required<string | null | undefined>();\n backgroundColorClass = input.required<string | null>();\n indicatorColor = input<string | null>();\n textColorClass = input.required<string | null>();\n borderColorClass = input.required<string | null>();\n isUpperCase = input<boolean>(false);\n}\n","<div class=\"flex px-2.5 py-1.5 border items-center rounded-full gap-2\"\n [ngClass]=\"[backgroundColorClass() ?? 'bg-neutral-50', borderColorClass() ?? '']\">\n @if(indicatorColor()) {\n <span class=\"h-[6px] w-[6px] rounded-full\" [ngClass]=\"indicatorColor() ?? 'bg-neutral-500'\"></span>\n }\n <span class=\"text-overline\"\n [ngClass]=\"[textColorClass() ?? 'text-neutral-500', isUpperCase() ? 'uppercase' : '']\">{{ status() ?? 'Unknown' }}</span>\n</div>\n","import {AfterContentInit, Component, input, OnInit, signal} from '@angular/core';\nimport {ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\n\n\n\n@Component({\n selector: 'app-checkbox',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n ],\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss'\n})\nexport class CheckboxComponent extends BaseControlValueAccessorV3<boolean> implements OnInit, AfterContentInit {\n title = input<string | null>();\n id = signal<string>('');\n\n ngOnInit(): void {\n this.id.set(this.getId());\n }\n\n protected override onValueReady(value: boolean): void {}\n\n onCheckboxSelected($event: Event, enterKeyPressed: boolean = false) {\n if (!this.disabled()) {\n this.markAsTouched();\n let checkbox = $event.target as HTMLInputElement;\n let value = ($event.target as HTMLInputElement).checked;\n if(enterKeyPressed) {\n value = !value;\n checkbox.checked = value;\n }\n this.onValueChange(value);\n }\n }\n\n private getId(): string {\n const randomNumber = Math.floor(1000 + Math.random() * 9000);\n return `checkbox-${randomNumber.toString()}`;\n }\n\n handleKeydown($event: KeyboardEvent) {\n if($event.key == 'Enter') {\n this.onCheckboxSelected($event, true);\n }\n }\n}\n","<div class=\"flex items-center gap-3\">\n <label class=\"relative flex items-center rounded-full cursor-pointer py-3\" [for]=\"id()\">\n <input type=\"checkbox\"\n (change)=\"onCheckboxSelected($event)\"\n [formControl]=\"formControl\"\n class=\"before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-sm border-2 border-neutral-600 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-primary-200 before:opacity-0 before:transition-opacity checked:border-primary-500 checked:bg-primary-500 checked:before:bg-neutral-900\"\n [id]=\"id()\"\n (keydown)=\"handleKeydown($event)\"/>\n <span\n class=\"absolute text-white transition-opacity opacity-0 pointer-events-none top-2/4 left-2/4 -translate-y-2/4 -translate-x-2/4 peer-checked:opacity-100\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-3.5 w-3.5\" viewBox=\"0 0 20 20\" fill=\"currentColor\"\n stroke=\"currentColor\" stroke-width=\"1\">\n <path fill-rule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clip-rule=\"evenodd\"></path>\n </svg>\n </span>\n </label>\n @if(title()) {\n <label class=\"m-0 text-body2 cursor-pointer select-none\" [for]=\"id()\">{{ title() }}</label>\n }\n</div>\n","import {InjectionToken} from '@angular/core';\n\nexport const defaultErrors = {\n required: () => `Required`,\n minlength: ({requiredLength, actualLength}: any) =>\n `Minimum ${requiredLength} characters required`,\n maxlength: ({requiredLength, actualLength}: any) =>\n `Maximum ${requiredLength} characters allowed`,\n min: ({min, actual}: any) => `Minimum ${min} required`,\n max: ({max, actual}: any) => `Maximum ${max} allowed`,\n matchOthers: () => 'Passwords does not match',\n email: () => 'Please enter a valid email',\n invalidDate: (errorMessage: any) => errorMessage,\n};\n\nexport const FORM_ERRORS = new InjectionToken('FORM_ERRORS', {\n providedIn: 'root',\n factory: () => defaultErrors\n});\n","import {Inject, Pipe, PipeTransform} from '@angular/core';\nimport {ValidationErrors} from '@angular/forms';\nimport {FORM_ERRORS} from './form-errors';\n\n@Pipe({standalone: true, name: 'humanizeFormMessages'})\nexport class HumanizeFormMessagesPipe implements PipeTransform {\n constructor(@Inject(FORM_ERRORS) private messages: any) {\n }\n\n transform(\n validationErrors: ValidationErrors,\n overriddenMessages: { [key: string]: string }\n ) {\n if (!validationErrors) {\n return '';\n }\n\n // Allow the possibility to override messages\n const messages = {\n ...this.messages,\n ...overriddenMessages\n };\n\n const messageKey = Object.keys(validationErrors)[0];\n const getMessage = messages[messageKey];\n const message = getMessage\n ? getMessage(validationErrors[messageKey])\n : 'Invalid field';\n return message;\n }\n}\n","import {Component, input, signal} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-base-input',\n standalone: true,\n imports: [\n NgClass\n ],\n templateUrl: './base-input.component.html',\n styleUrl: './base-input.component.scss'\n})\nexport class BaseInputComponent {\n title = input<string | null | undefined>(null);\n isRequiredField = input<boolean>(false);\n fullWidth = input<boolean>(false);\n inputType = input<'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url' | 'file'>('text');\n}\n","<div class=\"app-form-control inline-flex items-center cursor-pointer select-none\"\n [ngClass]=\"fullWidth() ? 'w-full' : ''\">\n <div class=\"flex gap-6 items-center w-full\">\n <div class=\"flex flex-col justify-center gap-2 w-full\">\n @if (title()) {\n <div class=\"flex gap-1\">\n <span class=\"text-body2 text-nowrap text-primary-900\">{{ title() }}</span>\n @if (isRequiredField()) {\n <span class=\"text-body2 text-error-600\">*</span>\n }\n </div>\n }\n <ng-content class=\"w-full\" select=\"[input]\"></ng-content>\n\n <ng-content select=\"[error]\"></ng-content>\n\n </div>\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n</div>\n","import {\n AfterContentInit, AfterViewInit,\n Component,\n inject,\n input, OnDestroy,\n output,\n signal\n} from '@angular/core';\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {NgClass} from \"@angular/common\";\nimport {CommonModule} from '@angular/common';\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {NgxMaskDirective} from \"ngx-mask\";\nimport {debounceTime, Subject} from \"rxjs\";\n\n@Component({\n selector: 'app-text-input',\n standalone: true,\n imports: [\n NgClass,\n ReactiveFormsModule,\n HumanizeFormMessagesPipe,\n AppSvgIconComponent,\n CommonModule,\n BaseInputComponent,\n NgxMaskDirective\n ],\n templateUrl: './text-input.component.html',\n styleUrl: './text-input.component.scss'\n})\nexport class TextInputComponent extends BaseControlValueAccessor implements AfterContentInit, AfterViewInit, OnDestroy {\n\n appearance = input<'fill' | 'outline'>('outline');\n type = input<'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url' | 'time'>('text');\n viewType = input<'text' | 'text-area'>('text');\n iconSrc = input<string | null>();\n actionIcon = input<string | null>();\n label = input<string | null>();\n fullWidth = input<boolean>(false);\n placeholder = input<string>('');\n errorMessages = input<{ [key: string]: string }>({});\n showErrorSpace = input<boolean>(false);\n mask = input<string | null>(null);\n debounceSearchEnabled = input<boolean>(true);\n\n changeValue = output<string>();\n actionIconClicked = output();\n\n isFocused = signal(false);\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n private searchSubject: Subject<string> = new Subject<string>();\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n ngAfterViewInit(): void {\n if (this.debounceSearchEnabled()) {\n this.searchSubject.pipe(debounceTime(600)).subscribe((value: string) => {\n this.changeValue.emit(value); // Emit the value after debounce\n });\n }\n }\n\n ngOnDestroy(): void {\n try {\n this.searchSubject.complete();\n } catch (e) {\n }\n }\n\n onValueChange(event: any) {\n const target = event.target as HTMLInputElement;\n this.onChange(target.value);\n if (this.debounceSearchEnabled()) {\n this.searchSubject.next(target.value);\n } else {\n this.changeValue.emit(target.value);\n }\n }\n\n getClass() {\n let cls = '';\n if (this.iconSrc()) {\n cls = cls + 'pr-3 pl-10';\n } else {\n cls = cls + 'px-3';\n }\n\n if (this.fullWidth()) {\n cls = cls + ' ' + 'w-full';\n }\n\n return cls;\n }\n\n onActionClicked() {\n this.actionIconClicked.emit();\n }\n\n onFocus() {\n this.isFocused.set(true);\n }\n\n onBlur() {\n this.onTouched();\n this.isFocused.set(false);\n }\n}\n","<app-base-input #inputElement [title]=\"label()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"relative flex items-center w-full text-neutral-400 bg-white shadow-1 rounded-md\">\n @if (iconSrc()) {\n <app-svg-icon [size]=\"18\" [src]=\"iconSrc()!\"\n class=\"absolute pointer-events-none ml-3 text-neutral-400\"></app-svg-icon>\n }\n\n<!-- <p>{{ formControl.getError('required') ? placeholder + ' ' : placeholder }}</p>-->\n\n <input\n [mask]=\"mask()\"\n class=\"h-[46px] placeholder-neutral-400 text-black rounded-md border-none outline-none focus:border-none ring-1 ring-neutral-300 focus:ring-primary-500 focus:ring-2 transition-all duration-300\"\n [class.text-neutral-400]=\"formControl.disabled\"\n [class.disabled-placeholder]=\"formControl.disabled\"\n [formControl]=\"formControl\"\n [ngClass]=\"getClass()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (input)=\"onValueChange($event)\">\n\n @if (actionIcon()) {\n <div (click)=\"onActionClicked()\"\n class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full\">\n <app-svg-icon [size]=\"18\" [src]=\"actionIcon()!\" class=\"text-neutral-400 cursor-pointer\">\n </app-svg-icon>\n </div>\n }\n </div>\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-text-button-small',\n standalone: true,\n imports: [],\n templateUrl: './text-button-small.component.html',\n styleUrl: './text-button-small.component.scss'\n})\nexport class TextButtonSmall {\n\n}\n","<span class=\"text-body2 cursor-pointer py-2 px-4 text-info-500 hover:bg-info-50 rounded-full transition-all duration-300\">\n <ng-content></ng-content>\n</span>\n","import {\n Component,\n ComponentRef, input,\n Input,\n OnChanges, OnDestroy, output, OutputEmitterRef, OutputRefSubscription,\n SimpleChanges,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {TableActionEvent} from '../data-table/data-table.component';\n\n@Component({\n selector: 'app-dynamic-renderer',\n imports: [],\n templateUrl: './dynamic-renderer.component.html',\n styleUrl: './dynamic-renderer.component.scss'\n})\nexport class DynamicRendererComponent<T> implements OnChanges, OnDestroy {\n @Input() component!: Type<any>;\n @Input() rowData!: T;\n data = input<any>();\n rowPosition = input<number | undefined>();\n isLastRow = input<boolean>(false);\n\n actionPerformed = output<TableActionEvent>();\n\n @ViewChild('container', {read: ViewContainerRef, static: true})\n container!: ViewContainerRef;\n\n private componentRef?: ComponentRef<any>;\n private actionSubscription?: OutputRefSubscription;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['component'] || changes['rowData'] || changes['data'] || changes['rowPosition'] || changes['isLastRow']) {\n this.loadComponent();\n }\n }\n\n private loadComponent(): void {\n if (!this.component) {\n return;\n }\n\n this.container.clear();\n\n this.componentRef = this.container.createComponent(this.component);\n\n\n if (this.componentRef.instance) {\n (this.componentRef.instance as any).rowData = this.rowData;\n (this.componentRef.instance as any).data = this.data();\n (this.componentRef.instance as any).rowPosition = this.rowPosition();\n (this.componentRef.instance as any).isLastRow = this.isLastRow();\n\n this.actionSubscription?.unsubscribe();\n\n let emitter: OutputEmitterRef<any> = this.componentRef.instance.actionPerformed;\n if (emitter) {\n this.actionSubscription = emitter.subscribe(\n (event: any) => {\n this.actionPerformed.emit(event);\n }\n );\n }\n\n }\n }\n\n ngOnDestroy(): void {\n this.actionSubscription?.unsubscribe();\n }\n}\n","<ng-container #container></ng-container>\n","import {\n AfterViewInit,\n Component,\n ContentChildren,\n inject,\n Injector,\n input,\n output, OutputEmitterRef, OutputRefSubscription,\n QueryList,\n signal, Type,\n ViewChild\n} from '@angular/core';\nimport {State} from \"../../base/base-state\";\nimport {PaginationComponent, PaginationEvent} from \"../pagination/pagination.component\";\nimport {NoDataTableComponent} from \"../no-data-table/no-data-table.component\";\nimport {ShimmerComponent} from \"../shimmer/shimmer.component\";\nimport {DatePipe, NgClass} from \"@angular/common\";\nimport {resolveTemplateWithObject} from \"../../common-utils/template-resolver\";\nimport {ContextMenuAction, ContextMenuComponent} from \"../context-menu/context-menu.component\";\nimport {AppSvgIconComponent} from \"../app-svg-icon/app-svg-icon.component\";\nimport {StatusBadgeComponent} from \"../status-badge/status-badge.component\";\nimport {SortableTableDirective, TableSortEvent} from \"../_base/base-table/sortable-table.directive\";\nimport {TableResizableColumnsDirective} from \"../_base/base-table/table-resizable-columns.directive\";\nimport {Overlay, OverlayConfig} from \"@angular/cdk/overlay\";\nimport {CdkPortal} from \"@angular/cdk/portal\";\nimport {CheckboxComponent} from \"../../inputs/checkbox/checkbox.component\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TextInputComponent} from '../../inputs/text-input/text-input.component';\nimport {TextButtonSmall} from '../text-button-small/text-button-small.component';\nimport {DynamicRendererComponent} from '../dynamic-renderer/dynamic-renderer.component';\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\n\n@Component({\n selector: 'app-data-table',\n standalone: true,\n imports: [\n PaginationComponent,\n NoDataTableComponent,\n ShimmerComponent,\n NgClass,\n DatePipe,\n AppSvgIconComponent,\n ContextMenuComponent,\n StatusBadgeComponent,\n SortableTableDirective,\n TableResizableColumnsDirective,\n CdkPortal,\n CheckboxComponent,\n FormsModule,\n TextInputComponent,\n TextButtonSmall,\n DynamicRendererComponent\n ],\n templateUrl: './data-table.component.html',\n styleUrl: './data-table.component.scss',\n})\nexport class DataTableComponent<T> extends BaseControlValueAccessorV3<TableStateEvent> implements AfterViewInit {\n\n @ContentChildren('filter') headerComponents!: QueryList<any>;\n\n columnDefs = input.required<ColumnDef[]>();\n state = input.required<State<any>>();\n pageSize = input(50);\n enableHorizontallyScrollable = input(false);\n enableResizableColumns = input(false);\n enableClickableRows = input(false);\n expandableComponent = input<any>();\n enableColumnsConfig = input(false);\n filterComponent = input<any>();\n enableSearch = input(true);\n disableInitialLoad = input(false);\n\n pageChange = output<PaginationEvent>();\n sortChanged = output<TableSortEvent>();\n tableStateChanged = output<TableStateEvent>();\n onActionPerformed = output<TableActionEvent>();\n filterChanged = output<any>();\n onRowClicked = output<any>();\n\n subscriptions: OutputRefSubscription[] = [];\n\n overlay = inject(Overlay);\n @ViewChild(CdkPortal) portal!: CdkPortal;\n\n paginationEvent?: PaginationEvent;\n tableSortEvent?: TableSortEvent;\n private searchText: string = '';\n\n ngAfterViewInit(): void {\n let paginationEvent: PaginationEvent = {\n pageNumber: 1, pageSize: this.pageSize()\n }\n this.pageChange.emit(paginationEvent);\n\n let tableStateEvent: TableStateEvent = {\n searchText: '',\n paginationEvent: paginationEvent,\n tableSortEvent: this.tableSortEvent\n };\n\n if (!this.disableInitialLoad()) {\n this.tableStateChanged.emit(tableStateEvent);\n }\n\n this.onValueChange(tableStateEvent);\n\n this.headerComponents.forEach((component) => {\n if (component.filtersChanged) {\n let emitter: OutputEmitterRef<any> = component.filtersChanged;\n const sub = emitter.subscribe((newFilters: any) => {\n this.filterChanged.emit(newFilters);\n });\n this.subscriptions.push(sub);\n }\n });\n }\n\n protected override onValueReady(value: TableStateEvent): void {\n }\n\n onColumnSettingsClicked(columnsConfigTriggerElement: HTMLDivElement) {\n const config = new OverlayConfig({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(columnsConfigTriggerElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: 20,\n offsetY: 10,\n }\n ]),\n hasBackdrop: true,\n backdropClass: ['bg-black', 'bg-opacity-0', 'shadow-1']\n });\n\n const overlayRef = this.overlay.create(config);\n overlayRef.attach(this.portal);\n\n overlayRef.backdropClick().subscribe(() => overlayRef.detach());\n }\n\n onSearchTextChanged($event: string) {\n this.searchText = $event;\n let paginationEvent: PaginationEvent = {\n pageNumber: 1, pageSize: this.pageSize()\n }\n let tableStateEvent: TableStateEvent = {\n searchText: this.searchText,\n paginationEvent: paginationEvent,\n tableSortEvent: this.tableSortEvent\n };\n this.tableStateChanged.emit(tableStateEvent);\n this.onValueChange(tableStateEvent);\n }\n\n onColumnVisibleOrHide($event: boolean, column: ColumnDef) {\n column.visible = $event;\n }\n\n onSelectAllColumnClicked() {\n let columns = this.columnDefs() ?? [];\n columns.forEach(column => {\n column.visible = true;\n });\n }\n\n getPropertyValue(item: any, column: ColumnDef,): any {\n\n if (column.displayTemplate) {\n return resolveTemplateWithObject(item, column.displayTemplate);\n }\n\n let value = '';\n\n if (column.key) {\n value = column.key.split('.').reduce((acc, part) => acc && acc[part], item);\n }\n\n if (column.formatter) {\n return column.formatter ? column.formatter(value) : value;\n } else if (column.objectFormatter) {\n return column.objectFormatter ? column.objectFormatter(item) : item;\n } else {\n return value;\n }\n }\n\n onPageChange(event: PaginationEvent) {\n let tableStateEvent: TableStateEvent = {\n searchText: this.searchText,\n paginationEvent: event,\n tableSortEvent: this.tableSortEvent\n };\n this.pageChange.emit(event);\n this.tableStateChanged.emit(tableStateEvent);\n this.onValueChange(tableStateEvent);\n }\n\n onSortChanged(event: TableSortEvent) {\n let tableStateEvent: TableStateEvent = {\n searchText: '',\n paginationEvent: {\n pageNumber: 1,\n pageSize: this.pageSize()\n },\n tableSortEvent: event\n };\n this.sortChanged.emit(event);\n this.tableStateChanged.emit(tableStateEvent);\n this.onValueChange(tableStateEvent);\n }\n\n getThTrClass(column: ColumnDef) {\n switch (column.alignment) {\n case 'left':\n return 'text-left';\n case 'center':\n return 'text-center';\n case 'right':\n return 'text-right';\n default:\n return 'text-left';\n }\n }\n\n getFlexJustify(column: ColumnDef) {\n switch (column.alignment) {\n case 'left':\n return 'justify-start';\n case 'center':\n return 'justify-center';\n case 'right':\n return 'justify-end';\n default:\n return 'justify-start';\n }\n\n }\n\n getBadgeProperty(item: any, column: ColumnDef): BadgeConfigProperty | null {\n let badgeConfigProperties = column.badgeConfig?.properties ?? [];\n let matchedBadgeConfigProperty: BadgeConfigProperty | null = null;\n\n badgeConfigProperties.forEach(badgeConfigProperty => {\n let value = this.getPropertyValue(item, column);\n if (value === badgeConfigProperty.data) {\n matchedBadgeConfigProperty = badgeConfigProperty;\n }\n });\n return matchedBadgeConfigProperty;\n }\n\n getContextMenuActions(actions: ContextMenuActionConfig[]) {\n return actions.map(action => {\n let configAction: ContextMenuAction = {\n iconPath: action.iconPath,\n label: action.label,\n actionKey: action.actionKey\n };\n return configAction;\n })\n }\n\n _onActionClicked($event: string, item: any, mouseEvent: MouseEvent | null) {\n if (mouseEvent) {\n mouseEvent.stopPropagation();\n }\n let tableActionEvent: TableActionEvent = {\n actionKey: $event,\n item: item\n };\n this.onActionPerformed.emit(tableActionEvent);\n }\n\n expandedRowIndex = signal<number | null>(null);\n\n onRowExpandedClicked(i: number) {\n if (this.expandedRowIndex() == i) {\n this.expandedRowIndex.set(null);\n } else {\n this.expandedRowIndex.set(i);\n }\n }\n\n _onRowClicked(item: any) {\n this.onRowClicked.emit(item);\n }\n\n onCellActionPerformed($event: TableActionEvent) {\n this.onActionPerformed.emit($event);\n }\n\n onRowActionPerformed($event: TableActionEvent) {\n this.onActionPerformed.emit($event);\n }\n}\n\nexport interface ColumnDef {\n title: string;\n key?: string;\n displayTemplate?: string;\n sortKey?: string;\n alignment?: 'left' | 'center' | 'right';\n type: 'text' | 'date' | 'badge' | 'custom' | 'actions';\n pinned?: 'left' | 'right' | null;\n visible?: boolean | null;\n\n component?: Type<any>;\n\n textConfig?: TextConfig;\n dateConfig?: DateConfig;\n badgeConfig?: BadgeConfig;\n customConfig?: CustomRendererConfig;\n actionsConfig?: ActionConfig;\n\n formatter?: (value: any) => any;\n objectFormatter?: (value: any) => any;\n propertyStyle?: (value: any) => any;\n}\n\n\nexport interface TextConfig {\n textColorClass?: string;\n}\n\nexport interface DateConfig {\n dateFormat?: string;\n showIcon?: boolean;\n}\n\nexport interface BadgeConfig {\n properties: BadgeConfigProperty[];\n}\n\nexport interface BadgeConfigProperty {\n data: string;\n displayText: string;\n backgroundColorClass?: string;\n borderColorClass?: string;\n textColorClass?: string;\n indicatorColorClass?: string;\n}\n\nexport interface CustomRendererConfig {\n data?: any;\n}\n\nexport interface ActionConfig {\n iconActions?: IconAction[];\n threeDotMenuActions?: ContextMenuActionConfig[] | null;\n textMenuActions?: ContextMenuActionConfig[] | null;\n components?: Type<any>[];\n}\n\nexport interface IconAction {\n iconPath: string;\n actionKey: string;\n label?: string;\n}\n\nexport interface ContextMenuActionConfig {\n iconPath?: string;\n actionKey: string;\n label: string;\n}\n\nexport interface TableActionEvent {\n actionKey: string;\n item: any;\n data?: any;\n}\n\n\nexport interface TableStateEvent {\n searchText: string;\n paginationEvent?: PaginationEvent;\n tableSortEvent?: TableSortEvent;\n}\n","<div class=\"flex flex-col bg-white rounded-2xl overflow-clip h-full\">\n\n @if (enableSearch() || headerComponents.length > 0) {\n <div class=\"flex px-6 py-5 border-b border-neutral-100 justify-between\">\n @if (enableSearch()) {\n <app-text-input [iconSrc]=\"'assets/icons/search.svg'\"\n placeholder=\"Search...\"\n type=\"search\"\n [fullWidth]=\"false\"\n (changeValue)=\"onSearchTextChanged($event)\">\n </app-text-input>\n }\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n }\n\n <div class=\"grow h-full w-full min-w-full bg-white overflow-x-auto\">\n <table class=\"h-min w-full\"\n [ngClass]=\"[enableHorizontallyScrollable() ? 'overflow-x-auto' : '']\"\n [appTableResizableColumns]=\"enableResizableColumns()\">\n\n <!-- Table header-->\n <thead class=\"sticky top-0 bg-white z-10\">\n <tr sortableTable (sortChange)=\"onSortChanged($event)\" class=\"text-overline text-neutral-500 text-nowrap h-min\">\n\n @if (expandableComponent()) {\n <th class=\"sticky left-0 z-50 bg-white border-b border-gray-200 px-4 py-3\"></th>\n }\n\n @for (column of columnDefs(); track column) {\n @let isColumnVisible = column.visible || column.visible == undefined || false;\n @if (isColumnVisible) {\n <th\n [attr.data-sortable-key]=\"column.sortKey\"\n class=\"relative cursor-pointer border-b border-gray-200 px-4 py-3 text-caption font-semibold text-gray-700 uppercase tracking-wider\"\n [ngClass]=\"getThTrClass(column)\">\n {{ column.title }}\n </th>\n }\n }\n\n @if (enableColumnsConfig()) {\n <th\n class=\"sticky right-0 bg-white flex justify-center cursor-pointer items-center border-b border-gray-200 px-1.5 py-3\">\n <div\n #columnsConfigTriggerElement\n (click)=\"onColumnSettingsClicked(columnsConfigTriggerElement)\"\n class=\"flex justify-center items-center h-[28px] w-[28px] cursor-pointer rounded-full hover:bg-neutral-100 transition-all duration-500\">\n <svg class=\"h-[16px] w-[16px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 8C13.0608 8 14.0782 8.42143 14.8284 9.17157C15.5785 9.92172 16 10.9391 16 12C16 13.0609 15.5785 14.0783 14.8284 14.8284C14.0782 15.5786 13.0608 16 12 16C10.9391 16 9.92168 15.5786 9.17153 14.8284C8.42139 14.0783 7.99996 13.0609 7.99996 12C7.99996 10.9391 8.42139 9.92172 9.17153 9.17157C9.92168 8.42143 10.9391 8 12 8ZM12 10C11.4695 10 10.9608 10.2107 10.5857 10.5858C10.2107 10.9609 9.99996 11.4696 9.99996 12C9.99996 12.5304 10.2107 13.0391 10.5857 13.4142C10.9608 13.7893 11.4695 14 12 14C12.5304 14 13.0391 13.7893 13.4142 13.4142C13.7892 13.0391 14 12.5304 14 12C14 11.4696 13.7892 10.9609 13.4142 10.5858C13.0391 10.2107 12.5304 10 12 10ZM9.99996 22C9.74996 22 9.53996 21.82 9.49996 21.58L9.12996 18.93C8.49996 18.68 7.95996 18.34 7.43996 17.94L4.94996 18.95C4.72996 19.03 4.45996 18.95 4.33996 18.73L2.33996 15.27C2.20996 15.05 2.26996 14.78 2.45996 14.63L4.56996 12.97L4.49996 12L4.56996 11L2.45996 9.37C2.26996 9.22 2.20996 8.95 2.33996 8.73L4.33996 5.27C4.45996 5.05 4.72996 4.96 4.94996 5.05L7.43996 6.05C7.95996 5.66 8.49996 5.32 9.12996 5.07L9.49996 2.42C9.53996 2.18 9.74996 2 9.99996 2H14C14.25 2 14.46 2.18 14.5 2.42L14.87 5.07C15.5 5.32 16.04 5.66 16.56 6.05L19.05 5.05C19.27 4.96 19.54 5.05 19.66 5.27L21.66 8.73C21.79 8.95 21.73 9.22 21.54 9.37L19.43 11L19.5 12L19.43 13L21.54 14.63C21.73 14.78 21.79 15.05 21.66 15.27L19.66 18.73C19.54 18.95 19.27 19.04 19.05 18.95L16.56 17.95C16.04 18.34 15.5 18.68 14.87 18.93L14.5 21.58C14.46 21.82 14.25 22 14 22H9.99996ZM11.25 4L10.88 6.61C9.67996 6.86 8.61996 7.5 7.84996 8.39L5.43996 7.35L4.68996 8.65L6.79996 10.2C6.39996 11.37 6.39996 12.64 6.79996 13.8L4.67996 15.36L5.42996 16.66L7.85996 15.62C8.62996 16.5 9.67996 17.14 10.87 17.38L11.24 20H12.76L13.13 17.39C14.32 17.14 15.37 16.5 16.14 15.62L18.57 16.66L19.32 15.36L17.2 13.81C17.6 12.64 17.6 11.37 17.2 10.2L19.31 8.65L18.56 7.35L16.15 8.39C15.38 7.5 14.32 6.86 13.12 6.62L12.75 4H11.25Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n </th>\n }\n\n </tr>\n </thead>\n\n <!-- List Items-->\n <tbody class=\"h-min\">\n <ng-content select=\"[body]\"></ng-content>\n </tbody>\n\n <!-- Shimmer-->\n @if (state().initialLoading()) {\n <tbody class=\"bg-white text-center py-14\">\n <tr>\n <td colspan=\"100\" class=\"h-min\">\n <div class=\"flex flex-col gap-6 px-6 py-4\">\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n <app-shimmer type=\"multiline\"></app-shimmer>\n </div>\n </td>\n </tr>\n </tbody>\n }\n\n <!-- No Table Indicator-->\n @if (state().success() && (state().response()?.data ?? []).length <= 0) {\n <tbody>\n <tr>\n <td colspan=\"1000\">\n <div class=\"flex flex-col justify-center items-center gap-8 px-6 py-8\">\n <app-no-data-table></app-no-data-table>\n </div>\n </td>\n </tr>\n </tbody>\n }\n\n @if ((state().response()?.data ?? []).length > 0) {\n <tbody class=\"\">\n @for (item of state().response()?.data ?? []; track i; let i = $index) {\n <tr (click)=\"_onRowClicked(item)\"\n [ngClass]=\"[enableClickableRows() ? 'hover:bg-neutral-50 cursor-pointer' : '']\">\n\n @if (expandableComponent()) {\n <td class=\"sticky left-0 bg-white z-50 px-1 py-2 border-b border-gray-100 w-min select-none\">\n <div\n (click)=\"onRowExpandedClicked(i)\"\n class=\"mx-auto flex items-center justify-center h-[40px] w-[40px] rounded-full bg-neutral-50 hover:bg-neutral-100 cursor-pointer transition-all duration-500\">\n <svg class=\"h-[20px] w-[20px] text-neutral-500\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M7.41 8.58L12 13.17L16.59 8.58L18 10L12 16L6 10L7.41 8.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n </td>\n }\n\n @for (column of columnDefs(); track column) {\n\n @let isColumnVisible = column.visible || column.visible == undefined || false;\n @if (isColumnVisible) {\n <td\n class=\"px-4 py-3 border-b border-gray-100 relative text-body2 text-gray-800\"\n [ngClass]=\"[getThTrClass(column)]\">\n\n @switch (column.type) {\n @default {\n <span class=\"text-body2 text-neutral-700\"\n [ngClass]=\"column.textConfig?.textColorClass\">{{ getPropertyValue(item, column) }}</span>\n }\n @case ('text') {\n <span class=\"text-body2 text-neutral-700 text-nowrap\"\n [ngClass]=\"column.textConfig?.textColorClass\">{{ getPropertyValue(item, column) }}</span>\n }\n @case ('date') {\n <div class=\"flex items-center gap-3\" [ngClass]=\"[getFlexJustify(column)]\">\n @if (column.dateConfig?.showIcon == undefined ? true : (column.dateConfig?.showIcon)) {\n <svg class=\"h-4 w-4 text-neutral-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M19 19H5V8H19M16 1V3H8V1H6V3H5C3.89 3 3 3.89 3 5V19C3 19.5304 3.21071 20.0391 3.58579 20.4142C3.96086 20.7893 4.46957 21 5 21H19C19.5304 21 20.0391 20.7893 20.4142 20.4142C20.7893 20.0391 21 19.5304 21 19V5C21 3.89 20.1 3 19 3H18V1M17 12H12V17H17V12Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n\n @let date = getPropertyValue(item, column);\n @if (date && date != 'null') {\n <span\n class=\"text-body2 text-nowrap\">{{ date | date:column.dateConfig?.dateFormat ?? 'MMM d, y, h:mm a' }}</span>\n }\n </div>\n }\n @case ('badge') {\n @let badgeProperty = getBadgeProperty(item, column);\n <div class=\"flex items-center\" [ngClass]=\"getFlexJustify(column)\">\n <app-status-badge [backgroundColorClass]=\"badgeProperty?.backgroundColorClass ?? null\"\n [indicatorColor]=\"badgeProperty?.indicatorColorClass ?? null\"\n [borderColorClass]=\"badgeProperty?.borderColorClass ?? null\"\n [textColorClass]=\"badgeProperty?.textColorClass ?? null\"\n [isUpperCase]=\"true\"\n [status]=\"badgeProperty?.displayText ?? 'Unknown'\">\n </app-status-badge>\n </div>\n }\n @case ('custom') {\n @if (column.component) {\n <div class=\"flex items-center\">\n <app-dynamic-renderer\n [component]=\"column.component\"\n [rowData]=\"item\"\n [data]=\"column.customConfig?.data\"\n [rowPosition]=\"$index + 1\"\n [isLastRow]=\"$last\"\n (actionPerformed)=\"onRowActionPerformed($event)\">\n </app-dynamic-renderer>\n </div>\n }\n }\n @case ('actions') {\n\n <div class=\"flex items-center gap-3\" [ngClass]=\"getFlexJustify(column)\">\n @if (column.actionsConfig?.iconActions) {\n @for (iconAction of column.actionsConfig?.iconActions ?? []; track iconAction) {\n <div\n (click)=\"_onActionClicked(iconAction.actionKey, item, $event)\"\n class=\"flex items-center justify-center h-[36px] w-[36px] cursor-pointer rounded-full hover:bg-neutral-100\">\n <!-- <app-svg-icon class=\"text-neutral-500\"-->\n <!-- [matTooltip]=\"iconAction.label\"-->\n <!-- matTooltipClass=\"mt-2\"-->\n <!-- [src]=\"iconAction.iconPath\"-->\n <!-- [size]=\"20\"></app-svg-icon>-->\n <app-svg-icon class=\"text-neutral-500\"\n [src]=\"iconAction.iconPath\"\n [size]=\"20\"></app-svg-icon>\n </div>\n }\n }\n @if (column.actionsConfig?.threeDotMenuActions) {\n <app-context-menu (onActionClicked)=\"_onActionClicked($event, item, null)\"\n [actions]=\"getContextMenuActions(column.actionsConfig?.threeDotMenuActions ?? [])\"></app-context-menu>\n }\n\n @if (column.actionsConfig?.textMenuActions) {\n @for (textAction of column.actionsConfig?.textMenuActions ?? []; track textAction) {\n <app-text-button-small\n (click)=\"_onActionClicked(textAction.actionKey, item, $event)\">{{ textAction.label }}\n </app-text-button-small>\n }\n }\n\n @if (column.actionsConfig?.components) {\n <div class=\"flex items-center\">\n @for (component of (column.actionsConfig?.components ?? []); track $index) {\n <app-dynamic-renderer\n [component]=\"component\"\n [rowData]=\"item\"\n [data]=\"column.customConfig?.data\"\n [rowPosition]=\"$index + 1\"\n [isLastRow]=\"$last\"\n (actionPerformed)=\"onRowActionPerformed($event)\">\n </app-dynamic-renderer>\n }\n </div>\n }\n\n </div>\n\n }\n\n }\n\n </td>\n }\n\n }\n\n @if (enableColumnsConfig()) {\n <td\n class=\"px-1 py-3 border-b border-gray-100 w-min\">\n </td>\n }\n </tr>\n\n @if (expandableComponent()) {\n @if (i == expandedRowIndex()) {\n <tr class=\"transition-all duration-700\">\n <td colspan=\"100\">\n <div class=\"mx-4 my-4 p-4 bg-neutral-50 rounded-lg\">\n <app-dynamic-renderer\n [component]=\"expandableComponent()\"\n [rowData]=\"item\"\n (actionPerformed)=\"onCellActionPerformed($event)\">\n </app-dynamic-renderer>\n </div>\n\n </td>\n </tr>\n }\n }\n\n }\n\n </tbody>\n }\n\n <tbody class=\"h-full\"></tbody>\n\n\n </table>\n </div>\n\n <app-pagination\n [pageSize]=\"pageSize()\"\n [totalItems]=\"state().response()?.totalCount ?? 0\"\n (pageChange)=\"onPageChange($event)\">\n </app-pagination>\n</div>\n\n<ng-template cdkPortal>\n <div\n class=\"flex flex-col gap-3 px-2 py-2 bg-white rounded-md max-h-[400px] border border-neutral-200 shadow-2\">\n <div class=\"flex flex-col overflow-y-scroll\">\n @for (column of columnDefs(); track column; let index = $index) {\n @if (column.type != 'actions') {\n <div class=\"grow flex items-center min-w-[200px] px-1\">\n @let isColumnVisible = column.visible || column.visible == undefined || false;\n <app-checkbox [title]=\"column.title\" [ngModel]=\"isColumnVisible\"\n (valueChanged)=\"onColumnVisibleOrHide($event, column)\"></app-checkbox>\n </div>\n }\n }\n </div>\n\n <span (click)=\"onSelectAllColumnClicked()\" class=\"px-4 text-overline text-info-500 cursor-pointer\">Select All</span>\n </div>\n</ng-template>\n\n","import {Component, inject} from '@angular/core';\nimport {NGL_CONFIG} from '../../ngl-config.token';\n\n@Component({\n selector: 'app-env-banner',\n standalone: true,\n imports: [],\n templateUrl: './env-banner.component.html',\n styleUrl: './env-banner.component.scss'\n})\nexport class EnvBannerComponent {\n config = inject(NGL_CONFIG);\n}\n","@if(config.enableDevTools) {\n <div\n class=\"banner fixed top-6 left-0 bg-black bg-opacity-80 text-xs text-white transform -rotate-45 translate-y-1/4 -translate-x-1/4 w-36 text-center px-1 py-1\">\n DEV\n </div>\n}\n","import {Injectable, signal} from '@angular/core';\nimport {Observable} from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoaderService {\n\n loadingCount = signal(0);\n\n show() {\n this.loadingCount.update((current) => current + 1);\n }\n\n hide() {\n this.loadingCount.update((current) => current - 1);\n }\n\n}\n","import {Component, inject} from '@angular/core';\nimport {LoaderService} from \"./loader.service\";\nimport {SpinnerComponent} from \"../spinner/spinner.component\";\n\n@Component({\n selector: 'app-loader',\n standalone: true,\n imports: [\n SpinnerComponent\n ],\n templateUrl: './loader.component.html',\n styleUrl: './loader.component.scss'\n})\nexport class LoaderComponent {\n\n loaderService = inject(LoaderService);\n}\n","@if (loaderService.loadingCount() > 0) {\n <div class=\"fixed left-1/2 top-1/2 py-3 px-5 shadow-2 bg-white loader rounded-md\">\n <app-spinner></app-spinner>\n </div>\n}\n","import {Component, computed, input, signal} from '@angular/core';\n\n\n@Component({\n selector: 'lib-network-image',\n standalone: true,\n imports: [],\n templateUrl: './network-image.component.html',\n styleUrl: './network-image.component.scss'\n})\nexport class NetworkImageComponent {\n\n placeholderImage = input<string | undefined>();\n imageUrl = input<string | undefined>();\n\n isError = signal(false);\n\n placeHolderUrl = computed(() => {\n return this.placeholderImage() ?? 'assets/images/background/restaurant-placeholder.png';\n })\n\n sourceUrl = computed(() => {\n if (this.imageUrl()) {\n return this.imageUrl();\n } else {\n return this.placeholderImage() ?? 'assets/images/background/restaurant-placeholder.png';\n }\n })\n\n handleImageError() {\n this.isError.update((c) => true);\n }\n}\n","@if (isError()) {\n <img\n [src]=\"placeHolderUrl()\"\n class=\"object-cover w-full h-full transition-all duration-200 transform group-hover:scale-105\" alt=\"Image\">\n} @else {\n <img\n [src]=\"sourceUrl()\"\n (error)=\"handleImageError()\" alt=\"\"\n class=\"object-cover w-full h-full transition-all duration-200 transform group-hover:scale-105\">\n}\n","import {DialogRef} from '@angular/cdk/dialog';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n inject,\n input, output,\n Renderer2,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\n\n@Component({\n selector: 'app-base-overlay',\n imports: [],\n templateUrl: './base-overlay.component.html',\n standalone: true,\n styleUrl: './base-overlay.component.scss'\n})\nexport class BaseOverlayComponent implements AfterViewInit {\n\n @ViewChild('container', {read: ViewContainerRef, static: true}) container!: ViewContainerRef;\n @ViewChild('actions', {static: false}) actionsDiv!: ElementRef<HTMLDivElement>;\n @ViewChild('actionsContainer', {static: false}) actionsContainerDiv!: ElementRef<HTMLDivElement>;\n\n title = input.required<String>();\n showTitle = input(true);\n showBackButton = input(false);\n\n\n onBackClicked = output<void>();\n\n renderer = inject(Renderer2);\n dialogRef = inject(DialogRef<any>);\n\n\n ngOnInit(): void {\n\n }\n\n ngAfterViewInit(): void {\n if (this.actionsDiv) {\n const children = this.actionsDiv.nativeElement.children;\n if (children.length === 0) {\n this.renderer.setStyle(this.actionsContainerDiv.nativeElement, 'display', 'none');\n }\n }\n }\n\n goBack() {\n this.onBackClicked.emit();\n }\n\n onCloseClicked() {\n this.dialogRef.close();\n }\n}\n","<div class=\"base-overlay flex flex-col rounded-3xl h-full overflow-hidden bg-white relative\">\n @if (showTitle()) {\n <div class=\"flex justify-center items-center px-3 py-6 border-b border-neutral-200\">\n\n @if(showBackButton()) {\n <div class=\"absolute left-3 rounded-full p-3 cursor-pointer hover:bg-neutral-50 transition-all duration-500\" (click)=\"goBack()\">\n <svg class=\"w-[18px] h-[18px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M20 11V13H8.00003L13.5 18.5L12.08 19.92L4.16003 12L12.08 4.07996L13.5 5.49996L8.00003 11H20Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n\n <span class=\"text-body1\">{{ title() }}</span>\n <div class=\"absolute right-3 rounded-lg p-2 border border-neutral-300 cursor-pointer hover:bg-neutral-50\"\n (click)=\"onCloseClicked()\">\n <svg class=\"w-[18px] h-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n }\n\n\n\n <div class=\"flex-1 min-h-0 px-5 py-4 overflow-y-auto\">\n <ng-content select=\"[body]\">\n <ng-container #container></ng-container>\n </ng-content>\n </div>\n\n\n <div #actionsContainer class=\"actions-container border-t px-4 py-4\">\n <div #actions class=\"w-full\">\n <ng-content select=\"[actions]\"></ng-content>\n </div>\n </div>\n\n</div>\n","import {signal, WritableSignal} from \"@angular/core\";\n\nexport class OverlayWizardUtils {\n\n uiState = signal<OverlayWizard[]>([]);\n wizard = signal<OverlayWizard[]>([]);\n\n showBackButton(): boolean {\n return this.uiState().length > 1;\n }\n\n activeWizard(): OverlayWizard {\n return this.uiState()[this.uiState().length - 1];\n };\n\n constructor(wizard: WritableSignal<OverlayWizard[]>, uiState?: WritableSignal<OverlayWizard[]> | null) {\n this.wizard = wizard;\n if (uiState) {\n this.uiState = uiState;\n } else {\n let fistState = wizard()[0];\n if (fistState) {\n this.uiState.set([fistState]);\n }\n }\n }\n\n goBack() {\n if (this.uiState().length > 1) {\n this.uiState.update(prev => prev.slice(0, prev.length - 1));\n }\n }\n\n append(wizardKey: any) {\n let wizard = this.wizard().find(x => x.key == wizardKey);\n if (wizard) {\n this.uiState.update(prev => {\n return [...prev, wizard];\n });\n }\n console.log(wizard);\n console.log(this.uiState());\n }\n\n closeUntil(wizard: any) {\n const wizardList = this.wizard();\n for (let i = wizardList.length - 1; i >= 0; i--) {\n if (wizardList[i].key === wizard) {\n const updatedList = wizardList.slice(0, i + 1);\n this.uiState.set(updatedList);\n break;\n }\n }\n }\n}\n\nexport interface OverlayWizard {\n title: string;\n key: any;\n}\n","import {Component, HostListener, inject, OnInit, signal} from '@angular/core';\nimport {DOCUMENT} from \"@angular/common\";\nimport {NGL_CONFIG} from '../../ngl-config.token';\n\n@Component({\n selector: 'app-responsive-helper',\n standalone: true,\n imports: [],\n templateUrl: './responsive-helper.component.html',\n styleUrl: './responsive-helper.component.scss'\n})\nexport class ResponsiveHelperComponent implements OnInit {\n\n config = inject(NGL_CONFIG);\n\n document = inject(DOCUMENT);\n screenWidth = signal(0);\n\n constructor() {\n this.screenWidth.set(this.document.documentElement.clientWidth);\n }\n\n ngOnInit(): void {\n this.document.addEventListener('resize', this.onResize.bind(this));\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event: any) {\n this.screenWidth.set(this.document.documentElement.clientWidth);\n }\n}\n","@if (config.enableDevTools) {\n <div\n class=\"fixed bottom-5 left-5 align-middle font-medium sm:block space-x-2 select-none pointer-events-none\">\n <div\n class=\"hidden sm:inline-flex sm:flex-col py-1 px-3 bg-black bg-opacity-50 text-white rounded-md text-caption pointer-events-none\">\n <!-- <span class=\"block sm:hidden\">mob</span>-->\n <span class=\"hidden sm:block md:hidden\">sm</span>\n <span class=\"hidden md:block lg:hidden\">md</span>\n <span class=\"hidden lg:block xl:hidden\">lg</span>\n <span class=\"hidden xl:block 2xl:hidden\">xl</span>\n <span class=\"hidden 2xl:block\">2xl</span>\n </div>\n\n <span\n class=\"text-caption py-1 px-3 bg-black text-white rounded-md bg-opacity-50 select-none pointer-events-none\">{{ screenWidth() }}\n px</span>\n </div>\n}\n","import {Component, input, OnInit} from '@angular/core';\nimport {DomSanitizer, SafeHtml} from \"@angular/platform-browser\";\nimport {HttpClient} from \"@angular/common/http\";\n\n@Component({\n selector: 'app-svg-url-icon',\n standalone: true,\n imports: [],\n templateUrl: './svg-url-icon.component.html',\n styleUrl: './svg-url-icon.component.scss'\n})\nexport class SvgUrlIconComponent implements OnInit {\n svgIcon: SafeHtml | null = null;\n\n svgUrl = input.required<string>();\n\n constructor(private http: HttpClient, private sanitizer: DomSanitizer) {}\n\n ngOnInit(): void {\n this.http.get(this.svgUrl(), { responseType: 'text' }).subscribe(\n (svgContent) => {\n this.svgIcon = this.sanitizer.bypassSecurityTrustHtml(svgContent);\n },\n (error) => {\n console.error('Failed to load SVG:', error);\n }\n );\n }\n}\n","<div [innerHTML]=\"svgIcon\"></div>\n","export enum ToastType {\n success = 'success',\n info = 'info',\n warning = 'warning',\n error = 'error',\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, Subject} from \"rxjs\";\nimport {ToastEvent} from \"./models/toast-event\";\nimport {ToastType} from \"./models/toast-type\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToastService {\n static defaultDuration = 3500;\n toastEvents: Observable<ToastEvent>;\n private _toastEvents = new Subject<ToastEvent>();\n\n constructor() {\n this.toastEvents = this._toastEvents.asObservable();\n }\n\n /**\n * Show success toast notification.\n * @param title Toast title\n * @param message Toast message\n * @param duration\n */\n success(message: string, {title, duration}: { title?: string, duration?: number } = {}) {\n this._toastEvents.next({\n message,\n title,\n type: ToastType.success,\n duration: duration,\n });\n }\n\n /**\n * Show error toast notification.\n * @param title Toast title\n * @param message Toast message\n * @param duration\n */\n error(message: string, {title, duration}: { title?: string, duration?: number } = {}) {\n this._toastEvents.next({\n message,\n title,\n type: ToastType.error,\n duration: duration\n });\n }\n\n /**\n * Show info toast notification.\n * @param title Toast title\n * @param message Toast message\n * @param duration\n */\n info(message: string, {title, duration}: { title?: string, duration?: number } = {}) {\n this._toastEvents.next({\n message,\n title,\n type: ToastType.info,\n duration: duration\n });\n }\n\n /**\n * Show warning toast notification.\n * @param title Toast title\n * @param message Toast message\n * @param duration\n */\n warning(message: string, {title, duration}: { title?: string, duration?: number } = {}) {\n this._toastEvents.next({\n message,\n title,\n type: ToastType.warning,\n duration: duration\n });\n }\n}\n","import {Component, EventEmitter, Output} from '@angular/core';\n\n@Component({\n selector: 'app-toast-close-button',\n standalone: true,\n imports: [],\n templateUrl: './toast-close-button.component.html',\n styleUrl: './toast-close-button.component.scss'\n})\nexport class ToastCloseButtonComponent {\n\n @Output() closeEvent = new EventEmitter();\n onCloseClick() {\n this.closeEvent.emit();\n }\n}\n","<div class=\"p-1 text-neutral-400 rounded-full hover:bg-neutral-50 hover:cursor-pointer\" (click)=\"onCloseClick()\">\n <svg class=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"close\">\n <path id=\"Vector\" d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z\" fill=\"currentColor\"/>\n </g>\n </svg>\n</div>\n","import {\n Component,\n computed,\n ElementRef,\n EventEmitter,\n input,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {ToastType} from \"../../models/toast-type\";\nimport {ToastCloseButtonComponent} from \"./toast-close-button/toast-close-button.component\";\nimport {ToastService} from \"../../toast.service\";\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'app-toast',\n standalone: true,\n imports: [\n ToastCloseButtonComponent,\n NgClass\n ],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss'\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n\n @Output() disposeEvent = new EventEmitter();\n\n @Input()\n type!: ToastType;\n\n @Input()\n title?: string;\n\n @Input()\n message!: string;\n\n @Input()\n duration?: number;\n\n themeType = input<'light' | 'dark'>('light');\n\n themeClass = computed(() => {\n let classes = '';\n switch (this.themeType()) {\n case 'light':\n classes = 'bg-white';\n break;\n case 'dark':\n classes = 'bg-black';\n break;\n }\n return classes;\n });\n\n protected readonly ToastType = ToastType;\n\n ngOnInit() {\n this.show();\n }\n\n show() {\n setTimeout(() => {\n this.hide();\n }, this.duration ?? ToastService.defaultDuration);\n }\n\n hide() {\n this.disposeEvent.emit();\n }\n\n ngOnDestroy(): void {\n }\n}\n","<div class=\"shadow-2 border border-neutral-200 px-3 py-3 mb-5 min-w-72 max-w-80 rounded-md z-50\" [ngClass]=\"themeClass()\">\n <div class=\"flex items-center gap-3\">\n <div class=\"flex justify-center items-center h-6 w-6\">\n @switch (type) {\n @case (ToastType.success) {\n <svg height=\"18\" width=\"18\" class=\"text-green-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"currentColor\">\n <path\n d=\"M12 2C6.5 2 2 6.5 2 12C2 17.5 6.5 22 12 22C17.5 22 22 17.5 22 12C22 6.5 17.5 2 12 2ZM12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM16.59 7.58L10 14.17L7.41 11.59L6 13L10 17L18 9L16.59 7.58Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n @case (ToastType.error) {\n <svg height=\"18\" width=\"18\" class=\"text-red-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path\n d=\"M12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM12 2C6.47 2 2 6.47 2 12C2 17.53 6.47 22 12 22C17.53 22 22 17.53 22 12C22 6.47 17.53 2 12 2ZM14.59 8L12 10.59L9.41 8L8 9.41L10.59 12L8 14.59L9.41 16L12 13.41L14.59 16L16 14.59L13.41 12L16 9.41L14.59 8Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n @case (ToastType.info) {\n <svg height=\"18\" width=\"18\" class=\"text-blue-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path\n d=\"M11 9H13V7H11M12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2ZM11 17H13V11H11V17Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n @case (ToastType.warning) {\n <svg height=\"18\" width=\"18\" class=\"text-amber-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"currentColor\">\n <path\n d=\"M12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20ZM12 2C6.47 2 2 6.47 2 12C2 17.53 6.47 22 12 22C17.53 22 22 17.53 22 12C22 6.47 17.53 2 12 2ZM14.59 8L12 10.59L9.41 8L8 9.41L10.59 12L8 14.59L9.41 16L12 13.41L14.59 16L16 14.59L13.41 12L16 9.41L14.59 8Z\"\n fill=\"currentColor\"/>\n </svg>\n }\n }\n </div>\n\n <div class=\"flex flex-col gap-2\">\n @if (title) {\n <p class=\"text-body1\">{{ title }}</p>\n }\n <p class=\"text-body2 text-neutral-400\">{{ message }}</p>\n </div>\n <div class=\"flex-grow\"></div>\n\n <app-toast-close-button (closeEvent)=\"hide()\"></app-toast-close-button>\n\n </div>\n</div>\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, input, OnInit} from '@angular/core';\nimport {ToastComponent} from \"../toast/toast.component\";\nimport {ToastEvent} from \"../../models/toast-event\";\nimport {ToastService} from \"../../toast.service\";\n\n@Component({\n selector: 'app-toaster',\n standalone: true,\n imports: [\n ToastComponent\n ],\n templateUrl: './toaster.component.html',\n styleUrl: './toaster.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToasterComponent implements OnInit {\n themeType = input<'light' | 'dark'>('light');\n\n currentToasts: ToastEvent[] = [];\n\n constructor(\n private toastService: ToastService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.subscribeToToasts();\n }\n\n subscribeToToasts() {\n this.toastService.toastEvents.subscribe((toast) => {\n toast.themeType = this.themeType();\n this.currentToasts.push(toast);\n this.cdr.detectChanges();\n });\n }\n\n dispose(index: number) {\n this.currentToasts.splice(index, 1);\n this.cdr.detectChanges();\n }\n}\n","<div class=\"toaster fixed top-1 right-1 px-3 py-2\">\n @for (toast of currentToasts; track toast; let i = $index) {\n <div>\n <app-toast\n [type]=\"toast.type\"\n [title]=\"toast.title\"\n [message]=\"toast.message\"\n [duration]=\"toast.duration\"\n (disposeEvent)=\"dispose(i)\"\n [themeType]=\"toast.themeType ?? 'light'\"\n ></app-toast>\n </div>\n }\n</div>\n","export enum TooltipPosition {\n ABOVE = 'above',\n BELOW = 'below',\n LEFT = 'left',\n RIGHT = 'right',\n DYNAMIC = 'dynamic',\n DEFAULT = 'above'\n}\n\nexport enum TooltipTheme {\n DARK = 'dark',\n LIGHT = 'light',\n DEFAULT = 'dark'\n}\n","import {Component, OnInit} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Component({\n selector: 'app-tooltip',\n standalone: true,\n imports: [\n NgClass\n ],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss'\n})\nexport class TooltipComponent implements OnInit {\n tooltipPosition: TooltipPosition = TooltipPosition.DEFAULT;\n tooltipTheme: TooltipTheme = TooltipTheme.DEFAULT;\n tooltip = '';\n left = 0;\n top = 0;\n visible = false;\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n}\n","<div class=\"tooltip\"\n [ngClass]=\"['tooltip--'+tooltipPosition, 'tooltip--'+tooltipTheme]\"\n [class.tooltip--visible]=\"visible\"\n [style.left]=\"left + 'px'\"\n [style.top]=\"top + 'px'\">\n {{tooltip}}\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport {AfterViewInit, Directive, ElementRef, EventEmitter, inject, Inject, OnDestroy, Output} from '@angular/core';\nimport { filter, fromEvent, Subscription } from 'rxjs';\n\n@Directive({\n selector: '[clickOutside]',\n standalone: true,\n})\nexport class ClickOutsideDirective implements AfterViewInit, OnDestroy {\n @Output() clickOutside = new EventEmitter<void>();\n\n documentClickSubscription: Subscription | undefined;\n document = inject(DOCUMENT);\n element = inject(ElementRef);\n\n ngAfterViewInit(): void {\n this.documentClickSubscription = fromEvent(this.document, 'click')\n .pipe(\n filter((event) => {\n return !this.isInside(event.target as HTMLElement);\n }),\n )\n .subscribe(() => {\n this.clickOutside.emit();\n });\n }\n\n ngOnDestroy(): void {\n this.documentClickSubscription?.unsubscribe();\n }\n\n isInside(elementToCheck: HTMLElement): boolean {\n let isInside = elementToCheck === this.element.nativeElement || this.element.nativeElement.contains(elementToCheck);\n return isInside;\n }\n}\n","import {Directive, ElementRef, HostListener, inject} from '@angular/core';\nimport {FormGroupDirective} from \"@angular/forms\";\nimport {debounceTime, fromEvent, take} from \"rxjs\";\n\n@Directive({\n selector: '[appInvalidControlScroll]',\n standalone: true\n})\nexport class InvalidControlScrollDirective {\n\n elementRef = inject(ElementRef);\n formGroupDirective = inject(FormGroupDirective);\n\n constructor() {\n }\n\n @HostListener(\"ngSubmit\") onSubmit() {\n this.formGroupDirective.control.markAllAsTouched();\n if (this.formGroupDirective.control.invalid) {\n this.scrollToFirstInvalidControl();\n }\n }\n\n private scrollToFirstInvalidControl() {\n const firstInvalidControl: HTMLElement = this.elementRef.nativeElement.querySelector(\n \".ng-invalid\"\n );\n\n const scrollOffset = this.getTopOffset(firstInvalidControl);\n if (scrollOffset) {\n window.scroll({\n top: scrollOffset,\n left: 0,\n behavior: \"smooth\"\n });\n\n fromEvent(window, \"scroll\")\n .pipe(\n debounceTime(100),\n take(1)\n )\n .subscribe(() => firstInvalidControl.focus());\n }\n }\n\n private getTopOffset(controlEl: HTMLElement): number | null {\n try {\n const labelOffset = 50;\n return controlEl.getBoundingClientRect().top + window.scrollY - labelOffset;\n } catch (e) {\n return null;\n }\n }\n\n}\n","import {Directive, ElementRef, HostListener, inject} from '@angular/core';\nimport {FormGroupDirective} from \"@angular/forms\";\nimport {debounceTime, fromEvent, take} from \"rxjs\";\n\n@Directive({\n selector: '[appInvalidControlScrollContainer]',\n standalone: true\n})\nexport class InvalidControlScrollContainerDirective {\n\n\n elementRef = inject(ElementRef);\n formGroupDirective = inject(FormGroupDirective);\n scrollContainerDir = inject(InvalidControlScrollContainerDirective, {optional: true});\n\n private get containerEl(): HTMLElement | any {\n return this.scrollContainerDir\n ? this.scrollContainerDir.containerEl\n : window;\n }\n\n constructor() { }\n\n @HostListener(\"ngSubmit\") onSubmit() {\n if (this.formGroupDirective.control.invalid) {\n this.scrollToFirstInvalidControl();\n }\n }\n\n private scrollToFirstInvalidControl() {\n const firstInvalidControl: HTMLElement = this.elementRef.nativeElement.querySelector(\n \".ng-invalid\"\n );\n\n this.containerEl.scroll({\n top: this.getTopOffset(firstInvalidControl),\n left: 0,\n behavior: \"smooth\"\n });\n\n fromEvent(this.containerEl, \"scroll\")\n .pipe(\n debounceTime(100),\n take(1)\n )\n .subscribe(() => firstInvalidControl.focus());\n }\n\n private getTopOffset(controlEl: HTMLElement): number {\n const labelOffset = 50;\n const controlElTop = controlEl.getBoundingClientRect().top;\n\n if (this.scrollContainerDir) {\n const containerTop = this.containerEl.getBoundingClientRect().top;\n const absoluteControlElTop = controlElTop + this.containerEl.scrollTop;\n\n return absoluteControlElTop - containerTop - labelOffset;\n } else {\n const absoluteControlElTop = controlElTop + window.scrollY;\n\n return absoluteControlElTop - labelOffset;\n }\n }\n\n}\n","export function deepEqual(obj1: any, obj2: any): boolean {\n // Check if both values are identical\n if (obj1 === obj2) {\n return true;\n }\n\n // Check if both values are objects\n if (typeof obj1 !== \"object\" || typeof obj2 !== \"object\" || obj1 === null || obj2 === null) {\n return false;\n }\n\n // Get the keys of both objects\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n\n // Check if both objects have the same number of keys\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n // Check if all keys and values are equal\n for (const key of keys1) {\n if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function jsonEqual(json1: string, json2: string): boolean {\n return json1 === json2;\n}\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\n\nexport class FormValidationUtils {\n updateValidatorsIfNeeded(control: AbstractControl | null, addValidators: ValidatorFn[]) {\n if (!control) return;\n\n const existingValidator = control.validator;\n const currentValidators: ValidatorFn[] = [];\n\n if (existingValidator) {\n currentValidators.push(existingValidator);\n }\n\n const toAdd = addValidators.filter(\n newVal => !currentValidators.includes(newVal)\n );\n\n if (toAdd.length) {\n control.setValidators([...currentValidators, ...toAdd]);\n control.updateValueAndValidity();\n }\n }\n\n}\n\n","import {Component, input} from '@angular/core';\nimport {AbstractControl} from \"@angular/forms\";\nimport {HumanizeFormMessagesPipe} from '../humanize-form-messages.pipe';\n\n@Component({\n selector: 'app-error',\n imports: [\n HumanizeFormMessagesPipe\n ],\n templateUrl: './app-error.component.html',\n styleUrl: './app-error.component.scss'\n})\nexport class AppErrorComponent {\n\n control = input.required<AbstractControl<any, any> | null>();\n errorMessages = input<{ [key: string]: string }>({});\n\n get hasErrors() {\n return (this.control() && this.control()?.touched && this.control()?.errors) ?? false;\n }\n}\n","@if (control()?.errors && hasErrors) {\n <div class=\"flex mt-1\">\n <span class=\"text-caption text-red-500\">\n {{ control()?.errors! | humanizeFormMessages: errorMessages() }}\n </span>\n </div>\n}\n","import {Component, input, OnInit, output, signal} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\n\nexport type Weekday = 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday';\n\n@Component({\n selector: 'app-date-picker',\n imports: [\n NgClass\n ],\n standalone: true,\n templateUrl: './date-picker.component.html',\n styleUrl: './date-picker.component.scss'\n})\nexport class DatePickerComponent extends BaseControlValueAccessorV3<Date> implements OnInit {\n minDate = input<Date | null>();\n maxDate = input<Date | null>();\n allowOnlyPast = input<boolean>(false);\n allowOnlyFuture = input<boolean>(false);\n allowToday = input<boolean>(false);\n disabledDays = input<Weekday[]>([]);\n disabledDates = input<Date[]>([]);\n\n dateSelected = output<Date>();\n\n // days = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n days: { day: Weekday, displayName: string }[] = [\n {day: 'sunday', displayName: 'Su'},\n {day: 'monday', displayName: 'Mo'},\n {day: 'tuesday', displayName: 'Tu'},\n {day: 'wednesday', displayName: 'We'},\n {day: 'thursday', displayName: 'Th'},\n {day: 'friday', displayName: 'Fr'},\n {day: 'saturday', displayName: 'Sa'}\n ];\n months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n\n uiMode = signal<'date' | 'month' | 'year'>('date');\n\n activeMonth!: number;\n activeYear!: number;\n selectedDate?: Date | null;\n\n years: { value: number; isEnabled: boolean }[] = [];\n daysOfMonth: { value: number; isEnabled: boolean }[] = [];\n blankDays: number[] = [];\n\n ngOnInit(): void {\n this.initDate();\n this.populateDays();\n }\n\n protected override onValueReady(value: Date): void {\n if (value) {\n this.selectedDate = value;\n this.activeMonth = value?.getMonth();\n this.activeYear = value?.getFullYear();\n } else {\n this.initDate();\n }\n\n this.populateDays();\n }\n\n initDate() {\n let today = this.controlValue ?? new Date();\n this.activeMonth = today.getMonth();\n this.activeYear = today.getFullYear();\n }\n\n getMMMYYYY() {\n return `${this.months[this.activeMonth]} ${this.activeYear}`;\n }\n\n populateYears(): void {\n let startYear = Math.floor(this.activeYear / 24) * 24;\n if (startYear <= 0) startYear = 1;\n\n const todayYear = new Date().getFullYear();\n\n this.years = Array.from({length: 24}, (_, i) => {\n const year = startYear + i;\n let isEnabled = true;\n\n if (this.allowOnlyPast() && year > todayYear) isEnabled = false;\n if (this.allowOnlyFuture() && year < todayYear) isEnabled = false;\n\n if (isEnabled && this.minDate()) {\n isEnabled = year >= this.minDate()!.getFullYear();\n }\n\n if (isEnabled && this.maxDate()) {\n isEnabled = isEnabled && year <= this.maxDate()!.getFullYear();\n }\n\n return {value: year, isEnabled};\n });\n }\n\n populateDays() {\n const daysInMonth = new Date(this.activeYear, this.activeMonth + 1, 0).getDate();\n\n this.blankDays = Array.from({length: new Date(this.activeYear, this.activeMonth).getDay()}, (_, i) => i + 1);\n\n this.daysOfMonth = Array.from({length: daysInMonth}, (_, i) => {\n const day = i + 1;\n const currentDate = new Date(this.activeYear, this.activeMonth, day);\n let isEnabled = true;\n\n if (this.allowOnlyFuture() && currentDate < new Date()) {\n isEnabled = false;\n }\n if (this.allowOnlyPast() && currentDate > new Date()) {\n isEnabled = false;\n }\n\n if (isEnabled && this.minDate()) {\n isEnabled = currentDate >= this.minDate()!;\n }\n if (isEnabled && this.maxDate()) {\n isEnabled = isEnabled && currentDate <= this.maxDate()!;\n }\n\n if(this.allowToday() && this.isToday(day)) {\n isEnabled = true;\n }\n\n const dayName = this.days[currentDate.getDay()];\n if (this.disabledDays()?.includes(dayName.day)) {\n isEnabled = false;\n }\n\n if (this.disabledDates()?.some(date => this.isSameDate(date, currentDate))) {\n isEnabled = false;\n }\n\n return {value: day, isEnabled};\n });\n }\n\n isSameDate(date1: Date, date2: Date): boolean {\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n isMonthEnabled(month: number): boolean {\n const monthStartDate = new Date(this.activeYear, month, 1);\n const today = new Date();\n const todayMonthStart = new Date(today.getFullYear(), today.getMonth(), 1);\n\n if (this.allowOnlyPast() && monthStartDate > todayMonthStart) return false;\n if (this.allowOnlyFuture() && monthStartDate < todayMonthStart) return false;\n\n if (this.minDate()) {\n const minMonthStart = new Date(this.minDate()!.getFullYear(), this.minDate()!.getMonth(), 1);\n if (monthStartDate < minMonthStart) return false;\n }\n\n if (this.maxDate()) {\n const maxMonthStart = new Date(this.maxDate()!.getFullYear(), this.maxDate()!.getMonth(), 1);\n if (monthStartDate > maxMonthStart) return false;\n }\n\n return true;\n }\n\n onYearSelected(year: number): void {\n this.activeYear = year;\n this.uiMode.set('month');\n }\n\n onMonthSelected(month: number): void {\n this.activeMonth = month;\n this.uiMode.set('date');\n this.populateDays();\n }\n\n isToday(day: number) {\n const today = new Date();\n const d = new Date(this.activeYear, this.activeMonth, day);\n return today.toDateString() === d.toDateString();\n }\n\n onDaySelected(day: number) {\n this.selectedDate = new Date(this.activeYear, this.activeMonth, day);\n this.onValueChange(this.selectedDate);\n this.dateSelected.emit(this.selectedDate);\n }\n\n resetPicker(): void {\n this.selectedDate = null;\n this.initDate();\n this.populateDays();\n }\n\n isSelected(day: number): boolean {\n const d = new Date(this.activeYear, this.activeMonth, day);\n return this.selectedDate?.toDateString() === d.toDateString();\n }\n\n previousMonthPressed() {\n switch (this.uiMode()) {\n case 'year':\n if (this.activeYear > 24) {\n this.activeYear -= 24;\n this.populateYears();\n }\n break;\n\n case 'month':\n if (this.activeYear > 1) {\n this.activeYear--;\n }\n break;\n\n case 'date':\n if (this.activeMonth === 0) {\n if (this.activeYear > 1) {\n this.activeYear--;\n this.activeMonth = 11;\n }\n } else {\n this.activeMonth--;\n }\n this.populateDays();\n break;\n\n default:\n console.warn('Unknown mode:', this.uiMode());\n }\n }\n\n nextMonthPressed() {\n switch (this.uiMode()) {\n case 'year':\n this.activeYear += 24;\n this.populateYears();\n break;\n\n case 'month':\n this.activeYear++;\n break;\n\n case 'date':\n if (this.activeMonth === 11) {\n this.activeYear++;\n this.activeMonth = 0;\n } else {\n this.activeMonth++;\n }\n this.populateDays();\n break;\n\n default:\n console.warn('Unknown mode:', this.uiMode());\n }\n }\n\n onYearSelectionPressed() {\n switch (this.uiMode()) {\n case 'year':\n this.uiMode.set('date');\n break;\n case \"month\":\n this.uiMode.set('year');\n break;\n case \"date\":\n this.populateYears();\n this.uiMode.set('year');\n break;\n }\n\n }\n\n getFirstYear() {\n return this.years[0].value;\n }\n\n getLastYear() {\n return this.years[this.years.length - 1].value;\n }\n}\n","<div\n class=\"flex flex-col gap-3 bg-white rounded-md border border-neutral-100 min-h-96 px-3 py-3 shadow-1 select-none w-min\">\n\n <div class=\"flex items-center justify-between w-[280px]\">\n\n <div (click)=\"onYearSelectionPressed()\"\n class=\"flex items-center gap-1 px-2.5 py-2 hover:bg-neutral-100 rounded-full cursor-pointer\">\n @switch (uiMode()) {\n @case ('date') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ getMMMYYYY() }}</span>\n <svg class=\"h-[18px] w-[18px] text-neutral-900\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M7 10L12 15L17 10H7Z\" fill=\"currentColor\"/>\n </svg>\n }\n @case ('month') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ activeYear }}</span>\n }\n @case ('year') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ getFirstYear() }} - {{ getLastYear() }}</span>\n <svg class=\"h-[18px] w-[18px] text-neutral-900\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7 15L12 10L17 15H7Z\" fill=\"currentColor\"/>\n </svg>\n }\n }\n\n </div>\n\n <div class=\"flex items-center gap-2\">\n\n <div (click)=\"previousMonthPressed()\"\n class=\"flex items-center justify-center h-[36px] w-[36px] rounded-full hover:bg-neutral-100 cursor-pointer select-none\">\n <svg class=\"h-[24px] w-[24px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M15.41 16.58L10.83 12L15.41 7.41L14 6L8 12L14 18L15.41 16.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div (click)=\"nextMonthPressed()\"\n class=\"flex items-center justify-center h-[36px] w-[36px] rounded-full hover:bg-neutral-100 cursor-pointer select-none\">\n <svg class=\"h-[24px] w-[24px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M8.58997 16.58L13.17 12L8.58997 7.41L9.99997 6L16 12L9.99997 18L8.58997 16.58Z\" fill=\"black\"/>\n </svg>\n </div>\n\n </div>\n\n </div>\n\n @if (uiMode() == 'date') {\n <div class=\"grid grid-cols-7 text-xs text-center text-gray-900 gap-y-1\">\n @for (day of days; track day) {\n <span\n class=\"flex items-center justify-center w-[40px] h-[40px] font-semibold rounded-lg\">{{ day.displayName }}</span>\n }\n\n @for (blankDay of blankDays; track blankDay) {\n <span\n class=\"flex items-center justify-center w-[40px] h-[40px] font-semibold rounded-lg text-transparent\"></span>\n }\n\n @for (day of daysOfMonth; track day) {\n <span (click)=\"day.isEnabled ? onDaySelected(day.value) : null\"\n [ngClass]=\"{\n 'text-neutral-400' : !day.isEnabled,\n '!bg-primary-500 !text-white': isSelected(day.value),\n 'today-and-selected bg-primary-500 text-white': isToday(day.value) && isSelected(day.value),\n 'border border-primary-500 text-primary-900': isToday(day.value),\n 'not-today-not-selected text-gray-700 hover:bg-primary-50': !isToday(day.value) && !isSelected(day.value) && day.isEnabled,\n 'not-today-selected text-gray-700 hover:bg-primary-500': !isToday(day.value) && isSelected(day.value),\n }\"\n class=\"flex items-center justify-center w-[40px] h-[40px] text-gray-700 rounded-lg select-none cursor-pointer\">{{ day.value }}</span>\n }\n </div>\n }\n\n @if (uiMode() == 'month') {\n <div class=\"grid grid-cols-4 text-xs text-center text-gray-900\">\n @for (month of months; track month; let i = $index) {\n <span (click)=\"onMonthSelected(i)\"\n [ngClass]=\"isMonthEnabled(i) ? '' : 'text-neutral-400'\"\n class=\"flex items-center px-2 py-2.5 justify-center cursor-pointer select-none hover:bg-neutral-100 rounded-lg uppercase\">{{ month }}</span>\n }\n </div>\n }\n\n\n @if (uiMode() == 'year') {\n <div class=\"grid grid-cols-4 text-xs text-center text-gray-900\">\n @for (year of years; track year; let i = $index) {\n <span (click)=\"year.isEnabled ? onYearSelected(year.value) : null\"\n [ngClass]=\"{\n 'text-neutral-400' : !year.isEnabled,\n }\"\n class=\"flex items-center px-2 py-2.5 justify-center cursor-pointer select-none hover:bg-neutral-100 rounded-lg\">{{ year.value }}</span>\n }\n </div>\n }\n\n</div>\n","import {Component, inject} from '@angular/core';\nimport {DIALOG_DATA, DialogRef} from \"@angular/cdk/dialog\";\nimport {DatePickerComponent, Weekday} from '../../date-picker/date-picker.component';\n\n@Component({\n selector: 'app-date-picker-overlay',\n imports: [\n DatePickerComponent\n ],\n templateUrl: './date-picker-overlay.component.html',\n styleUrl: './date-picker-overlay.component.scss'\n})\nexport class DatePickerOverlayComponent {\n\n dialogRef = inject(DialogRef);\n data: {\n selectedDate: Date | null;\n minDate: Date | null;\n maxDate: Date | null;\n allowOnlyPast: boolean;\n allowOnlyFuture: boolean;\n disabledDays: Weekday[];\n disabledDates: Date[];\n } = inject(DIALOG_DATA);\n\n onDateSelected($event: Date) {\n this.dialogRef.close($event);\n }\n}\n","<app-date-picker [minDate]=\"data.minDate\"\n [maxDate]=\"data.maxDate\"\n [allowOnlyPast]=\"data.allowOnlyPast\"\n [allowOnlyFuture]=\"data.allowOnlyFuture\"\n [disabledDays]=\"data.disabledDays\"\n [disabledDates]=\"data.disabledDates\"\n (dateSelected)=\"onDateSelected($event)\">\n</app-date-picker>\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\n\nexport function onlyPastDateValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value)\n return null;\n\n let selectedDate = new Date(control.value);\n let today = new Date();\n today.setHours(0, 0, 0, 0);\n\n return selectedDate < today ? null : {invalidDate: 'Date must be in the past.'};\n };\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\n\nexport function onlyFutureDateValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) return null;\n\n let selectedDate = new Date(control.value);\n let today = new Date();\n today.setHours(0, 0, 0, 0);\n\n return selectedDate > today ? null : {invalidDate: 'Date must be in the future.'};\n };\n}\n","import {Component, ElementRef, inject, input, OnDestroy, output, signal, ViewChild,} from '@angular/core';\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {NgxMaskDirective} from \"ngx-mask\";\nimport {FormsModule, ReactiveFormsModule, ValidatorFn} from \"@angular/forms\";\nimport {NgClass} from \"@angular/common\";\nimport {Subscription} from \"rxjs\";\nimport {isValidDate} from \"rxjs/internal/util/isDate\";\nimport {BaseInputComponent} from '../_base/base-input/base-input.component';\nimport { AppSvgIconComponent } from '../../components/app-svg-icon/app-svg-icon.component';\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\nimport { Weekday } from '../date-picker/date-picker.component';\nimport {OverlayService} from '../../components/overlay/overlay.service';\nimport {FormValidationUtils} from '../_utils/form-validation-utils';\nimport {onlyPastDateValidator} from '../../validators/only-past-date-validator';\nimport {onlyFutureDateValidator} from '../../validators/only-future-date-validator';\nimport {DatePickerOverlayComponent} from './date-picker-overlay/date-picker-overlay.component';\n\nexport enum InputDateFormat {\n mmddyyyy,\n ddmmyyyy\n}\n\n@Component({\n selector: 'app-date-input',\n standalone: true,\n imports: [\n HumanizeFormMessagesPipe,\n NgxMaskDirective,\n ReactiveFormsModule,\n NgClass,\n BaseInputComponent,\n AppSvgIconComponent,\n FormsModule\n ],\n templateUrl: './date-input.component.html',\n styleUrl: './date-input.component.scss'\n})\nexport class DateInputComponent extends BaseControlValueAccessorV3<Date | null> implements OnDestroy {\n @ViewChild('trigger', {static: true}) trigger!: ElementRef;\n\n label = input<string | null>();\n iconSrc = input<string | null>();\n showDatePickerIcon = input<boolean>(true);\n fullWidth = input<boolean>(false);\n showErrorSpace = input<boolean>(false);\n\n minDate = input<Date | null>();\n maxDate = input<Date | null>();\n allowOnlyPast = input<boolean>(false);\n allowOnlyFuture = input<boolean>(false);\n disabledDays = input<Weekday[]>([]);\n disabledDates = input<Date[]>([]);\n inputDateFormat = input<InputDateFormat>(InputDateFormat.mmddyyyy);\n\n overlayService = inject(OverlayService);\n\n isFocused = signal(false);\n\n textInputValue = signal<string | null>(null);\n private subscription?: Subscription;\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n protected onValueReady(value: any): void {\n this.updateValidations();\n if (value == null) {\n return;\n }\n\n if (value instanceof Date) {\n if (isValidDate(value)) {\n this.selValue(value);\n } else {\n this.selValue(null);\n }\n return;\n }\n\n const date = new Date(value);\n\n if (this.isValidDate(date)) {\n this.selValue(date);\n return;\n } else {\n this.selValue(null);\n }\n }\n\n updateValidations() {\n let formUtils = new FormValidationUtils();\n const validatorsToAdd: ValidatorFn[] = [];\n\n if (this.allowOnlyPast()) {\n validatorsToAdd.push(onlyPastDateValidator());\n }\n\n if (this.allowOnlyFuture()) {\n validatorsToAdd.push(onlyFutureDateValidator());\n }\n\n formUtils.updateValidatorsIfNeeded(this.formControl, validatorsToAdd);\n }\n\n selValue(value: any) {\n setTimeout(() => {\n if (value) {\n this.textInputValue.set(this.formatDate(value));\n this.onValueChange(value);\n } else {\n this.onValueChange(null);\n }\n }, 100);\n }\n\n isValidDate(date: any): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n get placeHolder(): string {\n switch (this.inputDateFormat()) {\n case InputDateFormat.mmddyyyy:\n return 'mm/dd/yyyy';\n case InputDateFormat.ddmmyyyy:\n return 'dd/mm/yyyy';\n }\n }\n\n getClass() {\n let cls = '';\n if (this.iconSrc()) {\n cls = cls + 'pr-3 pl-10';\n } else {\n cls = cls + 'px-3';\n }\n\n if (this.fullWidth()) {\n cls = cls + ' ' + 'w-full';\n }\n\n return cls;\n }\n\n onFocus() {\n this.isFocused.set(true);\n }\n\n onBlur() {\n this.isFocused.set(false);\n this.onTouched();\n }\n\n onInputChanged($event: Event) {\n const target = $event.target as HTMLInputElement;\n const inputValue = target.value.trim();\n\n // Remove non-numeric characters for length validation\n const numericValue = inputValue.replace(/[^0-9]/g, '');\n const parsedDate = this.parseDate(inputValue);\n\n if (parsedDate) {\n this.onValueChange(parsedDate);\n } else if (numericValue.length === 8) {\n this.textInputValue.set(null);\n this.onValueChange(null);\n }\n }\n\n onDatePickerIconClicked() {\n let dialogRef = this.overlayService.openNearElement(DatePickerOverlayComponent, this.trigger.nativeElement, {\n data: {\n selectedDate: this.controlValue,\n minDate: this.minDate(),\n maxDate: this.maxDate(),\n allowOnlyPast: this.allowOnlyPast(),\n allowOnlyFuture: this.allowOnlyFuture(),\n disabledDays: this.disabledDays(),\n disabledDates: this.disabledDates()\n }\n });\n this.subscription = dialogRef.closed.subscribe((date: Date) => {\n let formattedDate = this.formatDate(date);\n this.textInputValue.set(formattedDate);\n this.onValueChange(date);\n });\n }\n\n private parseDate(dateStr: string | null): Date | null {\n if (!dateStr) return null;\n const parts = dateStr.split('/');\n if (parts.length !== 3) return null;\n\n const [part1, part2, part3] = parts.map(Number);\n const [mm, dd, yyyy] = this.inputDateFormat() === InputDateFormat.mmddyyyy ? [part1, part2, part3] : [part2, part1, part3];\n\n if (!mm || !dd || !yyyy || mm > 12 || dd > 31 || yyyy < 1000 || yyyy > 9999) return null;\n\n const parsedDate = new Date(yyyy, mm - 1, dd);\n if (parsedDate.getMonth() + 1 !== mm || parsedDate.getDate() !== dd || parsedDate.getFullYear() !== yyyy) {\n return null; // Ensures the date is valid\n }\n\n return parsedDate;\n }\n\n private formatDate(date: Date): string {\n const mm = String(date.getMonth() + 1).padStart(2, '0');\n const dd = String(date.getDate()).padStart(2, '0');\n const yyyy = date.getFullYear();\n return this.inputDateFormat() === InputDateFormat.mmddyyyy ? `${mm}/${dd}/${yyyy}` : `${dd}/${mm}/${yyyy}`;\n }\n}\n","<app-base-input #inputElement [title]=\"label()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"relative flex items-center w-full text-neutral-400 bg-white shadow-1 rounded-md\">\n @if (iconSrc()) {\n <app-svg-icon [size]=\"18\" [src]=\"iconSrc()!\"\n class=\"absolute pointer-events-none ml-3 text-neutral-400\"></app-svg-icon>\n }\n\n\n <!-- <p>{{ formControl.getError('required') ? placeholder + ' ' : placeholder }}</p>-->\n\n <input\n [mask]=\"'00/00/0000'\"\n [showMaskTyped]=\"isFocused()\"\n class=\"w-full h-[46px] placeholder-neutral-400 text-black rounded-md border-none outline-none focus:border-none ring-1 ring-neutral-300 focus:ring-primary-500 focus:ring-2 transition-all duration-300\"\n [class.text-neutral-400]=\"formControl.disabled\"\n [class.disabled-placeholder]=\"formControl.disabled\"\n [(ngModel)]=\"textInputValue\"\n (focus)=\"onFocus()\"\n [ngClass]=\"getClass()\"\n [placeholder]=\"placeHolder\"\n (blur)=\"onBlur()\"\n (input)=\"onInputChanged($event)\">\n\n\n <div #trigger (click)=\"onDatePickerIconClicked()\"\n class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\"\n class=\"w-[18px] h-[18px] text-neutral-500\">\n <path\n d=\"M19 19H5V8H19M16 1V3H8V1H6V3H5C3.89 3 3 3.89 3 5V19C3 19.5304 3.21071 20.0391 3.58579 20.4142C3.96086 20.7893 4.46957 21 5 21H19C19.5304 21 20.0391 20.7893 20.4142 20.4142C20.7893 20.0391 21 19.5304 21 19V5C21 3.89 20.1 3 19 3H18V1M17 12H12V17H17V12Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n\n </div>\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"flex mt-1\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import {Component, input, OnInit, output, signal} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\nimport {BaseControlValueAccessorV3} from \"../../base/base-control-value-accessor-v3\";\nimport {Weekday} from '../date-picker/date-picker.component';\n\n@Component({\n selector: 'app-date-range-picker',\n imports: [\n NgClass\n ],\n standalone: true,\n templateUrl: './date-range-picker.component.html',\n styleUrl: './date-range-picker.component.scss'\n})\nexport class DateRangePickerComponent extends BaseControlValueAccessorV3<DateRangeEvent | null> implements OnInit {\n\n minDate = input<Date | null>();\n maxDate = input<Date | null>();\n allowOnlyPast = input<boolean>(false);\n allowOnlyFuture = input<boolean>(false);\n allowToday = input<boolean>(false);\n\n dateRangeSelected = output<DateRangeEvent>();\n\n days: { day: Weekday, displayName: string }[] = [\n {day: 'sunday', displayName: 'Su'},\n {day: 'monday', displayName: 'Mo'},\n {day: 'tuesday', displayName: 'Tu'},\n {day: 'wednesday', displayName: 'We'},\n {day: 'thursday', displayName: 'Th'},\n {day: 'friday', displayName: 'Fr'},\n {day: 'saturday', displayName: 'Sa'}\n ];\n\n months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n\n uiMode = signal<'date' | 'month' | 'year'>('date');\n\n activeMonth!: number;\n activeYear!: number;\n startDate?: Date | null;\n endDate?: Date | null;\n\n selectingStart = true;\n hoveredDate: Date | null = null;\n\n years: { value: number; isEnabled: boolean }[] = [];\n daysOfMonth: { value: number; isEnabled: boolean }[] = [];\n blankDays: number[] = [];\n\n ngOnInit(): void {\n this.initDate();\n this.populateDays();\n }\n\n protected override onValueReady(value: DateRangeEvent): void {\n if (value?.startDate && value?.endDate) {\n this.startDate = new Date(value.startDate);\n this.endDate = new Date(value.endDate);\n this.activeMonth = this.startDate.getMonth();\n this.activeYear = this.startDate.getFullYear();\n } else {\n this.initDate();\n }\n\n this.populateDays();\n }\n\n initDate() {\n let today: Date = this.controlValue?.startDate ?? new Date();\n this.activeMonth = today.getMonth();\n this.activeYear = today.getFullYear();\n }\n\n getMMMYYYY() {\n return `${this.months[this.activeMonth]} ${this.activeYear}`;\n }\n\n populateYears(): void {\n let startYear = Math.floor(this.activeYear / 24) * 24;\n if (startYear <= 0) startYear = 1;\n\n const todayYear = new Date().getFullYear();\n\n this.years = Array.from({ length: 24 }, (_, i) => {\n const year = startYear + i;\n let isEnabled = true;\n\n if (this.allowOnlyPast() && year > todayYear) isEnabled = false;\n if (this.allowOnlyFuture() && year < todayYear) isEnabled = false;\n\n if (isEnabled && this.minDate()) {\n isEnabled = year >= this.minDate()!.getFullYear();\n }\n\n if (isEnabled && this.maxDate()) {\n isEnabled = isEnabled && year <= this.maxDate()!.getFullYear();\n }\n\n return { value: year, isEnabled };\n });\n }\n\n populateDays() {\n const daysInMonth = new Date(this.activeYear, this.activeMonth + 1, 0).getDate();\n this.blankDays = Array.from({length: new Date(this.activeYear, this.activeMonth).getDay()}, (_, i) => i + 1);\n\n this.daysOfMonth = Array.from({length: daysInMonth}, (_, i) => {\n const day = i + 1;\n const currentDate = new Date(this.activeYear, this.activeMonth, day);\n let isEnabled = true;\n\n if (this.allowOnlyFuture() && currentDate < new Date()) {\n isEnabled = false;\n }\n\n if (this.allowOnlyPast() && currentDate > new Date()) {\n isEnabled = false;\n }\n\n if (isEnabled && this.minDate()) {\n isEnabled = currentDate >= this.minDate()!;\n }\n\n if (isEnabled && this.maxDate()) {\n isEnabled = isEnabled && currentDate <= this.maxDate()!;\n }\n\n if(this.allowToday() && this.isToday(day)) {\n isEnabled = true;\n }\n\n return {value: day, isEnabled};\n });\n }\n\n\n isMonthEnabled(month: number): boolean {\n const monthStartDate = new Date(this.activeYear, month, 1);\n const today = new Date();\n const todayMonthStart = new Date(today.getFullYear(), today.getMonth(), 1);\n\n if (this.allowOnlyPast() && monthStartDate > todayMonthStart) return false;\n if (this.allowOnlyFuture() && monthStartDate < todayMonthStart) return false;\n\n if (this.minDate()) {\n const minMonthStart = new Date(this.minDate()!.getFullYear(), this.minDate()!.getMonth(), 1);\n if (monthStartDate < minMonthStart) return false;\n }\n\n if (this.maxDate()) {\n const maxMonthStart = new Date(this.maxDate()!.getFullYear(), this.maxDate()!.getMonth(), 1);\n if (monthStartDate > maxMonthStart) return false;\n }\n\n return true;\n }\n\n onYearSelected(year: number): void {\n this.activeYear = year;\n this.uiMode.set('month');\n }\n\n onMonthSelected(month: number): void {\n this.activeMonth = month;\n this.uiMode.set('date');\n this.populateDays();\n }\n\n isToday(day: number) {\n const today = new Date();\n const d = new Date(this.activeYear, this.activeMonth, day);\n return today.toDateString() === d.toDateString();\n }\n\n onDaySelected(day: number) {\n const selectedDate = new Date(this.activeYear, this.activeMonth, day);\n\n if (!this.startDate || selectedDate < this.startDate) {\n this.startDate = selectedDate;\n this.endDate = null;\n this.hoveredDate = null;\n this.selectingStart = false;\n } else {\n this.endDate = selectedDate;\n\n let event: DateRangeEvent = {startDate: this.startDate, endDate: this.endDate};\n this.dateRangeSelected.emit(event);\n this.selectingStart = true;\n }\n\n\n if (this.startDate && this.endDate) {\n this.onValueChange({startDate: this.startDate, endDate: this.endDate});\n }\n }\n\n onDayHovered(day: number) {\n if (this.startDate && !this.endDate) {\n this.hoveredDate = new Date(this.activeYear, this.activeMonth, day);\n } else {\n this.hoveredDate = null;\n }\n }\n\n\n isDateInSelectionRange(day: number): boolean {\n\n let date = new Date(this.activeYear, this.activeMonth, day);\n if (this.startDate && this.endDate) {\n return date >= this.startDate && date <= this.endDate;\n }\n return false;\n }\n\n isDateInHoveredRange(day: number): boolean {\n let date = new Date(this.activeYear, this.activeMonth, day);\n\n if (this.startDate && this.hoveredDate && !this.endDate) {\n const adjustedHoveredDate = new Date(this.hoveredDate);\n adjustedHoveredDate.setDate(this.hoveredDate.getDate() - 1);\n return (\n date > this.startDate &&\n date < this.hoveredDate\n );\n }\n return false;\n }\n\n isDateHovered(day: number): boolean {\n let date = new Date(this.activeYear, this.activeMonth, day);\n return this.hoveredDate?.getTime() === date.getTime();\n }\n\n isDateInRange(day: number): boolean {\n let date = new Date(this.activeYear, this.activeMonth, day);\n return this.isDateInSelectionRange(day) || this.isDateInHoveredRange(day);\n }\n\n isSelectionStartDate(day: number): boolean | null | undefined {\n const date = new Date(this.activeYear, this.activeMonth, day);\n return (this.startDate && date.toDateString() === this.startDate.toDateString());\n }\n\n isSelectionEndDate(day: number): boolean | null | undefined {\n const date = new Date(this.activeYear, this.activeMonth, day);\n return (this.endDate && date.toDateString() === this.endDate.toDateString());\n }\n\n previousMonthPressed() {\n switch (this.uiMode()) {\n case 'year':\n if (this.activeYear > 24) {\n this.activeYear -= 24;\n this.populateYears();\n }\n break;\n\n case 'month':\n if (this.activeYear > 1) {\n this.activeYear--;\n }\n break;\n\n case 'date':\n if (this.activeMonth === 0) {\n if (this.activeYear > 1) {\n this.activeYear--;\n this.activeMonth = 11;\n }\n } else {\n this.activeMonth--;\n }\n this.populateDays();\n break;\n\n default:\n console.warn('Unknown mode:', this.uiMode());\n }\n }\n\n nextMonthPressed() {\n switch (this.uiMode()) {\n case 'year':\n this.activeYear += 24;\n this.populateYears();\n break;\n\n case 'month':\n this.activeYear++;\n break;\n\n case 'date':\n if (this.activeMonth === 11) {\n this.activeYear++;\n this.activeMonth = 0;\n } else {\n this.activeMonth++;\n }\n this.populateDays();\n break;\n\n default:\n console.warn('Unknown mode:', this.uiMode());\n }\n }\n\n onYearSelectionPressed() {\n switch (this.uiMode()) {\n case 'year':\n this.uiMode.set('date');\n break;\n case \"month\":\n this.uiMode.set('year');\n break;\n case \"date\":\n this.populateYears();\n this.uiMode.set('year');\n break;\n }\n\n }\n\n getFirstYear() {\n return this.years[0].value;\n }\n\n getLastYear() {\n return this.years[this.years.length - 1].value;\n }\n\n resetSelection() {\n this.startDate = null;\n this.endDate = null;\n this.hoveredDate = null;\n\n this.onValueChange(null);\n }\n}\n\nexport interface DateRangeEvent {\n startDate: Date;\n endDate: Date;\n}\n","<div\n class=\"flex flex-col gap-3 bg-white rounded-md border border-neutral-100 min-h-96 px-3 py-3 shadow-1 select-none\">\n\n <div class=\"grow flex flex-col gap-3 w-[280px]\">\n\n <div class=\"flex items-center justify-between\">\n\n <div (click)=\"onYearSelectionPressed()\"\n class=\"flex items-center gap-1 px-2.5 py-2 hover:bg-neutral-100 rounded-full cursor-pointer\">\n @switch (uiMode()) {\n @case ('date') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ getMMMYYYY() }}</span>\n <svg class=\"h-[18px] w-[18px] text-neutral-900\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M7 10L12 15L17 10H7Z\" fill=\"currentColor\"/>\n </svg>\n }\n @case ('month') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ activeYear }}</span>\n }\n @case ('year') {\n <span class=\"text-caption text-neutral-900 uppercase\">{{ getFirstYear() }} - {{ getLastYear() }}</span>\n <svg class=\"h-[18px] w-[18px] text-neutral-900\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7 15L12 10L17 15H7Z\" fill=\"currentColor\"/>\n </svg>\n }\n }\n\n </div>\n\n <div class=\"flex items-center gap-2\">\n\n <div (click)=\"previousMonthPressed()\"\n class=\"flex items-center justify-center h-[36px] w-[36px] rounded-full hover:bg-neutral-100 cursor-pointer select-none\">\n <svg class=\"h-[24px] w-[24px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M15.41 16.58L10.83 12L15.41 7.41L14 6L8 12L14 18L15.41 16.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div (click)=\"nextMonthPressed()\"\n class=\"flex items-center justify-center h-[36px] w-[36px] rounded-full hover:bg-neutral-100 cursor-pointer select-none\">\n <svg class=\"h-[24px] w-[24px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M8.58997 16.58L13.17 12L8.58997 7.41L9.99997 6L16 12L9.99997 18L8.58997 16.58Z\" fill=\"black\"/>\n </svg>\n </div>\n\n </div>\n\n </div>\n <div class=\"flex gap-3\">\n <span (click)=\"resetSelection()\"\n class=\"text-overline px-2 py-1.5 rounded-md transition-all duration-300 bg-info-50 cursor-pointer select-none text-info-500\">Today</span>\n </div>\n\n @if (uiMode() == 'date') {\n <div class=\"grid grid-cols-7 gap-y-1 text-xs text-center text-gray-900\">\n @for (day of days; track day) {\n <span class=\"flex items-center justify-center w-[40px] h-[40px] font-semibold rounded-lg\">{{ day.displayName }}</span>\n }\n\n @for (blankDay of blankDays; track blankDay) {\n <span class=\"flex items-center justify-center w-[40px] h-[40px] font-semibold rounded-lg text-transparent\"></span>\n }\n\n @for (day of daysOfMonth; track day) {\n <span (click)=\"day.isEnabled ? onDaySelected(day.value) : null\"\n (mouseover)=\"onDayHovered(day.value)\"\n [ngClass]=\"{\n 'text-neutral-400' : !day.isEnabled,\n 'border rounded-lg border-primary-500 text-primary-900': isToday(day.value) && !isSelectionStartDate(day.value) && !isSelectionEndDate(day.value),\n 'bg-primary-500 rounded-tl-lg rounded-bl-lg text-white': isSelectionStartDate(day.value),\n 'bg-primary-500 !rounded-tr-lg !rounded-br-lg text-white': isSelectionEndDate(day.value),\n 'bg-primary-50 text-primary-900': isDateInSelectionRange(day.value),\n 'border-t border-b border-r rounded-tr-lg rounded-br-lg border-dashed border-gray-500 bg-neutral-100 text-primary-900': isDateHovered(day.value),\n '!border-t !border-b !border-r-none !border-dashed !border-gray-500 !text-primary-900': isDateInHoveredRange(day.value),\n }\"\n class=\"flex items-center justify-center w-[40px] h-[40px] text-gray-700 select-none cursor-pointer\">{{ day.value }}</span>\n }\n </div>\n }\n\n @if (uiMode() == 'month') {\n <div class=\"grid grid-cols-4 text-xs text-center text-gray-900\">\n @for (month of months; track month; let i = $index) {\n <span (click)=\"onMonthSelected(i)\"\n [ngClass]=\"isMonthEnabled(i) ? '' : 'text-neutral-400'\"\n class=\"flex items-center px-2 py-2.5 justify-center cursor-pointer select-none hover:bg-neutral-100 rounded-lg uppercase\">{{ month }}</span>\n }\n </div>\n }\n\n\n @if (uiMode() == 'year') {\n <div class=\"grid grid-cols-4 text-xs text-center text-gray-900\">\n @for (year of years; track year; let i = $index) {\n <span (click)=\"year.isEnabled ? onYearSelected(year.value) : null\"\n [ngClass]=\"{\n 'text-neutral-400' : !year.isEnabled,\n }\"\n class=\"flex items-center px-2 py-2.5 justify-center cursor-pointer select-none hover:bg-neutral-100 rounded-lg\">{{ year.value }}</span>\n }\n </div>\n }\n </div>\n\n\n <div class=\"flex items-center justify-end\">\n <span (click)=\"resetSelection()\"\n class=\"text-overline px-2 py-2 rounded-md transition-all duration-300 hover:bg-info-50 cursor-pointer select-none text-info-500\">Reset</span>\n </div>\n\n</div>\n","import {\n AfterContentInit, ChangeDetectorRef,\n Component, ElementRef, HostListener,\n inject,\n input, OnChanges,\n output, Renderer2,\n signal, SimpleChanges, viewChild, ViewChild\n} from '@angular/core';\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {FormControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseInputComponent} from '../_base/base-input/base-input.component';\nimport {State} from '../../base/base-state';\nimport {NgClass} from \"@angular/common\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {\n CdkConnectedOverlay,\n Overlay\n} from \"@angular/cdk/overlay\";\nimport {resolveTemplateWithObject} from \"../../common-utils/template-resolver\";\nimport {BaseControlValueAccessorV2} from \"../../base/base-control-value-accessor-v2\";\n\n@Component({\n selector: 'app-dropdown',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n BaseInputComponent,\n NgClass,\n HumanizeFormMessagesPipe,\n CdkConnectedOverlay,\n AppSvgIconComponent\n ],\n templateUrl: './dropdown.component.html',\n styleUrl: './dropdown.component.scss'\n})\nexport class DropdownComponent<T> extends BaseControlValueAccessorV2<any> implements AfterContentInit, OnChanges {\n\n cdr = inject(ChangeDetectorRef);\n renderer = inject(Renderer2);\n overlay = inject(Overlay);\n\n title = input<string | null>();\n items = input<T[]>([]);\n placeholder = input<string>('Select');\n prefixIconPath = input<string | null>();\n isTitlePrefix = input<boolean>(false);\n display = input<string | null>();\n displayTemplate = input<string | null>();\n value = input<string | null>();\n searchKeyMatch = input<string | null>();\n // identifier = input<string>();\n noDataMessage = input<string>();\n state = input<State<any>>();\n fullWidth = input<boolean>(false);\n showErrorSpace = input<boolean>(false);\n enableSearch = input<boolean>(false);\n addActionText = input<string | null>();\n minimumPopupWidth = input(250);\n noBorder = input<boolean>(false);\n\n isOpen = signal(false);\n highlightedIndex = signal(-1);\n selectedItem = signal<T | null>(null);\n dropUp = signal(false);\n dropdownWidth = signal(300);\n filteredList = signal<T[]>([]);\n errorMessages = signal<{ [key: string]: string }>({});\n\n valueChanged = output<T | null>();\n addActionClicked = output<void>();\n\n @ViewChild('dropdownButton', {static: true}) dropdownButton!: ElementRef;\n @ViewChild('dropdown', {static: true}) dropdown!: ElementRef;\n @ViewChild('dropdownListContainer', {static: false}) dropdownListContainer!: ElementRef;\n @ViewChild('dropdownList', {static: false}) dropdownList!: ElementRef;\n private searchField = viewChild<ElementRef<HTMLInputElement>>('searchField');\n\n scrollStrategy = this.overlay.scrollStrategies.block();\n\n ngOnChanges(changes: SimpleChanges): void {\n let value = this.actualValue;\n if (value != null) {\n if (this.value() != null) {\n let matchingItem = this.getObjectByPathValue(this.items(), this.value()!, value);\n this.selectedItem.set(matchingItem ?? null);\n } else {\n this.selectedItem.set(value);\n }\n }\n }\n\n protected onValueReady(value: any): void {\n if (value != null) {\n if (this.value() != null) {\n let matchingItem = this.getObjectByPathValue(this.items(), this.value()!, value);\n this.selectedItem.set(matchingItem ?? null);\n } else {\n this.selectedItem.set(value);\n }\n } else {\n this.selectedItem.set(null);\n }\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n getDisplayString(item: T | null): any {\n\n let object = item as any;\n if (object == null) {\n return null;\n }\n\n if (this.display() != null && this.display() != '') {\n return this.display()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if (this.displayTemplate() != null && this.displayTemplate() != '') {\n return resolveTemplateWithObject(object, this.displayTemplate()!);\n }\n\n return item;\n\n }\n\n getButtonClass(): string {\n if (this.noBorder()) {\n return 'border-none outline-none ring-none';\n } else {\n return 'border-none outline-none border-gray-300 ring-1 focus:ring-2 ring-neutral-300 focus:ring-primary-500 shadow-1 focus:border-none focus:outline-none';\n }\n }\n\n filterList(event: Event) {\n const searchKeyword = (event.target as HTMLInputElement)?.value;\n\n if (this.enableSearch()) {\n this.updateFilteredList(searchKeyword);\n } else {\n const firstMatchingItem = this.findFirstMatch(searchKeyword);\n let index = this.filteredList().findIndex(item => item == firstMatchingItem);\n this.highlightedIndex.set(index);\n }\n }\n\n updateFilteredList(searchKeyword?: string) {\n\n if (!searchKeyword || searchKeyword.trim() === '') {\n return;\n }\n\n const filterResult = this.items().filter((item) => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString.toLowerCase().includes(searchKeyword.toLowerCase());\n }\n return false;\n });\n\n this.filteredList.set(filterResult);\n this.updateHighlightedIndex();\n }\n\n findFirstMatch(searchKeyword?: string): T | null {\n if (!searchKeyword || searchKeyword.trim() === '') {\n return null;\n }\n return this.filteredList().find((item) => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString.toLowerCase().includes(searchKeyword.toLowerCase());\n }\n return false;\n }) || null;\n }\n\n getValue(item: T): any {\n if (this.value() == null || this.value() == '') {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getSelectedItem(): T | null {\n let items = this.filteredList() ?? [];\n let selectedItem = items.find(item => this.getValue(item) == this.formControl.value);\n return selectedItem ?? this.selectedItem() ?? null;\n }\n\n toggleDropdown(): void {\n this.isOpen.update(prev => !prev);\n if (this.isOpen()) {\n this.filteredList.set(this.items());\n this.updateHighlightedIndex();\n this.adjustDropdownPosition();\n this.setPopupWidth();\n this.cdr.detectChanges();\n this.setDropdownMaxHeight();\n this.scrollToHighlightedItem();\n this.searchField()?.nativeElement.focus();\n }\n }\n\n updateHighlightedIndex() {\n let index = this.filteredList().findIndex(item => item == this.selectedItem());\n this.highlightedIndex.set(index);\n }\n\n setPopupWidth() {\n const buttonWidth = this.dropdownButton.nativeElement.offsetWidth;\n if (buttonWidth < this.minimumPopupWidth()) {\n this.dropdownWidth.set(this.minimumPopupWidth());\n return;\n }\n\n this.dropdownWidth.set(this.dropdownButton.nativeElement.offsetWidth);\n }\n\n onClickOutside() {\n this.isOpen.set(false);\n this.dropdown?.nativeElement.focus();\n }\n\n onItemClicked(item: T): void {\n this.onClickOutside();\n this.selectedItem.set(item);\n if (this.formControl.enabled) {\n this.markAsTouched();\n const value = this.getValue(item);\n if (value == this.formControl.value) {\n this.onChange(value);\n this.valueChanged.emit(null);\n } else {\n this.onChange(value);\n this.valueChanged.emit(item);\n }\n }\n }\n\n setDropdownMaxHeight() {\n const buttonRect = this.dropdownButton.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - buttonRect.bottom;\n const spaceAbove = buttonRect.top;\n\n let maxHeight;\n if (this.dropUp()) {\n maxHeight = spaceAbove - 36;\n } else {\n maxHeight = spaceBelow - 36;\n }\n\n if (this.dropdownListContainer) {\n this.renderer.setStyle(this.dropdownListContainer.nativeElement, 'max-height', `${maxHeight}px`);\n }\n }\n\n adjustDropdownPosition() {\n const buttonRect = this.dropdownButton.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - buttonRect.bottom;\n const spaceAbove = buttonRect.top;\n this.dropUp.set(spaceAbove > spaceBelow && spaceBelow < 200);\n }\n\n scrollToHighlightedItem() {\n if (this.dropdownList && this.dropdownList.nativeElement.children[this.highlightedIndex()]) {\n const highlightedItem = this.dropdownList.nativeElement.children[this.highlightedIndex()];\n highlightedItem.scrollIntoView({block: 'nearest'});\n }\n }\n\n @HostListener('window:resize')\n onResize() {\n if (this.isOpen()) {\n this.adjustDropdownPosition();\n }\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (!this.isOpen()) {\n return;\n }\n switch (event.key) {\n case 'ArrowDown':\n if (this.highlightedIndex() < this.filteredList().length - 1) {\n this.highlightedIndex.update(prev => prev + 1);\n }\n this.scrollToHighlightedItem();\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (this.highlightedIndex() > 0) {\n this.highlightedIndex.update(prev => prev - 1);\n }\n this.scrollToHighlightedItem();\n event.preventDefault();\n break;\n case 'Enter':\n this.onItemClicked(this.filteredList()[this.highlightedIndex()]);\n this.isOpen.set(false);\n event.preventDefault();\n break;\n case 'Escape':\n this.isOpen.set(false);\n event.preventDefault();\n break;\n }\n\n\n if (!this.enableSearch()) {\n let key = event.key;\n if (key.length === 1 && /^[a-zA-Z]$/.test(key)) {\n const matchingIndex = this.filteredList().findIndex(item => {\n let resolvedText = '';\n if (this.searchKeyMatch() != null && this.searchKeyMatch() != '') {\n resolvedText = resolveTemplateWithObject(item as any, `$${this.searchKeyMatch()}`);\n } else {\n resolvedText = this.getDisplayString(item);\n }\n return resolvedText.toLowerCase().startsWith(key);\n }\n );\n\n if (matchingIndex !== -1) {\n this.highlightedIndex.set(matchingIndex);\n this.scrollToHighlightedItem()\n }\n }\n }\n }\n\n onClearSearchClicked() {\n if (this.searchField()) {\n this.searchField()!.nativeElement.value = '';\n this.filteredList.set(this.items());\n this.highlightedIndex.set(0);\n this.scrollToHighlightedItem();\n this.searchField()!.nativeElement.focus();\n }\n }\n\n onAddActionClicked() {\n this.addActionClicked.emit();\n }\n\n getObjectByPathValue(objects: any[], path: string, value: any): T | null {\n const pathParts = path.split('.');\n if(objects == null) {\n return null;\n }\n\n return objects.find((obj) => {\n let current = obj;\n for (const part of pathParts) {\n if (current && part in current) {\n current = current[part];\n } else {\n return false;\n }\n }\n return current === value;\n });\n }\n}\n","<app-base-input [title]=\"isTitlePrefix() ? null : title()\" [fullWidth]=\"fullWidth()\" (keydown)=\"handleKeydown($event)\"\n [isRequiredField]=\"hasRequiredValidator()\">\n <div #dropdownButton input class=\"relative inline text-left min-w-28 w-full\">\n\n <button #dropdown (click)=\"toggleDropdown()\"\n type=\"button\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"isOpen()\"\n class=\"h-[46px] flex items-center gap-3 w-full px-3 py-2 text-sm justify-between font-medium text-gray-700 bg-white rounded-md transition-all duration-300\"\n [ngClass]=\"getButtonClass()\">\n\n <div class=\"flex items-center gap-3 w-full\">\n @if(prefixIconPath()) {\n <app-svg-icon [size]=\"18\" [src]=\"prefixIconPath()!\"></app-svg-icon>\n }\n @if (isTitlePrefix()) {\n <span class=\"text-body2 text-neutral-500 whitespace-nowrap\">{{ title() }}:</span>\n }\n <span class=\"w-full text-body2 text-left truncate overflow-hidden text-ellipsis ... line-clamp-2\"\n [ngClass]=\"((formControl.value != null && formControl.value != '') || (selectedItem() != null && selectedItem() != '')) ? 'text-black' : 'text-gray-400'\">{{ getDisplayString(selectedItem()) || getDisplayString(getSelectedItem()) || placeholder() }}</span>\n </div>\n\n <svg class=\"-mr-1 h-[20px] w-[20px] text-gray-500\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M7.41 8.57996L12 13.17L16.59 8.57996L18 9.99996L12 16L6 9.99996L7.41 8.57996Z\"\n fill=\"currentColor\"/>\n </svg>\n </button>\n\n <ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"dropdownButton\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n (overlayOutsideClick)=\"onClickOutside()\"\n [cdkConnectedOverlayBackdropClass]=\"['bg-black', 'bg-opacity-20']\"\n [cdkConnectedOverlayPositions]=\"[\n {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},\n {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}\n ]\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayOffsetY]=\"10\">\n <div #dropdownListContainer\n class=\"flex flex-col rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none overflow-clip\">\n @if (enableSearch()) {\n <div class=\"relative flex items-center w-full text-neutral-400 bg-white border border-b border-neutral-200\">\n <svg class=\"absolute pointer-events-none ml-3 text-neutral-400 w-[20px] h-[20px]\"\n viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.5 3C11.2239 3 12.8772 3.68482 14.0962 4.90381C15.3152 6.12279 16 7.77609 16 9.5C16 11.11 15.41 12.59 14.44 13.73L14.71 14H15.5L20.5 19L19 20.5L14 15.5V14.71L13.73 14.44C12.59 15.41 11.11 16 9.5 16C7.77609 16 6.12279 15.3152 4.90381 14.0962C3.68482 12.8772 3 11.2239 3 9.5C3 7.77609 3.68482 6.12279 4.90381 4.90381C6.12279 3.68482 7.77609 3 9.5 3ZM9.5 5C7 5 5 7 5 9.5C5 12 7 14 9.5 14C12 14 14 12 14 9.5C14 7 12 5 9.5 5Z\"\n fill=\"currentColor\"/>\n </svg>\n\n <input (input)=\"filterList($event)\" (keydown)=\"handleKeydown($event)\" #searchField\n class=\"h-[46px] pr-3 pl-10 placeholder-neutral-400 text-black border-none outline-none focus:border-none w-full\">\n\n <div\n class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full cursor-pointer\"\n (click)=\"onClearSearchClicked()\">\n <svg class=\"h-[16px] w-[16px] text-neutral-400\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 2C17.53 2 22 6.47 22 12C22 17.53 17.53 22 12 22C6.47 22 2 17.53 2 12C2 6.47 6.47 2 12 2ZM15.59 7L12 10.59L8.41 7L7 8.41L10.59 12L7 15.59L8.41 17L12 13.41L15.59 17L17 15.59L13.41 12L17 8.41L15.59 7Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n }\n\n @if (addActionText()) {\n <div class=\"flex gap-3 px-4 py-4 bg-neutral-50 w-full cursor-pointer border-b border-neutral-100\"\n (click)=\"onAddActionClicked()\">\n <svg class=\"text-primary-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M19 13H13V19H11V13H5V11H11V5H13V11H19V13Z\" fill=\"currentColor\"/>\n </svg>\n <span class=\"text-body2 text-primary-500\">{{ addActionText() }}</span>\n </div>\n }\n\n <div #dropdownList class=\"overflow-y-scroll scrollbar scrollbar-thumb-gray-500 scrollbar-track-gray-300\"\n role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"options-menu\" tabindex=\"-1\"\n [style.width.px]=\"dropdownWidth()\">\n\n @for (item of filteredList(); track item; let i = $index) {\n <span class=\"text-gray-700 block px-4 py-3 text-sm hover:bg-neutral-100 cursor-pointer\"\n [ngClass]=\"(highlightedIndex() == i) ? 'bg-neutral-200' : 'bg-neutral-50'\" role=\"menuitem\"\n tabindex=\"-1\" (click)=\"onItemClicked(item)\">{{ getDisplayString(item) }}</span>\n } @empty {\n <span class=\"text-gray-400 block px-4 py-4 text-sm select-none\" role=\"menuitem\" tabindex=\"-1\">No options available</span>\n }\n </div>\n </div>\n </ng-template>\n\n </div>\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import {\n Component,\n OnInit,\n inject,\n input,\n output,\n AfterContentInit,\n signal\n} from '@angular/core';\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {FormControl, NgControl} from \"@angular/forms\";\nimport {SpinnerComponent} from \"../../components/spinner/spinner.component\";\nimport {HumanizeFormMessagesPipe} from '../humanize-form-messages.pipe';\n\n@Component({\n selector: 'app-file-uploader',\n standalone: true,\n imports: [\n SpinnerComponent,\n HumanizeFormMessagesPipe\n ],\n templateUrl: './file-uploader.component.html',\n styleUrls: ['./file-uploader.component.scss']\n})\nexport class FileUploaderComponent extends BaseControlValueAccessor implements OnInit, AfterContentInit {\n fullWidth = input(false);\n label = input<string | null>();\n isRequired = input(false);\n uploading = input(false);\n errorMessages = input<{ [key: string]: string }>({});\n\n fileSelected = output<File>();\n fileRemoved = output<void>();\n\n id = signal<string>('');\n\n selectedFile = signal<File | null>(null);\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n ngOnInit(): void {\n this.id.set(this.getId());\n }\n\n onFileChange(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const firstFile = input.files[0];\n this.onChange(firstFile);\n this.fileSelected.emit(firstFile);\n this.selectedFile.set(firstFile);\n }\n }\n\n onRemoveFileClicked() {\n this.onChange(null);\n this.selectedFile.set(null);\n this.fileRemoved.emit();\n }\n\n onViewFileClicked() {\n if (this.formControl.value == null) {\n return;\n }\n\n if (this.formControl.value instanceof File) {\n const file = this.formControl.value as File;\n if (file) {\n const url = URL.createObjectURL(file);\n window.open(url, '_blank');\n }\n } else {\n window.open(this.formControl.value, '_blank');\n }\n }\n\n private getId(): string {\n const randomNumber = Math.floor(1000 + Math.random() * 9000);\n return `file-input-${randomNumber.toString()}`;\n }\n\n getFileNameFromUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n const pathname = parsedUrl.pathname;\n const fileName = pathname.split('/').pop();\n\n return fileName ? decodeURIComponent(fileName) : '';\n } catch {\n const fileName = url.split('/').pop();\n return fileName ? decodeURIComponent(fileName) : '';\n }\n }\n}\n","<div\n class=\"flex items-center rounded border-2 border-dashed border-info-300 px-4 py-4 gap-2 cursor-pointer\">\n <div class=\"flex flex-row items-center gap-2 w-full\">\n <div class=\"flex items-center gap-2 grow\">\n <label [for]=\"id()\" class=\"flex items-center gap-3 text-caption cursor-pointer grow\">\n <svg viewBox=\"0 0 24 24\" class=\"h-[24px] w-[24px] text-neutral-500\" fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16.5 6V17.5C16.5 18.5609 16.0786 19.5783 15.3284 20.3284C14.5783 21.0786 13.5609 21.5 12.5 21.5C11.4391 21.5 10.4217 21.0786 9.67157 20.3284C8.92143 19.5783 8.5 18.5609 8.5 17.5V5C8.5 4.33696 8.76339 3.70107 9.23223 3.23223C9.70107 2.76339 10.337 2.5 11 2.5C11.663 2.5 12.2989 2.76339 12.7678 3.23223C13.2366 3.70107 13.5 4.33696 13.5 5V15.5C13.5 15.7652 13.3946 16.0196 13.2071 16.2071C13.0196 16.3946 12.7652 16.5 12.5 16.5C12.2348 16.5 11.9804 16.3946 11.7929 16.2071C11.6054 16.0196 11.5 15.7652 11.5 15.5V6H10V15.5C10 16.163 10.2634 16.7989 10.7322 17.2678C11.2011 17.7366 11.837 18 12.5 18C13.163 18 13.7989 17.7366 14.2678 17.2678C14.7366 16.7989 15 16.163 15 15.5V5C15 3.93913 14.5786 2.92172 13.8284 2.17157C13.0783 1.42143 12.0609 1 11 1C9.93913 1 8.92172 1.42143 8.17157 2.17157C7.42143 2.92172 7 3.93913 7 5V17.5C7 18.9587 7.57946 20.3576 8.61091 21.3891C9.64236 22.4205 11.0413 23 12.5 23C13.9587 23 15.3576 22.4205 16.3891 21.3891C17.4205 20.3576 18 18.9587 18 17.5V6H16.5Z\"\n fill=\"currentColor\"/>\n </svg>\n <span class=\"text-caption text-neutral-900\">{{ label() }}</span>\n @if (hasRequiredValidator() || isRequired()) {\n <span class=\"text-caption text-error-500\">*</span>\n }\n </label>\n </div>\n\n @if (formControl.value || selectedFile()) {\n <div class=\"flex gap-3 items-center\">\n <span class=\"text-body2 text-info-500 px-2 underline\"\n (click)=\"onViewFileClicked()\">{{ formControl.value?.name || getFileNameFromUrl(formControl.value) || selectedFile()?.name }}</span>\n @if (!uploading()) {\n <div class=\"flex items-center gap-1 cursor-pointer\" (click)=\"onRemoveFileClicked()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-[16px] w-[16px] text-error-500 underline\"\n viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path\n d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z\"\n fill=\"currentColor\"/>\n </svg>\n <span class=\"text-caption underline text-red-500\">Remove</span>\n </div>\n }\n </div>\n }\n\n @if (uploading()) {\n <app-spinner></app-spinner>\n }\n\n </div>\n <input type=\"file\" [id]=\"id()\" (change)=\"onFileChange($event)\" hidden/>\n</div>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n}\n\n","export class SharedConstants {\n static inputIdentifier = 'id';\n}\n","import {\n AfterContentInit, ChangeDetectorRef,\n Component,\n ElementRef, HostListener,\n inject,\n input,\n output, Renderer2,\n signal,\n viewChild,\n ViewChild\n} from '@angular/core';\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {FormControl, FormsModule, NgControl} from \"@angular/forms\";\nimport {State} from \"../../base/base-state\";\nimport {CdkConnectedOverlay, Overlay} from \"@angular/cdk/overlay\";\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {NgClass} from \"@angular/common\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {resolveTemplateWithObject} from \"../../common-utils/template-resolver\";\nimport {deepEqual} from \"../_utils/base-input-utils\";\nimport {CheckboxComponent} from \"../checkbox/checkbox.component\";\nimport {SharedConstants} from \"../../shared-constants\";\n\n@Component({\n selector: 'app-multi-select-dropdown',\n standalone: true,\n imports: [\n BaseInputComponent,\n NgClass,\n HumanizeFormMessagesPipe,\n CdkConnectedOverlay,\n CheckboxComponent,\n FormsModule\n ],\n templateUrl: './multi-select-dropdown.component.html',\n styleUrl: './multi-select-dropdown.component.scss'\n})\nexport class MultiSelectDropdownComponent<T> extends BaseControlValueAccessor implements AfterContentInit {\n\n cdr = inject(ChangeDetectorRef);\n renderer = inject(Renderer2);\n overlay = inject(Overlay);\n\n title = input<string | null>();\n items = input<T[]>([]);\n placeholder = input<string>('Select');\n display = input<string | null>();\n displayTemplate = input<string | null>();\n value = input<string>('');\n identifier = input<string>(SharedConstants.inputIdentifier);\n searchKeyMatch = input<string | null>();\n noDataMessage = input<string>();\n state = input<State<any>>();\n fullWidth = input<boolean>(false);\n showErrorSpace = input<boolean>(false);\n enableSearch = input<boolean>(false);\n addActionText = input<string | null>();\n minimumPopupWidth = input(250);\n appearance = input<MultiSelectDropdownAppearance>(MultiSelectDropdownAppearance.standard);\n\n valueChanged = output<T[]>();\n addActionClicked = output<void>();\n\n isOpen = signal(false);\n highlightedIndex = signal(-1);\n dropUp = signal(false);\n dropdownWidth = signal(300);\n selectedItems = signal<T[]>([]);\n filteredList = signal<T[]>([]);\n errorMessages = signal<{ [key: string]: string }>({});\n\n @ViewChild('dropdownButton', {static: true}) dropdownButton!: ElementRef;\n @ViewChild('dropdownListContainer', {static: false}) dropdownListContainer!: ElementRef;\n @ViewChild('dropdownList', {static: false}) dropdownList!: ElementRef;\n private searchField = viewChild<ElementRef<HTMLInputElement>>('searchField');\n\n scrollStrategy = this.overlay.scrollStrategies.block();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n MultiSelectDropdownAppearance = MultiSelectDropdownAppearance;\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n if (this.formControl.value == null) {\n this.formControl.setValue([]);\n }\n if (!Array.isArray(this.formControl.value)) {\n this.formControl.setValue([]);\n }\n }\n }\n\n getValue(item: T): any {\n if (!this.value()) {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getAllValues(): any[] {\n let items = this.selectedItems() ?? [];\n let values = items.map((item: T) => this.getValue(item));\n return values;\n }\n\n getObjectUsingValue(selectedItem: T): any {\n if (this.value() == null || this.value() == '') {\n return selectedItem;\n }\n\n let valuePath = this.value()!;\n return this.items().find(item => {\n const propertyValue = valuePath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === this.getValue(selectedItem);\n });\n }\n\n getObjectUsingIdentifier(selectedItem: T): T | undefined {\n if (this.identifier() == null || this.identifier() == '') {\n return selectedItem;\n }\n let identifierPath = this.identifier()!;\n return this.items().find(item => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === this.getIdentifier(selectedItem);\n });\n }\n\n getIdentifier(item: T): any {\n if (!this.identifier()) {\n return item;\n }\n let object = item as any;\n let identifier = this.identifier()!.split('.').reduce((acc, part) => acc && acc[part], object);\n return identifier;\n }\n\n isItemExistInFormControl(item: T) {\n const controlValue = (this.formControl.value as T[]) ?? [];\n let identifierPath = this.identifier() ?? '';\n let value = this.getIdentifier(item);\n\n\n let anyMatch = controlValue.some(x => x == value);\n if (anyMatch) {\n return true;\n }\n\n if (identifierPath == null || identifierPath == '') {\n return controlValue.some(x => deepEqual(x, item));\n }\n let isEqual = controlValue.find(x => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], x as any);\n return propertyValue === this.getIdentifier(item);\n });\n return isEqual;\n }\n\n isItemExistInNormalSelectionList(item: T) {\n const controlValue = (this.selectedItems()) ?? [];\n let identifierPath = this.identifier()!;\n if (identifierPath == null || identifierPath == '') {\n return controlValue.some(x => deepEqual(x, item));\n }\n let isEqual = controlValue.find(x => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], x as any);\n return propertyValue === this.getIdentifier(item);\n });\n return isEqual;\n }\n\n onItemClicked(item: T) {\n this.markAsTouched();\n\n const controlValue = (this.formControl.value as T[]) ?? [];\n const valueExistInFormControl = this.isItemExistInFormControl(item);\n const valueExistInSelections = this.isItemExistInNormalSelectionList(item);\n\n\n if (valueExistInFormControl || valueExistInSelections) {\n const index = controlValue.indexOf(item);\n controlValue.splice(index, 1);\n this.selectedItems.update(prev => {\n let index = prev.findIndex(x => deepEqual(x, item));\n prev.splice(index, 1);\n return prev;\n });\n let value = this.getAllValues();\n this.valueChanged.emit(value);\n this.onChange(controlValue);\n } else {\n controlValue.push(item);\n this.selectedItems.update(prev => {\n prev.push(item);\n return prev;\n });\n let value = this.getAllValues();\n this.valueChanged.emit(value);\n this.onChange(controlValue);\n }\n }\n\n getDisplayString(item: T | null): any {\n\n let object = item as any;\n if (object == null) {\n return null;\n }\n\n if (this.display() != null && this.display() != '') {\n return this.display()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if (this.displayTemplate() != null && this.displayTemplate() != '') {\n return resolveTemplateWithObject(object, this.displayTemplate()!);\n }\n\n return item;\n\n }\n\n filterList(event: Event) {\n const searchKeyword = (event.target as HTMLInputElement)?.value;\n\n if (this.enableSearch()) {\n this.updateFilteredList(searchKeyword);\n } else {\n const firstMatchingItem = this.findFirstMatch(searchKeyword);\n let index = this.filteredList().findIndex(item => item == firstMatchingItem);\n this.highlightedIndex.set(index);\n }\n }\n\n updateFilteredList(searchKeyword?: string) {\n\n if (!searchKeyword || searchKeyword.trim() === '') {\n return;\n }\n\n const filterResult = this.items().filter((item) => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString.toLowerCase().includes(searchKeyword.toLowerCase());\n }\n return false;\n });\n\n this.filteredList.set(filterResult);\n this.updateHighlightedIndex();\n }\n\n findFirstMatch(searchKeyword?: string): T | null {\n if (!searchKeyword || searchKeyword.trim() === '') {\n return null;\n }\n return this.filteredList().find((item) => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString.toLowerCase().includes(searchKeyword.toLowerCase());\n }\n return false;\n }) || null;\n }\n\n updateHighlightedIndex() {\n // TODO\n // let index = this.filteredList().findIndex(item => item == this.selectedItem());\n this.highlightedIndex.set(0);\n }\n\n setPopupWidth() {\n const buttonWidth = this.dropdownButton.nativeElement.offsetWidth;\n if (buttonWidth < this.minimumPopupWidth()) {\n this.dropdownWidth.set(this.minimumPopupWidth());\n return;\n }\n\n this.dropdownWidth.set(this.dropdownButton.nativeElement.offsetWidth);\n }\n\n onClickOutside() {\n this.isOpen.set(false);\n }\n\n toggleDropdown(): void {\n this.isOpen.update(prev => !prev);\n if (this.isOpen()) {\n this.filteredList.set(this.items());\n this.updateHighlightedIndex();\n this.adjustDropdownPosition();\n this.setPopupWidth();\n this.cdr.detectChanges();\n this.setDropdownMaxHeight();\n this.scrollToHighlightedItem();\n this.searchField()?.nativeElement.focus();\n }\n }\n\n setDropdownMaxHeight() {\n const buttonRect = this.dropdownButton.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - buttonRect.bottom;\n const spaceAbove = buttonRect.top;\n\n let maxHeight;\n if (this.dropUp()) {\n maxHeight = spaceAbove - 36;\n } else {\n maxHeight = spaceBelow - 36;\n }\n\n if (this.dropdownListContainer) {\n this.renderer.setStyle(this.dropdownListContainer.nativeElement, 'max-height', `${maxHeight}px`);\n }\n }\n\n adjustDropdownPosition() {\n const buttonRect = this.dropdownButton.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - buttonRect.bottom;\n const spaceAbove = buttonRect.top;\n this.dropUp.set(spaceAbove > spaceBelow && spaceBelow < 200);\n }\n\n scrollToHighlightedItem() {\n if (this.dropdownList && this.dropdownList.nativeElement.children[this.highlightedIndex()]) {\n const highlightedItem = this.dropdownList.nativeElement.children[this.highlightedIndex()];\n highlightedItem.scrollIntoView({block: 'nearest'});\n }\n }\n\n @HostListener('window:resize')\n onResize() {\n if (this.isOpen()) {\n this.adjustDropdownPosition();\n }\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (!this.isOpen()) {\n return;\n }\n switch (event.key) {\n case 'ArrowDown':\n if (this.highlightedIndex() < this.filteredList().length - 1) {\n this.highlightedIndex.update(prev => prev + 1);\n }\n this.scrollToHighlightedItem();\n event.preventDefault();\n break;\n case 'ArrowUp':\n if (this.highlightedIndex() > 0) {\n this.highlightedIndex.update(prev => prev - 1);\n }\n this.scrollToHighlightedItem();\n event.preventDefault();\n break;\n case 'Enter':\n this.onItemClicked(this.filteredList()[this.highlightedIndex()]);\n event.preventDefault();\n break;\n case 'Escape':\n this.isOpen.set(false);\n event.preventDefault();\n break;\n }\n\n\n if (!this.enableSearch()) {\n let key = event.key;\n if (key.length === 1 && /^[a-zA-Z]$/.test(key)) {\n const matchingIndex = this.filteredList().findIndex(item => {\n let resolvedText = '';\n if (this.searchKeyMatch() != null && this.searchKeyMatch() != '') {\n resolvedText = resolveTemplateWithObject(item as any, `$${this.searchKeyMatch()}`);\n } else {\n resolvedText = this.getDisplayString(item);\n }\n return resolvedText.toLowerCase().startsWith(key);\n }\n );\n\n if (matchingIndex !== -1) {\n this.highlightedIndex.set(matchingIndex);\n this.scrollToHighlightedItem()\n }\n }\n }\n }\n\n onClearSearchClicked() {\n if (this.searchField()) {\n this.searchField()!.nativeElement.value = '';\n this.filteredList.set(this.items());\n this.highlightedIndex.set(0);\n this.scrollToHighlightedItem();\n this.searchField()!.nativeElement.focus();\n }\n }\n\n onSelectAllClicked() {\n this.formControl.setValue(this.items());\n this.selectedItems.set(this.items());\n this.valueChanged.emit(this.items());\n }\n\n onClearSelectionClicked() {\n this.formControl.setValue([]);\n this.selectedItems.set([]);\n this.valueChanged.emit([]);\n }\n\n getCsv(): string | null {\n let selectedItems = this.items().filter(x => {\n return this.isItemExistInFormControl(x) || this.isItemExistInNormalSelectionList(x);\n });\n\n let csv = selectedItems.map(item => {\n const displayString = this.getDisplayString(item);\n if (typeof displayString === 'string') {\n return displayString;\n }\n return '';\n }).join(', ');\n\n if (csv == '') {\n return null;\n }\n return csv;\n }\n\n onAddActionClicked() {\n this.addActionClicked.emit();\n }\n\n}\n\nexport enum MultiSelectDropdownAppearance {\n standard,\n csv,\n chips\n}\n","<app-base-input [title]=\"title()\" [fullWidth]=\"fullWidth()\" (keydown)=\"handleKeydown($event)\"\n [isRequiredField]=\"hasRequiredValidator()\">\n\n <div #dropdownButton input class=\"relative inline-block text-left min-w-52\">\n <div>\n <button (click)=\"toggleDropdown()\"\n type=\"button\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"isOpen()\"\n class=\"h-[46px] inline-flex items-center w-full px-4 py-2 text-sm justify-between font-medium text-gray-700 bg-white border-none outline-none border-gray-300 ring-1 focus:ring-2 ring-neutral-300 focus:ring-primary-500 rounded-md shadow-1 focus:border-none focus:outline-none transition-all duration-300\">\n @switch (appearance()) {\n @case (MultiSelectDropdownAppearance.standard) {\n <span class=\"text-body1 text-left overflow-ellipsis\"\n [ngClass]=\"((formControl.value != null && formControl.value?.length > 0) || selectedItems().length > 0) ? 'text-black' : 'text-gray-400'\">{{ ((selectedItems().length > 0 || formControl.value?.length > 0) ? (selectedItems().length || formControl.value?.length) + ' Selected' : placeholder()) }}</span>\n }\n @case (MultiSelectDropdownAppearance.csv) {\n <div class=\"flex flex-wrap gap-2 w-full\">\n <span class=\"text-body1 text-left w-full truncate overflow-ellipsis\"\n [ngClass]=\"((formControl.value != null && formControl.value?.length > 0) || selectedItems().length > 0) ? 'text-black' : 'text-gray-400'\">{{ getCsv() ?? placeholder() }}</span>\n </div>\n }\n @default {\n <span class=\"text-body1 text-left overflow-ellipsis\"\n [ngClass]=\"((formControl.value != null && formControl.value?.length > 0) || selectedItems().length > 0) ? 'text-black' : 'text-gray-400'\">{{ ((selectedItems().length > 0 || formControl.value?.length > 0) ? (selectedItems().length || formControl.value?.length) + ' Selected' : placeholder()) }}</span>\n }\n }\n <div class=\"flex items-center gap-2 -mr-1\">\n <svg class=\"h-[20px] w-[20px] text-gray-500\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M7.41 8.57996L12 13.17L16.59 8.57996L18 9.99996L12 16L6 9.99996L7.41 8.57996Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n\n </button>\n </div>\n </div>\n\n <ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"dropdownButton\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayBackdropClass]=\"['bg-black', 'bg-opacity-20']\"\n (overlayOutsideClick)=\"onClickOutside()\"\n [cdkConnectedOverlayPositions]=\"[\n {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},\n {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}\n ]\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayOffsetY]=\"10\">\n <div #dropdownListContainer\n class=\"flex flex-col rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none overflow-clip\">\n\n @if (enableSearch()) {\n <div class=\"relative flex items-center w-full text-neutral-400 bg-white border border-b border-neutral-200\">\n <svg class=\"absolute pointer-events-none ml-3 text-neutral-400 w-[20px] h-[20px]\"\n viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.5 3C11.2239 3 12.8772 3.68482 14.0962 4.90381C15.3152 6.12279 16 7.77609 16 9.5C16 11.11 15.41 12.59 14.44 13.73L14.71 14H15.5L20.5 19L19 20.5L14 15.5V14.71L13.73 14.44C12.59 15.41 11.11 16 9.5 16C7.77609 16 6.12279 15.3152 4.90381 14.0962C3.68482 12.8772 3 11.2239 3 9.5C3 7.77609 3.68482 6.12279 4.90381 4.90381C6.12279 3.68482 7.77609 3 9.5 3ZM9.5 5C7 5 5 7 5 9.5C5 12 7 14 9.5 14C12 14 14 12 14 9.5C14 7 12 5 9.5 5Z\"\n fill=\"currentColor\"/>\n </svg>\n\n <input (input)=\"filterList($event)\" (keydown)=\"handleKeydown($event)\" #searchField\n class=\"h-[46px] pr-3 pl-10 placeholder-neutral-400 text-black border-none outline-none focus:border-none w-full\">\n\n <div\n class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full cursor-pointer\"\n (click)=\"onClearSearchClicked()\">\n <svg class=\"h-[16px] w-[16px] text-neutral-400\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 2C17.53 2 22 6.47 22 12C22 17.53 17.53 22 12 22C6.47 22 2 17.53 2 12C2 6.47 6.47 2 12 2ZM15.59 7L12 10.59L8.41 7L7 8.41L10.59 12L7 15.59L8.41 17L12 13.41L15.59 17L17 15.59L13.41 12L17 8.41L15.59 7Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n }\n\n @if(addActionText()) {\n <div class=\"flex gap-3 px-4 py-4 bg-neutral-50 w-full cursor-pointer border-b border-neutral-100\" (click)=\"onAddActionClicked()\">\n <svg class=\"text-primary-500 h-[18px] w-[18px]\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M19 13H13V19H11V13H5V11H11V5H13V11H19V13Z\" fill=\"currentColor\"/>\n </svg>\n <span class=\"text-body2 text-primary-500\">{{ addActionText() }}</span>\n </div>\n }\n\n <div class=\"flex items-center justify-between px-4 py-4 bg-neutral-50\">\n <span class=\"text-overline text-blue-500 cursor-pointer\"\n (click)=\"onSelectAllClicked()\">SELECT ALL</span>\n <span class=\"text-overline text-blue-500 cursor-pointer\"\n (click)=\"onClearSelectionClicked()\">CLEAR</span>\n </div>\n\n <div #dropdownList class=\"overflow-y-scroll scrollbar scrollbar-thumb-gray-500 scrollbar-track-gray-300\"\n role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"options-menu\" tabindex=\"-1\"\n [style.width.px]=\"dropdownWidth()\">\n\n @for (item of filteredList(); track item; let i = $index) {\n <div (click)=\"onItemClicked(item)\"\n class=\"flex gap-2 items-center px-2 hover:bg-neutral-100 cursor-pointer\"\n [ngClass]=\"{\n 'bg-neutral-200': (highlightedIndex() == i),\n 'bg-primary-50': isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item),\n 'bg-opacity-30': isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item),\n }\"\n role=\"menuitem\"\n tabindex=\"-1\">\n <app-checkbox\n [ngModel]=\"isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item)\"></app-checkbox>\n <span class=\"text-gray-700 block text-sm\">{{ getDisplayString(item) }}</span>\n </div>\n } @empty {\n <span class=\"text-gray-400 block px-4 py-4 text-sm select-none\" role=\"menuitem\" tabindex=\"-1\">No options available</span>\n }\n </div>\n </div>\n </ng-template>\n\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import {AfterContentInit, Component, inject, input, OnChanges, output, signal, SimpleChanges} from '@angular/core';\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {State} from \"../../base/base-state\";\nimport {FormControl, NgControl} from \"@angular/forms\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {ShimmerComponent} from \"../../components/shimmer/shimmer.component\";\nimport {NgClass, NgStyle} from \"@angular/common\";\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {deepEqual, jsonEqual} from \"../_utils/base-input-utils\";\nimport {resolveTemplateWithObject} from \"../../common-utils/template-resolver\";\nimport {SharedConstants} from '../../shared-constants';\n\n@Component({\n selector: 'app-multi-selection-field',\n standalone: true,\n imports: [\n BaseInputComponent,\n HumanizeFormMessagesPipe,\n ShimmerComponent,\n NgClass,\n AppSvgIconComponent,\n NgStyle\n ],\n templateUrl: './multi-selection-field.component.html',\n styleUrl: './multi-selection-field.component.scss'\n})\nexport class MultiSelectionFieldComponent<T> extends BaseControlValueAccessor implements AfterContentInit, OnChanges {\n title = input<string | null>();\n items = input<T[]>([]);\n display = input<string | null>();\n displayTemplate = input<string | null>();\n iconSrc = input<string | null>();\n dynamicIconPath = input<string>();\n imageUrl = input<string | null>();\n dynamicImageUrlPath = input<string>();\n value = input<string | null>(null);\n identifier = input<string>(SharedConstants.inputIdentifier);\n noDataMessage = input<string>();\n state = input<State<any>>();\n iconColor = input<string>();\n dynamicIconColor = input<string>();\n customActionText = input<string>();\n fullWidth = input<boolean>(false);\n itemWidth = input<number | null>(null);\n isItemCentered = input<boolean>(false);\n showSelectionTickMark = input<boolean>(true);\n maximumDisplayItems = input<number | null>(null);\n\n valueChanged = output<T[]>();\n onCustomActionClicked = output<void>();\n\n showAll = signal(false);\n\n selectedItems = signal<T[]>([]);\n errorMessages = signal<{ [key: string]: string }>({});\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateValue();\n }\n\n override onWriteValue(value: any[]): void {\n this.updateValue();\n }\n\n updateValue() {\n let formValue = this.formControl.value ?? [];\n if (formValue == null) {\n return;\n }\n\n if (!Array.isArray(formValue)) {\n return;\n }\n\n let items = formValue.map(x => {\n let item = this.getObjectUsingIdentifierValue(x);\n return item;\n });\n\n this.selectedItems.set(items);\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n if (this.formControl.value == null) {\n this.formControl.setValue([]);\n }\n if(!Array.isArray(this.formControl.value)){\n this.formControl.setValue([]);\n }\n }\n }\n\n getVisibleItems(): T[] {\n if (this.showAll()) return this.items();\n return this.maximumDisplayItems() !== null ? this.items().slice(0, this.maximumDisplayItems()!) : this.items();\n }\n\n showMoreButton(): boolean {\n return !this.showAll() && this.maximumDisplayItems() !== null && this.items().length > this.maximumDisplayItems()!;\n }\n\n showLessButton(): boolean {\n return this.showAll() && this.maximumDisplayItems() !== null;\n }\n\n showAllItems() {\n this.showAll.set(true);\n }\n\n shrinkItems() {\n this.showAll.set(false);\n }\n\n getObjectUsingValue(selectedItem: T): any {\n if (this.value() == null || this.value() == '') {\n return selectedItem;\n }\n\n let valuePath = this.value()!;\n return this.items().find(item => {\n const propertyValue = valuePath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === this.getValue(selectedItem);\n });\n }\n\n getObjectUsingIdentifier(selectedItem: T): T | undefined {\n if (this.identifier() == null || this.identifier() == '') {\n return selectedItem;\n }\n let identifierPath = this.identifier()!;\n return this.items().find(item => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === this.getIdentifier(selectedItem);\n });\n }\n\n getObjectUsingIdentifierValue(value: any): any | undefined {\n if (this.identifier() == null || this.identifier() == '') {\n return value;\n }\n let identifierPath = this.identifier()!;\n return this.items().find(item => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], item as any);\n return propertyValue === value;\n });\n }\n\n getDisplayString(item: T): any {\n let object = item as any;\n if(object == null) {\n return null;\n }\n\n if(this.display() != null && this.display() != '') {\n return this.display()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if(this.displayTemplate() != null && this.displayTemplate() != '') {\n return resolveTemplateWithObject(object, this.displayTemplate()!);\n }\n\n return item;\n }\n\n getValue(item: T): any {\n if (!this.value()) {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getAllValues(): any[] {\n let items = this.selectedItems() ?? [];\n let values = items.map((item: T) => this.getValue(item));\n return values;\n }\n\n getIdentifier(item: T): any {\n if (!this.identifier()) {\n return item;\n }\n let object = item as any;\n let identifier = this.identifier()!.split('.').reduce((acc, part) => acc && acc[part], object);\n return identifier;\n }\n\n isItemExistInFormControl(item: T) {\n const controlValue = (this.formControl.value as T[]) ?? [];\n let identifierPath = this.identifier() ?? '';\n let value = this.getIdentifier(item);\n\n\n let anyMatch = controlValue.some(x => x == value);\n if (anyMatch) {\n return true;\n }\n\n if (identifierPath == null || identifierPath == '') {\n return controlValue.some(x => deepEqual(x, item));\n }\n let isEqual = controlValue.find(x => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], x as any);\n return propertyValue === this.getIdentifier(item);\n });\n return isEqual;\n }\n\n isItemExistInNormalSelectionList(item: T) {\n const controlValue = (this.selectedItems()) ?? [];\n let identifierPath = this.identifier()!;\n if (identifierPath == null || identifierPath == '') {\n return controlValue.some(x => deepEqual(x, item));\n }\n let isEqual = controlValue.find(x => {\n const propertyValue = identifierPath.split('.').reduce((acc, part) => acc && acc[part], x as any);\n return propertyValue === this.getIdentifier(item);\n });\n return isEqual;\n }\n\n onItemClicked(item: T) {\n this.markAsTouched();\n\n const controlValue = (this.formControl.value as T[]) ?? [];\n const valueExistInFormControl = this.isItemExistInFormControl(item);\n const valueExistInSelections = this.isItemExistInNormalSelectionList(item);\n\n\n if (valueExistInFormControl || valueExistInSelections) {\n const index = controlValue.indexOf(item);\n controlValue.splice(index, 1);\n this.selectedItems.update(prev => {\n let index = prev.findIndex(x => deepEqual(x, item));\n prev.splice(index, 1);\n return prev;\n });\n let value = this.getAllValues();\n this.valueChanged.emit(value);\n this.onChange(value);\n } else {\n controlValue.push(item);\n this.selectedItems.update(prev => {\n prev.push(item);\n return prev;\n });\n let value = this.getAllValues();\n this.valueChanged.emit(value);\n this.onChange(value);\n }\n }\n\n getImageType(item: T): 'svg' | 'url' | null {\n\n if (this.iconSrc() != null && this.iconSrc() != '') {\n return 'svg';\n }\n\n if (this.dynamicIconPath() != null && this.dynamicIconPath() != '') {\n return 'svg';\n }\n\n if (this.imageUrl() != null && this.imageUrl() != '') {\n return 'url';\n }\n\n if (this.dynamicImageUrlPath() != null && this.dynamicImageUrlPath() != '') {\n return 'url';\n }\n\n return null;\n }\n\n getDynamicIcon(item: T): string | null | undefined {\n if (this.iconSrc() != null && this.iconSrc() != '') {\n return this.iconSrc();\n }\n\n if (this.dynamicIconPath() != null && this.dynamicIconPath() != '') {\n let object = item as any;\n return this.dynamicIconPath()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if (this.imageUrl() != null && this.imageUrl() != '') {\n return this.imageUrl();\n }\n\n if (this.dynamicImageUrlPath() != null && this.dynamicImageUrlPath() != '') {\n let object = item as any;\n return this.dynamicImageUrlPath()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n return null;\n }\n\n getDynamicIconColor(item: T): string | null | undefined {\n if (this.iconColor()) {\n return this.iconColor();\n }\n\n if (this.dynamicIconColor() == null || this.dynamicIconColor() == '') {\n return this.iconColor();\n }\n let object = item as any;\n const color = this.dynamicIconColor()!.split('.').reduce((acc, part) => acc && acc[part], object);\n return color;\n }\n\n customActionClicked() {\n this.onCustomActionClicked.emit();\n }\n\n handleKeydown(event: KeyboardEvent, item: T) {\n switch (event.key) {\n case 'Enter':\n this.onItemClicked(item);\n event.preventDefault();\n break;\n }\n }\n}\n","<app-base-input [title]=\"title()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"flex flex-wrap justify-start gap-3\">\n\n @for (item of getVisibleItems(); track item; let index = $index) {\n <div class=\"relative flex items-center rounded-lg px-4 py-2 gap-3 cursor-pointer border-2 border-neutral-300\"\n tabindex=\"0\"\n (keydown)=\"handleKeydown($event, item)\"\n [ngStyle]=\"{ 'width': itemWidth() ? itemWidth() + 'px' : null }\"\n (click)=\"onItemClicked(item)\"\n [ngClass]=\"{\n 'border-primary-600': isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item),\n 'justify-center': isItemCentered()\n }\">\n\n\n @if ((isItemExistInFormControl(item) || isItemExistInNormalSelectionList(item)) && showSelectionTickMark()) {\n <div class=\"absolute -top-[8px] -right-[8px]\">\n <svg class=\"h-[18px] w-[18px] text-primary-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z\"\n fill=\"white\"/>\n <path\n d=\"M10 17L5 12L6.41 10.58L10 14.17L17.59 6.58L19 8M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n }\n\n @if (getDynamicIcon(item)) {\n @switch (getImageType(item)) {\n @case ('url') {\n <img class=\"object-contain\" height=\"20px\" width=\"20px\" [src]=\"getDynamicIcon(item)\" alt=\"\">\n }\n @case ('svg') {\n <app-svg-icon [src]=\"getDynamicIcon(item)!\" [size]=\"18\"\n [ngStyle]=\"{'color': getDynamicIconColor(item)}\"></app-svg-icon>\n }\n }\n }\n <p\n class=\"text-caption text-center text-black overflow-hidden text-ellipsis whitespace-nowrap\">{{ getDisplayString(item) }}</p>\n </div>\n }\n\n @if (showMoreButton()) {\n <span\n (click)=\"showAllItems()\"\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border border-neutral-200 text-info-500\">\n More\n </span>\n }\n\n @if (showLessButton()) {\n <span\n (click)=\"shrinkItems()\"\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border border-neutral-200 text-error-500\">\n Less\n </span>\n }\n\n @if (customActionText()) {\n <div (click)=\"customActionClicked()\"\n class=\"flex items-center rounded-lg px-3 py-3 gap-4 cursor-pointer bg-primary-500\">\n <p class=\"text-caption text-white\">{{ customActionText() }}</p>\n </div>\n }\n\n @if (state()?.success() && items().length <= 0) {\n <p class=\"text-caption text-red-700\">{{ noDataMessage() ?? 'No data found' }}</p>\n }\n\n @if ((state()?.failed()) && items().length <= 0) {\n <p\n class=\"text-caption text-red-700\">{{ (state()?.error() != null || state()?.error() != '') ? state()?.error() : noDataMessage() ?? 'No data found' }}</p>\n }\n\n @if (state()?.loading()) {\n <app-shimmer class=\"w-full\" type=\"multiline\"></app-shimmer>\n }\n </div>\n\n <div error>\n @if (formControl.errors && hasErrors) {\n <p class=\"text-caption text-red-500\">\n {{ formControl.errors | humanizeFormMessages: errorMessages() }}\n </p>\n }\n </div>\n</app-base-input>\n","import {AfterContentInit, Component, output} from '@angular/core';\nimport {\n BaseControlValueAccessorV2,\n} from \"../../base/base-control-value-accessor-v2\";\nimport {ButtonComponent} from \"../../components/button/button.component\";\nimport {TimePickerValue} from \"../time-picker/time-picker.component\";\n\n@Component({\n selector: 'app-number-input',\n standalone: true,\n imports: [\n ButtonComponent\n ],\n templateUrl: './number-input.component.html',\n styleUrl: './number-input.component.scss'\n})\nexport class NumberInputComponent extends BaseControlValueAccessorV2<TimePickerValue> implements AfterContentInit {\n valueChanged = output<number>();\n\n ngAfterContentInit(): void {\n super.initFormControl();\n }\n\n protected override onValueReady(value: TimePickerValue): void {\n // this.formValue.set(value);\n }\n\n increment() {\n // let newValue = (this.value() ?? 0) + 1;\n // this.updateValue(newValue);\n // this.valueChanged.emit(newValue);\n }\n\n private text(someType: Object) {\n\n }\n}\n","<!--<pre> {{ formValue() | json }}</pre>-->\n<app-button (click)=\"increment()\">Increment</app-button>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-phone-number-input',\n imports: [],\n templateUrl: './phone-number-input.component.html',\n styleUrl: './phone-number-input.component.scss'\n})\nexport class PhoneNumberInputComponent {\n\n}\n","","import {AfterContentInit, Component, EventEmitter, inject, input, OnInit, Output, signal} from '@angular/core';\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\n\n@Component({\n selector: 'app-radio-button',\n standalone: true,\n imports: [\n ReactiveFormsModule\n ],\n templateUrl: './radio-button.component.html',\n styleUrl: './radio-button.component.scss'\n})\nexport class RadioButtonComponent extends BaseControlValueAccessor implements OnInit, AfterContentInit {\n title = input<string | null>();\n groupName = input.required<string>();\n value = input<any | null>();\n\n id = signal<string>('');\n\n @Output()\n valueChanged = new EventEmitter<any>();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n errorMessages = input<{ [key: string]: string }>({});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n protected override onWriteValue(obj: any): void {\n\n }\n\n ngOnInit(): void {\n this.id.set(this.getId());\n }\n\n onRadioSelected($event: Event) {\n if (!this.disabled()) {\n this.markAsTouched();\n const value = ($event.target as HTMLInputElement).value;\n // this.onChange(value);\n this.valueChanged.emit(value);\n }\n }\n\n private getId(): string {\n const randomNumber = Math.floor(1000 + Math.random() * 9000);\n return `radio-button-${randomNumber.toString()}`;\n }\n}\n","<div class=\"flex items-center gap-3\">\n <label class=\"relative align-baseline flex items-center rounded-full cursor-pointer\" [for]=\"id()\">\n @if(ngControl?.name) {\n <input type=\"radio\"\n [name]=\"groupName()\"\n [value]=\"value()\"\n [attr.name]=\"groupName()\"\n [attr.value]=\"value()\"\n [formControl]=\"formControl\"\n (change)=\"onRadioSelected($event)\"\n class=\"before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-full border-2 border-neutral-600 text-neutral-900 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-primary-200 before:opacity-0 before:transition-opacity checked:border-primary-500 checked:before:bg-primary-500 hover:before:opacity-10\"\n [id]=\"id()\"/>\n } @else {\n <input type=\"radio\"\n [name]=\"groupName()\"\n [value]=\"value()\"\n [attr.name]=\"groupName()\"\n [attr.value]=\"value()\"\n [disabled]=\"formControl.disabled\"\n [checked]=\"formControl.value\"\n (change)=\"onRadioSelected($event)\"\n class=\"before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-full border-2 border-neutral-600 text-neutral-900 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-primary-200 before:opacity-0 before:transition-opacity checked:border-primary-500 checked:before:bg-primary-500 hover:before:opacity-10\"\n [id]=\"id()\"/>\n }\n\n <span\n class=\"absolute text-primary-500 transition-opacity opacity-0 pointer-events-none top-2/4 left-2/4 -translate-y-2/4 -translate-x-2/4 peer-checked:opacity-100\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-2.5 w-2.5\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <circle data-name=\"ellipse\" cx=\"8\" cy=\"8\" r=\"8\"></circle>\n </svg>\n </span>\n </label>\n @if(title()) {\n <label class=\"text-body2 cursor-pointer select-none\" [for]=\"id()\">{{ title() }}</label>\n }\n</div>\n","import {AfterContentInit, Component, EventEmitter, inject, input, Output, signal} from '@angular/core';\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {ClickOutsideDirective} from \"../../directives/click-outside.directive\";\n\n\nimport {FormControl, NgControl} from \"@angular/forms\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\n\n@Component({\n selector: 'app-single-item-picker-input',\n standalone: true,\n imports: [\n AppSvgIconComponent,\n ClickOutsideDirective,\n HumanizeFormMessagesPipe\n ],\n templateUrl: './single-item-picker-input.component.html',\n styleUrl: './single-item-picker-input.component.scss'\n})\nexport class SingleItemPickerInputComponent<T> extends BaseControlValueAccessor implements AfterContentInit {\n title = input.required<string>();\n items = input<T[]>([]);\n display = input.required<string>();\n value = input<string>();\n\n errorMessages = signal<{ [key: string]: string }>({});\n ngControl = inject(NgControl, {optional: true, self: true});\n\n isPopUpOpen = signal(false);\n\n @Output()\n valueChanged: EventEmitter<T | null> = new EventEmitter<T | null>();\n\n constructor() {\n super();\n if(this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if(formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n getProperty(item: T): any {\n if(this.display() == null || this.display() == '') {\n return item;\n }\n let object = item as any;\n return this.display().split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getPropertyId(item: T): any {\n if (!this.value()) {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n onItemClicked(item: T) {\n this.isPopUpOpen.update(p => false);\n this.markAsTouched();\n const value = this.getPropertyId(item);\n if (value == this.formControl.value) {\n this.onChange(value);\n this.valueChanged.emit(null);\n } else {\n this.onChange(value);\n this.valueChanged.emit(item);\n }\n }\n\n outsideClicked() {\n this.isPopUpOpen.update(p => false);\n }\n\n togglePopup() {\n this.isPopUpOpen.update(p => !p);\n }\n}\n","<div class=\"flex-inline relative hover:bg-neutral-50 py-2 px-4 rounded-lg select-none cursor-pointer\"\n (clickOutside)=\"outsideClicked()\">\n <div class=\"flex gap-4 items-center\" (click)=\"togglePopup()\">\n <div class=\"flex flex-col gap-2\">\n <p class=\"text-body2 text-neutral-500\">{{ title() }}</p>\n <p class=\"text-caption sm:text-body2\">{{ (formControl.value != null && formControl.value != '') ? getProperty(formControl.value) : '-' }}</p>\n </div>\n <app-svg-icon src=\"assets/icons/chevron-down.svg\" class=\"text-neutral-400\" [size]=\"12\"></app-svg-icon>\n </div>\n @if (isPopUpOpen()) {\n <div class=\"absolute z-50 mt-6 min-w-72 transform -translate-x-1/3 rounded-md bg-white shadow-2 p-3 max-h-60 overflow-y-scroll\">\n <div class=\"flex flex-col gap-2\">\n <p class=\"text-body2 text-neutral-600\">Time</p>\n <div class=\"grid grid-cols-3 w-full gap-2\">\n @for (item of items(); track item) {\n <div class=\"inline-flex justify-center items-center cursor-pointer\" (click)=\"onItemClicked(item)\">\n <p\n class=\"text-caption hover:border-primary-500 border-2 border-neutral-200 hover:border-2 p-2 rounded\">{{ getProperty(item) }}</p>\n </div>\n }\n </div>\n @if(items().length <= 0) {\n <span class=\"text-neutral-400 block px-4 py-4 text-sm select-none\" role=\"menuitem\" tabindex=\"-1\">No options available</span>\n }\n </div>\n </div>\n }\n</div>\n\n<div>\n @if (formControl.errors && hasErrors) {\n <p class=\"text-caption text-red-500\">\n {{ formControl.errors | humanizeFormMessages: errorMessages() }}\n </p>\n }\n</div>\n","import {\n AfterContentInit,\n Component,\n inject,\n input,\n output,\n signal\n} from '@angular/core';\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {NgClass, NgStyle} from \"@angular/common\";\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {State} from \"../../base/base-state\";\nimport {ShimmerComponent} from \"../../components/shimmer/shimmer.component\";\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {resolveTemplateWithObject} from '../../common-utils/template-resolver';\n\n@Component({\n selector: 'app-single-selection-field',\n standalone: true,\n imports: [\n BaseInputComponent,\n NgClass,\n ReactiveFormsModule,\n HumanizeFormMessagesPipe,\n AppSvgIconComponent,\n NgStyle,\n ShimmerComponent\n ],\n templateUrl: './single-selection-field.component.html',\n styleUrl: './single-selection-field.component.scss'\n})\nexport class SingleSelectionFieldComponent<T> extends BaseControlValueAccessor implements AfterContentInit {\n title = input<string | null>();\n items = input<T[]>([]);\n display = input<string>();\n displayTemplate = input<string | null>();\n iconSrc = input<string | null>();\n dynamicIconPath = input<string>();\n imageUrl = input<string | null>();\n dynamicImageUrlPath = input<string>();\n iconColor = input<string>();\n dynamicIconColor = input<string>();\n value = input<string>();\n noDataMessage = input<string>();\n state = input<State<any>>();\n customActionText = input<string>();\n fullWidth = input(false);\n itemWidth = input<number | null>(null);\n isItemCentered = input<boolean>(false);\n showSelectionTickMark = input<boolean>(true);\n itemPlacement = input<'start' | 'space-between'>('start');\n maximumDisplayItems = input<number | null>(null);\n\n valueChanged = output<T | null>();\n onCustomActionClicked = output<void>();\n\n\n selectedItem = signal<T | null>(null);\n\n showAll = signal(false);\n\n errorMessages = signal<{ [key: string]: string }>({});\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n override onWriteValue(value: any): void {\n\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n getVisibleItems(): T[] {\n if (this.showAll()) return this.items();\n return this.maximumDisplayItems() !== null ? this.items().slice(0, this.maximumDisplayItems()!) : this.items();\n }\n\n showMoreButton(): boolean {\n return !this.showAll() && this.maximumDisplayItems() !== null && this.items().length > this.maximumDisplayItems()!;\n }\n\n showLessButton(): boolean {\n return this.showAll() && this.maximumDisplayItems() !== null;\n }\n\n showAllItems() {\n this.showAll.set(true);\n }\n\n shrinkItems() {\n this.showAll.set(false);\n }\n\n getDisplayString(item: T): any {\n let object = item as any;\n if(object == null) {\n return null;\n }\n\n if(this.display() != null && this.display() != '') {\n return this.display()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if(this.displayTemplate() != null && this.displayTemplate() != '') {\n return resolveTemplateWithObject(object, this.displayTemplate()!);\n }\n\n return item;\n }\n\n getPropertyId(item: T | null): any {\n if (this.value() == null || this.value() == '') {\n return item;\n }\n let object = item as any;\n return this.value()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n getImageType(item: T): 'svg' | 'url' | null {\n\n if (this.iconSrc() != null && this.iconSrc() != '') {\n return 'svg';\n }\n\n if (this.dynamicIconPath() != null && this.dynamicIconPath() != '') {\n return 'svg';\n }\n\n if (this.imageUrl() != null && this.imageUrl() != '') {\n return 'url';\n }\n\n if (this.dynamicImageUrlPath() != null && this.dynamicImageUrlPath() != '') {\n return 'url';\n }\n\n return null;\n }\n\n getDynamicIcon(item: T): string | null | undefined {\n if (this.iconSrc() != null && this.iconSrc() != '') {\n return this.iconSrc();\n }\n\n if (this.dynamicIconPath() != null && this.dynamicIconPath() != '') {\n let object = item as any;\n return this.dynamicIconPath()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n\n if (this.imageUrl() != null && this.imageUrl() != '') {\n return this.imageUrl();\n }\n\n if (this.dynamicImageUrlPath() != null && this.dynamicImageUrlPath() != '') {\n let object = item as any;\n return this.dynamicImageUrlPath()!.split('.').reduce((acc, part) => acc && acc[part], object);\n }\n return null;\n }\n\n getDynamicIconColor(item: T): string | null | undefined {\n if (this.iconColor()) {\n return this.iconColor();\n }\n\n if (this.dynamicIconColor() == null || this.dynamicIconColor() == '') {\n return this.iconColor();\n }\n let object = item as any;\n const color = this.dynamicIconColor()!.split('.').reduce((acc, part) => acc && acc[part], object);\n return color;\n }\n\n onItemClicked(item: T) {\n this.markAsTouched();\n const value = this.getPropertyId(item);\n this.selectedItem.set(item);\n if (value == this.formControl.value) {\n this.onChange(null);\n this.valueChanged.emit(null);\n } else {\n this.onChange(value);\n this.valueChanged.emit(value);\n }\n }\n\n customActionClicked() {\n this.onCustomActionClicked.emit();\n }\n\n handleKeydown(event: KeyboardEvent, item: T) {\n switch (event.key) {\n case 'Enter':\n this.onItemClicked(item);\n event.preventDefault();\n break;\n }\n }\n}\n","<app-base-input [title]=\"title()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"flex flex-wrap gap-3\"\n [ngClass]=\"[\n itemPlacement() == 'start' ? 'justify-start' : '',\n itemPlacement() == 'space-between' ? 'justify-between' : '']\">\n\n @for (item of getVisibleItems(); track item) {\n <div\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border-2 border-neutral-300\"\n tabindex=\"0\"\n (keydown)=\"handleKeydown($event, item)\"\n [ngStyle]=\"{ 'width': itemWidth() ? itemWidth() + 'px' : null }\"\n (click)=\"onItemClicked(item)\"\n [ngClass]=\"{\n 'border-primary-600': getPropertyId(item) == formControl.value || selectedItem() == item,\n 'justify-center': isItemCentered()\n }\">\n\n @if ((getPropertyId(item) == formControl.value || selectedItem() == item) && showSelectionTickMark()) {\n <div class=\"absolute -top-[8px] -right-[8px]\">\n <svg class=\"h-[18px] w-[18px] text-primary-500\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path\n d=\"M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z\"\n fill=\"white\"/>\n <path\n d=\"M10 17L5 12L6.41 10.58L10 14.17L17.59 6.58L19 8M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 14.6522 3.05357 17.1957 4.92893 19.0711C5.85752 19.9997 6.95991 20.7362 8.17317 21.2388C9.38642 21.7413 10.6868 22 12 22C14.6522 22 17.1957 20.9464 19.0711 19.0711C20.9464 17.1957 22 14.6522 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z\"\n fill=\"currentColor\"/>\n </svg>\n </div>\n }\n\n @if (getDynamicIcon(item)) {\n @switch (getImageType(item)) {\n @case ('url') {\n <img class=\"object-contain\" height=\"20px\" width=\"20px\" [src]=\"getDynamicIcon(item)\" alt=\"\">\n }\n @case ('svg') {\n <app-svg-icon [src]=\"getDynamicIcon(item)!\" [size]=\"18\"\n [ngStyle]=\"{'color': getDynamicIconColor(item)}\"></app-svg-icon>\n }\n }\n }\n <p\n class=\"w-full text-caption text-center text-black overflow-hidden text-ellipsis whitespace-nowrap\">{{ getDisplayString(item) }}</p>\n <ng-content select=\"[post]\"></ng-content>\n </div>\n }\n\n @if (showMoreButton()) {\n <span\n (click)=\"showAllItems()\"\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border border-neutral-200 text-info-500\">\n More\n </span>\n }\n\n @if (showLessButton()) {\n <span\n (click)=\"shrinkItems()\"\n class=\"relative flex items-center justify-center rounded-lg px-3 py-3 gap-4 cursor-pointer border border-neutral-200 text-error-500\">\n Less\n </span>\n }\n\n @if (customActionText()) {\n <div (click)=\"customActionClicked()\"\n class=\"flex items-center rounded-lg px-3 py-3 gap-4 cursor-pointer bg-primary-500\">\n <p class=\"text-caption text-white\">{{ customActionText() }}</p>\n </div>\n }\n\n @if ((state()?.success()) && items().length <= 0) {\n <p class=\"text-caption text-red-700\">{{ noDataMessage() ?? 'No data found' }}</p>\n }\n\n @if ((state()?.error()) && items().length <= 0) {\n <p\n class=\"text-caption text-red-700\">{{ (state()?.error() != null || state()?.error() != '') ? state()?.error() : noDataMessage() ?? 'No data found' }}</p>\n }\n\n @if (state()?.loading()) {\n <app-shimmer class=\"w-full\" type=\"multiline\"></app-shimmer>\n }\n </div>\n\n <div error>\n @if (formControl.errors && hasErrors) {\n <p class=\"text-caption text-red-500\">\n {{ formControl.errors | humanizeFormMessages: errorMessages() }}\n </p>\n }\n </div>\n</app-base-input>\n\n","import {\n AfterContentInit,\n Component,\n EventEmitter,\n inject,\n input,\n OnInit,\n Output,\n signal\n} from '@angular/core';\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\n\n@Component({\n selector: 'app-switch',\n standalone: true,\n imports: [\n ReactiveFormsModule\n ],\n templateUrl: './switch.component.html',\n styleUrl: './switch.component.scss'\n})\nexport class SwitchComponent extends BaseControlValueAccessor implements OnInit, AfterContentInit {\n title = input<string | null>();\n\n id = signal<string>('');\n\n @Output()\n valueChanged = new EventEmitter<boolean>();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n errorMessages = input<{ [key: string]: string }>({});\n\n constructor() {\n super();\n if (this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if (formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n ngOnInit(): void {\n this.id.set(this.getId());\n }\n\n protected override onWriteValue(value: any): void {\n\n }\n\n onSwitchSelected($event: Event) {\n if (!this.disabled()) {\n this.markAsTouched();\n const value = ($event.target as HTMLInputElement).checked;\n this.onChange(value);\n this.valueChanged.emit(value);\n }\n }\n\n private getId(): string {\n const randomNumber = Math.floor(1000 + Math.random() * 9000);\n return `checkbox-${randomNumber.toString()}`;\n }\n}\n","<!--<label for=\"toggle\" class=\"flex items-center cursor-pointer\">-->\n<!-- <div class=\"relative\">-->\n<!-- <input id=\"toggle\" type=\"checkbox\" class=\"sr-only peer\" [checked]=\"checked()\" (change)=\"toggleSwitch()\">-->\n<!-- <div class=\"w-16 h-8 bg-gray-100 rounded-full shadow-inner\"></div>-->\n<!-- <span-->\n<!-- class=\"absolute left-1 top-1 w-2/5 h-4/5 bg-primary-500 rounded-full peer-checked:bg-primary-500 peer-checked:left-8 transition-all duration-300\"></span>-->\n<!-- </div>-->\n<!-- <div class=\"ml-3 text-gray-700 font-medium\">Toggle</div>-->\n<!--</label>-->\n\n<!--<div class=\"flex items-center cursor-pointer\">-->\n<!-- <label id=\"id()\" class=\"flex items-center m-0\">-->\n<!-- <div class=\"relative\">-->\n<!-- <input [id]=\"id()\" type=\"checkbox\" class=\"sr-only peer\"-->\n<!-- [checked]=\"formControl.value\"-->\n<!-- (change)=\"onSwitchSelected($event)\">-->\n<!-- <div class=\"w-16 h-8 bg-gray-100 peer-checked:bg-primary-50 rounded-full shadow-inner\"></div>-->\n<!-- <span-->\n<!-- class=\"w-2/5 h-4/5 bg-primary-500 absolute rounded-full left-1 top-1 peer-checked:bg-primary-500 transition-all duration-300\"-->\n<!-- [ngClass]=\"formControl.value ? 'translate-x-7' : 'translate-x-0'\">-->\n<!-- </span>-->\n<!-- </div>-->\n<!-- @if (title()) {-->\n<!-- <label class=\"text-body2 cursor-pointer select-none\" [for]=\"id()\">{{ title() }}</label>-->\n<!-- }-->\n<!-- </label>-->\n<!--</div>-->\n\n\n<div class=\"flex items-center\">\n <label [for]=\"id()\" class=\"flex m-0 items-center cursor-pointer\">\n <!-- Toggle Switch -->\n <div class=\"relative\">\n <input type=\"checkbox\" [id]=\"id()\" [name]=\"id()\"\n class=\"sr-only\"\n [disabled]=\"formControl.disabled\"\n [checked]=\"formControl.value\"\n (change)=\"onSwitchSelected($event)\"/>\n <div class=\"toggle-bg peer-checked:bg-primary-500\">\n <div class=\"dot\">\n </div>\n </div>\n </div>\n @if (title()) {\n <span class=\"toggle-label text-sm text-gray-700\">{{ title() }}</span>\n }\n </label>\n</div>\n","import {AfterContentInit, Component, inject, input, output} from '@angular/core';\nimport {FormControl, NgControl, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessor} from \"../../base/base-control-value-accessor\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\n\n@Component({\n selector: 'app-text-area-input',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n HumanizeFormMessagesPipe,\n BaseInputComponent\n ],\n templateUrl: './text-area-input.component.html',\n styleUrl: './text-area-input.component.scss'\n})\nexport class TextAreaInputComponent extends BaseControlValueAccessor implements AfterContentInit {\n appearance = input<'fill' | 'outline'>('outline');\n type = input<'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url'>('text');\n viewType = input<'text' | 'text-area'>('text');\n label = input.required<string>();\n fullWidth = input<boolean>(true);\n placeholder = input<string>('');\n rows = input<number>(4)\n errorMessages = input<{ [key: string]: string }>({});\n showErrorSpace = input<boolean>(false);\n\n changeValue = output<any>();\n\n ngControl = inject(NgControl, {optional: true, self: true});\n\n constructor() {\n super();\n if(this.ngControl) {\n this.ngControl!.valueAccessor = this;\n }\n }\n\n ngAfterContentInit(): void {\n let formControl = this.ngControl?.control as FormControl;\n if(formControl) {\n this.formControl = this.ngControl?.control as FormControl;\n }\n }\n\n onValueChange(event: any) {\n const target = event.target as HTMLInputElement;\n this.onChange(target.value);\n this.changeValue.emit(target.value);\n }\n\n protected onWriteValue(obj: any): void {\n }\n}\n","<app-base-input [title]=\"label()\" [fullWidth]=\"fullWidth()\" [isRequiredField]=\"hasRequiredValidator()\">\n <div input class=\"relative flex items-center w-full text-neutral-400 bg-white shadow-1 rounded-md\">\n <textarea\n class=\"w-full p-2 placeholder-neutral-400 text-black rounded-md border-none outline-none focus:border-none ring-1 ring-neutral-300 focus:ring-primary-500 focus:ring-2 transition duration-300\"\n [formControl]=\"formControl\"\n\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onValueChange($event)\">\n </textarea>\n </div>\n</app-base-input>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mt-1\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","import {\n AfterContentInit,\n Component, inject, input,\n output,\n signal\n} from '@angular/core';\nimport {NgClass} from \"@angular/common\";\nimport {CheckboxComponent} from \"../checkbox/checkbox.component\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessorV2} from \"../../base/base-control-value-accessor-v2\";\nimport {BaseInputComponent} from \"../_base/base-input/base-input.component\";\nimport {HumanizeFormMessagesPipe} from \"../humanize-form-messages.pipe\";\nimport {AppSvgIconComponent} from \"../../components/app-svg-icon/app-svg-icon.component\";\nimport {NgxMaskDirective} from \"ngx-mask\";\nimport {Overlay} from \"@angular/cdk/overlay\";\nimport {CdkPortal} from \"@angular/cdk/portal\";\n\n@Component({\n selector: 'app-time-picker',\n standalone: true,\n imports: [\n NgClass,\n FormsModule,\n BaseInputComponent,\n HumanizeFormMessagesPipe,\n NgxMaskDirective,\n ReactiveFormsModule,\n CheckboxComponent,\n CdkPortal,\n AppSvgIconComponent\n ],\n templateUrl: './time-picker.component.html',\n styleUrl: './time-picker.component.scss'\n})\nexport class TimePickerComponent extends BaseControlValueAccessorV2<TimePickerValue> implements AfterContentInit {\n\n overlay = inject(Overlay);\n\n iconSrc = input<string | null>();\n fullWidth = input<boolean>(false);\n showErrorSpace = input<boolean>(false);\n showTimePickerIcon = input<boolean>(true);\n\n valueChanged = output<TimePickerValueEvent>();\n\n scrollStrategy = this.overlay.scrollStrategies.block();\n\n\n isOpen = signal(false);\n errorMessages = signal<{ [key: string]: string }>({});\n enableApplyActions = signal<boolean>(false);\n hours = signal<number>(12);\n minutes = signal<number>(0);\n period = signal<'AM' | 'PM' | null>('AM');\n is24HourFormat = signal<boolean>(false);\n isFocused = signal(false);\n\n handleHourUpdate = false;\n previousValidHours: number = 12;\n previousValidMinutes: number = 0;\n\n protected override onValueReady(value: TimePickerValue): void {\n if (value) {\n let hours = value.hours;\n let minutes = value.minutes;\n\n if (hours < 0 || hours > 23) {\n hours = 12;\n }\n\n if (minutes < 0 || minutes > 59) {\n minutes = 0;\n }\n\n this.hours.set(hours);\n this.minutes.set(minutes);\n this.is24HourFormat.set(false);\n this.period.set('AM');\n }\n }\n\n ngAfterContentInit(): void {\n super.initFormControl();\n }\n\n onFocus() {\n this.isFocused.set(true);\n }\n\n onBlur() {\n this.onTouched();\n this.isFocused.set(false);\n }\n\n getClass() {\n let cls = '';\n if (this.iconSrc()) {\n cls = cls + 'pr-3 pl-10';\n } else {\n cls = cls + 'px-3';\n }\n\n if (this.fullWidth()) {\n cls = cls + ' ' + 'w-full';\n }\n\n return cls;\n }\n\n\n onHourUpClicked() {\n if (this.is24HourFormat()) {\n this.hours.update(prev => (prev === 23 ? 0 : prev + 1));\n } else {\n this.hours.update(prev => (prev === 12 ? 1 : prev + 1));\n }\n this.valueUpdated();\n }\n\n onHourDownClicked() {\n if (this.is24HourFormat()) {\n this.hours.update(prev => (prev === 0 ? 23 : prev - 1));\n } else {\n this.hours.update(prev => (prev === 1 ? 12 : prev - 1));\n }\n this.valueUpdated();\n }\n\n onMinuteUpClicked() {\n if (this.minutes() === 59) {\n this.minutes.set(0);\n if (this.handleHourUpdate) {\n this.onHourUpClicked();\n }\n } else {\n this.minutes.update(prev => prev + 1);\n }\n this.valueUpdated();\n }\n\n onMinuteDownClicked() {\n if (this.minutes() === 0) {\n this.minutes.set(59);\n if (this.handleHourUpdate) {\n this.onHourDownClicked();\n }\n } else {\n this.minutes.update(prev => prev - 1);\n }\n this.valueUpdated();\n }\n\n togglePeriod() {\n if (!this.is24HourFormat()) {\n this.period.update(prev => (prev === 'AM' ? 'PM' : 'AM'));\n }\n }\n\n toggle24HourFormat(isChecked: boolean) {\n this.is24HourFormat.set(isChecked);\n if (this.is24HourFormat()) {\n if (this.period() === 'PM' && this.hours() !== 12) {\n this.hours.set(this.hours() + 12);\n } else if (this.period() === 'AM' && this.hours() === 12) {\n this.hours.set(0);\n }\n this.period.set(null);\n } else {\n if (this.hours() >= 12) {\n this.period.set('PM');\n this.hours.set(this.hours() === 12 ? 12 : this.hours() - 12);\n } else {\n this.period.set('AM');\n this.hours.set(this.hours() === 0 ? 12 : this.hours());\n }\n }\n this.previousValidHours = this.hours();\n this.previousValidMinutes = this.minutes();\n }\n\n validateHours($event: FocusEvent) {\n const inputElement = $event.target as HTMLInputElement;\n const inputHours = parseInt(inputElement.value, 10);\n\n if (this.is24HourFormat()) {\n if (inputHours >= 0 && inputHours <= 23) {\n this.hours.set(inputHours);\n this.previousValidHours = inputHours;\n this.valueUpdated();\n } else {\n this.hours.set(this.previousValidHours);\n }\n } else {\n if (inputHours >= 1 && inputHours <= 12) {\n this.hours.set(inputHours);\n this.previousValidHours = inputHours;\n this.valueUpdated();\n } else {\n this.hours.set(this.previousValidHours);\n }\n }\n inputElement.value = this.getFormattedHours();\n }\n\n validateMinutes($event: FocusEvent) {\n const inputElement = $event.target as HTMLInputElement;\n const inputMinutes = parseInt(inputElement.value, 10);\n if (inputMinutes >= 0 && inputMinutes <= 59) {\n this.minutes.set(inputMinutes);\n this.previousValidMinutes = inputMinutes;\n this.valueUpdated();\n } else {\n this.minutes.set(this.previousValidMinutes);\n }\n inputElement.value = this.getFormattedMinutes();\n }\n\n getFormattedHours(): string {\n return this.hours() < 10 ? `0${this.hours()}` : `${this.hours()}`;\n }\n\n getFormattedMinutes(): string {\n return this.minutes() < 10 ? `0${this.minutes()}` : `${this.minutes()}`;\n }\n\n valueUpdated() {\n let value = {\n hours12F: this.hours(),\n minutes12F: this.minutes(),\n hours24F: this.is24HourFormat() ? this.hours() : this.period() === 'PM' ? this.hours() + 12 : this.hours(),\n minutes24F: this.minutes(),\n period: this.is24HourFormat() ? null : this.period()\n };\n this.onChange(value);\n this.valueChanged.emit(value);\n }\n\n onTimePickerIconClick() {\n this.isOpen.update(prev => !prev);\n }\n\n onClickOutside() {\n this.isOpen.set(false);\n }\n}\n\nexport interface TimePickerValue {\n hours: number;\n minutes: number;\n}\n\nexport interface TimePickerValueEvent {\n hours12F: number;\n minutes12F: number;\n hours24F: number;\n minutes24F: number;\n period: 'AM' | 'PM' | null;\n}\n","<app-base-input>\n <div input class=\"relative flex items-center w-full text-neutral-400 bg-white shadow-1 rounded-md\">\n @if (iconSrc()) {\n <app-svg-icon [size]=\"18\" [src]=\"iconSrc()!\"\n class=\"absolute pointer-events-none ml-3 text-neutral-400\"></app-svg-icon>\n }\n\n\n <!-- <p>{{ formControl.getError('required') ? placeholder + ' ' : placeholder }}</p>-->\n\n <input\n [mask]=\"'00:00'\"\n [showMaskTyped]=\"isFocused()\"\n class=\"h-[46px] placeholder-neutral-400 text-black rounded-md border-none outline-none focus:border-none ring-1 ring-neutral-300 focus:ring-primary-500 focus:ring-2 transition-all duration-300\"\n [class.text-neutral-400]=\"formControl.disabled\"\n [class.disabled-placeholder]=\"formControl.disabled\"\n [formControl]=\"formControl\"\n (focus)=\"onFocus()\"\n [ngClass]=\"getClass()\"\n [placeholder]=\"'HH:MM'\"\n (blur)=\"onBlur()\">\n\n\n @if (showTimePickerIcon()) {\n <div #timePickerIcon (click)=\"onTimePickerIconClick()\" class=\"absolute right-2 p-2 flex justify-center items-center hover:bg-neutral-100 rounded-full\">\n\n <svg class=\"w-[18px] h-[18px] text-neutral-500\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M12 20C16.4 20 20 16.4 20 12C20 7.6 16.4 4 12 4C7.6 4 4 7.6 4 12C4 16.4 7.6 20 12 20ZM12 2C17.5 2 22 6.5 22 12C22 17.5 17.5 22 12 22C6.5 22 2 17.5 2 12C2 6.5 6.5 2 12 2ZM17 13.9L16.3 15.2L11 12.3V7H12.5V11.4L17 13.9Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n\n <ng-template cdkPortal>\n\n </ng-template>\n\n<!-- <ng-template cdkConnectedOverlay-->\n<!-- [cdkConnectedOverlayOrigin]=\"timePickerIcon\"-->\n<!-- [cdkConnectedOverlayOpen]=\"isOpen()\"-->\n<!-- (overlayOutsideClick)=\"onClickOutside()\"-->\n<!-- [cdkConnectedOverlayBackdropClass]=\"['bg-black', 'bg-opacity-20']\"-->\n<!-- [cdkConnectedOverlayPositions]=\"[-->\n<!-- {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},-->\n<!-- {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}-->\n<!-- ]\"-->\n<!-- [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"-->\n<!-- [cdkConnectedOverlayOffsetY]=\"10\">-->\n<!-- </ng-template>-->\n </div>\n\n\n</app-base-input>\n\n<div class=\"flex flex-col gap-3\">\n <div class=\"flex items-center\">\n <app-checkbox title=\"24H\" (valueChanged)=\"toggle24HourFormat($event)\"></app-checkbox>\n </div>\n\n <div class=\"flex items-center gap-6\">\n <!-- Hour Controls -->\n <div class=\"flex flex-col items-center gap-2\">\n <div (click)=\"onHourUpClicked()\" class=\"p-2 rounded-full text-neutral-600 hover:bg-neutral-100 transition-all duration-300\">\n <svg class=\"size-[24px] cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7.41 15.41L12 10.83L16.59 15.41L18 14L12 8L6 14L7.41 15.41Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <input class=\"text-center text-body2 border-none outline-none appearance-none w-[30px] select-none\"\n [value]=\"getFormattedHours()\"\n (blur)=\"validateHours($event)\"\n type=\"number\">\n\n <div (click)=\"onHourDownClicked()\" class=\"p-2 rounded-full text-neutral-600 hover:bg-neutral-100 transition-all duration-300\">\n <svg class=\"size-[24px] cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7.41 8.58L12 13.17L16.59 8.58L18 10L12 16L6 10L7.41 8.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n\n <span class=\"text-body1 select-none\">:</span>\n\n <!-- Minute Controls -->\n <div class=\"flex flex-col items-center gap-2\">\n <div (click)=\"onMinuteUpClicked()\" class=\"p-2 rounded-full text-neutral-600 hover:bg-neutral-100 transition-all duration-300\">\n <svg class=\"size-[24px] cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7.41 15.41L12 10.83L16.59 15.41L18 14L12 8L6 14L7.41 15.41Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <input class=\"text-center text-body2 border-none outline-none appearance-none w-[30px] select-none\"\n [value]=\"getFormattedMinutes()\"\n (blur)=\"validateMinutes($event)\"\n type=\"number\">\n\n <div (click)=\"onMinuteDownClicked()\" class=\"p-2 rounded-full text-neutral-600 hover:bg-neutral-100 transition-all duration-300\">\n <svg class=\"size-[24px] cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M7.41 8.58L12 13.17L16.59 8.58L18 10L12 16L6 10L7.41 8.58Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n\n <!-- AM/PM Toggle (Hide when 24-hour is selected) -->\n @if(!is24HourFormat()) {\n <div class=\"flex gap-3\">\n <span class=\"px-2 py-1 rounded-md text-blue-500 text-caption cursor-pointer hover:bg-neutral-100 select-none\"\n [ngClass]=\"period() === 'AM' ? 'bg-primary-500 hover:bg-primary-500 text-white' : ''\"\n (click)=\"togglePeriod()\">AM</span>\n <span class=\"px-2 py-1 rounded-md text-blue-500 text-caption cursor-pointer hover:bg-neutral-100 select-none\"\n [ngClass]=\"period() === 'PM' ? 'bg-primary-500 hover:bg-primary-500 text-white' : ''\"\n (click)=\"togglePeriod()\">PM</span>\n </div>\n }\n </div>\n\n @if(enableApplyActions()) {\n <div class=\"flex items-center justify-between\">\n <button class=\"py-2 text-primary-500 rounded-md transition-all duration-300\">Cancel</button>\n <button class=\"px-4 py-2 text-white bg-primary-500 rounded-md hover:bg-primary-600 transition-all duration-300\">Apply</button>\n </div>\n }\n</div>\n\n@if (formControl.errors && hasErrors) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-red-500\">{{ formControl.errors | humanizeFormMessages: errorMessages() }}</span>\n </div>\n} @else {\n @if (showErrorSpace()) {\n <div class=\"mb-3\">\n <span class=\"text-caption text-transparent\">.</span>\n </div>\n }\n}\n","export class DateUtils {\n convertToMMDDYYYY(dateString: string | undefined | null): string | null {\n if (!dateString) {\n return null;\n }\n\n const date = new Date(dateString);\n\n // Check if the date is valid\n if (isNaN(date.getTime())) {\n return null;\n }\n\n const month = ('0' + (date.getMonth() + 1)).slice(-2);\n const day = ('0' + date.getDate()).slice(-2);\n const year = date.getFullYear();\n\n return `${month}/${day}/${year}`;\n }\n\n convertTohhmm(dateString: string | undefined | null): string | null {\n if (!dateString) {\n return null;\n }\n\n const date = new Date(dateString);\n\n // Check if the date is valid\n if (isNaN(date.getTime())) {\n return null;\n }\n\n const hours = ('0' + date.getHours()).slice(-2);\n const minutes = ('0' + date.getMinutes()).slice(-2);\n\n return `${hours}:${minutes}`;\n }\n\n convertToDateTimeString(date: string, time?: string): string | undefined {\n if (!date) {\n return undefined;\n }\n const [month, day, year] = date.split('/').map(Number); // mm/dd/yyyy format\n\n const [hours, minutes] = time ? time.split(':').map(Number) : [0, 0]; // 0 hours, 0 minutes (12:00 AM)\n const localDate = new Date(year, month - 1, day, hours, minutes);\n\n return localDate.toISOString();\n }\n\n convertToMMYYYYString(mmyyyy: string): string | null {\n if (!mmyyyy || mmyyyy.length !== 7) {\n return null;\n }\n\n const [month, year] = mmyyyy.split('/');\n\n return `${month}/${year}`;\n\n }\n\n getCurrentDateMMDDYYYY() {\n let today = new Date();\n let currentDate = this.convertToMMDDYYYY(today.toDateString());\n return currentDate;\n }\n}\n","import { FormGroup } from '@angular/forms';\n\nexport function printInvalidFields(formGroup: FormGroup): void {\n Object.keys(formGroup.controls).forEach(field => {\n const control = formGroup.get(field);\n\n if (control && control.invalid) {\n console.log(`Field: ${field}`);\n\n const errors = control.errors;\n if (errors) {\n Object.keys(errors).forEach(errorKey => {\n console.log(` - Validation Error: ${errorKey}, Value: ${errors[errorKey]}`);\n });\n }\n }\n\n // Check for nested FormGroup\n if (control instanceof FormGroup) {\n printInvalidFields(control);\n }\n });\n}\n","import {ElementRef} from \"@angular/core\";\n\nexport function openLink(link: string, openInNewTab: boolean = false, document: Document, elementRef: ElementRef) {\n const anchorElement = document.createElement('a');\n anchorElement.setAttribute('href', link);\n if(openInNewTab) {\n anchorElement.setAttribute('target', '_blank');\n }\n anchorElement.style.display = 'none';\n elementRef.nativeElement.appendChild(anchorElement);\n anchorElement.click();\n elementRef.nativeElement.removeChild(anchorElement);\n}\n","export interface JwtDecodeOptions {\n header?: boolean;\n}\n\nexport interface JwtHeader {\n typ?: string;\n alg?: string;\n kid?: string;\n}\n\nexport interface JwtPayload {\n iss?: string;\n sub?: string;\n aud?: string[] | string;\n exp?: number;\n nbf?: number;\n iat?: number;\n jti?: string;\n}\n\nexport class InvalidTokenError extends Error {}\n\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\n\nfunction b64DecodeUnicode(str: string) {\n return decodeURIComponent(\n atob(str).replace(/(.)/g, (m, p) => {\n let code = (p as string).charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }),\n );\n}\n\nfunction base64UrlDecode(str: string) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n\n try {\n return b64DecodeUnicode(output);\n } catch (err) {\n return atob(output);\n }\n}\n\nexport function jwtDecode<T = JwtHeader>(\n token: string,\n options: JwtDecodeOptions & { header: true },\n): T;\nexport function jwtDecode<T = JwtPayload>(token: string, options?: JwtDecodeOptions): T;\nexport function jwtDecode<T = JwtHeader | JwtPayload>(\n token: string,\n options?: JwtDecodeOptions,\n): T {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n\n options ||= {};\n\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n\n let decoded: string;\n try {\n decoded = base64UrlDecode(part);\n } catch (e) {\n throw new InvalidTokenError(\n `Invalid token specified: invalid base64 for part #${pos + 1} (${(e as Error).message})`,\n );\n }\n\n try {\n return JSON.parse(decoded) as T;\n } catch (e) {\n throw new InvalidTokenError(\n `Invalid token specified: invalid json for part #${pos + 1} (${(e as Error).message})`,\n );\n }\n}\n","export function arrayToCSV(arr: (string | null | undefined)[]): string {\n const filteredArr = arr.filter((item) => item !== null && item !== undefined && item !== '');\n return filteredArr.join(', ');\n}\n\nexport function arrayToSpaceSeparator(arr: (string | null | undefined)[]): string {\n const filteredArr = arr.filter((item) => item !== null && item !== undefined && item !== '');\n return filteredArr.join(' ');\n}\n\nexport function arrayToSeparator(arr: (string | null | undefined)[], separator: string = ','): string {\n const filteredArr = arr.filter((item) => item !== null && item !== undefined && item !== '');\n return filteredArr.join(`${separator}`);\n}\n\nexport function toSentenceCase(value: string): string {\n return value\n .replace(/([A-Z])/g, ' $1') // Insert spaces before capital letters\n .trim() // Remove leading spaces\n .replace(/^./, (str) => str.toUpperCase()); // Capitalize the first letter\n}\n\n","import { AbstractControl, ValidationErrors, AsyncValidatorFn } from '@angular/forms';\nimport { of } from 'rxjs';\nimport { delay, map } from 'rxjs/operators';\n\nexport function mmddyyyyDateValidatorAsync(): AsyncValidatorFn {\n return (control: AbstractControl): any => {\n const value: string = control.value;\n\n if (!value) {\n return of(null); // Don't validate if the input is empty.\n }\n\n // Regular expressions for mm/dd/yyyy and mmddyyyy formats\n const regexWithSlashes = /^(0[1-9]|1[0-2])\\/(0[1-9]|[12][0-9]|3[01])\\/\\d{4}$/;\n const regexWithoutSlashes = /^(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\\d{4}$/;\n\n // Simulate async validation with delay\n return of(value).pipe(\n delay(500), // Simulate a server call or async operation\n map(() => {\n // Validate mm/dd/yyyy format\n if (regexWithSlashes.test(value)) {\n const [month, day, year] = value.split('/').map(Number);\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n return { invalidDate: 'Invalid date. Make sure the day, month, and year are correct.' };\n }\n }\n // Validate mmddyyyy format\n else if (regexWithoutSlashes.test(value)) {\n const month = Number(value.substring(0, 2));\n const day = Number(value.substring(2, 4));\n const year = Number(value.substring(4, 8));\n\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n return { invalidDate: 'Invalid date. Make sure the day, month, and year are correct.' };\n }\n }\n else {\n return { invalidDate: 'Invalid date format. Use mm/dd/yyyy or mmddyyyy.' };\n }\n\n return null; // If valid, return null\n })\n );\n };\n}\n","import {inject, Injectable} from '@angular/core';\nimport {NGL_CONFIG} from './ngl-config.token';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NglService {\n\n private config = inject(NGL_CONFIG);\n\n constructor() {\n }\n\n getBaseUrl() {\n return this.config.baseApiUrl;\n }\n}\n","import {Provider} from '@angular/core';\nimport {NGL_CONFIG, NglConfig} from './ngl-config.token';\n\nexport function provideNglConfig(config: NglConfig): Provider {\n return {\n provide: NGL_CONFIG,\n useValue: config\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.ToastService","filter"],"mappings":";;;;;;;;;;;;;;;;;;;MASa,UAAU,GAAG,IAAI,cAAc,CAAY,YAAY;;MCAvD,cAAc,CAAA;AAEzB,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjB,IAAA,cAAc;AACd,IAAA,OAAO,GAAW,IAAI,CAAC,MAAM,CAAC,UAAU;AAE1C,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE;;AAGzC,IAAA,iBAAiB,CAAC,OAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO;;;AAI/B,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;IAGd,GAAG,CACX,GAAW,EACX,WAAoC,EACpC,aAA2B,EAC3B,QAAoB,GAAA,KAAK,EACzB,oBAAA,GAA+B,CAAC,EAAA;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;;QAGhD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,oBAAoB,GAAG,oBAAoB,GAAG,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAW,QAAA,EAAA,oBAAoB,CAAE,CAAA,CAAC;;aAC1D;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC;;QAG1C,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW;AACxC,iBAAA,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,kBAAkB,CAAC,GAAG,CAAC,CAAI,CAAA,EAAA,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;iBAC/E,IAAI,CAAC,GAAG,CAAC;AACZ,YAAA,GAAG,IAAI,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;;AAG1B,QAAA,MAAM,OAAO,GAAG,EAAC,OAAO,EAAC;AACzB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CACzD,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAChD,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CACjC;;AAGO,IAAA,QAAQ,CAAI,GAAW,EAAA;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,GAAG,CAAC;;AAIpB,IAAA,YAAY,CACpB,GAAW,EACX,aAA2B,EAC3B,QAAoB,GAAA,KAAK,EACzB,oBAAA,GAA+B,CAAC,EAChC,UAAqB,GAAA,CAAC;IACtB,YAAuB,GAAA,IAAI,EAC3B,WAAA,GAAuB,KAAK,EAAA;QAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;;QAGhD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,oBAAoB,GAAG,oBAAoB,GAAG,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAW,QAAA,EAAA,oBAAoB,CAAE,CAAA,CAAC;;aAC1D;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC;;AAG1C,QAAA,MAAM,OAAO,GAAG,EAAC,OAAO,EAAC;AAEzB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CACzD,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAChD,WAAW,IAAI,UAAU,GAAG;AAC1B,cAAE,KAAK,CAAC,UAAU;cAChB,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CACrC;;AAGO,IAAA,IAAI,CAAI,GAAW,EACX,IAAS,EACT,WAAoC,EACpC,aAA2B,EAAA;QAC3C,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW;AACxC,iBAAA,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,kBAAkB,CAAC,GAAG,CAAC,CAAI,CAAA,EAAA,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;iBAC/E,IAAI,CAAC,GAAG,CAAC;AACZ,YAAA,GAAG,IAAI,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;;QAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC,IAAI,CAClE,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAChD,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CACjC;;AAGO,IAAA,GAAG,CAAI,GAAW,EACX,IAAS,EACT,WAAoC,EACpC,aAA2B,EAAA;QAC1C,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW;AACxC,iBAAA,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,kBAAkB,CAAC,GAAG,CAAC,CAAI,CAAA,EAAA,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;iBAC/E,IAAI,CAAC,GAAG,CAAC;AACZ,YAAA,GAAG,IAAI,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;;QAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC,IAAI,CACjE,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAChD,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CACjC;;AAGO,IAAA,MAAM,CAAI,GAAW,EACX,WAAoC,EACpC,aAA2B,EAAA;QAC7C,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW;AACxC,iBAAA,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,kBAAkB,CAAC,GAAG,CAAC,CAAI,CAAA,EAAA,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;iBAC/E,IAAI,CAAC,GAAG,CAAC;AACZ,YAAA,GAAG,IAAI,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;;QAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAChD,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CACjC;;AAGO,IAAA,UAAU,CAAC,GAAW,EAAE,IAAU,EAAE,aAA2B,EAAA;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;QAC/B,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;AAExC,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE;YACtE,OAAO;AACP,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CACpC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CACjC;;AAGO,IAAA,WAAW,CAAC,GAAW,EAAE,KAAe,EAAE,aAA2B,EAAA;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;QAGtD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAC,CAAC;;AAGjG,IAAA,cAAc,CAAC,GAAW,EAAE,QAAkB,EAAE,aAA2B,EAAE,aAA6B,EAAA;QAClH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;QAEhD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAC,CAAC;;AAGjG,IAAA,iBAAiB,CAAC,IAAS,EAAA;;AAEnC,QAAA,OAAO,IAAI;;AAGL,IAAA,eAAe,CAAC,KAAwB,EAAA;AAC9C,QAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;;AAGxB,IAAA,YAAY,CAAC,aAA2B,EAAA;AAC9C,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc;QAEvC,IAAI,aAAa,EAAE;YACjB,aAAa,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,IAAG;AACjC,gBAAA,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;AACjE,aAAC,CAAC;;AAGJ,QAAA,OAAO,aAAa;;AAGd,IAAA,UAAU,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AAC3D,YAAA,OAAO,GAAG;;aACL;AACL,YAAA,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG;;;uGAjMlB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,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;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCLqB,wBAAwB,CAAA;AAE5C,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AACxB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAChB,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;IACtC,gBAAgB,GAAG,KAAK;AAExB,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;;IAGhF,QAAQ,GAAQ,MAAK;AACrB,KAAC;IAED,SAAS,GAAQ,MAAK;AACtB,KAAC;AAED,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACnE,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;AAMhC,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;;IAG/B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAI1B,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAqB,CAAC;YACnE,OAAO,CAAC,EAAE,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;;AAE/C,QAAA,OAAO,KAAK;;AAGf;;MCrDqB,0BAA0B,CAAA;AAE9C,IAAA,YAAY,GAAG,MAAM,CAAW,IAAI,CAAC;AACrC,IAAA,WAAW;AAEX,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AACxB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAChB,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;IACtC,gBAAgB,GAAG,KAAK;AAExB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;IAIxC,eAAe,GAAA;AACb,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;AAI7D,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;;IAGhF,QAAQ,GAAQ,MAAK;AACrB,KAAC;IAED,SAAS,GAAQ,MAAK;AACtB,KAAC;AAED,IAAA,UAAU,CAAC,KAAQ,EAAA;;;;;;;;;;;;AAcjB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,cAAc,CAAI,QAAqB,EAAA;AACrC,QAAA,OAAO,IAAI,QAAQ,EAAE,CAAC;;IAGxB,QAAQ,CAAI,KAAU,EAAE,KAA8B,EAAA;AACpD,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC;;AAMrB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;;IAG/B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAI1B,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAqB,CAAC;YACnE,OAAO,CAAC,EAAE,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;;AAE/C,QAAA,OAAO,KAAK;;AAGd,IAAA,WAAW,CAAC,QAAa,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAG1B;AAOe,SAAA,OAAO,CAAI,KAAU,EAAE,MAAiB,EAAA;AACtD,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,KAAK;IAE7D,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;AACrC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAc,CAAC;AACxC,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,GAAc,CAAC,CAAC;AACzC,KAAC,CAAC;AACJ;AAEgB,SAAA,aAAa,CAAI,KAAU,EAAE,cAAyC,EAAA;;AAEpF,IAAA,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;QACxC,OAAO,KAAK,CAAC;;;AAIf,IAAA,IAAI,EAAE,KAAK,YAAY,cAAc,CAAC,EAAE;QACtC,OAAO,KAAK,CAAC;;;AAIf,IAAA,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS;;IAG1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB;;AAGrD,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,YAAY,GAAG,OAAO,SAAS,CAAC,GAAG,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,GAAG,CAAC;;QAGpC,IAAI,YAAY,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,EAAE;AACxD,YAAA,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;;AAElD,gBAAA,MAAM,mBAAmB,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAG,SAAS,CAAC,GAAG,CAAS,CAAC,WAAW,CAAC;gBAC1F,IAAI,CAAC,mBAAmB,EAAE;oBACxB,OAAO,KAAK,CAAC;;;AAEV,iBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC9B,OAAO,KAAK,CAAC;;;AAEV,aAAA,IAAI,YAAY,KAAK,UAAU,EAAE;YACtC,OAAO,KAAK,CAAC;;;IAIjB,OAAO,IAAI,CAAC;AACd;AAEM,SAAU,uBAAuB,CAAC,GAAQ,EAAA;IAC9C,IAAI,GAAG,KAAK,IAAI;AAAE,QAAA,OAAO,MAAM;AAE/B,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,CAAA,MAAA,EAAS,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;;AAG9E,IAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAG;YAC5C,OAAO,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA,CAAE;AACvD,SAAC,CAAC;QACF,OAAO,CAAA,SAAA,EAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;;AAG9C,IAAA,OAAO,OAAO,GAAG,CAAC;AACpB;;MCpKsB,0BAA0B,CAAA;AAC9C,IAAA,aAAa,GAAG,KAAK,CAA4B,EAAE,CAAC;IAEpD,YAAY,GAAG,MAAM,EAAK;AAE1B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AACxB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAChB,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAEtC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,WAAW;AAIX,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW;;AAGnD,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;IAIxC,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;AAI7D,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;;IAGxE,QAAQ,GAAQ,MAAK;AAC7B,KAAC;IAED,SAAS,GAAQ,MAAK;AACtB,KAAC;AAED,IAAA,UAAU,CAAC,KAAQ,EAAA;QACjB,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAElC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC1B,SAAC,CAAC;;AAIJ,IAAA,aAAa,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGtB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;;IAG/B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAI1B,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAqB,CAAC;YACnE,OAAO,CAAC,EAAE,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;;AAE/C,QAAA,OAAO,KAAK;;uGAnFM,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,+QAFpC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEQ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJ/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA;;;MCKY,KAAK,CAAA;AAChB,IAAA,cAAc,GAAG,MAAM,CAAW,IAAI,CAAC;AAC/B,IAAA,oBAAoB,GAAG,MAAM,CAAU,KAAK,CAAC;AAC7C,IAAA,aAAa,GAAG,MAAM,CAAU,KAAK,CAAC;AACtC,IAAA,aAAa,GAAG,MAAM,CAAU,KAAK,CAAC;AACtC,IAAA,YAAY,GAAG,MAAM,CAAU,KAAK,CAAC;AACrC,IAAA,WAAW,GAAG,MAAM,CAAgB,IAAI,CAAC;AACzC,IAAA,WAAW,GAAG,MAAM,CAAsB,IAAI,CAAC;AAE9C,IAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAC3C,IAAA,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE;AACvD,IAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACzC,IAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACzC,IAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACvC,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AACrC,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAE9C,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;;IAGzC,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC;;IAGnD,aAAa,GAAA;;AAEX,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC;;AAG5C,IAAA,aAAa,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC;;AAG5C,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;;IAG1C,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;;AAE1C;IAEW;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EANW,YAAY,KAAZ,YAAY,GAMvB,EAAA,CAAA,CAAA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;MCnIa,eAAe,CAAA;AAC1B,IAAA,cAAc,GAAG,MAAM,CAAW,IAAI,CAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAAU,KAAK,CAAC;AACtC,IAAA,aAAa,GAAG,MAAM,CAAU,KAAK,CAAC;AACtC,IAAA,YAAY,GAAG,MAAM,CAAU,KAAK,CAAC;AACrC,IAAA,WAAW,GAAG,MAAM,CAAgB,IAAI,CAAC;AACzC,IAAA,WAAW,GAAG,MAAM,CAAsB,IAAI,CAAC;AAE9C,IAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAC3C,IAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACzC,IAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACzC,IAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACvC,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AACrC,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAE9C,IAAA,KAAK,GAAG,MAAM,CAAQ,EAAE,CAAC;AACzB,IAAA,UAAU,GAAG,MAAM,CAAS,CAAC,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAS,CAAC,CAAC;AAC5B,IAAA,YAAY,GAAG,MAAM,CAAS,CAAC,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAS,CAAC,CAAC;AAE9B,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;;IAGzC,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC;;AAG5C,IAAA,aAAa,CAAC,QAAa,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC;QAG1C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;gBACvB,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;AACpC,aAAC,CAAC;;AAGJ,QAAA,IAAI,QAAQ,EAAE,UAAU,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;;AAG1C,QAAA,IAAI,QAAQ,EAAE,QAAQ,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAGtC,QAAA,IAAI,QAAQ,EAAE,YAAY,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAG9C,QAAA,IAAI,QAAQ,EAAE,UAAU,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;;;AAK5C,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;;IAG1C,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;AAEvC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;;AAEzB;;MCjFY,gBAAgB,CAAA;AAC3B,IAAA,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC;uGAD9B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ7B,+QAKA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDEI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAT5B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,+QAAA,EAAA;;;MEIU,mBAAmB,CAAA;AAErB,IAAA,GAAG;IACH,OAAO,GAAY,KAAK;IACxB,IAAI,GAAW,EAAE;IACjB,QAAQ,GAA2B,EAAE;IAG9C,QAAQ,GAAA;AACN,QAAA,OAAO,EAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAC;;uGAT/D,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZhC,yFAEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKI,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAT/B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,yFAAA,EAAA;8BAMQ,GAAG,EAAA,CAAA;sBAAX;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;;;MEAU,eAAe,CAAA;AAC1B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAE5B,IAAA,IAAI,GAAG,KAAK,CAAgC,QAAQ,CAAC;AACrD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAChC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AACjC,IAAA,UAAU,GAAG,KAAK,CAA2E,SAAS,CAAC;AACvG,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC;AAC/B,IAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,CAAC;IAC5B,OAAO,GAAG,KAAK,EAAiB;AAChC,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC;AACtC,IAAA,WAAW,GAAG,KAAK,CAAS,gBAAgB,CAAC;AAC7C,IAAA,YAAY,GAAG,KAAK,CAAS,oBAAoB,CAAC;AAClD,IAAA,eAAe,GAAG,KAAK,CAAS,kBAAkB,CAAC;AACnD,IAAA,IAAI,GAAG,KAAK,CAA+B,QAAQ,CAAC;AAE1C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;IAEhD,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;IAEjE,cAAc,GAAA;QACZ,IAAI,IAAI,GAAG,2FAA2F;AAEtG,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,MAAM,EAAE,qBAAqB;AAC7B,YAAA,KAAK,EAAE;SACR;AAED,QAAA,MAAM,iBAAiB,GAAG;AACxB,YAAA,OAAO,EAAE,CAAyB,sBAAA,EAAA,IAAI,CAAC,WAAW,EAAE,CAAE,CAAA;AACtD,YAAA,cAAc,EAAE,CAA2B,wBAAA,EAAA,IAAI,CAAC,WAAW,EAAE,CAAE,CAAA;YAC/D,OAAO,EAAE,CAAG,EAAA,IAAI,CAAC,eAAe,EAAE,CAAA,4BAAA,EAA+B,IAAI,CAAC,YAAY,EAAE,CAAe,aAAA,CAAA;YACnG,cAAc,EAAE,CAAG,EAAA,IAAI,CAAC,eAAe,EAAE,CAAA,8BAAA,EAAiC,IAAI,CAAC,YAAY,EAAE,CAAe,aAAA,CAAA;AAC5G,YAAA,QAAQ,EAAE,CAAG,EAAA,IAAI,CAAC,eAAe,EAAE,CAA2F,yFAAA;SAC/H;QAED,OAAO,CAAA,EAAG,IAAI,CAAI,CAAA,EAAA,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,oBAAoB,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAE;;IAGzK,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;;AAGzB,QAAA,QAAQ,IAAI,CAAC,UAAU,EAAE;AACvB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,kBAAkB;AAC3B,YAAA,KAAK,gBAAgB;AACnB,gBAAA,OAAO,kBAAkB;AAC3B,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,kBAAkB;AAC3B,YAAA,KAAK,gBAAgB;AACnB,gBAAA,OAAO,YAAY;AACrB,YAAA,KAAK,SAAS;AACd,YAAA;AACE,gBAAA,OAAO,YAAY;;;IAIzB,cAAc,GAAA;QACZ,IAAI,WAAW,GAAG,cAAc;AAChC,QAAA,QAAQ,IAAI,CAAC,UAAU,EAAE;AACvB,YAAA,KAAK,SAAS;gBACZ,WAAW,GAAG,oBAAoB;gBAClC;AACF,YAAA,KAAK,gBAAgB;gBACnB,WAAW,GAAG,oBAAoB;gBAClC;AACF,YAAA,KAAK,UAAU;gBACb,WAAW,GAAG,oBAAoB;gBAClC;AACF,YAAA,KAAK,gBAAgB;gBACnB,WAAW,GAAG,cAAc;gBAC5B;AACF,YAAA,KAAK,SAAS;AACd,YAAA;gBACE,WAAW,GAAG,cAAc;gBAC5B;;AAGJ,QAAA,OAAO,WAAW;;IAGpB,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB;;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACtD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI;AAC9C,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;;AAE9B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;;AAGzB,IAAA,YAAY,CAAC,SAAoB,EAAA;QAC/B,SAAS,CAAC,gBAAgB,EAAE;QAC5B,SAAS,CAAC,cAAc,EAAE;;uGAnGjB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,+pDCjB5B,8oBAmBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDTI,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,iFAChB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EACP,OAAA,EAAA;wBACP,OAAO;wBACP,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,8oBAAA,EAAA;8BAsBS,WAAW,EAAA,CAAA;sBAApB;;;MEtBU,oBAAoB,CAAA;AAE/B,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;IAE1B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;;IAG7B,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;;uGAVjB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbjC,ybAWA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHI,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKN,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EACP,OAAA,EAAA;wBACP,eAAe;AAChB,qBAAA,EAAA,QAAA,EAAA,ybAAA,EAAA;;;MEMU,cAAc,CAAA;AAEjB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE1C,IAAA,QAAQ;AAEhB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;;AAGzD,IAAA,cAAc,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;IAEjD,mBAAmB,GAAG,cAAc;AAEpC,IAAA,eAAe,CACb,SAA2B,EAC3B,cAA2B,EAC3B,OAMC,EAAA;QAGD,MAAM,EACJ,SAAS,GAAG;YACV,EAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAC;YACvF,EAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAC;YACxF,EAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAC;YACnF,EAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAAE,SAAA;AACvF,QAAA,YAAY,GAAG,KAAK,EACpB,IAAI,EACJ,cAAc,GAAG,OAAO,EACxB,kBAAkB,GAAG,KAAK,EAC3B,GAAG,OAAO,IAAI,EAAE;AAEjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;AAE3F,QAAA,IAAI,gBAAmF;AAEvF,QAAA,IAAI,QAAQ,IAAI,kBAAkB,EAAE;AAClC,YAAA,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;AACrC,iBAAA,MAAM;AACN,iBAAA,kBAAkB;AAClB,iBAAA,gBAAgB,EAAE;;aAChB;YACL,gBAAgB,GAAG,IAAI,CAAC;AACrB,iBAAA,QAAQ;iBACR,mBAAmB,CAAC,cAAc;iBAClC,sBAAsB,CAAC,KAAK;iBAC5B,QAAQ,CAAC,IAAI;iBACb,aAAa,CAAC,SAAS,CAAC;;AAG7B,QAAA,MAAM,qBAAqB,GAAG;YAC5B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAC1C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;YAC5C,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;YACtD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;SAC7C;AAED,QAAA,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAE5G,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,cAAc,EAAE,qBAAqB;AACrC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,aAAa,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;YAC9C,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AACnD,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;;IAIlB,SAAS,CAAC,KAAa,EAAE,OAAe,EAAA;QACtC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACrD,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE;AACV,aAAA;YACD,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa;AACnD,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;;IAGlB,SAAS,CAAI,SAA2B,EAAE,OAIzC,EAAA;AAGC,QAAA,MAAM,EAAC,YAAY,GAAG,KAAK,EAAE,cAAc,EAAE,IAAI,EAAC,GAAG,OAAO,IAAI,EAAE;AAElE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,MAAM;AACN,aAAA,kBAAkB;AAClB,aAAA,gBAAgB,EAAE;QAErB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,CAAC,aAAa,CAAC;YAC9B,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,IAAI,IAAI,CAAC,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;AACnI,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;QAEF,IAAI,CAAC,mBAAmB,CAAC,cAAc,IAAI,IAAI,CAAC,mBAAmB,CAAC;AAEpE,QAAA,OAAO,SAAS;;AAGV,IAAA,mBAAmB,CAAC,cAAsB,EAAA;QAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAgB;QAC7E,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;;;IAI1D,YAAY,CACV,SAA2B,EAC3B,OAGC,EAAA;QAED,MAAM,EAAC,YAAY,GAAG,KAAK,EAAE,IAAI,EAAC,GAAG,OAAO,IAAI,EAAE;AAElD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,MAAM;AACN,aAAA,kBAAkB;aAClB,MAAM,CAAC,KAAK,CAAC;QAEhB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,CAAC;AAC7F,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;;IAGlB,eAAe,CACb,SAA2B,EAC3B,OAGC,EAAA;QAED,MAAM,EAAC,YAAY,GAAG,KAAK,EAAE,IAAI,EAAC,GAAG,OAAO,IAAI,EAAE;AAElD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,MAAM;AACN,aAAA,kBAAkB;aAClB,MAAM,CAAC,KAAK,CAAC;QAEhB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,CAAC;AACvH,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;;IAGlB,cAAc,CACZ,SAA2B,EAC3B,OAGC,EAAA;QAED,MAAM,EAAC,YAAY,GAAG,KAAK,EAAE,IAAI,EAAC,GAAG,OAAO,IAAI,EAAE;AAElD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,MAAM;AACN,aAAA,kBAAkB;aAClB,MAAM,CAAC,KAAK,CAAC;QAEhB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,mBAAmB,CAAC;AAC5F,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;;IAGlB,kBAAkB,CAChB,SAA2B,EAC3B,OAIC,EAAA;AAED,QAAA,MAAM,EACJ,SAAS,GAAG,GAAG,EACf,YAAY,GAAG,KAAK,EACpB,IAAI,EACL,GAAG,OAAO,IAAI,EAAE;AAEjB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,MAAM;aACN,GAAG,CAAC,KAAK;aACT,KAAK,CAAC,KAAK;AACX,aAAA,KAAK,CAAC,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI,CAAC;QAE1B,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,mBAAmB,CAAC;AAC7F,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;;IAGlB,iBAAiB,CACf,SAA2B,EAC3B,OAIC,EAAA;AAED,QAAA,MAAM,EACJ,SAAS,GAAG,GAAG,EACf,YAAY,GAAG,KAAK,EACpB,IAAI,EACL,GAAG,OAAO,IAAI,EAAE;AAEjB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,MAAM;aACN,GAAG,CAAC,KAAK;aACT,IAAI,CAAC,KAAK;AACV,aAAA,KAAK,CAAC,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI,CAAC;QAE1B,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,mBAAmB,CAAC;AAC7F,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;;uGAvQP,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,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;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,qBAAqB,CAAA;AAChC,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;IAE3B,sBAAsB,GAAG,KAAK;AAE9B,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAE/B,IAAA,kBAAkB;IAClB,YAAY,GAAG,KAAK;AAE5B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAY,KAAI;YAEtE,IAAI,IAAI,CAAC,MAAM,CAAC,2BAA2B,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAC3E;;AAGF,YAAA,IAAI,KAAK,YAAY,eAAe,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE;AAE3E,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;oBACrB;;AAGF,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;gBAExB,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAC1C,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;oBACzB,IAAI,KAAK,EAAE;AACT,wBAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE;wBACnC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;;yBAC/B;wBACL,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAE9C,iBAAC,CAAC;gBAEF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAE9C,SAAC,CAAC;;AAGJ,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,iBAAiB,EAAE,wDAAwD,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;AAClJ,YAAA,OAAO,MAAM;;QACb,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AAChE,YAAA,OAAO,KAAK;;;IAIhB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;;AAIxC,IAAA,kBAAkB,CAAC,MAAyB,EAAA;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,2BAA2B,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC3E;;QAGF,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE;AACvC,YAAA,MAAM,CAAC,WAAW,GAAG,wDAAwD;;;uGA/DtE,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;wDA0DC,kBAAkB,EAAA,CAAA;sBADjB,YAAY;uBAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC;;;ACpE3C,SAAU,yBAAyB,CACvC,GAAc,EACd,UAAkB,EAClB,WAAmB,KAAK,EAAA;IAExB,OAAO,UAAU,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE,GAAW,KAAI;AACtE,QAAA,MAAM,IAAI,GAAa,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClE,IAAI,KAAK,GAAQ,GAAG;AAEpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;;AAGjB,YAAA,IAAI,CAAC,KAAK,iBAAiB,EAAE;gBAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;qBAC3C;oBACL,OAAO,KAAK,CAAC;;;;AAKjB,YAAA,IAAI,CAAC,KAAK,gBAAgB,EAAE;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;qBAC/C;oBACL,OAAO,KAAK,CAAC;;;;AAKjB,YAAA,IAAI,CAAC,KAAK,gBAAgB,EAAE;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;qBACnD;oBACL,OAAO,KAAK,CAAC;;;;AAIjB,YAAA,IAAI,CAAC,KAAK,iBAAiB,EAAE;gBAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC;;qBACrE;oBACL,OAAO,KAAK,CAAC;;;;AAIjB,YAAA,IAAI,CAAC,KAAK,mBAAmB,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;qBACzC;oBACL,OAAO,KAAK,CAAC;;;;AAIjB,YAAA,IAAI,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;gBAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,oBAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;oBACpE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;;qBACvC;oBACL,OAAO,KAAK,CAAC;;;;AAIjB,YAAA,IAAI,CAAC,KAAK,cAAc,EAAE;gBACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;;qBACvC;oBACL,OAAO,KAAK,CAAC;;;;AAKjB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,KAAK,OAAO,EAAE;oBACjB,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;;AAGjC,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE;oBACtD,OAAO,QAAQ,CAAC;;AAElB,gBAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;;iBACf;;AAEL,gBAAA,KAAK,GAAG,KAAK,CAAC,CAAuB,CAAC;;YAGxC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,QAAQ,CAAC;;AAG3C,QAAA,OAAO,KAAK;AACd,KAAC,CAAC;AACJ;IAGY;AAAZ,CAAA,UAAY,sBAAsB,EAAA;AAChC,IAAA,sBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,sBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,sBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,sBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,sBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,sBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC/B,CAAC,EAPW,sBAAsB,KAAtB,sBAAsB,GAOjC,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,yBAAyB,EAAA;AACnC,IAAA,yBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAFW,yBAAyB,KAAzB,yBAAyB,GAEpC,EAAA,CAAA,CAAA;;MCpGY,eAAe,CAAA;AAC1B,IAAA,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;AACjB,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAU;uGAFvB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,qUCV5B,khBAQA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDEa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,EACR,EAAA,QAAA,EAAA,khBAAA,EAAA;;;MEMU,oBAAoB,CAAA;IAC/B,OAAO,GAAG,KAAK,EAAU;uGADd,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,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,QAAA,EAAA,EAAA,EAAA,QAAA,ECZjC,uOASA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFI,eAAe,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKN,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,uOAAA,EAAA;;;MECU,gBAAgB,CAAA;AAC3B,IAAA,IAAI,GAAG,KAAK,CAAgD,MAAM,CAAC;AACnE,IAAA,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAChB,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACrD,KAAC,CAAC;uGALS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,gUCT7B,s7CAuCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FD9Ba,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,s7CAAA,EAAA;;;MESA,mBAAmB,CAAA;AAC9B,IAAA,UAAU,GAAG,KAAK,CAAS,CAAC,CAAC;AAC7B,IAAA,eAAe,GAAG,KAAK,CAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAC3C,IAAA,QAAQ,GAAW,EAAE,CAAC;IAE/B,UAAU,GAAG,MAAM,EAAmB;IAEtC,WAAW,GAAW,CAAC;AAEvB,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;;AAGrD,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;;AAGjF,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;;AAGtE,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE;;AAGvB,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACxC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,IAAI,CAAC,cAAc,EAAE;;;IAIzB,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;;IAGlB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;;IAGhC,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;;IAIvC,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;;IAIvC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;;uGAxDtE,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,ECdhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,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,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,yhGAiEA,EDzDI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,0vBACX,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP,WAAW;wBACX;AACD,qBAAA,EAAA,QAAA,EAAA,yhGAAA,EAAA;8BAOQ,QAAQ,EAAA,CAAA;sBAAhB;;;MEEU,kBAAkB,CAAA;AAE7B,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,KAAK,GAAG,KAAK,EAAc;AAC3B,IAAA,wBAAwB,GAAG,KAAK,CAAC,KAAK,CAAC;AACvC,IAAA,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC;IAExB,UAAU,GAAG,MAAM,EAAmB;IAEtC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAC,CAAC;;AAGlE,IAAA,YAAY,CAAC,KAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;uGAdlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,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,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB/B,26JA4HA,EDjHI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,mFACpB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP,oBAAoB;wBACpB,gBAAgB;wBAChB,OAAO;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,26JAAA,EAAA;;;MEFU,sBAAsB,CAAA;AAOb,IAAA,EAAA;AAAwB,IAAA,QAAA;IAL5C,UAAU,GAAG,MAAM,EAAkB;IAE7B,UAAU,GAAW,EAAE;IACvB,gBAAgB,GAAwB,EAAE;IAElD,WAAoB,CAAA,EAAc,EAAU,QAAmB,EAAA;QAA3C,IAAE,CAAA,EAAA,GAAF,EAAE;QAAsB,IAAQ,CAAA,QAAA,GAAR,QAAQ;;IAGpD,QAAQ,GAAA;;IAIR,eAAe,GAAA;;AAEb,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;;AAGlF,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,EAAe,KAAI;;YAErC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC;;AAG/C,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;;AAGnE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACjE,SAAC,CAAC;;;AAIJ,IAAA,YAAY,CAAC,EAAe,EAAA;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC;AAChD,QAAA,IAAI,CAAC,GAAG;YAAE;;AAEV,QAAA,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,GAAG;YACjD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;;;;AAKrC,IAAA,YAAY,CAAC,EAAe,EAAA;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC;AAChD,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAE;AAC/B,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;;QAItB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,EAAE;YAC/C,MAAM,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,sBAAsB,CAAC;YAC9D,IAAI,aAAa,EAAE;AACjB,gBAAA,aAAa,CAAC,MAAM,EAAE,CAAC;;;;AAK7B,IAAA,aAAa,CAAC,EAAe,EAAA;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC;AAEhD,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,EAAE;;AAE3B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,KAAK,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK;;aAC3G;;AAEL,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,GAAI;;;AAIxB,QAAA,IAAI,KAAK,GAAmB,EAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAC;AACpF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG3B,QAAA,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;;AAG/B,IAAA,oBAAoB,CAAC,EAAe,EAAA;AAClC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;;AAGlF,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,MAAmB,KAAI;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;YAC/C,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,MAAM,EAAE,CAAC;;AAElB,SAAC,CAAC;;AAGF,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC;;AACrB,aAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC;;;AAI/B,IAAA,UAAU,CAAC,EAAe,EAAE,SAAyB,EAAE,OAAO,GAAG,KAAK,EAAA;QACpE,MAAM,qBAAqB,GAAG,EAAE,CAAC,aAAa,CAAC,sBAAsB,CAAC;QACtE,IAAI,qBAAqB,EAAE;YACzB,qBAAqB,CAAC,MAAM,EAAE;;;QAGhC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC;;AAE/D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC;AAChF,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAE,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC;;QAG3D,IAAI,OAAO,GAAG,8FAA8F;QAC5G,IAAI,SAAS,GAAG,2IAA2I;AAC3J,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,4BAA4B,CAAC;AAC9E,QAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,KAAK,GAAG,OAAO,GAAG,SAAS;QAC1D,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC;;QAG/C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC;;QAGxC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC;;QAGjD,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,iBAAiB,CAAC;;QAGtD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,UAAU,CAAC;;aACpD;YACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,aAAa,CAAC;;QAG9C,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;;aAC1C;YACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;;;uGApJzC,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCNY,wBAAwB,CAAA;AAC3B,IAAA,MAAM;AACN,IAAA,UAAU;AACV,IAAA,mBAAmB;AACnB,IAAA,iBAAiB;AAEzB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAE5B,eAAe,GAAA;;AAEb,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;AACrE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC;;QAGtE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,8HAA8H,CAAC;;QAG9K,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,kCAAkC,CAAC;;QAGrF,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC;;AAGlD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;;AAG3D,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG3E,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;;QAGnD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACnD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC;QAChE,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC;;AAG9D,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AACvC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAA,EAAA,CAAI,CAAC;;IAGzE,UAAU,GAAA;;QAER,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC;QACnE,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC;;uGArDtD,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,8BAA8B,CAAA;AAEzC,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAEO,IAAA,oBAAoB;AAEvD,IAAA,WAAA,GAAA;;IAIA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B;;QAEF,IAAI,CAAC,mBAAmB,EAAE;;IAG5B,mBAAmB,GAAA;AACjB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAExE,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAsB,KAAI;;YAE5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC;;YAG1D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,8HAA8H,CAAC;;YAG9K,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,kCAAkC,CAAC;;YAGrF,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC;;YAGlD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC;;AAG/C,YAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC;AACnD,SAAC,CAAC;;IAGJ,sBAAsB,CAAC,SAAsB,EAAE,SAAsB,EAAA;AACnE,QAAA,IAAI,MAAc;AAClB,QAAA,IAAI,UAAkB;AAEtB,QAAA,MAAM,WAAW,GAAG,CAAC,KAAiB,KAAI;AACxC,YAAA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,MAAM,GAAG,KAAK,CAAC,KAAK;AACpB,YAAA,UAAU,GAAG,SAAS,CAAC,WAAW;;AAGlC,YAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC;AACpD,YAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC;AAClD,SAAC;AAED,QAAA,MAAM,YAAY,GAAG,CAAC,KAAiB,KAAI;AACzC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM;AAClC,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,KAAK;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,CAAC;AAC7D,SAAC;QAED,MAAM,UAAU,GAAG,MAAK;;AAEtB,YAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC;AACvD,YAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC;AACrD,SAAC;;QAGD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC;;uGAxEhD,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,CAAA,0BAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE;AACb,iBAAA;wDAMoC,oBAAoB,EAAA,CAAA;sBAAtD,KAAK;uBAAC,0BAA0B;;;MCItB,mBAAmB,CAAA;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACvB,WAAW,GAAiB,EAAE;AAEtB,IAAA,YAAY;IAGpB,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC;aACtD,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,mBAAmB,EAAE;AAC5B,SAAC,CAAC;;IAGN,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;;IAG1B,mBAAmB,GAAA;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AAEhE,QAAA,MAAM,SAAS,GAAG,iEAAiE,CAAC;QAEpF,IAAI,eAAe,GAAG,EAAE;QACxB,IAAI,CAAC,WAAW,GAAG;AAChB,aAAA,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C,aAAA,GAAG,CAAC,CAAC,OAAO,KAAI;AACf,YAAA,eAAe,IAAI,CAAI,CAAA,EAAA,OAAO,CAAE,CAAA,CAAC;YACjC,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAClC,gBAAA,KAAK,EAAE,eAAe;aACvB;AACH,SAAC,CAAC;;AAGE,IAAA,aAAa,CAAC,OAAe,EAAA;AACnC,QAAA,OAAO;aACJ,KAAK,CAAC,GAAG;aACT,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D,IAAI,CAAC,GAAG,CAAC;;AAGd,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;;uGA9CpB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfhC,u4BAqBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDXI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAT/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,u4BAAA,EAAA;;;MECU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZjC,4MAGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIQ,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EACL,OAAA,EAAA;wBACL;AACH,qBAAA,EAAA,QAAA,EAAA,4MAAA,EAAA;;;MEEQ,oBAAoB,CAAA;IAC/B,OAAO,GAAG,KAAK,EAAuB;IACtC,eAAe,GAAG,MAAM,EAAU;IAElC,gBAAgB,CAAC,MAAkB,EAAE,MAAyB,EAAA;QAC5D,MAAM,CAAC,eAAe,EAAE;QACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;uGANlC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,uQCVjC,s4DAkBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDRa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP,EACR,EAAA,QAAA,EAAA,s4DAAA,EAAA;;;MEOU,2BAA2B,CAAA;AAEtC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,OAAO,GAA8B,MAAM,CAAC,WAAW,CAAC;IAExD,gBAAgB,CAAC,MAAkB,EAAE,MAA+B,EAAA;QAClE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;QACtC,MAAM,CAAC,eAAe,EAAE;;uGAPf,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbxC,4iBAWA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHI,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBARvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAC3B,OAAA,EAAA;wBACP,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,4iBAAA,EAAA;;;MEIU,0BAA0B,CAAA;AAEC,IAAA,OAAO;AAC7C,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEvB,OAAO,GAAG,KAAK,EAA6B;AAC5C,IAAA,kBAAkB,GAAG,KAAK,CAId,cAAc,CAAC;IAC3B,eAAe,GAAG,MAAM,EAAU;AAE1B,IAAA,cAAc,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;AAEzC,IAAA,SAAS;AACT,IAAA,YAAY;IAEpB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;;IAGlC,aAAa,GAAA;AAEX,QAAA,IAAI,gBAAmF;QACvF,IAAI,cAAc,GAA8C,OAAO;QAEvE,IAAI,YAAY,GAAG,KAAK;AAExB,QAAA,MAAM,gBAAgB,GAAQ;;AAE5B,YAAA,WAAW,EAAE;AACX,gBAAA,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;AACxF,aAAA;AACD,YAAA,YAAY,EAAE;AACZ,gBAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;AAC1F,aAAA;AACD,YAAA,UAAU,EAAE;AACV,gBAAA,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;AACpF,aAAA;;AAGD,YAAA,QAAQ,EAAE;gBACR,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACzF,aAAA;AACD,YAAA,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AAC3F,aAAA;AACD,YAAA,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACrF,aAAA;;AAGD,YAAA,UAAU,EAAE;gBACV,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AACpF,aAAA;AACD,YAAA,UAAU,EAAE;gBACV,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AAC1F,aAAA;AACD,YAAA,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;AAC1F,aAAA;;AAGD,YAAA,WAAW,EAAE;AACX,gBAAA,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;AACnF,aAAA;AACD,YAAA,WAAW,EAAE;AACX,gBAAA,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;AACzF,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;AACzF,aAAA;;AAGD,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACjF;SACF;QAED,gBAAgB,GAAG,IAAI,CAAC;AACrB,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,IAAI,CAAC,OAAO;aAChC,sBAAsB,CAAC,KAAK;aAC5B,QAAQ,CAAC,IAAI;AACb,aAAA,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,gBAAgB,CAAC,YAAY,CAAC;AAG9F,QAAA,MAAM,qBAAqB,GAAG;YAC5B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAC1C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;YAC5C,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;YACtD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;SAC7C;AAED,QAAA,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAE5G,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;AAC7D,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,cAAc,EAAE,qBAAqB;AACrC,YAAA,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,CAAC,eAAe,CAAC;YAChC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,eAAe,CAAC;AACnE,YAAA,IAAI,EAAE,IAAI,CAAC,OAAO;AACnB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAiB,KAAI;AACxE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;AACtC,SAAC,CAAC;;uGA7GO,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,+hBCbvC,0wCAKA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDQa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;+BACE,yBAAyB,EAAA,OAAA,EAC1B,EAAE,EAAA,UAAA,EAEC,IAAI,EAAA,QAAA,EAAA,0wCAAA,EAAA;8BAKsB,OAAO,EAAA,CAAA;sBAA5C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC;;;MELzB,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,iFCVrC,quCAKA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDKa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACL,EACR,EAAA,QAAA,EAAA,quCAAA,EAAA;;;MEGQ,oBAAoB,CAAA;AACtB,IAAA,OAAO;AACP,IAAA,IAAI;AACJ,IAAA,WAAW;IACX,SAAS,GAAY,KAAK;IAEnC,eAAe,GAAG,MAAM,EAAoB;uGANjC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,yOCTjC,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDSa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,WAC7B,EAAE,EAAA,QAAA,EAAA,EAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;;;MEDU,oBAAoB,CAAA;AAC/B,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA6B;AACpD,IAAA,oBAAoB,GAAG,KAAK,CAAC,QAAQ,EAAiB;IACtD,cAAc,GAAG,KAAK,EAAiB;AACvC,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,EAAiB;AAChD,IAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,EAAiB;AAClD,IAAA,WAAW,GAAG,KAAK,CAAU,KAAK,CAAC;uGANxB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,QAAA,EAAA,EAAA,EAAA,QAAA,ECZjC,keAQA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAME,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EACnB,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,UAAA,EAEW,IAAI,EAAA,QAAA,EAAA,keAAA,EAAA;;;AEMZ,MAAO,iBAAkB,SAAQ,0BAAmC,CAAA;IACxE,KAAK,GAAG,KAAK,EAAiB;AAC9B,IAAA,EAAE,GAAG,MAAM,CAAS,EAAE,CAAC;IAEvB,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;IAGR,YAAY,CAAC,KAAc,EAAA;AAE9C,IAAA,kBAAkB,CAAC,MAAa,EAAE,eAAA,GAA2B,KAAK,EAAA;AAChE,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,MAA0B;AAChD,YAAA,IAAI,KAAK,GAAI,MAAM,CAAC,MAA2B,CAAC,OAAO;YACvD,IAAG,eAAe,EAAE;gBAClB,KAAK,GAAG,CAAC,KAAK;AACd,gBAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;;AAE1B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;;IAIrB,KAAK,GAAA;AACX,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC5D,QAAA,OAAO,YAAY,YAAY,CAAC,QAAQ,EAAE,EAAE;;AAG9C,IAAA,aAAa,CAAC,MAAqB,EAAA;AAClC,QAAA,IAAG,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;;;uGA9B7B,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,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,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECf9B,8+CAsBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA;wBACP,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,8+CAAA,EAAA;;;AETU,MAAA,aAAa,GAAG;AAC3B,IAAA,QAAQ,EAAE,MAAM,CAAU,QAAA,CAAA;AAC1B,IAAA,SAAS,EAAE,CAAC,EAAC,cAAc,EAAE,YAAY,EAAM,KAC7C,CAAW,QAAA,EAAA,cAAc,CAAsB,oBAAA,CAAA;AACjD,IAAA,SAAS,EAAE,CAAC,EAAC,cAAc,EAAE,YAAY,EAAM,KAC7C,CAAW,QAAA,EAAA,cAAc,CAAqB,mBAAA,CAAA;AAChD,IAAA,GAAG,EAAE,CAAC,EAAC,GAAG,EAAE,MAAM,EAAM,KAAK,CAAW,QAAA,EAAA,GAAG,CAAW,SAAA,CAAA;AACtD,IAAA,GAAG,EAAE,CAAC,EAAC,GAAG,EAAE,MAAM,EAAM,KAAK,CAAW,QAAA,EAAA,GAAG,CAAU,QAAA,CAAA;AACrD,IAAA,WAAW,EAAE,MAAM,0BAA0B;AAC7C,IAAA,KAAK,EAAE,MAAM,4BAA4B;AACzC,IAAA,WAAW,EAAE,CAAC,YAAiB,KAAK,YAAY;;MAGrC,WAAW,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE;AAC3D,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;;MCbY,wBAAwB,CAAA;AACM,IAAA,QAAA;AAAzC,IAAA,WAAA,CAAyC,QAAa,EAAA;QAAb,IAAQ,CAAA,QAAA,GAAR,QAAQ;;IAGjD,SAAS,CACP,gBAAkC,EAClC,kBAA6C,EAAA;QAE7C,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,EAAE;;;AAIX,QAAA,MAAM,QAAQ,GAAG;YACf,GAAG,IAAI,CAAC,QAAQ;AAChB,YAAA,GAAG;SACJ;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,MAAM,OAAO,GAAG;AACd,cAAE,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC;cACvC,eAAe;AACnB,QAAA,OAAO,OAAO;;AAvBL,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBACf,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGADpB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,EAAC;;0BAEvC,MAAM;2BAAC,WAAW;;;MCMpB,kBAAkB,CAAA;AAC7B,IAAA,KAAK,GAAG,KAAK,CAA4B,IAAI,CAAC;AAC9C,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,CAAC;AACvC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AACjC,IAAA,SAAS,GAAG,KAAK,CAA+E,MAAM,CAAC;uGAJ5F,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ/B,muBAoBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDbI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAT9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,muBAAA,EAAA;;;AEyBG,MAAO,kBAAmB,SAAQ,wBAAwB,CAAA;AAE9D,IAAA,UAAU,GAAG,KAAK,CAAqB,SAAS,CAAC;AACjD,IAAA,IAAI,GAAG,KAAK,CAA+E,MAAM,CAAC;AAClG,IAAA,QAAQ,GAAG,KAAK,CAAuB,MAAM,CAAC;IAC9C,OAAO,GAAG,KAAK,EAAiB;IAChC,UAAU,GAAG,KAAK,EAAiB;IACnC,KAAK,GAAG,KAAK,EAAiB;AAC9B,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AACjC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,CAAC;AAC/B,IAAA,aAAa,GAAG,KAAK,CAA4B,EAAE,CAAC;AACpD,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;AACtC,IAAA,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC;AACjC,IAAA,qBAAqB,GAAG,KAAK,CAAU,IAAI,CAAC;IAE5C,WAAW,GAAG,MAAM,EAAU;IAC9B,iBAAiB,GAAG,MAAM,EAAE;AAE5B,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAEzB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAEnD,IAAA,aAAa,GAAoB,IAAI,OAAO,EAAU;AAE9D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;AAI/B,IAAA,YAAY,CAAC,KAAU,EAAA;;IAIhC,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;IAI7D,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAa,KAAI;gBACrE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,aAAC,CAAC;;;IAIN,WAAW,GAAA;AACT,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;;QAC7B,OAAO,CAAC,EAAE;;;AAId,IAAA,aAAa,CAAC,KAAU,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;aAChC;YACL,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;;IAIvC,QAAQ,GAAA;QACN,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,YAAA,GAAG,GAAG,GAAG,GAAG,YAAY;;aACnB;AACL,YAAA,GAAG,GAAG,GAAG,GAAG,MAAM;;AAGpB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ;;AAG5B,QAAA,OAAO,GAAG;;IAGZ,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;;IAG/B,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;IAG1B,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;;uGA5FhB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,ECjC/B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,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,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6wDA2CA,EDrBI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,mFACP,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACnB,wBAAwB,EAAA,IAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,mBAAmB,EACnB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,2HAClB,gBAAgB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,wBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP,OAAO;wBACP,mBAAmB;wBACnB,wBAAwB;wBACxB,mBAAmB;wBACnB,YAAY;wBACZ,kBAAkB;wBAClB;AACD,qBAAA,EAAA,QAAA,EAAA,6wDAAA,EAAA;;;MEpBU,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,iFCT5B,sKAGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDMa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,sKAAA,EAAA;;;MEaA,wBAAwB,CAAA;AAC1B,IAAA,SAAS;AACT,IAAA,OAAO;IAChB,IAAI,GAAG,KAAK,EAAO;IACnB,WAAW,GAAG,KAAK,EAAsB;AACzC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;IAEjC,eAAe,GAAG,MAAM,EAAoB;AAG5C,IAAA,SAAS;AAED,IAAA,YAAY;AACZ,IAAA,kBAAkB;AAE1B,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;YACnH,IAAI,CAAC,aAAa,EAAE;;;IAIhB,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;;AAGF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAEtB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;AAGlE,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC7B,IAAI,CAAC,YAAY,CAAC,QAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;YACzD,IAAI,CAAC,YAAY,CAAC,QAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACrD,IAAI,CAAC,YAAY,CAAC,QAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;YACnE,IAAI,CAAC,YAAY,CAAC,QAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAEhE,YAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;YAEtC,IAAI,OAAO,GAA0B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe;YAC/E,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,CACzC,CAAC,KAAU,KAAI;AACb,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,iBAAC,CACF;;;;IAMP,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;;uGApD7B,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EASJ,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BjD,4CACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDiBa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,WACvB,EAAE,EAAA,QAAA,EAAA,4CAAA,EAAA;8BAKF,SAAS,EAAA,CAAA;sBAAjB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAQD,SAAS,EAAA,CAAA;sBADR,SAAS;uBAAC,WAAW,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAC;;;AE6B1D,MAAO,kBAAsB,SAAQ,0BAA2C,CAAA;AAEzD,IAAA,gBAAgB;AAE3C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAe;AAC1C,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAc;AACpC,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;AACpB,IAAA,4BAA4B,GAAG,KAAK,CAAC,KAAK,CAAC;AAC3C,IAAA,sBAAsB,GAAG,KAAK,CAAC,KAAK,CAAC;AACrC,IAAA,mBAAmB,GAAG,KAAK,CAAC,KAAK,CAAC;IAClC,mBAAmB,GAAG,KAAK,EAAO;AAClC,IAAA,mBAAmB,GAAG,KAAK,CAAC,KAAK,CAAC;IAClC,eAAe,GAAG,KAAK,EAAO;AAC9B,IAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B,IAAA,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC;IAEjC,UAAU,GAAG,MAAM,EAAmB;IACtC,WAAW,GAAG,MAAM,EAAkB;IACtC,iBAAiB,GAAG,MAAM,EAAmB;IAC7C,iBAAiB,GAAG,MAAM,EAAoB;IAC9C,aAAa,GAAG,MAAM,EAAO;IAC7B,YAAY,GAAG,MAAM,EAAO;IAE5B,aAAa,GAA4B,EAAE;AAE3C,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACH,IAAA,MAAM;AAE5B,IAAA,eAAe;AACf,IAAA,cAAc;IACN,UAAU,GAAW,EAAE;IAE/B,eAAe,GAAA;AACb,QAAA,IAAI,eAAe,GAAoB;YACrC,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACvC;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;AAErC,QAAA,IAAI,eAAe,GAAoB;AACrC,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,eAAe,EAAE,eAAe;YAChC,cAAc,EAAE,IAAI,CAAC;SACtB;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;;AAG9C,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;QAEnC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAC1C,YAAA,IAAI,SAAS,CAAC,cAAc,EAAE;AAC5B,gBAAA,IAAI,OAAO,GAA0B,SAAS,CAAC,cAAc;gBAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,UAAe,KAAI;AAChD,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AACrC,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;;AAEhC,SAAC,CAAC;;AAGe,IAAA,YAAY,CAAC,KAAsB,EAAA;;AAGtD,IAAA,uBAAuB,CAAC,2BAA2C,EAAA;AACjE,QAAA,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;YAC/B,gBAAgB,EAAE,IAAI,CAAC;AACpB,iBAAA,QAAQ;iBACR,mBAAmB,CAAC,2BAA2B;AAC/C,iBAAA,aAAa,CAAC;AACb,gBAAA;AACE,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE,EAAE;AACZ;aACF,CAAC;AACJ,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU;AACvD,SAAA,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9C,QAAA,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAE9B,QAAA,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;;AAGjE,IAAA,mBAAmB,CAAC,MAAc,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,eAAe,GAAoB;YACrC,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACvC;AACD,QAAA,IAAI,eAAe,GAAoB;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,eAAe,EAAE,eAAe;YAChC,cAAc,EAAE,IAAI,CAAC;SACtB;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC5C,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;;IAGrC,qBAAqB,CAAC,MAAe,EAAE,MAAiB,EAAA;AACtD,QAAA,MAAM,CAAC,OAAO,GAAG,MAAM;;IAGzB,wBAAwB,GAAA;QACtB,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;AACrC,QAAA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AACvB,YAAA,MAAM,CAAC,OAAO,GAAG,IAAI;AACvB,SAAC,CAAC;;IAGJ,gBAAgB,CAAC,IAAS,EAAE,MAAiB,EAAA;AAE3C,QAAA,IAAI,MAAM,CAAC,eAAe,EAAE;YAC1B,OAAO,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC;;QAGhE,IAAI,KAAK,GAAG,EAAE;AAEd,QAAA,IAAI,MAAM,CAAC,GAAG,EAAE;AACd,YAAA,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;;AAG7E,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,YAAA,OAAO,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK;;AACpD,aAAA,IAAI,MAAM,CAAC,eAAe,EAAE;AACjC,YAAA,OAAO,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI;;aAC9D;AACL,YAAA,OAAO,KAAK;;;AAIhB,IAAA,YAAY,CAAC,KAAsB,EAAA;AACjC,QAAA,IAAI,eAAe,GAAoB;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI,CAAC;SACtB;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC5C,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;;AAGrC,IAAA,aAAa,CAAC,KAAqB,EAAA;AACjC,QAAA,IAAI,eAAe,GAAoB;AACrC,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,eAAe,EAAE;AACf,gBAAA,UAAU,EAAE,CAAC;AACb,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,aAAA;AACD,YAAA,cAAc,EAAE;SACjB;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC5C,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;;AAGrC,IAAA,YAAY,CAAC,MAAiB,EAAA;AAC5B,QAAA,QAAQ,MAAM,CAAC,SAAS;AACtB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,WAAW;AACpB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,aAAa;AACtB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,YAAY;AACrB,YAAA;AACE,gBAAA,OAAO,WAAW;;;AAIxB,IAAA,cAAc,CAAC,MAAiB,EAAA;AAC9B,QAAA,QAAQ,MAAM,CAAC,SAAS;AACtB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,eAAe;AACxB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,gBAAgB;AACzB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,aAAa;AACtB,YAAA;AACE,gBAAA,OAAO,eAAe;;;IAK5B,gBAAgB,CAAC,IAAS,EAAE,MAAiB,EAAA;QAC3C,IAAI,qBAAqB,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,IAAI,EAAE;QAChE,IAAI,0BAA0B,GAA+B,IAAI;AAEjE,QAAA,qBAAqB,CAAC,OAAO,CAAC,mBAAmB,IAAG;YAClD,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,YAAA,IAAI,KAAK,KAAK,mBAAmB,CAAC,IAAI,EAAE;gBACtC,0BAA0B,GAAG,mBAAmB;;AAEpD,SAAC,CAAC;AACF,QAAA,OAAO,0BAA0B;;AAGnC,IAAA,qBAAqB,CAAC,OAAkC,EAAA;AACtD,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AAC1B,YAAA,IAAI,YAAY,GAAsB;gBACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC;aACnB;AACD,YAAA,OAAO,YAAY;AACrB,SAAC,CAAC;;AAGJ,IAAA,gBAAgB,CAAC,MAAc,EAAE,IAAS,EAAE,UAA6B,EAAA;QACvE,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,eAAe,EAAE;;AAE9B,QAAA,IAAI,gBAAgB,GAAqB;AACvC,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,IAAI,EAAE;SACP;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAG/C,IAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,CAAC;AAE9C,IAAA,oBAAoB,CAAC,CAAS,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;;aAC1B;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;;;AAIhC,IAAA,aAAa,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG9B,IAAA,qBAAqB,CAAC,MAAwB,EAAA;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGrC,IAAA,oBAAoB,CAAC,MAAwB,EAAA;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;;uGAjP1B,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EA0BlB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,4BAAA,EAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,8BAAA,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,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,SAAS,EClFtB,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,klgBAgTA,0DD5QI,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,EAChB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,QAAQ,6CACR,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,oBAAoB,EACpB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,8BAA8B,6GAC9B,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,kEACf,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAxB9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP,mBAAmB;wBACnB,oBAAoB;wBACpB,gBAAgB;wBAChB,OAAO;wBACP,QAAQ;wBACR,mBAAmB;wBACnB,oBAAoB;wBACpB,oBAAoB;wBACpB,sBAAsB;wBACtB,8BAA8B;wBAC9B,SAAS;wBACT,iBAAiB;wBACjB,WAAW;wBACX,kBAAkB;wBAClB,eAAe;wBACf;AACD,qBAAA,EAAA,QAAA,EAAA,klgBAAA,EAAA;8BAM0B,gBAAgB,EAAA,CAAA;sBAA1C,eAAe;uBAAC,QAAQ;gBAwBH,MAAM,EAAA,CAAA;sBAA3B,SAAS;uBAAC,SAAS;;;MExET,kBAAkB,CAAA;AAC7B,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;uGADhB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,0ECV/B,mOAMA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,CAAA;;2FDIa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,mOAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA;;;MEAA,aAAa,CAAA;AAExB,IAAA,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;IAExB,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;;IAGpD,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;;uGATzC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,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;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCQY,eAAe,CAAA;AAE1B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;uGAF1B,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb5B,kLAKA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGI,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,kLAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA;;;MECU,qBAAqB,CAAA;IAEhC,gBAAgB,GAAG,KAAK,EAAsB;IAC9C,QAAQ,GAAG,KAAK,EAAsB;AAEtC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAEvB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,qDAAqD;AACzF,KAAC,CAAC;AAEF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;aACjB;AACL,YAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,qDAAqD;;AAE3F,KAAC,CAAC;IAEF,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;;uGApBvB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,mXCVlC,uXAUA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDAa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,uXAAA,EAAA;;;MEaA,oBAAoB,CAAA;AAEiC,IAAA,SAAS;AAClC,IAAA,UAAU;AACD,IAAA,mBAAmB;AAEnE,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAU;AAChC,IAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB,IAAA,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC;IAG7B,aAAa,GAAG,MAAM,EAAQ;AAE9B,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,SAAS,GAAG,MAAM,EAAC,SAAc,EAAC;IAGlC,QAAQ,GAAA;;IAIR,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ;AACvD,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC;;;;IAKvF,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;IAG3B,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;uGAnCb,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAEA,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBjD,inDAwCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDrBa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BACE,kBAAkB,EAAA,OAAA,EACnB,EAAE,EAAA,UAAA,EAEC,IAAI,EAAA,QAAA,EAAA,inDAAA,EAAA;8BAKgD,SAAS,EAAA,CAAA;sBAAxE,SAAS;uBAAC,WAAW,EAAE,EAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAC;gBACvB,UAAU,EAAA,CAAA;sBAAhD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;gBACW,mBAAmB,EAAA,CAAA;sBAAlE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;;;MErBnC,kBAAkB,CAAA;AAE7B,IAAA,OAAO,GAAG,MAAM,CAAkB,EAAE,CAAC;AACrC,IAAA,MAAM,GAAG,MAAM,CAAkB,EAAE,CAAC;IAEpC,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC;;IAGlC,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;;;IAGlD,WAAY,CAAA,MAAuC,EAAE,OAAgD,EAAA;AACnG,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;aACjB;AACL,YAAA,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;YAC3B,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;;;;IAKnC,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;;AAI/D,IAAA,MAAM,CAAC,SAAc,EAAA;AACnB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC;QACxD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAG;AACzB,gBAAA,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC;AAC1B,aAAC,CAAC;;AAEJ,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;;AAG7B,IAAA,UAAU,CAAC,MAAW,EAAA;AACpB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE;AAChC,gBAAA,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC7B;;;;AAIP;;MC3CY,yBAAyB,CAAA;AAEpC,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAE3B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;AAEvB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC;;IAGjE,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAIpE,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC;;uGAjBtD,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+ICXtC,g1BAkBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDPa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,g1BAAA,EAAA;wDAoBX,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;;MEf9B,mBAAmB,CAAA;AAKV,IAAA,IAAA;AAA0B,IAAA,SAAA;IAJ9C,OAAO,GAAoB,IAAI;AAE/B,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAU;IAEjC,WAAoB,CAAA,IAAgB,EAAU,SAAuB,EAAA;QAAjD,IAAI,CAAA,IAAA,GAAJ,IAAI;QAAsB,IAAS,CAAA,SAAA,GAAT,SAAS;;IAEvD,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAC9D,CAAC,UAAU,KAAI;YACb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,UAAU,CAAC;AACnE,SAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC;AAC7C,SAAC,CACF;;uGAfQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,kNCXhC,uCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDUa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,uCAAA,EAAA;;;AEPb,IAAY,SAKX;AALD,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EALW,SAAS,KAAT,SAAS,GAKpB,EAAA,CAAA,CAAA;;MCGY,YAAY,CAAA;AACvB,IAAA,OAAO,eAAe,GAAG,IAAI;AAC7B,IAAA,WAAW;AACH,IAAA,YAAY,GAAG,IAAI,OAAO,EAAc;AAEhD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;;AAGrD;;;;;AAKG;IACH,OAAO,CAAC,OAAe,EAAE,EAAC,KAAK,EAAE,QAAQ,KAA2C,EAAE,EAAA;AACpF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO;YACP,KAAK;YACL,IAAI,EAAE,SAAS,CAAC,OAAO;AACvB,YAAA,QAAQ,EAAE,QAAQ;AACnB,SAAA,CAAC;;AAGJ;;;;;AAKG;IACH,KAAK,CAAC,OAAe,EAAE,EAAC,KAAK,EAAE,QAAQ,KAA2C,EAAE,EAAA;AAClF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO;YACP,KAAK;YACL,IAAI,EAAE,SAAS,CAAC,KAAK;AACrB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;AAGJ;;;;;AAKG;IACH,IAAI,CAAC,OAAe,EAAE,EAAC,KAAK,EAAE,QAAQ,KAA2C,EAAE,EAAA;AACjF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO;YACP,KAAK;YACL,IAAI,EAAE,SAAS,CAAC,IAAI;AACpB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;AAGJ;;;;;AAKG;IACH,OAAO,CAAC,OAAe,EAAE,EAAC,KAAK,EAAE,QAAQ,KAA2C,EAAE,EAAA;AACpF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO;YACP,KAAK;YACL,IAAI,EAAE,SAAS,CAAC,OAAO;AACvB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;uGAlEO,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,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;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCEY,yBAAyB,CAAA;AAE1B,IAAA,UAAU,GAAG,IAAI,YAAY,EAAE;IACzC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;;uGAJb,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,yHCTtC,8bAOA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDEa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,8bAAA,EAAA;8BAMD,UAAU,EAAA,CAAA;sBAAnB;;;MEgBU,cAAc,CAAA;AAEf,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAG3C,IAAA,IAAI;AAGJ,IAAA,KAAK;AAGL,IAAA,OAAO;AAGP,IAAA,QAAQ;AAER,IAAA,SAAS,GAAG,KAAK,CAAmB,OAAO,CAAC;AAE5C,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QACzB,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,QAAQ,IAAI,CAAC,SAAS,EAAE;AACtB,YAAA,KAAK,OAAO;gBACV,OAAO,GAAG,UAAU;gBACpB;AACF,YAAA,KAAK,MAAM;gBACT,OAAO,GAAG,UAAU;gBACpB;;AAEJ,QAAA,OAAO,OAAO;AAChB,KAAC,CAAC;IAEiB,SAAS,GAAG,SAAS;IAExC,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,EAAE;;IAGb,IAAI,GAAA;QACF,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,IAAI,EAAE;SACZ,EAAE,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,eAAe,CAAC;;IAGnD,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;IAG1B,WAAW,GAAA;;uGA/CA,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EC3B3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,osGAiDA,ED5BI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,4FACzB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EACP,OAAA,EAAA;wBACP,yBAAyB;wBACzB;AACD,qBAAA,EAAA,QAAA,EAAA,osGAAA,EAAA;8BAMS,YAAY,EAAA,CAAA;sBAArB;gBAGD,IAAI,EAAA,CAAA;sBADH;gBAID,KAAK,EAAA,CAAA;sBADJ;gBAID,OAAO,EAAA,CAAA;sBADN;gBAID,QAAQ,EAAA,CAAA;sBADP;;;MEzBU,gBAAgB,CAAA;AAMjB,IAAA,YAAA;AACA,IAAA,GAAA;AANV,IAAA,SAAS,GAAG,KAAK,CAAmB,OAAO,CAAC;IAE5C,aAAa,GAAiB,EAAE;IAEhC,WACU,CAAA,YAA0B,EAC1B,GAAsB,EAAA;QADtB,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAG,CAAA,GAAA,GAAH,GAAG;;IAGb,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,EAAE;;IAG1B,iBAAiB,GAAA;QACf,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAChD,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,SAAC,CAAC;;AAGJ,IAAA,OAAO,CAAC,KAAa,EAAA;QACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;uGAxBf,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECf7B,2aAcA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDLI,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAML,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA;wBACP;qBACD,EAGgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2aAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA;;;AEbjD,IAAY,eAOX;AAPD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,OAAiB;AACnB,CAAC,EAPW,eAAe,KAAf,eAAe,GAO1B,EAAA,CAAA,CAAA;AAED,IAAY,YAIX;AAJD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,MAAgB;AAClB,CAAC,EAJW,YAAY,KAAZ,YAAY,GAIvB,EAAA,CAAA,CAAA;;MCAY,gBAAgB,CAAA;AAC3B,IAAA,eAAe,GAAoB,eAAe,CAAC,OAAO;AAC1D,IAAA,YAAY,GAAiB,YAAY,CAAC,OAAO;IACjD,OAAO,GAAG,EAAE;IACZ,IAAI,GAAG,CAAC;IACR,GAAG,GAAG,CAAC;IACP,OAAO,GAAG,KAAK;AAEf,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;;uGAXG,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb7B,6OAOA,EAAA,MAAA,EAAA,CAAA,+rCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAT5B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,6OAAA,EAAA,MAAA,EAAA,CAAA,+rCAAA,CAAA,EAAA;;;MEDU,qBAAqB,CAAA;AACtB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AAEjD,IAAA,yBAAyB;AACzB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;IAE5B,eAAe,GAAA;QACb,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;AAC9D,aAAA,IAAI,CACHC,QAAM,CAAC,CAAC,KAAK,KAAI;YACf,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAqB,CAAC;AACpD,SAAC,CAAC;aAEH,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,SAAC,CAAC;;IAGN,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,yBAAyB,EAAE,WAAW,EAAE;;AAG/C,IAAA,QAAQ,CAAC,cAA2B,EAAA;QAClC,IAAI,QAAQ,GAAG,cAAc,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC;AACnH,QAAA,OAAO,QAAQ;;uGAzBN,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;8BAEW,YAAY,EAAA,CAAA;sBAArB;;;MCDU,6BAA6B,CAAA;AAExC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE/C,IAAA,WAAA,GAAA;;IAG0B,QAAQ,GAAA;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,EAAE;QAClD,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE;YAC3C,IAAI,CAAC,2BAA2B,EAAE;;;IAI9B,2BAA2B,GAAA;AACjC,QAAA,MAAM,mBAAmB,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAClF,aAAa,CACd;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;QAC3D,IAAI,YAAY,EAAE;YAChB,MAAM,CAAC,MAAM,CAAC;AACZ,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;AAEF,YAAA,SAAS,CAAC,MAAM,EAAE,QAAQ;iBACvB,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,IAAI,CAAC,CAAC,CAAC;iBAER,SAAS,CAAC,MAAM,mBAAmB,CAAC,KAAK,EAAE,CAAC;;;AAI3C,IAAA,YAAY,CAAC,SAAsB,EAAA;AACzC,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,EAAE;AACtB,YAAA,OAAO,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,WAAW;;QAC3E,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,IAAI;;;uGA1CJ,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE;AACb,iBAAA;wDAS2B,QAAQ,EAAA,CAAA;sBAAjC,YAAY;uBAAC,UAAU;;;MCRb,sCAAsC,CAAA;AAGjD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAC/C,kBAAkB,GAAG,MAAM,CAAC,sCAAsC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AAErF,IAAA,IAAY,WAAW,GAAA;QACrB,OAAO,IAAI,CAAC;AACV,cAAE,IAAI,CAAC,kBAAkB,CAAC;cACxB,MAAM;;AAGZ,IAAA,WAAA,GAAA;IAE0B,QAAQ,GAAA;QAChC,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE;YAC3C,IAAI,CAAC,2BAA2B,EAAE;;;IAI9B,2BAA2B,GAAA;AACjC,QAAA,MAAM,mBAAmB,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAClF,aAAa,CACd;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACtB,YAAA,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;AAC3C,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;AAEF,QAAA,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ;aACjC,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,IAAI,CAAC,CAAC,CAAC;aAER,SAAS,CAAC,MAAM,mBAAmB,CAAC,KAAK,EAAE,CAAC;;AAGzC,IAAA,YAAY,CAAC,SAAsB,EAAA;QACzC,MAAM,WAAW,GAAG,EAAE;QACtB,MAAM,YAAY,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG;AAE1D,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,GAAG;YACjE,MAAM,oBAAoB,GAAG,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS;AAEtE,YAAA,OAAO,oBAAoB,GAAG,YAAY,GAAG,WAAW;;aACnD;AACL,YAAA,MAAM,oBAAoB,GAAG,YAAY,GAAG,MAAM,CAAC,OAAO;YAE1D,OAAO,oBAAoB,GAAG,WAAW;;;uGApDlC,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtC,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtC,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAJlD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oCAAoC;AAC9C,oBAAA,UAAU,EAAE;AACb,iBAAA;wDAgB2B,QAAQ,EAAA,CAAA;sBAAjC,YAAY;uBAAC,UAAU;;;ACvBV,SAAA,SAAS,CAAC,IAAS,EAAE,IAAS,EAAA;;AAE5C,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,OAAO,IAAI;;;AAIb,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AAC1F,QAAA,OAAO,KAAK;;;IAId,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG/B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AACjC,QAAA,OAAO,KAAK;;;AAId,IAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;QACvB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5D,YAAA,OAAO,KAAK;;;AAIhB,IAAA,OAAO,IAAI;AACb;AAEgB,SAAA,SAAS,CAAC,KAAa,EAAE,KAAa,EAAA;IACpD,OAAO,KAAK,KAAK,KAAK;AACxB;;MC9Ba,mBAAmB,CAAA;IAC9B,wBAAwB,CAAC,OAA+B,EAAE,aAA4B,EAAA;AACpF,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS;QAC3C,MAAM,iBAAiB,GAAkB,EAAE;QAE3C,IAAI,iBAAiB,EAAE;AACrB,YAAA,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC;;AAG3C,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC9C;AAED,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC;YACvD,OAAO,CAAC,sBAAsB,EAAE;;;AAIrC;;MCXY,iBAAiB,CAAA;AAE5B,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAoC;AAC5D,IAAA,aAAa,GAAG,KAAK,CAA4B,EAAE,CAAC;AAEpD,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,KAAK,KAAK;;uGAN5E,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ9B,qOAOA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDAI,wBAAwB,EAAA,IAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,CAAA;;2FAKf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EACZ,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,qOAAA,EAAA;;;AEOG,MAAO,mBAAoB,SAAQ,0BAAgC,CAAA;IACvE,OAAO,GAAG,KAAK,EAAe;IAC9B,OAAO,GAAG,KAAK,EAAe;AAC9B,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,CAAC;AACrC,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,CAAC;AACvC,IAAA,UAAU,GAAG,KAAK,CAAU,KAAK,CAAC;AAClC,IAAA,YAAY,GAAG,KAAK,CAAY,EAAE,CAAC;AACnC,IAAA,aAAa,GAAG,KAAK,CAAS,EAAE,CAAC;IAEjC,YAAY,GAAG,MAAM,EAAQ;;AAG7B,IAAA,IAAI,GAA4C;AAC9C,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAC;AAClC,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAC;AAClC,QAAA,EAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC;AACnC,QAAA,EAAC,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAC;AACrC,QAAA,EAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAC;AACpC,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAC;AAClC,QAAA,EAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI;KACpC;AACD,IAAA,MAAM,GAAG;QACP,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL;KACD;AAED,IAAA,MAAM,GAAG,MAAM,CAA4B,MAAM,CAAC;AAElD,IAAA,WAAW;AACX,IAAA,UAAU;AACV,IAAA,YAAY;IAEZ,KAAK,GAA4C,EAAE;IACnD,WAAW,GAA4C,EAAE;IACzD,SAAS,GAAa,EAAE;IAExB,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,YAAY,EAAE;;AAGF,IAAA,YAAY,CAAC,KAAW,EAAA;QACzC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,EAAE,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,WAAW,EAAE;;aACjC;YACL,IAAI,CAAC,QAAQ,EAAE;;QAGjB,IAAI,CAAC,YAAY,EAAE;;IAGrB,QAAQ,GAAA;QACN,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE;;IAGvC,UAAU,GAAA;AACR,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,UAAU,EAAE;;IAG9D,aAAa,GAAA;AACX,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,EAAE;QACrD,IAAI,SAAS,IAAI,CAAC;YAAE,SAAS,GAAG,CAAC;QAEjC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAE1C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7C,YAAA,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC;YAC1B,IAAI,SAAS,GAAG,IAAI;AAEpB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,GAAG,SAAS;gBAAE,SAAS,GAAG,KAAK;AAC/D,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,GAAG,SAAS;gBAAE,SAAS,GAAG,KAAK;AAEjE,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;gBAC/B,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,EAAG,CAAC,WAAW,EAAE;;AAGnD,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC/B,gBAAA,SAAS,GAAG,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAG,CAAC,WAAW,EAAE;;AAGhE,YAAA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAC;AACjC,SAAC,CAAC;;IAGJ,YAAY,GAAA;QACV,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AAEhF,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE5G,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,WAAW,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5D,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC;AACjB,YAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;YACpE,IAAI,SAAS,GAAG,IAAI;YAEpB,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,WAAW,GAAG,IAAI,IAAI,EAAE,EAAE;gBACtD,SAAS,GAAG,KAAK;;YAEnB,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,WAAW,GAAG,IAAI,IAAI,EAAE,EAAE;gBACpD,SAAS,GAAG,KAAK;;AAGnB,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC/B,gBAAA,SAAS,GAAG,WAAW,IAAI,IAAI,CAAC,OAAO,EAAG;;AAE5C,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;gBAC/B,SAAS,GAAG,SAAS,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,EAAG;;AAGzD,YAAA,IAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzC,SAAS,GAAG,IAAI;;YAGlB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;AAC/C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC9C,SAAS,GAAG,KAAK;;YAGnB,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE;gBAC1E,SAAS,GAAG,KAAK;;AAGnB,YAAA,OAAO,EAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAC;AAChC,SAAC,CAAC;;IAGJ,UAAU,CAAC,KAAW,EAAE,KAAW,EAAA;QACjC,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;AAChD,YAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;YACrC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE;;AAGvC,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE1E,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,cAAc,GAAG,eAAe;AAAE,YAAA,OAAO,KAAK;AAC1E,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,cAAc,GAAG,eAAe;AAAE,YAAA,OAAO,KAAK;AAE5E,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,OAAO,EAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5F,IAAI,cAAc,GAAG,aAAa;AAAE,gBAAA,OAAO,KAAK;;AAGlD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,OAAO,EAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5F,IAAI,cAAc,GAAG,aAAa;AAAE,gBAAA,OAAO,KAAK;;AAGlD,QAAA,OAAO,IAAI;;AAGb,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;;AAG1B,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE;;AAGrB,IAAA,OAAO,CAAC,GAAW,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAC1D,OAAO,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,YAAY,EAAE;;AAGlD,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;IAG3C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,YAAY,EAAE;;AAGrB,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAC1D,OAAO,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,YAAY,EAAE;;IAG/D,oBAAoB,GAAA;AAClB,QAAA,QAAQ,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;AACxB,oBAAA,IAAI,CAAC,UAAU,IAAI,EAAE;oBACrB,IAAI,CAAC,aAAa,EAAE;;gBAEtB;AAEF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;oBACvB,IAAI,CAAC,UAAU,EAAE;;gBAEnB;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;AAC1B,oBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;wBACvB,IAAI,CAAC,UAAU,EAAE;AACjB,wBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;;qBAElB;oBACL,IAAI,CAAC,WAAW,EAAE;;gBAEpB,IAAI,CAAC,YAAY,EAAE;gBACnB;AAEF,YAAA;gBACE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;;;IAIlD,gBAAgB,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,IAAI,EAAE;gBACrB,IAAI,CAAC,aAAa,EAAE;gBACpB;AAEF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,UAAU,EAAE;gBACjB;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE;oBAC3B,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC;;qBACf;oBACL,IAAI,CAAC,WAAW,EAAE;;gBAEpB,IAAI,CAAC,YAAY,EAAE;gBACnB;AAEF,YAAA;gBACE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;;;IAIlD,sBAAsB,GAAA;AACpB,QAAA,QAAQ,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBACvB;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBACvB;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBACvB;;;IAKN,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;;IAG5B,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;;uGAvRrC,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,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,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,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,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,YAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfhC,qpJAsGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7FI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAME,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAT/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAClB,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,qpJAAA,EAAA;;;MECL,0BAA0B,CAAA;AAErC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,IAAI,GAQA,MAAM,CAAC,WAAW,CAAC;AAEvB,IAAA,cAAc,CAAC,MAAY,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;;uGAdnB,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZvC,mZAQA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDDI,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAC1B,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,mZAAA,EAAA;;;SENa,qBAAqB,GAAA;IACnC,OAAO,CAAC,OAAwB,KAA6B;QAC3D,IAAI,CAAC,OAAO,CAAC,KAAK;AAChB,YAAA,OAAO,IAAI;QAEb,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,KAAK,GAAG,IAAI,IAAI,EAAE;QACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,QAAA,OAAO,YAAY,GAAG,KAAK,GAAG,IAAI,GAAG,EAAC,WAAW,EAAE,2BAA2B,EAAC;AACjF,KAAC;AACH;;SCXgB,uBAAuB,GAAA;IACrC,OAAO,CAAC,OAAwB,KAA6B;QAC3D,IAAI,CAAC,OAAO,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QAE/B,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,KAAK,GAAG,IAAI,IAAI,EAAE;QACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,QAAA,OAAO,YAAY,GAAG,KAAK,GAAG,IAAI,GAAG,EAAC,WAAW,EAAE,6BAA6B,EAAC;AACnF,KAAC;AACH;;ICKY;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACV,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA;AAiBK,MAAO,kBAAmB,SAAQ,0BAAuC,CAAA;AACvC,IAAA,OAAO;IAE7C,KAAK,GAAG,KAAK,EAAiB;IAC9B,OAAO,GAAG,KAAK,EAAiB;AAChC,IAAA,kBAAkB,GAAG,KAAK,CAAU,IAAI,CAAC;AACzC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AACjC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;IAEtC,OAAO,GAAG,KAAK,EAAe;IAC9B,OAAO,GAAG,KAAK,EAAe;AAC9B,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,CAAC;AACrC,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,CAAC;AACvC,IAAA,YAAY,GAAG,KAAK,CAAY,EAAE,CAAC;AACnC,IAAA,aAAa,GAAG,KAAK,CAAS,EAAE,CAAC;AACjC,IAAA,eAAe,GAAG,KAAK,CAAkB,eAAe,CAAC,QAAQ,CAAC;AAElE,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAEvC,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAEzB,IAAA,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC;AACpC,IAAA,YAAY;IAEpB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;;AAGxB,IAAA,YAAY,CAAC,KAAU,EAAA;QAC/B,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB;;AAGF,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,YAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;iBACf;AACL,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;YAErB;;AAGF,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAE5B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB;;aACK;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;;IAIvB,iBAAiB,GAAA;AACf,QAAA,IAAI,SAAS,GAAG,IAAI,mBAAmB,EAAE;QACzC,MAAM,eAAe,GAAkB,EAAE;AAEzC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,eAAe,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;;AAG/C,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,YAAA,eAAe,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;;QAGjD,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC;;AAGvE,IAAA,QAAQ,CAAC,KAAU,EAAA;QACjB,UAAU,CAAC,MAAK;YACd,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;iBACpB;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;;SAE3B,EAAE,GAAG,CAAC;;AAGT,IAAA,WAAW,CAAC,IAAS,EAAA;AACnB,QAAA,OAAO,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;;AAGvD,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,QAAQ,IAAI,CAAC,eAAe,EAAE;YAC5B,KAAK,eAAe,CAAC,QAAQ;AAC3B,gBAAA,OAAO,YAAY;YACrB,KAAK,eAAe,CAAC,QAAQ;AAC3B,gBAAA,OAAO,YAAY;;;IAIzB,QAAQ,GAAA;QACN,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,YAAA,GAAG,GAAG,GAAG,GAAG,YAAY;;aACnB;AACL,YAAA,GAAG,GAAG,GAAG,GAAG,MAAM;;AAGpB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ;;AAG5B,QAAA,OAAO,GAAG;;IAGZ,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;IAG1B,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE;;AAGlB,IAAA,cAAc,CAAC,MAAa,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAA0B;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;;QAGtC,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QAE7C,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;;AACzB,aAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;;;IAI5B,uBAAuB,GAAA;AACrB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,0BAA0B,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC1G,YAAA,IAAI,EAAE;gBACJ,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,gBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC;AACF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAU,KAAI;YAC5D,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACzC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,SAAC,CAAC;;AAGI,IAAA,SAAS,CAAC,OAAsB,EAAA;AACtC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAEnC,QAAA,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/C,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,eAAe,CAAC,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QAE1H,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;AAAE,YAAA,OAAO,IAAI;AAExF,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACxG,OAAO,IAAI,CAAC;;AAGd,QAAA,OAAO,UAAU;;AAGX,IAAA,UAAU,CAAC,IAAU,EAAA;AAC3B,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvD,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,eAAe,CAAC,QAAQ,GAAG,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,GAAG,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;;uGA7KjG,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,ECrC/B,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2nEAgDA,EDtBI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,wBAAwB,6DACxB,gBAAgB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,wBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,wGACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,CAAA,EAAA,CAAA;;2FAKF,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP,wBAAwB;wBACxB,gBAAgB;wBAChB,mBAAmB;wBACnB,OAAO;wBACP,kBAAkB;wBAClB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,2nEAAA,EAAA;8BAKqC,OAAO,EAAA,CAAA;sBAA5C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC;;;AExBhC,MAAO,wBAAyB,SAAQ,0BAAiD,CAAA;IAE7F,OAAO,GAAG,KAAK,EAAe;IAC9B,OAAO,GAAG,KAAK,EAAe;AAC9B,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,CAAC;AACrC,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,CAAC;AACvC,IAAA,UAAU,GAAG,KAAK,CAAU,KAAK,CAAC;IAElC,iBAAiB,GAAG,MAAM,EAAkB;AAE5C,IAAA,IAAI,GAA4C;AAC9C,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAC;AAClC,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAC;AAClC,QAAA,EAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC;AACnC,QAAA,EAAC,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAC;AACrC,QAAA,EAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAC;AACpC,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAC;AAClC,QAAA,EAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI;KACpC;AAED,IAAA,MAAM,GAAG;QACP,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL;KACD;AAED,IAAA,MAAM,GAAG,MAAM,CAA4B,MAAM,CAAC;AAElD,IAAA,WAAW;AACX,IAAA,UAAU;AACV,IAAA,SAAS;AACT,IAAA,OAAO;IAEP,cAAc,GAAG,IAAI;IACrB,WAAW,GAAgB,IAAI;IAE/B,KAAK,GAA4C,EAAE;IACnD,WAAW,GAA4C,EAAE;IACzD,SAAS,GAAa,EAAE;IAExB,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,YAAY,EAAE;;AAGF,IAAA,YAAY,CAAC,KAAqB,EAAA;QACnD,IAAI,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,OAAO,EAAE;YACtC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;;aACzC;YACL,IAAI,CAAC,QAAQ,EAAE;;QAGjB,IAAI,CAAC,YAAY,EAAE;;IAGrB,QAAQ,GAAA;QACN,IAAI,KAAK,GAAS,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE;AAC5D,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE;;IAGvC,UAAU,GAAA;AACR,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,UAAU,EAAE;;IAG9D,aAAa,GAAA;AACX,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,EAAE;QACrD,IAAI,SAAS,IAAI,CAAC;YAAE,SAAS,GAAG,CAAC;QAEjC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAE1C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAC/C,YAAA,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC;YAC1B,IAAI,SAAS,GAAG,IAAI;AAEpB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,GAAG,SAAS;gBAAE,SAAS,GAAG,KAAK;AAC/D,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,GAAG,SAAS;gBAAE,SAAS,GAAG,KAAK;AAEjE,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;gBAC/B,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,EAAG,CAAC,WAAW,EAAE;;AAGnD,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC/B,gBAAA,SAAS,GAAG,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAG,CAAC,WAAW,EAAE;;AAGhE,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;AACnC,SAAC,CAAC;;IAGJ,YAAY,GAAA;QACV,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AAChF,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE5G,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,WAAW,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5D,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC;AACjB,YAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;YACpE,IAAI,SAAS,GAAG,IAAI;YAEpB,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,WAAW,GAAG,IAAI,IAAI,EAAE,EAAE;gBACtD,SAAS,GAAG,KAAK;;YAGnB,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,WAAW,GAAG,IAAI,IAAI,EAAE,EAAE;gBACpD,SAAS,GAAG,KAAK;;AAGnB,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC/B,gBAAA,SAAS,GAAG,WAAW,IAAI,IAAI,CAAC,OAAO,EAAG;;AAG5C,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;gBAC/B,SAAS,GAAG,SAAS,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,EAAG;;AAGzD,YAAA,IAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzC,SAAS,GAAG,IAAI;;AAGlB,YAAA,OAAO,EAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAC;AAChC,SAAC,CAAC;;AAIJ,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE1E,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,cAAc,GAAG,eAAe;AAAE,YAAA,OAAO,KAAK;AAC1E,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,cAAc,GAAG,eAAe;AAAE,YAAA,OAAO,KAAK;AAE5E,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,OAAO,EAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5F,IAAI,cAAc,GAAG,aAAa;AAAE,gBAAA,OAAO,KAAK;;AAGlD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,OAAO,EAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5F,IAAI,cAAc,GAAG,aAAa;AAAE,gBAAA,OAAO,KAAK;;AAGlD,QAAA,OAAO,IAAI;;AAGb,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;;AAG1B,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE;;AAGrB,IAAA,OAAO,CAAC,GAAW,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAC1D,OAAO,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,YAAY,EAAE;;AAGlD,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAErE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;AACpD,YAAA,IAAI,CAAC,SAAS,GAAG,YAAY;AAC7B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;aACtB;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,YAAY;AAE3B,YAAA,IAAI,KAAK,GAAmB,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC;AAC9E,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;QAI5B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAC;;;AAI1E,IAAA,YAAY,CAAC,GAAW,EAAA;QACtB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;;aAC9D;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;;AAK3B,IAAA,sBAAsB,CAAC,GAAW,EAAA;AAEhC,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAC3D,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YAClC,OAAO,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO;;AAEvD,QAAA,OAAO,KAAK;;AAGd,IAAA,oBAAoB,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;AAE3D,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACvD,MAAM,mBAAmB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACtD,YAAA,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC3D,YAAA,QACE,IAAI,GAAG,IAAI,CAAC,SAAS;AACrB,gBAAA,IAAI,GAAG,IAAI,CAAC,WAAW;;AAG3B,QAAA,OAAO,KAAK;;AAGd,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAC3D,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE;;AAGvD,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;AAC3D,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;;AAG3E,IAAA,oBAAoB,CAAC,GAAW,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;AAC7D,QAAA,QAAQ,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;;AAGjF,IAAA,kBAAkB,CAAC,GAAW,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;AAC7D,QAAA,QAAQ,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;;IAG7E,oBAAoB,GAAA;AAClB,QAAA,QAAQ,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;AACxB,oBAAA,IAAI,CAAC,UAAU,IAAI,EAAE;oBACrB,IAAI,CAAC,aAAa,EAAE;;gBAEtB;AAEF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;oBACvB,IAAI,CAAC,UAAU,EAAE;;gBAEnB;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;AAC1B,oBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;wBACvB,IAAI,CAAC,UAAU,EAAE;AACjB,wBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;;qBAElB;oBACL,IAAI,CAAC,WAAW,EAAE;;gBAEpB,IAAI,CAAC,YAAY,EAAE;gBACnB;AAEF,YAAA;gBACE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;;;IAIlD,gBAAgB,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,IAAI,EAAE;gBACrB,IAAI,CAAC,aAAa,EAAE;gBACpB;AAEF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,UAAU,EAAE;gBACjB;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE;oBAC3B,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC;;qBACf;oBACL,IAAI,CAAC,WAAW,EAAE;;gBAEpB,IAAI,CAAC,YAAY,EAAE;gBACnB;AAEF,YAAA;gBACE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;;;IAIlD,sBAAsB,GAAA;AACpB,QAAA,QAAQ,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBACvB;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBACvB;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBACvB;;;IAKN,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;;IAG5B,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;;IAGhD,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;;uGA/Uf,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,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,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,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,iBAAA,EAAA,mBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdrC,6rLAmHA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3GI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAME,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EACxB,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,6rLAAA,EAAA;;;AEyBZ,MAAO,iBAAqB,SAAQ,0BAA+B,CAAA;AAEvE,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAEzB,KAAK,GAAG,KAAK,EAAiB;AAC9B,IAAA,KAAK,GAAG,KAAK,CAAM,EAAE,CAAC;AACtB,IAAA,WAAW,GAAG,KAAK,CAAS,QAAQ,CAAC;IACrC,cAAc,GAAG,KAAK,EAAiB;AACvC,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,CAAC;IACrC,OAAO,GAAG,KAAK,EAAiB;IAChC,eAAe,GAAG,KAAK,EAAiB;IACxC,KAAK,GAAG,KAAK,EAAiB;IAC9B,cAAc,GAAG,KAAK,EAAiB;;IAEvC,aAAa,GAAG,KAAK,EAAU;IAC/B,KAAK,GAAG,KAAK,EAAc;AAC3B,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AACjC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;AACtC,IAAA,YAAY,GAAG,KAAK,CAAU,KAAK,CAAC;IACpC,aAAa,GAAG,KAAK,EAAiB;AACtC,IAAA,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC;AAC9B,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEhC,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AACtB,IAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAA,YAAY,GAAG,MAAM,CAAW,IAAI,CAAC;AACrC,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AACtB,IAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3B,IAAA,YAAY,GAAG,MAAM,CAAM,EAAE,CAAC;AAC9B,IAAA,aAAa,GAAG,MAAM,CAA4B,EAAE,CAAC;IAErD,YAAY,GAAG,MAAM,EAAY;IACjC,gBAAgB,GAAG,MAAM,EAAQ;AAEY,IAAA,cAAc;AACpB,IAAA,QAAQ;AACM,IAAA,qBAAqB;AAC9B,IAAA,YAAY;AAChD,IAAA,WAAW,GAAG,SAAS,CAA+B,aAAa,CAAC;IAE5E,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAEtD,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW;AAC5B,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE;AACxB,gBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,EAAG,EAAE,KAAK,CAAC;gBAChF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;;iBACtC;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;;;;AAKxB,IAAA,YAAY,CAAC,KAAU,EAAA;AAC/B,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE;AACxB,gBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,EAAG,EAAE,KAAK,CAAC;gBAChF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;;iBACtC;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;;;aAEzB;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAI/B,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;AAI7D,IAAA,gBAAgB,CAAC,IAAc,EAAA;QAE7B,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,OAAO,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAGnF,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;YAClE,OAAO,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAG,CAAC;;AAGnE,QAAA,OAAO,IAAI;;IAIb,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,oCAAoC;;aACtC;AACL,YAAA,OAAO,oJAAoJ;;;AAI/J,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,MAAM,aAAa,GAAI,KAAK,CAAC,MAA2B,EAAE,KAAK;AAE/D,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;;aACjC;YACL,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;AAC5D,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,iBAAiB,CAAC;AAC5E,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;;;AAIpC,IAAA,kBAAkB,CAAC,aAAsB,EAAA;QAEvC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACjD;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAChD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACjD,YAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACrC,gBAAA,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;;AAE1E,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,sBAAsB,EAAE;;AAG/B,IAAA,cAAc,CAAC,aAAsB,EAAA;QACnC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACjD,YAAA,OAAO,IAAI;;QAEb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACjD,YAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACrC,gBAAA,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;;AAE1E,YAAA,OAAO,KAAK;SACb,CAAC,IAAI,IAAI;;AAGZ,IAAA,QAAQ,CAAC,IAAO,EAAA;AACd,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;AAC9C,YAAA,OAAO,IAAI;;QAEb,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;IAGjF,eAAe,GAAA;QACb,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE;QACrC,IAAI,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACpF,OAAO,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI;;IAGpD,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YACxB,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;;;IAI7C,sBAAsB,GAAA;QACpB,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9E,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;;IAGlC,aAAa,GAAA;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW;AACjE,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChD;;AAGF,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC;;IAGvE,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE;;AAGtC,IAAA,aAAa,CAAC,IAAO,EAAA;QACnB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YAC5B,IAAI,CAAC,aAAa,EAAE;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACnC,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;iBACvB;AACL,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;;IAKlC,oBAAoB,GAAA;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM;AACzD,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG;AAEjC,QAAA,IAAI,SAAS;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,SAAS,GAAG,UAAU,GAAG,EAAE;;aACtB;AACL,YAAA,SAAS,GAAG,UAAU,GAAG,EAAE;;AAG7B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,SAAS,CAAA,EAAA,CAAI,CAAC;;;IAIpG,sBAAsB,GAAA;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM;AACzD,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,IAAI,UAAU,GAAG,GAAG,CAAC;;IAG9D,uBAAuB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE;AAC1F,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzF,eAAe,CAAC,cAAc,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;;;IAKtD,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,sBAAsB,EAAE;;;AAIjC,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB;;AAEF,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;;gBAEhD,IAAI,CAAC,uBAAuB,EAAE;gBAC9B,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE;AAC/B,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;;gBAEhD,IAAI,CAAC,uBAAuB,EAAE;gBAC9B,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAChE,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,KAAK,CAAC,cAAc,EAAE;gBACtB;;AAIJ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACxB,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG;AACnB,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,IAAG;oBACvD,IAAI,YAAY,GAAG,EAAE;AACrB,oBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE;AAChE,wBAAA,YAAY,GAAG,yBAAyB,CAAC,IAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,cAAc,EAAE,CAAE,CAAA,CAAC;;yBAC7E;AACL,wBAAA,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;oBAE5C,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;AACnD,iBAAC,CACF;AAED,gBAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACxB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC;oBACxC,IAAI,CAAC,uBAAuB,EAAE;;;;;IAMtC,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,IAAI,CAAC,WAAW,EAAG,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;YAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,WAAW,EAAG,CAAC,aAAa,CAAC,KAAK,EAAE;;;IAI7C,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;AAG9B,IAAA,oBAAoB,CAAC,OAAc,EAAE,IAAY,EAAE,KAAU,EAAA;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACjC,QAAA,IAAG,OAAO,IAAI,IAAI,EAAE;AAClB,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;YAC1B,IAAI,OAAO,GAAG,GAAG;AACjB,YAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,gBAAA,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,EAAE;AAC9B,oBAAA,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;;qBAClB;AACL,oBAAA,OAAO,KAAK;;;YAGhB,OAAO,OAAO,KAAK,KAAK;AAC1B,SAAC,CAAC;;uGA3UO,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ECnC9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,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,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,YAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,okMA0GA,EDjFI,MAAA,EAAA,CAAA,8LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,IAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,4+BACnB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA;wBACP,mBAAmB;wBACnB,kBAAkB;wBAClB,OAAO;wBACP,wBAAwB;wBACxB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,okMAAA,EAAA,MAAA,EAAA,CAAA,8LAAA,CAAA,EAAA;8BAwC4C,cAAc,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC;gBACJ,QAAQ,EAAA,CAAA;sBAA9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC;gBACgB,qBAAqB,EAAA,CAAA;sBAAzE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;gBACP,YAAY,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;gBA2M1C,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe;;;AE5PzB,MAAO,qBAAsB,SAAQ,wBAAwB,CAAA;AACjE,IAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;IACxB,KAAK,GAAG,KAAK,EAAiB;AAC9B,IAAA,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;AACzB,IAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,IAAA,aAAa,GAAG,KAAK,CAA4B,EAAE,CAAC;IAEpD,YAAY,GAAG,MAAM,EAAQ;IAC7B,WAAW,GAAG,MAAM,EAAQ;AAE5B,IAAA,EAAE,GAAG,MAAM,CAAS,EAAE,CAAC;AAEvB,IAAA,YAAY,GAAG,MAAM,CAAc,IAAI,CAAC;AAExC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;AAI/B,IAAA,YAAY,CAAC,KAAU,EAAA;;IAIhC,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;IAI7D,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;AAG3B,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;;;IAIpC,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;;IAGzB,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,EAAE;YAClC;;QAGF,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,YAAY,IAAI,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAa;YAC3C,IAAI,IAAI,EAAE;gBACR,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACrC,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;;;aAEvB;YACL,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;;;IAIzC,KAAK,GAAA;AACX,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC5D,QAAA,OAAO,cAAc,YAAY,CAAC,QAAQ,EAAE,EAAE;;AAGhD,IAAA,kBAAkB,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC9B,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ;YACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AAE1C,YAAA,OAAO,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE;;AACnD,QAAA,MAAM;YACN,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AACrC,YAAA,OAAO,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE;;;uGApF5C,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ECxBlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,gjGAkDA,EDhCI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,4EAChB,wBAAwB,EAAA,IAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,CAAA;;2FAKf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EACP,OAAA,EAAA;wBACP,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,gjGAAA,EAAA;;;MEpBU,eAAe,CAAA;AAC1B,IAAA,OAAO,eAAe,GAAG,IAAI;;;ACoCzB,MAAO,4BAAgC,SAAQ,wBAAwB,CAAA;AAEzE,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAEzB,KAAK,GAAG,KAAK,EAAiB;AAC9B,IAAA,KAAK,GAAG,KAAK,CAAM,EAAE,CAAC;AACtB,IAAA,WAAW,GAAG,KAAK,CAAS,QAAQ,CAAC;IACrC,OAAO,GAAG,KAAK,EAAiB;IAChC,eAAe,GAAG,KAAK,EAAiB;AACxC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC;AACzB,IAAA,UAAU,GAAG,KAAK,CAAS,eAAe,CAAC,eAAe,CAAC;IAC3D,cAAc,GAAG,KAAK,EAAiB;IACvC,aAAa,GAAG,KAAK,EAAU;IAC/B,KAAK,GAAG,KAAK,EAAc;AAC3B,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AACjC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;AACtC,IAAA,YAAY,GAAG,KAAK,CAAU,KAAK,CAAC;IACpC,aAAa,GAAG,KAAK,EAAiB;AACtC,IAAA,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC;AAC9B,IAAA,UAAU,GAAG,KAAK,CAAgC,6BAA6B,CAAC,QAAQ,CAAC;IAEzF,YAAY,GAAG,MAAM,EAAO;IAC5B,gBAAgB,GAAG,MAAM,EAAQ;AAEjC,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AACtB,IAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AACtB,IAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3B,IAAA,aAAa,GAAG,MAAM,CAAM,EAAE,CAAC;AAC/B,IAAA,YAAY,GAAG,MAAM,CAAM,EAAE,CAAC;AAC9B,IAAA,aAAa,GAAG,MAAM,CAA4B,EAAE,CAAC;AAER,IAAA,cAAc;AACN,IAAA,qBAAqB;AAC9B,IAAA,YAAY;AAChD,IAAA,WAAW,GAAG,SAAS,CAA+B,aAAa,CAAC;IAE5E,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAEtD,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;IAE3D,6BAA6B,GAAG,6BAA6B;AAE7D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;AAInC,IAAA,YAAY,CAAC,KAAU,EAAA;;IAIhC,kBAAkB,GAAA;AACd,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;YACzD,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAEjC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;;;;AAKzC,IAAA,QAAQ,CAAC,IAAO,EAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACf,YAAA,OAAO,IAAI;;QAEf,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;IAGnF,YAAY,GAAA;QACR,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;AACtC,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxD,QAAA,OAAO,MAAM;;AAGjB,IAAA,mBAAmB,CAAC,YAAe,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;AAC5C,YAAA,OAAO,YAAY;;AAGvB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,EAAG;QAC7B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,IAAG;YAC5B,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAW,CAAC;YAC/F,OAAO,aAAa,KAAK,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACxD,SAAC,CAAC;;AAGN,IAAA,wBAAwB,CAAC,YAAe,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;AACtD,YAAA,OAAO,YAAY;;AAEvB,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,EAAG;QACvC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,IAAG;YAC5B,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAW,CAAC;YACpG,OAAO,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AAC7D,SAAC,CAAC;;AAGN,IAAA,aAAa,CAAC,IAAO,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;;QAEf,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AAC9F,QAAA,OAAO,UAAU;;AAGrB,IAAA,wBAAwB,CAAC,IAAO,EAAA;QAC5B,MAAM,YAAY,GAAI,IAAI,CAAC,WAAW,CAAC,KAAa,IAAI,EAAE;QAC1D,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;QAC5C,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAGpC,QAAA,IAAI,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACjD,IAAI,QAAQ,EAAE;AACV,YAAA,OAAO,IAAI;;QAGf,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,IAAI,EAAE,EAAE;AAChD,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;QAErD,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAG;YAChC,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAQ,CAAC;YACjG,OAAO,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACrD,SAAC,CAAC;AACF,QAAA,OAAO,OAAO;;AAGlB,IAAA,gCAAgC,CAAC,IAAO,EAAA;QACpC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;AACjD,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,EAAG;QACvC,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,IAAI,EAAE,EAAE;AAChD,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;QAErD,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAG;YAChC,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAQ,CAAC;YACjG,OAAO,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACrD,SAAC,CAAC;AACF,QAAA,OAAO,OAAO;;AAGlB,IAAA,aAAa,CAAC,IAAO,EAAA;QACjB,IAAI,CAAC,aAAa,EAAE;QAEpB,MAAM,YAAY,GAAI,IAAI,CAAC,WAAW,CAAC,KAAa,IAAI,EAAE;QAC1D,MAAM,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;QACnE,MAAM,sBAAsB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC;AAG1E,QAAA,IAAI,uBAAuB,IAAI,sBAAsB,EAAE;YACnD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,YAAA,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAG;AAC7B,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrB,gBAAA,OAAO,IAAI;AACf,aAAC,CAAC;AACF,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;;aACxB;AACH,YAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAG;AAC7B,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACf,gBAAA,OAAO,IAAI;AACf,aAAC,CAAC;AACF,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;;;AAInC,IAAA,gBAAgB,CAAC,IAAc,EAAA;QAE3B,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,OAAO,IAAI;;AAGf,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AAChD,YAAA,OAAO,IAAI,CAAC,OAAO,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAGrF,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;YAChE,OAAO,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAG,CAAC;;AAGrE,QAAA,OAAO,IAAI;;AAIf,IAAA,UAAU,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,aAAa,GAAI,KAAK,CAAC,MAA2B,EAAE,KAAK;AAE/D,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;;aACnC;YACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;AAC5D,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,iBAAiB,CAAC;AAC5E,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;;;AAIxC,IAAA,kBAAkB,CAAC,aAAsB,EAAA;QAErC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC/C;;AAGJ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACjD,YAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACnC,gBAAA,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;;AAE5E,YAAA,OAAO,KAAK;AAChB,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,sBAAsB,EAAE;;AAGjC,IAAA,cAAc,CAAC,aAAsB,EAAA;QACjC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AAC/C,YAAA,OAAO,IAAI;;QAEf,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;YACrC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACjD,YAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACnC,gBAAA,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;;AAE5E,YAAA,OAAO,KAAK;SACf,CAAC,IAAI,IAAI;;IAGd,sBAAsB,GAAA;;;AAGlB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;;IAGhC,aAAa,GAAA;QACT,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW;AACjE,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE;YACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChD;;AAGJ,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC;;IAGzE,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG1B,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YACxB,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;;;IAIjD,oBAAoB,GAAA;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM;AACzD,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG;AAEjC,QAAA,IAAI,SAAS;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACf,YAAA,SAAS,GAAG,UAAU,GAAG,EAAE;;aACxB;AACH,YAAA,SAAS,GAAG,UAAU,GAAG,EAAE;;AAG/B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,SAAS,CAAA,EAAA,CAAI,CAAC;;;IAIxG,sBAAsB,GAAA;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM;AACzD,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,IAAI,UAAU,GAAG,GAAG,CAAC;;IAGhE,uBAAuB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE;AACxF,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzF,eAAe,CAAC,cAAc,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;;;IAK1D,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,sBAAsB,EAAE;;;AAIrC,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAChB;;AAEJ,QAAA,QAAQ,KAAK,CAAC,GAAG;AACb,YAAA,KAAK,WAAW;AACZ,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;;gBAElD,IAAI,CAAC,uBAAuB,EAAE;gBAC9B,KAAK,CAAC,cAAc,EAAE;gBACtB;AACJ,YAAA,KAAK,SAAS;AACV,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE;AAC7B,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;;gBAElD,IAAI,CAAC,uBAAuB,EAAE;gBAC9B,KAAK,CAAC,cAAc,EAAE;gBACtB;AACJ,YAAA,KAAK,OAAO;AACR,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAChE,KAAK,CAAC,cAAc,EAAE;gBACtB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,KAAK,CAAC,cAAc,EAAE;gBACtB;;AAIR,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACtB,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG;AACnB,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,IAAG;oBACnD,IAAI,YAAY,GAAG,EAAE;AACrB,oBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE;AAC9D,wBAAA,YAAY,GAAG,yBAAyB,CAAC,IAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,cAAc,EAAE,CAAE,CAAA,CAAC;;yBAC/E;AACH,wBAAA,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;oBAE9C,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;AACrD,iBAAC,CACJ;AAED,gBAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACtB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC;oBACxC,IAAI,CAAC,uBAAuB,EAAE;;;;;IAM9C,oBAAoB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACpB,IAAI,CAAC,WAAW,EAAG,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;YAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,WAAW,EAAG,CAAC,aAAa,CAAC,KAAK,EAAE;;;IAIjD,kBAAkB,GAAA;QACd,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;IAGxC,uBAAuB,GAAA;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;;IAG9B,MAAM,GAAA;QACF,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAG;AACxC,YAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;AACvF,SAAC,CAAC;QAEF,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,IAAG;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACjD,YAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACnC,gBAAA,OAAO,aAAa;;AAExB,YAAA,OAAO,EAAE;AACb,SAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAEb,QAAA,IAAI,GAAG,IAAI,EAAE,EAAE;AACX,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,GAAG;;IAGd,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;uGAxZvB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,ECrCzC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,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,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,YAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,mkRAoIA,EDzGQ,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,IAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,2EACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,CAAA,EAAA,CAAA;;2FAKN,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAdxC,SAAS;+BACI,2BAA2B,EAAA,UAAA,EACzB,IAAI,EACP,OAAA,EAAA;wBACL,kBAAkB;wBAClB,OAAO;wBACP,wBAAwB;wBACxB,mBAAmB;wBACnB,iBAAiB;wBACjB;AACH,qBAAA,EAAA,QAAA,EAAA,mkRAAA,EAAA;wDAsC4C,cAAc,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC;gBACU,qBAAqB,EAAA,CAAA;sBAAzE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;gBACP,YAAY,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;gBAgR1C,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,eAAe;;IA0GrB;AAAZ,CAAA,UAAY,6BAA6B,EAAA;AACrC,IAAA,6BAAA,CAAA,6BAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,6BAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,6BAAA,CAAA,6BAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACT,CAAC,EAJW,6BAA6B,KAA7B,6BAA6B,GAIxC,EAAA,CAAA,CAAA;;AE3aK,MAAO,4BAAgC,SAAQ,wBAAwB,CAAA;IAC3E,KAAK,GAAG,KAAK,EAAiB;AAC9B,IAAA,KAAK,GAAG,KAAK,CAAM,EAAE,CAAC;IACtB,OAAO,GAAG,KAAK,EAAiB;IAChC,eAAe,GAAG,KAAK,EAAiB;IACxC,OAAO,GAAG,KAAK,EAAiB;IAChC,eAAe,GAAG,KAAK,EAAU;IACjC,QAAQ,GAAG,KAAK,EAAiB;IACjC,mBAAmB,GAAG,KAAK,EAAU;AACrC,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,CAAC;AAClC,IAAA,UAAU,GAAG,KAAK,CAAS,eAAe,CAAC,eAAe,CAAC;IAC3D,aAAa,GAAG,KAAK,EAAU;IAC/B,KAAK,GAAG,KAAK,EAAc;IAC3B,SAAS,GAAG,KAAK,EAAU;IAC3B,gBAAgB,GAAG,KAAK,EAAU;IAClC,gBAAgB,GAAG,KAAK,EAAU;AAClC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AACjC,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC;AACtC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;AACtC,IAAA,qBAAqB,GAAG,KAAK,CAAU,IAAI,CAAC;AAC5C,IAAA,mBAAmB,GAAG,KAAK,CAAgB,IAAI,CAAC;IAEhD,YAAY,GAAG,MAAM,EAAO;IAC5B,qBAAqB,GAAG,MAAM,EAAQ;AAEtC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAEvB,IAAA,aAAa,GAAG,MAAM,CAAM,EAAE,CAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAA4B,EAAE,CAAC;AAErD,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;AAIxC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,WAAW,EAAE;;AAGX,IAAA,YAAY,CAAC,KAAY,EAAA;QAChC,IAAI,CAAC,WAAW,EAAE;;IAGpB,WAAW,GAAA;QACT,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;AAC5C,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB;;QAGF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC7B;;QAGF,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAG;YAC5B,IAAI,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAChD,YAAA,OAAO,IAAI;AACb,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG/B,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;YACzD,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,EAAE;AAClC,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAE/B,YAAA,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAC;AACxC,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;;;;IAKnC,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE;AACvC,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;;IAGhH,cAAc,GAAA;QACZ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAG;;IAGpH,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI;;IAG9D,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGxB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGzB,IAAA,mBAAmB,CAAC,YAAe,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;AAC9C,YAAA,OAAO,YAAY;;AAGrB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,EAAG;QAC7B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,IAAG;YAC9B,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAW,CAAC;YAC/F,OAAO,aAAa,KAAK,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACtD,SAAC,CAAC;;AAGJ,IAAA,wBAAwB,CAAC,YAAe,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;AACxD,YAAA,OAAO,YAAY;;AAErB,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,EAAG;QACvC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,IAAG;YAC9B,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAW,CAAC;YACpG,OAAO,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AAC3D,SAAC,CAAC;;AAGJ,IAAA,6BAA6B,CAAC,KAAU,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;AACxD,YAAA,OAAO,KAAK;;AAEd,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,EAAG;QACvC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,IAAG;YAC9B,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAW,CAAC;YACpG,OAAO,aAAa,KAAK,KAAK;AAChC,SAAC,CAAC;;AAGJ,IAAA,gBAAgB,CAAC,IAAO,EAAA;QACtB,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,IAAG,MAAM,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AACjD,YAAA,OAAO,IAAI,CAAC,OAAO,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAGnF,QAAA,IAAG,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;YACjE,OAAO,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAG,CAAC;;AAGnE,QAAA,OAAO,IAAI;;AAGb,IAAA,QAAQ,CAAC,IAAO,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACjB,YAAA,OAAO,IAAI;;QAEb,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;IAGjF,YAAY,GAAA;QACV,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;AACtC,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxD,QAAA,OAAO,MAAM;;AAGf,IAAA,aAAa,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACtB,YAAA,OAAO,IAAI;;QAEb,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AAC9F,QAAA,OAAO,UAAU;;AAGnB,IAAA,wBAAwB,CAAC,IAAO,EAAA;QAC9B,MAAM,YAAY,GAAI,IAAI,CAAC,WAAW,CAAC,KAAa,IAAI,EAAE;QAC1D,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;QAC5C,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAGpC,QAAA,IAAI,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACjD,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,IAAI;;QAGb,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;QAEnD,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAG;YAClC,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAQ,CAAC;YACjG,OAAO,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACnD,SAAC,CAAC;AACF,QAAA,OAAO,OAAO;;AAGhB,IAAA,gCAAgC,CAAC,IAAO,EAAA;QACtC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;AACjD,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,EAAG;QACvC,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;QAEnD,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAG;YAClC,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAQ,CAAC;YACjG,OAAO,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACnD,SAAC,CAAC;AACF,QAAA,OAAO,OAAO;;AAGhB,IAAA,aAAa,CAAC,IAAO,EAAA;QACnB,IAAI,CAAC,aAAa,EAAE;QAEpB,MAAM,YAAY,GAAI,IAAI,CAAC,WAAW,CAAC,KAAa,IAAI,EAAE;QAC1D,MAAM,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;QACnE,MAAM,sBAAsB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC;AAG1E,QAAA,IAAI,uBAAuB,IAAI,sBAAsB,EAAE;YACrD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,YAAA,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAG;AAC/B,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrB,gBAAA,OAAO,IAAI;AACb,aAAC,CAAC;AACF,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;aACf;AACL,YAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAG;AAC/B,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACf,gBAAA,OAAO,IAAI;AACb,aAAC,CAAC;AACF,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAIxB,IAAA,YAAY,CAAC,IAAO,EAAA;AAElB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;AAClE,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;AACpD,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE;AAC1E,YAAA,OAAO,KAAK;;AAGd,QAAA,OAAO,IAAI;;AAGb,IAAA,cAAc,CAAC,IAAO,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;;AAGvB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;YAClE,IAAI,MAAM,GAAG,IAAW;AACxB,YAAA,OAAO,IAAI,CAAC,eAAe,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAG3F,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;AAGxB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE;YAC1E,IAAI,MAAM,GAAG,IAAW;AACxB,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAG/F,QAAA,OAAO,IAAI;;AAGb,IAAA,mBAAmB,CAAC,IAAO,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;;AAGzB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE;AACpE,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;;QAEzB,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AACjG,QAAA,OAAO,KAAK;;IAGd,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;;IAGnC,aAAa,CAAC,KAAoB,EAAE,IAAO,EAAA;AACzC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,KAAK,CAAC,cAAc,EAAE;gBACtB;;;uGA/SK,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EC3BzC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,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,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,s9IA0FA,EDzEI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,IAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,yGACnB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAdxC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EACP,OAAA,EAAA;wBACP,kBAAkB;wBAClB,wBAAwB;wBACxB,gBAAgB;wBAChB,OAAO;wBACP,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,s9IAAA,EAAA;;;AEPG,MAAO,oBAAqB,SAAQ,0BAA2C,CAAA;IACnF,YAAY,GAAG,MAAM,EAAU;IAE/B,kBAAkB,GAAA;QAChB,KAAK,CAAC,eAAe,EAAE;;AAGN,IAAA,YAAY,CAAC,KAAsB,EAAA;;;IAItD,SAAS,GAAA;;;;;AAMD,IAAA,IAAI,CAAC,QAAgB,EAAA;;uGAjBlB,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBjC,2GAEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDSI,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKN,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,2GAAA,EAAA;;;MEJU,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,kFCRtC,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDQa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,WACzB,EAAE,EAAA,QAAA,EAAA,EAAA,EAAA;;;AESP,MAAO,oBAAqB,SAAQ,wBAAwB,CAAA;IAChE,KAAK,GAAG,KAAK,EAAiB;AAC9B,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAU;IACpC,KAAK,GAAG,KAAK,EAAc;AAE3B,IAAA,EAAE,GAAG,MAAM,CAAS,EAAE,CAAC;AAGvB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAO;AAEtC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,aAAa,GAAG,KAAK,CAA4B,EAAE,CAAC;AAEpD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;IAIxC,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;AAI1C,IAAA,YAAY,CAAC,GAAQ,EAAA;;IAIxC,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;AAG3B,IAAA,eAAe,CAAC,MAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,MAAM,KAAK,GAAI,MAAM,CAAC,MAA2B,CAAC,KAAK;;AAEvD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAIzB,KAAK,GAAA;AACX,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC5D,QAAA,OAAO,gBAAgB,YAAY,CAAC,QAAQ,EAAE,EAAE;;uGA/CvC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,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,YAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbjC,yyEAoCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5BI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,yyEAAA,EAAA;wDAYD,YAAY,EAAA,CAAA;sBADX;;;AEAG,MAAO,8BAAkC,SAAQ,wBAAwB,CAAA;AAC7E,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAU;AAChC,IAAA,KAAK,GAAG,KAAK,CAAM,EAAE,CAAC;AACtB,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAU;IAClC,KAAK,GAAG,KAAK,EAAU;AAEvB,IAAA,aAAa,GAAG,MAAM,CAA4B,EAAE,CAAC;AACrD,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AAG3B,IAAA,YAAY,GAA2B,IAAI,YAAY,EAAY;AAEnE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAG,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;AAI/B,IAAA,YAAY,CAAC,KAAU,EAAA;;IAIhC,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAG,WAAW,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;AAI7D,IAAA,WAAW,CAAC,IAAO,EAAA;AACjB,QAAA,IAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AACjD,YAAA,OAAO,IAAI;;QAEb,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAGlF,IAAA,aAAa,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACjB,YAAA,OAAO,IAAI;;QAEb,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAGjF,IAAA,aAAa,CAAC,IAAO,EAAA;QACnB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACtC,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;aACvB;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAIhC,cAAc,GAAA;QACZ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC;;IAGrC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;;uGAlEvB,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,0oBCpB3C,ksDAoCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvBI,mBAAmB,EACnB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,iFACrB,wBAAwB,EAAA,IAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,CAAA;;2FAKf,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAX1C,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EACP,OAAA,EAAA;wBACP,mBAAmB;wBACnB,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,ksDAAA,EAAA;wDAgBD,YAAY,EAAA,CAAA;sBADX;;;AEEG,MAAO,6BAAiC,SAAQ,wBAAwB,CAAA;IAC5E,KAAK,GAAG,KAAK,EAAiB;AAC9B,IAAA,KAAK,GAAG,KAAK,CAAM,EAAE,CAAC;IACtB,OAAO,GAAG,KAAK,EAAU;IACzB,eAAe,GAAG,KAAK,EAAiB;IACxC,OAAO,GAAG,KAAK,EAAiB;IAChC,eAAe,GAAG,KAAK,EAAU;IACjC,QAAQ,GAAG,KAAK,EAAiB;IACjC,mBAAmB,GAAG,KAAK,EAAU;IACrC,SAAS,GAAG,KAAK,EAAU;IAC3B,gBAAgB,GAAG,KAAK,EAAU;IAClC,KAAK,GAAG,KAAK,EAAU;IACvB,aAAa,GAAG,KAAK,EAAU;IAC/B,KAAK,GAAG,KAAK,EAAc;IAC3B,gBAAgB,GAAG,KAAK,EAAU;AAClC,IAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC;AACtC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;AACtC,IAAA,qBAAqB,GAAG,KAAK,CAAU,IAAI,CAAC;AAC5C,IAAA,aAAa,GAAG,KAAK,CAA4B,OAAO,CAAC;AACzD,IAAA,mBAAmB,GAAG,KAAK,CAAgB,IAAI,CAAC;IAEhD,YAAY,GAAG,MAAM,EAAY;IACjC,qBAAqB,GAAG,MAAM,EAAQ;AAGtC,IAAA,YAAY,GAAG,MAAM,CAAW,IAAI,CAAC;AAErC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAEvB,IAAA,aAAa,GAAG,MAAM,CAA4B,EAAE,CAAC;AACrD,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;AAI/B,IAAA,YAAY,CAAC,KAAU,EAAA;;IAIhC,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;IAI7D,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE;AACvC,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;;IAGhH,cAAc,GAAA;QACZ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAG;;IAGpH,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI;;IAG9D,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGxB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGzB,IAAA,gBAAgB,CAAC,IAAO,EAAA;QACtB,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,IAAG,MAAM,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AACjD,YAAA,OAAO,IAAI,CAAC,OAAO,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAGnF,QAAA,IAAG,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;YACjE,OAAO,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAG,CAAC;;AAGnE,QAAA,OAAO,IAAI;;AAGb,IAAA,aAAa,CAAC,IAAc,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;AAC9C,YAAA,OAAO,IAAI;;QAEb,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAGjF,IAAA,YAAY,CAAC,IAAO,EAAA;AAElB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;AAClE,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;AACpD,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE;AAC1E,YAAA,OAAO,KAAK;;AAGd,QAAA,OAAO,IAAI;;AAGb,IAAA,cAAc,CAAC,IAAO,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;;AAGvB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;YAClE,IAAI,MAAM,GAAG,IAAW;AACxB,YAAA,OAAO,IAAI,CAAC,eAAe,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAG3F,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;AAGxB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE;YAC1E,IAAI,MAAM,GAAG,IAAW;AACxB,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;;AAE/F,QAAA,OAAO,IAAI;;AAGb,IAAA,mBAAmB,CAAC,IAAO,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;;AAGzB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE;AACpE,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;;QAEzB,IAAI,MAAM,GAAG,IAAW;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AACjG,QAAA,OAAO,KAAK;;AAGd,IAAA,aAAa,CAAC,IAAO,EAAA;QACnB,IAAI,CAAC,aAAa,EAAE;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;aACvB;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAIjC,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;;IAGnC,aAAa,CAAC,KAAoB,EAAE,IAAO,EAAA;AACzC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,KAAK,CAAC,cAAc,EAAE;gBACtB;;;uGA9KK,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,ECjC1C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,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,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,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,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,gnJA+FA,EDzEI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,2HAClB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACnB,wBAAwB,EACxB,IAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,2EACP,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAfzC,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EACP,OAAA,EAAA;wBACP,kBAAkB;wBAClB,OAAO;wBACP,mBAAmB;wBACnB,wBAAwB;wBACxB,mBAAmB;wBACnB,OAAO;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,gnJAAA,EAAA;;;AEPG,MAAO,eAAgB,SAAQ,wBAAwB,CAAA;IAC3D,KAAK,GAAG,KAAK,EAAiB;AAE9B,IAAA,EAAE,GAAG,MAAM,CAAS,EAAE,CAAC;AAGvB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAE1C,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,aAAa,GAAG,KAAK,CAA4B,EAAE,CAAC;AAEpD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;IAIxC,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;IAI7D,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;AAGR,IAAA,YAAY,CAAC,KAAU,EAAA;;AAI1C,IAAA,gBAAgB,CAAC,MAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,MAAM,KAAK,GAAI,MAAM,CAAC,MAA2B,CAAC,OAAO;AACzD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAIzB,KAAK,GAAA;AACX,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC5D,QAAA,OAAO,YAAY,YAAY,CAAC,QAAQ,EAAE,EAAE;;uGA7CnC,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,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,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,YAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB5B,kqEAgDA,EAAA,MAAA,EAAA,CAAA,waAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/BI,mBAAmB,EAAA,CAAA,EAAA,CAAA;;2FAKV,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EACP,OAAA,EAAA;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,kqEAAA,EAAA,MAAA,EAAA,CAAA,waAAA,CAAA,EAAA;wDAUD,YAAY,EAAA,CAAA;sBADX;;;AEVG,MAAO,sBAAuB,SAAQ,wBAAwB,CAAA;AAClE,IAAA,UAAU,GAAG,KAAK,CAAqB,SAAS,CAAC;AACjD,IAAA,IAAI,GAAG,KAAK,CAAsE,MAAM,CAAC;AACzF,IAAA,QAAQ,GAAG,KAAK,CAAuB,MAAM,CAAC;AAC9C,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAU;AAChC,IAAA,SAAS,GAAG,KAAK,CAAU,IAAI,CAAC;AAChC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,CAAC;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAS,CAAC,CAAC;AACvB,IAAA,aAAa,GAAG,KAAK,CAA4B,EAAE,CAAC;AACpD,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;IAEtC,WAAW,GAAG,MAAM,EAAO;AAE3B,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAE3D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAG,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,SAAU,CAAC,aAAa,GAAG,IAAI;;;IAIxC,kBAAkB,GAAA;AAChB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;QACxD,IAAG,WAAW,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAsB;;;AAI7D,IAAA,aAAa,CAAC,KAAU,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;AAG3B,IAAA,YAAY,CAAC,GAAQ,EAAA;;uGAnCpB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,qzCCjBnC,4gCAyBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDfI,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,wBAAwB,6DACxB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKT,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAXlC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EACP,OAAA,EAAA;wBACP,mBAAmB;wBACnB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,4gCAAA,EAAA;;;AEqBG,MAAO,mBAAoB,SAAQ,0BAA2C,CAAA;AAElF,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAEzB,OAAO,GAAG,KAAK,EAAiB;AAChC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AACjC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC;AACtC,IAAA,kBAAkB,GAAG,KAAK,CAAU,IAAI,CAAC;IAEzC,YAAY,GAAG,MAAM,EAAwB;IAE7C,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAGtD,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AACtB,IAAA,aAAa,GAAG,MAAM,CAA4B,EAAE,CAAC;AACrD,IAAA,kBAAkB,GAAG,MAAM,CAAU,KAAK,CAAC;AAC3C,IAAA,KAAK,GAAG,MAAM,CAAS,EAAE,CAAC;AAC1B,IAAA,OAAO,GAAG,MAAM,CAAS,CAAC,CAAC;AAC3B,IAAA,MAAM,GAAG,MAAM,CAAqB,IAAI,CAAC;AACzC,IAAA,cAAc,GAAG,MAAM,CAAU,KAAK,CAAC;AACvC,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IAEzB,gBAAgB,GAAG,KAAK;IACxB,kBAAkB,GAAW,EAAE;IAC/B,oBAAoB,GAAW,CAAC;AAEb,IAAA,YAAY,CAAC,KAAsB,EAAA;QACpD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;AACvB,YAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;YAE3B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;gBAC3B,KAAK,GAAG,EAAE;;YAGZ,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,EAAE;gBAC/B,OAAO,GAAG,CAAC;;AAGb,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAIzB,kBAAkB,GAAA;QAChB,KAAK,CAAC,eAAe,EAAE;;IAGzB,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;IAG1B,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG3B,QAAQ,GAAA;QACN,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,YAAA,GAAG,GAAG,GAAG,GAAG,YAAY;;aACnB;AACL,YAAA,GAAG,GAAG,GAAG,GAAG,MAAM;;AAGpB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ;;AAG5B,QAAA,OAAO,GAAG;;IAIZ,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;;aAClD;YACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;;QAEzD,IAAI,CAAC,YAAY,EAAE;;IAGrB,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;;aAClD;YACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;;QAEzD,IAAI,CAAC,YAAY,EAAE;;IAGrB,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,IAAI,CAAC,eAAe,EAAE;;;aAEnB;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;;QAEvC,IAAI,CAAC,YAAY,EAAE;;IAGrB,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACpB,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,IAAI,CAAC,iBAAiB,EAAE;;;aAErB;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;;QAEvC,IAAI,CAAC,YAAY,EAAE;;IAGrB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;;;AAI7D,IAAA,kBAAkB,CAAC,SAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;AACjD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;;AAC5B,iBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;AACxD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;AAEnB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;;aAChB;AACL,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;;iBACvD;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;;;AAG1D,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE;;AAG5C,IAAA,aAAa,CAAC,MAAkB,EAAA;AAC9B,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAA0B;QACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;AAEnD,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,EAAE,EAAE;AACvC,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU;gBACpC,IAAI,CAAC,YAAY,EAAE;;iBACd;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;;;aAEpC;YACL,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,EAAE,EAAE;AACvC,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU;gBACpC,IAAI,CAAC,YAAY,EAAE;;iBACd;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;;;AAG3C,QAAA,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;;AAG/C,IAAA,eAAe,CAAC,MAAkB,EAAA;AAChC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAA0B;QACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;QACrD,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,IAAI,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9B,YAAA,IAAI,CAAC,oBAAoB,GAAG,YAAY;YACxC,IAAI,CAAC,YAAY,EAAE;;aACd;YACL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;;AAE7C,QAAA,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE;;IAGjD,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE;;IAGnE,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE;;IAGzE,YAAY,GAAA;AACV,QAAA,IAAI,KAAK,GAAG;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE;AACtB,YAAA,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1G,YAAA,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM;SACnD;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG/B,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;;IAGnC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;;uGAhNb,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,6sBClChC,81MAqIA,EAAA,MAAA,EAAA,CAAA,2MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhHI,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,uZACX,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAClB,wBAAwB,EACxB,IAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,ijBAChB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EACjB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,iFACT,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAjB/B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EACP,OAAA,EAAA;wBACP,OAAO;wBACP,WAAW;wBACX,kBAAkB;wBAClB,wBAAwB;wBACxB,gBAAgB;wBAChB,mBAAmB;wBACnB,iBAAiB;wBACjB,SAAS;wBACT;AACD,qBAAA,EAAA,QAAA,EAAA,81MAAA,EAAA,MAAA,EAAA,CAAA,2MAAA,CAAA,EAAA;;;ME9BU,SAAS,CAAA;AACpB,IAAA,iBAAiB,CAAC,UAAqC,EAAA;QACrD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;;QAGjC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AACzB,YAAA,OAAO,IAAI;;QAGb,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,QAAA,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAE/B,QAAA,OAAO,GAAG,KAAK,CAAA,CAAA,EAAI,GAAG,CAAI,CAAA,EAAA,IAAI,EAAE;;AAGlC,IAAA,aAAa,CAAC,UAAqC,EAAA;QACjD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;;QAGjC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AACzB,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnD,QAAA,OAAO,CAAG,EAAA,KAAK,CAAI,CAAA,EAAA,OAAO,EAAE;;IAG9B,uBAAuB,CAAC,IAAY,EAAE,IAAa,EAAA;QACjD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS;;QAElB,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAEvD,QAAA,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC;AAEhE,QAAA,OAAO,SAAS,CAAC,WAAW,EAAE;;AAGhC,IAAA,qBAAqB,CAAC,MAAc,EAAA;QAClC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAEvC,QAAA,OAAO,CAAG,EAAA,KAAK,CAAI,CAAA,EAAA,IAAI,EAAE;;IAI3B,sBAAsB,GAAA;AACpB,QAAA,IAAI,KAAK,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AAC9D,QAAA,OAAO,WAAW;;AAErB;;AChEK,SAAU,kBAAkB,CAAC,SAAoB,EAAA;AACrD,IAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;QAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAEpC,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AAC9B,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAA,CAAE,CAAC;AAE9B,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;YAC7B,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAG;AACrC,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,qBAAA,EAAwB,QAAQ,CAAA,SAAA,EAAY,MAAM,CAAC,QAAQ,CAAC,CAAE,CAAA,CAAC;AAC7E,iBAAC,CAAC;;;;AAKN,QAAA,IAAI,OAAO,YAAY,SAAS,EAAE;YAChC,kBAAkB,CAAC,OAAO,CAAC;;AAE/B,KAAC,CAAC;AACJ;;ACpBM,SAAU,QAAQ,CAAC,IAAY,EAAE,eAAwB,KAAK,EAAE,QAAkB,EAAE,UAAsB,EAAA;IAC9G,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACjD,IAAA,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;IACxC,IAAG,YAAY,EAAE;AACf,QAAA,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;;AAEhD,IAAA,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AACpC,IAAA,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC;IACnD,aAAa,CAAC,KAAK,EAAE;AACrB,IAAA,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC;AACrD;;ACQM,MAAO,iBAAkB,SAAQ,KAAK,CAAA;AAAG;AAE/C,iBAAiB,CAAC,SAAS,CAAC,IAAI,GAAG,mBAAmB;AAEtD,SAAS,gBAAgB,CAAC,GAAW,EAAA;AACnC,IAAA,OAAO,kBAAkB,CACvB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACjC,QAAA,IAAI,IAAI,GAAI,CAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;AACjE,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,YAAA,IAAI,GAAG,GAAG,GAAG,IAAI;;QAEnB,OAAO,GAAG,GAAG,IAAI;KAClB,CAAC,CACH;AACH;AAEA,SAAS,eAAe,CAAC,GAAW,EAAA;AAClC,IAAA,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AACtD,IAAA,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC;AACvB,QAAA,KAAK,CAAC;YACJ;AACF,QAAA,KAAK,CAAC;YACJ,MAAM,IAAI,IAAI;YACd;AACF,QAAA,KAAK,CAAC;YACJ,MAAM,IAAI,GAAG;YACb;AACF,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;;AAGjE,IAAA,IAAI;AACF,QAAA,OAAO,gBAAgB,CAAC,MAAM,CAAC;;IAC/B,OAAO,GAAG,EAAE;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC;;AAEvB;AAOgB,SAAA,SAAS,CACvB,KAAa,EACb,OAA0B,EAAA;AAE1B,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,IAAI,iBAAiB,CAAC,2CAA2C,CAAC;;IAG1E,OAAO,KAAK,EAAE;AAEd,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAElC,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,MAAM,IAAI,iBAAiB,CAAC,CAAA,uCAAA,EAA0C,GAAG,GAAG,CAAC,CAAE,CAAA,CAAC;;AAGlF,IAAA,IAAI,OAAe;AACnB,IAAA,IAAI;AACF,QAAA,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;;IAC/B,OAAO,CAAC,EAAE;AACV,QAAA,MAAM,IAAI,iBAAiB,CACzB,CAAA,kDAAA,EAAqD,GAAG,GAAG,CAAC,CAAA,EAAA,EAAM,CAAW,CAAC,OAAO,CAAA,CAAA,CAAG,CACzF;;AAGH,IAAA,IAAI;AACF,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM;;IAC/B,OAAO,CAAC,EAAE;AACV,QAAA,MAAM,IAAI,iBAAiB,CACzB,CAAA,gDAAA,EAAmD,GAAG,GAAG,CAAC,CAAA,EAAA,EAAM,CAAW,CAAC,OAAO,CAAA,CAAA,CAAG,CACvF;;AAEL;;AChGM,SAAU,UAAU,CAAC,GAAkC,EAAA;IAC3D,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC;AAC5F,IAAA,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B;AAEM,SAAU,qBAAqB,CAAC,GAAkC,EAAA;IACtE,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC;AAC5F,IAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B;SAEgB,gBAAgB,CAAC,GAAkC,EAAE,YAAoB,GAAG,EAAA;IAC1F,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC;IAC5F,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA,CAAE,CAAC;AACzC;AAEM,SAAU,cAAc,CAAC,KAAa,EAAA;AAC1C,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,IAAI,EAAE;AACN,SAAA,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C;;SChBgB,0BAA0B,GAAA;IACxC,OAAO,CAAC,OAAwB,KAAS;AACvC,QAAA,MAAM,KAAK,GAAW,OAAO,CAAC,KAAK;QAEnC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;;;QAIlB,MAAM,gBAAgB,GAAG,oDAAoD;QAC7E,MAAM,mBAAmB,GAAG,gDAAgD;;AAG5E,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CACnB,KAAK,CAAC,GAAG,CAAC;QACV,GAAG,CAAC,MAAK;;AAEP,YAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChC,gBAAA,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACvD,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;gBAE3C,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE;AAC1F,oBAAA,OAAO,EAAE,WAAW,EAAE,+DAA+D,EAAE;;;;AAItF,iBAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1C,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;gBAE3C,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE;AAC1F,oBAAA,OAAO,EAAE,WAAW,EAAE,+DAA+D,EAAE;;;iBAGtF;AACH,gBAAA,OAAO,EAAE,WAAW,EAAE,kDAAkD,EAAE;;YAG5E,OAAO,IAAI,CAAC;SACb,CAAC,CACH;AACH,KAAC;AACH;;MC3Ca,UAAU,CAAA;AAEb,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAEnC,IAAA,WAAA,GAAA;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU;;uGARpB,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,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;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACFK,SAAU,gBAAgB,CAAC,MAAiB,EAAA;IAChD,OAAO;AACL,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,QAAQ,EAAE;KACX;AACH;;ACRA;;AAEG;;;;"}