import type { ExtractPropTypes, PropType, Ref } from 'vue';
import type { SelectStrategy as BaseSelectStrategy } from './select-strategies';
import type { OpenStrategyFn } from './open-strategies';
import type { ActiveStrategyFn } from './active-strategies';
export type SelectStrategy = 'single-leaf' | 'leaf' | 'independent' | 'classic' | BaseSelectStrategy;
export type OpenStrategy = 'single' | 'multiple' | OpenStrategyFn;
export type ActiveStrategy = 'single' | 'multiple' | ActiveStrategyFn;
export declare const makeNestedProps: <Defaults extends {
    selectStrategy?: unknown;
    openStrategy?: unknown;
    activeStrategy?: unknown;
    opened?: unknown;
    selected?: unknown;
    active?: unknown;
    deleteAfterUnmount?: unknown;
} = {}>(defaults?: Defaults | undefined) => {
    selectStrategy: unknown extends Defaults["selectStrategy"] ? PropType<SelectStrategy> : {
        type: PropType<unknown extends Defaults["selectStrategy"] ? SelectStrategy : NonNullable<SelectStrategy> | Defaults["selectStrategy"]>;
        default: unknown extends Defaults["selectStrategy"] ? SelectStrategy : NonNullable<SelectStrategy> | Defaults["selectStrategy"];
    };
    openStrategy: unknown extends Defaults["openStrategy"] ? PropType<OpenStrategy> : {
        type: PropType<unknown extends Defaults["openStrategy"] ? OpenStrategy : NonNullable<OpenStrategy> | Defaults["openStrategy"]>;
        default: unknown extends Defaults["openStrategy"] ? OpenStrategy : NonNullable<OpenStrategy> | Defaults["openStrategy"];
    };
    activeStrategy: unknown extends Defaults["activeStrategy"] ? PropType<ActiveStrategy> : {
        type: PropType<unknown extends Defaults["activeStrategy"] ? ActiveStrategy : NonNullable<ActiveStrategy> | Defaults["activeStrategy"]>;
        default: unknown extends Defaults["activeStrategy"] ? ActiveStrategy : NonNullable<ActiveStrategy> | Defaults["activeStrategy"];
    };
    opened: unknown extends Defaults["opened"] ? {
        type: PropType<boolean | string[]>;
        default: () => never[];
    } : Omit<{
        type: PropType<boolean | string[]>;
        default: () => never[];
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["opened"] ? boolean | string[] : Defaults["opened"] | NonNullable<boolean | string[]>>;
        default: unknown extends Defaults["opened"] ? boolean | string[] : Defaults["opened"] | NonNullable<boolean | string[]>;
    };
    selected: unknown extends Defaults["selected"] ? PropType<string[]> : {
        type: PropType<unknown extends Defaults["selected"] ? string[] : string[] | Defaults["selected"]>;
        default: unknown extends Defaults["selected"] ? string[] : string[] | Defaults["selected"];
    };
    active: unknown extends Defaults["active"] ? PropType<string[]> : {
        type: PropType<unknown extends Defaults["active"] ? string[] : string[] | Defaults["active"]>;
        default: unknown extends Defaults["active"] ? string[] : string[] | Defaults["active"];
    };
    deleteAfterUnmount: unknown extends Defaults["deleteAfterUnmount"] ? {
        type: BooleanConstructor;
        default: boolean;
    } : Omit<{
        type: BooleanConstructor;
        default: boolean;
    }, "type" | "default"> & {
        type: PropType<unknown extends Defaults["deleteAfterUnmount"] ? boolean : boolean | Defaults["deleteAfterUnmount"]>;
        default: unknown extends Defaults["deleteAfterUnmount"] ? boolean : boolean | Defaults["deleteAfterUnmount"];
    };
};
export declare const useNested: (props: {
    opened: boolean | string[];
    deleteAfterUnmount: boolean;
} & {
    active?: string[] | undefined;
    selected?: string[] | undefined;
    selectStrategy?: SelectStrategy | undefined;
    openStrategy?: OpenStrategy | undefined;
    activeStrategy?: ActiveStrategy | undefined;
} & {
    'onUpdate:selected': ((val: string[]) => void) | undefined;
    'onUpdate:opened': ((val: string[]) => void) | undefined;
    'onUpdate:active': ((val: string[]) => void) | undefined;
}) => {
    children: Ref<Map<string, string[]>>;
    parents: Ref<Map<string, string>>;
    opened: Ref<Set<string>>;
    active: Ref<Set<string>>;
    selected: Ref<Map<string, 'on' | 'off' | 'indeterminate'>>;
    selectedValues: Ref<string[]>;
    register: (id: string, parentId: string | null, isGroup?: boolean) => void;
    unregister: (id: string) => void;
    open: (id: string, value: boolean, event?: Event) => void;
    select: (id: string, value: boolean, event?: Event) => void;
    activate: (id: string, value: boolean, event?: Event) => void;
};
export declare const useNestedItem: (id: Ref<string | undefined>) => {
    id: import("vue").ComputedRef<string>;
    parent: import("vue").ComputedRef<string | undefined>;
    select: (selected: boolean, e: Event) => void;
    isSelected: import("vue").ComputedRef<boolean>;
    activate: (activated: boolean, e: Event) => void;
    isActive: import("vue").ComputedRef<boolean>;
    root: {
        children: Ref<Map<string, string[]>>;
        parents: Ref<Map<string, string>>;
        opened: Ref<Set<string>>;
        active: Ref<Set<string>>;
        selected: Ref<Map<string, 'on' | 'off' | 'indeterminate'>>;
        selectedValues: Ref<string[]>;
        register: (id: string, parentId: string | null, isGroup?: boolean) => void;
        unregister: (id: string) => void;
        open: (id: string, value: boolean, event?: Event) => void;
        select: (id: string, value: boolean, event?: Event) => void;
        activate: (id: string, value: boolean, event?: Event) => void;
    };
};
export declare const useNestedGroup: (props: {
    value: string;
}) => {
    id: import("vue").ComputedRef<string>;
    open: (open: boolean, e: Event) => void;
    isOpen: import("vue").ComputedRef<boolean>;
    isSelected: import("vue").ComputedRef<boolean>;
    isIndeterminate: import("vue").ComputedRef<boolean>;
    root: {
        children: Ref<Map<string, string[]>>;
        parents: Ref<Map<string, string>>;
        opened: Ref<Set<string>>;
        active: Ref<Set<string>>;
        selected: Ref<Map<string, 'on' | 'off' | 'indeterminate'>>;
        selectedValues: Ref<string[]>;
        register: (id: string, parentId: string | null, isGroup?: boolean) => void;
        unregister: (id: string) => void;
        open: (id: string, value: boolean, event?: Event) => void;
        select: (id: string, value: boolean, event?: Event) => void;
        activate: (id: string, value: boolean, event?: Event) => void;
    };
};
