import { ReactNode } from 'react';
import { WidgetState } from '../stores';
/**
* Single row of tabular data.
*
* The default row-identity column is `id`. Consumers that don't have a
* literal `id` field can point `
` / `` at a different
* column via the `keyColumn` prop; the library reads `row[keyColumn]`
* for selection lookup, React keys, and aria labels.
*/
export interface TableRow extends Record {
/**
* Default row identity. Required when no `keyColumn` is configured.
* Omit when wiring `keyColumn` to a different column.
*/
id?: string | number;
}
export type TableWidgetData = readonly TableRow[];
export type TableSortDirection = 'asc' | 'desc';
export interface TableSortState {
columnId: string | null;
direction: TableSortDirection;
}
export interface TableColumn {
/** Unique column identifier; matches the field name on each row. */
id: string;
/** Header label. */
label: ReactNode;
align?: 'left' | 'center' | 'right';
width?: number | string;
sortable?: boolean;
/** Custom cell renderer. Falls back to a string-cast of the raw value. */
formatter?: (value: unknown, row: TableRow) => ReactNode;
}
/**
* State extension carrying Table-specific UI state on the per-widget store.
* Per R12: widget-specific UI state lives in widget-specific extensions of
* `WidgetState`, not on the base type.
*/
export interface TableWidgetState extends WidgetState {
/** Optional reordered column list driven by ChangeColumn. Falls back to props. */
columnOrder?: readonly string[];
sort?: TableSortState;
page: number;
pageSize: number;
}
export declare const DEFAULT_TABLE_PAGE_SIZE = 10;
export declare const DEFAULT_TABLE_PAGE_SIZE_OPTIONS: readonly [10, 25, 50, 100];