import { type ComponentPropsWithoutRef, type ReactNode } from "react";
export interface TableColumn<T = any> {
    key: string;
    header: ReactNode;
    sortable?: boolean;
    width?: string | number;
    render?: (value: any, row: T, index: number) => ReactNode;
}
type WrapperPropsBase = Omit<ComponentPropsWithoutRef<"div">, "children" | "data">;
export interface TableProps<T extends Record<string, any> = Record<string, any>> extends WrapperPropsBase {
    columns: TableColumn<T>[];
    data: T[];
    selectable?: boolean;
    selectedRows?: Set<number>;
    onSelectionChange?: (selected: Set<number>) => void;
    expandable?: boolean;
    renderExpanded?: (row: T, index: number) => ReactNode;
    onSort?: (key: string, direction: "asc" | "desc") => void;
    sortKey?: string;
    sortDirection?: "asc" | "desc";
    loading?: boolean;
    emptyMessage?: ReactNode;
    /** Accessible name for the table region. Default "Data table". */
    "aria-label"?: string;
}
declare function TableInner<T extends Record<string, any> = Record<string, any>>({ columns, data, selectable, selectedRows, onSelectionChange, expandable, renderExpanded, onSort, sortKey, sortDirection, loading, emptyMessage, className, "aria-label": ariaLabel, ...rest }: TableProps<T>, ref: React.Ref<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
export declare const Table: <T extends Record<string, any> = Record<string, any>>(props: TableProps<T> & {
    ref?: React.Ref<HTMLDivElement>;
}) => ReturnType<typeof TableInner>;
export {};
//# sourceMappingURL=Table.d.ts.map