UNPKG

k5kit

Version:

Utilities for TypeScript and Svelte

67 lines (66 loc) 2.52 kB
export type Column = { name: string; key: string; width: number; is_pct?: boolean; offset?: number; /** Handles both creation and updating of rows */ cell_render?: (element: HTMLElement, value: unknown) => void; }; export declare const RefreshLevel: { readonly Nothing: 0; readonly NewRows: 1; readonly AllRows: 2; }; export type RefreshLevel = (typeof RefreshLevel)[keyof typeof RefreshLevel]; type Row = { element: HTMLElement | null; index: number | null; rendered: boolean; }; /** * ## Virtual grid * High-performance virtual grid. Renders rows as HTML elements directly for better scroll performance instead of relying on a JS framework (which means custom markup needs to be created with JS). * * Features: * - Renders rows as HTML elements directly instead of using a JS framework (for better scroll performance) * - Rows can be dynamically loaded * - Columns can have fixed and percentage widths * * Note that parentElement is not reactive. * Do not add other elements into the row elements. Things would break because cells are referenced by indexing into the row's children. */ export declare class VirtualGrid<I, R extends Record<string, unknown>> { #private; source_items: I[]; options: { buffer?: number; row_prepare: (source_items: I, index: number) => R; row_render?: (element: HTMLElement, item: R, index: number) => void; row_height: number; }; main_element?: HTMLElement; viewport?: HTMLElement; size_observer?: ResizeObserver; refreshing: RefreshLevel; /** Use the `.create()` method instead. I couldn't get the constructor to infer generics */ private constructor(); static create<I, R extends Record<string, unknown>>(source_items: I[], options: { buffer?: number; row_prepare: (source_items: I, index: number) => R; row_render?: (element: HTMLElement, item: R, index: number) => void; row_height: number; }): VirtualGrid<I, R>; set_source_items(source_items: I[]): void; get_row_index_from_event(e: Event): number | null; viewport_row_count: number; rows: Row[]; refresh(level?: RefreshLevel): void; /** Updating columns must be done via `set_columns` */ columns: Column[]; set_columns(columns: Column[]): Column[]; scroll_to_index(index: number, scroll_margin_bottom?: number): void; setup(node: HTMLElement): () => void; attach(): (node: HTMLElement) => () => void; } export {};