import { type CSSProperties, type JSX, type ReactNode } from 'react';
import * as styles from './DataTable.css.js';
import type { DataTableBreakpoint } from './tableBreakpoints.js';
import type { SlotClasses } from '../../styles/slots.js';
export type DataTableColumn<Row> = {
    id: string;
    header: JSX.Element | string;
    cell: (row: Row) => JSX.Element | string | null;
    minVisibleAt?: DataTableBreakpoint;
    className?: string;
    isPrimary?: boolean;
    align?: 'left' | 'center' | 'right';
    priority?: 'primary' | 'important' | 'secondary' | 'debug';
    mobileRole?: 'title' | 'subtitle' | 'meta' | 'badge' | 'status' | 'action' | 'hidden';
};
export type GetRowId<Row> = (row: Row, index: number) => string;
export type DataTableKind = NonNullable<Parameters<typeof styles.container>[0]>['kind'];
export type DataTableDensity = NonNullable<Parameters<typeof styles.densityRecipe>[0]>['density'];
export type DataTableRowState = NonNullable<Parameters<typeof styles.rowStateRecipe>[0]>['state'];
export type DataTableHeaderBehavior = {
    sticky?: boolean;
    offsetTop?: number;
};
export type DataTableBodyScrollMode = 'page' | 'contained';
export type DataTableSlot = 'container' | 'header' | 'headerRow' | 'headerCell' | 'primaryHeaderCell' | 'body' | 'row' | 'rowEven' | 'rowOdd' | 'cell' | 'primaryCell' | 'emptyRow' | 'emptyCell';
export type DataTableCellMode = 'normal' | 'singleLine';
export type DataTablePrimitiveLayoutProps = {
    gridTemplateClassName?: string;
    gridTemplateColumns?: string;
};
export type DataTableRootProps = {
    children: ReactNode;
    className?: string;
    kind?: DataTableKind;
    bodyScrollMode?: DataTableBodyScrollMode;
    classes?: Pick<SlotClasses<DataTableSlot>, 'container'>;
    ariaLabel?: string;
    ariaLabelledBy?: string;
};
export type DataTableHeaderProps<Row> = DataTablePrimitiveLayoutProps & {
    columns: readonly DataTableColumn<Row>[];
    kind?: DataTableKind;
    density?: DataTableDensity;
    headerBehavior?: DataTableHeaderBehavior;
    headerClassName?: string;
    classes?: Pick<SlotClasses<DataTableSlot>, 'header' | 'headerRow' | 'headerCell' | 'primaryHeaderCell'>;
};
export type DataTableBodyProps = {
    children: ReactNode;
    className?: string;
    kind?: DataTableKind;
    bodyScrollMode?: DataTableBodyScrollMode;
    classes?: Pick<SlotClasses<DataTableSlot>, 'body'>;
};
export type DataTableRowProps<Row> = DataTablePrimitiveLayoutProps & {
    row: Row;
    index: number;
    columns: readonly DataTableColumn<Row>[];
    getRowId: GetRowId<Row>;
    kind?: DataTableKind;
    density?: DataTableDensity;
    rowClassName?: (row: Row, index: number) => string | null | undefined;
    rowState?: (row: Row, index: number) => DataTableRowState;
    classes?: Pick<SlotClasses<DataTableSlot>, 'row' | 'rowEven' | 'rowOdd' | 'cell' | 'primaryCell'>;
    style?: CSSProperties;
    cellMode?: DataTableCellMode;
};
export type DataTableEmptyRowProps = {
    emptyState?: JSX.Element;
    density?: DataTableDensity;
    classes?: Pick<SlotClasses<DataTableSlot>, 'emptyRow' | 'emptyCell'>;
};
export type DataTableProps<Row> = {
    columns: readonly DataTableColumn<Row>[];
    rows: readonly Row[];
    getRowId: GetRowId<Row>;
    emptyState?: JSX.Element;
    className?: string;
    headerClassName?: string;
    bodyClassName?: string;
    rowClassName?: (row: Row, index: number) => string | null | undefined;
    gridTemplateClassName?: string;
    gridTemplateColumns?: string;
    kind?: DataTableKind;
    density?: DataTableDensity;
    headerBehavior?: DataTableHeaderBehavior;
    bodyScrollMode?: DataTableBodyScrollMode;
    rowState?: (row: Row, index: number) => DataTableRowState;
    classes?: SlotClasses<DataTableSlot>;
    ariaLabel?: string;
    ariaLabelledBy?: string;
    bodyFooterNode?: ReactNode;
};
export declare const DataTableRoot: import("react").ForwardRefExoticComponent<DataTableRootProps & import("react").RefAttributes<HTMLDivElement>>;
export declare const DataTableHeader: <Row>({ columns, kind, density, headerBehavior, headerClassName, gridTemplateClassName, gridTemplateColumns, classes, }: DataTableHeaderProps<Row>) => JSX.Element;
export declare const DataTableBody: import("react").ForwardRefExoticComponent<DataTableBodyProps & import("react").RefAttributes<HTMLDivElement>>;
export declare const DataTableRow: <Row>({ row, index, columns, getRowId, kind, density, rowClassName, rowState, gridTemplateClassName, gridTemplateColumns, classes, style, cellMode, }: DataTableRowProps<Row>) => JSX.Element;
export declare const DataTableEmptyRow: ({ emptyState, density, classes, }: DataTableEmptyRowProps) => JSX.Element;
export declare const DataTable: <Row>({ columns, rows, getRowId, emptyState, className, headerClassName, bodyClassName, rowClassName, gridTemplateClassName, gridTemplateColumns, kind, density, headerBehavior, bodyScrollMode, rowState, classes, ariaLabel, ariaLabelledBy, bodyFooterNode, }: DataTableProps<Row>) => JSX.Element;
//# sourceMappingURL=DataTable.d.ts.map