import { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
import { VariantProps } from "class-variance-authority";
import { tableCellVariants, tableVariants } from "./variants";
type Alignment = "left" | "center" | "right";
interface TableCellContext<T extends Record<string, unknown>> {
    value: unknown;
    row: T;
    rowIndex: number;
    columnIndex: number;
    column: TableColumn<T>;
}
interface TableColumn<T extends Record<string, unknown>> {
    key: string;
    header: ReactNode;
    accessor?: keyof T | ((row: T, context: {
        rowIndex: number;
        columnIndex: number;
    }) => unknown);
    cell?: (context: TableCellContext<T>) => ReactNode;
    align?: Alignment;
    headerAlign?: Alignment;
    headerClassName?: string;
    cellClassName?: string;
}
interface TableProps<T extends Record<string, unknown>> extends Omit<ComponentPropsWithoutRef<"table">, "children">, VariantProps<typeof tableVariants>, Omit<VariantProps<typeof tableCellVariants>, "align"> {
    data: T[];
    columns: TableColumn<T>[];
    striped?: boolean;
    zebra?: boolean;
    emptyMessage?: ReactNode;
    rowKey?: (row: T, context: {
        rowIndex: number;
    }) => string | number;
    className?: string;
    sum?: (keyof T & string)[];
    sumLabel?: ReactNode;
    sumFormatter?: (value: number, key: string) => ReactNode;
}
declare const TableComponent: <T extends Record<string, unknown>>({ className, data, columns, variant, bordered, rounded, density, striped, zebra, lined, emptyMessage, rowKey, sum, sumLabel, sumFormatter, ...props }: TableProps<T>, ref: Ref<HTMLTableElement>) => import("react/jsx-runtime").JSX.Element;
declare const Table: <T extends Record<string, unknown>>(props: TableProps<T> & {
    ref?: Ref<HTMLTableElement>;
}) => ReturnType<typeof TableComponent>;
export type { TableColumn, TableProps };
export default Table;
