import { IDisabledProps } from '.';
import { ComponentInternalInstance, ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue';
export interface IGroupItem {
    id: number;
    value: Ref<unknown>;
    disabled: Ref<boolean | undefined>;
}
export interface IGroupProps {
    disabled?: boolean;
    modelValue: unknown;
    multiple?: boolean;
    required?: boolean | 'force';
    max?: number;
    selectedClass: string | undefined;
    'onUpdate:modelValue'?: ((val: unknown) => void) | undefined;
}
export interface IGroupProvide {
    selected: Ref<Readonly<number[]>>;
    selectedClass: Ref<string | undefined>;
    items: ComputedRef<{
        id: number;
        value: unknown;
        disabled: boolean | undefined;
    }[]>;
    disabled: Ref<boolean | undefined>;
    register: (item: IGroupItem, instance: ComponentInternalInstance) => void;
    unregister: (id: number) => void;
    select: (id: number, value: boolean) => void;
    isSelected: (id: number) => boolean;
    prev: () => void;
    next: () => void;
    getItemIndex: (value: unknown) => number;
}
export interface IGroupItemProvide {
    id: number;
    isSelected: Ref<boolean>;
    selectedClass: Ref<(string | undefined)[] | false>;
    value: Ref<unknown>;
    disabled: Ref<boolean | undefined>;
    group: IGroupProvide;
    select: (value: boolean) => void;
    toggle: () => void;
}
export declare const makeGroupProps: <Defaults extends {
    modelValue?: unknown;
    multiple?: unknown;
    required?: unknown;
    max?: unknown;
    selectedClass?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../utils').AppendDefault<{
    /**
     * Значение v-model
     */
    modelValue: {
        type: null;
        default: undefined;
    };
    /**
     * Множественный выбор
     */
    multiple: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Обязательно должен быть выбран хотя бы один элемент
     */
    required: {
        type: PropType<boolean | "force">;
        default: undefined;
    };
    /**
     * Максимально допустимое количество выбранных элементов
     */
    max: {
        type: PropType<number>;
        default: undefined;
    };
    /**
     * Классы для выбранных элементов
     */
    selectedClass: {
        type: PropType<string>;
        default: undefined;
    };
}, Defaults>;
export interface IGroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {
    disabled: IDisabledProps['disabled'];
    'onGroup:selected': ((value: {
        value: boolean;
    }) => void) | undefined;
}
export declare const makeGroupItemProps: <Defaults extends {
    value?: unknown;
    selectedClass?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../utils').AppendDefault<{
    /**
     * Значение элемента
     */
    value: {
        type: null;
        default: undefined;
    };
    /**
     * Классы для выбранных элементов
     */
    selectedClass: {
        type: PropType<string>;
        default: undefined;
    };
}, Defaults>;
export interface ISlideGroupProps extends ExtractPropTypes<ReturnType<typeof makeSlideGroupProps>> {
    disabled: IDisabledProps['disabled'];
    'onGroup:selected': ((value: {
        value: boolean;
    }) => void) | undefined;
}
export declare const makeSlideGroupProps: <Defaults extends {
    centerActive?: unknown;
    showArrows?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../utils').AppendDefault<{
    /**
     * Принудительно центрировать активный элемент
     */
    centerActive: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Показывать стрелки для переключения между элементами
     */
    showArrows: {
        type: PropType<boolean | string>;
        validator: (value: any) => boolean;
    };
}, Defaults>;
export declare function useGroupItem(props: IGroupItemProps, injectKey: InjectionKey<IGroupProvide>, required?: true): IGroupItemProvide;
export declare function useGroupItem(props: IGroupItemProps, injectKey: InjectionKey<IGroupProvide>, required: false): IGroupItemProvide | null;
export declare function useGroup(props: IGroupProps, injectKey: InjectionKey<IGroupProvide>): IGroupProvide;
