@vallift/ngl 0.0.23 → 0.0.24
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/color-picker/utils/formats.ts","../../../projects/ngl/src/components/color-picker/enums/formats.ts","../../../projects/ngl/src/components/color-picker/color-converter.service.ts","../../../projects/ngl/src/components/color-picker/utils/slider.ts","../../../projects/ngl/src/components/color-picker/color-picker-slider.directive.ts","../../../projects/ngl/src/components/color-picker/color-picker.component.ts","../../../projects/ngl/src/components/color-picker/color-picker.component.html","../../../projects/ngl/src/components/color-picker/color-picker.directive.ts","../../../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/floating-menu/open-floating-menu.directive.ts","../../../projects/ngl/src/components/listview/listview.component.ts","../../../projects/ngl/src/components/listview/listview.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.component.ts","../../../projects/ngl/src/components/tooltip/tooltip.component.html","../../../projects/ngl/src/components/tooltip/tooltip.directive.ts","../../../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>(0);\n pageSize = signal<number>(25);\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(Number(response.pageNumber));\n }\n\n if (response?.pageSize) {\n this.pageSize.set(Number(response.pageSize));\n }\n\n if (response?.totalRecords) {\n this.totalRecords.set(Number(response.totalRecords));\n }\n\n if (response?.totalPages) {\n this.totalPages.set(response.totalRecords(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(0);\n this.pageSize.set(25);\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 positionPreference?: 'topLeft' | 'topRight' | 'topCenter' |\n 'bottomLeft' | 'bottomRight' | 'bottomCenter' |\n 'leftTop' | 'leftCenter' | 'leftBottom' |\n 'rightTop' | 'rightCenter' | 'rightBottom' |\n 'center';\n disableClose?: boolean;\n data?: any;\n scrollStrategy?: 'noop' | 'block' | 'reposition' | 'close';\n isMobileResponsive?: boolean;\n }\n ): DialogRef<any, T> {\n\n const {\n positionPreference = 'bottomLeft',\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 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 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(positionMappings[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 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<!-- <!– <th class=\"p-4 text-center \">LICENSE EXPIRING</th>–>-->\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<!-- <!– <td class=\"px-4 text-body2 text-center\">{{ item.licenseExpiringDate |date:'MMM d, y h:mm a' }}</td>–>-->\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';\n\n@Component({\n selector: 'app-close-button',\n standalone: true,\n imports: [\n\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 <svg class=\"w-12 h-12 text-neutral-800\" xmlns=\"http://www.w3.org/2000/svg\" id=\"mdi-window-close\" viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M13.46,12L19,17.54V19H17.54L12,13.46L6.46,19H5V17.54L10.54,12L5,6.46V5H6.46L12,10.54L17.54,5H19V6.46L13.46,12Z\"/>\n </svg>\n\n</p>\n","import { EventEmitter, Output } from '@angular/core';\n\nexport class Rgba {\n constructor(public r: number, public g: number, public b: number, public a: number) {}\n\n public denormalize():Rgba{\n this.r = Math.round(this.r * 255);\n this.g = Math.round(this.g * 255);\n this.b = Math.round(this.b * 255);\n return this;\n }\n\n public toString():string{\n this.denormalize();\n let output =\n 'rgb' +\n (this.a != 1 ? 'a(' : '(')+\n this.r + ', ' +\n this.g + ', ' +\n this.b +\n (this.a != 1 ? ', ' + this.a.toPrecision(2) + ')' : ')')\n return output;\n }\n\n\n}\n\nexport class Hsva {\n\n public onChange:EventEmitter<Hsva> = new EventEmitter<Hsva>(true);\n\n constructor(public h: number, public s: number, public v: number, public a: number) {\n\n }\n\n public onColorChange(value: { s: number, v: number, rgX: number, rgY: number }): void {\n this.s = value.s / value.rgX;\n this.v = value.v / value.rgY;\n }\n\n public onHueChange(value: { v: number, rgX: number }): void {\n this.h = value.v / value.rgX;\n // this.sliderH = this.hsva.h;\n }\n\n public onValueChange(value: { v: number, rgX: number }): void {\n this.v = value.v / value.rgX;\n }\n\n public onAlphaChange(value: { v: number, rgX: number }): void {\n this.a = value.v / value.rgX;\n }\n\n}\n\nexport class Hsla {\n constructor(public h: number, public s: number, public l: number, public a: number) {}\n\n public denormalize():Hsla{\n this.h = Math.round(this.h * 360);\n this.s = Math.round(this.s * 100);\n this.l = Math.round(this.l * 100);\n return this;\n }\n public toString():string{\n let output =\n 'hsl' +\n (this.a != 1 ? 'a(': '(') +\n this.h + ', ' +\n this.s + '%, ' +\n this.l + '%' +\n (this.a != 1 ? ', ' + this.a.toPrecision(2) + ')' : ')')\n return output;\n }\n\n}\n\nexport class Cmyk {\n constructor(public c: number, public m: number, public y: number, public k: number, public a: number = 1) {}\n}\n","export enum ColorFormats {\n HEX,\n RGBA,\n HSLA,\n CMYK\n }","import { Injectable } from \"@angular/core\";\nimport {Cmyk, Hsla, Hsva, Rgba} from \"./utils/formats\";\nimport {ColorFormats} from \"./enums/formats\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorConverterService {\n // private active: ColorPickerComponent | null = null;\n\n constructor() {}\n\n // public setActive(active: ColorPickerComponent | null): void {\n // this.active = active;\n // }\n\n toFormat(hsva: Hsva | null, format: ColorFormats) {\n var output = \"\";\n if (hsva) {\n switch (format) {\n case ColorFormats.HEX:\n var rgba: Rgba = this.hsvaToRgba(hsva);\n rgba.denormalize();\n var output = this.rgbaToHex(rgba, true);\n break;\n case ColorFormats.HSLA:\n var hsla: Hsla = this.hsva2hsla(hsva);\n hsla.denormalize();\n var output = hsla.toString();\n break;\n case ColorFormats.RGBA:\n var rgba: Rgba = this.hsvaToRgba(hsva);\n var output = rgba.toString();\n break;\n case ColorFormats.CMYK:\n var rgba: Rgba = this.hsvaToRgba(hsva);\n var cmyk: Cmyk = this.rgbaToCmyk(rgba);\n break;\n }\n }\n return output;\n }\n\n public stringToFormat(color: string, format: ColorFormats) {\n var hsva = this.stringToHsva(color, true);\n return this.toFormat(hsva, format);\n }\n\n public hsva2hsla(hsva: Hsva): Hsla {\n const h = hsva.h,\n s = hsva.s,\n v = hsva.v,\n a = hsva.a;\n\n if (v === 0) {\n return new Hsla(h, 0, 0, a);\n } else if (s === 0 && v === 1) {\n return new Hsla(h, 1, 1, a);\n } else {\n const l = (v * (2 - s)) / 2;\n\n return new Hsla(h, (v * s) / (1 - Math.abs(2 * l - 1)), l, a);\n }\n }\n\n public hsla2hsva(hsla: Hsla): Hsva {\n const h = Math.min(hsla.h, 1),\n s = Math.min(hsla.s, 1);\n const l = Math.min(hsla.l, 1),\n a = Math.min(hsla.a, 1);\n\n if (l === 0) {\n return new Hsva(h, 0, 0, a);\n } else {\n const v = l + (s * (1 - Math.abs(2 * l - 1))) / 2;\n\n return new Hsva(h, (2 * (v - l)) / v, v, a);\n }\n }\n\n public hsvaToRgba(hsva: Hsva): Rgba {\n let r: number, g: number, b: number;\n\n const h = hsva.h,\n s = hsva.s,\n v = hsva.v,\n a = hsva.a;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n (r = v), (g = t), (b = p);\n break;\n case 1:\n (r = q), (g = v), (b = p);\n break;\n case 2:\n (r = p), (g = v), (b = t);\n break;\n case 3:\n (r = p), (g = q), (b = v);\n break;\n case 4:\n (r = t), (g = p), (b = v);\n break;\n case 5:\n (r = v), (g = p), (b = q);\n break;\n default:\n (r = 0), (g = 0), (b = 0);\n }\n\n return new Rgba(r, g, b, a);\n }\n\n public cmykToRgb(cmyk: Cmyk): Rgba {\n const r = (1 - cmyk.c) * (1 - cmyk.k);\n const g = (1 - cmyk.m) * (1 - cmyk.k);\n const b = (1 - cmyk.y) * (1 - cmyk.k);\n\n return new Rgba(r, g, b, cmyk.a);\n }\n\n public rgbaToCmyk(rgba: Rgba): Cmyk {\n const k: number = 1 - Math.max(rgba.r, rgba.g, rgba.b);\n\n if (k === 1) {\n return new Cmyk(0, 0, 0, 1, rgba.a);\n } else {\n const c = (1 - rgba.r - k) / (1 - k);\n const m = (1 - rgba.g - k) / (1 - k);\n const y = (1 - rgba.b - k) / (1 - k);\n\n return new Cmyk(c, m, y, k, rgba.a);\n }\n }\n\n public rgbaToHsva(rgba: Rgba): Hsva {\n let h: number, s: number;\n\n const r = Math.min(rgba.r, 1),\n g = Math.min(rgba.g, 1);\n const b = Math.min(rgba.b, 1),\n a = Math.min(rgba.a, 1);\n\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n\n const v: number = max,\n d = max - min;\n\n s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n h = 0;\n }\n\n h /= 6;\n }\n\n return new Hsva(h, s, v, a);\n }\n\n public rgbaToHex(rgba: Rgba, allowHex8?: boolean): string {\n /* tslint:disable:no-bitwise */\n let hex =\n \"#\" +\n ((1 << 24) | (rgba.r << 16) | (rgba.g << 8) | rgba.b)\n .toString(16)\n .substr(1);\n\n if (rgba.a != 1) {\n hex += ((1 << 8) | Math.round(rgba.a * 255)).toString(16).substr(1);\n }\n /* tslint:enable:no-bitwise */\n\n return hex;\n }\n\n public normalizeCMYK(cmyk: Cmyk): Cmyk {\n return new Cmyk(\n cmyk.c / 100,\n cmyk.m / 100,\n cmyk.y / 100,\n cmyk.k / 100,\n cmyk.a\n );\n }\n\n public denormalizeCMYK(cmyk: Cmyk): Cmyk {\n return new Cmyk(\n Math.floor(cmyk.c * 100),\n Math.floor(cmyk.m * 100),\n Math.floor(cmyk.y * 100),\n Math.floor(cmyk.k * 100),\n cmyk.a\n );\n }\n\n public denormalizeRGBA(rgba: Rgba): Rgba {\n return new Rgba(\n Math.round(rgba.r * 255),\n Math.round(rgba.g * 255),\n Math.round(rgba.b * 255),\n rgba.a\n );\n }\n\n public stringToHsva(\n colorString: string = \"\",\n allowHex8: boolean = true\n ): Hsva | null {\n let hsva: Hsva | null = null;\n\n colorString = (colorString || \"\").toLowerCase();\n\n const stringParsers = [\n {\n re: /(rgb)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*%?,\\s*(\\d{1,3})\\s*%?(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n parse: function (execResult: any) {\n return new Rgba(\n parseInt(execResult[2], 10) / 255,\n parseInt(execResult[3], 10) / 255,\n parseInt(execResult[4], 10) / 255,\n isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5])\n );\n },\n },\n {\n re: /(hsl)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})%\\s*,\\s*(\\d{1,3})%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n parse: function (execResult: any) {\n return new Hsla(\n parseInt(execResult[2], 10) / 360,\n parseInt(execResult[3], 10) / 100,\n parseInt(execResult[4], 10) / 100,\n isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5])\n );\n },\n },\n ];\n\n if (allowHex8) {\n stringParsers.push({\n re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})?$/,\n parse: function (execResult: any) {\n return new Rgba(\n parseInt(execResult[1], 16) / 255,\n parseInt(execResult[2], 16) / 255,\n parseInt(execResult[3], 16) / 255,\n parseInt(execResult[4] || \"FF\", 16) / 255\n );\n },\n });\n } else {\n stringParsers.push({\n re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/,\n parse: function (execResult: any) {\n return new Rgba(\n parseInt(execResult[1], 16) / 255,\n parseInt(execResult[2], 16) / 255,\n parseInt(execResult[3], 16) / 255,\n 1\n );\n },\n });\n }\n\n stringParsers.push({\n re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/,\n parse: function (execResult: any) {\n return new Rgba(\n parseInt(execResult[1] + execResult[1], 16) / 255,\n parseInt(execResult[2] + execResult[2], 16) / 255,\n parseInt(execResult[3] + execResult[3], 16) / 255,\n 1\n );\n },\n });\n\n for (const key in stringParsers) {\n if (stringParsers.hasOwnProperty(key)) {\n const parser = stringParsers[key];\n\n const match = parser.re.exec(colorString),\n color: any = match && parser.parse(match);\n\n if (color) {\n if (color instanceof Rgba) {\n hsva = this.rgbaToHsva(color);\n } else if (color instanceof Hsla) {\n hsva = this.hsla2hsva(color);\n }\n\n return hsva;\n }\n }\n }\n\n return hsva;\n }\n\n public outputFormat(hsva: Hsva): string {\n return this.hsvaToRgba(hsva).toString();\n }\n\n public getFormatByString(color: string): string {\n if (color) {\n color = color.toLowerCase();\n let regexHex: RegExp = /(#([\\da-f]{3}(?:[\\da-f]{3})?(?:[\\da-f]{2})?))/;\n let regexRGBA: RegExp =\n /(rgba\\((\\d{1,3},\\s?){3}(1|0?\\.\\d+)\\)|rgb\\(\\d{1,3}(,\\s?\\d{1,3}){2}\\))/;\n let regexHSLA: RegExp =\n /(hsla\\((\\d{1,3}%?,\\s?){3}(1|0?\\.\\d+)\\)|hsl\\(\\d{1,3}%?(,\\s?\\d{1,3}%?){2}\\))/;\n if (regexHex.test(color)) {\n return \"hex\";\n } else if (regexRGBA.test(color)) {\n return \"rgba\";\n } else if (regexHSLA.test(color)) {\n return \"hsla\";\n }\n }\n return \"hex\";\n }\n\n isValidHexColor(hex?: string): boolean {\n if(!hex) {\n return false;\n }\n\n const hexColorPattern = /^#?([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/;\n return hexColorPattern.test(hex);\n }\n\n addHexPrefixIfMissing(hex: string): string {\n if (!hex.startsWith('#')) {\n return '#' + hex;\n }\n return hex;\n }\n\n removeAlpha(hex: string): string {\n const cleanHex = hex.startsWith('#') ? hex.slice(1) : hex;\n const rgbHex = cleanHex.length === 8 ? cleanHex.slice(0, 6) : cleanHex;\n return `#${rgbHex.toUpperCase()}`;\n }\n}\n","export class SliderPosition {\n constructor(public h: number, public s: number, public v: number, public a: number) {}\n}\n \nexport class SliderDimension {\n constructor(public h: number, public s: number, public v: number, public a: number) {}\n}","import {Directive, ElementRef, EventEmitter, HostListener, inject, Input, Output} from '@angular/core';\n\n@Directive({\n selector: '[colorPickerSlider]',\n standalone: true\n})\nexport class ColorPickerSliderDirective {\n private readonly listenerMove: any;\n private readonly listenerStop: any;\n\n @Input() rgX!: number;\n @Input() rgY!: number;\n\n @Output() dragEnd = new EventEmitter();\n @Output() dragStart = new EventEmitter();\n\n @Output() valueChanged = new EventEmitter<any>();\n\n elementRef = inject(ElementRef);\n\n @HostListener('mousedown', ['$event']) mouseDown(event: MouseEvent): void {\n this.start(event);\n }\n\n @HostListener('touchstart', ['$event']) touchStart(event: MouseEvent): void {\n this.start(event);\n }\n\n constructor() {\n this.listenerMove = (event: MouseEvent) => this.move(event);\n this.listenerStop = () => this.stop();\n }\n\n private move(event: any): void {\n event.preventDefault();\n this.setCursor(event);\n }\n\n private start(event: MouseEvent): void {\n this.setCursor(event);\n\n event.stopPropagation();\n\n document.addEventListener('mouseup', this.listenerStop);\n document.addEventListener('touchend', this.listenerStop);\n document.addEventListener('mousemove', this.listenerMove);\n document.addEventListener('touchmove', this.listenerMove);\n\n this.dragStart.emit();\n }\n\n private stop(): void {\n document.removeEventListener('mouseup', this.listenerStop);\n document.removeEventListener('touchend', this.listenerStop);\n document.removeEventListener('mousemove', this.listenerMove);\n document.removeEventListener('touchmove', this.listenerMove);\n\n this.dragEnd.emit();\n }\n\n private getXAxis(event: any): number {\n const position = this.elementRef.nativeElement.getBoundingClientRect();\n const pageX = (event.pageX !== undefined) ? event.pageX : event.touches[0].pageX;\n return pageX - position.left - window.pageXOffset;\n }\n\n private getYAxis(event: any): number {\n const position = this.elementRef.nativeElement.getBoundingClientRect();\n const pageY = (event.pageY !== undefined) ? event.pageY : event.touches[0].pageY;\n return pageY - position.top - window.pageXOffset;\n }\n\n private setCursor(event: MouseEvent): void {\n const width = this.elementRef.nativeElement.offsetWidth;\n const height = this.elementRef.nativeElement.offsetHeight;\n\n const x = Math.max(0, Math.min(this.getXAxis(event), width));\n const y = Math.max(0, Math.min(this.getYAxis(event), height));\n\n if (this.rgX !== undefined && this.rgY !== undefined) {\n this.valueChanged.emit({x: x, y: y, s: x / width, v: (1 - y / height), rgX: this.rgX, rgY: this.rgY});\n } else if (this.rgX === undefined && this.rgY !== undefined) {\n this.valueChanged.emit({x: x, y: y, v: y / height, rgY: this.rgY});\n } else if (this.rgX !== undefined && this.rgY === undefined) {\n this.valueChanged.emit({x: x, y: y, v: x / width, rgX: this.rgX});\n }\n }\n\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component, computed,\n ElementRef,\n EventEmitter, HostListener,\n inject,\n input,\n Input,\n model,\n OnChanges,\n OnInit,\n Output,\n signal,\n ViewChild\n} from '@angular/core';\nimport {Hsva} from \"./utils/formats\";\nimport {ColorConverterService} from \"./color-converter.service\";\nimport {SliderDimension, SliderPosition} from \"./utils/slider\";\nimport {ColorFormats} from \"./enums/formats\";\nimport {ColorPickerSliderDirective} from \"./color-picker-slider.directive\";\nimport {NgClass, NgStyle} from \"@angular/common\";\nimport {FormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\n\n@Component({\n selector: 'app-color-picker',\n standalone: true,\n imports: [\n ColorPickerSliderDirective,\n NgStyle,\n FormsModule,\n NgClass\n ],\n templateUrl: './color-picker.component.html',\n styleUrl: './color-picker.component.scss'\n})\nexport class ColorPickerComponent extends BaseControlValueAccessorV3<string> implements OnInit, AfterViewInit, OnChanges {\n\n hexColor = input('#00FF00F8');\n enableAdditionalColor = input(false);\n additionalColors = input<string[]>([\n // Gray shades\n '#FFFFFF', // White\n '#F5F5F5',\n '#E0E0E0',\n '#BDBDBD',\n '#9E9E9E',\n '#757575',\n '#616161',\n '#424242',\n '#212121',\n '#000000', // Black\n '',\n\n// Row 1 – Reds to Purples\n '#F44336', // Red\n '#EF5350', // Coral red\n '#AB47BC', // Orchid\n '#EC407A', // Pink\n '#7E57C2', // Lavender purple\n '#5C6BC0', // Indigo\n\n // Row 2 – Teal to Blue\n '#4DB6AC', // Teal\n '#4FC3F7', // Sky blue\n '#4DD0E1', // Cyan\n '#42A5F5', // Blue\n '#5C6BC0', // Blue-violet\n '#1E88E5', // Strong blue\n\n // Row 3 – Greens to Oranges\n '#66BB6A', // Green\n '#9CCC65', // Lime green\n '#D4E157', // Light lime\n '#FFEB3B', // Yellow\n '#FFCA28', // Gold\n '#FFA726', // Orange\n '',\n\n // Calm / soft colors\n '#A8DADC', // Soft teal\n '#F4A261', // Muted orange\n '#E9C46A', // Soft yellow\n '#B5EAD7', // Mint green\n '#C7CEEA', // Soft blue\n '#FFDAC1', // Peach\n '#E2F0CB', // Light green\n '#D0C9FF', // Lavender\n '#FFB7B2', // Blush pink\n '#F1C0E8', // Light magenta\n\n ]);\n enableAlpha = input(true);\n\n @Input() controls: \"default\" | \"only-alpha\" | \"no-alpha\" = \"default\";\n @Output() colorChanged: EventEmitter<string> = new EventEmitter<string>(false);\n @Output() onAlphaChange: EventEmitter<any> = new EventEmitter<any>(false);\n @Output() closeColorPicker = new EventEmitter();\n\n color = new Hsva(0, 1, 1, 1);\n\n COLOR_PICKER_HEIGHT = signal(140);\n COLOR_PICKER_WIDTH = signal(250);\n\n converterService = inject(ColorConverterService);\n cdr = inject(ChangeDetectorRef);\n\n hsva = signal<Hsva>(new Hsva(0, 1, 1, 1));\n private outputColor!: Hsva;\n selectedColor = signal(\"#000000\");\n\n private sliderDimMax = signal<SliderDimension>(new SliderDimension(0, 1, 1, 1));\n public slider = signal<SliderPosition>(new SliderPosition(0, 1, 1, 1));\n\n hueSliderColor = signal<string | null>(null);\n alphaSliderColor = signal<string | null>(null);\n\n @ViewChild(\"hueSlider\", {static: false}) hueSlider!: ElementRef;\n @ViewChild(\"alphaSlider\", {static: false}) alphaSlider!: ElementRef;\n\n height = computed(() => {\n return `${this.COLOR_PICKER_HEIGHT()}px`;\n });\n\n width = computed(() => {\n return `${this.COLOR_PICKER_WIDTH()}px`;\n });\n // height = signal(`${this.COLOR_PICKER_HEIGHT()}px`);\n // width = signal(`${this.COLOR_PICKER_WIDTH()}px`);\n isTooltip = signal(false);\n\n public format: ColorFormats = ColorFormats.HEX;\n hexColorValue = model('');\n alphaValue = signal(1);\n\n @HostListener('document:mousedown', ['$event'])\n click(event: MouseEvent) {\n if (this.isOutside(event)) {\n // this.emitClose('cancel');\n this.closeColorPicker.emit();\n }\n }\n\n isOutside(event: any) {\n return event.target.classList.contains('ng-color-picker');\n }\n\n protected override onValueReady(value: string): void {\n if (this.converterService.isValidHexColor(value)) {\n this.setHexColor(this.hexColor());\n }\n }\n\n ngOnInit(): void {\n this.setHexColor(this.hexColor(), false);\n }\n\n ngOnChanges(changes: any): void {\n if (changes?.hexColor?.currentValue) {\n this.setHexColor(changes.hexColor.currentValue, false);\n }\n }\n\n ngAfterViewInit(): void {\n const hueWidth = this.hueSlider?.nativeElement.offsetWidth || 140;\n const alphaWidth = this.alphaSlider?.nativeElement.offsetWidth || 140;\n const sliderDimensionMax = new SliderDimension(hueWidth, this.COLOR_PICKER_WIDTH(), this.COLOR_PICKER_HEIGHT(), alphaWidth);\n this.sliderDimMax.set(sliderDimensionMax);\n this.update();\n }\n\n setHexColor(hexColor: string, emit: boolean = true) {\n\n if (!this.enableAlpha()) {\n hexColor = this.converterService.removeAlpha(hexColor);\n }\n\n if (hexColor != null && hexColor != '') {\n const hexToHsva = this.converterService.stringToHsva(hexColor);\n\n if (hexToHsva) {\n this.color = hexToHsva;\n this.hexColorValue.set(hexColor);\n let alphaPercentage = this.mapRange(this.color.a);\n this.alphaValue.set(alphaPercentage);\n }\n }\n\n\n if (this.color) {\n this.slider.set(new SliderPosition(this.color.h, this.color.s, this.color.v, this.color.a));\n this.update();\n } else {\n this.slider.set(new SliderPosition(0, 0, 0, 0));\n this.update();\n }\n\n if (this.converterService.isValidHexColor(hexColor)) {\n if (emit) {\n this.onValueChange(hexColor);\n }\n }\n }\n\n mapRange(value: number): number {\n return Math.round(1 + value * (100 - 1));\n }\n\n public onSliderChange(type: string, event: any) {\n switch (type) {\n case 'saturation-lightness':\n this.hsva().onColorChange(event);\n break;\n case 'hue':\n this.hsva().onHueChange(event);\n break;\n case 'alpha':\n this.hsva().onAlphaChange(event);\n this.onAlphaChange.emit(event);\n break;\n case 'value':\n this.hsva().onValueChange(event);\n break;\n }\n this.update();\n this.setColor(this.outputColor);\n this.hexColorValue.set(this.converterService.toFormat(this.hsva(), ColorFormats.HEX));\n this.alphaValue.set(this.mapRange(this.outputColor.a));\n\n let hex = this.converterService.toFormat(this.hsva(), ColorFormats.HEX);\n if(type == 'saturation-lightness') {\n this.setHexColor(hex, true);\n }\n }\n\n setColor(color: Hsva) {\n this.color = color;\n if (!this.isTooltip()) {\n this.colorChanged.emit(this.converterService.toFormat(this.color, ColorFormats.HEX));\n }\n }\n\n public getBackgroundColor(color: any) {\n return {\n background:\n \"linear-gradient(90deg, rgba(36,0,0,0) 0%, \" + color + \" 100%)\",\n };\n }\n\n private update() {\n this.hsva.set(this.color);\n if (this.sliderDimMax) {\n let rgba = this.converterService.hsvaToRgba(this.hsva()).denormalize();\n let hue = this.converterService\n .hsvaToRgba(new Hsva(this.hsva().h, 1, 1, 1))\n .denormalize();\n\n this.hueSliderColor.set(\"rgb(\" + hue.r + \",\" + hue.g + \",\" + hue.b + \")\");\n this.alphaSliderColor.set(\"rgb(\" + rgba.r + \",\" + rgba.g + \",\" + rgba.b + \")\");\n\n this.outputColor = this.hsva();\n this.selectedColor.set(this.converterService.hsvaToRgba(this.hsva()).toString());\n\n const sliderPosition = new SliderPosition(\n // (this.sHue || this.hsva.h) * this.sliderDimMax.h - 8,\n this.hsva().h * this.sliderDimMax().h - 5,\n this.hsva().s * this.sliderDimMax().s,\n (1 - this.hsva().v) * this.sliderDimMax().v,\n this.hsva().a * this.sliderDimMax().a - 5\n );\n this.slider.set(sliderPosition);\n this.cdr.detectChanges();\n }\n }\n\n onHexColorChange(event: any) {\n const hexCode = event.target.value.toString().trim();\n if (this.converterService.isValidHexColor(hexCode)) {\n this.setHexColor(this.converterService.addHexPrefixIfMissing(hexCode));\n }\n }\n\n alphaChanged(event: any) {\n const input = (event.target as HTMLInputElement).value.trim();\n let value = parseInt(input, 10);\n\n if (isNaN(value)) {\n value = 0;\n }\n value = Math.max(0, Math.min(100, value));\n this.alphaValue.set(value);\n }\n\n onApplyCLicked() {\n this.colorChanged.emit(this.converterService.toFormat(this.color, ColorFormats.HEX));\n }\n\n getColorRows(): string[][] {\n const rows: string[][] = [];\n let currentRow: string[] = [];\n\n for (const color of this.additionalColors()) {\n if (color === '') {\n if (currentRow.length) {\n rows.push(currentRow);\n currentRow = [];\n }\n } else {\n currentRow.push(color);\n }\n }\n\n if (currentRow.length) {\n rows.push(currentRow);\n }\n\n return rows;\n }\n\n onColorSelected(color: string) {\n this.setHexColor(color);\n }\n}\n","<div [ngClass]=\"isTooltip() ? 'shadow-1 bg-white' : ''\">\n\n <div [style.width]=\"width()\">\n\n <!--Saturation and Lightness-->\n <div\n class=\"sl\"\n [style.height]=\"height()\"\n [style.width]=\"width()\"\n colorPickerSlider\n [rgX]=\"1\"\n [rgY]=\"1\"\n (valueChanged)=\"onSliderChange('saturation-lightness', $event)\"\n [style.background-color]=\"hueSliderColor()\">\n\n <!--Saturation & Lightness pointer-->\n <div\n class=\"sl-pointer absolute rounded-full transform -translate-y-1/2 -translate-x-1/2 bg-transparent h-5 w-5 border-4 shadow-1 border-white\"\n [style.left.px]=\"slider().s\"\n [style.top.px]=\"slider().v\">\n </div>\n\n </div>\n\n <div class=\"flex flex-col gap-4 mt-4\" [ngClass]=\"isTooltip() ? 'p-4' : ''\">\n <!--Selected Color-->\n <div class=\"flex gap-5 items-center\">\n\n <!-- <div class=\"relative\">-->\n <!-- <div class=\"selected-color-background\"></div>-->\n <!-- <div-->\n <!-- class=\"h-10 w-10 rounded-xl selected-color\"-->\n <!-- [style.background-color]=\"selectedColor()\">-->\n <!-- </div>-->\n <!-- </div>-->\n\n\n <div class=\"flex flex-col w-full gap-4\">\n <div #hueSlider\n class=\"hue\"\n colorPickerSlider\n (valueChanged)=\"onSliderChange('hue', $event)\"\n [rgX]=\"1\">\n <div class=\"hue-pointer absolute rounded-full top-1/2 transform -translate-y-1/2 -translate-x-1/2 bg-white h-6 w-6 shadow-1 border border-neutral-300\"\n [style.left.px]=\"slider().h\"></div>\n </div>\n\n @if(enableAlpha()) {\n <div #alphaSlider\n class=\"alpha\"\n colorPickerSlider\n [rgX]=\"1\"\n (valueChanged)=\"onSliderChange('alpha', $event)\">\n <div class=\"alpha-gradient\" [ngStyle]=\"getBackgroundColor(alphaSliderColor())\"></div>\n <div class=\"alpha-pointer\"\n [style.left.px]=\"slider().a\"></div>\n </div>\n }\n </div>\n\n </div>\n\n <div class=\"flex items-center gap-3\">\n <div class=\"relative rounded w-full flex items-center bg-gray-50 focus-within:text-neutral-600\">\n <p class=\"absolute text-sm text-blue-500 px-3 pointer-events-none\">HEX</p>\n <input [(ngModel)]=\"hexColorValue\" (input)=\"onHexColorChange($event)\"\n class=\"py-2 pl-12 pr-3 w-36 bg-gray-50 focus:outline-none rounded uppercase\">\n\n </div>\n @if (isTooltip()) {\n <div class=\"px-3 py-2 border border-neutral-300 h-min rounded-md cursor-pointer text-primary-500\"\n (click)=\"onApplyCLicked()\">Apply\n </div>\n }\n </div>\n </div>\n\n </div>\n\n <div class=\"mt-4\">\n @for (row of getColorRows(); let $isLast = $last; track $index) {\n <div class=\"grid grid-cols-8 gap-2 mb-1\">\n @for (color of row; track $index) {\n <div\n (click)=\"onColorSelected(color)\"\n class=\"h-6 w-6 rounded cursor-pointer border border-gray-200\"\n [style.background-color]=\"color\">\n </div>\n }\n </div>\n\n <!-- Separator line unless it's the last row -->\n @if (!$isLast) {\n <div class=\"h-[1px] bg-gray-100 my-2.5 w-full\"></div>\n }\n }\n </div>\n\n\n</div>\n\n\n\n","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef, EmbeddedViewRef, EventEmitter,\n HostListener,\n inject, Injector, OnDestroy, Output,\n ViewContainerRef\n} from '@angular/core';\nimport {ColorPickerComponent} from \"./color-picker.component\";\n\n@Directive({\n selector: '[appColorPicker]',\n standalone: true\n})\nexport class ColorPickerDirective implements OnDestroy{\n\n @Output() colorChanged: EventEmitter<string> = new EventEmitter<string>(false);\n\n private componentRef: ComponentRef<ColorPickerComponent> | null = null;\n\n elementRef = inject(ElementRef);\n viewContainerRef = inject(ViewContainerRef);\n componentFactoryResolver = inject(ComponentFactoryResolver);\n appRef = inject(ApplicationRef);\n injector = inject(Injector);\n\n overlay: any;\n\n @HostListener('click')\n onClick() {\n if (this.componentRef) {\n this.closeColorPicker();\n return;\n }\n\n this.initializeColorPicker();\n }\n\n private initializeColorPicker() {\n if (this.componentRef === null) {\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ColorPickerComponent);\n this.componentRef = componentFactory.create(this.injector);\n\n this.appRef.attachView(this.componentRef.hostView);\n const [domElement] = (this.componentRef.hostView as EmbeddedViewRef<any>).rootNodes;\n const elementRect = this.elementRef.nativeElement.getBoundingClientRect();\n\n this.overlay = document.createElement(\"div\");\n this.overlay.id = \"ng-color-picker\";\n this.overlay.classList.add(\"ng-color-picker\");\n this.overlay.style['position'] = 'fixed';\n this.overlay.style['height'] = '100%';\n this.overlay.style['width'] = '100%';\n this.overlay.style['z-index'] = 2000;\n this.overlay.style['top'] = '0';\n this.overlay.style['left'] = '0';\n\n\n this.componentRef.location.nativeElement.style.position = 'absolute';\n this.componentRef.location.nativeElement.style['z-index'] = 2001;\n this.componentRef.location.nativeElement.style.top = `${elementRect.bottom + 20}px`;\n this.componentRef.location.nativeElement.style.left = `${elementRect.left}px`;\n this.componentRef.instance.COLOR_PICKER_HEIGHT.set(140);\n this.componentRef.instance.COLOR_PICKER_WIDTH.set(250);\n this.componentRef.instance.isTooltip.set(true);\n\n this.componentRef.instance.colorChanged.subscribe((colorCode: string) => {\n this.colorChanged.emit(colorCode);\n this.closeColorPicker();\n });\n\n this.componentRef.instance.closeColorPicker.subscribe(() => {\n this.closeColorPicker();\n });\n\n document.body.appendChild(this.overlay);\n\n document.body.appendChild(domElement);\n }\n }\n\n // private initializeColorPicker() {\n // if(this.componentRef === null) {\n // const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ColorPickerComponent);\n // this.componentRef = componentFactory.create(this.injector);\n //\n // this.appRef.attachView(this.componentRef.hostView);\n // const [domElement] = (this.componentRef.hostView as EmbeddedViewRef<any>).rootNodes;\n //\n // this.setColorPickerProperties();\n //\n // document.body.appendChild(domElement);\n //\n // }\n // }\n //\n // private setColorPickerProperties() {\n // if (this.componentRef !== null) {\n // const elementRect = this.elementRef.nativeElement.getBoundingClientRect();\n //\n //\n // this.componentRef.location.nativeElement.style.position = 'absolute';\n // this.componentRef.location.nativeElement.style.top = `${elementRect.bottom + 20}px`;\n // this.componentRef.location.nativeElement.style.left = `${elementRect.left}px`;\n // this.componentRef.instance.COLOR_PICKER_HEIGHT.set(140);\n // this.componentRef.instance.COLOR_PICKER_WIDTH.set(250);\n // this.componentRef.instance.isTooltip.set(true);\n //\n // this.componentRef.instance.colorChanged.subscribe((colorCode: string) => {\n // this.colorChanged.emit(colorCode);\n // this.closeColorPicker();\n // });\n //\n // this.componentRef.instance.closeColorPicker.subscribe(() => {\n // this.closeColorPicker();\n // });\n // }\n // }\n\n closeColorPicker() {\n\n if (this.componentRef) {\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.overlay.remove();\n this.componentRef = null;\n }\n // this.viewContainerRef.clear();\n // this.componentRef = null;\n }\n\n ngOnDestroy(): void {\n this.closeColorPicker();\n }\n\n}\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, ElementRef,\n inject,\n input, OnDestroy,\n output,\n signal, ViewChild\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 size = input<'small' | 'medium' | 'large'>('medium');\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 autoFocus = input<boolean>(false);\n\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\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 if (this.autoFocus()) {\n setTimeout(() => this.inputRef.nativeElement.focus(), 0);\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 sizeMap: Record<'small' | 'medium' | 'large', string> = {\n small: '36px',\n medium: '46px',\n large: '50px',\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 #inputRef\n [mask]=\"mask()\"\n class=\"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 [style.height]=\"sizeMap[size()]\"\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 {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';\nimport {\n ContextMenuButtonAction,\n ContextMenuButtonComponent\n} from '../context-menu-button/context-menu-button.component';\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 StatusBadgeComponent,\n SortableTableDirective,\n TableResizableColumnsDirective,\n CdkPortal,\n CheckboxComponent,\n FormsModule,\n TextInputComponent,\n TextButtonSmall,\n DynamicRendererComponent,\n ContextMenuButtonComponent\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: ContextMenuButtonAction = {\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-button (onActionClicked)=\"_onActionClicked($event, item, null)\"\n [actions]=\"getContextMenuActions(column.actionsConfig?.threeDotMenuActions ?? [])\"></app-context-menu-button>\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 {\n Directive,\n ElementRef,\n HostListener,\n Input,\n Type,\n inject,\n} from '@angular/core';\nimport {OverlayService} from '@ngl';\n\n\n@Directive({\n selector: '[libOpenFloatingMenu]',\n standalone: true,\n})\nexport class OpenFloatingMenuDirective {\n private elementRef = inject(ElementRef<HTMLElement>);\n private overlayService = inject(OverlayService);\n\n @Input('libOpenFloatingMenu') component!: Type<unknown>;\n\n @Input() floatingMenuPositionPreference:\n | 'topLeft'\n | 'topCenter'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomCenter'\n | 'bottomRight' = 'bottomCenter';\n\n @HostListener('click')\n onClick(): void {\n if (!this.component) return;\n\n this.overlayService.openNearElement(this.component, this.elementRef.nativeElement, {\n positionPreference: this.floatingMenuPositionPreference,\n });\n }\n}\n","import {AfterViewInit, Component, input, output, Type} from '@angular/core';\nimport {InfiniteScrollDirective} from 'ngx-infinite-scroll';\nimport { ShimmerComponent } from '../shimmer/shimmer.component';\nimport { TextInputComponent } from '../../inputs/text-input/text-input.component';\nimport { NoDataTableComponent } from '../no-data-table/no-data-table.component';\nimport { DynamicRendererComponent } from '../dynamic-renderer/dynamic-renderer.component';\nimport { PaginationState } from '../../base/base-pagination-state';\nimport {TableActionEvent, TableStateEvent} from '../data-table/data-table.component';\nimport { PaginationEvent } from '../pagination/pagination.component';\n\n@Component({\n selector: 'app-listview',\n imports: [\n InfiniteScrollDirective,\n TextInputComponent,\n DynamicRendererComponent,\n ShimmerComponent,\n NoDataTableComponent,\n ],\n standalone: true,\n templateUrl: './listview.component.html',\n styleUrl: './listview.component.scss'\n})\nexport class ListviewComponent implements AfterViewInit {\n\n state = input.required<PaginationState<any>>();\n data = input<any>();\n pageSize = input(20);\n component = input.required<Type<any>>();\n enableSearch = input(true);\n enableSearchFullWidth = input(true);\n\n onStateChanged = output<TableStateEvent>();\n onActionPerformed = output<TableActionEvent>();\n\n private searchText: string = '';\n\n ngAfterViewInit(): void {\n let paginationEvent: PaginationEvent = {\n pageNumber: 1, pageSize: this.pageSize()\n }\n\n let state: TableStateEvent = {\n searchText: '',\n paginationEvent: paginationEvent,\n };\n console.log('update state');\n this.onStateChanged.emit(state);\n }\n\n onSearchTextChanged($event: string) {\n this.state().clearState();\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 };\n this.onStateChanged.emit(tableStateEvent);\n }\n\n onScroll() {\n let nextPage = this.state().pageNumber() + 1;\n let paginationEvent: PaginationEvent = {\n pageNumber: nextPage, pageSize: this.pageSize()\n }\n let tableStateEvent: TableStateEvent = {\n searchText: this.searchText,\n paginationEvent: paginationEvent,\n };\n this.onStateChanged.emit(tableStateEvent);\n }\n\n onRowAction($event: TableActionEvent) {\n this.onActionPerformed.emit($event);\n }\n}\n","<div class=\"h-full flex flex-col gap-4\">\n\n @if (enableSearch()) {\n <app-text-input\n title=\"Search...\"\n [iconSrc]=\"'assets/icons/search.svg'\"\n placeholder=\"Search...\"\n type=\"search\"\n [fullWidth]=\"enableSearchFullWidth()\"\n (changeValue)=\"onSearchTextChanged($event)\">\n </app-text-input>\n }\n\n @if (state().success() && state().items().length <= 0) {\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 }\n\n @if (state().items().length > 0) {\n <div class=\"flex flex-col overflow-auto\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\">\n @for (item of state().items(); track $index) {\n <app-dynamic-renderer\n [component]=\"component()\"\n [rowData]=\"item\"\n [data]=\"data()\"\n [rowPosition]=\"$index\"\n [isLastRow]=\"$last\"\n (actionPerformed)=\"onRowAction($event)\">\n </app-dynamic-renderer>\n }\n </div>\n }\n\n <!-- Shimmer-->\n @if (state().loading()) {\n <div class=\"flex flex-col gap-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 }\n\n\n</div>\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';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'app-base-overlay',\n imports: [\n NgClass\n ],\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 enableDefaultLayout = input(true);\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\n @if (enableDefaultLayout()) {\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\"\n (click)=\"goBack()\">\n <svg class=\"w-[18px] h-[18px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M20 11V13H8.00003L13.5 18.5L12.08 19.92L4.16003 12L12.08 4.07996L13.5 5.49996L8.00003 11H20Z\"\n 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 <div class=\"flex-1 min-h-0 overflow-y-auto\" [ngClass]=\"enableDefaultLayout() ? 'px-5 py-4' : ''\">\n <ng-content select=\"[body]\">\n <ng-container #container></ng-container>\n </ng-content>\n </div>\n\n\n @if (enableDefaultLayout()) {\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\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","import {Component, Input} from '@angular/core';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'lib-tooltip',\n imports: [\n NgClass\n ],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.css'\n})\nexport class TooltipComponent {\n @Input() text = '';\n @Input() tooltipClass: string | string[] | Set<string> | { [klass: string]: any } = [];\n}\n","<div class=\"bg-gray-800 text-white text-xs px-3 py-1 rounded shadow-lg max-w-xs whitespace-nowrap z-50\"\n [ngClass]=\"tooltipClass\">\n {{ text }}\n</div>\n","import {Directive, effect, ElementRef, HostListener, inject, Input, input} from '@angular/core';\nimport {ConnectionPositionPair, Overlay, OverlayPositionBuilder, OverlayRef} from '@angular/cdk/overlay';\nimport {TooltipComponent} from './tooltip.component';\nimport {ComponentPortal} from '@angular/cdk/portal';\n\n@Directive({\n selector: '[libTooltip]',\n standalone: true,\n})\nexport class TooltipDirective {\n\n private overlay = inject(Overlay);\n private elementRef = inject(ElementRef);\n private positionBuilder = inject(OverlayPositionBuilder);\n\n private overlayRef: OverlayRef | null = null;\n private longPressTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // tooltipText = input<string>('');\n @Input() libTooltip = '';\n tooltipPosition = input<'top' | 'bottom' | 'left' | 'right' | 'before' | 'after'>('bottom');\n tooltipClass = input<string | string[] | Set<string> | { [klass: string]: any }>({ alias: 'tooltipClass' });\n\n constructor() {\n effect(() => {\n this.hideTooltip();\n });\n }\n\n private showTooltip() {\n if (this.overlayRef?.hasAttached()) return;\n\n const position = this.getPosition(this.tooltipPosition());\n const positionStrategy = this.positionBuilder\n .flexibleConnectedTo(this.elementRef)\n .withPositions([position]);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n\n const tooltipPortal = new ComponentPortal(TooltipComponent);\n const tooltipRef = this.overlayRef.attach(tooltipPortal);\n tooltipRef.instance.text = this.libTooltip;\n tooltipRef.instance.tooltipClass = this.tooltipClass();\n }\n\n private hideTooltip() {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n }\n\n private getPosition(position: string): ConnectionPositionPair {\n switch (position) {\n case 'bottom':\n return {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8,\n };\n case 'left':\n case 'before':\n return {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -8,\n };\n case 'right':\n case 'after':\n return {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: 8,\n };\n default: // 'top'\n return {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8,\n };\n }\n }\n\n private isTouch(): boolean {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n // 👉 Hover for desktop\n @HostListener('mouseenter')\n onMouseEnter() {\n if (!this.isTouch()) {\n this.showTooltip();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n if (!this.isTouch()) {\n this.hideTooltip();\n }\n }\n\n // 👉 Long press for mobile\n @HostListener('touchstart')\n onTouchStart() {\n if (this.isTouch()) {\n this.longPressTimeout = setTimeout(() => {\n this.showTooltip();\n }, 500);\n }\n }\n\n @HostListener('touchend')\n @HostListener('touchcancel')\n onTouchEnd() {\n if (this.longPressTimeout) {\n clearTimeout(this.longPressTimeout);\n this.longPressTimeout = null;\n }\n this.hideTooltip();\n }\n\n}\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":["OverlayService","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/color-picker/utils/formats.ts","../../../projects/ngl/src/components/color-picker/enums/formats.ts","../../../projects/ngl/src/components/color-picker/color-converter.service.ts","../../../projects/ngl/src/components/color-picker/utils/slider.ts","../../../projects/ngl/src/components/color-picker/color-picker-slider.directive.ts","../../../projects/ngl/src/components/color-picker/color-picker.component.ts","../../../projects/ngl/src/components/color-picker/color-picker.component.html","../../../projects/ngl/src/components/color-picker/color-picker.directive.ts","../../../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/floating-menu/open-floating-menu.directive.ts","../../../projects/ngl/src/components/listview/listview.component.ts","../../../projects/ngl/src/components/listview/listview.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.component.ts","../../../projects/ngl/src/components/tooltip/tooltip.component.html","../../../projects/ngl/src/components/tooltip/tooltip.directive.ts","../../../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>(0);\n pageSize = signal<number>(25);\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(Number(response.pageNumber));\n }\n\n if (response?.pageSize) {\n this.pageSize.set(Number(response.pageSize));\n }\n\n if (response?.totalRecords) {\n this.totalRecords.set(Number(response.totalRecords));\n }\n\n if (response?.totalPages) {\n this.totalPages.set(response.totalRecords(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(0);\n this.pageSize.set(25);\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 positionPreference?: 'topLeft' | 'topRight' | 'topCenter' |\n 'bottomLeft' | 'bottomRight' | 'bottomCenter' |\n 'leftTop' | 'leftCenter' | 'leftBottom' |\n 'rightTop' | 'rightCenter' | 'rightBottom' |\n 'center';\n disableClose?: boolean;\n data?: any;\n scrollStrategy?: 'noop' | 'block' | 'reposition' | 'close';\n isMobileResponsive?: boolean;\n }\n ): DialogRef<any, T> {\n\n const {\n positionPreference = 'bottomLeft',\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 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 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(positionMappings[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 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<!-- <!– <th class=\"p-4 text-center \">LICENSE EXPIRING</th>–>-->\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<!-- <!– <td class=\"px-4 text-body2 text-center\">{{ item.licenseExpiringDate |date:'MMM d, y h:mm a' }}</td>–>-->\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';\n\n@Component({\n selector: 'app-close-button',\n standalone: true,\n imports: [\n\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 <svg class=\"w-12 h-12 text-neutral-800\" xmlns=\"http://www.w3.org/2000/svg\" id=\"mdi-window-close\" viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M13.46,12L19,17.54V19H17.54L12,13.46L6.46,19H5V17.54L10.54,12L5,6.46V5H6.46L12,10.54L17.54,5H19V6.46L13.46,12Z\"/>\n </svg>\n\n</p>\n","import { EventEmitter, Output } from '@angular/core';\n\nexport class Rgba {\n constructor(public r: number, public g: number, public b: number, public a: number) {}\n\n public denormalize():Rgba{\n this.r = Math.round(this.r * 255);\n this.g = Math.round(this.g * 255);\n this.b = Math.round(this.b * 255);\n return this;\n }\n\n public toString():string{\n this.denormalize();\n let output =\n 'rgb' +\n (this.a != 1 ? 'a(' : '(')+\n this.r + ', ' +\n this.g + ', ' +\n this.b +\n (this.a != 1 ? ', ' + this.a.toPrecision(2) + ')' : ')')\n return output;\n }\n\n\n}\n\nexport class Hsva {\n\n public onChange:EventEmitter<Hsva> = new EventEmitter<Hsva>(true);\n\n constructor(public h: number, public s: number, public v: number, public a: number) {\n\n }\n\n public onColorChange(value: { s: number, v: number, rgX: number, rgY: number }): void {\n this.s = value.s / value.rgX;\n this.v = value.v / value.rgY;\n }\n\n public onHueChange(value: { v: number, rgX: number }): void {\n this.h = value.v / value.rgX;\n // this.sliderH = this.hsva.h;\n }\n\n public onValueChange(value: { v: number, rgX: number }): void {\n this.v = value.v / value.rgX;\n }\n\n public onAlphaChange(value: { v: number, rgX: number }): void {\n this.a = value.v / value.rgX;\n }\n\n}\n\nexport class Hsla {\n constructor(public h: number, public s: number, public l: number, public a: number) {}\n\n public denormalize():Hsla{\n this.h = Math.round(this.h * 360);\n this.s = Math.round(this.s * 100);\n this.l = Math.round(this.l * 100);\n return this;\n }\n public toString():string{\n let output =\n 'hsl' +\n (this.a != 1 ? 'a(': '(') +\n this.h + ', ' +\n this.s + '%, ' +\n this.l + '%' +\n (this.a != 1 ? ', ' + this.a.toPrecision(2) + ')' : ')')\n return output;\n }\n\n}\n\nexport class Cmyk {\n constructor(public c: number, public m: number, public y: number, public k: number, public a: number = 1) {}\n}\n","export enum ColorFormats {\n HEX,\n RGBA,\n HSLA,\n CMYK\n }","import { Injectable } from \"@angular/core\";\nimport {Cmyk, Hsla, Hsva, Rgba} from \"./utils/formats\";\nimport {ColorFormats} from \"./enums/formats\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorConverterService {\n // private active: ColorPickerComponent | null = null;\n\n constructor() {}\n\n // public setActive(active: ColorPickerComponent | null): void {\n // this.active = active;\n // }\n\n toFormat(hsva: Hsva | null, format: ColorFormats) {\n var output = \"\";\n if (hsva) {\n switch (format) {\n case ColorFormats.HEX:\n var rgba: Rgba = this.hsvaToRgba(hsva);\n rgba.denormalize();\n var output = this.rgbaToHex(rgba, true);\n break;\n case ColorFormats.HSLA:\n var hsla: Hsla = this.hsva2hsla(hsva);\n hsla.denormalize();\n var output = hsla.toString();\n break;\n case ColorFormats.RGBA:\n var rgba: Rgba = this.hsvaToRgba(hsva);\n var output = rgba.toString();\n break;\n case ColorFormats.CMYK:\n var rgba: Rgba = this.hsvaToRgba(hsva);\n var cmyk: Cmyk = this.rgbaToCmyk(rgba);\n break;\n }\n }\n return output;\n }\n\n public stringToFormat(color: string, format: ColorFormats) {\n var hsva = this.stringToHsva(color, true);\n return this.toFormat(hsva, format);\n }\n\n public hsva2hsla(hsva: Hsva): Hsla {\n const h = hsva.h,\n s = hsva.s,\n v = hsva.v,\n a = hsva.a;\n\n if (v === 0) {\n return new Hsla(h, 0, 0, a);\n } else if (s === 0 && v === 1) {\n return new Hsla(h, 1, 1, a);\n } else {\n const l = (v * (2 - s)) / 2;\n\n return new Hsla(h, (v * s) / (1 - Math.abs(2 * l - 1)), l, a);\n }\n }\n\n public hsla2hsva(hsla: Hsla): Hsva {\n const h = Math.min(hsla.h, 1),\n s = Math.min(hsla.s, 1);\n const l = Math.min(hsla.l, 1),\n a = Math.min(hsla.a, 1);\n\n if (l === 0) {\n return new Hsva(h, 0, 0, a);\n } else {\n const v = l + (s * (1 - Math.abs(2 * l - 1))) / 2;\n\n return new Hsva(h, (2 * (v - l)) / v, v, a);\n }\n }\n\n public hsvaToRgba(hsva: Hsva): Rgba {\n let r: number, g: number, b: number;\n\n const h = hsva.h,\n s = hsva.s,\n v = hsva.v,\n a = hsva.a;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n (r = v), (g = t), (b = p);\n break;\n case 1:\n (r = q), (g = v), (b = p);\n break;\n case 2:\n (r = p), (g = v), (b = t);\n break;\n case 3:\n (r = p), (g = q), (b = v);\n break;\n case 4:\n (r = t), (g = p), (b = v);\n break;\n case 5:\n (r = v), (g = p), (b = q);\n break;\n default:\n (r = 0), (g = 0), (b = 0);\n }\n\n return new Rgba(r, g, b, a);\n }\n\n public cmykToRgb(cmyk: Cmyk): Rgba {\n const r = (1 - cmyk.c) * (1 - cmyk.k);\n const g = (1 - cmyk.m) * (1 - cmyk.k);\n const b = (1 - cmyk.y) * (1 - cmyk.k);\n\n return new Rgba(r, g, b, cmyk.a);\n }\n\n public rgbaToCmyk(rgba: Rgba): Cmyk {\n const k: number = 1 - Math.max(rgba.r, rgba.g, rgba.b);\n\n if (k === 1) {\n return new Cmyk(0, 0, 0, 1, rgba.a);\n } else {\n const c = (1 - rgba.r - k) / (1 - k);\n const m = (1 - rgba.g - k) / (1 - k);\n const y = (1 - rgba.b - k) / (1 - k);\n\n return new Cmyk(c, m, y, k, rgba.a);\n }\n }\n\n public rgbaToHsva(rgba: Rgba): Hsva {\n let h: number, s: number;\n\n const r = Math.min(rgba.r, 1),\n g = Math.min(rgba.g, 1);\n const b = Math.min(rgba.b, 1),\n a = Math.min(rgba.a, 1);\n\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n\n const v: number = max,\n d = max - min;\n\n s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n h = 0;\n }\n\n h /= 6;\n }\n\n return new Hsva(h, s, v, a);\n }\n\n public rgbaToHex(rgba: Rgba, allowHex8?: boolean): string {\n /* tslint:disable:no-bitwise */\n let hex =\n \"#\" +\n ((1 << 24) | (rgba.r << 16) | (rgba.g << 8) | rgba.b)\n .toString(16)\n .substr(1);\n\n if (rgba.a != 1) {\n hex += ((1 << 8) | Math.round(rgba.a * 255)).toString(16).substr(1);\n }\n /* tslint:enable:no-bitwise */\n\n return hex;\n }\n\n public normalizeCMYK(cmyk: Cmyk): Cmyk {\n return new Cmyk(\n cmyk.c / 100,\n cmyk.m / 100,\n cmyk.y / 100,\n cmyk.k / 100,\n cmyk.a\n );\n }\n\n public denormalizeCMYK(cmyk: Cmyk): Cmyk {\n return new Cmyk(\n Math.floor(cmyk.c * 100),\n Math.floor(cmyk.m * 100),\n Math.floor(cmyk.y * 100),\n Math.floor(cmyk.k * 100),\n cmyk.a\n );\n }\n\n public denormalizeRGBA(rgba: Rgba): Rgba {\n return new Rgba(\n Math.round(rgba.r * 255),\n Math.round(rgba.g * 255),\n Math.round(rgba.b * 255),\n rgba.a\n );\n }\n\n public stringToHsva(\n colorString: string = \"\",\n allowHex8: boolean = true\n ): Hsva | null {\n let hsva: Hsva | null = null;\n\n colorString = (colorString || \"\").toLowerCase();\n\n const stringParsers = [\n {\n re: /(rgb)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*%?,\\s*(\\d{1,3})\\s*%?(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n parse: function (execResult: any) {\n return new Rgba(\n parseInt(execResult[2], 10) / 255,\n parseInt(execResult[3], 10) / 255,\n parseInt(execResult[4], 10) / 255,\n isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5])\n );\n },\n },\n {\n re: /(hsl)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})%\\s*,\\s*(\\d{1,3})%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n parse: function (execResult: any) {\n return new Hsla(\n parseInt(execResult[2], 10) / 360,\n parseInt(execResult[3], 10) / 100,\n parseInt(execResult[4], 10) / 100,\n isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5])\n );\n },\n },\n ];\n\n if (allowHex8) {\n stringParsers.push({\n re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})?$/,\n parse: function (execResult: any) {\n return new Rgba(\n parseInt(execResult[1], 16) / 255,\n parseInt(execResult[2], 16) / 255,\n parseInt(execResult[3], 16) / 255,\n parseInt(execResult[4] || \"FF\", 16) / 255\n );\n },\n });\n } else {\n stringParsers.push({\n re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/,\n parse: function (execResult: any) {\n return new Rgba(\n parseInt(execResult[1], 16) / 255,\n parseInt(execResult[2], 16) / 255,\n parseInt(execResult[3], 16) / 255,\n 1\n );\n },\n });\n }\n\n stringParsers.push({\n re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/,\n parse: function (execResult: any) {\n return new Rgba(\n parseInt(execResult[1] + execResult[1], 16) / 255,\n parseInt(execResult[2] + execResult[2], 16) / 255,\n parseInt(execResult[3] + execResult[3], 16) / 255,\n 1\n );\n },\n });\n\n for (const key in stringParsers) {\n if (stringParsers.hasOwnProperty(key)) {\n const parser = stringParsers[key];\n\n const match = parser.re.exec(colorString),\n color: any = match && parser.parse(match);\n\n if (color) {\n if (color instanceof Rgba) {\n hsva = this.rgbaToHsva(color);\n } else if (color instanceof Hsla) {\n hsva = this.hsla2hsva(color);\n }\n\n return hsva;\n }\n }\n }\n\n return hsva;\n }\n\n public outputFormat(hsva: Hsva): string {\n return this.hsvaToRgba(hsva).toString();\n }\n\n public getFormatByString(color: string): string {\n if (color) {\n color = color.toLowerCase();\n let regexHex: RegExp = /(#([\\da-f]{3}(?:[\\da-f]{3})?(?:[\\da-f]{2})?))/;\n let regexRGBA: RegExp =\n /(rgba\\((\\d{1,3},\\s?){3}(1|0?\\.\\d+)\\)|rgb\\(\\d{1,3}(,\\s?\\d{1,3}){2}\\))/;\n let regexHSLA: RegExp =\n /(hsla\\((\\d{1,3}%?,\\s?){3}(1|0?\\.\\d+)\\)|hsl\\(\\d{1,3}%?(,\\s?\\d{1,3}%?){2}\\))/;\n if (regexHex.test(color)) {\n return \"hex\";\n } else if (regexRGBA.test(color)) {\n return \"rgba\";\n } else if (regexHSLA.test(color)) {\n return \"hsla\";\n }\n }\n return \"hex\";\n }\n\n isValidHexColor(hex?: string): boolean {\n if(!hex) {\n return false;\n }\n\n const hexColorPattern = /^#?([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/;\n return hexColorPattern.test(hex);\n }\n\n addHexPrefixIfMissing(hex: string): string {\n if (!hex.startsWith('#')) {\n return '#' + hex;\n }\n return hex;\n }\n\n removeAlpha(hex: string): string {\n const cleanHex = hex.startsWith('#') ? hex.slice(1) : hex;\n const rgbHex = cleanHex.length === 8 ? cleanHex.slice(0, 6) : cleanHex;\n return `#${rgbHex.toUpperCase()}`;\n }\n}\n","export class SliderPosition {\n constructor(public h: number, public s: number, public v: number, public a: number) {}\n}\n \nexport class SliderDimension {\n constructor(public h: number, public s: number, public v: number, public a: number) {}\n}","import {Directive, ElementRef, EventEmitter, HostListener, inject, Input, Output} from '@angular/core';\n\n@Directive({\n selector: '[colorPickerSlider]',\n standalone: true\n})\nexport class ColorPickerSliderDirective {\n private readonly listenerMove: any;\n private readonly listenerStop: any;\n\n @Input() rgX!: number;\n @Input() rgY!: number;\n\n @Output() dragEnd = new EventEmitter();\n @Output() dragStart = new EventEmitter();\n\n @Output() valueChanged = new EventEmitter<any>();\n\n elementRef = inject(ElementRef);\n\n @HostListener('mousedown', ['$event']) mouseDown(event: MouseEvent): void {\n this.start(event);\n }\n\n @HostListener('touchstart', ['$event']) touchStart(event: MouseEvent): void {\n this.start(event);\n }\n\n constructor() {\n this.listenerMove = (event: MouseEvent) => this.move(event);\n this.listenerStop = () => this.stop();\n }\n\n private move(event: any): void {\n event.preventDefault();\n this.setCursor(event);\n }\n\n private start(event: MouseEvent): void {\n this.setCursor(event);\n\n event.stopPropagation();\n\n document.addEventListener('mouseup', this.listenerStop);\n document.addEventListener('touchend', this.listenerStop);\n document.addEventListener('mousemove', this.listenerMove);\n document.addEventListener('touchmove', this.listenerMove);\n\n this.dragStart.emit();\n }\n\n private stop(): void {\n document.removeEventListener('mouseup', this.listenerStop);\n document.removeEventListener('touchend', this.listenerStop);\n document.removeEventListener('mousemove', this.listenerMove);\n document.removeEventListener('touchmove', this.listenerMove);\n\n this.dragEnd.emit();\n }\n\n private getXAxis(event: any): number {\n const position = this.elementRef.nativeElement.getBoundingClientRect();\n const pageX = (event.pageX !== undefined) ? event.pageX : event.touches[0].pageX;\n return pageX - position.left - window.pageXOffset;\n }\n\n private getYAxis(event: any): number {\n const position = this.elementRef.nativeElement.getBoundingClientRect();\n const pageY = (event.pageY !== undefined) ? event.pageY : event.touches[0].pageY;\n return pageY - position.top - window.pageXOffset;\n }\n\n private setCursor(event: MouseEvent): void {\n const width = this.elementRef.nativeElement.offsetWidth;\n const height = this.elementRef.nativeElement.offsetHeight;\n\n const x = Math.max(0, Math.min(this.getXAxis(event), width));\n const y = Math.max(0, Math.min(this.getYAxis(event), height));\n\n if (this.rgX !== undefined && this.rgY !== undefined) {\n this.valueChanged.emit({x: x, y: y, s: x / width, v: (1 - y / height), rgX: this.rgX, rgY: this.rgY});\n } else if (this.rgX === undefined && this.rgY !== undefined) {\n this.valueChanged.emit({x: x, y: y, v: y / height, rgY: this.rgY});\n } else if (this.rgX !== undefined && this.rgY === undefined) {\n this.valueChanged.emit({x: x, y: y, v: x / width, rgX: this.rgX});\n }\n }\n\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component, computed,\n ElementRef,\n EventEmitter, HostListener,\n inject,\n input,\n Input,\n model,\n OnChanges,\n OnInit,\n Output,\n signal,\n ViewChild\n} from '@angular/core';\nimport {Hsva} from \"./utils/formats\";\nimport {ColorConverterService} from \"./color-converter.service\";\nimport {SliderDimension, SliderPosition} from \"./utils/slider\";\nimport {ColorFormats} from \"./enums/formats\";\nimport {ColorPickerSliderDirective} from \"./color-picker-slider.directive\";\nimport {NgClass, NgStyle} from \"@angular/common\";\nimport {FormsModule} from \"@angular/forms\";\nimport {BaseControlValueAccessorV3} from '../../base/base-control-value-accessor-v3';\n\n@Component({\n selector: 'app-color-picker',\n standalone: true,\n imports: [\n ColorPickerSliderDirective,\n NgStyle,\n FormsModule,\n NgClass\n ],\n templateUrl: './color-picker.component.html',\n styleUrl: './color-picker.component.scss'\n})\nexport class ColorPickerComponent extends BaseControlValueAccessorV3<string> implements OnInit, AfterViewInit, OnChanges {\n\n hexColor = input('#00FF00F8');\n enableAdditionalColor = input(false);\n additionalColors = input<string[]>([\n // Gray shades\n '#FFFFFF', // White\n '#F5F5F5',\n '#E0E0E0',\n '#BDBDBD',\n '#9E9E9E',\n '#757575',\n '#616161',\n '#424242',\n '#212121',\n '#000000', // Black\n '',\n\n// Row 1 – Reds to Purples\n '#F44336', // Red\n '#EF5350', // Coral red\n '#AB47BC', // Orchid\n '#EC407A', // Pink\n '#7E57C2', // Lavender purple\n '#5C6BC0', // Indigo\n\n // Row 2 – Teal to Blue\n '#4DB6AC', // Teal\n '#4FC3F7', // Sky blue\n '#4DD0E1', // Cyan\n '#42A5F5', // Blue\n '#5C6BC0', // Blue-violet\n '#1E88E5', // Strong blue\n\n // Row 3 – Greens to Oranges\n '#66BB6A', // Green\n '#9CCC65', // Lime green\n '#D4E157', // Light lime\n '#FFEB3B', // Yellow\n '#FFCA28', // Gold\n '#FFA726', // Orange\n '',\n\n // Calm / soft colors\n '#A8DADC', // Soft teal\n '#F4A261', // Muted orange\n '#E9C46A', // Soft yellow\n '#B5EAD7', // Mint green\n '#C7CEEA', // Soft blue\n '#FFDAC1', // Peach\n '#E2F0CB', // Light green\n '#D0C9FF', // Lavender\n '#FFB7B2', // Blush pink\n '#F1C0E8', // Light magenta\n\n ]);\n enableAlpha = input(true);\n\n @Input() controls: \"default\" | \"only-alpha\" | \"no-alpha\" = \"default\";\n @Output() colorChanged: EventEmitter<string> = new EventEmitter<string>(false);\n @Output() onAlphaChange: EventEmitter<any> = new EventEmitter<any>(false);\n @Output() closeColorPicker = new EventEmitter();\n\n color = new Hsva(0, 1, 1, 1);\n\n COLOR_PICKER_HEIGHT = signal(140);\n COLOR_PICKER_WIDTH = signal(250);\n\n converterService = inject(ColorConverterService);\n cdr = inject(ChangeDetectorRef);\n\n hsva = signal<Hsva>(new Hsva(0, 1, 1, 1));\n private outputColor!: Hsva;\n selectedColor = signal(\"#000000\");\n\n private sliderDimMax = signal<SliderDimension>(new SliderDimension(0, 1, 1, 1));\n public slider = signal<SliderPosition>(new SliderPosition(0, 1, 1, 1));\n\n hueSliderColor = signal<string | null>(null);\n alphaSliderColor = signal<string | null>(null);\n\n @ViewChild(\"hueSlider\", {static: false}) hueSlider!: ElementRef;\n @ViewChild(\"alphaSlider\", {static: false}) alphaSlider!: ElementRef;\n\n height = computed(() => {\n return `${this.COLOR_PICKER_HEIGHT()}px`;\n });\n\n width = computed(() => {\n return `${this.COLOR_PICKER_WIDTH()}px`;\n });\n // height = signal(`${this.COLOR_PICKER_HEIGHT()}px`);\n // width = signal(`${this.COLOR_PICKER_WIDTH()}px`);\n isTooltip = signal(false);\n\n public format: ColorFormats = ColorFormats.HEX;\n hexColorValue = model('');\n alphaValue = signal(1);\n\n @HostListener('document:mousedown', ['$event'])\n click(event: MouseEvent) {\n if (this.isOutside(event)) {\n // this.emitClose('cancel');\n this.closeColorPicker.emit();\n }\n }\n\n isOutside(event: any) {\n return event.target.classList.contains('ng-color-picker');\n }\n\n protected override onValueReady(value: string): void {\n if (this.converterService.isValidHexColor(value)) {\n this.setHexColor(this.hexColor());\n }\n }\n\n ngOnInit(): void {\n this.setHexColor(this.hexColor(), false);\n }\n\n ngOnChanges(changes: any): void {\n if (changes?.hexColor?.currentValue) {\n this.setHexColor(changes.hexColor.currentValue, false);\n }\n }\n\n ngAfterViewInit(): void {\n const hueWidth = this.hueSlider?.nativeElement.offsetWidth || 140;\n const alphaWidth = this.alphaSlider?.nativeElement.offsetWidth || 140;\n const sliderDimensionMax = new SliderDimension(hueWidth, this.COLOR_PICKER_WIDTH(), this.COLOR_PICKER_HEIGHT(), alphaWidth);\n this.sliderDimMax.set(sliderDimensionMax);\n this.update();\n }\n\n setHexColor(hexColor: string, emit: boolean = true) {\n\n if (!this.enableAlpha()) {\n hexColor = this.converterService.removeAlpha(hexColor);\n }\n\n if (hexColor != null && hexColor != '') {\n const hexToHsva = this.converterService.stringToHsva(hexColor);\n\n if (hexToHsva) {\n this.color = hexToHsva;\n this.hexColorValue.set(hexColor);\n let alphaPercentage = this.mapRange(this.color.a);\n this.alphaValue.set(alphaPercentage);\n }\n }\n\n\n if (this.color) {\n this.slider.set(new SliderPosition(this.color.h, this.color.s, this.color.v, this.color.a));\n this.update();\n } else {\n this.slider.set(new SliderPosition(0, 0, 0, 0));\n this.update();\n }\n\n if (this.converterService.isValidHexColor(hexColor)) {\n if (emit) {\n this.onValueChange(hexColor);\n }\n }\n }\n\n mapRange(value: number): number {\n return Math.round(1 + value * (100 - 1));\n }\n\n public onSliderChange(type: string, event: any) {\n switch (type) {\n case 'saturation-lightness':\n this.hsva().onColorChange(event);\n break;\n case 'hue':\n this.hsva().onHueChange(event);\n break;\n case 'alpha':\n this.hsva().onAlphaChange(event);\n this.onAlphaChange.emit(event);\n break;\n case 'value':\n this.hsva().onValueChange(event);\n break;\n }\n this.update();\n this.setColor(this.outputColor);\n this.hexColorValue.set(this.converterService.toFormat(this.hsva(), ColorFormats.HEX));\n this.alphaValue.set(this.mapRange(this.outputColor.a));\n\n let hex = this.converterService.toFormat(this.hsva(), ColorFormats.HEX);\n if(type == 'saturation-lightness') {\n this.setHexColor(hex, true);\n }\n }\n\n setColor(color: Hsva) {\n this.color = color;\n if (!this.isTooltip()) {\n this.colorChanged.emit(this.converterService.toFormat(this.color, ColorFormats.HEX));\n }\n }\n\n public getBackgroundColor(color: any) {\n return {\n background:\n \"linear-gradient(90deg, rgba(36,0,0,0) 0%, \" + color + \" 100%)\",\n };\n }\n\n private update() {\n this.hsva.set(this.color);\n if (this.sliderDimMax) {\n let rgba = this.converterService.hsvaToRgba(this.hsva()).denormalize();\n let hue = this.converterService\n .hsvaToRgba(new Hsva(this.hsva().h, 1, 1, 1))\n .denormalize();\n\n this.hueSliderColor.set(\"rgb(\" + hue.r + \",\" + hue.g + \",\" + hue.b + \")\");\n this.alphaSliderColor.set(\"rgb(\" + rgba.r + \",\" + rgba.g + \",\" + rgba.b + \")\");\n\n this.outputColor = this.hsva();\n this.selectedColor.set(this.converterService.hsvaToRgba(this.hsva()).toString());\n\n const sliderPosition = new SliderPosition(\n // (this.sHue || this.hsva.h) * this.sliderDimMax.h - 8,\n this.hsva().h * this.sliderDimMax().h - 5,\n this.hsva().s * this.sliderDimMax().s,\n (1 - this.hsva().v) * this.sliderDimMax().v,\n this.hsva().a * this.sliderDimMax().a - 5\n );\n this.slider.set(sliderPosition);\n this.cdr.detectChanges();\n }\n }\n\n onHexColorChange(event: any) {\n const hexCode = event.target.value.toString().trim();\n if (this.converterService.isValidHexColor(hexCode)) {\n this.setHexColor(this.converterService.addHexPrefixIfMissing(hexCode));\n }\n }\n\n alphaChanged(event: any) {\n const input = (event.target as HTMLInputElement).value.trim();\n let value = parseInt(input, 10);\n\n if (isNaN(value)) {\n value = 0;\n }\n value = Math.max(0, Math.min(100, value));\n this.alphaValue.set(value);\n }\n\n onApplyCLicked() {\n this.colorChanged.emit(this.converterService.toFormat(this.color, ColorFormats.HEX));\n }\n\n getColorRows(): string[][] {\n const rows: string[][] = [];\n let currentRow: string[] = [];\n\n for (const color of this.additionalColors()) {\n if (color === '') {\n if (currentRow.length) {\n rows.push(currentRow);\n currentRow = [];\n }\n } else {\n currentRow.push(color);\n }\n }\n\n if (currentRow.length) {\n rows.push(currentRow);\n }\n\n return rows;\n }\n\n onColorSelected(color: string) {\n this.setHexColor(color);\n }\n}\n","<div [ngClass]=\"isTooltip() ? 'shadow-1 bg-white' : ''\">\n\n <div [style.width]=\"width()\">\n\n <!--Saturation and Lightness-->\n <div\n class=\"sl\"\n [style.height]=\"height()\"\n [style.width]=\"width()\"\n colorPickerSlider\n [rgX]=\"1\"\n [rgY]=\"1\"\n (valueChanged)=\"onSliderChange('saturation-lightness', $event)\"\n [style.background-color]=\"hueSliderColor()\">\n\n <!--Saturation & Lightness pointer-->\n <div\n class=\"sl-pointer absolute rounded-full transform -translate-y-1/2 -translate-x-1/2 bg-transparent h-5 w-5 border-4 shadow-1 border-white\"\n [style.left.px]=\"slider().s\"\n [style.top.px]=\"slider().v\">\n </div>\n\n </div>\n\n <div class=\"flex flex-col gap-4 mt-4\" [ngClass]=\"isTooltip() ? 'p-4' : ''\">\n <!--Selected Color-->\n <div class=\"flex gap-5 items-center\">\n\n <!-- <div class=\"relative\">-->\n <!-- <div class=\"selected-color-background\"></div>-->\n <!-- <div-->\n <!-- class=\"h-10 w-10 rounded-xl selected-color\"-->\n <!-- [style.background-color]=\"selectedColor()\">-->\n <!-- </div>-->\n <!-- </div>-->\n\n\n <div class=\"flex flex-col w-full gap-4\">\n <div #hueSlider\n class=\"hue\"\n colorPickerSlider\n (valueChanged)=\"onSliderChange('hue', $event)\"\n [rgX]=\"1\">\n <div class=\"hue-pointer absolute rounded-full top-1/2 transform -translate-y-1/2 -translate-x-1/2 bg-white h-6 w-6 shadow-1 border border-neutral-300\"\n [style.left.px]=\"slider().h\"></div>\n </div>\n\n @if(enableAlpha()) {\n <div #alphaSlider\n class=\"alpha\"\n colorPickerSlider\n [rgX]=\"1\"\n (valueChanged)=\"onSliderChange('alpha', $event)\">\n <div class=\"alpha-gradient\" [ngStyle]=\"getBackgroundColor(alphaSliderColor())\"></div>\n <div class=\"alpha-pointer\"\n [style.left.px]=\"slider().a\"></div>\n </div>\n }\n </div>\n\n </div>\n\n <div class=\"flex items-center gap-3\">\n <div class=\"relative rounded w-full flex items-center bg-gray-50 focus-within:text-neutral-600\">\n <p class=\"absolute text-sm text-blue-500 px-3 pointer-events-none\">HEX</p>\n <input [(ngModel)]=\"hexColorValue\" (input)=\"onHexColorChange($event)\"\n class=\"py-2 pl-12 pr-3 w-36 bg-gray-50 focus:outline-none rounded uppercase\">\n\n </div>\n @if (isTooltip()) {\n <div class=\"px-3 py-2 border border-neutral-300 h-min rounded-md cursor-pointer text-primary-500\"\n (click)=\"onApplyCLicked()\">Apply\n </div>\n }\n </div>\n </div>\n\n </div>\n\n <div class=\"mt-4\">\n @for (row of getColorRows(); let $isLast = $last; track $index) {\n <div class=\"grid grid-cols-8 gap-2 mb-1\">\n @for (color of row; track $index) {\n <div\n (click)=\"onColorSelected(color)\"\n class=\"h-6 w-6 rounded cursor-pointer border border-gray-200\"\n [style.background-color]=\"color\">\n </div>\n }\n </div>\n\n <!-- Separator line unless it's the last row -->\n @if (!$isLast) {\n <div class=\"h-[1px] bg-gray-100 my-2.5 w-full\"></div>\n }\n }\n </div>\n\n\n</div>\n\n\n\n","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef, EmbeddedViewRef, EventEmitter,\n HostListener,\n inject, Injector, OnDestroy, Output,\n ViewContainerRef\n} from '@angular/core';\nimport {ColorPickerComponent} from \"./color-picker.component\";\n\n@Directive({\n selector: '[appColorPicker]',\n standalone: true\n})\nexport class ColorPickerDirective implements OnDestroy{\n\n @Output() colorChanged: EventEmitter<string> = new EventEmitter<string>(false);\n\n private componentRef: ComponentRef<ColorPickerComponent> | null = null;\n\n elementRef = inject(ElementRef);\n viewContainerRef = inject(ViewContainerRef);\n componentFactoryResolver = inject(ComponentFactoryResolver);\n appRef = inject(ApplicationRef);\n injector = inject(Injector);\n\n overlay: any;\n\n @HostListener('click')\n onClick() {\n if (this.componentRef) {\n this.closeColorPicker();\n return;\n }\n\n this.initializeColorPicker();\n }\n\n private initializeColorPicker() {\n if (this.componentRef === null) {\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ColorPickerComponent);\n this.componentRef = componentFactory.create(this.injector);\n\n this.appRef.attachView(this.componentRef.hostView);\n const [domElement] = (this.componentRef.hostView as EmbeddedViewRef<any>).rootNodes;\n const elementRect = this.elementRef.nativeElement.getBoundingClientRect();\n\n this.overlay = document.createElement(\"div\");\n this.overlay.id = \"ng-color-picker\";\n this.overlay.classList.add(\"ng-color-picker\");\n this.overlay.style['position'] = 'fixed';\n this.overlay.style['height'] = '100%';\n this.overlay.style['width'] = '100%';\n this.overlay.style['z-index'] = 2000;\n this.overlay.style['top'] = '0';\n this.overlay.style['left'] = '0';\n\n\n this.componentRef.location.nativeElement.style.position = 'absolute';\n this.componentRef.location.nativeElement.style['z-index'] = 2001;\n this.componentRef.location.nativeElement.style.top = `${elementRect.bottom + 20}px`;\n this.componentRef.location.nativeElement.style.left = `${elementRect.left}px`;\n this.componentRef.instance.COLOR_PICKER_HEIGHT.set(140);\n this.componentRef.instance.COLOR_PICKER_WIDTH.set(250);\n this.componentRef.instance.isTooltip.set(true);\n\n this.componentRef.instance.colorChanged.subscribe((colorCode: string) => {\n this.colorChanged.emit(colorCode);\n this.closeColorPicker();\n });\n\n this.componentRef.instance.closeColorPicker.subscribe(() => {\n this.closeColorPicker();\n });\n\n document.body.appendChild(this.overlay);\n\n document.body.appendChild(domElement);\n }\n }\n\n // private initializeColorPicker() {\n // if(this.componentRef === null) {\n // const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ColorPickerComponent);\n // this.componentRef = componentFactory.create(this.injector);\n //\n // this.appRef.attachView(this.componentRef.hostView);\n // const [domElement] = (this.componentRef.hostView as EmbeddedViewRef<any>).rootNodes;\n //\n // this.setColorPickerProperties();\n //\n // document.body.appendChild(domElement);\n //\n // }\n // }\n //\n // private setColorPickerProperties() {\n // if (this.componentRef !== null) {\n // const elementRect = this.elementRef.nativeElement.getBoundingClientRect();\n //\n //\n // this.componentRef.location.nativeElement.style.position = 'absolute';\n // this.componentRef.location.nativeElement.style.top = `${elementRect.bottom + 20}px`;\n // this.componentRef.location.nativeElement.style.left = `${elementRect.left}px`;\n // this.componentRef.instance.COLOR_PICKER_HEIGHT.set(140);\n // this.componentRef.instance.COLOR_PICKER_WIDTH.set(250);\n // this.componentRef.instance.isTooltip.set(true);\n //\n // this.componentRef.instance.colorChanged.subscribe((colorCode: string) => {\n // this.colorChanged.emit(colorCode);\n // this.closeColorPicker();\n // });\n //\n // this.componentRef.instance.closeColorPicker.subscribe(() => {\n // this.closeColorPicker();\n // });\n // }\n // }\n\n closeColorPicker() {\n\n if (this.componentRef) {\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.overlay.remove();\n this.componentRef = null;\n }\n // this.viewContainerRef.clear();\n // this.componentRef = null;\n }\n\n ngOnDestroy(): void {\n this.closeColorPicker();\n }\n\n}\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, ElementRef,\n inject,\n input, OnDestroy,\n output,\n signal, ViewChild\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 size = input<'small' | 'medium' | 'large'>('medium');\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 autoFocus = input<boolean>(false);\n\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\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 if (this.autoFocus()) {\n setTimeout(() => this.inputRef.nativeElement.focus(), 0);\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 sizeMap: Record<'small' | 'medium' | 'large', string> = {\n small: '36px',\n medium: '46px',\n large: '50px',\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 #inputRef\n [mask]=\"mask()\"\n class=\"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 [style.height]=\"sizeMap[size()]\"\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 {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';\nimport {\n ContextMenuButtonAction,\n ContextMenuButtonComponent\n} from '../context-menu-button/context-menu-button.component';\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 StatusBadgeComponent,\n SortableTableDirective,\n TableResizableColumnsDirective,\n CdkPortal,\n CheckboxComponent,\n FormsModule,\n TextInputComponent,\n TextButtonSmall,\n DynamicRendererComponent,\n ContextMenuButtonComponent\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: ContextMenuButtonAction = {\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-button (onActionClicked)=\"_onActionClicked($event, item, null)\"\n [actions]=\"getContextMenuActions(column.actionsConfig?.threeDotMenuActions ?? [])\"></app-context-menu-button>\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 {\n Directive,\n ElementRef,\n HostListener,\n Input,\n Type,\n inject,\n} from '@angular/core';\nimport {OverlayService} from '../overlay/overlay.service';\n\n\n\n@Directive({\n selector: '[libOpenFloatingMenu]',\n standalone: true,\n})\nexport class OpenFloatingMenuDirective {\n private elementRef = inject(ElementRef<HTMLElement>);\n private overlayService = inject(OverlayService);\n\n @Input('libOpenFloatingMenu') component!: Type<unknown>;\n\n @Input() floatingMenuPositionPreference:\n | 'topLeft'\n | 'topCenter'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomCenter'\n | 'bottomRight' = 'bottomCenter';\n\n @HostListener('click')\n onClick(): void {\n if (!this.component) return;\n\n this.overlayService.openNearElement(this.component, this.elementRef.nativeElement, {\n positionPreference: this.floatingMenuPositionPreference,\n });\n }\n}\n","import {AfterViewInit, Component, input, output, Type} from '@angular/core';\nimport {InfiniteScrollDirective} from 'ngx-infinite-scroll';\nimport { ShimmerComponent } from '../shimmer/shimmer.component';\nimport { TextInputComponent } from '../../inputs/text-input/text-input.component';\nimport { NoDataTableComponent } from '../no-data-table/no-data-table.component';\nimport { DynamicRendererComponent } from '../dynamic-renderer/dynamic-renderer.component';\nimport { PaginationState } from '../../base/base-pagination-state';\nimport {TableActionEvent, TableStateEvent} from '../data-table/data-table.component';\nimport { PaginationEvent } from '../pagination/pagination.component';\n\n@Component({\n selector: 'app-listview',\n imports: [\n InfiniteScrollDirective,\n TextInputComponent,\n DynamicRendererComponent,\n ShimmerComponent,\n NoDataTableComponent,\n ],\n standalone: true,\n templateUrl: './listview.component.html',\n styleUrl: './listview.component.scss'\n})\nexport class ListviewComponent implements AfterViewInit {\n\n state = input.required<PaginationState<any>>();\n data = input<any>();\n pageSize = input(20);\n component = input.required<Type<any>>();\n enableSearch = input(true);\n enableSearchFullWidth = input(true);\n\n onStateChanged = output<TableStateEvent>();\n onActionPerformed = output<TableActionEvent>();\n\n private searchText: string = '';\n\n ngAfterViewInit(): void {\n let paginationEvent: PaginationEvent = {\n pageNumber: 1, pageSize: this.pageSize()\n }\n\n let state: TableStateEvent = {\n searchText: '',\n paginationEvent: paginationEvent,\n };\n console.log('update state');\n this.onStateChanged.emit(state);\n }\n\n onSearchTextChanged($event: string) {\n this.state().clearState();\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 };\n this.onStateChanged.emit(tableStateEvent);\n }\n\n onScroll() {\n let nextPage = this.state().pageNumber() + 1;\n let paginationEvent: PaginationEvent = {\n pageNumber: nextPage, pageSize: this.pageSize()\n }\n let tableStateEvent: TableStateEvent = {\n searchText: this.searchText,\n paginationEvent: paginationEvent,\n };\n this.onStateChanged.emit(tableStateEvent);\n }\n\n onRowAction($event: TableActionEvent) {\n this.onActionPerformed.emit($event);\n }\n}\n","<div class=\"h-full flex flex-col gap-4\">\n\n @if (enableSearch()) {\n <app-text-input\n title=\"Search...\"\n [iconSrc]=\"'assets/icons/search.svg'\"\n placeholder=\"Search...\"\n type=\"search\"\n [fullWidth]=\"enableSearchFullWidth()\"\n (changeValue)=\"onSearchTextChanged($event)\">\n </app-text-input>\n }\n\n @if (state().success() && state().items().length <= 0) {\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 }\n\n @if (state().items().length > 0) {\n <div class=\"flex flex-col overflow-auto\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\">\n @for (item of state().items(); track $index) {\n <app-dynamic-renderer\n [component]=\"component()\"\n [rowData]=\"item\"\n [data]=\"data()\"\n [rowPosition]=\"$index\"\n [isLastRow]=\"$last\"\n (actionPerformed)=\"onRowAction($event)\">\n </app-dynamic-renderer>\n }\n </div>\n }\n\n <!-- Shimmer-->\n @if (state().loading()) {\n <div class=\"flex flex-col gap-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 }\n\n\n</div>\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';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'app-base-overlay',\n imports: [\n NgClass\n ],\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 enableDefaultLayout = input(true);\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\n @if (enableDefaultLayout()) {\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\"\n (click)=\"goBack()\">\n <svg class=\"w-[18px] h-[18px] text-neutral-600\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"\n fill=\"none\">\n <path d=\"M20 11V13H8.00003L13.5 18.5L12.08 19.92L4.16003 12L12.08 4.07996L13.5 5.49996L8.00003 11H20Z\"\n 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 <div class=\"flex-1 min-h-0 overflow-y-auto\" [ngClass]=\"enableDefaultLayout() ? 'px-5 py-4' : ''\">\n <ng-content select=\"[body]\">\n <ng-container #container></ng-container>\n </ng-content>\n </div>\n\n\n @if (enableDefaultLayout()) {\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\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","import {Component, Input} from '@angular/core';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'lib-tooltip',\n imports: [\n NgClass\n ],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.css'\n})\nexport class TooltipComponent {\n @Input() text = '';\n @Input() tooltipClass: string | string[] | Set<string> | { [klass: string]: any } = [];\n}\n","<div class=\"bg-gray-800 text-white text-xs px-3 py-1 rounded shadow-lg max-w-xs whitespace-nowrap z-50\"\n [ngClass]=\"tooltipClass\">\n {{ text }}\n</div>\n","import {Directive, effect, ElementRef, HostListener, inject, Input, input} from '@angular/core';\nimport {ConnectionPositionPair, Overlay, OverlayPositionBuilder, OverlayRef} from '@angular/cdk/overlay';\nimport {TooltipComponent} from './tooltip.component';\nimport {ComponentPortal} from '@angular/cdk/portal';\n\n@Directive({\n selector: '[libTooltip]',\n standalone: true,\n})\nexport class TooltipDirective {\n\n private overlay = inject(Overlay);\n private elementRef = inject(ElementRef);\n private positionBuilder = inject(OverlayPositionBuilder);\n\n private overlayRef: OverlayRef | null = null;\n private longPressTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // tooltipText = input<string>('');\n @Input() libTooltip = '';\n tooltipPosition = input<'top' | 'bottom' | 'left' | 'right' | 'before' | 'after'>('bottom');\n tooltipClass = input<string | string[] | Set<string> | { [klass: string]: any }>({ alias: 'tooltipClass' });\n\n constructor() {\n effect(() => {\n this.hideTooltip();\n });\n }\n\n private showTooltip() {\n if (this.overlayRef?.hasAttached()) return;\n\n const position = this.getPosition(this.tooltipPosition());\n const positionStrategy = this.positionBuilder\n .flexibleConnectedTo(this.elementRef)\n .withPositions([position]);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n\n const tooltipPortal = new ComponentPortal(TooltipComponent);\n const tooltipRef = this.overlayRef.attach(tooltipPortal);\n tooltipRef.instance.text = this.libTooltip;\n tooltipRef.instance.tooltipClass = this.tooltipClass();\n }\n\n private hideTooltip() {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n }\n\n private getPosition(position: string): ConnectionPositionPair {\n switch (position) {\n case 'bottom':\n return {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8,\n };\n case 'left':\n case 'before':\n return {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -8,\n };\n case 'right':\n case 'after':\n return {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: 8,\n };\n default: // 'top'\n return {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8,\n };\n }\n }\n\n private isTouch(): boolean {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n // 👉 Hover for desktop\n @HostListener('mouseenter')\n onMouseEnter() {\n if (!this.isTouch()) {\n this.showTooltip();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n if (!this.isTouch()) {\n this.hideTooltip();\n }\n }\n\n // 👉 Long press for mobile\n @HostListener('touchstart')\n onTouchStart() {\n if (this.isTouch()) {\n this.longPressTimeout = setTimeout(() => {\n this.showTooltip();\n }, 500);\n }\n }\n\n @HostListener('touchend')\n @HostListener('touchcancel')\n onTouchEnd() {\n if (this.longPressTimeout) {\n clearTimeout(this.longPressTimeout);\n this.longPressTimeout = null;\n }\n this.hideTooltip();\n }\n\n}\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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"}
|