UNPKG

@tanstack/table-core

Version:

Headless UI for building powerful tables & datagrids for TS/JS.

69 lines 3.4 kB
import { DeepKeys, DeepValue, RowData } from "../types/type-utils.js"; import { AccessorFn, AccessorFnColumnDef, AccessorKeyColumnDef, ColumnDef, DisplayColumnDef, GroupColumnDef, IdentifiedColumnDef } from "../types/ColumnDef.js"; import { TableFeatures } from "../types/TableFeatures.js"; //#region src/helpers/columnHelper.d.ts interface ColumnHelper<in out TFeatures extends TableFeatures, in out TData extends RowData> { /** * Creates a data column definition with an accessor key or function to extract the cell value. * @example * ```ts * helper.accessor('firstName', { cell: (info) => info.getValue() }) * helper.accessor((row) => row.lastName, { id: 'lastName' }) * ``` */ accessor: <TAccessor extends AccessorFn<TData> | DeepKeys<TData>, TValue extends (TAccessor extends AccessorFn<TData, infer TReturn> ? TReturn : TAccessor extends DeepKeys<TData> ? DeepValue<TData, TAccessor> : never)>(accessor: TAccessor, column: TAccessor extends AccessorFn<TData> ? DisplayColumnDef<TFeatures, TData, TValue> : IdentifiedColumnDef<TFeatures, TData, TValue>) => TAccessor extends AccessorFn<TData> ? AccessorFnColumnDef<TFeatures, TData, TValue> : AccessorKeyColumnDef<TFeatures, TData, TValue>; /** * Wraps an array of column definitions to preserve each column's individual TValue type. * Uses variadic tuple types to infer element types before checking constraints, preventing type widening. * @example * ```ts * helper.columns([helper.accessor('firstName', {}), helper.accessor('age', {})]) * ``` */ columns: <TColumns extends ReadonlyArray<ColumnDef<TFeatures, TData, any>>>(columns: [...TColumns]) => Array<ColumnDef<TFeatures, TData, any>> & [...TColumns]; /** * Creates a display column definition for non-data columns like actions or row selection. * @example * ```ts * helper.display({ id: 'actions', header: 'Actions', cell: () => <button>Edit</button> }) * ``` */ display: (column: DisplayColumnDef<TFeatures, TData>) => DisplayColumnDef<TFeatures, TData, unknown>; /** * Creates a group column definition that contains nested child columns. * @example * ```ts * helper.group({ * id: 'name', * header: 'Name', * columns: helper.columns([ * helper.accessor('firstName', {}), * helper.accessor('lastName', { id: 'lastName' }), * ]), * }) * ``` */ group: (column: GroupColumnDef<TFeatures, TData, unknown>) => GroupColumnDef<TFeatures, TData, unknown>; } /** * Creates helper functions for authoring column definitions with stronger value * inference. * * `accessor` infers `TValue` from an accessor key or accessor function, * `display` creates non-data columns, `group` creates parent columns, and * `columns` preserves tuple-level value types for arrays. At runtime these * helpers only return column definition objects. * * @example * ```tsx * const helper = createColumnHelper<typeof features, Person>() // features is the result of `tableFeatures({})` helper * const columns = [ * helper.display({ id: 'actions', header: 'Actions' }), * helper.accessor('firstName', {}), * helper.accessor((row) => row.lastName, { id: 'lastName' }), * ] * ``` */ declare function createColumnHelper<TFeatures extends TableFeatures, TData extends RowData>(): ColumnHelper<TFeatures, TData>; //#endregion export { ColumnHelper, createColumnHelper };