import { TOpenStrategyProp } from './openStrategies';
import { TSelectStrategyProp } from './selectStrategies';
import { Ref, InjectionKey, PropType, SetupContext } from 'vue';
export type TNestedProvide = {
    id: Ref<unknown>;
    isGroupActivator?: boolean;
    root: {
        children: Ref<Map<unknown, unknown[]>>;
        parents: Ref<Map<unknown, unknown>>;
        opened: Ref<Set<unknown>>;
        selected: Ref<Map<unknown, 'on' | 'off' | 'indeterminate'>>;
        selectedValues: Ref<unknown[]>;
        register: (id: unknown, parentId: unknown, isGroup?: boolean) => void;
        unregister: (id: unknown) => void;
        open: (id: unknown, value: boolean, event?: Event) => void;
        select: (id: unknown, value: boolean, event?: Event) => void;
        openOnSelect: (id: unknown, value: boolean, event?: Event) => void;
    };
};
export interface INestedProps {
    selectStrategy: TSelectStrategyProp | undefined;
    openStrategy: TOpenStrategyProp | undefined;
    selected: unknown[] | unknown;
    opened: unknown[] | unknown;
    required: boolean;
    'onUpdate:selected'?: ((val: unknown[]) => void) | undefined;
    'onUpdate:opened'?: ((val: unknown[]) => void) | undefined;
}
export declare const NestedKey: InjectionKey<TNestedProvide>;
export declare const emptyNested: TNestedProvide;
export declare const makeNestedProps: <Defaults extends {
    selectStrategy?: unknown;
    openStrategy?: unknown;
    opened?: unknown;
    selected?: unknown;
    required?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../../utils').AppendDefault<{
    /**
     * Стратегия выбора элементов
     */
    selectStrategy: PropType<TSelectStrategyProp>;
    /**
     * Стратегия открытия элементов
     */
    openStrategy: PropType<TOpenStrategyProp>;
    /**
     * Массив открытых элементов
     */
    opened: PropType<unknown[]>;
    /**
     * Массив выбранных элементов
     */
    selected: PropType<unknown[]>;
    /**
     * Обязательный выбор
     */
    required: BooleanConstructor;
}, Defaults>;
export declare const useNested: (props: INestedProps, ctx: SetupContext<any[]>) => TNestedProvide["root"];
export declare const useNestedItem: (id: Ref<unknown>, isGroup: boolean) => {
    id: import('vue').ComputedRef<{}>;
    open: (open: boolean, event: Event) => void;
    openOnSelect: (open: boolean, event?: Event) => void;
    isOpen: import('vue').ComputedRef<boolean>;
    parent: import('vue').ComputedRef<unknown>;
    select: (selected: boolean, event?: Event) => void;
    isSelected: import('vue').ComputedRef<boolean>;
    isIndeterminate: import('vue').ComputedRef<boolean>;
    isLeaf: import('vue').ComputedRef<boolean>;
    isGroupActivator: boolean | undefined;
    root: {
        children: Ref<Map<unknown, unknown[]>>;
        parents: Ref<Map<unknown, unknown>>;
        opened: Ref<Set<unknown>>;
        selected: Ref<Map<unknown, "on" | "off" | "indeterminate">>;
        selectedValues: Ref<unknown[]>;
        register: (id: unknown, parentId: unknown, isGroup?: boolean) => void;
        unregister: (id: unknown) => void;
        open: (id: unknown, value: boolean, event?: Event) => void;
        select: (id: unknown, value: boolean, event?: Event) => void;
        openOnSelect: (id: unknown, value: boolean, event?: Event) => void;
    };
};
export declare const useNestedGroupActivator: () => void;
