import { SwitcherIconProps } from '../components/SwitcherIcon';
import { TCdsIconsName } from '@central-design-system/icons';
import { NTree } from '../interface';
import { ShallowRef, ExtractPropTypes, PropType } from 'vue';
export declare const makeTreeProps: <Defaults extends {
    treeData?: unknown;
    selectable?: unknown;
    multiple?: unknown;
    checkable?: unknown;
    draggable?: unknown;
    checkedKeys?: unknown;
    expandedKeys?: unknown;
    selectedKeys?: unknown;
    autoExpandParent?: unknown;
    defaultExpandedKeys?: unknown;
    defaultExpandParent?: unknown;
    defaultExpandAll?: unknown;
    defaultSelectedKeys?: unknown;
    expandAction?: unknown;
    checkStrictly?: unknown;
    allowDrop?: unknown;
    blockNode?: unknown;
    fieldNames?: unknown;
    showLine?: unknown;
    showIcon?: unknown;
    filterTreeNode?: unknown;
    loadData?: unknown;
    loadedKeys?: unknown;
    icon?: unknown;
    switcherIcon?: unknown;
    openAnimation?: unknown;
    virtual?: unknown;
    height?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../../../utils').AppendDefault<{
    /**
     * Данные дерева
     */
    treeData: {
        type: PropType<NTree.IDataNode[]>;
        default: undefined;
    };
    /**
     * Выбираемые узлы дерева
     */
    selectable: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Множественный выбор узлов дерева
     */
    multiple: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Добавляет checkbox перед узлами дерева
     */
    checkable: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Разрешает перетаскивание узлов дерева
     */
    draggable: {
        type: PropType<NTree.TDraggableConfig | boolean>;
        default: boolean;
    };
    /**
     * (v-model) Определяет ключи выбранных узлов дерева.
     * Когда указан ключ узла дерева, который также является родительским узлом дерева, все дочерние узлы дерева будут checked;
     * и наоборот, когда указан ключ узла дерева, который является дочерним узлом дерева, его родительский узел дерева также будет checked.
     * Когда checkable и checkStrictly равны true, объект имеет свойство checked и halfChecked. Независимо от того, проверяется ли дочерний или родительский узел дерева, они не будут влиять друг на друга.
     */
    checkedKeys: {
        type: PropType<NTree.TKey[] | {
            checked: NTree.TKey[];
            halfChecked: NTree.TKey[];
        }>;
        default: undefined;
    };
    /**
     * (v-model) Определяет ключи раскрытых узлов дерева.
     */
    expandedKeys: {
        type: PropType<NTree.TKey[]>;
        default: undefined;
    };
    /**
     * (v-model) Определяет ключи выбранных узлов дерева.
     */
    selectedKeys: {
        type: PropType<NTree.TKey[]>;
        default: undefined;
    };
    /**
     * Автоматически раскрывать родительский узел
     */
    autoExpandParent: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Раскрывать все узлы по умолчанию
     */
    defaultExpandedKeys: {
        type: PropType<NTree.TKey[]>;
        default: () => never[];
    };
    /**
     * Раскрывать родительские узлы по умолчанию
     */
    defaultExpandParent: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Раскрывать все узлы по умолчанию
     */
    defaultExpandAll: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Выбранные узлы дерева по умолчанию
     */
    defaultSelectedKeys: {
        type: PropType<NTree.TKey[]>;
        default: undefined;
    };
    /**
     * Действие, которое будет раскрывать/скрывать узлы дерева
     */
    expandAction: {
        type: PropType<NTree.TExpandAction>;
        default: undefined;
    };
    /**
     * Выбирает только родительский узел.
     */
    checkStrictly: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Разрешает сброс на узле
     */
    allowDrop: {
        type: PropType<NTree.TAllowDrop>;
        default: () => true;
    };
    /**
     * Узел дерева заполняет все оставшееся горизонтальное пространство
     */
    blockNode: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Заменяет поля title, key и children в treeNode на соответствующие поля в treeData
     */
    fieldNames: {
        type: PropType<NTree.IFieldNames>;
        default: undefined;
    };
    /**
     * Показывает линии между узлами дерева
     */
    showLine: {
        type: PropType<boolean | {
            showLeafIcon: boolean | TCdsIconsName;
        }>;
        default: undefined;
    };
    /**
     * Показывает иконку узла дерева
     */
    showIcon: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Функция для фильтрации (выделения) узлов дерева. Когда функция возвращает true, узел дерева будет выделен.
     */
    filterTreeNode: {
        type: PropType<(treeNode: NTree.IEventDataNode) => boolean>;
        default: undefined;
    };
    /**
     * Загружает данные для узла дерева асинхронно
     */
    loadData: {
        type: PropType<(treeNode: NTree.IEventDataNode) => Promise<any>>;
        default: undefined;
    };
    /**
     * Загруженные узлы дерева. Необходимо для работы с loadData
     */
    loadedKeys: {
        type: PropType<NTree.TKey[]>;
        default: () => never[];
    };
    /**
     * Иконка узла дерева (также доступно через slot#icon)
     */
    icon: {
        type: PropType<(nodeProps: NTree.ITreeNodeAttribute) => any>;
        default: undefined;
    };
    /**
     * Иконка открытия/закрытия узла дерева (также доступно через slot#switcherIcon)
     */
    switcherIcon: {
        type: PropType<(nodeProps: SwitcherIconProps) => any>;
        default: undefined;
    };
    /**
     * Функция анимации открытия/закрытия узла дерева
     */
    openAnimation: {
        type: FunctionConstructor;
        default: undefined;
    };
    /**
     * Включает виртуальную прокрутку списка в дереве, по-умолчанию включено
     */
    virtual: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Высота виртуального списка для прокрутки
     */
    height: {
        type: PropType<number>;
        default: undefined;
    };
}, Defaults>;
export interface ITreeProps extends Partial<ExtractPropTypes<ReturnType<typeof makeTreeProps>>> {
    onLoad?: (loadedKeys: NTree.TKey[], info: {
        event: 'load';
        node: NTree.IEventDataNode;
    }) => void;
    onDragenter?: (info: NTree.TNodeDragEventParams & {
        expandedKeys: NTree.TKey[];
    }) => void;
    onDragstart?: (info: NTree.TNodeDragEventParams) => void;
    onDragover?: (info: NTree.TNodeDragEventParams) => void;
    onDragleave?: (info: NTree.TNodeDragEventParams) => void;
    onDragend?: (info: NTree.TNodeDragEventParams) => void;
    onDrop?: (info: NTree.TNodeDragEventParams & {
        dragNode: NTree.IEventDataNode | null;
        dragNodesKeys: NTree.TKey[];
        dropPosition: number;
        dropToGap: boolean;
    }) => void;
    onCheck?: (checked: {
        checked: NTree.TKey[];
        halfChecked: NTree.TKey[];
    } | NTree.TKey[], info: NTree.ICheckInfo) => void;
    onExpand?: (expandedKeys: NTree.TKey[], info: {
        node: NTree.IEventDataNode;
        expanded: boolean;
        nativeEvent: MouseEvent;
    }) => void;
    onSelect?: (selectedKeys: NTree.TKey[], info: {
        event: 'select';
        selected: boolean;
        node: NTree.IEventDataNode;
        selectedNodes: NTree.IDataNode[];
        nativeEvent: MouseEvent;
    }) => void;
}
export declare function useMaxLevel<TreeDataType extends NTree.IBasicDataNode = NTree.IDataNode>(keyEntities: ShallowRef<Record<NTree.TKey, NTree.IDataEntity>>): {
    maxLevel: import('vue').Ref<number, number>;
    levelEntities: ShallowRef<Map<number, Set<NTree.IDataEntity<TreeDataType>>> | undefined, Map<number, Set<NTree.IDataEntity<TreeDataType>>> | undefined>;
};
