import type { ComponentInternalInstance, ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue';
interface GroupItem {
    id: string;
    value: Ref<unknown>;
    disabled: Ref<boolean | undefined>;
}
interface GroupProps {
    disabled?: boolean;
    modelValue?: unknown;
    multiple?: boolean;
    mandatory?: boolean | 'force';
    max?: number;
    selectedClass?: string;
    'onUpdate:modelValue': ((val: unknown) => void) | undefined;
}
export interface GroupInstance {
    vm: ComponentInternalInstance | null;
    register: (item: GroupItem, cmp: ComponentInternalInstance) => void;
    unregister: (id: string) => void;
    select: (id: string, value: boolean) => void;
    selected: Ref<any[]>;
    isSelected: (id: string) => boolean;
    prev: () => void;
    next: () => void;
    selectedClass: Ref<string | undefined>;
    items: Ref<{
        id: string;
        value: unknown;
        disabled: boolean | undefined;
    }[]>;
    disabled: Ref<boolean | undefined>;
}
export interface GroupItemInstance {
    id: string;
    isSelected: Ref<boolean>;
    toggle: () => void;
    select: (value: boolean) => void;
    selectedClass: Ref<string | false | undefined>;
    value: Ref<unknown>;
    disabled: Ref<boolean | undefined>;
    group: GroupInstance;
}
export declare const makeGroupProps: <Defaults extends {
    modelValue?: unknown;
    multiple?: unknown;
    mandatory?: unknown;
    max?: unknown;
    selectedClass?: unknown;
    disabled?: unknown;
} = {}>(defaults?: Defaults | undefined) => {
    modelValue: unknown extends Defaults["modelValue"] ? {
        type: (StringConstructor | ObjectConstructor | BooleanConstructor | NumberConstructor | ArrayConstructor)[];
        default: undefined;
    } : Omit<{
        type: (StringConstructor | ObjectConstructor | BooleanConstructor | NumberConstructor | ArrayConstructor)[];
        default: undefined;
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["modelValue"] ? undefined : Defaults["modelValue"]>;
        default: unknown extends Defaults["modelValue"] ? undefined : Defaults["modelValue"];
    };
    multiple: unknown extends Defaults["multiple"] ? BooleanConstructor : {
        type: PropType<unknown extends Defaults["multiple"] ? boolean : boolean | Defaults["multiple"]>;
        default: unknown extends Defaults["multiple"] ? boolean : boolean | Defaults["multiple"];
    };
    mandatory: unknown extends Defaults["mandatory"] ? PropType<boolean | "force"> : {
        type: PropType<unknown extends Defaults["mandatory"] ? boolean | "force" : NonNullable<boolean | "force"> | Defaults["mandatory"]>;
        default: unknown extends Defaults["mandatory"] ? boolean | "force" : NonNullable<boolean | "force"> | Defaults["mandatory"];
    };
    max: unknown extends Defaults["max"] ? NumberConstructor : {
        type: PropType<unknown extends Defaults["max"] ? number : number | Defaults["max"]>;
        default: unknown extends Defaults["max"] ? number : number | Defaults["max"];
    };
    selectedClass: unknown extends Defaults["selectedClass"] ? StringConstructor : {
        type: PropType<unknown extends Defaults["selectedClass"] ? string : string | Defaults["selectedClass"]>;
        default: unknown extends Defaults["selectedClass"] ? string : string | Defaults["selectedClass"];
    };
    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"];
    };
};
export declare const makeGroupItemProps: <Defaults extends {
    value?: unknown;
    disabled?: unknown;
    selectedClass?: unknown;
} = {}>(defaults?: Defaults | undefined) => {
    value: unknown extends Defaults["value"] ? null : {
        type: PropType<unknown extends Defaults["value"] ? any : any>;
        default: unknown extends Defaults["value"] ? any : any;
    };
    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"];
    };
    selectedClass: unknown extends Defaults["selectedClass"] ? StringConstructor : {
        type: PropType<unknown extends Defaults["selectedClass"] ? string : string | Defaults["selectedClass"]>;
        default: unknown extends Defaults["selectedClass"] ? string : string | Defaults["selectedClass"];
    };
};
type GroupItemProps = ExtractPropTypes<ReturnType<typeof makeGroupItemProps>>;
export declare function useGroupItem(props: GroupItemProps, injectKey: InjectionKey<GroupInstance>, required?: true): GroupItemInstance;
export declare function useGroupItem(props: GroupItemProps, injectKey: InjectionKey<GroupInstance>, required: false): GroupItemInstance | null;
export declare function useGroup(props: GroupProps, injectKey: InjectionKey<GroupInstance>): {
    vm: ComponentInternalInstance | null;
    register: (item: GroupItem, vm: ComponentInternalInstance) => void;
    unregister: (id: string) => void;
    selected: import("vue").WritableComputedRef<string[]>;
    select: (id: string, isSelected: boolean) => void;
    disabled: Ref<boolean | undefined>;
    prev: () => void;
    next: () => void;
    isSelected: (id: string) => boolean;
    selectedClass: import("vue").ComputedRef<string | undefined>;
    items: Ref<{
        id: string;
        value: unknown;
        disabled: boolean | undefined;
    }[]>;
};
export {};
