@humanspeak/svelte-headless-table
Version:
A powerful, headless table library for Svelte that provides complete control over table UI while handling complex data operations like sorting, filtering, pagination, grouping, and row expansion. Build custom, accessible data tables with zero styling opin
47 lines (46 loc) • 1.66 kB
TypeScript
import { type Readable, type Writable } from 'svelte/store';
import type { BodyRow } from '../bodyRows.js';
import type { NewTablePropSet, TablePlugin } from '../types/TablePlugin.js';
export interface SortByConfig {
initialSortKeys?: SortKey[];
disableMultiSort?: boolean;
isMultiSortEvent?: (event: Event) => boolean;
toggleOrder?: ('asc' | 'desc' | undefined)[];
serverSide?: boolean;
}
export interface SortByState<Item> {
sortKeys: WritableSortKeys;
preSortedRows: Readable<BodyRow<Item>[]>;
}
export interface SortByColumnOptions {
disable?: boolean;
getSortValue?: (value: any) => string | number | (string | number)[];
compareFn?: (left: any, right: any) => number;
invert?: boolean;
}
export type SortByPropSet = NewTablePropSet<{
'thead.tr.th': {
order: 'asc' | 'desc' | undefined;
toggle: (event: Event) => void;
clear: () => void;
disabled: boolean;
};
'tbody.tr.td': {
order: 'asc' | 'desc' | undefined;
};
}>;
export interface SortKey {
id: string;
order: 'asc' | 'desc';
}
export declare const createSortKeysStore: (initKeys: SortKey[]) => WritableSortKeys;
interface ToggleOptions {
multiSort?: boolean;
toggleOrder?: ('asc' | 'desc' | undefined)[];
}
export type WritableSortKeys = Writable<SortKey[]> & {
toggleId: (id: string, options: ToggleOptions) => void;
clearId: (id: string) => void;
};
export declare const addSortBy: <Item>({ initialSortKeys, disableMultiSort, isMultiSortEvent, toggleOrder, serverSide }?: SortByConfig) => TablePlugin<Item, SortByState<Item>, SortByColumnOptions, SortByPropSet>;
export {};