import * as _angular_core from '@angular/core';
import { AbstractControl, ValidatorFn } from '@angular/forms';
import { isInvalid } from '@masterteam/components';

declare class FieldValidation {
    readonly control: _angular_core.InputSignal<AbstractControl<any, any, any> | null>;
    readonly touched: _angular_core.InputSignalWithTransform<boolean, unknown>;
    isInvalid: typeof isInvalid;
    /**
     * Reserve the error-message line whenever the control can surface an error —
     * i.e. it has sync/async validators, or is already showing one. This keeps the
     * field's height constant so showing the error never pushes sibling fields or
     * the content below the row. Re-evaluated each change-detection cycle, so it
     * picks up validators that fields add asynchronously after init.
     */
    shouldReserveSpace(): boolean;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldValidation, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldValidation, "mt-field-validation", never, { "control": { "alias": "control"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare const characterLimitValidator: (maxLength: number) => ValidatorFn;

export { FieldValidation, characterLimitValidator };
