import React, { HTMLAttributes, ThHTMLAttributes, ReactNode } from 'react';
import type { EmptyStateConfig, LoadingStateConfig, NoSearchResultConfig } from '../TableProvider/index';
type TableVariant = 'default' | 'borderless';
type TableRowState = 'default' | 'selected' | 'invalid' | 'disabled';
export type SortDirection = 'asc' | 'desc' | null;
export type SortMode = 'client' | 'server';
export interface SortState {
    sortBy: string;
    sortOrder: 'asc' | 'desc';
}
export interface UseTableSortOptions {
    /** Se true, sincroniza o estado de ordenação com os parâmetros da URL */
    syncWithUrl?: boolean;
    /**
     * `'client'` (padrão) ordena o array recebido no próprio navegador.
     * `'server'` mantém a ordem dos dados como vieram — a ordenação é
     * responsabilidade da API — e apenas rastreia a coluna/direção para
     * emiti-las nos parâmetros da tabela.
     */
    mode?: SortMode;
    /**
     * Prefixo das chaves na URL (`vendas_sortBy` em vez de `sortBy`). Necessário
     * quando mais de uma tabela compartilha a mesma URL, senão elas leem o estado
     * de ordenação uma da outra.
     */
    urlKeyPrefix?: string;
    /**
     * Colunas aceitas. Um `sortBy` vindo da URL que não esteja nesta lista é
     * descartado — uma URL colada não pode injetar uma coluna inexistente.
     */
    allowedColumns?: string[];
    /** Ordenação inicial quando a URL não traz nenhuma. */
    defaultSort?: SortState;
    /** Chamado a cada mudança de ordenação (o TableProvider usa para voltar à página 1). */
    onSortChange?: () => void;
}
/**
 * Hook para gerenciar ordenação de dados da tabela
 *
 * @param data - Array de dados a serem ordenados
 * @param options - Opções de configuração do hook
 * @returns Objeto com dados ordenados, coluna/direção atual e função de sort
 *
 * @example
 * ```tsx
 * const activities = [
 *   { id: 1, name: 'Task A', date: '2024-01-01' },
 *   { id: 2, name: 'Task B', date: '2024-01-02' },
 * ];
 *
 * // Sem sincronização com URL
 * const { sortedData, sortColumn, sortDirection, handleSort } = useTableSort(activities);
 *
 * // Com sincronização com URL
 * const { sortedData, sortColumn, sortDirection, handleSort } = useTableSort(activities, { syncWithUrl: true });
 *
 * <TableHead
 *   sortDirection={sortColumn === 'name' ? sortDirection : null}
 *   onSort={() => handleSort('name')}
 * >
 *   Name
 * </TableHead>
 * ```
 */
export declare function useTableSort<T extends Record<string, unknown>>(data: T[], options?: UseTableSortOptions): {
    sortedData: T[];
    sortColumn: string | null;
    sortDirection: SortDirection;
    handleSort: (column: string) => void;
};
interface TableProps extends HTMLAttributes<HTMLTableElement> {
    variant?: TableVariant;
    /** Show loading state (controlled by TableProvider) */
    showLoading?: boolean;
    /** Loading state configuration */
    loadingState?: LoadingStateConfig;
    /** Show no search result state (controlled by TableProvider) */
    showNoSearchResult?: boolean;
    /** No search result state configuration */
    noSearchResultState?: NoSearchResultConfig;
    /** Show empty state (controlled by TableProvider) */
    showEmpty?: boolean;
    /** Empty state configuration */
    emptyState?: EmptyStateConfig;
}
interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {
    state?: TableRowState;
}
declare const Table: React.ForwardRefExoticComponent<TableProps & React.RefAttributes<HTMLTableElement>>;
declare const TableHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & React.RefAttributes<HTMLTableSectionElement>>;
interface TableBodyProps extends HTMLAttributes<HTMLTableSectionElement> {
    variant?: TableVariant;
}
declare const TableBody: React.ForwardRefExoticComponent<TableBodyProps & React.RefAttributes<HTMLTableSectionElement>>;
interface TableFooterProps extends HTMLAttributes<HTMLTableSectionElement> {
    variant?: TableVariant;
}
declare const TableFooter: React.ForwardRefExoticComponent<TableFooterProps & React.RefAttributes<HTMLTableSectionElement>>;
interface TableRowPropsExtended extends TableRowProps {
    variant?: TableVariant | 'defaultBorderless';
    clickable?: boolean;
}
declare const TableRow: React.ForwardRefExoticComponent<TableRowPropsExtended & React.RefAttributes<HTMLTableRowElement>>;
interface TableHeadProps extends ThHTMLAttributes<HTMLTableCellElement> {
    /**
     * Enable sorting on this column (default: false).
     *
     * This used to default to `true`, which made every header look clickable —
     * including the ones whose `onSort` did nothing.
     */
    sortable?: boolean;
    /** Current sort direction for this column */
    sortDirection?: SortDirection;
    /** Callback when column header is clicked */
    onSort?: () => void;
    /**
     * Rendered at the right of the label — the column's filter menu trigger.
     * When present, only the label toggles sorting (instead of the whole cell),
     * so the two click targets don't fight over the same pixels.
     */
    filterSlot?: ReactNode;
}
declare const TableHead: React.ForwardRefExoticComponent<TableHeadProps & React.RefAttributes<HTMLTableCellElement>>;
declare const TableCell: React.ForwardRefExoticComponent<React.TdHTMLAttributes<HTMLTableCellElement> & React.RefAttributes<HTMLTableCellElement>>;
declare const TableCaption: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableCaptionElement> & React.RefAttributes<HTMLTableCaptionElement>>;
export { default as TablePagination } from './TablePagination/index';
export type { TablePaginationProps } from './TablePagination/index';
export default Table;
export { TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, };
//# sourceMappingURL=Table.d.ts.map