import type { ExtractPropTypes, PropType } from 'vue';
export type ValidationResult = string | true;
export type ValidationRule = ValidationResult | PromiseLike<ValidationResult> | ((value: any) => ValidationResult) | ((value: any) => PromiseLike<ValidationResult>);
export declare const makeValidationProps: <Defaults extends {
    disabled?: unknown;
    error?: unknown;
    errorMessages?: unknown;
    maxErrors?: unknown;
    readonly?: unknown;
    rules?: unknown;
    modelValue?: unknown;
} = {}>(defaults?: Defaults | undefined) => {
    disabled: unknown extends Defaults["disabled"] ? BooleanConstructor : {
        type: PropType<unknown extends Defaults["disabled"] ? boolean : boolean | Defaults["disabled"]>;
        default: unknown extends Defaults["disabled"] ? boolean : boolean | Defaults["disabled"];
    };
    error: unknown extends Defaults["error"] ? BooleanConstructor : {
        type: PropType<unknown extends Defaults["error"] ? boolean : boolean | Defaults["error"]>;
        default: unknown extends Defaults["error"] ? boolean : boolean | Defaults["error"];
    };
    errorMessages: unknown extends Defaults["errorMessages"] ? {
        type: PropType<string | string[]>;
        default: () => never[];
    } : Omit<{
        type: PropType<string | string[]>;
        default: () => never[];
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["errorMessages"] ? string | string[] : Defaults["errorMessages"] | NonNullable<string | string[]>>;
        default: unknown extends Defaults["errorMessages"] ? string | string[] : Defaults["errorMessages"] | NonNullable<string | string[]>;
    };
    maxErrors: unknown extends Defaults["maxErrors"] ? {
        type: (StringConstructor | NumberConstructor)[];
        default: number;
    } : Omit<{
        type: (StringConstructor | NumberConstructor)[];
        default: number;
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["maxErrors"] ? string | number : NonNullable<string | number> | Defaults["maxErrors"]>;
        default: unknown extends Defaults["maxErrors"] ? string | number : NonNullable<string | number> | Defaults["maxErrors"];
    };
    readonly: unknown extends Defaults["readonly"] ? BooleanConstructor : {
        type: PropType<unknown extends Defaults["readonly"] ? boolean : boolean | Defaults["readonly"]>;
        default: unknown extends Defaults["readonly"] ? boolean : boolean | Defaults["readonly"];
    };
    rules: unknown extends Defaults["rules"] ? {
        type: PropType<ValidationRule[]>;
        default: () => never[];
    } : Omit<{
        type: PropType<ValidationRule[]>;
        default: () => never[];
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["rules"] ? ValidationRule[] : ValidationRule[] | Defaults["rules"]>;
        default: unknown extends Defaults["rules"] ? ValidationRule[] : ValidationRule[] | Defaults["rules"];
    };
    modelValue: unknown extends Defaults["modelValue"] ? null : {
        type: PropType<unknown extends Defaults["modelValue"] ? any : any>;
        default: unknown extends Defaults["modelValue"] ? any : any;
    };
};
export declare function useValidation(props: ExtractPropTypes<ReturnType<typeof makeValidationProps>>, name?: string): {
    errorMessages: import("vue").Ref<string[]>;
    isDisabled: import("vue").ComputedRef<boolean>;
    isReadonly: import("vue").ComputedRef<boolean>;
    isPristine: import("vue").Ref<boolean>;
    isValid: import("vue").ComputedRef<boolean | null>;
    isValidating: import("vue").Ref<boolean>;
    reset: () => void;
    resetValidation: () => void;
    validate: () => Promise<string[]>;
    validationClasses: import("vue").ComputedRef<{
        [x: string]: boolean;
    }>;
};
