import { ReactNode } from '../../../../node_modules/.pnpm/react@19.1.1/node_modules/react';
import { TTableState } from '../lib/hooks/use-table-states';
import { TTableColumn, TTableColumnOrGroup } from './col.types';
import { TExpandableConfig } from './expand.types';
import { TTableQuickFilter, TTableQuickFiltersConfig } from './filter.types';
export type TTableItem = Record<string, unknown>;
type HasColumnGroup<T extends readonly TTableColumnOrGroup<any>[]> = Extract<T[number], {
    columns: unknown;
}> extends never ? false : true;
type TRowPinning = {
    top: string[];
    bottom: string[];
};
type TColumnPinning<TItem extends TTableItem, T extends readonly TTableColumnOrGroup<any>[]> = HasColumnGroup<T> extends true ? never : {
    left: TTableColumn<TItem>["definition"]["id"][];
    right: TTableColumn<TItem>["definition"]["id"][];
};
export type TTableProps<TItem extends TTableItem, T extends readonly TTableColumnOrGroup<TItem>[], Q extends TTableQuickFilter[]> = {
    columns: T;
    data: TItem[];
    isLoading?: boolean;
    isNoData?: boolean;
    quickFilters?: TTableQuickFiltersConfig;
    /** Массив действий справа в toolbar (кнопки, элементы управления) */
    toolbarExtra?: ReactNode[];
    /**
     * Column pinning configuration.
     * ⚠️ NOT COMPATIBLE with multi-level headers (grouped columns).
     * See: https://github.com/TanStack/table/issues/5397
     */
    columnPinning?: TColumnPinning<TItem, T>;
    /** Row identifier for expandable - required when using expandable */
    getRowId?: (row: TItem, index: number) => string;
    /** Expandable rows configuration */
    expandable?: TExpandableConfig<TItem>;
    /** Row pinning — аналог columnPinning для строк */
    rowPinning?: TRowPinning;
    /** Controlled column visibility state */
    columnVisibility?: Record<string, boolean>;
    /** Callback for column visibility changes */
    onColumnVisibilityChange?: (visibility: Record<string, boolean>) => void;
} & TTableState<TItem, T, Q> & TTableDrillingProps<TItem>;
export type TTableContainerProps<TItem extends TTableItem> = {
    columns: readonly TTableColumnOrGroup<TItem>[];
    data: TItem[];
    isLoading?: boolean;
    isNoData: boolean;
    totalPages: number;
    nextPage?: () => void;
    pagination: {
        pageIndex: number;
        pageSize: number;
    };
    setPagination: (data: {
        pageIndex: number;
        pageSize: number;
    }) => void;
    columnPinning?: {
        left: TTableColumn<TItem>["definition"]["id"][];
        right: TTableColumn<TItem>["definition"]["id"][];
    };
    /** Row identifier for expandable - required when using expandable */
    getRowId?: (row: TItem, index: number) => string;
    /** Expandable rows configuration */
    expandable?: TExpandableConfig<TItem>;
    /** Row pinning — аналог columnPinning для строк */
    rowPinning?: TRowPinning;
    /** Controlled column visibility state */
    columnVisibility?: Record<string, boolean>;
    /** Callback for column visibility changes */
    onColumnVisibilityChange?: (visibility: Record<string, boolean>) => void;
} & TTableDrillingProps<TItem>;
export type TTableEmptyState = {
    description?: string | ReactNode;
    custom?: ReactNode;
};
export type TTableDrillingProps<TItem extends TTableItem = TTableItem> = {
    isFirstSummaryRow?: boolean;
    emptyState?: TTableEmptyState;
    minHeight?: string;
    maxHeight?: string;
    /** CSS-классы для условной подсветки строк. Применяются к каждому <td> строки. */
    rowClassName?: (record: TItem, index: number) => string | undefined;
};
export {};
//# sourceMappingURL=table.types.d.ts.map