export type SortDirection = "asc" | "desc" | null; export type SortKey = keyof T | null; export interface SortConfig { key: SortKey; direction: SortDirection; } export interface SortableDataOptions { /** Initial sort configuration */ initialSort?: SortConfig; /** Custom sort function */ customSort?: (a: T, b: T, key: keyof T, direction: SortDirection) => number; /** Enable multi-column sorting */ multiSort?: boolean; /** Maximum number of sort levels for multi-sort */ maxSortLevels?: number; /** Stable sort (preserves original order for equal items) */ stable?: boolean; /** Case-sensitive sorting for strings */ caseSensitive?: boolean; /** Null/undefined handling */ nullsFirst?: boolean; /** Custom value getter for sorting */ getValue?: (item: T, key: keyof T) => unknown; } export interface SortableDataResult { /** Sorted data */ data: T[]; /** Current sort configuration */ sortConfig: SortConfig; /** Multi-sort configurations */ sortConfigs: SortConfig[]; /** Sort function */ sort: (key: keyof T, direction?: SortDirection, append?: boolean) => void; /** Clear all sorting */ clearSort: () => void; /** Toggle sort direction */ toggleSort: (key: keyof T) => void; /** Check if column is sorted */ isSorted: (key: keyof T) => boolean; /** Get sort direction for column */ getSortDirection: (key: keyof T) => SortDirection; /** Get sort priority for column (for multi-sort) */ getSortPriority: (key: keyof T) => number | null; } export declare function useSortableData(data: T[], options?: SortableDataOptions): SortableDataResult; export declare function useSearchableSortableData(data: T[], searchFields: (keyof T)[], options?: SortableDataOptions & { searchQuery?: string; searchDebounce?: number; caseSensitive?: boolean; fuzzy?: boolean; }): { filteredData: T[]; searchQuery: string; totalCount: number; filteredCount: number; /** Sorted data */ data: T[]; /** Current sort configuration */ sortConfig: SortConfig; /** Multi-sort configurations */ sortConfigs: SortConfig[]; /** Sort function */ sort: (key: keyof T, direction?: SortDirection, append?: boolean) => void; /** Clear all sorting */ clearSort: () => void; /** Toggle sort direction */ toggleSort: (key: keyof T) => void; /** Check if column is sorted */ isSorted: (key: keyof T) => boolean; /** Get sort direction for column */ getSortDirection: (key: keyof T) => SortDirection; /** Get sort priority for column (for multi-sort) */ getSortPriority: (key: keyof T) => number | null; }; export declare function usePaginatedSortableData(data: T[], itemsPerPage?: number, options?: SortableDataOptions & { initialPage?: number; onPageChange?: (page: number) => void; }): { data: T[]; currentPage: number; totalPages: number; itemsPerPage: number; totalItems: number; goToPage: (page: number) => void; nextPage: () => void; previousPage: () => void; hasNextPage: boolean; hasPreviousPage: boolean; /** Current sort configuration */ sortConfig: SortConfig; /** Multi-sort configurations */ sortConfigs: SortConfig[]; /** Sort function */ sort: (key: keyof T, direction?: SortDirection, append?: boolean) => void; /** Clear all sorting */ clearSort: () => void; /** Toggle sort direction */ toggleSort: (key: keyof T) => void; /** Check if column is sorted */ isSorted: (key: keyof T) => boolean; /** Get sort direction for column */ getSortDirection: (key: keyof T) => SortDirection; /** Get sort priority for column (for multi-sort) */ getSortPriority: (key: keyof T) => number | null; }; export declare const sortUtils: { naturalSort: (a: string, b: string, direction?: SortDirection) => number; weightedSort: (items: T[], criteria: Array<{ key: keyof T; weight: number; direction?: SortDirection; }>) => T[]; groupSort: (items: T[], groupBy: K, sortBy: K, direction?: SortDirection) => T[]; }; //# sourceMappingURL=useSortableData.d.ts.map