@fovestta2/web-angular 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/fovestta2-web-angular.mjs +5 -0
- package/esm2022/lib/fv-checkbox/fv-checkbox.component.mjs +40 -0
- package/esm2022/lib/fv-controls.module.mjs +83 -0
- package/esm2022/lib/fv-date-field/fv-date-field.component.mjs +125 -0
- package/esm2022/lib/fv-dropdown/fv-dropdown.component.mjs +121 -0
- package/esm2022/lib/fv-entry-field/fv-entry-field.component.mjs +106 -0
- package/esm2022/lib/fv-file-selector/fv-file-selector.component.mjs +139 -0
- package/esm2022/lib/fv-image-selector/fv-image-selector.component.mjs +156 -0
- package/esm2022/lib/fv-month-year-field/fv-month-year-field.component.mjs +120 -0
- package/esm2022/lib/fv-number-field/fv-number-field.component.mjs +108 -0
- package/esm2022/lib/fv-radio-group/fv-radio-group.component.mjs +47 -0
- package/esm2022/lib/fv-rich-text-editor/fv-rich-text-editor.component.mjs +163 -0
- package/esm2022/public-api.mjs +15 -0
- package/fesm2022/fovestta2-web-angular.mjs +1149 -0
- package/fesm2022/fovestta2-web-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/fv-checkbox/fv-checkbox.component.d.ts +14 -0
- package/lib/fv-controls.module.d.ts +18 -0
- package/lib/fv-date-field/fv-date-field.component.d.ts +29 -0
- package/lib/fv-dropdown/fv-dropdown.component.d.ts +34 -0
- package/lib/fv-entry-field/fv-entry-field.component.d.ts +27 -0
- package/lib/fv-file-selector/fv-file-selector.component.d.ts +36 -0
- package/lib/fv-image-selector/fv-image-selector.component.d.ts +39 -0
- package/lib/fv-month-year-field/fv-month-year-field.component.d.ts +29 -0
- package/lib/fv-number-field/fv-number-field.component.d.ts +29 -0
- package/lib/fv-radio-group/fv-radio-group.component.d.ts +22 -0
- package/lib/fv-rich-text-editor/fv-rich-text-editor.component.d.ts +36 -0
- package/package.json +28 -0
- package/public-api.d.ts +11 -0
|
@@ -0,0 +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-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 { 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 {\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\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 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 // 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\" [disabled]=\"disabled\" [readonly]=\"readonly\"\r\n (blur)=\"onBlur($event)\" (focus)=\"onFocus($event)\" 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 {\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 { 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 {\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 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} 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 {\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 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.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 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","<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=\"month\" [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 EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\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 {\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 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\" [disabled]=\"disabled\" [readonly]=\"readonly\"\r\n [min]=\"min\" [max]=\"max\" [step]=\"step\" (blur)=\"onBlur()\" (focus)=\"onFocus()\" class=\"fv-input\"\r\n [class.fv-input-error]=\"errorMessage\" [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 } 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 {\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 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 } 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 {\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 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} 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 styleUrl: './fv-dropdown.component.css',\r\n})\r\nexport class FvDropdownComponent implements OnInit, OnDestroy {\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 errorMessage: string | null = null;\r\n isOpen: boolean = false;\r\n private subscription?: Subscription;\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 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 });\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 toggleDropdown(): void {\r\n if (!this.disabled) {\r\n this.isOpen = !this.isOpen;\r\n if (this.isOpen) {\r\n this.focus.emit();\r\n }\r\n }\r\n }\r\n\r\n selectOption(option: DropdownOption): void {\r\n this.control.setValue(option.value);\r\n this.isOpen = false;\r\n this.blur.emit();\r\n }\r\n\r\n onBlur(): void {\r\n // Close dropdown after a small delay to allow click events to fire\r\n setTimeout(() => {\r\n this.isOpen = false;\r\n if (this.control && this.schema) {\r\n this.validateValue(this.control.value);\r\n }\r\n this.blur.emit();\r\n }, 200);\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)=\"toggleDropdown()\" (blur)=\"onBlur()\" tabindex=\"0\">\r\n <span class=\"fv-dropdown-selected\" [class.fv-dropdown-placeholder]=\"!control.value\">\r\n {{ getSelectedLabel() }}\r\n </span>\r\n <span class=\"fv-dropdown-arrow\" [class.arrow-up]=\"isOpen\">▼</span>\r\n </div>\r\n\r\n <div *ngIf=\"isOpen\" class=\"fv-dropdown-options\">\r\n <div *ngFor=\"let option of options\" class=\"fv-dropdown-option\"\r\n [class.fv-dropdown-option-selected]=\"isSelected(option)\" (click)=\"selectOption(option)\">\r\n {{ option.label }}\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} 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 {\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 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 '@fovestta/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 { 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\n\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 ],\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 ],\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 { FvRadioGroupComponent, type RadioOption } from './lib/fv-radio-group/fv-radio-group.component';\r\nexport { FvDropdownComponent, type DropdownOption } from './lib/fv-dropdown/fv-dropdown.component';\r\nexport { FvFileSelectorComponent, type FileInfo } from './lib/fv-file-selector/fv-file-selector.component';\r\nexport { FvImageSelectorComponent, type ImageInfo } from './lib/fv-image-selector/fv-image-selector.component';\r\nexport * from './lib/fv-rich-text-editor/fv-rich-text-editor.component';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","Validator"],"mappings":";;;;;;;;;;MAoBa,qBAAqB,CAAA;IACvB,KAAK,GAAW,EAAE,CAAC;IACnB,WAAW,GAAW,EAAE,CAAC;AACzB,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;IAC1B,IAAI,GAAkC,MAAM,CAAC;AAE5C,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;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,OAAO;SACR;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,CAAC,IAAI,CACV,kEAAkE,CACnE,CAAC;YACF,OAAO;SACR;;AAGD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAChE,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACxC;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;KAClC;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;QAC9B,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;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;SACrD;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC9B;KACF;AAED,IAAA,MAAM,CAAC,KAAkB,EAAA;QACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACxC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAClB;AAED,IAAA,OAAO,CAAC,KAAkB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACnB;IAED,UAAU,GAAA;AACR,QAAA,QACE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CACtB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CACtD,IAAI,KAAK,EACV;KACH;IAED,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,EAAE,CAAC;;AAGlC,QAAA,MAAM,aAAa,GAA2B;AAC5C,YAAA,YAAY,EAAE,wBAAwB;AACtC,YAAA,cAAc,EAAE,oBAAoB;AACpC,YAAA,cAAc,EAAE,mBAAmB;AACnC,YAAA,kBAAkB,EAAE,gBAAgB;SACrC,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAC9D;wGAzFU,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,ECpBlC,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,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2pBAaM,EDEM,MAAA,EAAA,CAAA,oyCAAA,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;;4FAKhC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,YAClC,gBAAgB,EAAA,QAAA,EAAA,2pBAAA,EAAA,MAAA,EAAA,CAAA,oyCAAA,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;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEXI,oBAAoB,CAAA;IACpB,KAAK,GAAW,EAAE,CAAC;AACnB,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;;AAG1B,IAAA,GAAG,CAAU;AACb,IAAA,GAAG,CAAU;AAEZ,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,kCAAkC,CAAC,CAAC;YAClD,OAAO;SACV;;QAGD,IAAI,CAAC,4BAA4B,EAAE,CAAC;;AAGpC,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;IAEO,4BAA4B,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK;YAAE,OAAO;QAEhC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACtC,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;aACtD;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACtC,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;aACtD;;;SAGJ;KACJ;AAEO,IAAA,UAAU,CAAC,IAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE,CAAC;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AAClC,QAAA,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;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,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,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,kBAAkB;AAChC,YAAA,YAAY,EAAE,CAAA,mBAAA,EAAsB,IAAI,CAAC,GAAG,CAAE,CAAA;AAC9C,YAAA,YAAY,EAAE,CAAA,oBAAA,EAAuB,IAAI,CAAC,GAAG,CAAE,CAAA;AAC/C,YAAA,WAAW,EAAE,qCAAqC;AAClD,YAAA,WAAW,EAAE,mCAAmC;SACnD,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;wGA3GQ,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,ECpBjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8gBAWM,EDIQ,MAAA,EAAA,CAAA,olBAAA,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,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,YAClC,eAAe,EAAA,QAAA,EAAA,8gBAAA,EAAA,MAAA,EAAA,CAAA,olBAAA,CAAA,EAAA,CAAA;8BAKhB,KAAK,EAAA,CAAA;sBAAb,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;gBAGG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEbE,yBAAyB,CAAA;IACzB,KAAK,GAAW,EAAE,CAAC;AACnB,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;IAE1B,GAAG,CAAU;IACb,GAAG,CAAU;AAEZ,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,uCAAuC,CAAC,CAAC;YACvD,OAAO;SACV;QAED,IAAI,CAAC,4BAA4B,EAAE,CAAC;AAEpC,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;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;IAEO,4BAA4B,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK;YAAE,OAAO;QAEhC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACtC,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;aACvD;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACtC,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;aACvD;SACJ;KACJ;AAEO,IAAA,WAAW,CAAC,IAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE,CAAC;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AAClC,QAAA,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACtC;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;;;;AAKzB,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,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,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,wBAAwB;AACtC,YAAA,YAAY,EAAE,CAAA,mBAAA,EAAsB,IAAI,CAAC,GAAG,CAAE,CAAA;AAC9C,YAAA,YAAY,EAAE,CAAA,oBAAA,EAAuB,IAAI,CAAC,GAAG,CAAE,CAAA;SAClD,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;wGAtGQ,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,ECpBtC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qiBAWM,EDIQ,MAAA,EAAA,CAAA,olBAAA,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,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,YAClC,qBAAqB,EAAA,QAAA,EAAA,qiBAAA,EAAA,MAAA,EAAA,CAAA,olBAAA,CAAA,EAAA,CAAA;8BAKtB,KAAK,EAAA,CAAA;sBAAb,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;gBAEG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEZE,sBAAsB,CAAA;IACxB,KAAK,GAAW,EAAE,CAAC;IACnB,WAAW,GAAW,EAAE,CAAC;AACzB,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,GAAG,CAAO;AACV,IAAA,GAAG,CAAO;IACV,IAAI,GAAW,CAAC,CAAC;AAEhB,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;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,OAAO;SACR;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACtD,OAAO;SACR;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAChE,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACxC;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;KAClC;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;QAC9B,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;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;SACrD;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC9B;KACF;IAED,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACxC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAClB;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACnB;IAED,UAAU,GAAA;AACR,QAAA,QACE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CACtB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CACtD,IAAI,KAAK,EACV;KACH;IAED,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,EAAE,CAAC;AAElC,QAAA,MAAM,aAAa,GAA2B;AAC5C,YAAA,YAAY,EAAE,wBAAwB;AACtC,YAAA,mBAAmB,EAAE,6BAA6B;AAClD,YAAA,iBAAiB,EAAE,wBAAwB;SAC5C,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAC9D;wGArFU,sBAAsB,EAAA,IAAA,EAAA,EAAA,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,ECpBnC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,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,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ipBAaM,EDGM,MAAA,EAAA,CAAA,s3CAAA,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,mBAAA,EAAA,QAAA,EAAA,iGAAA,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,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,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;;4FAIhC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,ipBAAA,EAAA,MAAA,EAAA,CAAA,s3CAAA,CAAA,EAAA,CAAA;8BAKnC,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;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEtBI,mBAAmB,CAAA;IACrB,KAAK,GAAW,EAAE,CAAC;AACnB,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;AAEzB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAW,CAAC;IAEpD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;SAClD;KACF;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO,CAAC;AAC3D,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAChC;wGAlBU,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,ECXhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ycAUM,EDHM,MAAA,EAAA,CAAA,yvCAAA,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,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIhC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,ycAAA,EAAA,MAAA,EAAA,CAAA,yvCAAA,CAAA,EAAA,CAAA;8BAKnC,KAAK,EAAA,CAAA;sBAAb,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;;;MEAI,qBAAqB,CAAA;IACvB,KAAK,GAAW,EAAE,CAAC;AACnB,IAAA,OAAO,CAAe;IACtB,OAAO,GAAkB,EAAE,CAAC;IAC5B,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,IAAI,GAAW,CAAY,SAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAEpE,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;IAEhD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACpD;KACF;AAED,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;AAED,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;KACrC;wGAvBU,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,ECjBlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,61BAwBM,EDXM,MAAA,EAAA,CAAA,61CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIhC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,61BAAA,EAAA,MAAA,EAAA,CAAA,61CAAA,CAAA,EAAA,CAAA;8BAKnC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEAI,mBAAmB,CAAA;IACnB,KAAK,GAAW,EAAE,CAAC;IACnB,WAAW,GAAW,kBAAkB,CAAC;IACzC,OAAO,GAAqB,EAAE,CAAC;AAC/B,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;AAEzB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAmB,CAAC;AAClD,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;IACnC,MAAM,GAAY,KAAK,CAAC;AAChB,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO;SACV;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACR,gEAAgE,CACnE,CAAC;YACF,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;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,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aACrB;SACJ;KACJ;AAED,IAAA,YAAY,CAAC,MAAsB,EAAA;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACpB;IAED,MAAM,GAAA;;QAEF,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC1C;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACpB,EAAE,GAAG,CAAC,CAAC;KACX;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,wBAAwB;AACtC,YAAA,iBAAiB,EAAE,mBAAmB;SACzC,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;IAED,gBAAgB,GAAA;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAC9B,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,CAC7C,CAAC;AACF,QAAA,OAAO,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;KACvD;AAED,IAAA,UAAU,CAAC,MAAsB,EAAA;QAC7B,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;KAC/C;wGAhHQ,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,ECzBhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4vCA0BM,EDNQ,MAAA,EAAA,CAAA,4mDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKlC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,YAClC,aAAa,EAAA,QAAA,EAAA,4vCAAA,EAAA,MAAA,EAAA,CAAA,4mDAAA,CAAA,EAAA,CAAA;8BAKd,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,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;;;MENE,uBAAuB,CAAA;IACvB,KAAK,GAAW,EAAE,CAAC;IACnB,WAAW,GAAW,eAAe,CAAC;AACtC,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;AAC1B,IAAA,MAAM,GAAW,KAAK,CAAC;IACvB,OAAO,CAAU;AAEhB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAmB,CAAC;AAClD,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAElB,IAAA,SAAS,CAAgC;IAEjE,YAAY,GAAkB,IAAI,CAAC;IACnC,YAAY,GAAoB,IAAI,CAAC;AAC7B,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO;SACV;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACR,oEAAoE,CACvE,CAAC;YACF,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,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACvC,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;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,cAAc,CAAC,KAAY,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAG5B,YAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C,gBAAA,KAAK,CACD,CAAA,8CAAA,EAAiD,IAAI,CAAC,cAAc,CAChE,IAAI,CAAC,OAAO,CACf,CAAE,CAAA,CACN,CAAC;;AAEF,gBAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjB,OAAO;aACV;AAED,YAAA,MAAM,QAAQ,GAAa;AACvB,gBAAA,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;AAEF,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACpB;KACJ;IAED,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACxC;KACJ;IAED,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;SAC3C;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACpB;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;QACxB,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KAC5E;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,wBAAwB;AACtC,YAAA,gBAAgB,EAAE,cAAc;SACnC,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;wGAnIQ,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EC7BpC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ouCA0BM,EDFQ,MAAA,EAAA,CAAA,g8CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKlC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,YAClC,kBAAkB,EAAA,QAAA,EAAA,ouCAAA,EAAA,MAAA,EAAA,CAAA,g8CAAA,CAAA,EAAA,CAAA;8BAKnB,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,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBAEiB,SAAS,EAAA,CAAA;sBAAhC,SAAS;uBAAC,WAAW,CAAA;;;MEVb,wBAAwB,CAAA;AAiBb,IAAA,SAAA,CAAA;IAhBX,KAAK,GAAW,EAAE,CAAC;IACnB,WAAW,GAAW,iBAAiB,CAAC;AACxC,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,OAAO,CAAU;AAEhB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAoB,CAAC;AACnD,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEjB,IAAA,UAAU,CAAgC;IAEnE,YAAY,GAAkB,IAAI,CAAC;IACnC,aAAa,GAAqB,IAAI,CAAC;AAC/B,IAAA,YAAY,CAAgB;AAEpC,IAAA,WAAA,CAAoB,SAAuB,EAAA;QAAvB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;KAAK;IAEhD,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO;SACV;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACR,qEAAqE,CACxE,CAAC;YACF,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,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACxC,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;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,eAAe,CAAC,KAAY,EAAA;AACxB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;YAG5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBACjC,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACrC,gBAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjB,OAAO;aACV;;AAGD,YAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C,gBAAA,KAAK,CACD,CAAA,+CAAA,EAAkD,IAAI,CAAC,cAAc,CACjE,IAAI,CAAC,OAAO,CACf,CAAE,CAAA,CACN,CAAC;AACF,gBAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjB,OAAO;aACV;;AAGD,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,YAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAM,KAAI;AACvB,gBAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AACxB,gBAAA,GAAG,CAAC,MAAM,GAAG,MAAK;AACd,oBAAA,MAAM,SAAS,GAAc;AACzB,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;wBAC3D,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;qBAClB,CAAC;AAEF,oBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjC,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,iBAAC,CAAC;gBACF,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,aAAC,CAAC;AACF,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC9B;KACJ;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACzC;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;SAC5C;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACpB;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;QACxB,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KAC5E;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,wBAAwB;AACtC,YAAA,iBAAiB,EAAE,eAAe;SACrC,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;wGApJQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,CAAA,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,EC/BrC,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,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qwDAoCM,EDVQ,MAAA,EAAA,CAAA,wwDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,mBAAmB,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,qwDAAA,EAAA,MAAA,EAAA,CAAA,wwDAAA,CAAA,EAAA,CAAA;mFAKpB,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,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBAEkB,UAAU,EAAA,CAAA;sBAAlC,SAAS;uBAAC,YAAY,CAAA;;;MEpBd,yBAAyB,CAAA;IACzB,KAAK,GAAW,EAAE,CAAC;IACnB,WAAW,GAAW,eAAe,CAAC;AACtC,IAAA,MAAM,CAAoB;AAC1B,IAAA,OAAO,CAAe;IACtB,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;IAC1B,SAAS,GAAW,GAAG,CAAC;IACxB,WAAW,GAAY,IAAI,CAAC;AAE3B,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AACzC,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEtB,IAAA,SAAS,CAAmC;IAEjE,YAAY,GAAkB,IAAI,CAAC;IACnC,SAAS,GAAY,KAAK,CAAC;AACnB,IAAA,YAAY,CAAgB;IAEpC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,OAAO;SACV;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACR,sEAAsE,CACzE,CAAC;YACF,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;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AAEzB,QAAA,MAAM,MAAM,GAAGC,WAAS,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,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,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;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,MAAc,EAAE,KAAA,GAAgB,MAAM,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;AAE3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AAC9C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC;AACtC,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,OAAO,GACT,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;YACxB,MAAM;YACN,YAAY;YACZ,KAAK;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAExB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;;QAG/B,UAAU,CAAC,MAAK;YACZ,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AAChE,YAAA,QAAQ,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrD,QAAQ,CAAC,KAAK,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACN;IAED,gBAAgB,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,KACzC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAK,EAAA,EAAA,IAAI,CAAE,CAAA,GAAG,IAAI,CACnC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACnD;IAED,kBAAkB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAY,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,KAAa,KAAK,GAAG,KAAK,GAAG,CAAC,CAAK,EAAA,EAAA,IAAI,CAAE,CAAA,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACnD;IAED,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KAC7B;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,wBAAwB;AACtC,YAAA,cAAc,EAAE,mBAAmB;AACnC,YAAA,cAAc,EAAE,kBAAkB;SACrC,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;KAChE;IAED,iBAAiB,GAAA;QACb,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;KAC3C;IAED,YAAY,GAAA;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5D;wGAzJQ,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,ECtBtC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,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,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,u4EAsDM,EDrCQ,MAAA,EAAA,CAAA,+vDAAA,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,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,WACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,YAClC,qBAAqB,EAAA,QAAA,EAAA,u4EAAA,EAAA,MAAA,EAAA,CAAA,+vDAAA,CAAA,EAAA,CAAA;8BAKtB,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;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAd,MAAM;gBAEc,SAAS,EAAA,CAAA;sBAA7B,SAAS;uBAAC,QAAQ,CAAA;;;MEOV,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,YA1BzB,YAAY;YACZ,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,yBAAyB;YACzB,sBAAsB;YACtB,mBAAmB;YACnB,qBAAqB;YACrB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;AACxB,YAAA,yBAAyB,aAGzB,qBAAqB;YACrB,oBAAoB;YACpB,yBAAyB;YACzB,sBAAsB;YACtB,mBAAmB;YACnB,qBAAqB;YACrB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;YACxB,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAGhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YA1BzB,YAAY;YACZ,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,yBAAyB;YACzB,sBAAsB;YACtB,mBAAmB;YACnB,qBAAqB;YACrB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;YACxB,yBAAyB,CAAA,EAAA,CAAA,CAAA;;4FAehB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA7B5B,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;AAC1B,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;AAC1B,qBAAA;AACF,iBAAA,CAAA;;;AC1CD;;AAEG;;ACFH;;AAEG;;;;"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class FvCheckboxComponent implements OnInit {
|
|
5
|
+
label: string;
|
|
6
|
+
control: FormControl;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
required: boolean;
|
|
9
|
+
valueChange: EventEmitter<boolean>;
|
|
10
|
+
ngOnInit(): void;
|
|
11
|
+
onChange(event: Event): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvCheckboxComponent, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvCheckboxComponent, "fv-checkbox", never, { "label": { "alias": "label"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "@angular/common";
|
|
3
|
+
import * as i2 from "@angular/forms";
|
|
4
|
+
import * as i3 from "./fv-entry-field/fv-entry-field.component";
|
|
5
|
+
import * as i4 from "./fv-date-field/fv-date-field.component";
|
|
6
|
+
import * as i5 from "./fv-month-year-field/fv-month-year-field.component";
|
|
7
|
+
import * as i6 from "./fv-number-field/fv-number-field.component";
|
|
8
|
+
import * as i7 from "./fv-checkbox/fv-checkbox.component";
|
|
9
|
+
import * as i8 from "./fv-radio-group/fv-radio-group.component";
|
|
10
|
+
import * as i9 from "./fv-dropdown/fv-dropdown.component";
|
|
11
|
+
import * as i10 from "./fv-file-selector/fv-file-selector.component";
|
|
12
|
+
import * as i11 from "./fv-image-selector/fv-image-selector.component";
|
|
13
|
+
import * as i12 from "./fv-rich-text-editor/fv-rich-text-editor.component";
|
|
14
|
+
export declare class FvControlsModule {
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvControlsModule, never>;
|
|
16
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<FvControlsModule, never, [typeof i1.CommonModule, typeof i2.ReactiveFormsModule, typeof i3.FvEntryFieldComponent, typeof i4.FvDateFieldComponent, typeof i5.FvMonthYearFieldComponent, typeof i6.FvNumberFieldComponent, typeof i7.FvCheckboxComponent, typeof i8.FvRadioGroupComponent, typeof i9.FvDropdownComponent, typeof i10.FvFileSelectorComponent, typeof i11.FvImageSelectorComponent, typeof i12.FvRichTextEditorComponent], [typeof i3.FvEntryFieldComponent, typeof i4.FvDateFieldComponent, typeof i5.FvMonthYearFieldComponent, typeof i6.FvNumberFieldComponent, typeof i7.FvCheckboxComponent, typeof i8.FvRadioGroupComponent, typeof i9.FvDropdownComponent, typeof i10.FvFileSelectorComponent, typeof i11.FvImageSelectorComponent, typeof i12.FvRichTextEditorComponent]>;
|
|
17
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<FvControlsModule>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { ValidationSchema } from '@fovestta2/validation-engine';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class FvDateFieldComponent implements OnInit, OnDestroy {
|
|
6
|
+
label: string;
|
|
7
|
+
schema: ValidationSchema;
|
|
8
|
+
control: FormControl;
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
readonly: boolean;
|
|
11
|
+
min?: string;
|
|
12
|
+
max?: string;
|
|
13
|
+
valueChange: EventEmitter<string>;
|
|
14
|
+
blur: EventEmitter<void>;
|
|
15
|
+
focus: EventEmitter<void>;
|
|
16
|
+
errorMessage: string | null;
|
|
17
|
+
private subscription?;
|
|
18
|
+
ngOnInit(): void;
|
|
19
|
+
ngOnDestroy(): void;
|
|
20
|
+
private extractConstraintsFromSchema;
|
|
21
|
+
private formatDate;
|
|
22
|
+
private validateValue;
|
|
23
|
+
onBlur(event?: FocusEvent): void;
|
|
24
|
+
onFocus(event?: FocusEvent): void;
|
|
25
|
+
isRequired(): boolean;
|
|
26
|
+
getErrorMessage(): string;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvDateFieldComponent, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvDateFieldComponent, "fv-date-field", never, { "label": { "alias": "label"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { ValidationSchema } from '@fovestta2/validation-engine';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export interface DropdownOption {
|
|
6
|
+
label: string;
|
|
7
|
+
value: string | number;
|
|
8
|
+
}
|
|
9
|
+
export declare class FvDropdownComponent implements OnInit, OnDestroy {
|
|
10
|
+
label: string;
|
|
11
|
+
placeholder: string;
|
|
12
|
+
options: DropdownOption[];
|
|
13
|
+
schema: ValidationSchema;
|
|
14
|
+
control: FormControl;
|
|
15
|
+
disabled: boolean;
|
|
16
|
+
valueChange: EventEmitter<string | number>;
|
|
17
|
+
blur: EventEmitter<void>;
|
|
18
|
+
focus: EventEmitter<void>;
|
|
19
|
+
errorMessage: string | null;
|
|
20
|
+
isOpen: boolean;
|
|
21
|
+
private subscription?;
|
|
22
|
+
ngOnInit(): void;
|
|
23
|
+
ngOnDestroy(): void;
|
|
24
|
+
private validateValue;
|
|
25
|
+
toggleDropdown(): void;
|
|
26
|
+
selectOption(option: DropdownOption): void;
|
|
27
|
+
onBlur(): void;
|
|
28
|
+
isRequired(): boolean;
|
|
29
|
+
getErrorMessage(): string;
|
|
30
|
+
getSelectedLabel(): string;
|
|
31
|
+
isSelected(option: DropdownOption): boolean;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvDropdownComponent, never>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvDropdownComponent, "fv-dropdown", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "options": { "alias": "options"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { ValidationSchema } from '@fovestta2/validation-engine';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class FvEntryFieldComponent implements OnInit, OnDestroy {
|
|
6
|
+
label: string;
|
|
7
|
+
placeholder: string;
|
|
8
|
+
schema: ValidationSchema;
|
|
9
|
+
control: FormControl;
|
|
10
|
+
disabled: boolean;
|
|
11
|
+
readonly: boolean;
|
|
12
|
+
type: 'text' | 'password' | 'email';
|
|
13
|
+
valueChange: EventEmitter<string>;
|
|
14
|
+
blur: EventEmitter<void>;
|
|
15
|
+
focus: EventEmitter<void>;
|
|
16
|
+
errorMessage: string | null;
|
|
17
|
+
private subscription?;
|
|
18
|
+
ngOnInit(): void;
|
|
19
|
+
ngOnDestroy(): void;
|
|
20
|
+
private validateValue;
|
|
21
|
+
onBlur(event?: FocusEvent): void;
|
|
22
|
+
onFocus(event?: FocusEvent): void;
|
|
23
|
+
isRequired(): boolean;
|
|
24
|
+
getErrorMessage(): string;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvEntryFieldComponent, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvEntryFieldComponent, "fv-entry-field", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy, ElementRef } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { ValidationSchema } from '@fovestta2/validation-engine';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export interface FileInfo {
|
|
6
|
+
file: File;
|
|
7
|
+
name: string;
|
|
8
|
+
size: number;
|
|
9
|
+
type: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class FvFileSelectorComponent implements OnInit, OnDestroy {
|
|
12
|
+
label: string;
|
|
13
|
+
placeholder: string;
|
|
14
|
+
schema: ValidationSchema;
|
|
15
|
+
control: FormControl;
|
|
16
|
+
disabled: boolean;
|
|
17
|
+
accept: string;
|
|
18
|
+
maxSize?: number;
|
|
19
|
+
valueChange: EventEmitter<FileInfo | null>;
|
|
20
|
+
blur: EventEmitter<void>;
|
|
21
|
+
fileInput: ElementRef<HTMLInputElement>;
|
|
22
|
+
errorMessage: string | null;
|
|
23
|
+
selectedFile: FileInfo | null;
|
|
24
|
+
private subscription?;
|
|
25
|
+
ngOnInit(): void;
|
|
26
|
+
ngOnDestroy(): void;
|
|
27
|
+
private validateValue;
|
|
28
|
+
onFileSelected(event: Event): void;
|
|
29
|
+
openFileDialog(): void;
|
|
30
|
+
removeFile(): void;
|
|
31
|
+
formatFileSize(bytes: number): string;
|
|
32
|
+
isRequired(): boolean;
|
|
33
|
+
getErrorMessage(): string;
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvFileSelectorComponent, never>;
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvFileSelectorComponent, "fv-file-selector", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "maxSize": { "alias": "maxSize"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; }, never, never, true, never>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy, ElementRef } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { ValidationSchema } from '@fovestta2/validation-engine';
|
|
4
|
+
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export interface ImageInfo {
|
|
7
|
+
file: File;
|
|
8
|
+
url: SafeUrl;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
size: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class FvImageSelectorComponent implements OnInit, OnDestroy {
|
|
14
|
+
private sanitizer;
|
|
15
|
+
label: string;
|
|
16
|
+
placeholder: string;
|
|
17
|
+
schema: ValidationSchema;
|
|
18
|
+
control: FormControl;
|
|
19
|
+
disabled: boolean;
|
|
20
|
+
maxSize?: number;
|
|
21
|
+
valueChange: EventEmitter<ImageInfo | null>;
|
|
22
|
+
blur: EventEmitter<void>;
|
|
23
|
+
imageInput: ElementRef<HTMLInputElement>;
|
|
24
|
+
errorMessage: string | null;
|
|
25
|
+
selectedImage: ImageInfo | null;
|
|
26
|
+
private subscription?;
|
|
27
|
+
constructor(sanitizer: DomSanitizer);
|
|
28
|
+
ngOnInit(): void;
|
|
29
|
+
ngOnDestroy(): void;
|
|
30
|
+
private validateValue;
|
|
31
|
+
onImageSelected(event: Event): void;
|
|
32
|
+
openImageDialog(): void;
|
|
33
|
+
removeImage(): void;
|
|
34
|
+
formatFileSize(bytes: number): string;
|
|
35
|
+
isRequired(): boolean;
|
|
36
|
+
getErrorMessage(): string;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvImageSelectorComponent, never>;
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvImageSelectorComponent, "fv-image-selector", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "maxSize": { "alias": "maxSize"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; }, never, never, true, never>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { ValidationSchema } from '@fovestta2/validation-engine';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class FvMonthYearFieldComponent implements OnInit, OnDestroy {
|
|
6
|
+
label: string;
|
|
7
|
+
schema: ValidationSchema;
|
|
8
|
+
control: FormControl;
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
readonly: boolean;
|
|
11
|
+
min?: string;
|
|
12
|
+
max?: string;
|
|
13
|
+
valueChange: EventEmitter<string>;
|
|
14
|
+
blur: EventEmitter<void>;
|
|
15
|
+
focus: EventEmitter<void>;
|
|
16
|
+
errorMessage: string | null;
|
|
17
|
+
private subscription?;
|
|
18
|
+
ngOnInit(): void;
|
|
19
|
+
ngOnDestroy(): void;
|
|
20
|
+
private extractConstraintsFromSchema;
|
|
21
|
+
private formatMonth;
|
|
22
|
+
private validateValue;
|
|
23
|
+
onBlur(event?: FocusEvent): void;
|
|
24
|
+
onFocus(event?: FocusEvent): void;
|
|
25
|
+
isRequired(): boolean;
|
|
26
|
+
getErrorMessage(): string;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvMonthYearFieldComponent, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvMonthYearFieldComponent, "fv-month-year-field", never, { "label": { "alias": "label"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { ValidationSchema } from '@fovestta2/validation-engine';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class FvNumberFieldComponent implements OnInit, OnDestroy {
|
|
6
|
+
label: string;
|
|
7
|
+
placeholder: string;
|
|
8
|
+
schema: ValidationSchema;
|
|
9
|
+
control: FormControl;
|
|
10
|
+
disabled: boolean;
|
|
11
|
+
readonly: boolean;
|
|
12
|
+
min?: any;
|
|
13
|
+
max?: any;
|
|
14
|
+
step: number;
|
|
15
|
+
valueChange: EventEmitter<number>;
|
|
16
|
+
blur: EventEmitter<void>;
|
|
17
|
+
focus: EventEmitter<void>;
|
|
18
|
+
errorMessage: string | null;
|
|
19
|
+
private subscription?;
|
|
20
|
+
ngOnInit(): void;
|
|
21
|
+
ngOnDestroy(): void;
|
|
22
|
+
private validateValue;
|
|
23
|
+
onBlur(): void;
|
|
24
|
+
onFocus(): void;
|
|
25
|
+
isRequired(): boolean;
|
|
26
|
+
getErrorMessage(): string;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvNumberFieldComponent, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvNumberFieldComponent, "fv-number-field", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export interface RadioOption {
|
|
5
|
+
value: any;
|
|
6
|
+
label: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class FvRadioGroupComponent implements OnInit {
|
|
10
|
+
label: string;
|
|
11
|
+
control: FormControl;
|
|
12
|
+
options: RadioOption[];
|
|
13
|
+
disabled: boolean;
|
|
14
|
+
required: boolean;
|
|
15
|
+
name: string;
|
|
16
|
+
valueChange: EventEmitter<any>;
|
|
17
|
+
ngOnInit(): void;
|
|
18
|
+
onChange(value: any): void;
|
|
19
|
+
isSelected(value: any): boolean;
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvRadioGroupComponent, never>;
|
|
21
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvRadioGroupComponent, "fv-radio-group", never, { "label": { "alias": "label"; "required": false; }; "control": { "alias": "control"; "required": false; }; "options": { "alias": "options"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "name": { "alias": "name"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy, ElementRef } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { ValidationSchema } from '@fovestta/validation-engine';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class FvRichTextEditorComponent implements OnInit, OnDestroy {
|
|
6
|
+
label: string;
|
|
7
|
+
placeholder: string;
|
|
8
|
+
schema: ValidationSchema;
|
|
9
|
+
control: FormControl;
|
|
10
|
+
disabled: boolean;
|
|
11
|
+
readonly: boolean;
|
|
12
|
+
minHeight: number;
|
|
13
|
+
showToolbar: boolean;
|
|
14
|
+
valueChange: EventEmitter<string>;
|
|
15
|
+
blur: EventEmitter<void>;
|
|
16
|
+
focus: EventEmitter<void>;
|
|
17
|
+
editorRef: ElementRef<HTMLTextAreaElement>;
|
|
18
|
+
errorMessage: string | null;
|
|
19
|
+
isFocused: boolean;
|
|
20
|
+
private subscription?;
|
|
21
|
+
ngOnInit(): void;
|
|
22
|
+
ngOnDestroy(): void;
|
|
23
|
+
private validateValue;
|
|
24
|
+
onBlur(): void;
|
|
25
|
+
onFocus(): void;
|
|
26
|
+
insertText(before: string, after?: string): void;
|
|
27
|
+
handleBulletList(): void;
|
|
28
|
+
handleNumberedList(): void;
|
|
29
|
+
handleClear(): void;
|
|
30
|
+
isRequired(): boolean;
|
|
31
|
+
getErrorMessage(): string;
|
|
32
|
+
getCharacterCount(): number;
|
|
33
|
+
getWordCount(): number;
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FvRichTextEditorComponent, never>;
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FvRichTextEditorComponent, "fv-rich-text-editor", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; "control": { "alias": "control"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "minHeight": { "alias": "minHeight"; "required": false; }; "showToolbar": { "alias": "showToolbar"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
|
|
36
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fovestta2/web-angular",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Angular UI controls for Fovestta",
|
|
5
|
+
"peerDependencies": {
|
|
6
|
+
"@angular/common": "^18.0.0",
|
|
7
|
+
"@angular/core": "^18.0.0",
|
|
8
|
+
"@angular/forms": "^18.0.0",
|
|
9
|
+
"@fovestta2/validation-engine": "^1.0.1"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"tslib": "^2.3.0"
|
|
13
|
+
},
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"module": "fesm2022/fovestta2-web-angular.mjs",
|
|
16
|
+
"typings": "index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
"./package.json": {
|
|
19
|
+
"default": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./index.d.ts",
|
|
23
|
+
"esm2022": "./esm2022/fovestta2-web-angular.mjs",
|
|
24
|
+
"esm": "./esm2022/fovestta2-web-angular.mjs",
|
|
25
|
+
"default": "./fesm2022/fovestta2-web-angular.mjs"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|