import { DoCheck, ElementRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { TextareaInputMetadata } from '../../molecules/textarea-input/types'; import { UsernameInputMetadata } from '../../molecules/username-input/types'; import { AttachmentItem } from '../attachment-uploader/types'; import { ButtonMetadata, FormMetadata, FormSubmit, InputMetadata, InputType } from '../../types'; import * as i0 from "@angular/core"; export declare class FormComponent implements OnInit, OnChanges, DoCheck { private fb; private elementRef; props: FormMetadata; onSubmit: EventEmitter; onInvalid: EventEmitter; onSelectChange: EventEmitter<{ field: string; value: any; }>; form: FormGroup; types: typeof InputType; states: { ENABLED: "ENABLED"; DISABLED: "DISABLED"; WORKING: "WORKING"; ERROR: "ERROR"; }; /** * Valor actual del form (`form.getRawValue()`), actualizado en cada * `valueChanges`. Pensado para el modo `controlled`: el host lo lee vía * `@ViewChild(FormComponent)` sin tocar el FormGroup directo. En modo normal * también está disponible. */ readonly value: import("@angular/core").WritableSignal>; /** * Estado de validez del form, actualizado en cada `statusChanges`. Para que * el host (wizard) habilite/deshabilite su botón "Siguiente". */ readonly valid: import("@angular/core").WritableSignal; private subscriptions; private actionsCache; private fieldPropMemo; private usernamePropMemo; private textareaPropMemo; private selectPropMemo; private previousState; private previousUploadingCount; private uploadingFields; constructor(fb: FormBuilder, elementRef: ElementRef); ngOnInit(): void; ngOnChanges(changes: SimpleChanges): void; ngDoCheck(): void; /** * Synchronizes form control disabled/enabled state with field metadata. */ private syncFieldControlStates; /** * Actualiza el cache de actions basado en el estado actual del form. */ private updateActionsCache; ngOnDestroy(): void; trackSelectChanges(fieldName: string): void; submitHandler(token?: string): Promise; onAttachmentChange(fieldName: string, items: AttachmentItem[]): void; getControl(field: string): FormControl; getFieldProp(field: InputMetadata): InputMetadata; /** * Adapter para SELECT — igual que `getFieldProp` pero limpia `label`. * val-form ya renderiza el título del campo con `` arriba del input; * si además pasáramos `label` al ``, este lo pinta DENTRO del pill * → redundancia visual ("Tipo" dos veces). Reusa el mismo memo (con la entrada * ya label-stripped) para no romper la identidad de referencia. */ getSelectProp(field: InputMetadata): InputMetadata; /** * Adapter — convierte un `InputMetadata` (con type=HANDLE) a `UsernameInputMetadata`. * El check de disponibilidad se resuelve dentro del component (AuthService inyectado); * el caller puede sobrescribirlo pasando `field.errors` o un `UsernameInputMetadata` * custom usando type=TEXT si necesita otra fuente de truth. */ getUsernameProp(field: InputMetadata): UsernameInputMetadata; /** * Adapter — convierte un `InputMetadata` (con type=TEXTAREA) a `TextareaInputMetadata`. * Defaults sensatos: autoGrow + counter habilitado, 4-12 rows. */ getTextareaProp(field: InputMetadata): TextareaInputMetadata; get isAtEndOfForm(): boolean; /** * Fuerza mostrar los errores de validación (marca todos los controles como * touched) y devuelve si el form es válido. Pensado para el modo `controlled`: * el host lo invoca en su "Siguiente" para gatear la navegación del wizard. */ validate(): boolean; /** * Marca todos los controles como touched (muestra errores) sin devolver nada. * Alias semántico de la primera mitad de `validate()`. */ markAllTouched(): void; get Form(): FormGroup; get FormState(): { form: FormGroup; data: FormMetadata; }; get actions(): ButtonMetadata[]; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }