import { TableColumnDef, type TableColumnOrderState, type TableColumnSizingState, TableSelectionMode } from "@ryuzaki13/react-foundation-lib/table";
import { type TreeTableFlatHierarchy, type TreeTableRowNode } from "@ryuzaki13/react-foundation-lib/tree-table";
import { type VisibilityState } from "@tanstack/react-table";
import { type BaseTableProps, type TableColumnPinningState } from "../base-table";
/**
 * Внутренний тип строки TreeTable после преобразования в иерархию.
 */
type TreeTableRuntimeRow<TData extends object> = TreeTableRowNode<TData>;
/**
 * Пропсы компонента TreeTable.
 *
 * Компонент принимает плоский OData-список и сам строит иерархию,
 * оставляя управление раскрытием и выбором во внутреннем состоянии.
 */
export interface TreeTableProps<TData extends object> {
    /**
     * Необязательный заголовок над таблицей.
     */
    title?: string;
    /**
     * Признак первичной загрузки.
     */
    isLoading?: boolean;
    /**
     * Признак фоновой догрузки или обновления данных.
     */
    isFetching?: boolean;
    /**
     * Плоский источник строк.
     */
    data: readonly TData[] | undefined | null;
    /**
     * Описание колонок через исходный тип строки.
     */
    columns: readonly TableColumnDef<TData>[];
    /**
     * Правила восстановления дерева из плоского списка.
     */
    hierarchy: TreeTableFlatHierarchy<TData>;
    /**
     * Режим выбора строк.
     */
    selectionMode?: TableSelectionMode;
    /**
     * Если `true`, при первом появлении данных раскрывает корневой уровень.
     */
    expandFirstLevel?: boolean;
    /**
     * Дополнительные строки, которые должны быть раскрыты при первой инициализации.
     */
    defaultExpandedRowIds?: readonly string[];
    /**
     * Идентификатор колонки, в которой нужно рисовать tree-toggle и отступы.
     *
     * Если не указан, используется первая видимая колонка.
     */
    treeColumnId?: string;
    /**
     * Отступ на один уровень вложенности.
     *
     * Числовое значение трактуется как `em`.
     */
    indentSize?: string | number;
    /**
     * Дополнительный CSS-класс корневого контейнера.
     */
    className?: string;
    /**
     * Дополнительный CSS-класс тега `table`.
     */
    tableClassName?: string;
    /**
     * Внешнее controlled-состояние видимости колонок.
     */
    columnVisibility?: VisibilityState;
    /**
     * Стартовое uncontrolled-состояние видимости колонок.
     */
    defaultColumnVisibility?: VisibilityState;
    /**
     * Внешнее controlled-состояние порядка колонок.
     */
    columnOrder?: readonly string[];
    /**
     * Стартовое uncontrolled-состояние порядка колонок.
     */
    defaultColumnOrder?: readonly string[];
    /**
     * Внешнее controlled-состояние ширин колонок в px.
     */
    columnSizing?: TableColumnSizingState;
    /**
     * Стартовое uncontrolled-состояние ширин колонок в px.
     */
    defaultColumnSizing?: TableColumnSizingState;
    /**
     * Внешнее controlled-состояние left-pinning для колонок.
     */
    columnPinning?: TableColumnPinningState;
    /**
     * Стартовое uncontrolled-состояние left-pinning для колонок.
     */
    defaultColumnPinning?: TableColumnPinningState;
    /**
     * Включает изменение ширины колонок через header-handle.
     */
    enableColumnResizing?: boolean;
    /**
     * Включает изменение порядка колонок через drag&drop заголовков.
     */
    enableColumnReordering?: boolean;
    /**
     * Минимальная ширина колонки при resize в px.
     */
    columnResizeMinWidth?: number;
    /**
     * Вызывается после изменения видимости колонок.
     */
    onColumnVisibilityChange?: (state: VisibilityState) => void;
    /**
     * Вызывается после изменения порядка колонок.
     */
    onColumnOrderChange?: (state: TableColumnOrderState) => void;
    /**
     * Вызывается после изменения ширины колонок.
     */
    onColumnSizingChange?: (state: TableColumnSizingState) => void;
    /**
     * Вызывается после изменения left-pinning state.
     */
    onColumnPinningChange?: (state: TableColumnPinningState) => void;
    /**
     * Вызывается при активации строки кликом или клавиатурой.
     */
    onRowClick?: (row: TData) => void;
    /**
     * Вызывается после изменения выбранных строк.
     */
    onRowSelectionChange?: (rows: TData[]) => void;
    /**
     * Вызывается после изменения раскрытых узлов.
     */
    onExpandedRowIdsChange?: (rowIds: string[]) => void;
    /**
     * Вызывается при достижении конца таблицы внутри scroll-контейнера.
     */
    onReachEnd?: () => void;
    /**
     * Позволяет запретить выбор отдельных строк.
     */
    getRowCanSelect?: (row: TData) => boolean;
    /**
     * Позволяет добавить CSS-класс для конкретной строки.
     */
    getRowClassName?: (row: TData) => string | undefined;
    /**
     * Контекстное меню заголовка колонки. Получает runtime-строки дерева,
     * потому что BaseTable работает уже после сборки flat hierarchy.
     */
    renderHeaderContextMenu?: BaseTableProps<TreeTableRuntimeRow<TData>>["renderHeaderContextMenu"];
    /**
     * Точка расширения содержимого ячейки после общего форматирования.
     *
     * Для tree-column в `defaultContent` передается только содержимое ячейки:
     * TreeTable сам добавит expander и отступ после выполнения слота.
     */
    renderCellContent?: BaseTableProps<TreeTableRuntimeRow<TData>>["renderCellContent"];
}
/**
 * Древовидная таблица на базе TanStack Table для плоских OData-данных.
 */
export declare function TreeTable<TData extends object>({ title, isLoading, isFetching, data, columns, hierarchy, selectionMode, expandFirstLevel, defaultExpandedRowIds, treeColumnId, indentSize, className, tableClassName, columnVisibility, defaultColumnVisibility, columnOrder, defaultColumnOrder, columnSizing, defaultColumnSizing, columnPinning, defaultColumnPinning, enableColumnResizing, enableColumnReordering, columnResizeMinWidth, onColumnVisibilityChange, onColumnOrderChange, onColumnSizingChange, onColumnPinningChange, onRowClick, onRowSelectionChange, onExpandedRowIdsChange, onReachEnd, getRowCanSelect, getRowClassName, renderHeaderContextMenu, renderCellContent }: TreeTableProps<TData>): import("react").JSX.Element;
export {};
//# sourceMappingURL=TreeTable.d.ts.map