import React from "react";
import { type DetailsPanelProps } from "../hooks/useTableDetailsPanel.js";
import { type SubRowsProps } from "../hooks/useTableItems.js";
import { type TableSortOptions } from "../hooks/useTableSort.js";
import type { DataTableLoadingConfig } from "./DataGridTable.types.js";
interface DataGridTableProps<T> extends React.HTMLAttributes<HTMLTableElement> {
    children?: never;
    /**
     * Controls table layout.
     *
     * ### fixed
     * Gives you full control of column widths. This is required for resizable columns.
     *
     * ### auto
     * Makes the columns resize automatically based on the content.
     * The table will take up at least 100% of available width.
     *
     * **NB:** When using this with `truncateContent`, you have to manually
     * set a `contentMaxWidth` on cells that should be truncated.
     * @default "fixed"
     */
    layout?: "fixed" | "auto";
    /**
     * Whether the header should be sticky.
     * For this to work, you have to put the component in a flex container with a height restriction.
     *
     * @example
     * <VStack height="100vh">
     *   <div>Content before DataGrid</div>
     *   <DataGrid>
     *     <DataGrid.Table />
     *   </DataGrid>
     *   <div>Content after DataGrid</div>
     * </VStack>
     *
     * @example
     * <div style={{ display: "flex", maxHeight: "500px" }}>
     *   <DataGrid>
     *     <DataGrid.Table />
     *   </DataGrid>
     * </div>
     *
     * @default true
     */
    stickyHeader?: boolean;
    /**
     * Callback invoked when a row in the table body is clicked.
     *
     * Call `event.preventDefault()` inside the callback to prevent the default row click behavior, such as selection.
     */
    onRowAction?: ({ row, id, event, }: {
        row: T;
        id: string;
        event: React.MouseEvent<HTMLTableRowElement>;
    }) => void;
    /**
     * Content to render when `data` is empty.
     * Rendered inside a row spanning all columns.
     */
    emptyContent?: React.ReactNode;
    /**
     * Configures how the table behaves during loading.
     *
     * Use `variant` to select the loading strategy:
     * - `"content"` — renders custom content inside a full-width row.
     * - `"skeleton"` — renders skeleton placeholder rows.
     * - `"overlay"` — keeps existing data visible with a loading overlay.
     *
     * @default { variant: "skeleton", rows: 5 }
     */
    loadingContent?: DataTableLoadingConfig;
    /**
     * Object with props related to nested rows (sub-rows).
     */
    subRows?: SubRowsProps<T>;
    /**
     * Object with props related to details panel.
     * This is a panel that can be expanded below each row to show arbitrary content.
     */
    detailsPanel?: DetailsPanelProps<T>;
    /**
     * Object with props related to sorting.
     */
    sorting?: TableSortOptions;
    /**
     * Determines if selection is triggered by clicking the row or the selection control (checkbox/radio).
     * @default "row"
     */
    selectionTrigger?: "row" | "control";
}
declare const DataGridTableInternal: React.ForwardRefExoticComponent<DataGridTableProps<any> & React.RefAttributes<HTMLTableElement>>;
declare const DataGridTable: <RowT>(props: DataGridTableProps<RowT> & React.RefAttributes<HTMLTableElement>) => React.ReactElement | null;
export declare namespace DataGridTable {
    type Props<T = unknown> = DataGridTableProps<T>;
    type Sorting = TableSortOptions;
    type SortEntry = import("./DataGridTable.types.js").SortEntry;
    type SortChangeDetail = import("./DataGridTable.types.js").SortChangeDetail;
    type LoadingContent = DataTableLoadingConfig;
    type SubRows<T = unknown> = SubRowsProps<T>;
    type DetailsPanel<T = unknown> = DetailsPanelProps<T>;
}
export { DataGridTable, DataGridTableInternal };
export type { DataGridTableProps };
export default DataGridTable;
