aura-glass
Version:
A comprehensive glassmorphism design system for React applications with 142+ production-ready components
115 lines • 4.3 kB
TypeScript
export type SortDirection = 'asc' | 'desc' | null;
export type SortKey<T> = keyof T | null;
export interface SortConfig<T> {
key: SortKey<T>;
direction: SortDirection;
}
export interface SortableDataOptions<T> {
/** Initial sort configuration */
initialSort?: SortConfig<T>;
/** 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) => any;
}
export interface SortableDataResult<T> {
/** Sorted data */
data: T[];
/** Current sort configuration */
sortConfig: SortConfig<T>;
/** Multi-sort configurations */
sortConfigs: SortConfig<T>[];
/** 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<T>(data: T[], options?: SortableDataOptions<T>): SortableDataResult<T>;
export declare function useSearchableSortableData<T>(data: T[], searchFields: (keyof T)[], options?: SortableDataOptions<T> & {
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<T>;
/** Multi-sort configurations */
sortConfigs: SortConfig<T>[];
/** 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<T>(data: T[], itemsPerPage?: number, options?: SortableDataOptions<T> & {
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<T>;
/** Multi-sort configurations */
sortConfigs: SortConfig<T>[];
/** 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: <T>(items: T[], criteria: Array<{
key: keyof T;
weight: number;
direction?: SortDirection;
}>) => T[];
groupSort: <T, K extends keyof T>(items: T[], groupBy: K, sortBy: K, direction?: SortDirection) => T[];
};
//# sourceMappingURL=useSortableData.d.ts.map