import type { UseTableSelectionConfig } from './useTableSelection';
export interface UseTableSelectionStateConfig<T extends Record<string, unknown>> {
    /**
     * The data array currently rendered in the table.
     * Pass the **filtered/visible** data, not the full dataset — select-all
     * operates on this array, so passing unfiltered data would select hidden rows.
     */
    data: T[];
    /**
     * Key extractor — returns a unique string ID for each item.
     * Can be a property name or a function.
     */
    idKey: (keyof T & string) | ((item: T) => string);
    /**
     * Should this row show a checkbox? Non-selectable rows are excluded
     * from select-all and don\u2019t render a checkbox.
     * @default () => true
     */
    getIsItemSelectable?: (item: T) => boolean;
    /**
     * Is this row\u2019s checkbox interactive? Disabled rows are frozen \u2014
     * select-all won\u2019t add or remove them from the selection.
     * A disabled row that was selected before becoming disabled stays selected.
     * @default () => true
     */
    getIsItemEnabled?: (item: T) => boolean;
    /**
     * Controlled selected keys. The hook manages the selection set and
     * calls this setter when it changes.
     */
    selectedKeys: Set<string>;
    /**
     * Setter for the controlled selected keys.
     */
    setSelectedKeys: React.Dispatch<React.SetStateAction<Set<string>>>;
}
export interface UseTableSelectionStateResult<T extends Record<string, unknown>> {
    /** Ready-to-use config for useTableSelection. */
    selectionConfig: UseTableSelectionConfig<T>;
}
export declare function useTableSelectionState<T extends Record<string, unknown>>(config: UseTableSelectionStateConfig<T>): UseTableSelectionStateResult<T>;
//# sourceMappingURL=useTableSelectionState.d.ts.map