import type { TablePlugin } from '../../types';
/**
 * Configuration for useTablePagination.
 *
 * The consumer owns all state. This hook renders pagination controls
 * around the table via `transformTableContext`.
 *
 * @example
 * ```
 * const [page, setPage] = useState(1);
 * const plugin = useTablePagination({
 *   page,
 *   onPageChange: setPage,
 *   totalItems: data.length,
 *   pageSize: 10,
 * });
 * <Table data={pageData} columns={columns} plugins={{ pagination: plugin }} />
 * ```
 */
export interface UseTablePaginationConfig {
    /** Current page number (1-based). */
    page: number;
    /** Called when the page changes. Consumer updates their own state. */
    onPageChange: (page: number) => void;
    /**
     * Total number of items across all pages.
     * Used to calculate total page count and "X\u2013Y of Z" display.
     * Takes precedence over `totalPages` if both are provided.
     */
    totalItems?: number;
    /**
     * Total number of pages. Use when you know the page count but not item count.
     */
    totalPages?: number;
    /**
     * Whether more pages exist after the current one.
     * Use for cursor-based pagination where the total is unknown.
     * Mutually exclusive with totalItems/totalPages.
     */
    hasMore?: boolean;
    /**
     * Number of items per page.
     * @default 10
     */
    pageSize?: number;
    /**
     * Called when the user changes the page size via the page size selector.
     * When provided alongside `pageSizeOptions`, a page size dropdown is shown.
     */
    onPageSizeChange?: (pageSize: number) => void;
    /**
     * Available page size options. Shows a page size selector when provided.
     * @example
     * ```
     * [10, 25, 50, 100]
     * ```
     */
    pageSizeOptions?: number[];
    /**
     * Visual variant for the pagination controls.
     * Passed through to Pagination.
     * @default 'pages'
     */
    variant?: 'pages' | 'count' | 'compact' | 'dots' | 'none';
    /**
     * Size of the pagination controls.
     * @default 'md'
     */
    size?: 'sm' | 'md';
    /**
     * Where to render the pagination controls relative to the table.
     * - 'below' \u2014 renders pagination after the table (default)
     * - 'above' \u2014 renders pagination before the table
     * - 'both' \u2014 renders pagination above and below the table
     * - 'none' \u2014 does not auto-render; use Pagination manually
     *
     * @default 'below'
     */
    position?: 'below' | 'above' | 'both' | 'none';
    /**
     * Horizontal alignment of the pagination controls within their container.
     * - 'start' \u2014 left-aligned
     * - 'center' \u2014 centered (default)
     * - 'end' \u2014 right-aligned
     *
     * @default 'center'
     */
    align?: 'start' | 'center' | 'end';
    /**
     * Accessible label for the pagination nav landmark.
     * @default 'Table pagination'
     */
    label?: string;
}
/**
 * Pagination table plugin \u2014 renders Pagination controls around the table.
 *
 * Returns a `TablePlugin` directly (same pattern as `useTableSortable`,
 * `useTableSelection`, `useTableColumnSettings`).
 *
 * @example
 * ```
 * const [page, setPage] = useState(1);
 * const plugin = useTablePagination({
 *   page,
 *   onPageChange: setPage,
 *   totalItems: data.length,
 *   pageSize: 10,
 * });
 * <Table data={pageData} plugins={{ pagination: plugin }} />
 * ```
 */
export declare function useTablePagination<T extends Record<string, unknown>>(config: UseTablePaginationConfig): TablePlugin<T>;
//# sourceMappingURL=useTablePagination.d.ts.map