import { ComputedRef, PropType, Ref } from 'vue';
export interface IInputSlot {
    id: ComputedRef<string>;
    isDirty: ComputedRef<boolean>;
    isDisabled: ComputedRef<boolean>;
    isReadonly: ComputedRef<boolean>;
    isPure: Ref<boolean>;
    isValid: ComputedRef<boolean | null>;
    isValidating: Ref<boolean>;
    reset: () => void;
    resetValidation: () => void;
    validate: () => Promise<string[]>;
}
export interface IInputProps {
    id: string | undefined;
    label: string | undefined;
    description: string | undefined;
    value: any;
    messages: string[] | string;
    persistentMessages: boolean;
}
export interface IUseInput {
    id: ComputedRef<string>;
    hasLabel: ComputedRef<boolean>;
    hasDescription: ComputedRef<boolean>;
}
export declare const makeInputProps: <Defaults extends {
    id?: unknown;
    label?: unknown;
    description?: unknown;
    value?: unknown;
    messages?: unknown;
    persistentMessages?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../utils').AppendDefault<{
    /**
     * Идентификатор
     */
    id: {
        type: PropType<string>;
        default: undefined;
    };
    /**
     * Лейбл
     */
    label: {
        type: PropType<string>;
        default: undefined;
    };
    /**
     * Описание
     */
    description: {
        type: PropType<string>;
        default: undefined;
    };
    /**
     * Значение
     */
    value: {
        type: PropType<any>;
        default: null;
    };
    /**
     * Сообщения подсказки
     */
    messages: {
        type: PropType<string[] | string>;
        default: () => never[];
    };
    /**
     * Всегда показывать сообщения и подсказки
     */
    persistentMessages: {
        type: PropType<boolean>;
        default: boolean;
    };
}, Defaults>;
export declare function useInput(props: IInputProps, slots: Record<string, unknown>, name?: string): IUseInput;
export declare function useFilteredInputProps<T extends Record<string, unknown>>(props: T, exclude: string[]): {
    inputProps: [Partial<T>] extends [Ref<any, any>] ? import('@vue/shared').IfAny<Ref<any, any> & Partial<T>, Ref<Ref<any, any> & Partial<T>, Ref<any, any> & Partial<T>>, Ref<any, any> & Partial<T>> : Ref<import('vue').UnwrapRef<Partial<T>>, Partial<T> | import('vue').UnwrapRef<Partial<T>>>;
    excludedProps: [Partial<T>] extends [Ref<any, any>] ? import('@vue/shared').IfAny<Ref<any, any> & Partial<T>, Ref<Ref<any, any> & Partial<T>, Ref<any, any> & Partial<T>>, Ref<any, any> & Partial<T>> : Ref<import('vue').UnwrapRef<Partial<T>>, Partial<T> | import('vue').UnwrapRef<Partial<T>>>;
};
export declare function useFilteredInputAttrs(attrs: Record<string, unknown>): {
    rootAttrs: Ref<{}, {}>;
    inputAttrs: Ref<{}, {}>;
};
/**
 * Filter attributes that should be applied to
 * the root element of an input component. Remaining
 * attributes should be passed to the <input> element inside.
 */
export declare function filterInputAttrs(attrs: Record<string, unknown>): Omit<Partial<Record<string, unknown>>, any>[];
/**
 * Filter props for input controls
 * @param props
 * @param exclude
 */
export declare function filterInputProps(props: Record<string, unknown>, exclude: string[]): (Partial<Pick<Record<string, unknown>, string>> | Omit<Record<string, unknown>, string>)[];
export declare const excludeControls: RegExp;
