UNPKG

@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

39 lines (38 loc) 2.14 kB
import { BodyRow, DataBodyRow } from './bodyRows.js'; import { FlatColumn, type Column } from './columns.js'; import type { Table } from './createTable.js'; import { HeaderRow } from './headerRows.js'; import type { AnyPlugins, PluginStates } from './types/TablePlugin.js'; import { type Readable, type Writable } from 'svelte/store'; export type TableAttributes<Item, Plugins extends AnyPlugins = AnyPlugins> = Record<string, unknown> & { role: 'table'; }; export type TableHeadAttributes<Item, Plugins extends AnyPlugins = AnyPlugins> = Record<string, unknown>; export type TableBodyAttributes<Item, Plugins extends AnyPlugins = AnyPlugins> = Record<string, unknown> & { role: 'rowgroup'; }; export interface TableViewModel<Item, Plugins extends AnyPlugins = AnyPlugins> { flatColumns: FlatColumn<Item, Plugins>[]; tableAttrs: Readable<TableAttributes<Item, Plugins>>; tableHeadAttrs: Readable<TableHeadAttributes<Item, Plugins>>; tableBodyAttrs: Readable<TableBodyAttributes<Item, Plugins>>; visibleColumns: Readable<FlatColumn<Item, Plugins>[]>; headerRows: Readable<HeaderRow<Item, Plugins>[]>; originalRows: Readable<BodyRow<Item, Plugins>[]>; rows: Readable<DataBodyRow<Item, Plugins>[]>; pageRows: Readable<DataBodyRow<Item, Plugins>[]>; pluginStates: PluginStates<Plugins>; } export type ReadOrWritable<T> = Readable<T> | Writable<T>; export interface PluginInitTableState<Item, Plugins extends AnyPlugins = AnyPlugins> extends Omit<TableViewModel<Item, Plugins>, 'pluginStates'> { data: ReadOrWritable<Item[]>; columns: Column<Item, Plugins>[]; } export interface TableState<Item, Plugins extends AnyPlugins = AnyPlugins> extends TableViewModel<Item, Plugins> { data: ReadOrWritable<Item[]>; columns: Column<Item, Plugins>[]; } export interface CreateViewModelOptions<Item> { rowDataId?: (item: Item, index: number) => string; } export declare const createViewModel: <Item, Plugins extends AnyPlugins = AnyPlugins>(table: Table<Item, Plugins>, columns: Column<Item, Plugins>[], { rowDataId }?: CreateViewModelOptions<Item>) => TableViewModel<Item, Plugins>;