import React, { CSSProperties } from "react";
/**
 * Базовый тип — любое дерево с возможным полем children
 */
export interface TreeNodeBase {
    children?: readonly TreeNodeBase[] | undefined;
    [key: string]: unknown;
}
/**
 * Пропсы, которые получает callback рендера узла
 */
export interface TreeNodeRenderProps<T extends TreeNodeBase> {
    node: T;
    level: number;
    hasChildren: boolean;
    isLeaf: boolean;
    path: (string | number)[];
}
/**
 * Основные пропсы компонента Tree
 */
export interface TreeProps<T extends TreeNodeBase> {
    data: readonly T[];
    /**
     * Ключ для дочерних нод (по умолчанию "children")
     */
    childrenKey?: keyof T;
    /**
     * Альтернатива childrenKey — функция, возвращающая children
     */
    getChildren?: (node: T) => readonly T[] | undefined;
    /**
     * Как брать ключ для каждого узла (по умолчанию node.id || node.key || index)
     */
    getKey?: (node: T, index: number, path: (string | number)[]) => React.Key;
    /**
     * Функция, которая рисует содержимое узла.
     * Если не передана — делается "разумный" дефолт (node.title || node.text || JSON).
     */
    renderNode?: (props: TreeNodeRenderProps<T>) => React.ReactNode;
    /**
     * Если задано — узел считается интерактивным и будет обёрнут в кнопку для клавиатурной доступности.
     */
    onNodeClick?: (node: T, path: (string | number)[]) => void;
    containerElement?: "ol" | "ul" | "div";
    containerClassName?: string;
    containerStyle?: CSSProperties;
    nestedCounter?: boolean;
    itemClassName?: string;
    itemStyle?: CSSProperties;
    nestedListClassName?: string;
    nestedListStyle?: CSSProperties;
    labelClassName?: string;
    labelStyle?: CSSProperties;
}
/**
 * Универсальный компонент Tree
 * Не использует глобальный state и не знает бизнес-логики — всё через renderNode / callbacks.
 */
export declare function Tree<T extends TreeNodeBase>(props: TreeProps<T>): React.DetailedReactHTMLElement<{
    className: string;
    style: React.CSSProperties | undefined;
}, HTMLElement>;
//# sourceMappingURL=Tree.d.ts.map