import { PropType, SetupContext, ShallowRef, ExtractPropTypes } from 'vue';
import { StatefulProps } from './useStateful';
import { LoadingProps } from './useLoading';
import { ValidationProps } from './useValidation';
export type SelectableProps<V = any> = StatefulProps & LoadingProps & ExtractPropTypes<ValidationProps<V>> & {
    arrayValue: V | undefined;
    leftLabel: boolean;
    trueValue: any;
    falseValue: any;
    indeterminate: boolean;
    indeterminateValue: V | null;
    disabled: boolean;
    readonly: boolean;
    modelValue: unknown;
};
export type Elements = {
    input: ShallowRef<HTMLElement | undefined>;
    label: ShallowRef<HTMLElement | undefined>;
    container: ShallowRef<HTMLElement | undefined>;
};
export declare const useSelectableProps: {
    arrayValue: {
        type: (ObjectConstructor | BooleanConstructor | StringConstructor | NumberConstructor)[];
        default: null;
    };
    label: {
        type: StringConstructor;
        default: string;
    };
    leftLabel: {
        type: BooleanConstructor;
        default: boolean;
    };
    trueValue: {
        type: PropType<any>;
        default: boolean;
    };
    falseValue: {
        type: PropType<any>;
        default: boolean;
    };
    indeterminate: {
        type: BooleanConstructor;
        default: boolean;
    };
    indeterminateValue: {
        type: PropType<any>;
        default: null;
    };
    disabled: {
        type: BooleanConstructor;
        default: boolean;
    };
    readonly: {
        type: BooleanConstructor;
        default: boolean;
    };
    name: {
        type: StringConstructor;
        default: undefined;
    };
    rules: {
        type: PropType<import("./useValidation").ValidationRule<any>[]>;
        default: () => any;
    };
    dirty: {
        type: BooleanConstructor;
        default: boolean;
    };
    error: {
        type: BooleanConstructor;
        default: undefined;
    };
    errorMessages: {
        type: PropType<string | string[]>;
        default: undefined;
    };
    errorCount: {
        type: (StringConstructor | NumberConstructor)[];
        default: number;
    };
    success: {
        type: BooleanConstructor;
        default: boolean;
    };
    messages: {
        type: PropType<string | string[]>;
        default: () => never[];
    };
    immediateValidation: {
        type: BooleanConstructor;
        default: boolean;
    };
    modelValue: {};
    loading: {
        type: BooleanConstructor;
        default: boolean;
    };
    stateful: {
        type: PropType<boolean>;
        default: boolean;
    };
};
export declare const useSelectableEmits: string[];
export declare const useSelectable: (props: SelectableProps, emit: SetupContext['emit'], { input, label, container }: Elements) => {
    isDirty: import("vue").Ref<boolean>;
    isTouched: import("vue").Ref<boolean>;
    isError: import("vue").WritableComputedRef<boolean>;
    isLoading: import("vue").WritableComputedRef<boolean>;
    isValid: import("vue").ComputedRef<boolean>;
    isChecked: import("vue").ComputedRef<boolean>;
    isIndeterminate: import("vue").ComputedRef<boolean>;
    onBlur: (event: FocusEvent) => void;
    onFocus: (event: FocusEvent) => void;
    toggleSelection: () => void;
    reset: () => void;
    focus: () => void;
    computedError: import("vue").ComputedRef<boolean>;
    computedErrorMessages: import("vue").ComputedRef<string[]>;
    validationAriaAttributes: import("vue").ComputedRef<{
        'aria-invalid': boolean;
        'aria-errormessage': string;
    }>;
};
