@fovestta2/web-angular 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/add-update-form/add-update-form.component.mjs +4 -2
- package/esm2022/lib/fv-radio-group/fv-radio-group.component.mjs +6 -3
- package/fesm2022/fovestta2-web-angular.mjs +8 -3
- package/fesm2022/fovestta2-web-angular.mjs.map +1 -1
- package/lib/add-update-form/add-update-form.component.d.ts +1 -0
- package/lib/fv-radio-group/fv-radio-group.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fovestta2-web-angular.mjs","sources":["../../../projects/fv-controls/src/lib/fv-entry-field/fv-entry-field.component.ts","../../../projects/fv-controls/src/lib/fv-entry-field/fv-entry-field.component.html","../../../projects/fv-controls/src/lib/fv-date-field/fv-date-field.component.ts","../../../projects/fv-controls/src/lib/fv-date-field/fv-date-field.component.html","../../../projects/fv-controls/src/lib/fv-month-year-field/fv-month-year-field.component.ts","../../../projects/fv-controls/src/lib/fv-month-year-field/fv-month-year-field.component.html","../../../projects/fv-controls/src/lib/fv-number-field/fv-number-field.component.ts","../../../projects/fv-controls/src/lib/fv-number-field/fv-number-field.component.html","../../../projects/fv-controls/src/lib/fv-checkbox/fv-checkbox.component.ts","../../../projects/fv-controls/src/lib/fv-checkbox/fv-checkbox.component.html","../../../projects/fv-controls/src/lib/fv-radio-group/fv-radio-group.component.ts","../../../projects/fv-controls/src/lib/fv-radio-group/fv-radio-group.component.html","../../../projects/fv-controls/src/lib/fv-dropdown/fv-dropdown.component.ts","../../../projects/fv-controls/src/lib/fv-dropdown/fv-dropdown.component.html","../../../projects/fv-controls/src/lib/fv-file-selector/fv-file-selector.component.ts","../../../projects/fv-controls/src/lib/fv-file-selector/fv-file-selector.component.html","../../../projects/fv-controls/src/lib/fv-image-selector/fv-image-selector.component.ts","../../../projects/fv-controls/src/lib/fv-image-selector/fv-image-selector.component.html","../../../projects/fv-controls/src/lib/fv-rich-text-editor/fv-rich-text-editor.component.ts","../../../projects/fv-controls/src/lib/fv-rich-text-editor/fv-rich-text-editor.component.html","../../../projects/fv-controls/src/lib/fv-name-code/fv-name-code.component.ts","../../../projects/fv-controls/src/lib/fv-phone-field/fv-phone-field.component.ts","../../../projects/fv-controls/src/lib/fv-phone-field/fv-phone-field.component.html","../../../projects/fv-controls/src/lib/fv-uan-field/fv-uan-field.component.ts","../../../projects/fv-controls/src/lib/fv-uan-field/fv-uan-field.component.html","../../../projects/fv-controls/src/lib/fv-pf-field/fv-pf-field.component.ts","../../../projects/fv-controls/src/lib/fv-pf-field/fv-pf-field.component.html","../../../projects/fv-controls/src/lib/fv-esi-field/fv-esi-field.component.ts","../../../projects/fv-controls/src/lib/fv-esi-field/fv-esi-field.component.html","../../../projects/fv-controls/src/lib/fv-ifsc-field/fv-ifsc-field.component.ts","../../../projects/fv-controls/src/lib/fv-ifsc-field/fv-ifsc-field.component.html","../../../projects/fv-controls/src/lib/fv-micr-field/fv-micr-field.component.ts","../../../projects/fv-controls/src/lib/fv-micr-field/fv-micr-field.component.html","../../../projects/fv-controls/src/lib/fv-iban-field/fv-iban-field.component.ts","../../../projects/fv-controls/src/lib/fv-iban-field/fv-iban-field.component.html","../../../projects/fv-controls/src/lib/fv-email-field/fv-email-field.component.ts","../../../projects/fv-controls/src/lib/fv-email-field/fv-email-field.component.html","../../../projects/fv-controls/src/lib/fv-password-field/fv-password-field.component.ts","../../../projects/fv-controls/src/lib/fv-password-field/fv-password-field.component.html","../../../projects/fv-controls/src/lib/add-update-form/add-update-form.component.ts","../../../projects/fv-controls/src/lib/query-form/query-form.component.ts","../../../projects/fv-controls/src/lib/fv-controls.module.ts","../../../projects/fv-controls/src/public-api.ts","../../../projects/fv-controls/src/fovestta2-web-angular.ts"],"sourcesContent":["import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { OnChanges, SimpleChanges } from '@angular/core';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-entry-field',\r\n templateUrl: './fv-entry-field.component.html',\r\n styleUrl: './fv-entry-field.component.css',\r\n})\r\nexport class FvEntryFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() type: 'text' | 'password' | 'email' = 'text';\r\n @Input() allowAlphabetsOnly: boolean = false;\r\n @Input() maxLength: number | null = null;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvEntryField: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvEntryField: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n\r\n if (this.allowAlphabetsOnly) {\r\n // Remove any non-alphabet characters (keeping spaces if desired, usually names have spaces)\r\n // Assuming 'alphabets' means [a-zA-Z] and maybe spaces.\r\n // Strict alphabets: /[^a-zA-Z]/g\r\n const newValue = value.replace(/[^a-zA-Z ]/g, '');\r\n if (newValue !== value) {\r\n value = newValue;\r\n input.value = value;\r\n this.control.setValue(value);\r\n }\r\n }\r\n\r\n if (this.maxLength && value.length > this.maxLength) {\r\n value = value.substring(0, this.maxLength);\r\n input.value = value;\r\n this.control.setValue(value);\r\n }\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n // You can implement a translation service here\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_MIN_LENGTH: 'Value is too short',\r\n ERR_MAX_LENGTH: 'Value is too long',\r\n ERR_REGEX_MISMATCH: 'Invalid format',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-entry-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\" [class.fv-label-required]=\"isRequired()\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n\r\n <input [type]=\"type\" [formControl]=\"control\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus($event)\" (input)=\"onInput($event)\" [attr.maxlength]=\"maxLength\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage && control.touched\" [class.fv-input-disabled]=\"disabled\" />\r\n\r\n <span *ngIf=\"errorMessage && control.touched\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </span>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-date-field',\r\n templateUrl: './fv-date-field.component.html',\r\n styleUrl: './fv-date-field.component.css',\r\n})\r\nexport class FvDateFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n\r\n // Optional native constraints (can also be derived from schema)\r\n @Input() min?: string;\r\n @Input() max?: string;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvDateField: control is required');\r\n return;\r\n }\r\n\r\n // Try to derive min/max from schema if not explicitly provided\r\n this.extractConstraintsFromSchema();\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: import('@angular/core').SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private extractConstraintsFromSchema(): void {\r\n if (!this.schema?.rules) return;\r\n\r\n for (const rule of this.schema.rules) {\r\n if (rule.name === 'minDate' && !this.min) {\r\n this.min = this.formatDate(rule.params?.['value']);\r\n }\r\n if (rule.name === 'maxDate' && !this.max) {\r\n this.max = this.formatDate(rule.params?.['value']);\r\n }\r\n // We could also calculate min/max from age rules, but that's complex (dynamic dates)\r\n // leaving out for now or can be added later.\r\n }\r\n }\r\n\r\n private formatDate(date: string | Date): string {\r\n if (!date) return '';\r\n const d = new Date(date);\r\n if (isNaN(d.getTime())) return '';\r\n return d.toISOString().split('T')[0];\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n this.validateValue(this.control.value);\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'Date is required',\r\n ERR_MIN_DATE: `Date must be after ${this.min}`,\r\n ERR_MAX_DATE: `Date must be before ${this.max}`,\r\n ERR_MIN_AGE: 'Age requirement not met (too young)',\r\n ERR_MAX_AGE: 'Age requirement not met (too old)',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }} <span *ngIf=\"isRequired()\" class=\"required\">*</span>\r\n </label>\r\n\r\n <input type=\"date\" [formControl]=\"control\" class=\"fv-input\" [class.error]=\"!!errorMessage\" [attr.min]=\"min\"\r\n [attr.max]=\"max\" [readonly]=\"readonly\" (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" />\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-month-year-field',\r\n templateUrl: './fv-month-year-field.component.html',\r\n styleUrl: './fv-month-year-field.component.css',\r\n})\r\nexport class FvMonthYearFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n\r\n @Input() min?: string; // YYYY-MM\r\n @Input() max?: string; // YYYY-MM\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n displayValue: string = '';\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvMonthYearField: control is required');\r\n return;\r\n }\r\n\r\n this.extractConstraintsFromSchema();\r\n\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.updateDisplayValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n this.updateDisplayValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private extractConstraintsFromSchema(): void {\r\n if (!this.schema?.rules) return;\r\n\r\n for (const rule of this.schema.rules) {\r\n if (rule.name === 'minDate' && !this.min) {\r\n this.min = this.formatMonth(rule.params?.['value']);\r\n }\r\n if (rule.name === 'maxDate' && !this.max) {\r\n this.max = this.formatMonth(rule.params?.['value']);\r\n }\r\n }\r\n }\r\n\r\n private formatMonth(date: string | Date): string {\r\n if (!date) return '';\r\n const d = new Date(date);\r\n if (isNaN(d.getTime())) return '';\r\n return d.toISOString().slice(0, 7); // YYYY-MM\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n // For month picker, value is YYYY-MM. \r\n // The generic Validator rules use new Date(value), which treats YYYY-MM as YYYY-MM-01.\r\n // This generally works for min/max logic.\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n this.validateValue(this.control.value);\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'Month/Year is required',\r\n ERR_MIN_DATE: `Date must be after ${this.min}`,\r\n ERR_MAX_DATE: `Date must be before ${this.max}`,\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n\r\n private updateDisplayValue(value: string): void {\r\n if (!value) {\r\n this.displayValue = '';\r\n return;\r\n }\r\n\r\n const date = new Date(value + '-01'); // Ensure it's treated as YYYY-MM-01\r\n if (isNaN(date.getTime())) {\r\n this.displayValue = value;\r\n return;\r\n }\r\n\r\n const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n this.displayValue = `${monthNames[date.getMonth()]} ${date.getFullYear()}`;\r\n }\r\n\r\n openPicker(picker: HTMLInputElement): void {\r\n if (this.disabled || this.readonly) return;\r\n if (picker.showPicker) {\r\n picker.showPicker();\r\n } else {\r\n picker.click();\r\n }\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }} <span *ngIf=\"isRequired()\" class=\"required\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-input-wrapper\" (click)=\"openPicker(monthPicker)\">\r\n <input type=\"text\" [value]=\"displayValue\" class=\"fv-input\" [class.error]=\"!!errorMessage\"\r\n placeholder=\"Select Month\" readonly />\r\n <input #monthPicker type=\"month\" [formControl]=\"control\" class=\"fv-hidden-picker\" [attr.min]=\"min\"\r\n [attr.max]=\"max\" (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" />\r\n <span class=\"fv-calendar-icon\">\r\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\r\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\r\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n selector: 'fv-number-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-number-field.component.html',\r\n styleUrl: './fv-number-field.component.css',\r\n})\r\nexport class FvNumberFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() min?: any;\r\n @Input() max?: any;\r\n @Input() step: number = 1;\r\n\r\n @Output() valueChange = new EventEmitter<number>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvNumberField: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn('FvNumberField: schema is not provided');\r\n return;\r\n }\r\n\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_NUMERIC_INVALID: 'Please enter a valid number',\r\n ERR_RANGE_INVALID: 'Number is out of range',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-number-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n\r\n <input type=\"number\" [formControl]=\"control\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" [min]=\"min\" [max]=\"max\"\r\n [step]=\"step\" (blur)=\"onBlur()\" (focus)=\"onFocus()\" class=\"fv-input\" [class.fv-input-error]=\"errorMessage\"\r\n [class.fv-input-disabled]=\"disabled\" />\r\n\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </span>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'fv-checkbox',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-checkbox.component.html',\r\n styleUrl: './fv-checkbox.component.css',\r\n})\r\nexport class FvCheckboxComponent implements OnInit, OnChanges {\r\n @Input() label: string = '';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() required: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter<boolean>();\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvCheckbox: control is required');\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onChange(event: Event): void {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.control.setValue(checked);\r\n this.valueChange.emit(checked);\r\n }\r\n}\r\n","<div class=\"fv-checkbox-container\">\r\n <label class=\"fv-checkbox-label\">\r\n <input type=\"checkbox\" [formControl]=\"control\" [disabled]=\"disabled\" (change)=\"onChange($event)\"\r\n class=\"fv-checkbox-input\" />\r\n <span class=\"fv-checkbox-custom\"></span>\r\n <span class=\"fv-checkbox-text\">\r\n {{ label }}\r\n <span *ngIf=\"required\" class=\"fv-required-asterisk\">*</span>\r\n </span>\r\n </label>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\n\r\nexport interface RadioOption {\r\n value: any;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'fv-radio-group',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-radio-group.component.html',\r\n styleUrl: './fv-radio-group.component.css',\r\n})\r\nexport class FvRadioGroupComponent implements OnInit, OnChanges {\r\n @Input() label: string = '';\r\n @Input() control!: FormControl;\r\n @Input() options: RadioOption[] = [];\r\n @Input() disabled: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() name: string = `fv-radio-${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvRadioGroup: control is required');\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onChange(value: any): void {\r\n this.control.setValue(value);\r\n this.valueChange.emit(value);\r\n }\r\n\r\n isSelected(value: any): boolean {\r\n return this.control.value === value;\r\n }\r\n}\r\n","<div class=\"fv-radio-group-container\">\r\n <label *ngIf=\"label\" class=\"fv-group-label\">\r\n {{ label }}\r\n <span *ngIf=\"required\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n \r\n <div class=\"fv-radio-options\">\r\n <label \r\n *ngFor=\"let option of options\" \r\n class=\"fv-radio-label\"\r\n [class.fv-radio-disabled]=\"disabled || option.disabled\">\r\n <input\r\n type=\"radio\"\r\n [name]=\"name\"\r\n [value]=\"option.value\"\r\n [checked]=\"isSelected(option.value)\"\r\n [disabled]=\"disabled || option.disabled\"\r\n (change)=\"onChange(option.value)\"\r\n class=\"fv-radio-input\"\r\n />\r\n <span class=\"fv-radio-custom\"></span>\r\n <span class=\"fv-radio-text\">{{ option.label }}</span>\r\n </label>\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n OnChanges,\r\n SimpleChanges,\r\n HostListener\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\nexport interface DropdownOption {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-dropdown',\r\n templateUrl: './fv-dropdown.component.html',\r\n styleUrls: ['./fv-dropdown.component.css'],\r\n})\r\nexport class FvDropdownComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'Select an option';\r\n @Input() options: DropdownOption[] = [];\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter<string | number>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n @ViewChild('searchInput') searchInput!: ElementRef<HTMLInputElement>;\r\n errorMessage: string | null = null;\r\n isOpen: boolean = false;\r\n private subscription?: Subscription;\r\n searchControl = new FormControl('');\r\n filteredOptions: DropdownOption[] = [];\r\n highlightedIndex: number = -1;\r\n\r\n constructor(private el: ElementRef) { }\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvDropdown: control is required');\r\n return;\r\n }\r\n\r\n this.filteredOptions = this.options;\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvDropdown: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n // Sync search text\r\n const selected = this.options.find(opt => opt.value === value);\r\n if (selected) {\r\n this.searchControl.setValue(selected.label, { emitEvent: false });\r\n } else if (!value) {\r\n this.searchControl.setValue('', { emitEvent: false });\r\n }\r\n });\r\n\r\n // Search Control Changes\r\n this.searchControl.valueChanges.subscribe(term => {\r\n this.filterOptions(term || '');\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n const selected = this.options.find(opt => opt.value === this.control.value);\r\n if (selected) {\r\n this.searchControl.setValue(selected.label, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['options'] && changes['options'].currentValue) {\r\n this.filteredOptions = this.options;\r\n // Re-filter if search text exists\r\n if (this.searchControl.value) {\r\n this.filterOptions(this.searchControl.value);\r\n }\r\n }\r\n if (changes['disabled']) {\r\n if (this.disabled) {\r\n this.searchControl.disable({ emitEvent: false });\r\n } else {\r\n this.searchControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n filterOptions(term: string) {\r\n if (!term) {\r\n this.filteredOptions = this.options;\r\n } else {\r\n const lower = term.toLowerCase();\r\n this.filteredOptions = this.options.filter(opt => opt.label.toLowerCase().includes(lower));\r\n }\r\n this.highlightedIndex = this.filteredOptions.length === 1 ? 0 : -1;\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (!this.disabled) {\r\n if (!this.isOpen) {\r\n this.openDropdown();\r\n } else {\r\n this.closeDropdown();\r\n }\r\n }\r\n }\r\n\r\n openDropdown() {\r\n if (!this.disabled) {\r\n this.isOpen = true;\r\n this.focus.emit();\r\n // Filter based on current text, do not reset blindly\r\n this.filterOptions(this.searchControl.value || '');\r\n this.highlightedIndex = this.filteredOptions.length === 1 ? 0 : -1;\r\n }\r\n }\r\n\r\n onContainerClick(event: MouseEvent) {\r\n if (this.disabled) return;\r\n // If click is on the arrow or input, let them handle it.\r\n // But if on the padding of div, focus input.\r\n const target = event.target as HTMLElement;\r\n if (!target.classList.contains('fv-dropdown-input') && !target.classList.contains('fv-dropdown-arrow')) {\r\n this.searchInput.nativeElement.focus();\r\n if (!this.isOpen) this.openDropdown();\r\n }\r\n }\r\n\r\n closeDropdown() {\r\n this.isOpen = false;\r\n this.highlightedIndex = -1;\r\n // Restore label\r\n const selected = this.options.find(opt => opt.value === this.control.value);\r\n if (selected) {\r\n this.searchControl.setValue(selected.label, { emitEvent: false });\r\n } else {\r\n if (!this.control.value) this.searchControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n selectOption(option: DropdownOption): void {\r\n if (!option) return;\r\n this.control.setValue(option.value);\r\n this.searchControl.setValue(option.label, { emitEvent: false });\r\n this.isOpen = false;\r\n this.highlightedIndex = -1;\r\n this.searchInput.nativeElement.blur(); // Remove focus from input\r\n this.blur.emit();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isOpen && (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter')) {\r\n this.openDropdown();\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (!this.isOpen) return;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.highlightedIndex = (this.highlightedIndex + 1) % this.filteredOptions.length;\r\n this.scrollToHighlighted();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.highlightedIndex = (this.highlightedIndex - 1 + this.filteredOptions.length) % this.filteredOptions.length;\r\n this.scrollToHighlighted();\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n if (this.filteredOptions.length === 1) {\r\n this.selectOption(this.filteredOptions[0]);\r\n } else if (this.highlightedIndex >= 0 && this.highlightedIndex < this.filteredOptions.length) {\r\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n break;\r\n case 'Escape':\r\n this.closeDropdown();\r\n break;\r\n case 'Tab':\r\n this.closeDropdown();\r\n break;\r\n }\r\n }\r\n\r\n private scrollToHighlighted() {\r\n const list = document.querySelector('.fv-dropdown-options');\r\n const item = document.querySelectorAll('.fv-dropdown-option')[this.highlightedIndex];\r\n if (list && item) {\r\n const listRect = list.getBoundingClientRect();\r\n const itemRect = item.getBoundingClientRect();\r\n\r\n if (itemRect.bottom > listRect.bottom) {\r\n list.scrollTop += (itemRect.bottom - listRect.bottom);\r\n } else if (itemRect.top < listRect.top) {\r\n list.scrollTop -= (listRect.top - itemRect.top);\r\n }\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n // Validation handled on closeDropdown\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.isOpen) {\r\n this.closeDropdown();\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n }\r\n }\r\n\r\n onInputFocus() {\r\n this.openDropdown();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_INVALID_VALUE: 'Invalid selection',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n\r\n getSelectedLabel(): string {\r\n const selected = this.options.find(\r\n (opt) => opt.value === this.control?.value\r\n );\r\n return selected ? selected.label : this.placeholder;\r\n }\r\n\r\n isSelected(option: DropdownOption): boolean {\r\n return option.value === this.control?.value;\r\n }\r\n}\r\n","<div class=\"fv-dropdown-container\">\r\n <label *ngIf=\"label\" class=\"fv-dropdown-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-dropdown-wrapper\">\r\n <div class=\"fv-dropdown\" [class.fv-dropdown-error]=\"errorMessage\" [class.fv-dropdown-disabled]=\"disabled\"\r\n [class.fv-dropdown-open]=\"isOpen\" (click)=\"onContainerClick($event)\">\r\n <input #searchInput type=\"text\" class=\"fv-dropdown-input\" [formControl]=\"searchControl\"\r\n [placeholder]=\"placeholder\" (focus)=\"onInputFocus()\" (click)=\"$event.stopPropagation()\"\r\n autocomplete=\"off\">\r\n <span class=\"fv-dropdown-arrow\" [class.arrow-up]=\"isOpen\" (click)=\"toggleDropdown()\">▼</span>\r\n </div>\r\n\r\n <div *ngIf=\"isOpen\" class=\"fv-dropdown-options\">\r\n <div *ngFor=\"let option of filteredOptions; let i = index\" class=\"fv-dropdown-option\"\r\n [class.fv-dropdown-option-selected]=\"isSelected(option)\"\r\n [class.fv-dropdown-option-highlighted]=\"i === highlightedIndex\" (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"selectOption(option)\">\r\n {{ option.label }}\r\n </div>\r\n <div *ngIf=\"filteredOptions.length === 0\" class=\"fv-dropdown-option fv-no-results\">\r\n No options found\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-dropdown-error-message\">\r\n ⚠ {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\nexport interface FileInfo {\r\n file: File;\r\n name: string;\r\n size: number;\r\n type: string;\r\n}\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-file-selector',\r\n templateUrl: './fv-file-selector.component.html',\r\n styleUrl: './fv-file-selector.component.css',\r\n})\r\nexport class FvFileSelectorComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'Select a file';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() accept: string = '*/*'; // MIME types, e.g., 'application/pdf,image/*'\r\n @Input() maxSize?: number; // Maximum file size in bytes\r\n\r\n @Output() valueChange = new EventEmitter<FileInfo | null>();\r\n @Output() blur = new EventEmitter<void>();\r\n\r\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\r\n\r\n errorMessage: string | null = null;\r\n selectedFile: FileInfo | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvFileSelector: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvFileSelector: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.selectedFile = this.control.value;\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onFileSelected(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n const file = input.files[0];\r\n\r\n // Check file size if maxSize is specified\r\n if (this.maxSize && file.size > this.maxSize) {\r\n alert(\r\n `File size exceeds the maximum allowed size of ${this.formatFileSize(\r\n this.maxSize\r\n )}`\r\n );\r\n // Reset the input\r\n input.value = '';\r\n return;\r\n }\r\n\r\n const fileInfo: FileInfo = {\r\n file: file,\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n };\r\n\r\n this.selectedFile = fileInfo;\r\n this.control.setValue(fileInfo);\r\n this.blur.emit();\r\n }\r\n }\r\n\r\n openFileDialog(): void {\r\n if (!this.disabled) {\r\n this.fileInput.nativeElement.click();\r\n }\r\n }\r\n\r\n removeFile(): void {\r\n this.selectedFile = null;\r\n this.control.setValue(null);\r\n if (this.fileInput) {\r\n this.fileInput.nativeElement.value = '';\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n formatFileSize(bytes: number): string {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_INVALID_FILE: 'Invalid file',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-file-selector-container\">\r\n <label *ngIf=\"label\" class=\"fv-file-selector-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <input #fileInput type=\"file\" [accept]=\"accept\" (change)=\"onFileSelected($event)\" style=\"display: none\" />\r\n\r\n <button type=\"button\" class=\"fv-file-selector-button\" [class.fv-file-selector-button-error]=\"errorMessage\"\r\n [class.fv-file-selector-button-disabled]=\"disabled\" (click)=\"openFileDialog()\" [disabled]=\"disabled\">\r\n {{ placeholder }}\r\n </button>\r\n\r\n <div *ngIf=\"selectedFile\" class=\"fv-file-info\">\r\n <div class=\"fv-file-details\">\r\n <div class=\"fv-file-name\">📄 {{ selectedFile.name }}</div>\r\n <div class=\"fv-file-size\">{{ formatFileSize(selectedFile.size) }}</div>\r\n </div>\r\n <button type=\"button\" class=\"fv-file-remove\" (click)=\"removeFile()\" [disabled]=\"disabled\">\r\n ✕\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-file-selector-error-message\">\r\n ⚠ {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\nexport interface ImageInfo {\r\n file: File;\r\n url: SafeUrl;\r\n width: number;\r\n height: number;\r\n size: number;\r\n}\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-image-selector',\r\n templateUrl: './fv-image-selector.component.html',\r\n styleUrl: './fv-image-selector.component.css',\r\n})\r\nexport class FvImageSelectorComponent implements OnInit, OnDestroy {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'Select an image';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() maxSize?: number; // Maximum file size in bytes\r\n\r\n @Output() valueChange = new EventEmitter<ImageInfo | null>();\r\n @Output() blur = new EventEmitter<void>();\r\n\r\n @ViewChild('imageInput') imageInput!: ElementRef<HTMLInputElement>;\r\n\r\n errorMessage: string | null = null;\r\n selectedImage: ImageInfo | null = null;\r\n private subscription?: Subscription;\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvImageSelector: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvImageSelector: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.selectedImage = this.control.value;\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onImageSelected(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n const file = input.files[0];\r\n\r\n // Validate that it's an image\r\n if (!file.type.startsWith('image/')) {\r\n alert('Please select an image file');\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Check file size if maxSize is specified\r\n if (this.maxSize && file.size > this.maxSize) {\r\n alert(\r\n `Image size exceeds the maximum allowed size of ${this.formatFileSize(\r\n this.maxSize\r\n )}`\r\n );\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Create object URL and get image dimensions\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const img = new Image();\r\n img.onload = () => {\r\n const imageInfo: ImageInfo = {\r\n file: file,\r\n url: this.sanitizer.bypassSecurityTrustUrl(e.target.result),\r\n width: img.width,\r\n height: img.height,\r\n size: file.size,\r\n };\r\n\r\n this.selectedImage = imageInfo;\r\n this.control.setValue(imageInfo);\r\n this.blur.emit();\r\n };\r\n img.src = e.target.result;\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n\r\n openImageDialog(): void {\r\n if (!this.disabled) {\r\n this.imageInput.nativeElement.click();\r\n }\r\n }\r\n\r\n removeImage(): void {\r\n this.selectedImage = null;\r\n this.control.setValue(null);\r\n if (this.imageInput) {\r\n this.imageInput.nativeElement.value = '';\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n formatFileSize(bytes: number): string {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_INVALID_IMAGE: 'Invalid image',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-image-selector-container\">\r\n <label *ngIf=\"label\" class=\"fv-image-selector-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <input #imageInput type=\"file\" accept=\"image/*\" (change)=\"onImageSelected($event)\" style=\"display: none\" />\r\n\r\n <div *ngIf=\"!selectedImage; else previewTemplate\">\r\n <button type=\"button\" class=\"fv-image-selector-button\" [class.fv-image-selector-button-error]=\"errorMessage\"\r\n [class.fv-image-selector-button-disabled]=\"disabled\" (click)=\"openImageDialog()\" [disabled]=\"disabled\">\r\n 📷 {{ placeholder }}\r\n </button>\r\n </div>\r\n\r\n <ng-template #previewTemplate>\r\n <div class=\"fv-image-preview-container\">\r\n <img [src]=\"selectedImage!.url\" class=\"fv-image-preview\" alt=\"Selected image\" />\r\n <div class=\"fv-image-actions\">\r\n <button type=\"button\" class=\"fv-image-change-button\" (click)=\"openImageDialog()\" [disabled]=\"disabled\">\r\n Change\r\n </button>\r\n <button type=\"button\" class=\"fv-image-remove-button\" (click)=\"removeImage()\" [disabled]=\"disabled\">\r\n Remove\r\n </button>\r\n </div>\r\n <div class=\"fv-image-info\">\r\n {{ selectedImage!.width }} × {{ selectedImage!.height }} •\r\n {{ formatFileSize(selectedImage!.size) }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-image-selector-error-message\">\r\n ⚠ {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-rich-text-editor',\r\n templateUrl: './fv-rich-text-editor.component.html',\r\n styleUrl: './fv-rich-text-editor.component.css',\r\n})\r\nexport class FvRichTextEditorComponent implements OnInit, OnDestroy {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'Enter text...';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() minHeight: number = 150;\r\n @Input() showToolbar: boolean = true;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n @ViewChild('editor') editorRef!: ElementRef<HTMLTextAreaElement>;\r\n\r\n errorMessage: string | null = null;\r\n isFocused: boolean = false;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvRichTextEditor: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvRichTextEditor: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n this.isFocused = false;\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(): void {\r\n this.isFocused = true;\r\n this.focus.emit();\r\n }\r\n\r\n insertText(before: string, after: string = before): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n const textarea = this.editorRef.nativeElement;\r\n const start = textarea.selectionStart;\r\n const end = textarea.selectionEnd;\r\n const text = this.control.value || '';\r\n const selectedText = text.substring(start, end);\r\n\r\n const newText =\r\n text.substring(0, start) +\r\n before +\r\n selectedText +\r\n after +\r\n text.substring(end);\r\n\r\n this.control.setValue(newText);\r\n\r\n // Restore cursor position\r\n setTimeout(() => {\r\n const newPosition = start + before.length + selectedText.length;\r\n textarea.setSelectionRange(newPosition, newPosition);\r\n textarea.focus();\r\n });\r\n }\r\n\r\n handleBulletList(): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n const text = this.control.value || '';\r\n const lines = text.split('\\n');\r\n const bulletedLines = lines.map((line: string) =>\r\n line.trim() ? `• ${line}` : line\r\n );\r\n this.control.setValue(bulletedLines.join('\\n'));\r\n }\r\n\r\n handleNumberedList(): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n const text = this.control.value || '';\r\n const lines = text.split('\\n').filter((line: string) => line.trim());\r\n const numberedLines = lines.map((line: string, index: number) => `${index + 1}. ${line}`);\r\n this.control.setValue(numberedLines.join('\\n'));\r\n }\r\n\r\n handleClear(): void {\r\n if (this.disabled || this.readonly) return;\r\n this.control.setValue('');\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_MIN_LENGTH: 'Text is too short',\r\n ERR_MAX_LENGTH: 'Text is too long',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n\r\n getCharacterCount(): number {\r\n return this.control?.value?.length || 0;\r\n }\r\n\r\n getWordCount(): number {\r\n const text = this.control?.value || '';\r\n return text.trim() ? text.trim().split(/\\s+/).length : 0;\r\n }\r\n}\r\n","<div class=\"fv-rich-text-editor-container\">\r\n <label *ngIf=\"label\" class=\"fv-rich-text-editor-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <div *ngIf=\"showToolbar && !disabled && !readonly\" class=\"fv-rich-text-toolbar\">\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"insertText('**', '**')\" title=\"Bold\">\r\n <strong>B</strong>\r\n </button>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"insertText('*', '*')\" title=\"Italic\">\r\n <em>I</em>\r\n </button>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"insertText('__', '__')\" title=\"Underline\">\r\n <u>U</u>\r\n </button>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"insertText('~~', '~~')\" title=\"Strikethrough\">\r\n <s>S</s>\r\n </button>\r\n\r\n <div class=\"fv-toolbar-divider\"></div>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"handleBulletList()\" title=\"Bullet List\">\r\n • List\r\n </button>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"handleNumberedList()\" title=\"Numbered List\">\r\n 1. List\r\n </button>\r\n\r\n <div class=\"fv-toolbar-divider\"></div>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button fv-toolbar-button-danger\" (click)=\"handleClear()\" title=\"Clear\">\r\n Clear\r\n </button>\r\n </div>\r\n\r\n <textarea #editor class=\"fv-rich-text-editor\" [class.fv-rich-text-editor-error]=\"errorMessage\"\r\n [class.fv-rich-text-editor-disabled]=\"disabled\" [class.fv-rich-text-editor-focused]=\"isFocused\"\r\n [formControl]=\"control\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" [disabled]=\"disabled\"\r\n [style.min-height.px]=\"minHeight\" (blur)=\"onBlur()\" (focus)=\"onFocus()\"></textarea>\r\n\r\n <div class=\"fv-rich-text-footer\">\r\n <div class=\"fv-rich-text-stats\">\r\n {{ getCharacterCount() }} characters • {{ getWordCount() }} words\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-rich-text-editor-error-message\">\r\n ⚠ {{ getErrorMessage() }}\r\n </div>\r\n</div>","import { Component, Input, forwardRef, HostListener, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\nexport interface SearchSelectOption {\r\n code: string;\r\n name: string;\r\n value: any;\r\n}\r\n\r\n@Component({\r\n selector: 'fv-name-code',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"fv-name-code-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <div class=\"search-box-wrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"fv-input\"\r\n [placeholder]=\"(searchControl.value || isOpen) ? '' : (placeholder || 'Search by Code or Name')\"\r\n [formControl]=\"searchControl\"\r\n (focus)=\"openDropdown()\"\r\n (blur)=\"onBlur()\"\r\n [class.error]=\"isInvalid()\"\r\n />\r\n </div>\r\n\r\n <div class=\"dropdown-list\" *ngIf=\"isOpen && !disabled\">\r\n <div \r\n class=\"dropdown-item\" \r\n *ngFor=\"let option of filteredOptions; let i = index\"\r\n [class.highlighted]=\"i === highlightedIndex\"\r\n (click)=\"selectOption(option)\"\r\n >\r\n <span class=\"code\">{{ option.code }}</span>\r\n <span class=\"name\">{{ option.name }}</span>\r\n </div>\r\n <div class=\"no-results\" *ngIf=\"filteredOptions.length === 0\">\r\n No results found\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isInvalid()\" class=\"error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');\r\n\r\n * { font-family: 'Poppins', sans-serif; }\r\n\r\n .fv-name-code-container {\r\n position: relative;\r\n width: 100%;\r\n margin-bottom: 0;\r\n }\r\n\r\n .fv-label {\r\n display: block;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #151D48;\r\n margin-bottom: 6px;\r\n }\r\n\r\n .required-asterisk {\r\n color: #e74c3c;\r\n margin-left: 2px;\r\n }\r\n\r\n .search-box-wrapper {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .fv-input {\r\n width: 100%;\r\n padding: 5px 10px;\r\n height: 34px;\r\n border: 1px solid #8CBBA8;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: #1f2b41;\r\n outline: none;\r\n transition: all 0.2s;\r\n background-color: #fff;\r\n box-sizing: border-box;\r\n font-family: 'Poppins', sans-serif;\r\n min-width: 0;\r\n }\r\n\r\n .fv-input:focus {\r\n border-color: #3498db;\r\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\r\n }\r\n\r\n .fv-input.error {\r\n border-color: #e74c3c;\r\n }\r\n\r\n .fv-input:disabled {\r\n background-color: #f5f5f5;\r\n cursor: not-allowed;\r\n }\r\n\r\n .dropdown-list {\r\n position: absolute;\r\n top: 100%;\r\n left: 0;\r\n min-width: 100%;\r\n width: max-content;\r\n max-width: 300px;\r\n background: white;\r\n border: 1px solid #ddd;\r\n border-radius: 8px;\r\n margin-top: 4px;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n z-index: 1000;\r\n box-shadow: 0 4px 6px rgba(0,0,0,0.1);\r\n }\r\n\r\n .dropdown-item {\r\n padding: 10px 12px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n cursor: pointer;\r\n border-bottom: 1px solid #f0f0f0;\r\n gap: 12px;\r\n }\r\n\r\n .dropdown-item:last-child {\r\n border-bottom: none;\r\n }\r\n\r\n .dropdown-item:hover, .dropdown-item.highlighted {\r\n background-color: #f0f7ff;\r\n }\r\n\r\n .code {\r\n color: #0056b3;\r\n font-weight: 600;\r\n font-size: 14px;\r\n white-space: nowrap;\r\n }\r\n\r\n .name {\r\n color: #333;\r\n font-size: 14px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n text-align: right;\r\n }\r\n\r\n .no-results {\r\n padding: 10px;\r\n color: #999;\r\n text-align: center;\r\n font-size: 13px;\r\n }\r\n\r\n .error-message {\r\n color: #e74c3c;\r\n font-size: 12px;\r\n margin-top: 4px;\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n }\r\n `],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FvNameCodeComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class FvNameCodeComponent implements ControlValueAccessor {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() options: SearchSelectOption[] = [];\r\n @Input() schema?: ValidationSchema;\r\n @Input() control?: FormControl;\r\n @Input() disabled: boolean = false;\r\n\r\n @Output() selectionChange = new EventEmitter<any>();\r\n\r\n searchControl = new FormControl('');\r\n filteredOptions: SearchSelectOption[] = [];\r\n isOpen: boolean = false;\r\n highlightedIndex: number = -1;\r\n\r\n private onChange: (value: any) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n value: any = null;\r\n\r\n ngOnInit() {\r\n this.filteredOptions = this.options;\r\n\r\n this.searchControl.valueChanges.subscribe(term => {\r\n this.filterOptions(term || '');\r\n });\r\n\r\n if (this.control) {\r\n if (this.control.value) {\r\n this.writeValue(this.control.value);\r\n }\r\n this.control.valueChanges.subscribe(val => {\r\n this.writeValue(val);\r\n });\r\n if (this.control.disabled !== this.disabled) {\r\n this.setDisabledState(this.control.disabled);\r\n }\r\n }\r\n }\r\n\r\n filterOptions(term: string) {\r\n if (!term) {\r\n this.filteredOptions = this.options;\r\n return;\r\n }\r\n const lowerTerm = term.toLowerCase();\r\n this.filteredOptions = this.options.filter(opt =>\r\n opt.code.toLowerCase().includes(lowerTerm) ||\r\n opt.name.toLowerCase().includes(lowerTerm)\r\n );\r\n }\r\n\r\n openDropdown() {\r\n if (!this.disabled) {\r\n this.isOpen = true;\r\n this.filterOptions(this.searchControl.value || '');\r\n this.highlightedIndex = this.filteredOptions.length === 1 ? 0 : -1;\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n }\r\n\r\n closeDropdown() {\r\n this.isOpen = false;\r\n this.highlightedIndex = -1;\r\n const selectedOption = this.options.find(o => o.value === this.value);\r\n if (selectedOption) {\r\n this.searchControl.setValue(`${selectedOption.code} - ${selectedOption.name}`, { emitEvent: false });\r\n } else {\r\n if (!this.value) {\r\n this.searchControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n this.onTouched();\r\n }\r\n\r\n selectOption(option: SearchSelectOption) {\r\n if (!option) return;\r\n this.value = option.value;\r\n this.onChange(this.value);\r\n this.searchControl.setValue(`${option.code} - ${option.name}`, { emitEvent: false });\r\n this.selectionChange.emit(this.value);\r\n this.isOpen = false;\r\n this.highlightedIndex = -1;\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n const selectedOption = this.options.find(o => o.value === value);\r\n if (selectedOption) {\r\n this.searchControl.setValue(`${selectedOption.code} - ${selectedOption.name}`, { emitEvent: false });\r\n } else {\r\n this.searchControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (isDisabled) {\r\n this.searchControl.disable({ emitEvent: false });\r\n } else {\r\n this.searchControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n isInvalid(): boolean {\r\n if (this.control) {\r\n return this.control.invalid && (this.control.dirty || this.control.touched);\r\n }\r\n return false;\r\n }\r\n\r\n isRequired(): boolean {\r\n return this.schema?.rules?.some(r => r.name === 'required') || false;\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.control || !this.control.errors || !this.schema) return '';\r\n\r\n for (const errorKey of this.schema.errorPriority) {\r\n if (this.control.hasError(errorKey)) {\r\n const rule = this.schema.rules.find(r => r.name === (errorKey === 'required' ? 'required' : errorKey));\r\n if (rule) return this.getReadableError(rule.errorKey || '');\r\n }\r\n }\r\n if (this.control.hasError('required')) return 'This field is required';\r\n\r\n return 'Invalid value';\r\n }\r\n\r\n getReadableError(key: string): string {\r\n const map: { [key: string]: string } = {\r\n 'ERR_REQUIRED': 'This field is required',\r\n 'ERR_MIN_LENGTH': 'Value is too short',\r\n };\r\n return map[key] || 'Invalid value';\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n const clickedInside = (event.target as HTMLElement).closest('.fv-name-code-container');\r\n if (!clickedInside) {\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isOpen && (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter')) {\r\n this.openDropdown();\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (!this.isOpen) return;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.highlightedIndex = (this.highlightedIndex + 1) % this.filteredOptions.length;\r\n this.scrollToHighlighted();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.highlightedIndex = (this.highlightedIndex - 1 + this.filteredOptions.length) % this.filteredOptions.length;\r\n this.scrollToHighlighted();\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n if (this.filteredOptions.length === 1) {\r\n this.selectOption(this.filteredOptions[0]);\r\n } else if (this.highlightedIndex >= 0 && this.highlightedIndex < this.filteredOptions.length) {\r\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n break;\r\n case 'Escape':\r\n this.closeDropdown();\r\n break;\r\n case 'Tab':\r\n this.closeDropdown();\r\n break;\r\n }\r\n }\r\n\r\n private scrollToHighlighted() {\r\n const list = document.querySelector('.dropdown-list');\r\n const item = document.querySelectorAll('.dropdown-item')[this.highlightedIndex];\r\n if (list && item) {\r\n const listRect = list.getBoundingClientRect();\r\n const itemRect = item.getBoundingClientRect();\r\n\r\n if (itemRect.bottom > listRect.bottom) {\r\n list.scrollTop += (itemRect.bottom - listRect.bottom);\r\n } else if (itemRect.top < listRect.top) {\r\n list.scrollTop -= (listRect.top - itemRect.top);\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-phone-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\r\n templateUrl: './fv-phone-field.component.html',\r\n styleUrl: './fv-phone-field.component.css'\r\n})\r\nexport class FvPhoneFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n countryCode = '+91';\r\n countryCodes = [\r\n '+1', '+7', '+20', '+27', '+30', '+31', '+32', '+33', '+34', '+36', '+39', '+40', '+41', '+43', '+44', '+45', '+46', '+47',\r\n '+48', '+49', '+51', '+52', '+53', '+54', '+55', '+56', '+57', '+58', '+60', '+61', '+62', '+63', '+64', '+65', '+66',\r\n '+81', '+82', '+84', '+86', '+90', '+91', '+92', '+93', '+94', '+95', '+98', '+212', '+213', '+216', '+218', '+220',\r\n '+221', '+222', '+223', '+224', '+225', '+226', '+227', '+228', '+229', '+230', '+231', '+232', '+233', '+234', '+235',\r\n '+236', '+237', '+238', '+239', '+240', '+241', '+242', '+243', '+244', '+245', '+246', '+248', '+249', '+250', '+251',\r\n '+252', '+253', '+254', '+255', '+256', '+257', '+258', '+260', '+261', '+262', '+263', '+264', '+265', '+266', '+267',\r\n '+268', '+269', '+290', '+291', '+297', '+298', '+299', '+350', '+351', '+352', '+353', '+354', '+355', '+356', '+357',\r\n '+358', '+359', '+370', '+371', '+372', '+373', '+374', '+375', '+376', '+377', '+378', '+380', '+381', '+382', '+383',\r\n '+385', '+386', '+387', '+389', '+420', '+421', '+423', '+500', '+501', '+502', '+503', '+504', '+505', '+506', '+507',\r\n '+508', '+509', '+590', '+591', '+592', '+593', '+594', '+595', '+596', '+597', '+598', '+599', '+670', '+672', '+673',\r\n '+674', '+675', '+676', '+677', '+678', '+679', '+680', '+681', '+682', '+683', '+685', '+686', '+687', '+688', '+689',\r\n '+690', '+691', '+692', '+850', '+852', '+853', '+855', '+856', '+880', '+886', '+960', '+961', '+962', '+963', '+964',\r\n '+965', '+966', '+967', '+968', '+970', '+971', '+972', '+973', '+974', '+975', '+976', '+977', '+992', '+993', '+994',\r\n '+995', '+996', '+998'\r\n ];\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvPhoneField: control is required');\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n });\r\n\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n\r\n // Allow only numbers\r\n const numericValue = value.replace(/[^0-9]/g, '');\r\n\r\n // Limit to 10 digits\r\n const truncatedValue = numericValue.substring(0, 10);\r\n\r\n if (value !== truncatedValue) {\r\n input.value = truncatedValue;\r\n this.control.setValue(truncatedValue);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.blur.emit();\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n onFocus() {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false;\r\n }\r\n}\r\n","<div class=\"fv-phone-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-phone-input-group\">\r\n <div class=\"fv-select-wrapper\">\r\n <select class=\"fv-country-code-select\" [disabled]=\"disabled\" [(ngModel)]=\"countryCode\">\r\n <option *ngFor=\"let code of countryCodes\" [value]=\"code\">{{code}}</option>\r\n </select>\r\n <i class=\"material-icons fv-select-arrow\">arrow_drop_down</i>\r\n </div>\r\n <input type=\"text\" [formControl]=\"control\" (input)=\"onInput($event)\" (blur)=\"onBlur()\" (focus)=\"onFocus()\"\r\n placeholder=\"10 digit mobile number\" class=\"fv-input fv-phone-input\"\r\n [class.fv-input-error]=\"errorMessage\" />\r\n </div>\r\n\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">\r\n {{ errorMessage }}\r\n </span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-uan-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-uan-field.component.html',\r\n styleUrl: './fv-uan-field.component.css'\r\n})\r\nexport class FvUanFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'UAN Number';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const numericValue = value.replace(/[^0-9]/g, ''); // Numbers only\r\n const truncatedValue = numericValue.substring(0, 12); // UAN is 12 digits\r\n\r\n if (value !== truncatedValue) {\r\n input.value = truncatedValue;\r\n this.control.setValue(truncatedValue);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n\r\n isRequired(): boolean {\r\n return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" (input)=\"onInput($event)\" placeholder=\"12 digit UAN\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-pf-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-pf-field.component.html',\r\n styleUrl: './fv-pf-field.component.css'\r\n})\r\nexport class FvPfFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'PF Number';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvPfField: control is required');\r\n return;\r\n }\r\n\r\n // Default PF Schema\r\n if (!this.schema) {\r\n this.schema = {\r\n controlType: 'PfField',\r\n errorPriority: ['required', 'regex'],\r\n rules: [\r\n {\r\n name: 'regex',\r\n params: {\r\n pattern: '^[A-Z]{2}/[A-Z]{3}/[0-9]{7}/[0-9]{3}/[0-9]{7}$'\r\n },\r\n errorKey: 'ERR_PF_INVALID'\r\n }\r\n ]\r\n };\r\n }\r\n\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n\r\n // Initial validation\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n // Allow Alphanumeric and slash\r\n const formatted = value.replace(/[^a-zA-Z0-9/]/g, '').toUpperCase();\r\n\r\n if (value !== formatted) {\r\n input.value = formatted;\r\n this.control.setValue(formatted);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'PF Number is required',\r\n ERR_PF_INVALID: 'Invalid PF Number format (e.g. AA/AAA/0000000/000/0000000)',\r\n ERR_REGEX_MISMATCH: 'Invalid PF Number format'\r\n };\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" [disabled]=\"disabled\" (input)=\"onInput($event)\"\r\n placeholder=\"AA/AAA/0000000/000/0000000\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage && control.touched\" />\r\n <span *ngIf=\"errorMessage && control.touched\" class=\"fv-error-message\">{{ getErrorMessage() }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-esi-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-esi-field.component.html',\r\n styleUrl: './fv-esi-field.component.css'\r\n})\r\nexport class FvEsiFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'ESI Number';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const numericValue = value.replace(/[^0-9]/g, '');\r\n const truncatedValue = numericValue.substring(0, 17);\r\n\r\n if (value !== truncatedValue) {\r\n input.value = truncatedValue;\r\n this.control.setValue(truncatedValue);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" (input)=\"onInput($event)\" placeholder=\"17 digit ESI\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-ifsc-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-ifsc-field.component.html',\r\n styleUrl: './fv-ifsc-field.component.css'\r\n})\r\nexport class FvIfscFieldComponent implements OnInit, OnDestroy {\r\n @Input() label: string = 'IFSC Code';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const formatted = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\r\n const truncated = formatted.substring(0, 11);\r\n\r\n if (value !== truncated) {\r\n input.value = truncated;\r\n this.control.setValue(truncated);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" [disabled]=\"disabled\" (input)=\"onInput($event)\" placeholder=\"IFSC Code\"\r\n class=\"fv-input\" [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-micr-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-micr-field.component.html',\r\n styleUrl: './fv-micr-field.component.css'\r\n})\r\nexport class FvMicrFieldComponent implements OnInit, OnDestroy {\r\n @Input() label: string = 'MICR Code';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const numericValue = value.replace(/[^0-9]/g, '');\r\n const truncatedValue = numericValue.substring(0, 9);\r\n\r\n if (value !== truncatedValue) {\r\n input.value = truncatedValue;\r\n this.control.setValue(truncatedValue);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" [disabled]=\"disabled\" (input)=\"onInput($event)\"\r\n placeholder=\"9 digit MICR\" class=\"fv-input\" [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-iban-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-iban-field.component.html',\r\n styleUrl: './fv-iban-field.component.css'\r\n})\r\nexport class FvIbanFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'IBAN Number';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const formatted = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\r\n const truncated = formatted.substring(0, 34);\r\n\r\n if (value !== truncated) {\r\n input.value = truncated;\r\n this.control.setValue(truncated);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" (input)=\"onInput($event)\" placeholder=\"IBAN\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-email-field',\r\n templateUrl: './fv-email-field.component.html',\r\n styleUrl: './fv-email-field.component.css',\r\n})\r\nexport class FvEmailFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'Email Address';\r\n @Input() placeholder: string = 'e.g. john@example.com';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvEmailField: control is required');\r\n return;\r\n }\r\n\r\n // Default email schema if not provided\r\n if (!this.schema) {\r\n this.schema = {\r\n controlType: 'EntryField',\r\n errorPriority: ['required', 'regex'],\r\n rules: [\r\n {\r\n name: 'regex',\r\n params: {\r\n pattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\r\n },\r\n errorKey: 'ERR_EMAIL_INVALID',\r\n },\r\n ],\r\n };\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'Email is required',\r\n ERR_EMAIL_INVALID: 'Invalid email format',\r\n ERR_REGEX_MISMATCH: 'Invalid email format',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }} <span *ngIf=\"isRequired()\" class=\"required\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-input-wrapper\">\r\n <input type=\"email\" [formControl]=\"control\" [placeholder]=\"placeholder\" [readonly]=\"readonly\"\r\n (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" class=\"fv-input\"\r\n [class.error]=\"!!errorMessage && control.touched\" />\r\n <span class=\"fv-field-icon\">\r\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"></path>\r\n <polyline points=\"22,6 12,13 2,6\"></polyline>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage && control.touched\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-password-field',\r\n templateUrl: './fv-password-field.component.html',\r\n styleUrl: './fv-password-field.component.css',\r\n})\r\nexport class FvPasswordFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'Password';\r\n @Input() placeholder: string = '••••••••';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n showPassword: boolean = false;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvPasswordField: control is required');\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n toggleVisibility(): void {\r\n if (this.disabled) return;\r\n this.showPassword = !this.showPassword;\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'Password is required',\r\n ERR_MIN_LENGTH: 'Password is too short',\r\n ERR_REGEX_MISMATCH: 'Invalid password format',\r\n ERR_PASSWORD_TOO_SHORT: 'Password must be at least 8 characters',\r\n ERR_PASSWORD_MISSING_UPPERCASE: 'Uppercase letter missing',\r\n ERR_PASSWORD_MISSING_LOWERCASE: 'Lowercase letter missing',\r\n ERR_PASSWORD_MISSING_NUMBER: 'At least one number missing',\r\n ERR_PASSWORD_MISSING_SPECIAL_CHAR: 'Special character missing',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }} <span *ngIf=\"isRequired()\" class=\"required\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-input-wrapper\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" [formControl]=\"control\" [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\" (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" class=\"fv-input\"\r\n [class.error]=\"!!errorMessage && control.touched\" />\r\n <button type=\"button\" class=\"fv-visibility-toggle\" (click)=\"toggleVisibility()\" [disabled]=\"disabled\">\r\n <svg *ngIf=\"!showPassword\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path>\r\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\r\n </svg>\r\n <svg *ngIf=\"showPassword\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path\r\n d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\">\r\n </path>\r\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage && control.touched\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n</div>","export type FieldType =\r\n | 'text'\r\n | 'email'\r\n | 'number'\r\n | 'select'\r\n | 'name-code'\r\n | 'checkbox'\r\n | 'textarea'\r\n | 'date'\r\n | 'password'\r\n | 'radio'\r\n | 'file'\r\n | 'month-year'\r\n | 'phone'\r\n | 'uan'\r\n | 'pf'\r\n | 'esi'\r\n | 'ifsc'\r\n | 'micr'\r\n | 'iban';\r\nexport type ValidationType =\r\n | 'required'\r\n | 'email'\r\n | 'minLength'\r\n | 'maxLength'\r\n | 'pattern'\r\n | 'min'\r\n | 'max'\r\n | 'custom'\r\n | 'passwordComplexity';\r\n\r\nexport interface FieldValidation {\r\n type: ValidationType;\r\n value?: any; // For minLength, maxLength, min, max, pattern\r\n message?: string; // Custom error message\r\n validator?: (value: any, formGroup?: FormGroup) => boolean; // For custom validation\r\n params?: any; // For complex validation rules like passwordComplexity\r\n errorKey?: string; // Specific error key to return\r\n}\r\n\r\nexport interface FormColumn {\r\n name: string;\r\n label: string;\r\n type: FieldType;\r\n placeholder?: string;\r\n required?: boolean;\r\n options?: { label: string; value: any }[]; // For select fields\r\n validations?: FieldValidation[];\r\n value?: any; // Default value\r\n disabled?: boolean;\r\n className?: string;\r\n hidden?: boolean;\r\n hint?: string;\r\n colSpan?: number;\r\n onChange?: (value: any, formGroup: FormGroup) => void;\r\n accept?: string; // For file input (e.g., 'image/*')\r\n filePreview?: boolean; // Show image preview\r\n showTimePicker?: boolean; // Show time picker for text fields\r\n allowAlphabetsOnly?: boolean;\r\n maxLength?: number;\r\n}\r\n\r\nexport interface FormSection {\r\n title?: string; // Section heading (e.g., \"PERSONAL INFORMATION\")\r\n fields: FormColumn[];\r\n}\r\n\r\nexport interface FormConfig {\r\n sections: FormSection[];\r\n submitLabel?: string;\r\n resetLabel?: string;\r\n onSubmit: (data: any) => void;\r\n onReset?: () => void;\r\n onCancel: () => void;\r\n cancelLabel?: string;\r\n formTitle?: string;\r\n maxColsPerRow?: number;\r\n}\r\n\r\n// add-update-form.component.ts\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n OnDestroy,\r\n AfterViewInit,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AbstractControl,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\n// Import your library modules\r\nimport { FvEntryFieldComponent } from '../fv-entry-field/fv-entry-field.component';\r\nimport { FvNumberFieldComponent } from '../fv-number-field/fv-number-field.component';\r\nimport { FvDropdownComponent } from '../fv-dropdown/fv-dropdown.component';\r\nimport { FvRadioGroupComponent } from '../fv-radio-group/fv-radio-group.component';\r\nimport { FvCheckboxComponent } from '../fv-checkbox/fv-checkbox.component';\r\nimport { FvDateFieldComponent } from '../fv-date-field/fv-date-field.component';\r\nimport { FvMonthYearFieldComponent } from '../fv-month-year-field/fv-month-year-field.component';\r\nimport { FvFileSelectorComponent } from '../fv-file-selector/fv-file-selector.component';\r\nimport { FvImageSelectorComponent } from '../fv-image-selector/fv-image-selector.component';\r\nimport { FvRichTextEditorComponent } from '../fv-rich-text-editor/fv-rich-text-editor.component';\r\nimport { FvNameCodeComponent } from '../fv-name-code/fv-name-code.component';\r\nimport { FvPhoneFieldComponent } from '../fv-phone-field/fv-phone-field.component';\r\nimport { FvUanFieldComponent } from '../fv-uan-field/fv-uan-field.component';\r\nimport { FvPfFieldComponent } from '../fv-pf-field/fv-pf-field.component';\r\nimport { FvEsiFieldComponent } from '../fv-esi-field/fv-esi-field.component';\r\nimport { FvIfscFieldComponent } from '../fv-ifsc-field/fv-ifsc-field.component';\r\nimport { FvMicrFieldComponent } from '../fv-micr-field/fv-micr-field.component';\r\nimport { FvIbanFieldComponent } from '../fv-iban-field/fv-iban-field.component';\r\nimport { FvEmailFieldComponent } from '../fv-email-field/fv-email-field.component';\r\nimport { FvPasswordFieldComponent } from '../fv-password-field/fv-password-field.component';\r\n\r\n// Import Validation Types\r\nimport { ValidationSchema, ValidationRule } from '@fovestta2/validation-engine';\r\n@Component({\r\n selector: 'lib-add-update-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FvEntryFieldComponent,\r\n FvNumberFieldComponent,\r\n FvDropdownComponent,\r\n FvRadioGroupComponent,\r\n FvCheckboxComponent,\r\n FvDateFieldComponent,\r\n FvMonthYearFieldComponent,\r\n FvFileSelectorComponent,\r\n FvImageSelectorComponent,\r\n FvRichTextEditorComponent,\r\n FvNameCodeComponent,\r\n FvPhoneFieldComponent,\r\n FvUanFieldComponent,\r\n FvPfFieldComponent,\r\n FvEsiFieldComponent,\r\n FvIfscFieldComponent,\r\n FvMicrFieldComponent,\r\n FvIbanFieldComponent,\r\n FvEmailFieldComponent,\r\n FvPasswordFieldComponent,\r\n ],\r\n template: `\r\n <div class=\"form-container\">\r\n <div class=\"form-header\" *ngIf=\"config.formTitle\">\r\n <h2>{{ config.formTitle }}</h2>\r\n </div>\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"handleSubmit()\" class=\"dynamic-form\">\r\n <div *ngFor=\"let section of config.sections\" class=\"form-section\">\r\n <h3 class=\"section-title\" *ngIf=\"section.title\">\r\n {{ section.title }}\r\n </h3>\r\n\r\n <div class=\"fields-row\">\r\n <ng-container *ngFor=\"let column of section.fields\">\r\n <div\r\n class=\"form-field-wrapper\"\r\n [ngClass]=\"'field-' + column.type\"\r\n [ngStyle]=\"column.hidden ? { display: 'none' } : {}\"\r\n [style.grid-column]=\"'span ' + (column.colSpan || 1)\"\r\n >\r\n <ng-container\r\n *ngIf=\"column.type === 'text' && !column.hidden\"\r\n >\r\n <fv-entry-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n type=\"text\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n [readonly]=\"false\"\r\n [allowAlphabetsOnly]=\"column.allowAlphabetsOnly || false\"\r\n [maxLength]=\"column.maxLength || null\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-entry-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'email' && !column.hidden\"\r\n >\r\n <fv-email-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-email-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'password' && !column.hidden\"\r\n >\r\n <fv-password-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-password-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'number' && !column.hidden\"\r\n >\r\n <fv-number-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-number-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'select' && !column.hidden\"\r\n >\r\n <fv-dropdown\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select option'\"\r\n [options]=\"column.options || []\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-dropdown>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'checkbox' && !column.hidden\"\r\n >\r\n <fv-checkbox\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.name)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-checkbox>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'radio' && !column.hidden\">\r\n <fv-radio-group\r\n [label]=\"column.label\"\r\n [options]=\"column.options || []\"\r\n [control]=\"getControl(column.name)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'date' && !column.hidden\">\r\n <fv-date-field\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-date-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'month-year' && !column.hidden\"\r\n >\r\n <fv-month-year-field\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleMonthYearChange(column.name, $event)\"\r\n >\r\n </fv-month-year-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'textarea' && !column.hidden\"\r\n >\r\n <fv-rich-text-editor\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-rich-text-editor>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'file' && !column.hidden\">\r\n <ng-container *ngIf=\"isImageField(column); else standardFile\">\r\n <fv-image-selector\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select image'\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"onFileChange($event, column.name)\"\r\n >\r\n </fv-image-selector>\r\n </ng-container>\r\n\r\n <ng-template #standardFile>\r\n <fv-file-selector\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select file'\"\r\n [accept]=\"column.accept || '*/*'\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"onFileChange($event, column.name)\"\r\n >\r\n </fv-file-selector>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'name-code' && !column.hidden\"\r\n >\r\n <fv-name-code\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Search by Code or Name'\"\r\n [options]=\"column.options ? mapSearchOptions(column.options) : []\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n >\r\n </fv-name-code>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'phone' && !column.hidden\">\r\n <fv-phone-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-phone-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'uan' && !column.hidden\">\r\n <fv-uan-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-uan-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'pf' && !column.hidden\">\r\n <fv-pf-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-pf-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'esi' && !column.hidden\">\r\n <fv-esi-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-esi-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'ifsc' && !column.hidden\">\r\n <fv-ifsc-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-ifsc-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'micr' && !column.hidden\">\r\n <fv-micr-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-micr-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'iban' && !column.hidden\">\r\n <fv-iban-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-iban-field>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-actions\">\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid && submitted\"\r\n >\r\n {{ config.submitLabel || 'Save' }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline\"\r\n (click)=\"config.onCancel()\"\r\n >\r\n {{ config.cancelLabel || 'Cancel' }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n `,\r\n styles: `\r\n\r\n @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');\r\n @import url('https://fonts.googleapis.com/icon?family=Material+Icons');\r\n *{\r\n font-family: \"Poppins\" !important;\r\n }\r\n .form-container {\r\n background: #f5f5f5;\r\n padding: 5px 10px 10px;\r\n border-radius: 8px;\r\n margin: 0 auto;\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n .error-border {\r\n border-color: red !important;\r\n }\r\n\r\n .hidden{\r\n display:none !important;\r\n }\r\n\r\n .form-header {\r\n margin-bottom: 5px;\r\n }\r\n\r\n .form-header h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: #303030;\r\n }\r\n\r\n .dynamic-form {\r\n background: white;\r\n padding: 10px;\r\n border-radius: 6px;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n .form-section {\r\n margin-bottom:10px;\r\n }\r\n\r\n .section-title {\r\n font-size: 16px;\r\n font-weight: 700;\r\n color: #303030;\r\n margin: 0 0 16px 0;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n }\r\n\r\n .fields-row {\r\n display: grid;\r\n grid-template-columns: repeat(5,1fr);\r\n gap: 16px;\r\n width: 100%;\r\n box-sizing: border-box;\r\n overflow: visible;\r\n }\r\n\r\n .form-field-wrapper {\r\n display: flex;\r\n position: relative;\r\n flex-direction: column;\r\n min-width: 0;\r\n width: 100%;\r\n box-sizing: border-box;\r\n overflow: visible;\r\n }\r\n\r\n .password-toggle-btn {\r\n position: absolute;\r\n right: 10px;\r\n top: 32px;\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n padding: 4px;\r\n color: #666;\r\n}\r\n\r\n.password-toggle-btn:hover {\r\n color: #333;\r\n}\r\n\r\n.password-toggle-btn .material-icons {\r\n font-size: 20px;\r\n width: auto;\r\n height: auto;\r\n padding: 0;\r\n}\r\n\r\n @media (min-width: 1200px) and (max-width: 1400px) {\r\n .fields-row {\r\n grid-template-columns: repeat(5,1fr);\r\n }\r\n .form-control {\r\n width: 180px;\r\n max-width: 180px;\r\n }\r\n }\r\n\r\n @media (max-width: 1200px) {\r\n .fields-row {\r\n grid-template-columns: repeat(3,1fr);\r\n }\r\n .form-control {\r\n width: 100%;\r\n max-width: 100%;\r\n }\r\n }\r\n\r\n @media (max-width: 992px) {\r\n .fields-row {\r\n grid-template-columns: repeat(2,1fr);\r\n gap: 12px;\r\n }\r\n }\r\n\r\n @media (max-width: 768px) {\r\n .fields-row {\r\n grid-template-columns: repeat(2,1fr);\r\n gap: 10px;\r\n }\r\n }\r\n\r\n @media (max-width: 640px) {\r\n .fields-row {\r\n grid-template-columns: 1fr;\r\n gap: 12px;\r\n }\r\n .form-field-wrapper {\r\n width: 100%;\r\n }\r\n }\r\n\r\n label {\r\n font-weight: 600;\r\n margin-bottom: 6px;\r\n color: #151D48;\r\n font-size: 14px;\r\n }\r\n\r\n .required {\r\n color: #e74c3c;\r\n margin-left: 2px;\r\n }\r\n\r\n .form-control {\r\n padding: 5px 10px;\r\n width: 100%;\r\n max-width: 100%;\r\n height: 34px;\r\n border: 1px solid #8CBBA8;\r\n border-radius: 8px;\r\n background-color: #ffffff;\r\n font-size: 14px;\r\n font-weight: 400;\r\n font-family: inherit;\r\n color: #1f2b41;\r\n transition: border-color 0.2s, box-shadow 0.2s;\r\n box-sizing: border-box;\r\n }\r\n\r\n .form-control:focus {\r\n outline: none;\r\n border-color: #3498db;\r\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\r\n }\r\n\r\n .form-control:disabled {\r\n background-color: #ecf0f1;\r\n cursor: not-allowed;\r\n }\r\n\r\n textarea.form-control {\r\n resize: vertical;\r\n min-height: 100px;\r\n }\r\n\r\n select.form-control {\r\n cursor: pointer;\r\n appearance: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23333' d='M6 9L1 4h10z'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: right 8px center;\r\n padding-right: 40px;\r\n }\r\n\r\n .checkbox-wrapper {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n }\r\n\r\n input[type=\"checkbox\"] {\r\n width: 18px;\r\n height: 18px;\r\n cursor: pointer;\r\n }\r\n\r\n .checkbox-label {\r\n cursor: pointer;\r\n margin: 0;\r\n }\r\n\r\n .file-upload-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 20px;\r\n padding: 20px;\r\n background: white;\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.material-icons {\r\n font-family: 'Material Icons' !important;\r\n border-radius: 4px;\r\n display: inline-block;\r\n width: 40px;\r\n padding: 8px;\r\n height: 40px;\r\n}\r\n\r\n.file-field-wrapper {\r\n width: 100%;\r\n margin-top: 16px;\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.photo-preview-circle {\r\n width: 100px;\r\n height: 100px;\r\n border-radius: 50%;\r\n overflow: hidden;\r\n border: 2px solid #ddd;\r\n cursor: pointer;\r\n transition: border-color 0.2s;\r\n}\r\n\r\n.photo-preview-circle:hover {\r\n border-color: #3498db;\r\n}\r\n\r\n.preview-image, .default-photo {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.preview-image img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n}\r\n\r\n.default-photo {\r\n background: #f0f0f0;\r\n color: #999;\r\n font-size: 40px;\r\n}\r\n\r\n.file-info {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n}\r\n.btn-delete {\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n padding: 0px;\r\n}\r\n\r\n.upload-btn-group {\r\n display: flex;\r\n align-items: center;\r\n border: 1px solid #d3d3d3;\r\n border-radius: 8px;\r\n background: #fff;\r\n overflow: hidden;\r\n width: fit-content;\r\n}\r\n\r\n.btn-upload {\r\n background: #fff;\r\n color: #222;\r\n border: none;\r\n padding: 0 18px;\r\n font-size: 16px;\r\n border-right: 1px solid #e0e0e0;\r\n border-radius: 8px 0 0 8px;\r\n outline: none;\r\n box-shadow: none;\r\n cursor: pointer;\r\n height: 40px;\r\n transition: background 0.2s;\r\n}\r\n\r\n.btn-upload-icon {\r\n background: #f5f5f5;\r\n border: none;\r\n border-radius: 0 8px 8px 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 48px;\r\n height: 40px;\r\n cursor: pointer;\r\n transition: background 0.2s;\r\n}\r\n\r\n.btn-upload-icon i.material-icons {\r\n font-size: 22px;\r\n color: #222;\r\n}\r\n\r\n.btn-upload:hover, .btn-upload-icon:hover {\r\n background: #f0f0f0;\r\n}\r\n\r\n.btn-delete {\r\n background: white;\r\n color: red;\r\n}\r\n\r\n.btn-delete:hover {\r\n background: #f0f0f0;\r\n}\r\n\r\n.file-name {\r\n font-size: 12px;\r\n color: #666;\r\n margin: 8px;\r\n margin-top: 10px;\r\n}\r\n\r\n.file-label {\r\n font-weight: 600;\r\n margin-bottom: 6px;\r\n color: #151d48;\r\n font-size: 14px;\r\n display: block;\r\n}\r\n\r\n .radio-label {\r\n font-weight: 600;\r\n margin-bottom: 15px;\r\n color: #151D48;\r\n font-size: 14px;\r\n display: block;\r\n}\r\n\r\n.radio-group {\r\n display: flex;\r\n gap: 20px;\r\n align-items: center;\r\n}\r\n\r\n.radio-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n}\r\n\r\ninput[type=\"radio\"] {\r\n width: 18px;\r\n height: 18px;\r\n cursor: pointer;\r\n accent-color: #3498db;\r\n}\r\n\r\n.radio-option-label {\r\n cursor: pointer;\r\n margin: 0;\r\n font-weight: 400;\r\n}\r\n\r\n .hint {\r\n font-size: 12px;\r\n color: #7f8c8d;\r\n margin-top: 4px;\r\n }\r\n\r\n .error-message {\r\n color: #e74c3c;\r\n font-size: 12px;\r\n margin-top: 4px;\r\n }\r\n\r\n .form-actions {\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n padding-top: 5px;\r\n }\r\n\r\n .btn {\r\n padding: 8px 20px;\r\n border: none;\r\n border-radius: 7px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n }\r\n\r\n .btn-primary {\r\n background-color: #006AFF;\r\n color: white;\r\n }\r\n\r\n .btn-primary:hover:not(:disabled) {\r\n background-color: #2980b9;\r\n }\r\n\r\n .btn-primary:disabled {\r\n background-color: #bdc3c7;\r\n cursor: not-allowed;\r\n }\r\n\r\n .btn-secondary {\r\n background-color: #95a5a6;\r\n color: white;\r\n }\r\n\r\n .btn-secondary:hover {\r\n background-color: #7f8c8d;\r\n }\r\n\r\n .btn-outline {\r\n background-color: #303030;\r\n color: white;\r\n }\r\n\r\n .btn-outline:hover {\r\n background-color: #2b2b2bff;\r\n color: white;\r\n }\r\n\r\n .month-year-wrapper {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n }\r\n\r\n .month-year-wrapper .form-control {\r\n padding-right: 45px;\r\n }\r\n\r\n .month-picker-hidden {\r\n position: absolute;\r\n opacity: 0;\r\n pointer-events: none;\r\n width: 0;\r\n height: 0;\r\n border: none;\r\n padding: 0;\r\n margin: 0;\r\n }\r\n\r\n .month-picker-btn {\r\n position: absolute;\r\n right: 5px;\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n padding: 5px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #666;\r\n transition: color 0.2s;\r\n z-index: 1;\r\n }\r\n\r\n .month-picker-btn:hover:not(:disabled) {\r\n color: #3498db;\r\n }\r\n\r\n .month-picker-btn:disabled {\r\n cursor: not-allowed;\r\n opacity: 0.5;\r\n }\r\n\r\n .month-picker-btn .material-icons {\r\n font-size: 20px;\r\n width: auto;\r\n height: auto;\r\n padding: 0;\r\n }\r\n\r\n .search-select-wrapper {\r\n position: relative;\r\n width: 100%;\r\n }\r\n\r\n .search-select-input {\r\n padding-right: 10px;\r\n }\r\n\r\n .search-select-dropdown {\r\n position: absolute;\r\n top: calc(100% + 4px);\r\n left: 0;\r\n right: auto;\r\n min-width: 100%;\r\n max-width: calc(100vw - 16px);\r\n background: white;\r\n border: 1px solid #d3d3d3;\r\n border-radius: 8px;\r\n max-height: 220px;\r\n overflow-y: auto;\r\n box-shadow: 0 4px 10px rgba(0,0,0,0.08);\r\n z-index: 5;\r\n padding: 6px 0;\r\n transform: translateX(0);\r\n transition: transform 0.1s ease-out;\r\n }\r\n\r\n .search-select-option {\r\n padding: 8px 12px;\r\n cursor: pointer;\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n border-bottom: 1px solid #f2f2f2;\r\n }\r\n\r\n .search-select-option:last-child {\r\n border-bottom: none;\r\n }\r\n\r\n .search-select-option:hover {\r\n background: #f5f9ff;\r\n }\r\n\r\n .option-code {\r\n color: #0052cc;\r\n font-weight: 700;\r\n min-width: 90px;\r\n }\r\n\r\n .option-name {\r\n color: #151d48;\r\n font-weight: 500;\r\n }\r\n\r\n .time-picker-wrapper {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n }\r\n\r\n .time-input {\r\n padding-right: 45px;\r\n flex: 1;\r\n }\r\n\r\n .time-picker-btn {\r\n position: absolute;\r\n right: 5px;\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n padding: 5px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #666;\r\n transition: color 0.2s;\r\n z-index: 1;\r\n }\r\n\r\n .time-picker-btn:hover:not(:disabled) {\r\n color: #3498db;\r\n }\r\n\r\n .time-picker-btn:disabled {\r\n cursor: not-allowed;\r\n opacity: 0.5;\r\n }\r\n\r\n .time-picker-btn .material-icons {\r\n font-size: 20px;\r\n width: auto;\r\n height: auto;\r\n padding: 0;\r\n }\r\n\r\n input[type=\"time\"] {\r\n cursor: pointer;\r\n }\r\n\r\n input[type=\"time\"]::-webkit-calendar-picker-indicator {\r\n cursor: pointer;\r\n opacity: 0;\r\n position: absolute;\r\n right: 0;\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n .date-picker-field {\r\n width: 100%;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mat-mdc-form-field {\r\n width: 100%;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mat-mdc-text-field-wrapper {\r\n background-color: #ffffff;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__leading,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__notch,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__trailing {\r\n border-color: #8CBBA8;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing {\r\n border-color: #8CBBA8;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined.mdc-text-field--focused .mdc-notched-outline__leading,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined.mdc-text-field--focused .mdc-notched-outline__notch,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined.mdc-text-field--focused .mdc-notched-outline__trailing {\r\n border-color: #3498db;\r\n }\r\n\r\n .date-picker-field.error-border ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__leading,\r\n .date-picker-field.error-border ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__notch,\r\n .date-picker-field.error-border ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__trailing {\r\n border-color: red !important;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mat-mdc-form-field-subscript-wrapper {\r\n display: none;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mat-mdc-form-field-input-control input {\r\n font-family: \"Poppins\" !important;\r\n font-size: 14px;\r\n font-weight: 400;\r\n color: #1f2b41;\r\n }\r\n `,\r\n})\r\nexport class AddUpdateFormComponent\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n @Input() config!: FormConfig;\r\n @Output() validationError = new EventEmitter<string>();\r\n form!: FormGroup;\r\n submitted = false;\r\n private filePreviews: Map<string, string> = new Map();\r\n private fileNames: Map<string, string> = new Map();\r\n private valueChangeSubscriptions: Subscription[] = [];\r\n private passwordVisibility: Map<string, boolean> = new Map();\r\n private searchQueries: Map<string, string> = new Map();\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private hostRef: ElementRef<HTMLElement>\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Lifecycle hook - can be used for datepicker initialization if needed\r\n }\r\n\r\n getColumnWidth(column: FormColumn): string {\r\n const maxCols = this.config.maxColsPerRow || 5;\r\n const colSpan = Math.min(column.colSpan || 1, maxCols);\r\n return `calc(${(colSpan / maxCols) * 100}% - 16px)`;\r\n }\r\n\r\n getControl(name: string): FormControl {\r\n return this.form.get(name) as FormControl;\r\n }\r\n\r\n // 2. HELPER: Convert your FieldValidation[] to the library's ValidationSchema\r\n getSchema(column: FormColumn): ValidationSchema {\r\n const rules: ValidationRule[] = [];\r\n const errorPriority: string[] = [];\r\n\r\n if (column.validations) {\r\n column.validations.forEach((v) => {\r\n switch (v.type) {\r\n case 'required':\r\n rules.push({\r\n name: 'required',\r\n params: { enabled: true },\r\n errorKey: 'ERR_REQUIRED',\r\n });\r\n errorPriority.push('required');\r\n break;\r\n case 'email':\r\n rules.push({\r\n name: 'regex',\r\n params: {\r\n pattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\r\n },\r\n errorKey: 'ERR_REGEX_MISMATCH',\r\n });\r\n errorPriority.push('regex');\r\n break;\r\n case 'minLength':\r\n rules.push({\r\n name: 'minLength',\r\n params: { value: v.value },\r\n errorKey: 'ERR_MIN_LENGTH',\r\n });\r\n errorPriority.push('minLength');\r\n break;\r\n case 'maxLength':\r\n rules.push({\r\n name: 'maxLength',\r\n params: { value: v.value },\r\n errorKey: 'ERR_MAX_LENGTH',\r\n });\r\n errorPriority.push('maxLength');\r\n break;\r\n case 'pattern':\r\n rules.push({\r\n name: 'regex',\r\n params: { pattern: v.value },\r\n errorKey: 'ERR_REGEX_MISMATCH',\r\n });\r\n errorPriority.push('regex');\r\n break;\r\n case 'passwordComplexity':\r\n rules.push({\r\n name: 'passwordComplexity',\r\n params: v.params || {\r\n requireUppercase: true,\r\n requireLowercase: true,\r\n requireNumber: true,\r\n requireSpecialChar: true,\r\n minLength: 8\r\n },\r\n errorKey: v.errorKey || 'ERR_PASSWORD_COMPLEXITY_INVALID',\r\n });\r\n errorPriority.push('passwordComplexity');\r\n break;\r\n case 'min':\r\n rules.push({\r\n name: 'min',\r\n params: { value: v.value },\r\n errorKey: 'ERR_MIN_VALUE',\r\n });\r\n errorPriority.push('min');\r\n break;\r\n case 'max':\r\n rules.push({\r\n name: 'max',\r\n params: { value: v.value },\r\n errorKey: 'ERR_MAX_VALUE',\r\n });\r\n errorPriority.push('max');\r\n break;\r\n }\r\n });\r\n }\r\n\r\n // Map 'name-code' to 'Dropdown' or similar for validation schema purposes if needed\r\n let controlType = column.type;\r\n if (column.type === 'name-code') {\r\n controlType = 'select'; // Treat as select for schema lookup if library expects 'select' or 'Dropdown'\r\n }\r\n\r\n return {\r\n controlType: controlType,\r\n errorPriority: errorPriority,\r\n rules: rules,\r\n };\r\n }\r\n\r\n isImageField(column: FormColumn): boolean {\r\n return (\r\n column.type === 'file' &&\r\n (column.accept?.startsWith('image') || column.filePreview === true)\r\n );\r\n }\r\n\r\n initializeForm() {\r\n this.submitted = false;\r\n const formGroupConfig: any = {};\r\n\r\n this.config.sections.forEach((section) => {\r\n section.fields.forEach((column) => {\r\n let initialValue = column.value || '';\r\n\r\n // Format month-year fields to YYYY-MM format\r\n if (column.type === 'month-year' && initialValue) {\r\n initialValue = this.formatMonthYearValue(initialValue);\r\n }\r\n\r\n formGroupConfig[column.name] = [\r\n { value: initialValue, disabled: column.disabled || false },\r\n null, // We'll set validators after form creation\r\n ];\r\n\r\n // If it's a file field with an existing value, set the preview\r\n if (column.type === 'file' && column.value) {\r\n this.filePreviews.set(column.name, column.value);\r\n // Extract filename from URL or base64\r\n const fileName = this.extractFileName(column.value);\r\n if (fileName) {\r\n this.fileNames.set(column.name, fileName);\r\n }\r\n }\r\n\r\n // Initialize search display for name-code fields - No longer needed as FvNameCode handles display internally\r\n /* if (column.type === 'name-code' && initialValue && column.options) {\r\n // Logic moved to component\r\n } */\r\n });\r\n });\r\n\r\n this.form = this.fb.group(formGroupConfig);\r\n\r\n this.config.sections.forEach((section) => {\r\n section.fields.forEach((column) => {\r\n const validators = this.buildValidators(column.validations, this.form);\r\n if (validators.length > 0) {\r\n this.form.get(column.name)?.setValidators(validators);\r\n this.form.get(column.name)?.updateValueAndValidity();\r\n }\r\n });\r\n });\r\n\r\n // Subscribe to value changes for all fields to trigger onChange handlers\r\n Object.keys(this.form.controls).forEach((key) => {\r\n const control = this.form.get(key);\r\n if (control) {\r\n const subscription = control.valueChanges\r\n .pipe(distinctUntilChanged())\r\n .subscribe((value) => {\r\n const column = this.getColumnByName(key);\r\n if (column?.onChange) {\r\n column.onChange(value, this.form);\r\n }\r\n });\r\n this.valueChangeSubscriptions.push(subscription);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // Clean up all subscriptions to prevent memory leaks\r\n this.valueChangeSubscriptions.forEach((sub) => sub.unsubscribe());\r\n this.valueChangeSubscriptions = [];\r\n }\r\n\r\n handleFieldChange(fieldName: string, eventValue?: any) {\r\n const column = this.getColumnByName(fieldName);\r\n const formControl = this.form.get(fieldName);\r\n\r\n // Format month-year fields (especially expiryDate) to YYYY-MM\r\n if (column?.type === 'month-year' && eventValue) {\r\n const formattedValue = this.formatMonthYearValue(eventValue);\r\n if (formControl && formattedValue !== eventValue) {\r\n formControl.setValue(formattedValue, { emitEvent: false });\r\n eventValue = formattedValue;\r\n }\r\n }\r\n\r\n if (column?.onChange) {\r\n // Use the event value directly (what the user just selected/typed)\r\n // This ensures we have the correct value even if form control hasn't updated yet\r\n const valueToPass =\r\n eventValue !== undefined ? eventValue : this.form.get(fieldName)?.value;\r\n const onChangeFn = column.onChange; // Store the function reference\r\n\r\n // Store the selected value - this is what the user chose\r\n const selectedValue = valueToPass;\r\n\r\n // Ensure the form control has the selected value before calling onChange\r\n if (formControl && selectedValue !== undefined) {\r\n if (formControl.value !== selectedValue) {\r\n formControl.setValue(selectedValue, { emitEvent: false });\r\n }\r\n }\r\n\r\n // Call onChange with the selected value\r\n if (onChangeFn) {\r\n onChangeFn(selectedValue, this.form);\r\n }\r\n\r\n // Restore the value for the field that triggered the change if it was cleared by onChange\r\n // This is critical: if onChange clears the field that was just changed, we restore it\r\n // Only restore if we had a non-empty value (empty string, null, undefined are not restored)\r\n if (\r\n formControl &&\r\n selectedValue !== undefined &&\r\n selectedValue !== null &&\r\n selectedValue !== ''\r\n ) {\r\n // Use setTimeout with 0 delay to run after any synchronous operations in onChange\r\n setTimeout(() => {\r\n // Check if the value was cleared or changed\r\n const currentValue = formControl.value;\r\n // If the value doesn't match what was selected, restore it\r\n // This handles the case where onChange cleared the field unintentionally\r\n if (currentValue !== selectedValue) {\r\n formControl.setValue(selectedValue, { emitEvent: false });\r\n }\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n formatMonthYearValue(value: string): string {\r\n if (!value) return value;\r\n // Normalize to YYYY-MM\r\n if (value.match(/^\\d{2}-\\d{4}$/)) {\r\n const [month, year] = value.split('-');\r\n return `${year}-${month}`;\r\n }\r\n // If already in YYYY-MM format, return as is\r\n return value;\r\n }\r\n\r\n parseMonthYearValue(value: string): string {\r\n if (!value) return value;\r\n // Display and picker both use YYYY-MM; normalize MM-YYYY if present\r\n if (value.match(/^\\d{2}-\\d{4}$/)) {\r\n const [month, year] = value.split('-');\r\n return `${year}-${month}`;\r\n }\r\n return value;\r\n }\r\n\r\n handleMonthYearChange(fieldName: string, value: string) {\r\n // Format the input value to YYYY-MM format\r\n let formattedValue = value;\r\n\r\n // If it's in MM-YYYY format, convert to YYYY-MM\r\n if (formattedValue.match(/^\\d{2}-\\d{4}$/)) {\r\n const [month, year] = formattedValue.split('-');\r\n formattedValue = `${year}-${month}`;\r\n }\r\n // If it's in YYYYMM format (no dash), convert to YYYY-MM\r\n else if (formattedValue.match(/^\\d{6}$/)) {\r\n const year = formattedValue.substring(0, 4);\r\n const month = formattedValue.substring(4, 6);\r\n formattedValue = `${year}-${month}`;\r\n }\r\n // If it's already in YYYY-MM format, leave as is\r\n else if (formattedValue.match(/^\\d{4}-\\d{2}$/)) {\r\n // Already in correct format\r\n }\r\n // If user is typing, allow partial input\r\n else if (formattedValue.match(/^\\d{1,6}$/)) {\r\n // Allow partial input while typing\r\n }\r\n\r\n const formControl = this.form.get(fieldName);\r\n if (formControl && formattedValue !== value) {\r\n formControl.setValue(formattedValue, { emitEvent: false });\r\n }\r\n\r\n this.handleFieldChange(fieldName, formattedValue);\r\n }\r\n\r\n handleMonthYearBlur(fieldName: string) {\r\n const formControl = this.form.get(fieldName);\r\n if (!formControl) return;\r\n\r\n const value = formControl.value || '';\r\n // Ensure the value is in YYYY-MM format on blur\r\n if (value && !value.match(/^\\d{4}-\\d{2}$/)) {\r\n // Try to parse and format\r\n const formatted = this.formatMonthYearValue(value);\r\n if (formatted !== value) {\r\n formControl.setValue(formatted, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n handleMonthYearPickerChange(fieldName: string, value: string) {\r\n // Month picker outputs YYYY-MM; just normalize\r\n const formattedValue = this.formatMonthYearValue(value);\r\n const formControl = this.form.get(fieldName);\r\n if (formControl) {\r\n formControl.setValue(formattedValue, { emitEvent: false });\r\n this.handleFieldChange(fieldName, formattedValue);\r\n }\r\n }\r\n\r\n getMonthYearPickerValue(fieldName: string): string {\r\n const formControl = this.form.get(fieldName);\r\n if (!formControl) return '';\r\n const value = formControl.value || '';\r\n // Display and picker both expect YYYY-MM\r\n return this.parseMonthYearValue(value);\r\n }\r\n\r\n openMonthPicker(fieldName: string) {\r\n const monthInput = document.getElementById(\r\n fieldName + '_picker'\r\n ) as HTMLInputElement;\r\n if (monthInput && monthInput.type === 'month') {\r\n // Update the picker value before opening\r\n const currentValue = this.getMonthYearPickerValue(fieldName);\r\n if (currentValue) {\r\n monthInput.value = currentValue;\r\n }\r\n // Try modern showPicker API first, fallback to click\r\n if (monthInput.showPicker) {\r\n monthInput.showPicker();\r\n } else {\r\n monthInput.focus();\r\n monthInput.click();\r\n }\r\n }\r\n }\r\n\r\n getColumnByName(name: string): FormColumn | undefined {\r\n return this.config.sections\r\n .flatMap((s) => s.fields)\r\n .find((c) => c.name === name);\r\n }\r\n\r\n getFileFields(fields: FormColumn[]): FormColumn[] {\r\n return fields.filter((f) => f.type === 'file');\r\n }\r\n\r\n getNonFileFields(fields: FormColumn[]): FormColumn[] {\r\n return fields.filter((f) => f.type !== 'file');\r\n }\r\n\r\n togglePasswordVisibility(fieldName: string) {\r\n const current = this.passwordVisibility.get(fieldName) || false;\r\n this.passwordVisibility.set(fieldName, !current);\r\n }\r\n hasRequiredValidation(column: FormColumn): boolean {\r\n return column.validations?.some((v) => v.type === 'required') || false;\r\n }\r\n\r\n isPasswordVisible(fieldName: string): boolean {\r\n return this.passwordVisibility.get(fieldName) || false;\r\n }\r\n\r\n buildValidators(\r\n validations?: FieldValidation[],\r\n formGroup?: FormGroup\r\n ): any[] {\r\n if (!validations) return [];\r\n\r\n const validators: any[] = [];\r\n validations.forEach((validation) => {\r\n switch (validation.type) {\r\n case 'required':\r\n validators.push(Validators.required);\r\n break;\r\n case 'email':\r\n validators.push(Validators.email);\r\n break;\r\n case 'minLength':\r\n validators.push(Validators.minLength(validation.value));\r\n break;\r\n case 'maxLength':\r\n validators.push(Validators.maxLength(validation.value));\r\n break;\r\n case 'min':\r\n validators.push(Validators.min(validation.value));\r\n break;\r\n case 'max':\r\n validators.push(Validators.max(validation.value));\r\n break;\r\n case 'pattern':\r\n validators.push(Validators.pattern(validation.value));\r\n break;\r\n case 'custom':\r\n if (validation.validator) {\r\n validators.push((control: AbstractControl) => {\r\n const isValid = validation.validator!(control.value, formGroup);\r\n return isValid ? null : { custom: true };\r\n });\r\n }\r\n break;\r\n }\r\n });\r\n return validators;\r\n }\r\n\r\n triggerFileUpload(fieldName: string) {\r\n document.getElementById('fileInput_' + fieldName)?.click();\r\n }\r\n\r\n openTimePicker(fieldName: string) {\r\n const timeInput = document.getElementById(fieldName) as HTMLInputElement;\r\n if (timeInput && timeInput.type === 'time') {\r\n // Try modern showPicker API first, fallback to click\r\n if (timeInput.showPicker) {\r\n timeInput.showPicker();\r\n } else {\r\n timeInput.focus();\r\n timeInput.click();\r\n }\r\n }\r\n }\r\n\r\n onFileChange(event: any, fieldName: string) {\r\n const file: File = event.target.files[0];\r\n if (file) {\r\n this.fileNames.set(fieldName, file.name);\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n const base64String = reader.result as string;\r\n this.filePreviews.set(fieldName, base64String);\r\n this.form.get(fieldName)?.setValue(base64String);\r\n\r\n // Trigger onChange handler for file fields\r\n const column = this.getColumnByName(fieldName);\r\n if (column?.onChange) {\r\n column.onChange(base64String, this.form);\r\n }\r\n };\r\n }\r\n }\r\n\r\n extractFileName(value: string): string {\r\n if (!value) return '';\r\n\r\n // If it's a URL, extract filename from URL\r\n if (value.startsWith('http')) {\r\n const parts = value.split('/');\r\n return parts[parts.length - 1];\r\n }\r\n\r\n // If it's base64, return a generic name\r\n if (value.startsWith(`data:image`)) {\r\n return 'uploaded-image.jpg';\r\n }\r\n\r\n return 'existing-photo.jpg';\r\n }\r\n\r\n getFilePreview(fieldName: string): string | null {\r\n return this.filePreviews.get(fieldName) || null;\r\n }\r\n\r\n getFileName(fieldName: string): string | null {\r\n return this.fileNames.get(fieldName) || null;\r\n }\r\n\r\n mapSearchOptions(options: any[]): any[] {\r\n return options.map(opt => ({\r\n code: opt.code || opt.value,\r\n name: opt.name || opt.label || opt.value,\r\n value: opt.value\r\n }));\r\n }\r\n\r\n\r\n deleteFile(fieldName: string) {\r\n this.filePreviews.delete(fieldName);\r\n this.fileNames.delete(fieldName);\r\n this.form.get(fieldName)?.setValue('');\r\n\r\n // Trigger onChange handler when file is deleted\r\n const column = this.getColumnByName(fieldName);\r\n if (column?.onChange) {\r\n column.onChange('', this.form);\r\n }\r\n }\r\n\r\n handleSubmit() {\r\n this.submitted = true;\r\n if (this.form.invalid) {\r\n // Mark all fields as touched to show red borders\r\n Object.keys(this.form.controls).forEach((key) => {\r\n this.form.get(key)?.markAsTouched();\r\n });\r\n\r\n // Count only required fields that are invalid\r\n const allColumns = this.config.sections.flatMap((s) => s.fields);\r\n const invalidRequiredCount = Object.keys(this.form.controls).filter(\r\n (key) => {\r\n const control = this.form.get(key);\r\n if (!control?.invalid) return false;\r\n\r\n // Check if this field has required validation\r\n const column = allColumns.find((c) => c.name === key);\r\n return (\r\n column?.validations?.some((v) => v.type === 'required') || false\r\n );\r\n }\r\n ).length;\r\n\r\n // Only emit if there are required fields missing\r\n if (invalidRequiredCount > 0) {\r\n this.validationError.emit(\r\n `Please fill all required fields marked with *. ${invalidRequiredCount} field(s) need attention.`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n const formData = this.form.getRawValue();\r\n this.config.onSubmit(formData);\r\n }\r\n\r\n handleReset() {\r\n this.submitted = false;\r\n this.form.reset();\r\n if (this.config.onReset) {\r\n this.config.onReset();\r\n }\r\n }\r\n\r\n isFieldInvalid(fieldName: string): boolean {\r\n const field = this.form.get(fieldName);\r\n return !!(field && field.invalid && this.submitted);\r\n }\r\n\r\n getErrorMessage(fieldName: string): string {\r\n const field = this.form.get(fieldName);\r\n if (!field?.errors) return '';\r\n\r\n // Check if there's a custom message from validations\r\n const allColumns = this.config.sections.flatMap((s) => s.fields);\r\n const column = allColumns.find((c) => c.name === fieldName);\r\n // Check for custom validation error\r\n if (field.errors['custom']) {\r\n const customValidation = column?.validations?.find(\r\n (v) => v.type === 'custom'\r\n );\r\n return customValidation?.message || 'Invalid field';\r\n }\r\n\r\n // Check if there's a custom message from validations\r\n const errorKeys = Object.keys(field.errors);\r\n for (const key of errorKeys) {\r\n const validation = column?.validations?.find((v) => v.type === key);\r\n if (validation?.message) {\r\n return validation.message;\r\n }\r\n }\r\n // Default error messages\r\n if (field.errors['required']) {\r\n return `${column?.label} is required`;\r\n }\r\n if (field.errors['email']) return 'Invalid email format';\r\n if (field.errors['minlength'])\r\n return `Minimum length is ${field.errors['minlength'].requiredLength}`;\r\n if (field.errors['maxlength'])\r\n return `Maximum length is ${field.errors['maxlength'].requiredLength}`;\r\n if (field.errors['min'])\r\n return `Minimum value is ${field.errors['min'].min}`;\r\n if (field.errors['max'])\r\n return `Maximum value is ${field.errors['max'].max}`;\r\n if (field.errors['pattern']) return 'Invalid format';\r\n return 'Invalid field';\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n HostListener,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n ReactiveFormsModule,\r\n FormGroup,\r\n FormBuilder,\r\n FormControl,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n// Import Fovestta Components\r\nimport { FvEntryFieldComponent } from '../fv-entry-field/fv-entry-field.component';\r\nimport { FvDropdownComponent } from '../fv-dropdown/fv-dropdown.component';\r\nimport { FvNumberFieldComponent } from '../fv-number-field/fv-number-field.component';\r\nimport { FvDateFieldComponent } from '../fv-date-field/fv-date-field.component';\r\nimport { FvMonthYearFieldComponent } from '../fv-month-year-field/fv-month-year-field.component';\r\nimport { FvFileSelectorComponent } from '../fv-file-selector/fv-file-selector.component';\r\nimport { FvNameCodeComponent } from '../fv-name-code/fv-name-code.component';\r\nimport { FvPhoneFieldComponent } from '../fv-phone-field/fv-phone-field.component';\r\nimport { FvUanFieldComponent } from '../fv-uan-field/fv-uan-field.component';\r\nimport { FvPfFieldComponent } from '../fv-pf-field/fv-pf-field.component';\r\nimport { FvEsiFieldComponent } from '../fv-esi-field/fv-esi-field.component';\r\nimport { FvIfscFieldComponent } from '../fv-ifsc-field/fv-ifsc-field.component';\r\nimport { FvMicrFieldComponent } from '../fv-micr-field/fv-micr-field.component';\r\nimport { FvIbanFieldComponent } from '../fv-iban-field/fv-iban-field.component';\r\nimport { FvEmailFieldComponent } from '../fv-email-field/fv-email-field.component';\r\nimport { FvPasswordFieldComponent } from '../fv-password-field/fv-password-field.component';\r\n\r\nexport interface QueryFormColumn {\r\n label: string;\r\n key: string;\r\n type: 'dropdown' | 'text' | 'number' | 'date' | 'month' | 'file' | 'name-code' | 'phone' | 'uan' | 'pf' | 'esi' | 'ifsc' | 'micr' | 'iban' | 'email' | 'password';\r\n options?: any[];\r\n placeholder?: string;\r\n onChange?: (value: any) => void;\r\n accept?: string;\r\n required?: boolean;\r\n readonly?: boolean;\r\n}\r\n\r\nexport interface QueryFormRow {\r\n columns: QueryFormColumn[];\r\n}\r\n\r\nexport interface QueryFormConfig {\r\n title: string;\r\n rows: QueryFormRow[];\r\n buttonText?: string;\r\n showExportButton?: boolean;\r\n exportFormats?: string[];\r\n showBackButton?: boolean;\r\n backButtonText?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-query-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FvEntryFieldComponent,\r\n FvDropdownComponent,\r\n FvNumberFieldComponent,\r\n FvDateFieldComponent,\r\n FvMonthYearFieldComponent,\r\n FvFileSelectorComponent,\r\n FvNameCodeComponent,\r\n FvPhoneFieldComponent,\r\n FvUanFieldComponent,\r\n FvPfFieldComponent,\r\n FvEsiFieldComponent,\r\n FvIfscFieldComponent,\r\n FvMicrFieldComponent,\r\n FvIbanFieldComponent,\r\n FvEmailFieldComponent,\r\n FvPasswordFieldComponent,\r\n ],\r\n template: `\r\n <div class=\"query-form-container\">\r\n <div class=\"d-flex cont\">\r\n <h2 class=\"form-title\">{{ config.title }}</h2>\r\n\r\n <div\r\n class=\"export-buttons\"\r\n *ngIf=\"\r\n config.showExportButton &&\r\n config.exportFormats &&\r\n config.exportFormats.length > 0\r\n \"\r\n >\r\n <div class=\"export-menu-container\">\r\n <button\r\n type=\"button\"\r\n class=\"export-btn menu-trigger\"\r\n (click)=\"toggleExportMenu($event)\"\r\n title=\"Toggle export options\"\r\n >\r\n <i class=\"material-icons\">file_download</i>\r\n <i class=\"material-icons arrow\">arrow_drop_down</i>\r\n </button>\r\n <div class=\"export-menu\" *ngIf=\"showExportMenu\">\r\n <button\r\n type=\"button\"\r\n *ngFor=\"let format of config.exportFormats\"\r\n class=\"menu-item\"\r\n (click)=\"exportToFormat(format)\"\r\n [attr.title]=\"'Export as ' + format.toUpperCase()\"\r\n >\r\n Export as {{ format.toUpperCase() }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Validation Error Message -->\r\n <div *ngIf=\"showValidationError\" class=\"validation-message\">\r\n <i class=\"material-icons\">error</i>\r\n Please fill all required fields\r\n </div>\r\n\r\n <div class=\"form-content\">\r\n <form [formGroup]=\"form\">\r\n <div\r\n *ngFor=\"let row of config.rows; let rowIndex = index\"\r\n class=\"form-row\"\r\n >\r\n <div *ngFor=\"let column of row.columns\" class=\"form-field\">\r\n \r\n <!-- Dropdown -->\r\n <ng-container *ngIf=\"column.type === 'dropdown'\">\r\n <fv-dropdown\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select option'\"\r\n [options]=\"column.options || []\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-dropdown>\r\n </ng-container>\r\n\r\n <!-- Text Input -->\r\n <ng-container *ngIf=\"column.type === 'text'\">\r\n <fv-entry-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n type=\"text\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-entry-field>\r\n </ng-container>\r\n\r\n <!-- Number Input -->\r\n <ng-container *ngIf=\"column.type === 'number'\">\r\n <fv-number-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-number-field>\r\n </ng-container>\r\n\r\n <!-- Date Input -->\r\n <ng-container *ngIf=\"column.type === 'date'\">\r\n <fv-date-field\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-date-field>\r\n </ng-container>\r\n\r\n <!-- Month/Year Input -->\r\n <ng-container *ngIf=\"column.type === 'month'\">\r\n <fv-month-year-field\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-month-year-field>\r\n </ng-container>\r\n\r\n <!-- File Upload -->\r\n <ng-container *ngIf=\"column.type === 'file'\">\r\n <fv-file-selector\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select file'\"\r\n [accept]=\"column.accept || '*/*'\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-file-selector>\r\n </ng-container>\r\n\r\n <!-- Name Code Field -->\r\n <ng-container *ngIf=\"column.type === 'name-code'\">\r\n <fv-name-code\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Search by Code or Name'\"\r\n [options]=\"mapSearchOptions(column.options || [])\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-name-code>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'phone'\">\r\n <fv-phone-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-phone-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'uan'\">\r\n <fv-uan-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-uan-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'pf'\">\r\n <fv-pf-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-pf-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'esi'\">\r\n <fv-esi-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-esi-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'ifsc'\">\r\n <fv-ifsc-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-ifsc-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'micr'\">\r\n <fv-micr-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-micr-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'iban'\">\r\n <fv-iban-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-iban-field>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"column.type === 'email'\">\r\n <fv-email-field [label]=\"column.label\" [placeholder]=\"column.placeholder || ''\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-email-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'password'\">\r\n <fv-password-field [label]=\"column.label\" [placeholder]=\"column.placeholder || ''\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-password-field>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Buttons Row -->\r\n <div class=\"button-row\">\r\n <button\r\n type=\"button\"\r\n class=\"view-button\"\r\n (click)=\"onButtonClick()\"\r\n [attr.title]=\"config.buttonText || 'View'\"\r\n >\r\n {{ config.buttonText || 'View' }}\r\n </button>\r\n <button\r\n *ngIf=\"config.showBackButton\"\r\n type=\"button\"\r\n class=\"back-button\"\r\n (click)=\"onBackClick()\"\r\n [attr.title]=\"config.backButtonText || 'Back'\"\r\n >\r\n {{ config.backButtonText || 'Back' }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');\r\n @import url('https://fonts.googleapis.com/icon?family=Material+Icons');\r\n\r\n * {\r\n font-family: Poppins;\r\n }\r\n\r\n .material-icons {\r\n font-family: 'Material Icons' !important;\r\n font-size: 22px;\r\n display: inline-block;\r\n }\r\n\r\n .cont {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n }\r\n\r\n .validation-message {\r\n background-color: #fee;\r\n color: #c33;\r\n padding: 12px 16px;\r\n border-radius: 8px;\r\n margin: 10px 0;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 14px;\r\n font-weight: 500;\r\n border: 1px solid #fcc;\r\n }\r\n\r\n .export-buttons {\r\n display: flex;\r\n gap: 10px;\r\n }\r\n\r\n .export-btn {\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n transition: all 0.3s ease;\r\n border: none;\r\n padding: 8px 16px;\r\n border-radius: 7px;\r\n background: #006aff;\r\n color: white;\r\n }\r\n\r\n .export-btn:hover {\r\n background: #0045a6;\r\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\r\n }\r\n\r\n .export-menu-container {\r\n position: relative;\r\n border-radius: 7px;\r\n }\r\n\r\n .export-menu {\r\n position: absolute;\r\n top: 100%;\r\n right: 0;\r\n background: white;\r\n border-radius: 4px;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n margin-top: 5px;\r\n min-width: 180px;\r\n z-index: 1000;\r\n }\r\n\r\n .menu-item {\r\n width: 100%;\r\n color: black;\r\n text-align: left;\r\n background: white;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: background 0.2s;\r\n padding: 12px 16px;\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n }\r\n\r\n .menu-item:hover {\r\n background: #f5f5f5;\r\n }\r\n\r\n .query-form-container {\r\n background: #f2f2f2;\r\n border-radius: 8px;\r\n padding: 5px 10px 10px;\r\n margin: auto;\r\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\r\n margin-bottom: 1rem;\r\n overflow: visible;\r\n }\r\n\r\n .form-title {\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: #303030;\r\n margin: 0;\r\n font-family: Poppins;\r\n }\r\n\r\n .form-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n background-color: #ffffff;\r\n padding: 10px;\r\n border: 0.5px solid #cfcfcf;\r\n border-radius: 12px;\r\n overflow: visible;\r\n }\r\n\r\n .form-row {\r\n display: grid;\r\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n gap: 12px;\r\n width: 100%;\r\n box-sizing: border-box;\r\n overflow: visible;\r\n }\r\n\r\n .form-field {\r\n display: flex;\r\n flex-direction: column;\r\n min-width: 0;\r\n width: 100%;\r\n position: relative;\r\n overflow: visible;\r\n box-sizing: border-box;\r\n }\r\n\r\n .view-button {\r\n padding: 8px 20px;\r\n background: #006aff;\r\n color: #ffffff;\r\n border: none;\r\n border-radius: 7px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: background-color 0.2s;\r\n }\r\n\r\n .view-button:hover {\r\n background: #0045a6;\r\n }\r\n\r\n .button-row {\r\n display: flex;\r\n justify-content: space-between;\r\n gap: 12px;\r\n padding-top: 5px;\r\n margin-top: 5px;\r\n }\r\n\r\n .back-button {\r\n padding: 8px 20px;\r\n background-color: #303030;\r\n color: #ffffff;\r\n border: none;\r\n border-radius: 7px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: background-color 0.2s;\r\n }\r\n\r\n .back-button:hover {\r\n background-color: #2b2b2bff;\r\n }\r\n\r\n @media (min-width: 1200px) and (max-width: 1400px) {\r\n .form-row {\r\n grid-template-columns: repeat(5, 1fr);\r\n }\r\n }\r\n\r\n @media (max-width: 1200px) {\r\n .form-row {\r\n grid-template-columns: repeat(3, 1fr);\r\n }\r\n }\r\n\r\n @media (max-width: 992px) {\r\n .form-row {\r\n grid-template-columns: repeat(2, 1fr);\r\n gap: 12px;\r\n }\r\n }\r\n\r\n @media (max-width: 768px) {\r\n .form-row {\r\n grid-template-columns: repeat(2, 1fr);\r\n gap: 10px;\r\n }\r\n }\r\n\r\n @media (max-width: 640px) {\r\n .form-row {\r\n grid-template-columns: 1fr;\r\n gap: 12px;\r\n }\r\n .form-field {\r\n width: 100%;\r\n }\r\n }\r\n `,\r\n ],\r\n})\r\nexport class QueryFormComponent implements OnInit, OnDestroy {\r\n @Input() config!: QueryFormConfig;\r\n @Output() onSubmit = new EventEmitter<any>();\r\n @Output() onExport = new EventEmitter<string>();\r\n @Output() onBack = new EventEmitter<void>();\r\n\r\n form!: FormGroup;\r\n showExportMenu = false;\r\n showValidationError = false;\r\n private subs: Subscription[] = [];\r\n\r\n constructor(private fb: FormBuilder) { }\r\n\r\n ngOnInit() {\r\n const group: any = {};\r\n if (this.config && this.config.rows) {\r\n this.config.rows.forEach((row) => {\r\n row.columns.forEach((col) => {\r\n const validators: any[] = [];\r\n if (col.required) {\r\n validators.push(Validators.required);\r\n }\r\n group[col.key] = new FormControl(\r\n { value: '', disabled: col.readonly || false },\r\n validators\r\n );\r\n });\r\n });\r\n }\r\n this.form = this.fb.group(group);\r\n\r\n // Subscribe to value changes to trigger onChange callbacks\r\n this.subs.push(\r\n this.form.valueChanges.subscribe((value) => {\r\n this.config.rows.forEach((row) => {\r\n row.columns.forEach((col) => {\r\n if (col.onChange) {\r\n // Verify if this specific control changed? \r\n // For simplicity, we can pass value[col.key] but strictly we should check diff.\r\n // However, simple approach:\r\n // This runs on every change, might be noisy but acceptable for now.\r\n // A better approach would be subscribing to individual controls if performance matters.\r\n }\r\n });\r\n });\r\n })\r\n );\r\n\r\n // Subscribe individually to support onChange\r\n this.config.rows.forEach((row) => {\r\n row.columns.forEach((col) => {\r\n if (col.onChange) {\r\n const control = this.form.get(col.key);\r\n if (control) {\r\n this.subs.push(control.valueChanges.subscribe(val => {\r\n col.onChange!(val);\r\n }));\r\n }\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subs.forEach((s) => s.unsubscribe());\r\n }\r\n\r\n getControl(key: string): FormControl {\r\n return this.form.get(key) as FormControl;\r\n }\r\n\r\n getSchema(column: QueryFormColumn): ValidationSchema {\r\n // Generate a simple schema based on column definition\r\n const rules = [];\r\n const errorPriority = [];\r\n\r\n if (column.required) {\r\n rules.push({ name: 'required', params: { enabled: true }, errorKey: 'ERR_REQUIRED' });\r\n errorPriority.push('required');\r\n }\r\n\r\n if (column.type === 'email') {\r\n rules.push({\r\n name: 'regex',\r\n params: {\r\n pattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\r\n },\r\n errorKey: 'ERR_EMAIL_INVALID',\r\n });\r\n errorPriority.push('regex');\r\n }\r\n\r\n if (column.type === 'pf') {\r\n rules.push({\r\n name: 'regex',\r\n params: {\r\n pattern: '^[A-Z]{2}/[A-Z]{3}/[0-9]{7}/[0-9]{3}/[0-9]{7}$'\r\n },\r\n errorKey: 'ERR_PF_INVALID'\r\n });\r\n errorPriority.push('regex');\r\n }\r\n\r\n if (column.type === 'password') {\r\n rules.push({\r\n name: 'passwordComplexity',\r\n params: {\r\n minLength: 8,\r\n requireUppercase: true,\r\n requireLowercase: true,\r\n requireNumber: true,\r\n requireSpecialChar: true\r\n }\r\n });\r\n errorPriority.push('passwordComplexity');\r\n }\r\n\r\n return {\r\n controlType: this.mapType(column.type),\r\n rules: rules,\r\n errorPriority: errorPriority\r\n };\r\n }\r\n\r\n mapType(type: string): any {\r\n switch (type) {\r\n case 'text': return 'EntryField';\r\n case 'number': return 'NumberField';\r\n case 'date': return 'DateField';\r\n case 'dropdown': return 'Dropdown';\r\n case 'month': return 'MonthYearField';\r\n case 'file': return 'FileSelector';\r\n case 'name-code': return 'Dropdown';\r\n case 'phone': return 'PhoneField';\r\n case 'uan': return 'UanField';\r\n case 'pf': return 'PfField';\r\n case 'esi': return 'EsiField';\r\n case 'ifsc': return 'IfscField';\r\n case 'micr': return 'MicrField';\r\n case 'iban': return 'IbanField';\r\n case 'email': return 'EmailField';\r\n case 'password': return 'PasswordField';\r\n default: return 'EntryField';\r\n }\r\n }\r\n\r\n mapSearchOptions(options: any[]): any[] {\r\n return options.map(opt => ({\r\n code: opt.code || opt.value,\r\n name: opt.name || opt.label || opt.value,\r\n value: opt.value\r\n }));\r\n }\r\n\r\n triggerFileUpload(columnKey: string) {\r\n // FvFileSelector handles this internally, but if we needed external trigger...\r\n }\r\n\r\n toggleExportMenu(event: Event) {\r\n event.stopPropagation();\r\n this.showExportMenu = !this.showExportMenu;\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n clickOutside(event: any) {\r\n if (this.showExportMenu) {\r\n this.showExportMenu = false;\r\n }\r\n }\r\n\r\n exportToFormat(format: string) {\r\n this.onExport.emit(format);\r\n this.showExportMenu = false;\r\n }\r\n\r\n onButtonClick() {\r\n if (this.form.valid) {\r\n this.showValidationError = false;\r\n this.onSubmit.emit(this.form.value);\r\n } else {\r\n this.showValidationError = true;\r\n this.form.markAllAsTouched();\r\n }\r\n }\r\n\r\n onBackClick() {\r\n this.onBack.emit();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FvEntryFieldComponent } from './fv-entry-field/fv-entry-field.component';\r\nimport { FvDateFieldComponent } from './fv-date-field/fv-date-field.component';\r\nimport { FvMonthYearFieldComponent } from './fv-month-year-field/fv-month-year-field.component';\r\nimport { FvNumberFieldComponent } from './fv-number-field/fv-number-field.component';\r\nimport { FvCheckboxComponent } from './fv-checkbox/fv-checkbox.component';\r\nimport { FvRadioGroupComponent } from './fv-radio-group/fv-radio-group.component';\r\nimport { FvDropdownComponent } from './fv-dropdown/fv-dropdown.component';\r\nimport { FvFileSelectorComponent } from './fv-file-selector/fv-file-selector.component';\r\nimport { FvImageSelectorComponent } from './fv-image-selector/fv-image-selector.component';\r\nimport { FvRichTextEditorComponent } from './fv-rich-text-editor/fv-rich-text-editor.component';\r\nimport { FvNameCodeComponent } from './fv-name-code/fv-name-code.component';\r\nimport { AddUpdateFormComponent } from './add-update-form/add-update-form.component';\r\nimport { QueryFormComponent } from './query-form/query-form.component';\r\nimport { FvEmailFieldComponent } from './fv-email-field/fv-email-field.component';\r\nimport { FvPasswordFieldComponent } from './fv-password-field/fv-password-field.component';\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FvEntryFieldComponent,\r\n FvDateFieldComponent,\r\n FvMonthYearFieldComponent,\r\n FvNumberFieldComponent,\r\n FvCheckboxComponent,\r\n FvRadioGroupComponent,\r\n FvDropdownComponent,\r\n FvFileSelectorComponent,\r\n FvImageSelectorComponent,\r\n FvRichTextEditorComponent,\r\n FvNameCodeComponent,\r\n AddUpdateFormComponent,\r\n QueryFormComponent,\r\n FvEmailFieldComponent,\r\n FvPasswordFieldComponent,\r\n ],\r\n exports: [\r\n FvEntryFieldComponent,\r\n FvDateFieldComponent,\r\n FvMonthYearFieldComponent,\r\n FvNumberFieldComponent,\r\n FvCheckboxComponent,\r\n FvRadioGroupComponent,\r\n FvDropdownComponent,\r\n FvFileSelectorComponent,\r\n FvImageSelectorComponent,\r\n FvRichTextEditorComponent,\r\n FvNameCodeComponent,\r\n AddUpdateFormComponent,\r\n QueryFormComponent,\r\n FvEmailFieldComponent,\r\n FvPasswordFieldComponent,\r\n ],\r\n})\r\nexport class FvControlsModule { }\r\n","/*\r\n * Public API Surface of fv-controls\r\n */\r\n\r\nexport * from './lib/fv-controls.module';\r\nexport * from './lib/fv-entry-field/fv-entry-field.component';\r\nexport * from './lib/fv-date-field/fv-date-field.component';\r\nexport * from './lib/fv-month-year-field/fv-month-year-field.component';\r\nexport * from './lib/fv-number-field/fv-number-field.component';\r\nexport * from './lib/fv-checkbox/fv-checkbox.component';\r\nexport {\r\n FvRadioGroupComponent,\r\n type RadioOption,\r\n} from './lib/fv-radio-group/fv-radio-group.component';\r\nexport {\r\n FvDropdownComponent,\r\n type DropdownOption,\r\n} from './lib/fv-dropdown/fv-dropdown.component';\r\nexport {\r\n FvFileSelectorComponent,\r\n type FileInfo,\r\n} from './lib/fv-file-selector/fv-file-selector.component';\r\nexport {\r\n FvImageSelectorComponent,\r\n type ImageInfo,\r\n} from './lib/fv-image-selector/fv-image-selector.component';\r\nexport * from './lib/fv-rich-text-editor/fv-rich-text-editor.component';\r\nexport * from './lib/add-update-form/add-update-form.component';\r\nexport * from './lib/query-form/query-form.component';\r\nexport {\r\n FvNameCodeComponent,\r\n type SearchSelectOption\r\n} from './lib/fv-name-code/fv-name-code.component';\r\nexport * from './lib/fv-phone-field/fv-phone-field.component';\r\nexport * from './lib/fv-uan-field/fv-uan-field.component';\r\nexport * from './lib/fv-pf-field/fv-pf-field.component';\r\nexport * from './lib/fv-esi-field/fv-esi-field.component';\r\nexport * from './lib/fv-ifsc-field/fv-ifsc-field.component';\r\nexport * from './lib/fv-micr-field/fv-micr-field.component';\r\nexport * from './lib/fv-iban-field/fv-iban-field.component';\r\nexport * from './lib/fv-email-field/fv-email-field.component';\r\nexport * from './lib/fv-password-field/fv-password-field.component';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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AAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM;KACzB,CA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"}
|
|
1
|
+
{"version":3,"file":"fovestta2-web-angular.mjs","sources":["../../../projects/fv-controls/src/lib/fv-entry-field/fv-entry-field.component.ts","../../../projects/fv-controls/src/lib/fv-entry-field/fv-entry-field.component.html","../../../projects/fv-controls/src/lib/fv-date-field/fv-date-field.component.ts","../../../projects/fv-controls/src/lib/fv-date-field/fv-date-field.component.html","../../../projects/fv-controls/src/lib/fv-month-year-field/fv-month-year-field.component.ts","../../../projects/fv-controls/src/lib/fv-month-year-field/fv-month-year-field.component.html","../../../projects/fv-controls/src/lib/fv-number-field/fv-number-field.component.ts","../../../projects/fv-controls/src/lib/fv-number-field/fv-number-field.component.html","../../../projects/fv-controls/src/lib/fv-checkbox/fv-checkbox.component.ts","../../../projects/fv-controls/src/lib/fv-checkbox/fv-checkbox.component.html","../../../projects/fv-controls/src/lib/fv-radio-group/fv-radio-group.component.ts","../../../projects/fv-controls/src/lib/fv-radio-group/fv-radio-group.component.html","../../../projects/fv-controls/src/lib/fv-dropdown/fv-dropdown.component.ts","../../../projects/fv-controls/src/lib/fv-dropdown/fv-dropdown.component.html","../../../projects/fv-controls/src/lib/fv-file-selector/fv-file-selector.component.ts","../../../projects/fv-controls/src/lib/fv-file-selector/fv-file-selector.component.html","../../../projects/fv-controls/src/lib/fv-image-selector/fv-image-selector.component.ts","../../../projects/fv-controls/src/lib/fv-image-selector/fv-image-selector.component.html","../../../projects/fv-controls/src/lib/fv-rich-text-editor/fv-rich-text-editor.component.ts","../../../projects/fv-controls/src/lib/fv-rich-text-editor/fv-rich-text-editor.component.html","../../../projects/fv-controls/src/lib/fv-name-code/fv-name-code.component.ts","../../../projects/fv-controls/src/lib/fv-phone-field/fv-phone-field.component.ts","../../../projects/fv-controls/src/lib/fv-phone-field/fv-phone-field.component.html","../../../projects/fv-controls/src/lib/fv-uan-field/fv-uan-field.component.ts","../../../projects/fv-controls/src/lib/fv-uan-field/fv-uan-field.component.html","../../../projects/fv-controls/src/lib/fv-pf-field/fv-pf-field.component.ts","../../../projects/fv-controls/src/lib/fv-pf-field/fv-pf-field.component.html","../../../projects/fv-controls/src/lib/fv-esi-field/fv-esi-field.component.ts","../../../projects/fv-controls/src/lib/fv-esi-field/fv-esi-field.component.html","../../../projects/fv-controls/src/lib/fv-ifsc-field/fv-ifsc-field.component.ts","../../../projects/fv-controls/src/lib/fv-ifsc-field/fv-ifsc-field.component.html","../../../projects/fv-controls/src/lib/fv-micr-field/fv-micr-field.component.ts","../../../projects/fv-controls/src/lib/fv-micr-field/fv-micr-field.component.html","../../../projects/fv-controls/src/lib/fv-iban-field/fv-iban-field.component.ts","../../../projects/fv-controls/src/lib/fv-iban-field/fv-iban-field.component.html","../../../projects/fv-controls/src/lib/fv-email-field/fv-email-field.component.ts","../../../projects/fv-controls/src/lib/fv-email-field/fv-email-field.component.html","../../../projects/fv-controls/src/lib/fv-password-field/fv-password-field.component.ts","../../../projects/fv-controls/src/lib/fv-password-field/fv-password-field.component.html","../../../projects/fv-controls/src/lib/add-update-form/add-update-form.component.ts","../../../projects/fv-controls/src/lib/query-form/query-form.component.ts","../../../projects/fv-controls/src/lib/fv-controls.module.ts","../../../projects/fv-controls/src/public-api.ts","../../../projects/fv-controls/src/fovestta2-web-angular.ts"],"sourcesContent":["import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { OnChanges, SimpleChanges } from '@angular/core';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-entry-field',\r\n templateUrl: './fv-entry-field.component.html',\r\n styleUrl: './fv-entry-field.component.css',\r\n})\r\nexport class FvEntryFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() type: 'text' | 'password' | 'email' = 'text';\r\n @Input() allowAlphabetsOnly: boolean = false;\r\n @Input() maxLength: number | null = null;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvEntryField: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvEntryField: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n\r\n if (this.allowAlphabetsOnly) {\r\n // Remove any non-alphabet characters (keeping spaces if desired, usually names have spaces)\r\n // Assuming 'alphabets' means [a-zA-Z] and maybe spaces.\r\n // Strict alphabets: /[^a-zA-Z]/g\r\n const newValue = value.replace(/[^a-zA-Z ]/g, '');\r\n if (newValue !== value) {\r\n value = newValue;\r\n input.value = value;\r\n this.control.setValue(value);\r\n }\r\n }\r\n\r\n if (this.maxLength && value.length > this.maxLength) {\r\n value = value.substring(0, this.maxLength);\r\n input.value = value;\r\n this.control.setValue(value);\r\n }\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n // You can implement a translation service here\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_MIN_LENGTH: 'Value is too short',\r\n ERR_MAX_LENGTH: 'Value is too long',\r\n ERR_REGEX_MISMATCH: 'Invalid format',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-entry-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\" [class.fv-label-required]=\"isRequired()\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n\r\n <input [type]=\"type\" [formControl]=\"control\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus($event)\" (input)=\"onInput($event)\" [attr.maxlength]=\"maxLength\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage && control.touched\" [class.fv-input-disabled]=\"disabled\" />\r\n\r\n <span *ngIf=\"errorMessage && control.touched\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </span>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-date-field',\r\n templateUrl: './fv-date-field.component.html',\r\n styleUrl: './fv-date-field.component.css',\r\n})\r\nexport class FvDateFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n\r\n // Optional native constraints (can also be derived from schema)\r\n @Input() min?: string;\r\n @Input() max?: string;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvDateField: control is required');\r\n return;\r\n }\r\n\r\n // Try to derive min/max from schema if not explicitly provided\r\n this.extractConstraintsFromSchema();\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: import('@angular/core').SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private extractConstraintsFromSchema(): void {\r\n if (!this.schema?.rules) return;\r\n\r\n for (const rule of this.schema.rules) {\r\n if (rule.name === 'minDate' && !this.min) {\r\n this.min = this.formatDate(rule.params?.['value']);\r\n }\r\n if (rule.name === 'maxDate' && !this.max) {\r\n this.max = this.formatDate(rule.params?.['value']);\r\n }\r\n // We could also calculate min/max from age rules, but that's complex (dynamic dates)\r\n // leaving out for now or can be added later.\r\n }\r\n }\r\n\r\n private formatDate(date: string | Date): string {\r\n if (!date) return '';\r\n const d = new Date(date);\r\n if (isNaN(d.getTime())) return '';\r\n return d.toISOString().split('T')[0];\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n this.validateValue(this.control.value);\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'Date is required',\r\n ERR_MIN_DATE: `Date must be after ${this.min}`,\r\n ERR_MAX_DATE: `Date must be before ${this.max}`,\r\n ERR_MIN_AGE: 'Age requirement not met (too young)',\r\n ERR_MAX_AGE: 'Age requirement not met (too old)',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }} <span *ngIf=\"isRequired()\" class=\"required\">*</span>\r\n </label>\r\n\r\n <input type=\"date\" [formControl]=\"control\" class=\"fv-input\" [class.error]=\"!!errorMessage\" [attr.min]=\"min\"\r\n [attr.max]=\"max\" [readonly]=\"readonly\" (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" />\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-month-year-field',\r\n templateUrl: './fv-month-year-field.component.html',\r\n styleUrl: './fv-month-year-field.component.css',\r\n})\r\nexport class FvMonthYearFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n\r\n @Input() min?: string; // YYYY-MM\r\n @Input() max?: string; // YYYY-MM\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n displayValue: string = '';\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvMonthYearField: control is required');\r\n return;\r\n }\r\n\r\n this.extractConstraintsFromSchema();\r\n\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.updateDisplayValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n this.updateDisplayValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private extractConstraintsFromSchema(): void {\r\n if (!this.schema?.rules) return;\r\n\r\n for (const rule of this.schema.rules) {\r\n if (rule.name === 'minDate' && !this.min) {\r\n this.min = this.formatMonth(rule.params?.['value']);\r\n }\r\n if (rule.name === 'maxDate' && !this.max) {\r\n this.max = this.formatMonth(rule.params?.['value']);\r\n }\r\n }\r\n }\r\n\r\n private formatMonth(date: string | Date): string {\r\n if (!date) return '';\r\n const d = new Date(date);\r\n if (isNaN(d.getTime())) return '';\r\n return d.toISOString().slice(0, 7); // YYYY-MM\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n // For month picker, value is YYYY-MM. \r\n // The generic Validator rules use new Date(value), which treats YYYY-MM as YYYY-MM-01.\r\n // This generally works for min/max logic.\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n this.validateValue(this.control.value);\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'Month/Year is required',\r\n ERR_MIN_DATE: `Date must be after ${this.min}`,\r\n ERR_MAX_DATE: `Date must be before ${this.max}`,\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n\r\n private updateDisplayValue(value: string): void {\r\n if (!value) {\r\n this.displayValue = '';\r\n return;\r\n }\r\n\r\n const date = new Date(value + '-01'); // Ensure it's treated as YYYY-MM-01\r\n if (isNaN(date.getTime())) {\r\n this.displayValue = value;\r\n return;\r\n }\r\n\r\n const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n this.displayValue = `${monthNames[date.getMonth()]} ${date.getFullYear()}`;\r\n }\r\n\r\n openPicker(picker: HTMLInputElement): void {\r\n if (this.disabled || this.readonly) return;\r\n if (picker.showPicker) {\r\n picker.showPicker();\r\n } else {\r\n picker.click();\r\n }\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }} <span *ngIf=\"isRequired()\" class=\"required\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-input-wrapper\" (click)=\"openPicker(monthPicker)\">\r\n <input type=\"text\" [value]=\"displayValue\" class=\"fv-input\" [class.error]=\"!!errorMessage\"\r\n placeholder=\"Select Month\" readonly />\r\n <input #monthPicker type=\"month\" [formControl]=\"control\" class=\"fv-hidden-picker\" [attr.min]=\"min\"\r\n [attr.max]=\"max\" (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" />\r\n <span class=\"fv-calendar-icon\">\r\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\r\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\r\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n selector: 'fv-number-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-number-field.component.html',\r\n styleUrl: './fv-number-field.component.css',\r\n})\r\nexport class FvNumberFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() min?: any;\r\n @Input() max?: any;\r\n @Input() step: number = 1;\r\n\r\n @Output() valueChange = new EventEmitter<number>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvNumberField: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn('FvNumberField: schema is not provided');\r\n return;\r\n }\r\n\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_NUMERIC_INVALID: 'Please enter a valid number',\r\n ERR_RANGE_INVALID: 'Number is out of range',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-number-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n\r\n <input type=\"number\" [formControl]=\"control\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" [min]=\"min\" [max]=\"max\"\r\n [step]=\"step\" (blur)=\"onBlur()\" (focus)=\"onFocus()\" class=\"fv-input\" [class.fv-input-error]=\"errorMessage\"\r\n [class.fv-input-disabled]=\"disabled\" />\r\n\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </span>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'fv-checkbox',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-checkbox.component.html',\r\n styleUrl: './fv-checkbox.component.css',\r\n})\r\nexport class FvCheckboxComponent implements OnInit, OnChanges {\r\n @Input() label: string = '';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() required: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter<boolean>();\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvCheckbox: control is required');\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onChange(event: Event): void {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.control.setValue(checked);\r\n this.valueChange.emit(checked);\r\n }\r\n}\r\n","<div class=\"fv-checkbox-container\">\r\n <label class=\"fv-checkbox-label\">\r\n <input type=\"checkbox\" [formControl]=\"control\" [disabled]=\"disabled\" (change)=\"onChange($event)\"\r\n class=\"fv-checkbox-input\" />\r\n <span class=\"fv-checkbox-custom\"></span>\r\n <span class=\"fv-checkbox-text\">\r\n {{ label }}\r\n <span *ngIf=\"required\" class=\"fv-required-asterisk\">*</span>\r\n </span>\r\n </label>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\n\r\nexport interface RadioOption {\r\n value: any;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'fv-radio-group',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-radio-group.component.html',\r\n styleUrl: './fv-radio-group.component.css',\r\n})\r\nexport class FvRadioGroupComponent implements OnInit, OnChanges {\r\n @Input() label: string = '';\r\n @Input() control!: FormControl;\r\n @Input() options: RadioOption[] = [];\r\n @Input() disabled: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() name: string = `fv-radio-${Math.random().toString(36).substr(2, 9)}`;\r\n @Input() layout: 'vertical' | 'horizontal' = 'vertical';\r\n\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvRadioGroup: control is required');\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onChange(value: any): void {\r\n this.control.setValue(value);\r\n this.valueChange.emit(value);\r\n }\r\n\r\n isSelected(value: any): boolean {\r\n return this.control.value === value;\r\n }\r\n}\r\n","<div class=\"fv-radio-group-container\">\r\n <label *ngIf=\"label\" class=\"fv-group-label\">\r\n {{ label }}\r\n <span *ngIf=\"required\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-radio-options\" [class.horizontal]=\"layout === 'horizontal'\" [class.vertical]=\"layout === 'vertical'\">\r\n <label *ngFor=\"let option of options\" class=\"fv-radio-label\"\r\n [class.fv-radio-disabled]=\"disabled || option.disabled\">\r\n <input type=\"radio\" [name]=\"name\" [value]=\"option.value\" [checked]=\"isSelected(option.value)\"\r\n [disabled]=\"disabled || option.disabled\" (change)=\"onChange(option.value)\" class=\"fv-radio-input\" />\r\n <span class=\"fv-radio-custom\"></span>\r\n <span class=\"fv-radio-text\">{{ option.label }}</span>\r\n </label>\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n OnChanges,\r\n SimpleChanges,\r\n HostListener\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\nexport interface DropdownOption {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-dropdown',\r\n templateUrl: './fv-dropdown.component.html',\r\n styleUrls: ['./fv-dropdown.component.css'],\r\n})\r\nexport class FvDropdownComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'Select an option';\r\n @Input() options: DropdownOption[] = [];\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter<string | number>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n @ViewChild('searchInput') searchInput!: ElementRef<HTMLInputElement>;\r\n errorMessage: string | null = null;\r\n isOpen: boolean = false;\r\n private subscription?: Subscription;\r\n searchControl = new FormControl('');\r\n filteredOptions: DropdownOption[] = [];\r\n highlightedIndex: number = -1;\r\n\r\n constructor(private el: ElementRef) { }\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvDropdown: control is required');\r\n return;\r\n }\r\n\r\n this.filteredOptions = this.options;\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvDropdown: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n // Sync search text\r\n const selected = this.options.find(opt => opt.value === value);\r\n if (selected) {\r\n this.searchControl.setValue(selected.label, { emitEvent: false });\r\n } else if (!value) {\r\n this.searchControl.setValue('', { emitEvent: false });\r\n }\r\n });\r\n\r\n // Search Control Changes\r\n this.searchControl.valueChanges.subscribe(term => {\r\n this.filterOptions(term || '');\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n const selected = this.options.find(opt => opt.value === this.control.value);\r\n if (selected) {\r\n this.searchControl.setValue(selected.label, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['options'] && changes['options'].currentValue) {\r\n this.filteredOptions = this.options;\r\n // Re-filter if search text exists\r\n if (this.searchControl.value) {\r\n this.filterOptions(this.searchControl.value);\r\n }\r\n }\r\n if (changes['disabled']) {\r\n if (this.disabled) {\r\n this.searchControl.disable({ emitEvent: false });\r\n } else {\r\n this.searchControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n filterOptions(term: string) {\r\n if (!term) {\r\n this.filteredOptions = this.options;\r\n } else {\r\n const lower = term.toLowerCase();\r\n this.filteredOptions = this.options.filter(opt => opt.label.toLowerCase().includes(lower));\r\n }\r\n this.highlightedIndex = this.filteredOptions.length === 1 ? 0 : -1;\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (!this.disabled) {\r\n if (!this.isOpen) {\r\n this.openDropdown();\r\n } else {\r\n this.closeDropdown();\r\n }\r\n }\r\n }\r\n\r\n openDropdown() {\r\n if (!this.disabled) {\r\n this.isOpen = true;\r\n this.focus.emit();\r\n // Filter based on current text, do not reset blindly\r\n this.filterOptions(this.searchControl.value || '');\r\n this.highlightedIndex = this.filteredOptions.length === 1 ? 0 : -1;\r\n }\r\n }\r\n\r\n onContainerClick(event: MouseEvent) {\r\n if (this.disabled) return;\r\n // If click is on the arrow or input, let them handle it.\r\n // But if on the padding of div, focus input.\r\n const target = event.target as HTMLElement;\r\n if (!target.classList.contains('fv-dropdown-input') && !target.classList.contains('fv-dropdown-arrow')) {\r\n this.searchInput.nativeElement.focus();\r\n if (!this.isOpen) this.openDropdown();\r\n }\r\n }\r\n\r\n closeDropdown() {\r\n this.isOpen = false;\r\n this.highlightedIndex = -1;\r\n // Restore label\r\n const selected = this.options.find(opt => opt.value === this.control.value);\r\n if (selected) {\r\n this.searchControl.setValue(selected.label, { emitEvent: false });\r\n } else {\r\n if (!this.control.value) this.searchControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n selectOption(option: DropdownOption): void {\r\n if (!option) return;\r\n this.control.setValue(option.value);\r\n this.searchControl.setValue(option.label, { emitEvent: false });\r\n this.isOpen = false;\r\n this.highlightedIndex = -1;\r\n this.searchInput.nativeElement.blur(); // Remove focus from input\r\n this.blur.emit();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isOpen && (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter')) {\r\n this.openDropdown();\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (!this.isOpen) return;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.highlightedIndex = (this.highlightedIndex + 1) % this.filteredOptions.length;\r\n this.scrollToHighlighted();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.highlightedIndex = (this.highlightedIndex - 1 + this.filteredOptions.length) % this.filteredOptions.length;\r\n this.scrollToHighlighted();\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n if (this.filteredOptions.length === 1) {\r\n this.selectOption(this.filteredOptions[0]);\r\n } else if (this.highlightedIndex >= 0 && this.highlightedIndex < this.filteredOptions.length) {\r\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n break;\r\n case 'Escape':\r\n this.closeDropdown();\r\n break;\r\n case 'Tab':\r\n this.closeDropdown();\r\n break;\r\n }\r\n }\r\n\r\n private scrollToHighlighted() {\r\n const list = document.querySelector('.fv-dropdown-options');\r\n const item = document.querySelectorAll('.fv-dropdown-option')[this.highlightedIndex];\r\n if (list && item) {\r\n const listRect = list.getBoundingClientRect();\r\n const itemRect = item.getBoundingClientRect();\r\n\r\n if (itemRect.bottom > listRect.bottom) {\r\n list.scrollTop += (itemRect.bottom - listRect.bottom);\r\n } else if (itemRect.top < listRect.top) {\r\n list.scrollTop -= (listRect.top - itemRect.top);\r\n }\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n // Validation handled on closeDropdown\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.isOpen) {\r\n this.closeDropdown();\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n }\r\n }\r\n\r\n onInputFocus() {\r\n this.openDropdown();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_INVALID_VALUE: 'Invalid selection',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n\r\n getSelectedLabel(): string {\r\n const selected = this.options.find(\r\n (opt) => opt.value === this.control?.value\r\n );\r\n return selected ? selected.label : this.placeholder;\r\n }\r\n\r\n isSelected(option: DropdownOption): boolean {\r\n return option.value === this.control?.value;\r\n }\r\n}\r\n","<div class=\"fv-dropdown-container\">\r\n <label *ngIf=\"label\" class=\"fv-dropdown-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-dropdown-wrapper\">\r\n <div class=\"fv-dropdown\" [class.fv-dropdown-error]=\"errorMessage\" [class.fv-dropdown-disabled]=\"disabled\"\r\n [class.fv-dropdown-open]=\"isOpen\" (click)=\"onContainerClick($event)\">\r\n <input #searchInput type=\"text\" class=\"fv-dropdown-input\" [formControl]=\"searchControl\"\r\n [placeholder]=\"placeholder\" (focus)=\"onInputFocus()\" (click)=\"$event.stopPropagation()\"\r\n autocomplete=\"off\">\r\n <span class=\"fv-dropdown-arrow\" [class.arrow-up]=\"isOpen\" (click)=\"toggleDropdown()\">▼</span>\r\n </div>\r\n\r\n <div *ngIf=\"isOpen\" class=\"fv-dropdown-options\">\r\n <div *ngFor=\"let option of filteredOptions; let i = index\" class=\"fv-dropdown-option\"\r\n [class.fv-dropdown-option-selected]=\"isSelected(option)\"\r\n [class.fv-dropdown-option-highlighted]=\"i === highlightedIndex\" (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"selectOption(option)\">\r\n {{ option.label }}\r\n </div>\r\n <div *ngIf=\"filteredOptions.length === 0\" class=\"fv-dropdown-option fv-no-results\">\r\n No options found\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-dropdown-error-message\">\r\n ⚠ {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\nexport interface FileInfo {\r\n file: File;\r\n name: string;\r\n size: number;\r\n type: string;\r\n}\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-file-selector',\r\n templateUrl: './fv-file-selector.component.html',\r\n styleUrl: './fv-file-selector.component.css',\r\n})\r\nexport class FvFileSelectorComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'Select a file';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() accept: string = '*/*'; // MIME types, e.g., 'application/pdf,image/*'\r\n @Input() maxSize?: number; // Maximum file size in bytes\r\n\r\n @Output() valueChange = new EventEmitter<FileInfo | null>();\r\n @Output() blur = new EventEmitter<void>();\r\n\r\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\r\n\r\n errorMessage: string | null = null;\r\n selectedFile: FileInfo | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvFileSelector: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvFileSelector: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.selectedFile = this.control.value;\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onFileSelected(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n const file = input.files[0];\r\n\r\n // Check file size if maxSize is specified\r\n if (this.maxSize && file.size > this.maxSize) {\r\n alert(\r\n `File size exceeds the maximum allowed size of ${this.formatFileSize(\r\n this.maxSize\r\n )}`\r\n );\r\n // Reset the input\r\n input.value = '';\r\n return;\r\n }\r\n\r\n const fileInfo: FileInfo = {\r\n file: file,\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n };\r\n\r\n this.selectedFile = fileInfo;\r\n this.control.setValue(fileInfo);\r\n this.blur.emit();\r\n }\r\n }\r\n\r\n openFileDialog(): void {\r\n if (!this.disabled) {\r\n this.fileInput.nativeElement.click();\r\n }\r\n }\r\n\r\n removeFile(): void {\r\n this.selectedFile = null;\r\n this.control.setValue(null);\r\n if (this.fileInput) {\r\n this.fileInput.nativeElement.value = '';\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n formatFileSize(bytes: number): string {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_INVALID_FILE: 'Invalid file',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-file-selector-container\">\r\n <label *ngIf=\"label\" class=\"fv-file-selector-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <input #fileInput type=\"file\" [accept]=\"accept\" (change)=\"onFileSelected($event)\" style=\"display: none\" />\r\n\r\n <button type=\"button\" class=\"fv-file-selector-button\" [class.fv-file-selector-button-error]=\"errorMessage\"\r\n [class.fv-file-selector-button-disabled]=\"disabled\" (click)=\"openFileDialog()\" [disabled]=\"disabled\">\r\n {{ placeholder }}\r\n </button>\r\n\r\n <div *ngIf=\"selectedFile\" class=\"fv-file-info\">\r\n <div class=\"fv-file-details\">\r\n <div class=\"fv-file-name\">📄 {{ selectedFile.name }}</div>\r\n <div class=\"fv-file-size\">{{ formatFileSize(selectedFile.size) }}</div>\r\n </div>\r\n <button type=\"button\" class=\"fv-file-remove\" (click)=\"removeFile()\" [disabled]=\"disabled\">\r\n ✕\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-file-selector-error-message\">\r\n ⚠ {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\nexport interface ImageInfo {\r\n file: File;\r\n url: SafeUrl;\r\n width: number;\r\n height: number;\r\n size: number;\r\n}\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-image-selector',\r\n templateUrl: './fv-image-selector.component.html',\r\n styleUrl: './fv-image-selector.component.css',\r\n})\r\nexport class FvImageSelectorComponent implements OnInit, OnDestroy {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'Select an image';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() maxSize?: number; // Maximum file size in bytes\r\n\r\n @Output() valueChange = new EventEmitter<ImageInfo | null>();\r\n @Output() blur = new EventEmitter<void>();\r\n\r\n @ViewChild('imageInput') imageInput!: ElementRef<HTMLInputElement>;\r\n\r\n errorMessage: string | null = null;\r\n selectedImage: ImageInfo | null = null;\r\n private subscription?: Subscription;\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvImageSelector: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvImageSelector: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.selectedImage = this.control.value;\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onImageSelected(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n const file = input.files[0];\r\n\r\n // Validate that it's an image\r\n if (!file.type.startsWith('image/')) {\r\n alert('Please select an image file');\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Check file size if maxSize is specified\r\n if (this.maxSize && file.size > this.maxSize) {\r\n alert(\r\n `Image size exceeds the maximum allowed size of ${this.formatFileSize(\r\n this.maxSize\r\n )}`\r\n );\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Create object URL and get image dimensions\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const img = new Image();\r\n img.onload = () => {\r\n const imageInfo: ImageInfo = {\r\n file: file,\r\n url: this.sanitizer.bypassSecurityTrustUrl(e.target.result),\r\n width: img.width,\r\n height: img.height,\r\n size: file.size,\r\n };\r\n\r\n this.selectedImage = imageInfo;\r\n this.control.setValue(imageInfo);\r\n this.blur.emit();\r\n };\r\n img.src = e.target.result;\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n\r\n openImageDialog(): void {\r\n if (!this.disabled) {\r\n this.imageInput.nativeElement.click();\r\n }\r\n }\r\n\r\n removeImage(): void {\r\n this.selectedImage = null;\r\n this.control.setValue(null);\r\n if (this.imageInput) {\r\n this.imageInput.nativeElement.value = '';\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n formatFileSize(bytes: number): string {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_INVALID_IMAGE: 'Invalid image',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-image-selector-container\">\r\n <label *ngIf=\"label\" class=\"fv-image-selector-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <input #imageInput type=\"file\" accept=\"image/*\" (change)=\"onImageSelected($event)\" style=\"display: none\" />\r\n\r\n <div *ngIf=\"!selectedImage; else previewTemplate\">\r\n <button type=\"button\" class=\"fv-image-selector-button\" [class.fv-image-selector-button-error]=\"errorMessage\"\r\n [class.fv-image-selector-button-disabled]=\"disabled\" (click)=\"openImageDialog()\" [disabled]=\"disabled\">\r\n 📷 {{ placeholder }}\r\n </button>\r\n </div>\r\n\r\n <ng-template #previewTemplate>\r\n <div class=\"fv-image-preview-container\">\r\n <img [src]=\"selectedImage!.url\" class=\"fv-image-preview\" alt=\"Selected image\" />\r\n <div class=\"fv-image-actions\">\r\n <button type=\"button\" class=\"fv-image-change-button\" (click)=\"openImageDialog()\" [disabled]=\"disabled\">\r\n Change\r\n </button>\r\n <button type=\"button\" class=\"fv-image-remove-button\" (click)=\"removeImage()\" [disabled]=\"disabled\">\r\n Remove\r\n </button>\r\n </div>\r\n <div class=\"fv-image-info\">\r\n {{ selectedImage!.width }} × {{ selectedImage!.height }} •\r\n {{ formatFileSize(selectedImage!.size) }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-image-selector-error-message\">\r\n ⚠ {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-rich-text-editor',\r\n templateUrl: './fv-rich-text-editor.component.html',\r\n styleUrl: './fv-rich-text-editor.component.css',\r\n})\r\nexport class FvRichTextEditorComponent implements OnInit, OnDestroy {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'Enter text...';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() minHeight: number = 150;\r\n @Input() showToolbar: boolean = true;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n @ViewChild('editor') editorRef!: ElementRef<HTMLTextAreaElement>;\r\n\r\n errorMessage: string | null = null;\r\n isFocused: boolean = false;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvRichTextEditor: control is required');\r\n return;\r\n }\r\n\r\n if (!this.schema) {\r\n console.warn(\r\n 'FvRichTextEditor: schema is not provided, validation will be skipped'\r\n );\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n this.isFocused = false;\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(): void {\r\n this.isFocused = true;\r\n this.focus.emit();\r\n }\r\n\r\n insertText(before: string, after: string = before): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n const textarea = this.editorRef.nativeElement;\r\n const start = textarea.selectionStart;\r\n const end = textarea.selectionEnd;\r\n const text = this.control.value || '';\r\n const selectedText = text.substring(start, end);\r\n\r\n const newText =\r\n text.substring(0, start) +\r\n before +\r\n selectedText +\r\n after +\r\n text.substring(end);\r\n\r\n this.control.setValue(newText);\r\n\r\n // Restore cursor position\r\n setTimeout(() => {\r\n const newPosition = start + before.length + selectedText.length;\r\n textarea.setSelectionRange(newPosition, newPosition);\r\n textarea.focus();\r\n });\r\n }\r\n\r\n handleBulletList(): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n const text = this.control.value || '';\r\n const lines = text.split('\\n');\r\n const bulletedLines = lines.map((line: string) =>\r\n line.trim() ? `• ${line}` : line\r\n );\r\n this.control.setValue(bulletedLines.join('\\n'));\r\n }\r\n\r\n handleNumberedList(): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n const text = this.control.value || '';\r\n const lines = text.split('\\n').filter((line: string) => line.trim());\r\n const numberedLines = lines.map((line: string, index: number) => `${index + 1}. ${line}`);\r\n this.control.setValue(numberedLines.join('\\n'));\r\n }\r\n\r\n handleClear(): void {\r\n if (this.disabled || this.readonly) return;\r\n this.control.setValue('');\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'This field is required',\r\n ERR_MIN_LENGTH: 'Text is too short',\r\n ERR_MAX_LENGTH: 'Text is too long',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n\r\n getCharacterCount(): number {\r\n return this.control?.value?.length || 0;\r\n }\r\n\r\n getWordCount(): number {\r\n const text = this.control?.value || '';\r\n return text.trim() ? text.trim().split(/\\s+/).length : 0;\r\n }\r\n}\r\n","<div class=\"fv-rich-text-editor-container\">\r\n <label *ngIf=\"label\" class=\"fv-rich-text-editor-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <div *ngIf=\"showToolbar && !disabled && !readonly\" class=\"fv-rich-text-toolbar\">\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"insertText('**', '**')\" title=\"Bold\">\r\n <strong>B</strong>\r\n </button>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"insertText('*', '*')\" title=\"Italic\">\r\n <em>I</em>\r\n </button>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"insertText('__', '__')\" title=\"Underline\">\r\n <u>U</u>\r\n </button>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"insertText('~~', '~~')\" title=\"Strikethrough\">\r\n <s>S</s>\r\n </button>\r\n\r\n <div class=\"fv-toolbar-divider\"></div>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"handleBulletList()\" title=\"Bullet List\">\r\n • List\r\n </button>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button\" (click)=\"handleNumberedList()\" title=\"Numbered List\">\r\n 1. List\r\n </button>\r\n\r\n <div class=\"fv-toolbar-divider\"></div>\r\n\r\n <button type=\"button\" class=\"fv-toolbar-button fv-toolbar-button-danger\" (click)=\"handleClear()\" title=\"Clear\">\r\n Clear\r\n </button>\r\n </div>\r\n\r\n <textarea #editor class=\"fv-rich-text-editor\" [class.fv-rich-text-editor-error]=\"errorMessage\"\r\n [class.fv-rich-text-editor-disabled]=\"disabled\" [class.fv-rich-text-editor-focused]=\"isFocused\"\r\n [formControl]=\"control\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" [disabled]=\"disabled\"\r\n [style.min-height.px]=\"minHeight\" (blur)=\"onBlur()\" (focus)=\"onFocus()\"></textarea>\r\n\r\n <div class=\"fv-rich-text-footer\">\r\n <div class=\"fv-rich-text-stats\">\r\n {{ getCharacterCount() }} characters • {{ getWordCount() }} words\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage\" class=\"fv-rich-text-editor-error-message\">\r\n ⚠ {{ getErrorMessage() }}\r\n </div>\r\n</div>","import { Component, Input, forwardRef, HostListener, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\nexport interface SearchSelectOption {\r\n code: string;\r\n name: string;\r\n value: any;\r\n}\r\n\r\n@Component({\r\n selector: 'fv-name-code',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"fv-name-code-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\r\n </label>\r\n\r\n <div class=\"search-box-wrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"fv-input\"\r\n [placeholder]=\"(searchControl.value || isOpen) ? '' : (placeholder || 'Search by Code or Name')\"\r\n [formControl]=\"searchControl\"\r\n (focus)=\"openDropdown()\"\r\n (blur)=\"onBlur()\"\r\n [class.error]=\"isInvalid()\"\r\n />\r\n </div>\r\n\r\n <div class=\"dropdown-list\" *ngIf=\"isOpen && !disabled\">\r\n <div \r\n class=\"dropdown-item\" \r\n *ngFor=\"let option of filteredOptions; let i = index\"\r\n [class.highlighted]=\"i === highlightedIndex\"\r\n (click)=\"selectOption(option)\"\r\n >\r\n <span class=\"code\">{{ option.code }}</span>\r\n <span class=\"name\">{{ option.name }}</span>\r\n </div>\r\n <div class=\"no-results\" *ngIf=\"filteredOptions.length === 0\">\r\n No results found\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isInvalid()\" class=\"error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');\r\n\r\n * { font-family: 'Poppins', sans-serif; }\r\n\r\n .fv-name-code-container {\r\n position: relative;\r\n width: 100%;\r\n margin-bottom: 0;\r\n }\r\n\r\n .fv-label {\r\n display: block;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #151D48;\r\n margin-bottom: 6px;\r\n }\r\n\r\n .required-asterisk {\r\n color: #e74c3c;\r\n margin-left: 2px;\r\n }\r\n\r\n .search-box-wrapper {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .fv-input {\r\n width: 100%;\r\n padding: 5px 10px;\r\n height: 34px;\r\n border: 1px solid #8CBBA8;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n color: #1f2b41;\r\n outline: none;\r\n transition: all 0.2s;\r\n background-color: #fff;\r\n box-sizing: border-box;\r\n font-family: 'Poppins', sans-serif;\r\n min-width: 0;\r\n }\r\n\r\n .fv-input:focus {\r\n border-color: #3498db;\r\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\r\n }\r\n\r\n .fv-input.error {\r\n border-color: #e74c3c;\r\n }\r\n\r\n .fv-input:disabled {\r\n background-color: #f5f5f5;\r\n cursor: not-allowed;\r\n }\r\n\r\n .dropdown-list {\r\n position: absolute;\r\n top: 100%;\r\n left: 0;\r\n min-width: 100%;\r\n width: max-content;\r\n max-width: 300px;\r\n background: white;\r\n border: 1px solid #ddd;\r\n border-radius: 8px;\r\n margin-top: 4px;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n z-index: 1000;\r\n box-shadow: 0 4px 6px rgba(0,0,0,0.1);\r\n }\r\n\r\n .dropdown-item {\r\n padding: 10px 12px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n cursor: pointer;\r\n border-bottom: 1px solid #f0f0f0;\r\n gap: 12px;\r\n }\r\n\r\n .dropdown-item:last-child {\r\n border-bottom: none;\r\n }\r\n\r\n .dropdown-item:hover, .dropdown-item.highlighted {\r\n background-color: #f0f7ff;\r\n }\r\n\r\n .code {\r\n color: #0056b3;\r\n font-weight: 600;\r\n font-size: 14px;\r\n white-space: nowrap;\r\n }\r\n\r\n .name {\r\n color: #333;\r\n font-size: 14px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n text-align: right;\r\n }\r\n\r\n .no-results {\r\n padding: 10px;\r\n color: #999;\r\n text-align: center;\r\n font-size: 13px;\r\n }\r\n\r\n .error-message {\r\n color: #e74c3c;\r\n font-size: 12px;\r\n margin-top: 4px;\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n }\r\n `],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FvNameCodeComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class FvNameCodeComponent implements ControlValueAccessor {\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() options: SearchSelectOption[] = [];\r\n @Input() schema?: ValidationSchema;\r\n @Input() control?: FormControl;\r\n @Input() disabled: boolean = false;\r\n\r\n @Output() selectionChange = new EventEmitter<any>();\r\n\r\n searchControl = new FormControl('');\r\n filteredOptions: SearchSelectOption[] = [];\r\n isOpen: boolean = false;\r\n highlightedIndex: number = -1;\r\n\r\n private onChange: (value: any) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n value: any = null;\r\n\r\n ngOnInit() {\r\n this.filteredOptions = this.options;\r\n\r\n this.searchControl.valueChanges.subscribe(term => {\r\n this.filterOptions(term || '');\r\n });\r\n\r\n if (this.control) {\r\n if (this.control.value) {\r\n this.writeValue(this.control.value);\r\n }\r\n this.control.valueChanges.subscribe(val => {\r\n this.writeValue(val);\r\n });\r\n if (this.control.disabled !== this.disabled) {\r\n this.setDisabledState(this.control.disabled);\r\n }\r\n }\r\n }\r\n\r\n filterOptions(term: string) {\r\n if (!term) {\r\n this.filteredOptions = this.options;\r\n return;\r\n }\r\n const lowerTerm = term.toLowerCase();\r\n this.filteredOptions = this.options.filter(opt =>\r\n opt.code.toLowerCase().includes(lowerTerm) ||\r\n opt.name.toLowerCase().includes(lowerTerm)\r\n );\r\n }\r\n\r\n openDropdown() {\r\n if (!this.disabled) {\r\n this.isOpen = true;\r\n this.filterOptions(this.searchControl.value || '');\r\n this.highlightedIndex = this.filteredOptions.length === 1 ? 0 : -1;\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n }\r\n\r\n closeDropdown() {\r\n this.isOpen = false;\r\n this.highlightedIndex = -1;\r\n const selectedOption = this.options.find(o => o.value === this.value);\r\n if (selectedOption) {\r\n this.searchControl.setValue(`${selectedOption.code} - ${selectedOption.name}`, { emitEvent: false });\r\n } else {\r\n if (!this.value) {\r\n this.searchControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n this.onTouched();\r\n }\r\n\r\n selectOption(option: SearchSelectOption) {\r\n if (!option) return;\r\n this.value = option.value;\r\n this.onChange(this.value);\r\n this.searchControl.setValue(`${option.code} - ${option.name}`, { emitEvent: false });\r\n this.selectionChange.emit(this.value);\r\n this.isOpen = false;\r\n this.highlightedIndex = -1;\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n const selectedOption = this.options.find(o => o.value === value);\r\n if (selectedOption) {\r\n this.searchControl.setValue(`${selectedOption.code} - ${selectedOption.name}`, { emitEvent: false });\r\n } else {\r\n this.searchControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (isDisabled) {\r\n this.searchControl.disable({ emitEvent: false });\r\n } else {\r\n this.searchControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n isInvalid(): boolean {\r\n if (this.control) {\r\n return this.control.invalid && (this.control.dirty || this.control.touched);\r\n }\r\n return false;\r\n }\r\n\r\n isRequired(): boolean {\r\n return this.schema?.rules?.some(r => r.name === 'required') || false;\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.control || !this.control.errors || !this.schema) return '';\r\n\r\n for (const errorKey of this.schema.errorPriority) {\r\n if (this.control.hasError(errorKey)) {\r\n const rule = this.schema.rules.find(r => r.name === (errorKey === 'required' ? 'required' : errorKey));\r\n if (rule) return this.getReadableError(rule.errorKey || '');\r\n }\r\n }\r\n if (this.control.hasError('required')) return 'This field is required';\r\n\r\n return 'Invalid value';\r\n }\r\n\r\n getReadableError(key: string): string {\r\n const map: { [key: string]: string } = {\r\n 'ERR_REQUIRED': 'This field is required',\r\n 'ERR_MIN_LENGTH': 'Value is too short',\r\n };\r\n return map[key] || 'Invalid value';\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n const clickedInside = (event.target as HTMLElement).closest('.fv-name-code-container');\r\n if (!clickedInside) {\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isOpen && (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter')) {\r\n this.openDropdown();\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (!this.isOpen) return;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.highlightedIndex = (this.highlightedIndex + 1) % this.filteredOptions.length;\r\n this.scrollToHighlighted();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.highlightedIndex = (this.highlightedIndex - 1 + this.filteredOptions.length) % this.filteredOptions.length;\r\n this.scrollToHighlighted();\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n if (this.filteredOptions.length === 1) {\r\n this.selectOption(this.filteredOptions[0]);\r\n } else if (this.highlightedIndex >= 0 && this.highlightedIndex < this.filteredOptions.length) {\r\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n break;\r\n case 'Escape':\r\n this.closeDropdown();\r\n break;\r\n case 'Tab':\r\n this.closeDropdown();\r\n break;\r\n }\r\n }\r\n\r\n private scrollToHighlighted() {\r\n const list = document.querySelector('.dropdown-list');\r\n const item = document.querySelectorAll('.dropdown-item')[this.highlightedIndex];\r\n if (list && item) {\r\n const listRect = list.getBoundingClientRect();\r\n const itemRect = item.getBoundingClientRect();\r\n\r\n if (itemRect.bottom > listRect.bottom) {\r\n list.scrollTop += (itemRect.bottom - listRect.bottom);\r\n } else if (itemRect.top < listRect.top) {\r\n list.scrollTop -= (listRect.top - itemRect.top);\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-phone-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\r\n templateUrl: './fv-phone-field.component.html',\r\n styleUrl: './fv-phone-field.component.css'\r\n})\r\nexport class FvPhoneFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = '';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n countryCode = '+91';\r\n countryCodes = [\r\n '+1', '+7', '+20', '+27', '+30', '+31', '+32', '+33', '+34', '+36', '+39', '+40', '+41', '+43', '+44', '+45', '+46', '+47',\r\n '+48', '+49', '+51', '+52', '+53', '+54', '+55', '+56', '+57', '+58', '+60', '+61', '+62', '+63', '+64', '+65', '+66',\r\n '+81', '+82', '+84', '+86', '+90', '+91', '+92', '+93', '+94', '+95', '+98', '+212', '+213', '+216', '+218', '+220',\r\n '+221', '+222', '+223', '+224', '+225', '+226', '+227', '+228', '+229', '+230', '+231', '+232', '+233', '+234', '+235',\r\n '+236', '+237', '+238', '+239', '+240', '+241', '+242', '+243', '+244', '+245', '+246', '+248', '+249', '+250', '+251',\r\n '+252', '+253', '+254', '+255', '+256', '+257', '+258', '+260', '+261', '+262', '+263', '+264', '+265', '+266', '+267',\r\n '+268', '+269', '+290', '+291', '+297', '+298', '+299', '+350', '+351', '+352', '+353', '+354', '+355', '+356', '+357',\r\n '+358', '+359', '+370', '+371', '+372', '+373', '+374', '+375', '+376', '+377', '+378', '+380', '+381', '+382', '+383',\r\n '+385', '+386', '+387', '+389', '+420', '+421', '+423', '+500', '+501', '+502', '+503', '+504', '+505', '+506', '+507',\r\n '+508', '+509', '+590', '+591', '+592', '+593', '+594', '+595', '+596', '+597', '+598', '+599', '+670', '+672', '+673',\r\n '+674', '+675', '+676', '+677', '+678', '+679', '+680', '+681', '+682', '+683', '+685', '+686', '+687', '+688', '+689',\r\n '+690', '+691', '+692', '+850', '+852', '+853', '+855', '+856', '+880', '+886', '+960', '+961', '+962', '+963', '+964',\r\n '+965', '+966', '+967', '+968', '+970', '+971', '+972', '+973', '+974', '+975', '+976', '+977', '+992', '+993', '+994',\r\n '+995', '+996', '+998'\r\n ];\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvPhoneField: control is required');\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n });\r\n\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n\r\n // Allow only numbers\r\n const numericValue = value.replace(/[^0-9]/g, '');\r\n\r\n // Limit to 10 digits\r\n const truncatedValue = numericValue.substring(0, 10);\r\n\r\n if (value !== truncatedValue) {\r\n input.value = truncatedValue;\r\n this.control.setValue(truncatedValue);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.blur.emit();\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n onFocus() {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false;\r\n }\r\n}\r\n","<div class=\"fv-phone-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-phone-input-group\">\r\n <div class=\"fv-select-wrapper\">\r\n <select class=\"fv-country-code-select\" [disabled]=\"disabled\" [(ngModel)]=\"countryCode\">\r\n <option *ngFor=\"let code of countryCodes\" [value]=\"code\">{{code}}</option>\r\n </select>\r\n <i class=\"material-icons fv-select-arrow\">arrow_drop_down</i>\r\n </div>\r\n <input type=\"text\" [formControl]=\"control\" (input)=\"onInput($event)\" (blur)=\"onBlur()\" (focus)=\"onFocus()\"\r\n placeholder=\"10 digit mobile number\" class=\"fv-input fv-phone-input\"\r\n [class.fv-input-error]=\"errorMessage\" />\r\n </div>\r\n\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">\r\n {{ errorMessage }}\r\n </span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-uan-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-uan-field.component.html',\r\n styleUrl: './fv-uan-field.component.css'\r\n})\r\nexport class FvUanFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'UAN Number';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const numericValue = value.replace(/[^0-9]/g, ''); // Numbers only\r\n const truncatedValue = numericValue.substring(0, 12); // UAN is 12 digits\r\n\r\n if (value !== truncatedValue) {\r\n input.value = truncatedValue;\r\n this.control.setValue(truncatedValue);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n\r\n isRequired(): boolean {\r\n return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" (input)=\"onInput($event)\" placeholder=\"12 digit UAN\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-pf-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-pf-field.component.html',\r\n styleUrl: './fv-pf-field.component.css'\r\n})\r\nexport class FvPfFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'PF Number';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvPfField: control is required');\r\n return;\r\n }\r\n\r\n // Default PF Schema\r\n if (!this.schema) {\r\n this.schema = {\r\n controlType: 'PfField',\r\n errorPriority: ['required', 'regex'],\r\n rules: [\r\n {\r\n name: 'regex',\r\n params: {\r\n pattern: '^[A-Z]{2}/[A-Z]{3}/[0-9]{7}/[0-9]{3}/[0-9]{7}$'\r\n },\r\n errorKey: 'ERR_PF_INVALID'\r\n }\r\n ]\r\n };\r\n }\r\n\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n\r\n // Initial validation\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n // Allow Alphanumeric and slash\r\n const formatted = value.replace(/[^a-zA-Z0-9/]/g, '').toUpperCase();\r\n\r\n if (value !== formatted) {\r\n input.value = formatted;\r\n this.control.setValue(formatted);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'PF Number is required',\r\n ERR_PF_INVALID: 'Invalid PF Number format (e.g. AA/AAA/0000000/000/0000000)',\r\n ERR_REGEX_MISMATCH: 'Invalid PF Number format'\r\n };\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" [disabled]=\"disabled\" (input)=\"onInput($event)\"\r\n placeholder=\"AA/AAA/0000000/000/0000000\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage && control.touched\" />\r\n <span *ngIf=\"errorMessage && control.touched\" class=\"fv-error-message\">{{ getErrorMessage() }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-esi-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-esi-field.component.html',\r\n styleUrl: './fv-esi-field.component.css'\r\n})\r\nexport class FvEsiFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'ESI Number';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const numericValue = value.replace(/[^0-9]/g, '');\r\n const truncatedValue = numericValue.substring(0, 17);\r\n\r\n if (value !== truncatedValue) {\r\n input.value = truncatedValue;\r\n this.control.setValue(truncatedValue);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" (input)=\"onInput($event)\" placeholder=\"17 digit ESI\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-ifsc-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-ifsc-field.component.html',\r\n styleUrl: './fv-ifsc-field.component.css'\r\n})\r\nexport class FvIfscFieldComponent implements OnInit, OnDestroy {\r\n @Input() label: string = 'IFSC Code';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const formatted = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\r\n const truncated = formatted.substring(0, 11);\r\n\r\n if (value !== truncated) {\r\n input.value = truncated;\r\n this.control.setValue(truncated);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" [disabled]=\"disabled\" (input)=\"onInput($event)\" placeholder=\"IFSC Code\"\r\n class=\"fv-input\" [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-micr-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-micr-field.component.html',\r\n styleUrl: './fv-micr-field.component.css'\r\n})\r\nexport class FvMicrFieldComponent implements OnInit, OnDestroy {\r\n @Input() label: string = 'MICR Code';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const numericValue = value.replace(/[^0-9]/g, '');\r\n const truncatedValue = numericValue.substring(0, 9);\r\n\r\n if (value !== truncatedValue) {\r\n input.value = truncatedValue;\r\n this.control.setValue(truncatedValue);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" [disabled]=\"disabled\" (input)=\"onInput($event)\"\r\n placeholder=\"9 digit MICR\" class=\"fv-input\" [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fv-iban-field',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './fv-iban-field.component.html',\r\n styleUrl: './fv-iban-field.component.css'\r\n})\r\nexport class FvIbanFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'IBAN Number';\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() schema!: ValidationSchema;\r\n\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.subscription = this.control.valueChanges.subscribe((value) => this.validateValue(value));\r\n }\r\n\r\n ngOnDestroy() { this.subscription?.unsubscribe(); }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n const formatted = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\r\n const truncated = formatted.substring(0, 34);\r\n\r\n if (value !== truncated) {\r\n input.value = truncated;\r\n this.control.setValue(truncated);\r\n }\r\n }\r\n\r\n validateValue(value: any) {\r\n if (!this.schema) return;\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n if (!result.isValid && result.errorKey) this.control.setErrors({ [result.errorKey]: true });\r\n else this.control.setErrors(null);\r\n }\r\n isRequired(): boolean { return this.schema?.rules?.some(r => r.name === 'required' && r.params?.['enabled']) || false; }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }}\r\n <span *ngIf=\"isRequired()\" class=\"fv-required-asterisk\">*</span>\r\n </label>\r\n <input type=\"text\" [formControl]=\"control\" (input)=\"onInput($event)\" placeholder=\"IBAN\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage\" />\r\n <span *ngIf=\"errorMessage\" class=\"fv-error-message\">{{ errorMessage }}</span>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-email-field',\r\n templateUrl: './fv-email-field.component.html',\r\n styleUrl: './fv-email-field.component.css',\r\n})\r\nexport class FvEmailFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'Email Address';\r\n @Input() placeholder: string = 'e.g. john@example.com';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvEmailField: control is required');\r\n return;\r\n }\r\n\r\n // Default email schema if not provided\r\n if (!this.schema) {\r\n this.schema = {\r\n controlType: 'EntryField',\r\n errorPriority: ['required', 'regex'],\r\n rules: [\r\n {\r\n name: 'regex',\r\n params: {\r\n pattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\r\n },\r\n errorKey: 'ERR_EMAIL_INVALID',\r\n },\r\n ],\r\n };\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'Email is required',\r\n ERR_EMAIL_INVALID: 'Invalid email format',\r\n ERR_REGEX_MISMATCH: 'Invalid email format',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }} <span *ngIf=\"isRequired()\" class=\"required\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-input-wrapper\">\r\n <input type=\"email\" [formControl]=\"control\" [placeholder]=\"placeholder\" [readonly]=\"readonly\"\r\n (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" class=\"fv-input\"\r\n [class.error]=\"!!errorMessage && control.touched\" />\r\n <span class=\"fv-field-icon\">\r\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"></path>\r\n <polyline points=\"22,6 12,13 2,6\"></polyline>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage && control.touched\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Validator, ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n selector: 'fv-password-field',\r\n templateUrl: './fv-password-field.component.html',\r\n styleUrl: './fv-password-field.component.css',\r\n})\r\nexport class FvPasswordFieldComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() label: string = 'Password';\r\n @Input() placeholder: string = '••••••••';\r\n @Input() schema!: ValidationSchema;\r\n @Input() control!: FormControl;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() blur = new EventEmitter<void>();\r\n @Output() focus = new EventEmitter<void>();\r\n\r\n errorMessage: string | null = null;\r\n showPassword: boolean = false;\r\n private subscription?: Subscription;\r\n\r\n ngOnInit(): void {\r\n if (!this.control) {\r\n console.error('FvPasswordField: control is required');\r\n return;\r\n }\r\n\r\n // Subscribe to value changes\r\n this.subscription = this.control.valueChanges.subscribe((value) => {\r\n this.validateValue(value);\r\n this.valueChange.emit(value);\r\n });\r\n\r\n // Validate initial value\r\n if (this.control.value) {\r\n this.validateValue(this.control.value);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['disabled'] && this.control) {\r\n if (this.disabled) {\r\n this.control.disable({ emitEvent: false });\r\n } else {\r\n this.control.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private validateValue(value: any): void {\r\n if (!this.schema) return;\r\n\r\n const result = Validator.validate(value, this.schema);\r\n this.errorMessage = result.errorKey;\r\n\r\n if (!result.isValid && result.errorKey) {\r\n this.control.setErrors({ [result.errorKey]: true });\r\n } else {\r\n this.control.setErrors(null);\r\n }\r\n }\r\n\r\n toggleVisibility(): void {\r\n if (this.disabled) return;\r\n this.showPassword = !this.showPassword;\r\n }\r\n\r\n onBlur(event?: FocusEvent): void {\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }\r\n\r\n onFocus(event?: FocusEvent): void {\r\n this.focus.emit();\r\n }\r\n\r\n isRequired(): boolean {\r\n return (\r\n this.schema?.rules?.some(\r\n (r) => r.name === 'required' && r.params?.['enabled']\r\n ) || false\r\n );\r\n }\r\n\r\n getErrorMessage(): string {\r\n if (!this.errorMessage) return '';\r\n\r\n const errorMessages: Record<string, string> = {\r\n ERR_REQUIRED: 'Password is required',\r\n ERR_MIN_LENGTH: 'Password is too short',\r\n ERR_REGEX_MISMATCH: 'Invalid password format',\r\n ERR_PASSWORD_TOO_SHORT: 'Password must be at least 8 characters',\r\n ERR_PASSWORD_MISSING_UPPERCASE: 'Uppercase letter missing',\r\n ERR_PASSWORD_MISSING_LOWERCASE: 'Lowercase letter missing',\r\n ERR_PASSWORD_MISSING_NUMBER: 'At least one number missing',\r\n ERR_PASSWORD_MISSING_SPECIAL_CHAR: 'Special character missing',\r\n };\r\n\r\n return errorMessages[this.errorMessage] || this.errorMessage;\r\n }\r\n}\r\n","<div class=\"fv-field-container\">\r\n <label *ngIf=\"label\" class=\"fv-label\">\r\n {{ label }} <span *ngIf=\"isRequired()\" class=\"required\">*</span>\r\n </label>\r\n\r\n <div class=\"fv-input-wrapper\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" [formControl]=\"control\" [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\" (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" class=\"fv-input\"\r\n [class.error]=\"!!errorMessage && control.touched\" />\r\n <button type=\"button\" class=\"fv-visibility-toggle\" (click)=\"toggleVisibility()\" [disabled]=\"disabled\">\r\n <svg *ngIf=\"!showPassword\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path>\r\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\r\n </svg>\r\n <svg *ngIf=\"showPassword\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path\r\n d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\">\r\n </path>\r\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"errorMessage && control.touched\" class=\"fv-error-message\">\r\n {{ getErrorMessage() }}\r\n </div>\r\n</div>","export type FieldType =\r\n | 'text'\r\n | 'email'\r\n | 'number'\r\n | 'select'\r\n | 'name-code'\r\n | 'checkbox'\r\n | 'textarea'\r\n | 'date'\r\n | 'password'\r\n | 'radio'\r\n | 'file'\r\n | 'month-year'\r\n | 'phone'\r\n | 'uan'\r\n | 'pf'\r\n | 'esi'\r\n | 'ifsc'\r\n | 'micr'\r\n | 'iban';\r\nexport type ValidationType =\r\n | 'required'\r\n | 'email'\r\n | 'minLength'\r\n | 'maxLength'\r\n | 'pattern'\r\n | 'min'\r\n | 'max'\r\n | 'custom'\r\n | 'passwordComplexity';\r\n\r\nexport interface FieldValidation {\r\n type: ValidationType;\r\n value?: any; // For minLength, maxLength, min, max, pattern\r\n message?: string; // Custom error message\r\n validator?: (value: any, formGroup?: FormGroup) => boolean; // For custom validation\r\n params?: any; // For complex validation rules like passwordComplexity\r\n errorKey?: string; // Specific error key to return\r\n}\r\n\r\nexport interface FormColumn {\r\n name: string;\r\n label: string;\r\n type: FieldType;\r\n placeholder?: string;\r\n required?: boolean;\r\n options?: { label: string; value: any }[]; // For select fields\r\n validations?: FieldValidation[];\r\n value?: any; // Default value\r\n disabled?: boolean;\r\n className?: string;\r\n hidden?: boolean;\r\n hint?: string;\r\n colSpan?: number;\r\n onChange?: (value: any, formGroup: FormGroup) => void;\r\n accept?: string; // For file input (e.g., 'image/*')\r\n filePreview?: boolean; // Show image preview\r\n showTimePicker?: boolean; // Show time picker for text fields\r\n allowAlphabetsOnly?: boolean;\r\n maxLength?: number;\r\n layout?: 'vertical' | 'horizontal'; // For radio group\r\n}\r\n\r\nexport interface FormSection {\r\n title?: string; // Section heading (e.g., \"PERSONAL INFORMATION\")\r\n fields: FormColumn[];\r\n}\r\n\r\nexport interface FormConfig {\r\n sections: FormSection[];\r\n submitLabel?: string;\r\n resetLabel?: string;\r\n onSubmit: (data: any) => void;\r\n onReset?: () => void;\r\n onCancel: () => void;\r\n cancelLabel?: string;\r\n formTitle?: string;\r\n maxColsPerRow?: number;\r\n}\r\n\r\n// add-update-form.component.ts\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n OnDestroy,\r\n AfterViewInit,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AbstractControl,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\n// Import your library modules\r\nimport { FvEntryFieldComponent } from '../fv-entry-field/fv-entry-field.component';\r\nimport { FvNumberFieldComponent } from '../fv-number-field/fv-number-field.component';\r\nimport { FvDropdownComponent } from '../fv-dropdown/fv-dropdown.component';\r\nimport { FvRadioGroupComponent } from '../fv-radio-group/fv-radio-group.component';\r\nimport { FvCheckboxComponent } from '../fv-checkbox/fv-checkbox.component';\r\nimport { FvDateFieldComponent } from '../fv-date-field/fv-date-field.component';\r\nimport { FvMonthYearFieldComponent } from '../fv-month-year-field/fv-month-year-field.component';\r\nimport { FvFileSelectorComponent } from '../fv-file-selector/fv-file-selector.component';\r\nimport { FvImageSelectorComponent } from '../fv-image-selector/fv-image-selector.component';\r\nimport { FvRichTextEditorComponent } from '../fv-rich-text-editor/fv-rich-text-editor.component';\r\nimport { FvNameCodeComponent } from '../fv-name-code/fv-name-code.component';\r\nimport { FvPhoneFieldComponent } from '../fv-phone-field/fv-phone-field.component';\r\nimport { FvUanFieldComponent } from '../fv-uan-field/fv-uan-field.component';\r\nimport { FvPfFieldComponent } from '../fv-pf-field/fv-pf-field.component';\r\nimport { FvEsiFieldComponent } from '../fv-esi-field/fv-esi-field.component';\r\nimport { FvIfscFieldComponent } from '../fv-ifsc-field/fv-ifsc-field.component';\r\nimport { FvMicrFieldComponent } from '../fv-micr-field/fv-micr-field.component';\r\nimport { FvIbanFieldComponent } from '../fv-iban-field/fv-iban-field.component';\r\nimport { FvEmailFieldComponent } from '../fv-email-field/fv-email-field.component';\r\nimport { FvPasswordFieldComponent } from '../fv-password-field/fv-password-field.component';\r\n\r\n// Import Validation Types\r\nimport { ValidationSchema, ValidationRule } from '@fovestta2/validation-engine';\r\n@Component({\r\n selector: 'lib-add-update-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FvEntryFieldComponent,\r\n FvNumberFieldComponent,\r\n FvDropdownComponent,\r\n FvRadioGroupComponent,\r\n FvCheckboxComponent,\r\n FvDateFieldComponent,\r\n FvMonthYearFieldComponent,\r\n FvFileSelectorComponent,\r\n FvImageSelectorComponent,\r\n FvRichTextEditorComponent,\r\n FvNameCodeComponent,\r\n FvPhoneFieldComponent,\r\n FvUanFieldComponent,\r\n FvPfFieldComponent,\r\n FvEsiFieldComponent,\r\n FvIfscFieldComponent,\r\n FvMicrFieldComponent,\r\n FvIbanFieldComponent,\r\n FvEmailFieldComponent,\r\n FvPasswordFieldComponent,\r\n ],\r\n template: `\r\n <div class=\"form-container\">\r\n <div class=\"form-header\" *ngIf=\"config.formTitle\">\r\n <h2>{{ config.formTitle }}</h2>\r\n </div>\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"handleSubmit()\" class=\"dynamic-form\">\r\n <div *ngFor=\"let section of config.sections\" class=\"form-section\">\r\n <h3 class=\"section-title\" *ngIf=\"section.title\">\r\n {{ section.title }}\r\n </h3>\r\n\r\n <div class=\"fields-row\">\r\n <ng-container *ngFor=\"let column of section.fields\">\r\n <div\r\n class=\"form-field-wrapper\"\r\n [ngClass]=\"'field-' + column.type\"\r\n [ngStyle]=\"column.hidden ? { display: 'none' } : {}\"\r\n [style.grid-column]=\"'span ' + (column.colSpan || 1)\"\r\n >\r\n <ng-container\r\n *ngIf=\"column.type === 'text' && !column.hidden\"\r\n >\r\n <fv-entry-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n type=\"text\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n [readonly]=\"false\"\r\n [allowAlphabetsOnly]=\"column.allowAlphabetsOnly || false\"\r\n [maxLength]=\"column.maxLength || null\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-entry-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'email' && !column.hidden\"\r\n >\r\n <fv-email-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-email-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'password' && !column.hidden\"\r\n >\r\n <fv-password-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-password-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'number' && !column.hidden\"\r\n >\r\n <fv-number-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-number-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'select' && !column.hidden\"\r\n >\r\n <fv-dropdown\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select option'\"\r\n [options]=\"column.options || []\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-dropdown>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'checkbox' && !column.hidden\"\r\n >\r\n <fv-checkbox\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.name)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-checkbox>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'radio' && !column.hidden\">\r\n <fv-radio-group\r\n [label]=\"column.label\"\r\n [options]=\"column.options || []\"\r\n [control]=\"getControl(column.name)\"\r\n [disabled]=\"column.disabled || false\"\r\n [layout]=\"column.layout || 'vertical'\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'date' && !column.hidden\">\r\n <fv-date-field\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-date-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'month-year' && !column.hidden\"\r\n >\r\n <fv-month-year-field\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleMonthYearChange(column.name, $event)\"\r\n >\r\n </fv-month-year-field>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'textarea' && !column.hidden\"\r\n >\r\n <fv-rich-text-editor\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"handleFieldChange(column.name, $event)\"\r\n >\r\n </fv-rich-text-editor>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'file' && !column.hidden\">\r\n <ng-container *ngIf=\"isImageField(column); else standardFile\">\r\n <fv-image-selector\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select image'\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"onFileChange($event, column.name)\"\r\n >\r\n </fv-image-selector>\r\n </ng-container>\r\n\r\n <ng-template #standardFile>\r\n <fv-file-selector\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select file'\"\r\n [accept]=\"column.accept || '*/*'\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n (valueChange)=\"onFileChange($event, column.name)\"\r\n >\r\n </fv-file-selector>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"column.type === 'name-code' && !column.hidden\"\r\n >\r\n <fv-name-code\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Search by Code or Name'\"\r\n [options]=\"column.options ? mapSearchOptions(column.options) : []\"\r\n [control]=\"getControl(column.name)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.disabled || false\"\r\n >\r\n </fv-name-code>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'phone' && !column.hidden\">\r\n <fv-phone-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-phone-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'uan' && !column.hidden\">\r\n <fv-uan-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-uan-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'pf' && !column.hidden\">\r\n <fv-pf-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-pf-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'esi' && !column.hidden\">\r\n <fv-esi-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-esi-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'ifsc' && !column.hidden\">\r\n <fv-ifsc-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-ifsc-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'micr' && !column.hidden\">\r\n <fv-micr-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-micr-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'iban' && !column.hidden\">\r\n <fv-iban-field [label]=\"column.label\" [control]=\"getControl(column.name)\" [schema]=\"getSchema(column)\" [disabled]=\"column.disabled || false\"></fv-iban-field>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-actions\">\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid && submitted\"\r\n >\r\n {{ config.submitLabel || 'Save' }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline\"\r\n (click)=\"config.onCancel()\"\r\n >\r\n {{ config.cancelLabel || 'Cancel' }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n `,\r\n styles: `\r\n\r\n @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');\r\n @import url('https://fonts.googleapis.com/icon?family=Material+Icons');\r\n *{\r\n font-family: \"Poppins\" !important;\r\n }\r\n .form-container {\r\n background: #f5f5f5;\r\n padding: 5px 10px 10px;\r\n border-radius: 8px;\r\n margin: 0 auto;\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n .error-border {\r\n border-color: red !important;\r\n }\r\n\r\n .hidden{\r\n display:none !important;\r\n }\r\n\r\n .form-header {\r\n margin-bottom: 5px;\r\n }\r\n\r\n .form-header h2 {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: #303030;\r\n }\r\n\r\n .dynamic-form {\r\n background: white;\r\n padding: 10px;\r\n border-radius: 6px;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n .form-section {\r\n margin-bottom:10px;\r\n }\r\n\r\n .section-title {\r\n font-size: 16px;\r\n font-weight: 700;\r\n color: #303030;\r\n margin: 0 0 16px 0;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n }\r\n\r\n .fields-row {\r\n display: grid;\r\n grid-template-columns: repeat(5,1fr);\r\n gap: 16px;\r\n width: 100%;\r\n box-sizing: border-box;\r\n overflow: visible;\r\n }\r\n\r\n .form-field-wrapper {\r\n display: flex;\r\n position: relative;\r\n flex-direction: column;\r\n min-width: 0;\r\n width: 100%;\r\n box-sizing: border-box;\r\n overflow: visible;\r\n }\r\n\r\n .password-toggle-btn {\r\n position: absolute;\r\n right: 10px;\r\n top: 32px;\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n padding: 4px;\r\n color: #666;\r\n}\r\n\r\n.password-toggle-btn:hover {\r\n color: #333;\r\n}\r\n\r\n.password-toggle-btn .material-icons {\r\n font-size: 20px;\r\n width: auto;\r\n height: auto;\r\n padding: 0;\r\n}\r\n\r\n @media (min-width: 1200px) and (max-width: 1400px) {\r\n .fields-row {\r\n grid-template-columns: repeat(5,1fr);\r\n }\r\n .form-control {\r\n width: 180px;\r\n max-width: 180px;\r\n }\r\n }\r\n\r\n @media (max-width: 1200px) {\r\n .fields-row {\r\n grid-template-columns: repeat(3,1fr);\r\n }\r\n .form-control {\r\n width: 100%;\r\n max-width: 100%;\r\n }\r\n }\r\n\r\n @media (max-width: 992px) {\r\n .fields-row {\r\n grid-template-columns: repeat(2,1fr);\r\n gap: 12px;\r\n }\r\n }\r\n\r\n @media (max-width: 768px) {\r\n .fields-row {\r\n grid-template-columns: repeat(2,1fr);\r\n gap: 10px;\r\n }\r\n }\r\n\r\n @media (max-width: 640px) {\r\n .fields-row {\r\n grid-template-columns: 1fr;\r\n gap: 12px;\r\n }\r\n .form-field-wrapper {\r\n width: 100%;\r\n }\r\n }\r\n\r\n label {\r\n font-weight: 600;\r\n margin-bottom: 6px;\r\n color: #151D48;\r\n font-size: 14px;\r\n }\r\n\r\n .required {\r\n color: #e74c3c;\r\n margin-left: 2px;\r\n }\r\n\r\n .form-control {\r\n padding: 5px 10px;\r\n width: 100%;\r\n max-width: 100%;\r\n height: 34px;\r\n border: 1px solid #8CBBA8;\r\n border-radius: 8px;\r\n background-color: #ffffff;\r\n font-size: 14px;\r\n font-weight: 400;\r\n font-family: inherit;\r\n color: #1f2b41;\r\n transition: border-color 0.2s, box-shadow 0.2s;\r\n box-sizing: border-box;\r\n }\r\n\r\n .form-control:focus {\r\n outline: none;\r\n border-color: #3498db;\r\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\r\n }\r\n\r\n .form-control:disabled {\r\n background-color: #ecf0f1;\r\n cursor: not-allowed;\r\n }\r\n\r\n textarea.form-control {\r\n resize: vertical;\r\n min-height: 100px;\r\n }\r\n\r\n select.form-control {\r\n cursor: pointer;\r\n appearance: none;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23333' d='M6 9L1 4h10z'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-position: right 8px center;\r\n padding-right: 40px;\r\n }\r\n\r\n .checkbox-wrapper {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n }\r\n\r\n input[type=\"checkbox\"] {\r\n width: 18px;\r\n height: 18px;\r\n cursor: pointer;\r\n }\r\n\r\n .checkbox-label {\r\n cursor: pointer;\r\n margin: 0;\r\n }\r\n\r\n .file-upload-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 20px;\r\n padding: 20px;\r\n background: white;\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.material-icons {\r\n font-family: 'Material Icons' !important;\r\n border-radius: 4px;\r\n display: inline-block;\r\n width: 40px;\r\n padding: 8px;\r\n height: 40px;\r\n}\r\n\r\n.file-field-wrapper {\r\n width: 100%;\r\n margin-top: 16px;\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.photo-preview-circle {\r\n width: 100px;\r\n height: 100px;\r\n border-radius: 50%;\r\n overflow: hidden;\r\n border: 2px solid #ddd;\r\n cursor: pointer;\r\n transition: border-color 0.2s;\r\n}\r\n\r\n.photo-preview-circle:hover {\r\n border-color: #3498db;\r\n}\r\n\r\n.preview-image, .default-photo {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.preview-image img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n}\r\n\r\n.default-photo {\r\n background: #f0f0f0;\r\n color: #999;\r\n font-size: 40px;\r\n}\r\n\r\n.file-info {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n}\r\n.btn-delete {\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n padding: 0px;\r\n}\r\n\r\n.upload-btn-group {\r\n display: flex;\r\n align-items: center;\r\n border: 1px solid #d3d3d3;\r\n border-radius: 8px;\r\n background: #fff;\r\n overflow: hidden;\r\n width: fit-content;\r\n}\r\n\r\n.btn-upload {\r\n background: #fff;\r\n color: #222;\r\n border: none;\r\n padding: 0 18px;\r\n font-size: 16px;\r\n border-right: 1px solid #e0e0e0;\r\n border-radius: 8px 0 0 8px;\r\n outline: none;\r\n box-shadow: none;\r\n cursor: pointer;\r\n height: 40px;\r\n transition: background 0.2s;\r\n}\r\n\r\n.btn-upload-icon {\r\n background: #f5f5f5;\r\n border: none;\r\n border-radius: 0 8px 8px 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 48px;\r\n height: 40px;\r\n cursor: pointer;\r\n transition: background 0.2s;\r\n}\r\n\r\n.btn-upload-icon i.material-icons {\r\n font-size: 22px;\r\n color: #222;\r\n}\r\n\r\n.btn-upload:hover, .btn-upload-icon:hover {\r\n background: #f0f0f0;\r\n}\r\n\r\n.btn-delete {\r\n background: white;\r\n color: red;\r\n}\r\n\r\n.btn-delete:hover {\r\n background: #f0f0f0;\r\n}\r\n\r\n.file-name {\r\n font-size: 12px;\r\n color: #666;\r\n margin: 8px;\r\n margin-top: 10px;\r\n}\r\n\r\n.file-label {\r\n font-weight: 600;\r\n margin-bottom: 6px;\r\n color: #151d48;\r\n font-size: 14px;\r\n display: block;\r\n}\r\n\r\n .radio-label {\r\n font-weight: 600;\r\n margin-bottom: 15px;\r\n color: #151D48;\r\n font-size: 14px;\r\n display: block;\r\n}\r\n\r\n.radio-group {\r\n display: flex;\r\n gap: 20px;\r\n align-items: center;\r\n}\r\n\r\n.radio-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n}\r\n\r\ninput[type=\"radio\"] {\r\n width: 18px;\r\n height: 18px;\r\n cursor: pointer;\r\n accent-color: #3498db;\r\n}\r\n\r\n.radio-option-label {\r\n cursor: pointer;\r\n margin: 0;\r\n font-weight: 400;\r\n}\r\n\r\n .hint {\r\n font-size: 12px;\r\n color: #7f8c8d;\r\n margin-top: 4px;\r\n }\r\n\r\n .error-message {\r\n color: #e74c3c;\r\n font-size: 12px;\r\n margin-top: 4px;\r\n }\r\n\r\n .form-actions {\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n padding-top: 5px;\r\n }\r\n\r\n .btn {\r\n padding: 8px 20px;\r\n border: none;\r\n border-radius: 7px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n }\r\n\r\n .btn-primary {\r\n background-color: #006AFF;\r\n color: white;\r\n }\r\n\r\n .btn-primary:hover:not(:disabled) {\r\n background-color: #2980b9;\r\n }\r\n\r\n .btn-primary:disabled {\r\n background-color: #bdc3c7;\r\n cursor: not-allowed;\r\n }\r\n\r\n .btn-secondary {\r\n background-color: #95a5a6;\r\n color: white;\r\n }\r\n\r\n .btn-secondary:hover {\r\n background-color: #7f8c8d;\r\n }\r\n\r\n .btn-outline {\r\n background-color: #303030;\r\n color: white;\r\n }\r\n\r\n .btn-outline:hover {\r\n background-color: #2b2b2bff;\r\n color: white;\r\n }\r\n\r\n .month-year-wrapper {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n }\r\n\r\n .month-year-wrapper .form-control {\r\n padding-right: 45px;\r\n }\r\n\r\n .month-picker-hidden {\r\n position: absolute;\r\n opacity: 0;\r\n pointer-events: none;\r\n width: 0;\r\n height: 0;\r\n border: none;\r\n padding: 0;\r\n margin: 0;\r\n }\r\n\r\n .month-picker-btn {\r\n position: absolute;\r\n right: 5px;\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n padding: 5px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #666;\r\n transition: color 0.2s;\r\n z-index: 1;\r\n }\r\n\r\n .month-picker-btn:hover:not(:disabled) {\r\n color: #3498db;\r\n }\r\n\r\n .month-picker-btn:disabled {\r\n cursor: not-allowed;\r\n opacity: 0.5;\r\n }\r\n\r\n .month-picker-btn .material-icons {\r\n font-size: 20px;\r\n width: auto;\r\n height: auto;\r\n padding: 0;\r\n }\r\n\r\n .search-select-wrapper {\r\n position: relative;\r\n width: 100%;\r\n }\r\n\r\n .search-select-input {\r\n padding-right: 10px;\r\n }\r\n\r\n .search-select-dropdown {\r\n position: absolute;\r\n top: calc(100% + 4px);\r\n left: 0;\r\n right: auto;\r\n min-width: 100%;\r\n max-width: calc(100vw - 16px);\r\n background: white;\r\n border: 1px solid #d3d3d3;\r\n border-radius: 8px;\r\n max-height: 220px;\r\n overflow-y: auto;\r\n box-shadow: 0 4px 10px rgba(0,0,0,0.08);\r\n z-index: 5;\r\n padding: 6px 0;\r\n transform: translateX(0);\r\n transition: transform 0.1s ease-out;\r\n }\r\n\r\n .search-select-option {\r\n padding: 8px 12px;\r\n cursor: pointer;\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n border-bottom: 1px solid #f2f2f2;\r\n }\r\n\r\n .search-select-option:last-child {\r\n border-bottom: none;\r\n }\r\n\r\n .search-select-option:hover {\r\n background: #f5f9ff;\r\n }\r\n\r\n .option-code {\r\n color: #0052cc;\r\n font-weight: 700;\r\n min-width: 90px;\r\n }\r\n\r\n .option-name {\r\n color: #151d48;\r\n font-weight: 500;\r\n }\r\n\r\n .time-picker-wrapper {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n }\r\n\r\n .time-input {\r\n padding-right: 45px;\r\n flex: 1;\r\n }\r\n\r\n .time-picker-btn {\r\n position: absolute;\r\n right: 5px;\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n padding: 5px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #666;\r\n transition: color 0.2s;\r\n z-index: 1;\r\n }\r\n\r\n .time-picker-btn:hover:not(:disabled) {\r\n color: #3498db;\r\n }\r\n\r\n .time-picker-btn:disabled {\r\n cursor: not-allowed;\r\n opacity: 0.5;\r\n }\r\n\r\n .time-picker-btn .material-icons {\r\n font-size: 20px;\r\n width: auto;\r\n height: auto;\r\n padding: 0;\r\n }\r\n\r\n input[type=\"time\"] {\r\n cursor: pointer;\r\n }\r\n\r\n input[type=\"time\"]::-webkit-calendar-picker-indicator {\r\n cursor: pointer;\r\n opacity: 0;\r\n position: absolute;\r\n right: 0;\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n .date-picker-field {\r\n width: 100%;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mat-mdc-form-field {\r\n width: 100%;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mat-mdc-text-field-wrapper {\r\n background-color: #ffffff;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__leading,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__notch,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__trailing {\r\n border-color: #8CBBA8;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing {\r\n border-color: #8CBBA8;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined.mdc-text-field--focused .mdc-notched-outline__leading,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined.mdc-text-field--focused .mdc-notched-outline__notch,\r\n .date-picker-field ::ng-deep .mdc-text-field--outlined.mdc-text-field--focused .mdc-notched-outline__trailing {\r\n border-color: #3498db;\r\n }\r\n\r\n .date-picker-field.error-border ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__leading,\r\n .date-picker-field.error-border ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__notch,\r\n .date-picker-field.error-border ::ng-deep .mdc-text-field--outlined .mdc-notched-outline__trailing {\r\n border-color: red !important;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mat-mdc-form-field-subscript-wrapper {\r\n display: none;\r\n }\r\n\r\n .date-picker-field ::ng-deep .mat-mdc-form-field-input-control input {\r\n font-family: \"Poppins\" !important;\r\n font-size: 14px;\r\n font-weight: 400;\r\n color: #1f2b41;\r\n }\r\n `,\r\n})\r\nexport class AddUpdateFormComponent\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n @Input() config!: FormConfig;\r\n @Output() validationError = new EventEmitter<string>();\r\n form!: FormGroup;\r\n submitted = false;\r\n private filePreviews: Map<string, string> = new Map();\r\n private fileNames: Map<string, string> = new Map();\r\n private valueChangeSubscriptions: Subscription[] = [];\r\n private passwordVisibility: Map<string, boolean> = new Map();\r\n private searchQueries: Map<string, string> = new Map();\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private hostRef: ElementRef<HTMLElement>\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Lifecycle hook - can be used for datepicker initialization if needed\r\n }\r\n\r\n getColumnWidth(column: FormColumn): string {\r\n const maxCols = this.config.maxColsPerRow || 5;\r\n const colSpan = Math.min(column.colSpan || 1, maxCols);\r\n return `calc(${(colSpan / maxCols) * 100}% - 16px)`;\r\n }\r\n\r\n getControl(name: string): FormControl {\r\n return this.form.get(name) as FormControl;\r\n }\r\n\r\n // 2. HELPER: Convert your FieldValidation[] to the library's ValidationSchema\r\n getSchema(column: FormColumn): ValidationSchema {\r\n const rules: ValidationRule[] = [];\r\n const errorPriority: string[] = [];\r\n\r\n if (column.validations) {\r\n column.validations.forEach((v) => {\r\n switch (v.type) {\r\n case 'required':\r\n rules.push({\r\n name: 'required',\r\n params: { enabled: true },\r\n errorKey: 'ERR_REQUIRED',\r\n });\r\n errorPriority.push('required');\r\n break;\r\n case 'email':\r\n rules.push({\r\n name: 'regex',\r\n params: {\r\n pattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\r\n },\r\n errorKey: 'ERR_REGEX_MISMATCH',\r\n });\r\n errorPriority.push('regex');\r\n break;\r\n case 'minLength':\r\n rules.push({\r\n name: 'minLength',\r\n params: { value: v.value },\r\n errorKey: 'ERR_MIN_LENGTH',\r\n });\r\n errorPriority.push('minLength');\r\n break;\r\n case 'maxLength':\r\n rules.push({\r\n name: 'maxLength',\r\n params: { value: v.value },\r\n errorKey: 'ERR_MAX_LENGTH',\r\n });\r\n errorPriority.push('maxLength');\r\n break;\r\n case 'pattern':\r\n rules.push({\r\n name: 'regex',\r\n params: { pattern: v.value },\r\n errorKey: 'ERR_REGEX_MISMATCH',\r\n });\r\n errorPriority.push('regex');\r\n break;\r\n case 'passwordComplexity':\r\n rules.push({\r\n name: 'passwordComplexity',\r\n params: v.params || {\r\n requireUppercase: true,\r\n requireLowercase: true,\r\n requireNumber: true,\r\n requireSpecialChar: true,\r\n minLength: 8\r\n },\r\n errorKey: v.errorKey || 'ERR_PASSWORD_COMPLEXITY_INVALID',\r\n });\r\n errorPriority.push('passwordComplexity');\r\n break;\r\n case 'min':\r\n rules.push({\r\n name: 'min',\r\n params: { value: v.value },\r\n errorKey: 'ERR_MIN_VALUE',\r\n });\r\n errorPriority.push('min');\r\n break;\r\n case 'max':\r\n rules.push({\r\n name: 'max',\r\n params: { value: v.value },\r\n errorKey: 'ERR_MAX_VALUE',\r\n });\r\n errorPriority.push('max');\r\n break;\r\n }\r\n });\r\n }\r\n\r\n // Map 'name-code' to 'Dropdown' or similar for validation schema purposes if needed\r\n let controlType = column.type;\r\n if (column.type === 'name-code') {\r\n controlType = 'select'; // Treat as select for schema lookup if library expects 'select' or 'Dropdown'\r\n }\r\n\r\n return {\r\n controlType: controlType,\r\n errorPriority: errorPriority,\r\n rules: rules,\r\n };\r\n }\r\n\r\n isImageField(column: FormColumn): boolean {\r\n return (\r\n column.type === 'file' &&\r\n (column.accept?.startsWith('image') || column.filePreview === true)\r\n );\r\n }\r\n\r\n initializeForm() {\r\n this.submitted = false;\r\n const formGroupConfig: any = {};\r\n\r\n this.config.sections.forEach((section) => {\r\n section.fields.forEach((column) => {\r\n let initialValue = column.value || '';\r\n\r\n // Format month-year fields to YYYY-MM format\r\n if (column.type === 'month-year' && initialValue) {\r\n initialValue = this.formatMonthYearValue(initialValue);\r\n }\r\n\r\n formGroupConfig[column.name] = [\r\n { value: initialValue, disabled: column.disabled || false },\r\n null, // We'll set validators after form creation\r\n ];\r\n\r\n // If it's a file field with an existing value, set the preview\r\n if (column.type === 'file' && column.value) {\r\n this.filePreviews.set(column.name, column.value);\r\n // Extract filename from URL or base64\r\n const fileName = this.extractFileName(column.value);\r\n if (fileName) {\r\n this.fileNames.set(column.name, fileName);\r\n }\r\n }\r\n\r\n // Initialize search display for name-code fields - No longer needed as FvNameCode handles display internally\r\n /* if (column.type === 'name-code' && initialValue && column.options) {\r\n // Logic moved to component\r\n } */\r\n });\r\n });\r\n\r\n this.form = this.fb.group(formGroupConfig);\r\n\r\n this.config.sections.forEach((section) => {\r\n section.fields.forEach((column) => {\r\n const validators = this.buildValidators(column.validations, this.form);\r\n if (validators.length > 0) {\r\n this.form.get(column.name)?.setValidators(validators);\r\n this.form.get(column.name)?.updateValueAndValidity();\r\n }\r\n });\r\n });\r\n\r\n // Subscribe to value changes for all fields to trigger onChange handlers\r\n Object.keys(this.form.controls).forEach((key) => {\r\n const control = this.form.get(key);\r\n if (control) {\r\n const subscription = control.valueChanges\r\n .pipe(distinctUntilChanged())\r\n .subscribe((value) => {\r\n const column = this.getColumnByName(key);\r\n if (column?.onChange) {\r\n column.onChange(value, this.form);\r\n }\r\n });\r\n this.valueChangeSubscriptions.push(subscription);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // Clean up all subscriptions to prevent memory leaks\r\n this.valueChangeSubscriptions.forEach((sub) => sub.unsubscribe());\r\n this.valueChangeSubscriptions = [];\r\n }\r\n\r\n handleFieldChange(fieldName: string, eventValue?: any) {\r\n const column = this.getColumnByName(fieldName);\r\n const formControl = this.form.get(fieldName);\r\n\r\n // Format month-year fields (especially expiryDate) to YYYY-MM\r\n if (column?.type === 'month-year' && eventValue) {\r\n const formattedValue = this.formatMonthYearValue(eventValue);\r\n if (formControl && formattedValue !== eventValue) {\r\n formControl.setValue(formattedValue, { emitEvent: false });\r\n eventValue = formattedValue;\r\n }\r\n }\r\n\r\n if (column?.onChange) {\r\n // Use the event value directly (what the user just selected/typed)\r\n // This ensures we have the correct value even if form control hasn't updated yet\r\n const valueToPass =\r\n eventValue !== undefined ? eventValue : this.form.get(fieldName)?.value;\r\n const onChangeFn = column.onChange; // Store the function reference\r\n\r\n // Store the selected value - this is what the user chose\r\n const selectedValue = valueToPass;\r\n\r\n // Ensure the form control has the selected value before calling onChange\r\n if (formControl && selectedValue !== undefined) {\r\n if (formControl.value !== selectedValue) {\r\n formControl.setValue(selectedValue, { emitEvent: false });\r\n }\r\n }\r\n\r\n // Call onChange with the selected value\r\n if (onChangeFn) {\r\n onChangeFn(selectedValue, this.form);\r\n }\r\n\r\n // Restore the value for the field that triggered the change if it was cleared by onChange\r\n // This is critical: if onChange clears the field that was just changed, we restore it\r\n // Only restore if we had a non-empty value (empty string, null, undefined are not restored)\r\n if (\r\n formControl &&\r\n selectedValue !== undefined &&\r\n selectedValue !== null &&\r\n selectedValue !== ''\r\n ) {\r\n // Use setTimeout with 0 delay to run after any synchronous operations in onChange\r\n setTimeout(() => {\r\n // Check if the value was cleared or changed\r\n const currentValue = formControl.value;\r\n // If the value doesn't match what was selected, restore it\r\n // This handles the case where onChange cleared the field unintentionally\r\n if (currentValue !== selectedValue) {\r\n formControl.setValue(selectedValue, { emitEvent: false });\r\n }\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n formatMonthYearValue(value: string): string {\r\n if (!value) return value;\r\n // Normalize to YYYY-MM\r\n if (value.match(/^\\d{2}-\\d{4}$/)) {\r\n const [month, year] = value.split('-');\r\n return `${year}-${month}`;\r\n }\r\n // If already in YYYY-MM format, return as is\r\n return value;\r\n }\r\n\r\n parseMonthYearValue(value: string): string {\r\n if (!value) return value;\r\n // Display and picker both use YYYY-MM; normalize MM-YYYY if present\r\n if (value.match(/^\\d{2}-\\d{4}$/)) {\r\n const [month, year] = value.split('-');\r\n return `${year}-${month}`;\r\n }\r\n return value;\r\n }\r\n\r\n handleMonthYearChange(fieldName: string, value: string) {\r\n // Format the input value to YYYY-MM format\r\n let formattedValue = value;\r\n\r\n // If it's in MM-YYYY format, convert to YYYY-MM\r\n if (formattedValue.match(/^\\d{2}-\\d{4}$/)) {\r\n const [month, year] = formattedValue.split('-');\r\n formattedValue = `${year}-${month}`;\r\n }\r\n // If it's in YYYYMM format (no dash), convert to YYYY-MM\r\n else if (formattedValue.match(/^\\d{6}$/)) {\r\n const year = formattedValue.substring(0, 4);\r\n const month = formattedValue.substring(4, 6);\r\n formattedValue = `${year}-${month}`;\r\n }\r\n // If it's already in YYYY-MM format, leave as is\r\n else if (formattedValue.match(/^\\d{4}-\\d{2}$/)) {\r\n // Already in correct format\r\n }\r\n // If user is typing, allow partial input\r\n else if (formattedValue.match(/^\\d{1,6}$/)) {\r\n // Allow partial input while typing\r\n }\r\n\r\n const formControl = this.form.get(fieldName);\r\n if (formControl && formattedValue !== value) {\r\n formControl.setValue(formattedValue, { emitEvent: false });\r\n }\r\n\r\n this.handleFieldChange(fieldName, formattedValue);\r\n }\r\n\r\n handleMonthYearBlur(fieldName: string) {\r\n const formControl = this.form.get(fieldName);\r\n if (!formControl) return;\r\n\r\n const value = formControl.value || '';\r\n // Ensure the value is in YYYY-MM format on blur\r\n if (value && !value.match(/^\\d{4}-\\d{2}$/)) {\r\n // Try to parse and format\r\n const formatted = this.formatMonthYearValue(value);\r\n if (formatted !== value) {\r\n formControl.setValue(formatted, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n handleMonthYearPickerChange(fieldName: string, value: string) {\r\n // Month picker outputs YYYY-MM; just normalize\r\n const formattedValue = this.formatMonthYearValue(value);\r\n const formControl = this.form.get(fieldName);\r\n if (formControl) {\r\n formControl.setValue(formattedValue, { emitEvent: false });\r\n this.handleFieldChange(fieldName, formattedValue);\r\n }\r\n }\r\n\r\n getMonthYearPickerValue(fieldName: string): string {\r\n const formControl = this.form.get(fieldName);\r\n if (!formControl) return '';\r\n const value = formControl.value || '';\r\n // Display and picker both expect YYYY-MM\r\n return this.parseMonthYearValue(value);\r\n }\r\n\r\n openMonthPicker(fieldName: string) {\r\n const monthInput = document.getElementById(\r\n fieldName + '_picker'\r\n ) as HTMLInputElement;\r\n if (monthInput && monthInput.type === 'month') {\r\n // Update the picker value before opening\r\n const currentValue = this.getMonthYearPickerValue(fieldName);\r\n if (currentValue) {\r\n monthInput.value = currentValue;\r\n }\r\n // Try modern showPicker API first, fallback to click\r\n if (monthInput.showPicker) {\r\n monthInput.showPicker();\r\n } else {\r\n monthInput.focus();\r\n monthInput.click();\r\n }\r\n }\r\n }\r\n\r\n getColumnByName(name: string): FormColumn | undefined {\r\n return this.config.sections\r\n .flatMap((s) => s.fields)\r\n .find((c) => c.name === name);\r\n }\r\n\r\n getFileFields(fields: FormColumn[]): FormColumn[] {\r\n return fields.filter((f) => f.type === 'file');\r\n }\r\n\r\n getNonFileFields(fields: FormColumn[]): FormColumn[] {\r\n return fields.filter((f) => f.type !== 'file');\r\n }\r\n\r\n togglePasswordVisibility(fieldName: string) {\r\n const current = this.passwordVisibility.get(fieldName) || false;\r\n this.passwordVisibility.set(fieldName, !current);\r\n }\r\n hasRequiredValidation(column: FormColumn): boolean {\r\n return column.validations?.some((v) => v.type === 'required') || false;\r\n }\r\n\r\n isPasswordVisible(fieldName: string): boolean {\r\n return this.passwordVisibility.get(fieldName) || false;\r\n }\r\n\r\n buildValidators(\r\n validations?: FieldValidation[],\r\n formGroup?: FormGroup\r\n ): any[] {\r\n if (!validations) return [];\r\n\r\n const validators: any[] = [];\r\n validations.forEach((validation) => {\r\n switch (validation.type) {\r\n case 'required':\r\n validators.push(Validators.required);\r\n break;\r\n case 'email':\r\n validators.push(Validators.email);\r\n break;\r\n case 'minLength':\r\n validators.push(Validators.minLength(validation.value));\r\n break;\r\n case 'maxLength':\r\n validators.push(Validators.maxLength(validation.value));\r\n break;\r\n case 'min':\r\n validators.push(Validators.min(validation.value));\r\n break;\r\n case 'max':\r\n validators.push(Validators.max(validation.value));\r\n break;\r\n case 'pattern':\r\n validators.push(Validators.pattern(validation.value));\r\n break;\r\n case 'custom':\r\n if (validation.validator) {\r\n validators.push((control: AbstractControl) => {\r\n const isValid = validation.validator!(control.value, formGroup);\r\n return isValid ? null : { custom: true };\r\n });\r\n }\r\n break;\r\n }\r\n });\r\n return validators;\r\n }\r\n\r\n triggerFileUpload(fieldName: string) {\r\n document.getElementById('fileInput_' + fieldName)?.click();\r\n }\r\n\r\n openTimePicker(fieldName: string) {\r\n const timeInput = document.getElementById(fieldName) as HTMLInputElement;\r\n if (timeInput && timeInput.type === 'time') {\r\n // Try modern showPicker API first, fallback to click\r\n if (timeInput.showPicker) {\r\n timeInput.showPicker();\r\n } else {\r\n timeInput.focus();\r\n timeInput.click();\r\n }\r\n }\r\n }\r\n\r\n onFileChange(event: any, fieldName: string) {\r\n const file: File = event.target.files[0];\r\n if (file) {\r\n this.fileNames.set(fieldName, file.name);\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n const base64String = reader.result as string;\r\n this.filePreviews.set(fieldName, base64String);\r\n this.form.get(fieldName)?.setValue(base64String);\r\n\r\n // Trigger onChange handler for file fields\r\n const column = this.getColumnByName(fieldName);\r\n if (column?.onChange) {\r\n column.onChange(base64String, this.form);\r\n }\r\n };\r\n }\r\n }\r\n\r\n extractFileName(value: string): string {\r\n if (!value) return '';\r\n\r\n // If it's a URL, extract filename from URL\r\n if (value.startsWith('http')) {\r\n const parts = value.split('/');\r\n return parts[parts.length - 1];\r\n }\r\n\r\n // If it's base64, return a generic name\r\n if (value.startsWith(`data:image`)) {\r\n return 'uploaded-image.jpg';\r\n }\r\n\r\n return 'existing-photo.jpg';\r\n }\r\n\r\n getFilePreview(fieldName: string): string | null {\r\n return this.filePreviews.get(fieldName) || null;\r\n }\r\n\r\n getFileName(fieldName: string): string | null {\r\n return this.fileNames.get(fieldName) || null;\r\n }\r\n\r\n mapSearchOptions(options: any[]): any[] {\r\n return options.map(opt => ({\r\n code: opt.code || opt.value,\r\n name: opt.name || opt.label || opt.value,\r\n value: opt.value\r\n }));\r\n }\r\n\r\n\r\n deleteFile(fieldName: string) {\r\n this.filePreviews.delete(fieldName);\r\n this.fileNames.delete(fieldName);\r\n this.form.get(fieldName)?.setValue('');\r\n\r\n // Trigger onChange handler when file is deleted\r\n const column = this.getColumnByName(fieldName);\r\n if (column?.onChange) {\r\n column.onChange('', this.form);\r\n }\r\n }\r\n\r\n handleSubmit() {\r\n this.submitted = true;\r\n if (this.form.invalid) {\r\n // Mark all fields as touched to show red borders\r\n Object.keys(this.form.controls).forEach((key) => {\r\n this.form.get(key)?.markAsTouched();\r\n });\r\n\r\n // Count only required fields that are invalid\r\n const allColumns = this.config.sections.flatMap((s) => s.fields);\r\n const invalidRequiredCount = Object.keys(this.form.controls).filter(\r\n (key) => {\r\n const control = this.form.get(key);\r\n if (!control?.invalid) return false;\r\n\r\n // Check if this field has required validation\r\n const column = allColumns.find((c) => c.name === key);\r\n return (\r\n column?.validations?.some((v) => v.type === 'required') || false\r\n );\r\n }\r\n ).length;\r\n\r\n // Only emit if there are required fields missing\r\n if (invalidRequiredCount > 0) {\r\n this.validationError.emit(\r\n `Please fill all required fields marked with *. ${invalidRequiredCount} field(s) need attention.`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n const formData = this.form.getRawValue();\r\n this.config.onSubmit(formData);\r\n }\r\n\r\n handleReset() {\r\n this.submitted = false;\r\n this.form.reset();\r\n if (this.config.onReset) {\r\n this.config.onReset();\r\n }\r\n }\r\n\r\n isFieldInvalid(fieldName: string): boolean {\r\n const field = this.form.get(fieldName);\r\n return !!(field && field.invalid && this.submitted);\r\n }\r\n\r\n getErrorMessage(fieldName: string): string {\r\n const field = this.form.get(fieldName);\r\n if (!field?.errors) return '';\r\n\r\n // Check if there's a custom message from validations\r\n const allColumns = this.config.sections.flatMap((s) => s.fields);\r\n const column = allColumns.find((c) => c.name === fieldName);\r\n // Check for custom validation error\r\n if (field.errors['custom']) {\r\n const customValidation = column?.validations?.find(\r\n (v) => v.type === 'custom'\r\n );\r\n return customValidation?.message || 'Invalid field';\r\n }\r\n\r\n // Check if there's a custom message from validations\r\n const errorKeys = Object.keys(field.errors);\r\n for (const key of errorKeys) {\r\n const validation = column?.validations?.find((v) => v.type === key);\r\n if (validation?.message) {\r\n return validation.message;\r\n }\r\n }\r\n // Default error messages\r\n if (field.errors['required']) {\r\n return `${column?.label} is required`;\r\n }\r\n if (field.errors['email']) return 'Invalid email format';\r\n if (field.errors['minlength'])\r\n return `Minimum length is ${field.errors['minlength'].requiredLength}`;\r\n if (field.errors['maxlength'])\r\n return `Maximum length is ${field.errors['maxlength'].requiredLength}`;\r\n if (field.errors['min'])\r\n return `Minimum value is ${field.errors['min'].min}`;\r\n if (field.errors['max'])\r\n return `Maximum value is ${field.errors['max'].max}`;\r\n if (field.errors['pattern']) return 'Invalid format';\r\n return 'Invalid field';\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n HostListener,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n ReactiveFormsModule,\r\n FormGroup,\r\n FormBuilder,\r\n FormControl,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { ValidationSchema } from '@fovestta2/validation-engine';\r\n\r\n// Import Fovestta Components\r\nimport { FvEntryFieldComponent } from '../fv-entry-field/fv-entry-field.component';\r\nimport { FvDropdownComponent } from '../fv-dropdown/fv-dropdown.component';\r\nimport { FvNumberFieldComponent } from '../fv-number-field/fv-number-field.component';\r\nimport { FvDateFieldComponent } from '../fv-date-field/fv-date-field.component';\r\nimport { FvMonthYearFieldComponent } from '../fv-month-year-field/fv-month-year-field.component';\r\nimport { FvFileSelectorComponent } from '../fv-file-selector/fv-file-selector.component';\r\nimport { FvNameCodeComponent } from '../fv-name-code/fv-name-code.component';\r\nimport { FvPhoneFieldComponent } from '../fv-phone-field/fv-phone-field.component';\r\nimport { FvUanFieldComponent } from '../fv-uan-field/fv-uan-field.component';\r\nimport { FvPfFieldComponent } from '../fv-pf-field/fv-pf-field.component';\r\nimport { FvEsiFieldComponent } from '../fv-esi-field/fv-esi-field.component';\r\nimport { FvIfscFieldComponent } from '../fv-ifsc-field/fv-ifsc-field.component';\r\nimport { FvMicrFieldComponent } from '../fv-micr-field/fv-micr-field.component';\r\nimport { FvIbanFieldComponent } from '../fv-iban-field/fv-iban-field.component';\r\nimport { FvEmailFieldComponent } from '../fv-email-field/fv-email-field.component';\r\nimport { FvPasswordFieldComponent } from '../fv-password-field/fv-password-field.component';\r\n\r\nexport interface QueryFormColumn {\r\n label: string;\r\n key: string;\r\n type: 'dropdown' | 'text' | 'number' | 'date' | 'month' | 'file' | 'name-code' | 'phone' | 'uan' | 'pf' | 'esi' | 'ifsc' | 'micr' | 'iban' | 'email' | 'password';\r\n options?: any[];\r\n placeholder?: string;\r\n onChange?: (value: any) => void;\r\n accept?: string;\r\n required?: boolean;\r\n readonly?: boolean;\r\n}\r\n\r\nexport interface QueryFormRow {\r\n columns: QueryFormColumn[];\r\n}\r\n\r\nexport interface QueryFormConfig {\r\n title: string;\r\n rows: QueryFormRow[];\r\n buttonText?: string;\r\n showExportButton?: boolean;\r\n exportFormats?: string[];\r\n showBackButton?: boolean;\r\n backButtonText?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-query-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FvEntryFieldComponent,\r\n FvDropdownComponent,\r\n FvNumberFieldComponent,\r\n FvDateFieldComponent,\r\n FvMonthYearFieldComponent,\r\n FvFileSelectorComponent,\r\n FvNameCodeComponent,\r\n FvPhoneFieldComponent,\r\n FvUanFieldComponent,\r\n FvPfFieldComponent,\r\n FvEsiFieldComponent,\r\n FvIfscFieldComponent,\r\n FvMicrFieldComponent,\r\n FvIbanFieldComponent,\r\n FvEmailFieldComponent,\r\n FvPasswordFieldComponent,\r\n ],\r\n template: `\r\n <div class=\"query-form-container\">\r\n <div class=\"d-flex cont\">\r\n <h2 class=\"form-title\">{{ config.title }}</h2>\r\n\r\n <div\r\n class=\"export-buttons\"\r\n *ngIf=\"\r\n config.showExportButton &&\r\n config.exportFormats &&\r\n config.exportFormats.length > 0\r\n \"\r\n >\r\n <div class=\"export-menu-container\">\r\n <button\r\n type=\"button\"\r\n class=\"export-btn menu-trigger\"\r\n (click)=\"toggleExportMenu($event)\"\r\n title=\"Toggle export options\"\r\n >\r\n <i class=\"material-icons\">file_download</i>\r\n <i class=\"material-icons arrow\">arrow_drop_down</i>\r\n </button>\r\n <div class=\"export-menu\" *ngIf=\"showExportMenu\">\r\n <button\r\n type=\"button\"\r\n *ngFor=\"let format of config.exportFormats\"\r\n class=\"menu-item\"\r\n (click)=\"exportToFormat(format)\"\r\n [attr.title]=\"'Export as ' + format.toUpperCase()\"\r\n >\r\n Export as {{ format.toUpperCase() }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Validation Error Message -->\r\n <div *ngIf=\"showValidationError\" class=\"validation-message\">\r\n <i class=\"material-icons\">error</i>\r\n Please fill all required fields\r\n </div>\r\n\r\n <div class=\"form-content\">\r\n <form [formGroup]=\"form\">\r\n <div\r\n *ngFor=\"let row of config.rows; let rowIndex = index\"\r\n class=\"form-row\"\r\n >\r\n <div *ngFor=\"let column of row.columns\" class=\"form-field\">\r\n \r\n <!-- Dropdown -->\r\n <ng-container *ngIf=\"column.type === 'dropdown'\">\r\n <fv-dropdown\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select option'\"\r\n [options]=\"column.options || []\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-dropdown>\r\n </ng-container>\r\n\r\n <!-- Text Input -->\r\n <ng-container *ngIf=\"column.type === 'text'\">\r\n <fv-entry-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n type=\"text\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-entry-field>\r\n </ng-container>\r\n\r\n <!-- Number Input -->\r\n <ng-container *ngIf=\"column.type === 'number'\">\r\n <fv-number-field\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || ''\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-number-field>\r\n </ng-container>\r\n\r\n <!-- Date Input -->\r\n <ng-container *ngIf=\"column.type === 'date'\">\r\n <fv-date-field\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-date-field>\r\n </ng-container>\r\n\r\n <!-- Month/Year Input -->\r\n <ng-container *ngIf=\"column.type === 'month'\">\r\n <fv-month-year-field\r\n [label]=\"column.label\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-month-year-field>\r\n </ng-container>\r\n\r\n <!-- File Upload -->\r\n <ng-container *ngIf=\"column.type === 'file'\">\r\n <fv-file-selector\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Select file'\"\r\n [accept]=\"column.accept || '*/*'\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-file-selector>\r\n </ng-container>\r\n\r\n <!-- Name Code Field -->\r\n <ng-container *ngIf=\"column.type === 'name-code'\">\r\n <fv-name-code\r\n [label]=\"column.label\"\r\n [placeholder]=\"column.placeholder || 'Search by Code or Name'\"\r\n [options]=\"mapSearchOptions(column.options || [])\"\r\n [control]=\"getControl(column.key)\"\r\n [schema]=\"getSchema(column)\"\r\n [disabled]=\"column.readonly || false\"\r\n >\r\n </fv-name-code>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'phone'\">\r\n <fv-phone-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-phone-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'uan'\">\r\n <fv-uan-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-uan-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'pf'\">\r\n <fv-pf-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-pf-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'esi'\">\r\n <fv-esi-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-esi-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'ifsc'\">\r\n <fv-ifsc-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-ifsc-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'micr'\">\r\n <fv-micr-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-micr-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'iban'\">\r\n <fv-iban-field [label]=\"column.label\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-iban-field>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"column.type === 'email'\">\r\n <fv-email-field [label]=\"column.label\" [placeholder]=\"column.placeholder || ''\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-email-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column.type === 'password'\">\r\n <fv-password-field [label]=\"column.label\" [placeholder]=\"column.placeholder || ''\" [control]=\"getControl(column.key)\" [schema]=\"getSchema(column)\" [disabled]=\"column.readonly || false\"></fv-password-field>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Buttons Row -->\r\n <div class=\"button-row\">\r\n <button\r\n type=\"button\"\r\n class=\"view-button\"\r\n (click)=\"onButtonClick()\"\r\n [attr.title]=\"config.buttonText || 'View'\"\r\n >\r\n {{ config.buttonText || 'View' }}\r\n </button>\r\n <button\r\n *ngIf=\"config.showBackButton\"\r\n type=\"button\"\r\n class=\"back-button\"\r\n (click)=\"onBackClick()\"\r\n [attr.title]=\"config.backButtonText || 'Back'\"\r\n >\r\n {{ config.backButtonText || 'Back' }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');\r\n @import url('https://fonts.googleapis.com/icon?family=Material+Icons');\r\n\r\n * {\r\n font-family: Poppins;\r\n }\r\n\r\n .material-icons {\r\n font-family: 'Material Icons' !important;\r\n font-size: 22px;\r\n display: inline-block;\r\n }\r\n\r\n .cont {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n }\r\n\r\n .validation-message {\r\n background-color: #fee;\r\n color: #c33;\r\n padding: 12px 16px;\r\n border-radius: 8px;\r\n margin: 10px 0;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 14px;\r\n font-weight: 500;\r\n border: 1px solid #fcc;\r\n }\r\n\r\n .export-buttons {\r\n display: flex;\r\n gap: 10px;\r\n }\r\n\r\n .export-btn {\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n transition: all 0.3s ease;\r\n border: none;\r\n padding: 8px 16px;\r\n border-radius: 7px;\r\n background: #006aff;\r\n color: white;\r\n }\r\n\r\n .export-btn:hover {\r\n background: #0045a6;\r\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\r\n }\r\n\r\n .export-menu-container {\r\n position: relative;\r\n border-radius: 7px;\r\n }\r\n\r\n .export-menu {\r\n position: absolute;\r\n top: 100%;\r\n right: 0;\r\n background: white;\r\n border-radius: 4px;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n margin-top: 5px;\r\n min-width: 180px;\r\n z-index: 1000;\r\n }\r\n\r\n .menu-item {\r\n width: 100%;\r\n color: black;\r\n text-align: left;\r\n background: white;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: background 0.2s;\r\n padding: 12px 16px;\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n }\r\n\r\n .menu-item:hover {\r\n background: #f5f5f5;\r\n }\r\n\r\n .query-form-container {\r\n background: #f2f2f2;\r\n border-radius: 8px;\r\n padding: 5px 10px 10px;\r\n margin: auto;\r\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\r\n margin-bottom: 1rem;\r\n overflow: visible;\r\n }\r\n\r\n .form-title {\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: #303030;\r\n margin: 0;\r\n font-family: Poppins;\r\n }\r\n\r\n .form-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n background-color: #ffffff;\r\n padding: 10px;\r\n border: 0.5px solid #cfcfcf;\r\n border-radius: 12px;\r\n overflow: visible;\r\n }\r\n\r\n .form-row {\r\n display: grid;\r\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n gap: 12px;\r\n width: 100%;\r\n box-sizing: border-box;\r\n overflow: visible;\r\n }\r\n\r\n .form-field {\r\n display: flex;\r\n flex-direction: column;\r\n min-width: 0;\r\n width: 100%;\r\n position: relative;\r\n overflow: visible;\r\n box-sizing: border-box;\r\n }\r\n\r\n .view-button {\r\n padding: 8px 20px;\r\n background: #006aff;\r\n color: #ffffff;\r\n border: none;\r\n border-radius: 7px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: background-color 0.2s;\r\n }\r\n\r\n .view-button:hover {\r\n background: #0045a6;\r\n }\r\n\r\n .button-row {\r\n display: flex;\r\n justify-content: space-between;\r\n gap: 12px;\r\n padding-top: 5px;\r\n margin-top: 5px;\r\n }\r\n\r\n .back-button {\r\n padding: 8px 20px;\r\n background-color: #303030;\r\n color: #ffffff;\r\n border: none;\r\n border-radius: 7px;\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: background-color 0.2s;\r\n }\r\n\r\n .back-button:hover {\r\n background-color: #2b2b2bff;\r\n }\r\n\r\n @media (min-width: 1200px) and (max-width: 1400px) {\r\n .form-row {\r\n grid-template-columns: repeat(5, 1fr);\r\n }\r\n }\r\n\r\n @media (max-width: 1200px) {\r\n .form-row {\r\n grid-template-columns: repeat(3, 1fr);\r\n }\r\n }\r\n\r\n @media (max-width: 992px) {\r\n .form-row {\r\n grid-template-columns: repeat(2, 1fr);\r\n gap: 12px;\r\n }\r\n }\r\n\r\n @media (max-width: 768px) {\r\n .form-row {\r\n grid-template-columns: repeat(2, 1fr);\r\n gap: 10px;\r\n }\r\n }\r\n\r\n @media (max-width: 640px) {\r\n .form-row {\r\n grid-template-columns: 1fr;\r\n gap: 12px;\r\n }\r\n .form-field {\r\n width: 100%;\r\n }\r\n }\r\n `,\r\n ],\r\n})\r\nexport class QueryFormComponent implements OnInit, OnDestroy {\r\n @Input() config!: QueryFormConfig;\r\n @Output() onSubmit = new EventEmitter<any>();\r\n @Output() onExport = new EventEmitter<string>();\r\n @Output() onBack = new EventEmitter<void>();\r\n\r\n form!: FormGroup;\r\n showExportMenu = false;\r\n showValidationError = false;\r\n private subs: Subscription[] = [];\r\n\r\n constructor(private fb: FormBuilder) { }\r\n\r\n ngOnInit() {\r\n const group: any = {};\r\n if (this.config && this.config.rows) {\r\n this.config.rows.forEach((row) => {\r\n row.columns.forEach((col) => {\r\n const validators: any[] = [];\r\n if (col.required) {\r\n validators.push(Validators.required);\r\n }\r\n group[col.key] = new FormControl(\r\n { value: '', disabled: col.readonly || false },\r\n validators\r\n );\r\n });\r\n });\r\n }\r\n this.form = this.fb.group(group);\r\n\r\n // Subscribe to value changes to trigger onChange callbacks\r\n this.subs.push(\r\n this.form.valueChanges.subscribe((value) => {\r\n this.config.rows.forEach((row) => {\r\n row.columns.forEach((col) => {\r\n if (col.onChange) {\r\n // Verify if this specific control changed? \r\n // For simplicity, we can pass value[col.key] but strictly we should check diff.\r\n // However, simple approach:\r\n // This runs on every change, might be noisy but acceptable for now.\r\n // A better approach would be subscribing to individual controls if performance matters.\r\n }\r\n });\r\n });\r\n })\r\n );\r\n\r\n // Subscribe individually to support onChange\r\n this.config.rows.forEach((row) => {\r\n row.columns.forEach((col) => {\r\n if (col.onChange) {\r\n const control = this.form.get(col.key);\r\n if (control) {\r\n this.subs.push(control.valueChanges.subscribe(val => {\r\n col.onChange!(val);\r\n }));\r\n }\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subs.forEach((s) => s.unsubscribe());\r\n }\r\n\r\n getControl(key: string): FormControl {\r\n return this.form.get(key) as FormControl;\r\n }\r\n\r\n getSchema(column: QueryFormColumn): ValidationSchema {\r\n // Generate a simple schema based on column definition\r\n const rules = [];\r\n const errorPriority = [];\r\n\r\n if (column.required) {\r\n rules.push({ name: 'required', params: { enabled: true }, errorKey: 'ERR_REQUIRED' });\r\n errorPriority.push('required');\r\n }\r\n\r\n if (column.type === 'email') {\r\n rules.push({\r\n name: 'regex',\r\n params: {\r\n pattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\r\n },\r\n errorKey: 'ERR_EMAIL_INVALID',\r\n });\r\n errorPriority.push('regex');\r\n }\r\n\r\n if (column.type === 'pf') {\r\n rules.push({\r\n name: 'regex',\r\n params: {\r\n pattern: '^[A-Z]{2}/[A-Z]{3}/[0-9]{7}/[0-9]{3}/[0-9]{7}$'\r\n },\r\n errorKey: 'ERR_PF_INVALID'\r\n });\r\n errorPriority.push('regex');\r\n }\r\n\r\n if (column.type === 'password') {\r\n rules.push({\r\n name: 'passwordComplexity',\r\n params: {\r\n minLength: 8,\r\n requireUppercase: true,\r\n requireLowercase: true,\r\n requireNumber: true,\r\n requireSpecialChar: true\r\n }\r\n });\r\n errorPriority.push('passwordComplexity');\r\n }\r\n\r\n return {\r\n controlType: this.mapType(column.type),\r\n rules: rules,\r\n errorPriority: errorPriority\r\n };\r\n }\r\n\r\n mapType(type: string): any {\r\n switch (type) {\r\n case 'text': return 'EntryField';\r\n case 'number': return 'NumberField';\r\n case 'date': return 'DateField';\r\n case 'dropdown': return 'Dropdown';\r\n case 'month': return 'MonthYearField';\r\n case 'file': return 'FileSelector';\r\n case 'name-code': return 'Dropdown';\r\n case 'phone': return 'PhoneField';\r\n case 'uan': return 'UanField';\r\n case 'pf': return 'PfField';\r\n case 'esi': return 'EsiField';\r\n case 'ifsc': return 'IfscField';\r\n case 'micr': return 'MicrField';\r\n case 'iban': return 'IbanField';\r\n case 'email': return 'EmailField';\r\n case 'password': return 'PasswordField';\r\n default: return 'EntryField';\r\n }\r\n }\r\n\r\n mapSearchOptions(options: any[]): any[] {\r\n return options.map(opt => ({\r\n code: opt.code || opt.value,\r\n name: opt.name || opt.label || opt.value,\r\n value: opt.value\r\n }));\r\n }\r\n\r\n triggerFileUpload(columnKey: string) {\r\n // FvFileSelector handles this internally, but if we needed external trigger...\r\n }\r\n\r\n toggleExportMenu(event: Event) {\r\n event.stopPropagation();\r\n this.showExportMenu = !this.showExportMenu;\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n clickOutside(event: any) {\r\n if (this.showExportMenu) {\r\n this.showExportMenu = false;\r\n }\r\n }\r\n\r\n exportToFormat(format: string) {\r\n this.onExport.emit(format);\r\n this.showExportMenu = false;\r\n }\r\n\r\n onButtonClick() {\r\n if (this.form.valid) {\r\n this.showValidationError = false;\r\n this.onSubmit.emit(this.form.value);\r\n } else {\r\n this.showValidationError = true;\r\n this.form.markAllAsTouched();\r\n }\r\n }\r\n\r\n onBackClick() {\r\n this.onBack.emit();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FvEntryFieldComponent } from './fv-entry-field/fv-entry-field.component';\r\nimport { FvDateFieldComponent } from './fv-date-field/fv-date-field.component';\r\nimport { FvMonthYearFieldComponent } from './fv-month-year-field/fv-month-year-field.component';\r\nimport { FvNumberFieldComponent } from './fv-number-field/fv-number-field.component';\r\nimport { FvCheckboxComponent } from './fv-checkbox/fv-checkbox.component';\r\nimport { FvRadioGroupComponent } from './fv-radio-group/fv-radio-group.component';\r\nimport { FvDropdownComponent } from './fv-dropdown/fv-dropdown.component';\r\nimport { FvFileSelectorComponent } from './fv-file-selector/fv-file-selector.component';\r\nimport { FvImageSelectorComponent } from './fv-image-selector/fv-image-selector.component';\r\nimport { FvRichTextEditorComponent } from './fv-rich-text-editor/fv-rich-text-editor.component';\r\nimport { FvNameCodeComponent } from './fv-name-code/fv-name-code.component';\r\nimport { AddUpdateFormComponent } from './add-update-form/add-update-form.component';\r\nimport { QueryFormComponent } from './query-form/query-form.component';\r\nimport { FvEmailFieldComponent } from './fv-email-field/fv-email-field.component';\r\nimport { FvPasswordFieldComponent } from './fv-password-field/fv-password-field.component';\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FvEntryFieldComponent,\r\n FvDateFieldComponent,\r\n FvMonthYearFieldComponent,\r\n FvNumberFieldComponent,\r\n FvCheckboxComponent,\r\n FvRadioGroupComponent,\r\n FvDropdownComponent,\r\n FvFileSelectorComponent,\r\n FvImageSelectorComponent,\r\n FvRichTextEditorComponent,\r\n FvNameCodeComponent,\r\n AddUpdateFormComponent,\r\n QueryFormComponent,\r\n FvEmailFieldComponent,\r\n FvPasswordFieldComponent,\r\n ],\r\n exports: [\r\n FvEntryFieldComponent,\r\n FvDateFieldComponent,\r\n FvMonthYearFieldComponent,\r\n FvNumberFieldComponent,\r\n FvCheckboxComponent,\r\n FvRadioGroupComponent,\r\n FvDropdownComponent,\r\n FvFileSelectorComponent,\r\n FvImageSelectorComponent,\r\n FvRichTextEditorComponent,\r\n FvNameCodeComponent,\r\n AddUpdateFormComponent,\r\n QueryFormComponent,\r\n FvEmailFieldComponent,\r\n FvPasswordFieldComponent,\r\n ],\r\n})\r\nexport class FvControlsModule { }\r\n","/*\r\n * Public API Surface of fv-controls\r\n */\r\n\r\nexport * from './lib/fv-controls.module';\r\nexport * from './lib/fv-entry-field/fv-entry-field.component';\r\nexport * from './lib/fv-date-field/fv-date-field.component';\r\nexport * from './lib/fv-month-year-field/fv-month-year-field.component';\r\nexport * from './lib/fv-number-field/fv-number-field.component';\r\nexport * from './lib/fv-checkbox/fv-checkbox.component';\r\nexport {\r\n FvRadioGroupComponent,\r\n type RadioOption,\r\n} from './lib/fv-radio-group/fv-radio-group.component';\r\nexport {\r\n FvDropdownComponent,\r\n type DropdownOption,\r\n} from './lib/fv-dropdown/fv-dropdown.component';\r\nexport {\r\n FvFileSelectorComponent,\r\n type FileInfo,\r\n} from './lib/fv-file-selector/fv-file-selector.component';\r\nexport {\r\n FvImageSelectorComponent,\r\n type ImageInfo,\r\n} from './lib/fv-image-selector/fv-image-selector.component';\r\nexport * from './lib/fv-rich-text-editor/fv-rich-text-editor.component';\r\nexport * from './lib/add-update-form/add-update-form.component';\r\nexport * from './lib/query-form/query-form.component';\r\nexport {\r\n FvNameCodeComponent,\r\n type SearchSelectOption\r\n} from './lib/fv-name-code/fv-name-code.component';\r\nexport * from './lib/fv-phone-field/fv-phone-field.component';\r\nexport * from './lib/fv-uan-field/fv-uan-field.component';\r\nexport * from './lib/fv-pf-field/fv-pf-field.component';\r\nexport * from './lib/fv-esi-field/fv-esi-field.component';\r\nexport * from './lib/fv-ifsc-field/fv-ifsc-field.component';\r\nexport * from './lib/fv-micr-field/fv-micr-field.component';\r\nexport * from './lib/fv-iban-field/fv-iban-field.component';\r\nexport * from './lib/fv-email-field/fv-email-field.component';\r\nexport * from './lib/fv-password-field/fv-password-field.component';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtH,MAAM,EAAE,MAAM,EAAE,MAAM;KACzB,CAAC;IACF,YAAY,GAAkB,IAAI,CAAC;AAC3B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,OAAO;SACV;;AAGD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC9D,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC1C;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;KACpC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC7C;SACJ;KACJ;AAED,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;;QAGxB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;;QAGlD,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAErD,QAAA,IAAI,KAAK,KAAK,cAAc,EAAE;AAC1B,YAAA,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;SACzC;KACJ;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;SACvD;aAAM;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAChC;KACJ;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC1C;KACJ;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACrB;IAED,UAAU,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC;KACjG;wGAnGQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,kOCblC,ohCAqBM,EAAA,MAAA,EAAA,CAAA,y+CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZQ,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,o+BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI/C,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;+BACI,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,ohCAAA,EAAA,MAAA,EAAA,CAAA,y+CAAA,CAAA,EAAA,CAAA;8BAKhD,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEPE,mBAAmB,CAAA;IACnB,KAAK,GAAW,YAAY,CAAC;AAC7B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,MAAM,CAAoB;AAEzB,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;AAC3B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KACjG;IAED,WAAW,GAAA,EAAK,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE;AAEnD,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC7C;SACJ;KACJ;AAED,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAErD,QAAA,IAAI,KAAK,KAAK,cAAc,EAAE;AAC1B,YAAA,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;SACzC;KACJ;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;;AACvF,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACrC;IAED,UAAU,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC;KACjG;wGAnDQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,ECbhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,weAQM,EDCQ,MAAA,EAAA,CAAA,yuBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIlC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,weAAA,EAAA,MAAA,EAAA,CAAA,yuBAAA,CAAA,EAAA,CAAA;8BAKnC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEPE,kBAAkB,CAAA;IAClB,KAAK,GAAW,WAAW,CAAC;AAC5B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,MAAM,CAAoB;AAEzB,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;AAC3B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO;SACV;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,MAAM,GAAG;AACV,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;AACpC,gBAAA,KAAK,EAAE;AACH,oBAAA;AACI,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,MAAM,EAAE;AACJ,4BAAA,OAAO,EAAE,gDAAgD;AAC5D,yBAAA;AACD,wBAAA,QAAQ,EAAE,gBAAgB;AAC7B,qBAAA;AACJ,iBAAA;aACJ,CAAC;SACL;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;;AAG9F,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC1C;KACJ;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC7C;SACJ;KACJ;IAED,WAAW,GAAA,EAAK,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE;AAEnD,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;;AAExB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAEpE,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACpC;KACJ;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;;AACvF,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACrC;AACD,IAAA,UAAU,GAAc,EAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;IAExH,eAAe,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,EAAE,CAAC;AAClC,QAAA,MAAM,aAAa,GAA2B;AAC1C,YAAA,YAAY,EAAE,uBAAuB;AACrC,YAAA,cAAc,EAAE,4DAA4D;AAC5E,YAAA,kBAAkB,EAAE,0BAA0B;SACjD,CAAC;QACF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;wGApFQ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,ECb/B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,okBASM,EDAQ,MAAA,EAAA,CAAA,yuBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIlC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,okBAAA,EAAA,MAAA,EAAA,CAAA,yuBAAA,CAAA,EAAA,CAAA;8BAKnC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEPE,mBAAmB,CAAA;IACnB,KAAK,GAAW,YAAY,CAAC;AAC7B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,MAAM,CAAoB;AAEzB,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;AAC3B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KACjG;IAED,WAAW,GAAA,EAAK,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE;AAEnD,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC7C;SACJ;KACJ;AAED,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACxB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAErD,QAAA,IAAI,KAAK,KAAK,cAAc,EAAE;AAC1B,YAAA,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;SACzC;KACJ;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;;AACvF,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACrC;AACD,IAAA,UAAU,GAAc,EAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;wGAhD/G,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,ECbhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,weAQM,EDCQ,MAAA,EAAA,CAAA,yuBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIlC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,weAAA,EAAA,MAAA,EAAA,CAAA,yuBAAA,CAAA,EAAA,CAAA;8BAKnC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEPE,oBAAoB,CAAA;IACpB,KAAK,GAAW,WAAW,CAAC;AAC5B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,MAAM,CAAoB;AAEzB,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;AAC3B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KACjG;IAED,WAAW,GAAA,EAAK,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE;AAEnD,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE7C,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACpC;KACJ;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;;AACvF,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACrC;AACD,IAAA,UAAU,GAAc,EAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;wGAtC/G,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,ECbjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6fAQM,EDCQ,MAAA,EAAA,CAAA,yuBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIlC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,6fAAA,EAAA,MAAA,EAAA,CAAA,yuBAAA,CAAA,EAAA,CAAA;8BAKnC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEPE,oBAAoB,CAAA;IACpB,KAAK,GAAW,WAAW,CAAC;AAC5B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,MAAM,CAAoB;AAEzB,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;AAC3B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KACjG;IAED,WAAW,GAAA,EAAK,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE;AAEnD,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACxB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEpD,QAAA,IAAI,KAAK,KAAK,cAAc,EAAE;AAC1B,YAAA,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;SACzC;KACJ;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;;AACvF,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACrC;AACD,IAAA,UAAU,GAAc,EAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;wGAtC/G,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,ECbjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ggBAQM,EDCQ,MAAA,EAAA,CAAA,8uBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIlC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,ggBAAA,EAAA,MAAA,EAAA,CAAA,8uBAAA,CAAA,EAAA,CAAA;8BAKnC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEPE,oBAAoB,CAAA;IACpB,KAAK,GAAW,aAAa,CAAC;AAC9B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,MAAM,CAAoB;AAEzB,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;AAC3B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KACjG;IAED,WAAW,GAAA,EAAK,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE;AAEnD,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC7C;SACJ;KACJ;AAED,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE7C,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACpC;KACJ;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;;AACvF,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACrC;AACD,IAAA,UAAU,GAAc,EAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;wGAhD/G,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,ECbjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,geAQM,EDCQ,MAAA,EAAA,CAAA,8uBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIlC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,geAAA,EAAA,MAAA,EAAA,CAAA,8uBAAA,CAAA,EAAA,CAAA;8BAKnC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEEE,qBAAqB,CAAA;IACrB,KAAK,GAAW,eAAe,CAAC;IAChC,WAAW,GAAW,uBAAuB,CAAC;AAC9C,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;AAEzB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AACzC,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;AAC3B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,OAAO;SACV;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,MAAM,GAAG;AACV,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;AACpC,gBAAA,KAAK,EAAE;AACH,oBAAA;AACI,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,MAAM,EAAE;AACJ,4BAAA,OAAO,EAAE,mDAAmD;AAC/D,yBAAA;AACD,wBAAA,QAAQ,EAAE,mBAAmB;AAChC,qBAAA;AACJ,iBAAA;aACJ,CAAC;SACL;;AAGD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC9D,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC1C;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;KACpC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC7C;SACJ;KACJ;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AAEzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEpC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;SACvD;aAAM;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAChC;KACJ;AAED,IAAA,MAAM,CAAC,KAAkB,EAAA;QACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC1C;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACpB;AAED,IAAA,OAAO,CAAC,KAAkB,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACrB;IAED,UAAU,GAAA;AACN,QAAA,QACI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CACpB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CACxD,IAAI,KAAK,EACZ;KACL;IAED,eAAe,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,EAAE,CAAC;AAElC,QAAA,MAAM,aAAa,GAA2B;AAC1C,YAAA,YAAY,EAAE,mBAAmB;AACjC,YAAA,iBAAiB,EAAE,sBAAsB;AACzC,YAAA,kBAAkB,EAAE,sBAAsB;SAC7C,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;wGA1GQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,ECtBlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8lCAqBM,EDJQ,MAAA,EAAA,CAAA,ijCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKlC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,YAClC,gBAAgB,EAAA,QAAA,EAAA,8lCAAA,EAAA,MAAA,EAAA,CAAA,ijCAAA,CAAA,EAAA,CAAA;8BAKjB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEVE,wBAAwB,CAAA;IACxB,KAAK,GAAW,UAAU,CAAC;IAC3B,WAAW,GAAW,UAAU,CAAC;AACjC,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;AAEzB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AACzC,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;IACnC,YAAY,GAAY,KAAK,CAAC;AACtB,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO;SACV;;AAGD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC9D,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC1C;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;KACpC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aAC7C;SACJ;KACJ;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AAEzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEpC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;SACvD;aAAM;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAChC;KACJ;IAED,gBAAgB,GAAA;QACZ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;KAC1C;AAED,IAAA,MAAM,CAAC,KAAkB,EAAA;QACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC1C;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACpB;AAED,IAAA,OAAO,CAAC,KAAkB,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACrB;IAED,UAAU,GAAA;AACN,QAAA,QACI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CACpB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CACxD,IAAI,KAAK,EACZ;KACL;IAED,eAAe,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,EAAE,CAAC;AAElC,QAAA,MAAM,aAAa,GAA2B;AAC1C,YAAA,YAAY,EAAE,sBAAsB;AACpC,YAAA,cAAc,EAAE,uBAAuB;AACvC,YAAA,kBAAkB,EAAE,yBAAyB;AAC7C,YAAA,sBAAsB,EAAE,wCAAwC;AAChE,YAAA,8BAA8B,EAAE,0BAA0B;AAC1D,YAAA,8BAA8B,EAAE,0BAA0B;AAC1D,YAAA,2BAA2B,EAAE,6BAA6B;AAC1D,YAAA,iCAAiC,EAAE,2BAA2B;SACjE,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;wGApGQ,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,ECtBrC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,swDA4BM,EDXQ,MAAA,EAAA,CAAA,8vDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKlC,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,YAClC,mBAAmB,EAAA,QAAA,EAAA,swDAAA,EAAA,MAAA,EAAA,CAAA,8vDAAA,CAAA,EAAA,CAAA;8BAKpB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;AEgDX;MA89Ba,sBAAsB,CAAA;AAavB,IAAA,EAAA,CAAA;AACA,IAAA,OAAA,CAAA;AAZD,IAAA,MAAM,CAAc;AACnB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAU,CAAC;AACvD,IAAA,IAAI,CAAa;IACjB,SAAS,GAAG,KAAK,CAAC;AACV,IAAA,YAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;AAC9C,IAAA,SAAS,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC3C,wBAAwB,GAAmB,EAAE,CAAC;AAC9C,IAAA,kBAAkB,GAAyB,IAAI,GAAG,EAAE,CAAC;AACrD,IAAA,aAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEvD,WACU,CAAA,EAAe,EACf,OAAgC,EAAA;QADhC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAO,CAAA,OAAA,GAAP,OAAO,CAAyB;KACrC;IAEL,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,eAAe,GAAA;;KAEd;AAED,IAAA,cAAc,CAAC,MAAkB,EAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAA,KAAA,EAAQ,CAAC,OAAO,GAAG,OAAO,IAAI,GAAG,CAAA,SAAA,CAAW,CAAC;KACrD;AAED,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC;KAC3C;;AAGD,IAAA,SAAS,CAAC,MAAkB,EAAA;QAC1B,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,MAAM,aAAa,GAAa,EAAE,CAAC;AAEnC,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE;YACtB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC/B,gBAAA,QAAQ,CAAC,CAAC,IAAI;AACZ,oBAAA,KAAK,UAAU;wBACb,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,UAAU;AAChB,4BAAA,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACzB,4BAAA,QAAQ,EAAE,cAAc;AACzB,yBAAA,CAAC,CAAC;AACH,wBAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC/B,MAAM;AACR,oBAAA,KAAK,OAAO;wBACV,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,OAAO;AACb,4BAAA,MAAM,EAAE;AACN,gCAAA,OAAO,EAAE,mDAAmD;AAC7D,6BAAA;AACD,4BAAA,QAAQ,EAAE,oBAAoB;AAC/B,yBAAA,CAAC,CAAC;AACH,wBAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC5B,MAAM;AACR,oBAAA,KAAK,WAAW;wBACd,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,WAAW;AACjB,4BAAA,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AAC1B,4BAAA,QAAQ,EAAE,gBAAgB;AAC3B,yBAAA,CAAC,CAAC;AACH,wBAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAChC,MAAM;AACR,oBAAA,KAAK,WAAW;wBACd,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,WAAW;AACjB,4BAAA,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AAC1B,4BAAA,QAAQ,EAAE,gBAAgB;AAC3B,yBAAA,CAAC,CAAC;AACH,wBAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAChC,MAAM;AACR,oBAAA,KAAK,SAAS;wBACZ,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,OAAO;AACb,4BAAA,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE;AAC5B,4BAAA,QAAQ,EAAE,oBAAoB;AAC/B,yBAAA,CAAC,CAAC;AACH,wBAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC5B,MAAM;AACR,oBAAA,KAAK,oBAAoB;wBACvB,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,oBAAoB;AAC1B,4BAAA,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI;AAClB,gCAAA,gBAAgB,EAAE,IAAI;AACtB,gCAAA,gBAAgB,EAAE,IAAI;AACtB,gCAAA,aAAa,EAAE,IAAI;AACnB,gCAAA,kBAAkB,EAAE,IAAI;AACxB,gCAAA,SAAS,EAAE,CAAC;AACb,6BAAA;AACD,4BAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,iCAAiC;AAC1D,yBAAA,CAAC,CAAC;AACH,wBAAA,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;wBACzC,MAAM;AACR,oBAAA,KAAK,KAAK;wBACR,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,KAAK;AACX,4BAAA,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AAC1B,4BAAA,QAAQ,EAAE,eAAe;AAC1B,yBAAA,CAAC,CAAC;AACH,wBAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC1B,MAAM;AACR,oBAAA,KAAK,KAAK;wBACR,KAAK,CAAC,IAAI,CAAC;AACT,4BAAA,IAAI,EAAE,KAAK;AACX,4BAAA,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AAC1B,4BAAA,QAAQ,EAAE,eAAe;AAC1B,yBAAA,CAAC,CAAC;AACH,wBAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC1B,MAAM;iBACT;AACH,aAAC,CAAC,CAAC;SACJ;;AAGD,QAAA,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;AAC/B,YAAA,WAAW,GAAG,QAAQ,CAAC;SACxB;QAED,OAAO;AACL,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,KAAK,EAAE,KAAK;SACb,CAAC;KACH;AAED,IAAA,YAAY,CAAC,MAAkB,EAAA;AAC7B,QAAA,QACE,MAAM,CAAC,IAAI,KAAK,MAAM;AACtB,aAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,EACnE;KACH;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,MAAM,eAAe,GAAQ,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACvC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAChC,gBAAA,IAAI,YAAY,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;;gBAGtC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,YAAY,EAAE;AAChD,oBAAA,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;iBACxD;AAED,gBAAA,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;oBAC7B,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK,EAAE;AAC3D,oBAAA,IAAI;iBACL,CAAC;;gBAGF,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE;AAC1C,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBAEjD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpD,IAAI,QAAQ,EAAE;wBACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;qBAC3C;iBACF;;AAGD;;AAEI;AACN,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACvC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAChC,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;AACtD,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,sBAAsB,EAAE,CAAC;iBACtD;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;;AAGH,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;qBACtC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,qBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;oBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACzC,oBAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;wBACpB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;qBACnC;AACH,iBAAC,CAAC,CAAC;AACL,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAClD;AACH,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;;AAET,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;KACpC;IAED,iBAAiB,CAAC,SAAiB,EAAE,UAAgB,EAAA;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;QAG7C,IAAI,MAAM,EAAE,IAAI,KAAK,YAAY,IAAI,UAAU,EAAE;YAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC7D,YAAA,IAAI,WAAW,IAAI,cAAc,KAAK,UAAU,EAAE;gBAChD,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3D,UAAU,GAAG,cAAc,CAAC;aAC7B;SACF;AAED,QAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;;;YAGpB,MAAM,WAAW,GACf,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;AAC1E,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC;;YAGnC,MAAM,aAAa,GAAG,WAAW,CAAC;;AAGlC,YAAA,IAAI,WAAW,IAAI,aAAa,KAAK,SAAS,EAAE;AAC9C,gBAAA,IAAI,WAAW,CAAC,KAAK,KAAK,aAAa,EAAE;oBACvC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;iBAC3D;aACF;;YAGD,IAAI,UAAU,EAAE;AACd,gBAAA,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;aACtC;;;;AAKD,YAAA,IACE,WAAW;AACX,gBAAA,aAAa,KAAK,SAAS;AAC3B,gBAAA,aAAa,KAAK,IAAI;gBACtB,aAAa,KAAK,EAAE,EACpB;;gBAEA,UAAU,CAAC,MAAK;;AAEd,oBAAA,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC;;;AAGvC,oBAAA,IAAI,YAAY,KAAK,aAAa,EAAE;wBAClC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;qBAC3D;iBACF,EAAE,CAAC,CAAC,CAAC;aACP;SACF;KACF;AAED,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK,CAAC;;AAEzB,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;AAChC,YAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,YAAA,OAAO,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;SAC3B;;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK,CAAC;;AAEzB,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;AAChC,YAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,YAAA,OAAO,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;SAC3B;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,qBAAqB,CAAC,SAAiB,EAAE,KAAa,EAAA;;QAEpD,IAAI,cAAc,GAAG,KAAK,CAAC;;AAG3B,QAAA,IAAI,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;AACzC,YAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChD,YAAA,cAAc,GAAG,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;SACrC;;AAEI,aAAA,IAAI,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACxC,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,YAAA,cAAc,GAAG,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;SACrC;;AAEI,aAAA,IAAI,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;;SAE/C;;AAEI,aAAA,IAAI,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;;SAE3C;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAA,IAAI,WAAW,IAAI,cAAc,KAAK,KAAK,EAAE;YAC3C,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;SAC5D;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;KACnD;AAED,IAAA,mBAAmB,CAAC,SAAiB,EAAA;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,WAAW;YAAE,OAAO;AAEzB,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;;QAEtC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;;YAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACnD,YAAA,IAAI,SAAS,KAAK,KAAK,EAAE;gBACvB,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aACvD;SACF;KACF;IAED,2BAA2B,CAAC,SAAiB,EAAE,KAAa,EAAA;;QAE1D,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,WAAW,EAAE;YACf,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;SACnD;KACF;AAED,IAAA,uBAAuB,CAAC,SAAiB,EAAA;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,EAAE,CAAC;AAC5B,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;;AAEtC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACxC;AAED,IAAA,eAAe,CAAC,SAAiB,EAAA;QAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CACxC,SAAS,GAAG,SAAS,CACF,CAAC;QACtB,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;;YAE7C,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAC7D,IAAI,YAAY,EAAE;AAChB,gBAAA,UAAU,CAAC,KAAK,GAAG,YAAY,CAAC;aACjC;;AAED,YAAA,IAAI,UAAU,CAAC,UAAU,EAAE;gBACzB,UAAU,CAAC,UAAU,EAAE,CAAC;aACzB;iBAAM;gBACL,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,UAAU,CAAC,KAAK,EAAE,CAAC;aACpB;SACF;KACF;AAED,IAAA,eAAe,CAAC,IAAY,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;aACxB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACxB,aAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;KACjC;AAED,IAAA,aAAa,CAAC,MAAoB,EAAA;AAChC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;KAChD;AAED,IAAA,gBAAgB,CAAC,MAAoB,EAAA;AACnC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;KAChD;AAED,IAAA,wBAAwB,CAAC,SAAiB,EAAA;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;QAChE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;KAClD;AACD,IAAA,qBAAqB,CAAC,MAAkB,EAAA;AACtC,QAAA,OAAO,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,KAAK,CAAC;KACxE;AAED,IAAA,iBAAiB,CAAC,SAAiB,EAAA;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;KACxD;IAED,eAAe,CACb,WAA+B,EAC/B,SAAqB,EAAA;AAErB,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,EAAE,CAAC;QAE5B,MAAM,UAAU,GAAU,EAAE,CAAC;AAC7B,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACjC,YAAA,QAAQ,UAAU,CAAC,IAAI;AACrB,gBAAA,KAAK,UAAU;AACb,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACrC,MAAM;AACR,gBAAA,KAAK,OAAO;AACV,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClC,MAAM;AACR,gBAAA,KAAK,WAAW;AACd,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxD,MAAM;AACR,gBAAA,KAAK,WAAW;AACd,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxD,MAAM;AACR,gBAAA,KAAK,KAAK;AACR,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAClD,MAAM;AACR,gBAAA,KAAK,KAAK;AACR,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAClD,MAAM;AACR,gBAAA,KAAK,SAAS;AACZ,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtD,MAAM;AACR,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,UAAU,CAAC,SAAS,EAAE;AACxB,wBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,OAAwB,KAAI;AAC3C,4BAAA,MAAM,OAAO,GAAG,UAAU,CAAC,SAAU,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChE,4BAAA,OAAO,OAAO,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC3C,yBAAC,CAAC,CAAC;qBACJ;oBACD,MAAM;aACT;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,UAAU,CAAC;KACnB;AAED,IAAA,iBAAiB,CAAC,SAAiB,EAAA;QACjC,QAAQ,CAAC,cAAc,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAC5D;AAED,IAAA,cAAc,CAAC,SAAiB,EAAA;QAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAqB,CAAC;QACzE,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;;AAE1C,YAAA,IAAI,SAAS,CAAC,UAAU,EAAE;gBACxB,SAAS,CAAC,UAAU,EAAE,CAAC;aACxB;iBAAM;gBACL,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,SAAS,CAAC,KAAK,EAAE,CAAC;aACnB;SACF;KACF;IAED,YAAY,CAAC,KAAU,EAAE,SAAiB,EAAA;QACxC,MAAM,IAAI,GAAS,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,gBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAgB,CAAC;gBAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;;gBAGjD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AAC/C,gBAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;oBACpB,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC1C;AACH,aAAC,CAAC;SACH;KACF;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,CAAC;;AAGtB,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAChC;;AAGD,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,CAAY,UAAA,CAAA,CAAC,EAAE;AAClC,YAAA,OAAO,oBAAoB,CAAC;SAC7B;AAED,QAAA,OAAO,oBAAoB,CAAC;KAC7B;AAED,IAAA,cAAc,CAAC,SAAiB,EAAA;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;KACjD;AAED,IAAA,WAAW,CAAC,SAAiB,EAAA;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;KAC9C;AAED,IAAA,gBAAgB,CAAC,OAAc,EAAA;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;AACzB,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK;YAC3B,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK;YACxC,KAAK,EAAE,GAAG,CAAC,KAAK;AACjB,SAAA,CAAC,CAAC,CAAC;KACL;AAGD,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;;QAGvC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AAC/C,QAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;YACpB,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAChC;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;AAErB,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC;AACtC,aAAC,CAAC,CAAC;;AAGH,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,YAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CACjE,CAAC,GAAG,KAAI;gBACN,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,CAAC,OAAO,EAAE,OAAO;AAAE,oBAAA,OAAO,KAAK,CAAC;;AAGpC,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACtD,QACE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,KAAK,EAChE;aACH,CACF,CAAC,MAAM,CAAC;;AAGT,YAAA,IAAI,oBAAoB,GAAG,CAAC,EAAE;gBAC5B,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,CAAkD,+CAAA,EAAA,oBAAoB,CAA2B,yBAAA,CAAA,CAClG,CAAC;aACH;YACD,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAChC;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SACvB;KACF;AAED,IAAA,cAAc,CAAC,SAAiB,EAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvC,QAAA,OAAO,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;KACrD;AAED,IAAA,eAAe,CAAC,SAAiB,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC;;AAG9B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;;AAE5D,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AAC1B,YAAA,MAAM,gBAAgB,GAAG,MAAM,EAAE,WAAW,EAAE,IAAI,CAChD,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAC3B,CAAC;AACF,YAAA,OAAO,gBAAgB,EAAE,OAAO,IAAI,eAAe,CAAC;SACrD;;QAGD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AAC3B,YAAA,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AACpE,YAAA,IAAI,UAAU,EAAE,OAAO,EAAE;gBACvB,OAAO,UAAU,CAAC,OAAO,CAAC;aAC3B;SACF;;AAED,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AAC5B,YAAA,OAAO,CAAG,EAAA,MAAM,EAAE,KAAK,cAAc,CAAC;SACvC;AACD,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,sBAAsB,CAAC;AACzD,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;YAC3B,OAAO,CAAA,kBAAA,EAAqB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,CAAA,CAAE,CAAC;AACzE,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;YAC3B,OAAO,CAAA,kBAAA,EAAqB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,CAAA,CAAE,CAAC;AACzE,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;YACrB,OAAO,CAAA,iBAAA,EAAoB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAA,CAAE,CAAC;AACvD,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;YACrB,OAAO,CAAA,iBAAA,EAAoB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAA,CAAE,CAAC;AACvD,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,gBAAgB,CAAC;AACrD,QAAA,OAAO,eAAe,CAAC;KACxB;wGApmBU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAr5BvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyPT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2xSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhRC,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,qbACnB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,EACtB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,iLACnB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,mBAAmB,EACnB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,mLACpB,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,uBAAuB,EACvB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,sNACzB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EACrB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,yIACnB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EACnB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,0IACpB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,oBAAoB,EACpB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,qLACrB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAu5Bf,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAh7BlC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,qBAAqB;wBACrB,sBAAsB;wBACtB,mBAAmB;wBACnB,qBAAqB;wBACrB,mBAAmB;wBACnB,oBAAoB;wBACpB,yBAAyB;wBACzB,uBAAuB;wBACvB,wBAAwB;wBACxB,yBAAyB;wBACzB,mBAAmB;wBACnB,qBAAqB;wBACrB,mBAAmB;wBACnB,kBAAkB;wBAClB,mBAAmB;wBACnB,oBAAoB;wBACpB,oBAAoB;wBACpB,oBAAoB;wBACpB,qBAAqB;wBACrB,wBAAwB;qBACzB,EACS,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyPT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2xSAAA,CAAA,EAAA,CAAA;yGA8pBQ,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;MCrjBI,kBAAkB,CAAA;AAWT,IAAA,EAAA,CAAA;AAVX,IAAA,MAAM,CAAmB;AACxB,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAO,CAAC;AACnC,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;AACtC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;AAE5C,IAAA,IAAI,CAAa;IACjB,cAAc,GAAG,KAAK,CAAC;IACvB,mBAAmB,GAAG,KAAK,CAAC;IACpB,IAAI,GAAmB,EAAE,CAAC;AAElC,IAAA,WAAA,CAAoB,EAAe,EAAA;QAAf,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;KAAK;IAExC,QAAQ,GAAA;QACN,MAAM,KAAK,GAAQ,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBAC/B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;oBAC1B,MAAM,UAAU,GAAU,EAAE,CAAC;AAC7B,oBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,wBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;qBACtC;oBACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAC9B,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK,EAAE,EAC9C,UAAU,CACX,CAAC;AACJ,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;AAGjC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBAC/B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC1B,oBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;;;;;;qBAMjB;AACH,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;SACJ,CAAC,CACH,CAAC;;QAGF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC/B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC1B,gBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,OAAO,EAAE;AACX,wBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAG;AAClD,4BAAA,GAAG,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC;yBACpB,CAAC,CAAC,CAAC;qBACL;iBACF;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KAEJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;KAC3C;AAED,IAAA,UAAU,CAAC,GAAW,EAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAgB,CAAC;KAC1C;AAED,IAAA,SAAS,CAAC,MAAuB,EAAA;;QAE/B,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;AACtF,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAChC;AAED,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YAC3B,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE,mDAAmD;AAC7D,iBAAA;AACD,gBAAA,QAAQ,EAAE,mBAAmB;AAC9B,aAAA,CAAC,CAAC;AACH,YAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC7B;AAED,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE,gDAAgD;AAC1D,iBAAA;AACD,gBAAA,QAAQ,EAAE,gBAAgB;AAC3B,aAAA,CAAC,CAAC;AACH,YAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC7B;AAED,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;YAC9B,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,MAAM,EAAE;AACN,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,gBAAgB,EAAE,IAAI;AACtB,oBAAA,gBAAgB,EAAE,IAAI;AACtB,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,kBAAkB,EAAE,IAAI;AACzB,iBAAA;AACF,aAAA,CAAC,CAAC;AACH,YAAA,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;SAC1C;QAED,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AACtC,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,aAAa,EAAE,aAAa;SAC7B,CAAC;KACH;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;QAClB,QAAQ,IAAI;AACV,YAAA,KAAK,MAAM,EAAE,OAAO,YAAY,CAAC;AACjC,YAAA,KAAK,QAAQ,EAAE,OAAO,aAAa,CAAC;AACpC,YAAA,KAAK,MAAM,EAAE,OAAO,WAAW,CAAC;AAChC,YAAA,KAAK,UAAU,EAAE,OAAO,UAAU,CAAC;AACnC,YAAA,KAAK,OAAO,EAAE,OAAO,gBAAgB,CAAC;AACtC,YAAA,KAAK,MAAM,EAAE,OAAO,cAAc,CAAC;AACnC,YAAA,KAAK,WAAW,EAAE,OAAO,UAAU,CAAC;AACpC,YAAA,KAAK,OAAO,EAAE,OAAO,YAAY,CAAC;AAClC,YAAA,KAAK,KAAK,EAAE,OAAO,UAAU,CAAC;AAC9B,YAAA,KAAK,IAAI,EAAE,OAAO,SAAS,CAAC;AAC5B,YAAA,KAAK,KAAK,EAAE,OAAO,UAAU,CAAC;AAC9B,YAAA,KAAK,MAAM,EAAE,OAAO,WAAW,CAAC;AAChC,YAAA,KAAK,MAAM,EAAE,OAAO,WAAW,CAAC;AAChC,YAAA,KAAK,MAAM,EAAE,OAAO,WAAW,CAAC;AAChC,YAAA,KAAK,OAAO,EAAE,OAAO,YAAY,CAAC;AAClC,YAAA,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC;AACxC,YAAA,SAAS,OAAO,YAAY,CAAC;SAC9B;KACF;AAED,IAAA,gBAAgB,CAAC,OAAc,EAAA;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;AACzB,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK;YAC3B,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK;YACxC,KAAK,EAAE,GAAG,CAAC,KAAK;AACjB,SAAA,CAAC,CAAC,CAAC;KACL;AAED,IAAA,iBAAiB,CAAC,SAAiB,EAAA;;KAElC;AAED,IAAA,gBAAgB,CAAC,KAAY,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;KAC5C;AAGD,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;SAC7B;KACF;AAED,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrC;aAAM;AACL,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC9B;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACpB;wGA5LU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAranB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k1FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1NC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EACrB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,4MACtB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,uBAAuB,EACvB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,wIAClB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,oBAAoB,EACpB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,qLACrB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAuaf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA5b9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,qBAAqB;wBACrB,mBAAmB;wBACnB,sBAAsB;wBACtB,oBAAoB;wBACpB,yBAAyB;wBACzB,uBAAuB;wBACvB,mBAAmB;wBACnB,qBAAqB;wBACrB,mBAAmB;wBACnB,kBAAkB;wBAClB,mBAAmB;wBACnB,oBAAoB;wBACpB,oBAAoB;wBACpB,oBAAoB;wBACpB,qBAAqB;wBACrB,wBAAwB;qBACzB,EACS,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuMT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,k1FAAA,CAAA,EAAA,CAAA;gFA+NQ,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBACG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBACG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAiKP,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MCvmB/B,gBAAgB,CAAA;wGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YApCzB,YAAY;YACZ,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,yBAAyB;YACzB,sBAAsB;YACtB,mBAAmB;YACnB,qBAAqB;YACrB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;YACxB,yBAAyB;YACzB,mBAAmB;YACnB,sBAAsB;YACtB,kBAAkB;YAClB,qBAAqB;AACrB,YAAA,wBAAwB,aAGxB,qBAAqB;YACrB,oBAAoB;YACpB,yBAAyB;YACzB,sBAAsB;YACtB,mBAAmB;YACnB,qBAAqB;YACrB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;YACxB,yBAAyB;YACzB,mBAAmB;YACnB,sBAAsB;YACtB,kBAAkB;YAClB,qBAAqB;YACrB,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAGf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YApCzB,YAAY;YACZ,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,yBAAyB;YACzB,sBAAsB;YACtB,mBAAmB;YACnB,qBAAqB;YACrB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;YACxB,yBAAyB;YACzB,mBAAmB;YACnB,sBAAsB;YACtB,kBAAkB;YAClB,qBAAqB;YACrB,wBAAwB,CAAA,EAAA,CAAA,CAAA;;4FAoBf,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAvC5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,qBAAqB;wBACrB,oBAAoB;wBACpB,yBAAyB;wBACzB,sBAAsB;wBACtB,mBAAmB;wBACnB,qBAAqB;wBACrB,mBAAmB;wBACnB,uBAAuB;wBACvB,wBAAwB;wBACxB,yBAAyB;wBACzB,mBAAmB;wBACnB,sBAAsB;wBACtB,kBAAkB;wBAClB,qBAAqB;wBACrB,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,qBAAqB;wBACrB,oBAAoB;wBACpB,yBAAyB;wBACzB,sBAAsB;wBACtB,mBAAmB;wBACnB,qBAAqB;wBACrB,mBAAmB;wBACnB,uBAAuB;wBACvB,wBAAwB;wBACxB,yBAAyB;wBACzB,mBAAmB;wBACnB,sBAAsB;wBACtB,kBAAkB;wBAClB,qBAAqB;wBACrB,wBAAwB;AACzB,qBAAA;AACF,iBAAA,CAAA;;;ACxDD;;AAEG;;ACFH;;AAEG;;;;"}
|