import type { TablePlugin } from '../../types';
export interface UseTableSelectionConfig<T extends Record<string, unknown>> {
    /** Is this item currently selected? */
    getIsItemSelected: (item: T) => boolean;
    /** Called when a row checkbox is toggled. isSelected = new desired state. */
    onSelectItem: (event: {
        item: T;
        isSelected: boolean;
    }) => void;
    /** Called when select-all checkbox is toggled. */
    onSelectAll: (event: {
        isAllSelected: boolean;
    }) => void;
    /** Are all selectable items currently selected? */
    getIsAllSelected: () => boolean;
    /** Is the selection partial (some but not all)? Shows indeterminate checkbox. */
    getIsIndeterminate?: () => boolean;
    /** Should this row show a checkbox? Non-selectable rows render nothing. @default () => true */
    getIsItemSelectable?: (item: T) => boolean;
    /** Is this row's checkbox interactive? Disabled rows show disabled checkbox. @default () => true */
    getIsItemEnabled?: (item: T) => boolean;
    /**
     * Derive a human-readable identity for a row, used in the row checkbox's
     * hidden label as `Select ${getRowLabel(item)}`. Without it, every row
     * checkbox announces an undifferentiated "Select row" to screen readers.
     * With `getRowLabel: item => item.name`, checkbox accessible names become
     * "Select Alice", "Select Bob", and so on.
     *
     * @example
     * ```
     * getRowLabel: item => item.name
     * ```
     */
    getRowLabel?: (item: T) => string;
}
export declare function useTableSelection<T extends Record<string, unknown>>(config: UseTableSelectionConfig<T>): TablePlugin<T>;
//# sourceMappingURL=useTableSelection.d.ts.map