import { OnChanges, SimpleChanges, OnDestroy } from '@angular/core';
import { FormGroup, AbstractControl, FormControl } from '@angular/forms';
import { BaseComponent } from './base.component';
import { DomSanitizer } from '@angular/platform-browser';
import { FormControlComponentModel } from '../../core/models/component-models/form-control-component.model';
import { FormSubmitBroadcastService } from '../../core/services/form-submit-broadcast.service';
import * as i0 from "@angular/core";
/**
 * Base class for all reactive form controls (input, checkbox, radio, select, nested FormGroup, etc.).
 * - Grabs the control by name from the parent FormGroup
 * - Applies host class/style via BaseComponent
 * - Exposes control state, errors, and value changes
 *
 * @typeParam M - the ComponentModel type for config
 * @typeParam C - the AbstractControl subclass (default FormControl)
 */
export declare abstract class BaseFormControlComponent<M extends FormControlComponentModel = FormControlComponentModel, C extends AbstractControl = FormControl> extends BaseComponent<M> implements OnChanges, OnDestroy {
    protected sanitizer: DomSanitizer;
    protected submitBroadcastService: FormSubmitBroadcastService;
    /** Reference to the specific control instance (FormControl or FormGroup) */
    control: C;
    form: FormGroup;
    submitted: boolean;
    private statusSub?;
    private destroy$;
    /** Host element id for label association */
    hostId: string;
    constructor(sanitizer: DomSanitizer, submitBroadcastService: FormSubmitBroadcastService);
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnDestroy(): void;
    get errorState(): boolean;
    /** The control's value, or null if not set */
    get getControlErrorMessage(): string;
    /**
     * Handles input change event and updates the form control.
     * @param event The input event from the text field.
     * @param constraints The constraints for the input (e.g., max length, case).
     * @returns void
     * This method enforces constraints such as maximum length, exact length, and case (lower/upper).
     * It also updates the form control value without triggering additional events to prevent loops.
     */
    handleInputChange(event: Event, constraints: any): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormControlComponent<any, any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<BaseFormControlComponent<any, any>, never, never, { "form": { "alias": "form"; "required": false; }; "submitted": { "alias": "submitted"; "required": false; }; }, {}, never, never, true, never>;
}
