import React from 'react';
export type TableVariant = 'simple' | 'striped' | 'bordered' | 'unstyled';
export type TableSize = 'sm' | 'md' | 'lg';
export type SortDirection = 'asc' | 'desc' | undefined;
export interface TableColumn<T> {
    /**
     * Unique identifier for the column
     */
    id: string;
    /**
     * Header text for the column
     */
    header: React.ReactNode;
    /**
     * Accessor function to get the cell value
     */
    accessor: (row: T, index: number) => React.ReactNode;
    /**
     * Whether the column is sortable
     * @default false
     */
    sortable?: boolean;
    /**
     * Function to sort the column data
     */
    sortFn?: (a: T, b: T, direction: SortDirection) => number;
    /**
     * Whether the column is filterable
     * @default false
     */
    filterable?: boolean;
    /**
     * Width of the column (e.g., '150px', '20%')
     */
    width?: string;
    /**
     * CSS class name for the column
     */
    className?: string;
    /**
     * Custom header render function
     */
    renderHeader?: (column: TableColumn<T>) => React.ReactNode;
    /**
     * Custom cell render function
     */
    renderCell?: (value: React.ReactNode, row: T, index: number) => React.ReactNode;
}
export interface TableProps<T> {
    /**
     * Array of data to display in the table
     */
    data: T[];
    /**
     * Array of column definitions
     */
    columns: TableColumn<T>[];
    /**
     * Variant of the table
     * @default 'simple'
     */
    variant?: TableVariant;
    /**
     * Size of the table
     * @default 'md'
     */
    size?: TableSize;
    /**
     * Whether the table should allow sorting
     * @default false
     */
    sortable?: boolean;
    /**
     * Default column to sort by
     */
    defaultSortColumn?: string;
    /**
     * Default sort direction
     */
    defaultSortDirection?: SortDirection;
    /**
     * Callback when sort changes
     */
    onSort?: (columnId: string, direction: SortDirection) => void;
    /**
     * Whether the table should allow filtering
     * @default false
     */
    filterable?: boolean;
    /**
     * Filter value
     */
    filterValue?: string;
    /**
     * Callback when filter changes
     */
    onFilter?: (value: string) => void;
    /**
     * Whether the table has a sticky header
     * @default false
     */
    stickyHeader?: boolean;
    /**
     * Whether the table is loading data
     * @default false
     */
    isLoading?: boolean;
    /**
     * Text to display when no data is available
     * @default 'No data available'
     */
    emptyText?: React.ReactNode;
    /**
     * Text to display when data is loading
     * @default 'Loading...'
     */
    loadingText?: React.ReactNode;
    /**
     * Whether the table should be horizontally scrollable
     * @default false
     */
    isScrollable?: boolean;
    /**
     * Callback when a row is clicked
     */
    onRowClick?: (row: T, index: number) => void;
    /**
     * Whether rows are selectable
     * @default false
     */
    selectable?: boolean;
    /**
     * Selected row indices
     */
    selectedRows?: number[];
    /**
     * Callback when row selection changes
     */
    onSelectRows?: (indices: number[]) => void;
    /**
     * Container class name
     */
    className?: string;
    /**
     * Table class name
     */
    tableClassName?: string;
    /**
     * Header class name
     */
    headerClassName?: string;
    /**
     * Body class name
     */
    bodyClassName?: string;
    /**
     * Row class name
     */
    rowClassName?: string | ((row: T, index: number) => string);
    /**
     * Cell class name
     */
    cellClassName?: string | ((row: T, column: TableColumn<T>, index: number) => string);
    /**
     * Caption for the table
     */
    caption?: React.ReactNode;
    /**
     * Whether the table should have a footer
     * @default false
     */
    hasFooter?: boolean;
    /**
     * Footer content
     */
    footer?: React.ReactNode;
    /**
     * Footer class name
     */
    footerClassName?: string;
}
/**
 * Table component built with Tailwind CSS
 *
 * A flexible table component with support for sorting, filtering, and various styling options.
 *
 * @example
 * // Basic usage
 * <TailwindTable
 *   data={users}
 *   columns={[
 *     { id: 'name', header: 'Name', accessor: row => row.name },
 *     { id: 'email', header: 'Email', accessor: row => row.email },
 *     { id: 'role', header: 'Role', accessor: row => row.role }
 *   ]}
 * />
 *
 * @example
 * // With sorting and filtering
 * <TailwindTable
 *   data={users}
 *   columns={[
 *     {
 *       id: 'name',
 *       header: 'Name',
 *       accessor: row => row.name,
 *       sortable: true,
 *       filterable: true
 *     },
 *     // ... other columns
 *   ]}
 *   sortable
 *   filterable
 *   defaultSortColumn="name"
 *   defaultSortDirection="asc"
 * />
 */
export declare function TailwindTable<T extends Record<string, any>>({ data, columns, variant, size, sortable, defaultSortColumn, defaultSortDirection, onSort, filterable, filterValue: externalFilterValue, onFilter, stickyHeader, isLoading, emptyText, loadingText, isScrollable, onRowClick, selectable, selectedRows, onSelectRows, className, tableClassName, headerClassName, bodyClassName, rowClassName, cellClassName, caption, hasFooter, footer, footerClassName, }: TableProps<T>): import("react/jsx-runtime").JSX.Element;
export declare namespace TailwindTable {
    var displayName: string;
}
export default TailwindTable;
//# sourceMappingURL=TailwindTable.d.ts.map