import type { Ref } from 'vue';
export interface SelectionOptions<T extends Record<string, any> = Record<string, any>> {
    multiSelect?: boolean;
    uniqueKey?: string | ((item: T) => string | number);
    defaultSelected?: string;
    groupBy?: string | ((item: T) => string | number);
    defaultExpanded?: boolean;
}
export interface GroupedItems<T extends Record<string, any> = Record<string, any>> {
    groupKey: string | number;
    groupLabel: string;
    items: T[];
    isExpanded: boolean;
    count: number;
}
export declare function useTableSelection<T extends Record<string, any> = Record<string, any>>(items: Ref<T[]>, options?: SelectionOptions<T>): {
    selectedItems: Ref<T[], T[]>;
    groupedItems: Ref<GroupedItems<T>[], GroupedItems<T>[]>;
    expandedGroups: Ref<Set<string | number> & Omit<Set<string | number>, keyof Set<any>>, Set<string | number> | (Set<string | number> & Omit<Set<string | number>, keyof Set<any>>)>;
    allSelected: import("vue").ComputedRef<boolean>;
    someSelected: import("vue").ComputedRef<boolean>;
    toggleSelection: (item: T) => void;
    toggleSelectAll: () => void;
    isSelected: (item: T) => boolean;
    clearSelection: () => void;
    toggleGroup: (groupKey: string | number) => void;
    expandAllGroups: () => void;
    collapseAllGroups: () => void;
    getGroupValue: (item: T) => string | number;
    getUniqueValue: (item: T) => string | number;
};
//# sourceMappingURL=useTableSelection.d.ts.map