import { type CSSProperties, type ReactNode, type Ref } from "react";
import { type TableColumnMeta, type TableSelectionMode } from "@ryuzaki13/react-foundation-lib/table";
import { Header, type Cell, type Row, type Table as TanStackTable } from "@tanstack/react-table";
import { BaseTableColumnState } from "../lib/columnPinning";
import { BaseTableCellLayout } from "../lib/mergeDuplicates";
import type { FormattersPipelineDisplayValue } from "@ryuzaki13/react-foundation-lib/formatters";
/**
 * Аргументы кастомизации рендера ячейки базовой таблицы.
 */
export interface BaseTableCellRenderArgs<TData extends object> {
    row: Row<TData>;
    cell: Cell<TData, unknown>;
    defaultContent: ReactNode;
    /**
     * Display-модель ячейки после общего formatting runtime.
     *
     * BaseTable сам не форматирует значения, поэтому поле заполняют адаптеры
     * `Table`/`TreeTable`. Слот может отсутствовать у низкоуровневых
     * потребителей BaseTable.
     */
    displayValue?: FormattersPipelineDisplayValue;
    columnMeta?: TableColumnMeta;
}
/**
 * Внутренний базовый рендерер таблицы.
 *
 * Не знает о плоских или древовидных данных и работает с уже подготовленным экземпляром TanStack Table.
 *
 * @NOTE: не для использования напрямую, это база для `Table` и `TreeTable`
 */
export interface BaseTableProps<TData extends object> {
    table: TanStackTable<TData>;
    columnState: BaseTableColumnState;
    title?: string;
    isLoading?: boolean;
    isFetching?: boolean;
    className?: string;
    minHeight?: `${number}em` | `${number}%`;
    tableClassName?: string;
    selectionMode?: TableSelectionMode;
    scrollableRef?: Ref<HTMLDivElement>;
    interactiveElementSelector?: string;
    onActivateRow?: (row: Row<TData>) => void;
    isRowInteractive?: (row: Row<TData>) => boolean;
    getRowClassName?: (row: Row<TData>) => string | undefined;
    getCellClassName?: (args: BaseTableCellRenderArgs<TData>) => string | undefined;
    getCellStyle?: (args: BaseTableCellRenderArgs<TData>) => CSSProperties | undefined;
    getCellLayout?: (args: BaseTableCellRenderArgs<TData>) => BaseTableCellLayout | undefined;
    renderCellContent?: (args: BaseTableCellRenderArgs<TData>) => ReactNode;
    /**
     * Общий слот контекстного меню заголовка.
     *
     * BaseTable намеренно не знает про сортировку, группировку или доменные
     * действия. Он только сохраняет единый доступный способ открыть меню для
     * `Table` и `TreeTable`, а содержимое передает потребитель.
     */
    renderHeaderContextMenu?: (header: Header<TData, unknown>) => ReactNode;
    enableColumnResizing?: boolean;
    enableColumnReordering?: boolean;
    columnResizeMinWidth?: number;
    afterTableContent?: ReactNode;
}
/**
 * Базовая таблица с общим UI-каркасом для Table и TreeTable.
 *
 * @NOTE: не для использования напрямую, это база для `Table` и `TreeTable`
 */
export declare function BaseTable<TData extends object>({ table, columnState, title, isLoading, isFetching, className, minHeight, tableClassName, selectionMode, scrollableRef, interactiveElementSelector, onActivateRow, isRowInteractive, getRowClassName, getCellClassName, getCellStyle, getCellLayout, renderCellContent, renderHeaderContextMenu, enableColumnResizing, enableColumnReordering, columnResizeMinWidth, afterTableContent }: BaseTableProps<TData>): import("react").JSX.Element;
//# sourceMappingURL=BaseTable.d.ts.map