State Types

TableState

interface TableState {
  sorting: SortingState
  columnFilters: ColumnFiltersState
  globalFilter: string
  pagination: PaginationState
  rowSelection: RowSelectionState
  columnVisibility: VisibilityState
  columnOrder: ColumnOrderState
  columnPinning: ColumnPinningState
  columnSizing: ColumnSizingState
  columnSizingInfo: ColumnSizingInfoState
  expanded: ExpandedState
  rowPinning: RowPinningState
  grouping: GroupingState
  editing: EditingState
}

Individual State Types

// Sorting
type SortingState = ColumnSort[]
interface ColumnSort { id: string; desc: boolean }
type SortDirection = 'asc' | 'desc'

// Filtering
type ColumnFiltersState = ColumnFilter[]
interface ColumnFilter { id: string; value: unknown }

// Pagination
interface PaginationState { pageIndex: number; pageSize: number }

// Selection
type RowSelectionState = Record<string, boolean>

// Visibility
type VisibilityState = Record<string, boolean>

// Column Order
type ColumnOrderState = string[]

// Column Pinning
interface ColumnPinningState { left?: string[]; right?: string[] }

// Column Sizing
type ColumnSizingState = Record<string, number>
interface ColumnSizingInfoState {
  startOffset: number | null
  startSize: number | null
  deltaOffset: number | null
  deltaPercentage: number | null
  isResizingColumn: string | false
  columnSizingStart: [string, number][]
}

// Expanded
type ExpandedState = Record<string, boolean> | true

// Row Pinning
interface RowPinningState { top?: string[]; bottom?: string[] }

// Grouping
type GroupingState = string[]

// Editing
interface EditingState {
  activeCell?: { rowId: string; columnId: string }
  pendingValues: Record<string, Record<string, unknown>>
}

Updater Pattern

All state setters accept an Updater<T>, which is either a direct value or an updater function:

type Updater<T> = T | ((prev: T) => T)

// Direct value
table.setSorting([{ id: 'name', desc: false }])

// Updater function
table.setSorting((prev) => [...prev, { id: 'age', desc: true }])