Type References
All shared types used across the grid library.
Schema
Defines the semantic role and behavior of a column — whether it holds values to aggregate (measure) or categories to group by (dimension), how its raw values should be parsed and stored, and what operations are valid on it.
By attaching semantics to each field, the data model and renderer can make decisions automatically based on the column's role — SQL type casting during loading, aggregation strategy, domain value extraction for filters, and rendering behavior in the UI.
Prop
Type
typeunionDetermines how the grid treats this column.
"measure"— stored as a number (INTEGERorDOUBLEin SQL). The grid can aggregate it (sum, avg, etc.) and reports numeric domain ranges (min/max) for filtering."dimension"— used for grouping, pivoting, and labeling rows. Stored asVARCHAR(orTIMESTAMPifsubtypeis"temporal"). Filtering returns distinct categorical values.
Type
"measure" | "dimension"
subtype?unionOptional refinement that controls SQL type casting and filtering behavior. See SchemaSubtype.
| Subtype | Valid for type | Behavior |
|---|---|---|
"integer" | "measure" | Whole-number storage and aggregation |
"decimal" | "measure" | Floating-point storage and aggregation |
"temporal" | "dimension" | Parsed using datetimeFormat, filtered by date range (min/max) |
"nominal" | "dimension" | Default for dimensions, filtered by distinct values |
Type
SchemaSubtype | undefined
datetimeFormat?stringFormat string that tells the SQL engine how to parse date/time values from raw strings.
Only used when subtype is "temporal".
Uses strptime format codes — e.g. "%Y-%m-%d" parses "2024-03-15", "%m/%d/%Y %H:%M" parses "03/15/2024 14:30".
Type
string | undefined
aggregateFn?unionAggregate function for measures. Defaults to "sum" if not specified. See AggregateFn.
Type
AggregateFn | undefined
cardinality?unionCardinality hint for dimensions: "low" for few unique values, "high" for many. Upstream consumers can use this to pick appropriate UI — e.g. a dropdown for low cardinality vs. a search input for high cardinality.
Type
"low" | "high" | undefined
DataSchema
Extends Schema.
A named column definition that extends Schema with an identifier.
This is the primary type used throughout the grid to describe columns — in datasource, datamodel, and grid configuration.
Prop
Type
namestringThe column name as it appears in the data source.
Type
string
displayName?stringOptional human-readable label for rendering in headers.
Type
string | undefined
SchemaSubtype
export type SchemaSubtype = "temporal" | "nominal" | "integer" | "decimal";AggregateFn
type AggregateFn = "sum" | "avg" | "count" | "min" | "max";StandardDataFetchAndTransformIR
Intermediate representation describing which rows to fetch. StandardTableDataModel passes this to getData; the subclass converts it into a backend command (e.g. SQL).
Prop
Type
startRownumberStart row index in the data source (inclusive). The caller is responsible for converting any logical row to a row index in the data source. All pages overlapping the [startRow, endRow) range that are not already cached are fetched in parallel.
Type
number
endRownumberEnd row index in the data source (exclusive).
Type
number
groupPatharrayPath into the group hierarchy. When groupBy is set, data is organized in nested groups. Expanding a group progressively loads its child pages. groupPath represents which expanded path to fetch from - empty [] for top level, ["USA"] for children of "USA", ["USA", "California"] for children of California under USA.
Type
string[]
groupByarrayColumns that form the grouping hierarchy (e.g. ["country", "state"]). When set, the data source returns aggregated group rows instead of individual rows. Each level in groupBy becomes a nesting level - the first column forms the top-level groups, the second forms sub-groups within each expanded parent, and so on. groupPath determines which level is being fetched.
Type
string[]
projectarrayColumns to include in the output.
Type
string[]
sortarraySort instructions. Array is ordered by priority (multi-sort) - first entry is the primary sort. See SortEntry.
Type
SortEntry[]
filterarrayFilter conditions. Multiple filters are combined with AND - all must match. See ScalarFilter.
Type
ScalarFilter[]
metadata?unknownAgent-defined metadata configuration. Core does not interpret this field — it passes it through to the metadata plumber.
Type
unknown
SortEntry
A single sort instruction. The sort array in StandardDataFetchAndTransformIR is ordered - earlier entries take priority (multi-sort).
Prop
Type
fieldstringColumn to sort by.
Type
string
directionSortDirectionSort direction. "noop" means this entry is inactive.
Type
SortDirection
by?stringWhen absent, rows are sorted by the value of field directly. When present, field identifies which group to sort and by specifies a measure column whose aggregated value determines the order. For example, { field: "country", direction: "desc", by: "revenue" } sorts country groups by their total revenue descending.
Type
string | undefined
SortDirection
export type SortDirection = "asc" | "desc" | "noop";ScalarFilter
A single filter condition on one column. The filter array in StandardDataFetchAndTransformIR combines entries with AND - all filters must match for a row to be included.
Prop
Type
type"scalar"Always "scalar" for scalar filters.
Type
"scalar"
fieldstringColumn to filter on.
Type
string
subtype?"date"Set to "date" for date-part filters (year, month, etc).
Type
"date" | undefined
opunionComparison operator.
Type
"eq" | "neq" | "in" | "not_in" | "gt" | "lt" | "gte" | "lte" | "between" | "contains" | "doesNotContain" | "startsWith" | "endsWith" | "before" | "after" | "empty" | "notEmpty"
valueunionValue to compare against. Shape depends on op - array for in/not_in/between, scalar for others, null for empty/notEmpty.
Type
string | number | string[] | number[] | null
DatePart
export type DatePart = "year" | "month" | "day" | "hour" | "minute" | "second" | "quarter" | "week";DatePartScalarFilter
Extends ScalarFilter.
Extends ScalarFilter for filtering on a specific part of a date/timestamp column. Adds a part field that extracts a DatePart (year, month, day, etc) from the column before applying the operator. This enables queries like "year = 2024" or "month between 3 and 6" that are not possible with a plain ScalarFilter on the raw timestamp value.
Prop
Type
partDatePartStandardTableConfig
Configuration for StandardTableDataModel pagination and cache behavior.
Prop
Type
pageSizenumberNumber of rows per page.
Type
number
maxNumPageBeforeEvictionnumberMaximum number of fetched pages to keep in memory before the farthest page is evicted. This is how larger-than-memory datasets are supported - only a bounded window of pages is held in the browser at any time.
Type
number
GetRowsResponse
The response shape returned by getData.
Prop
Type
rowDataarrayColumn-major data arrays. Each inner array holds all values for one column. For example, 3 rows with columns [name, age] is stored as [["Alice", "Bob", "Carol"], [30, 25, 28]].
Type
any[][]
totalRowCountnumberTotal number of rows.
Type
number
metadata?Record<string, array>Raw metadata columns extracted from the query. Keys are metadata aliases (e.g. "__meta__email__null"), values are column-major arrays aligned with rowData rows. Populated when a metadata resolver contributes expressions to the getData query.
Type
Record<string, any[]> | undefined
PageNode
A page slot in the StandardTableDataModel cache tree. Each page holds a fixed slice of rows.
Prop
Type
dataunionColumn-major row data, or null if the page has not been fetched yet.
Type
any[][] | null
physicalStartnumberThe starting row index in the data source for this page. Physical index refers to the actual row position in the source data, as opposed to logical index which is the position the renderer displays. These differ when virtualization or lazy loading is active - only a subset of physical rows may be loaded, and the renderer maps them to logical positions.
Type
number
rowCountnumberNumber of rows this page covers.
Type
number
expandedRowsobjectMap from local row index to its ExpandedGroup. When expand(groupPath) is called, an entry is added here for that row with expanded: true and child pages populated. When collapse(groupPath) is called, expanded is set to false but the entry and its child data remain cached for fast re-expansion.
Type
Map<number, ExpandedGroup>
metadata?objectPage-scoped metadata (rows + cells) in page-local coordinates. Evicted with data when the page is evicted.
Type
PageMetadata | undefined
ExpandedGroup
Represents an expanded (or previously expanded) child group within a PageNode.
Prop
Type
expandedunionWhether this group is currently expanded. false means collapsed but child data is still cached.
Type
boolean
totalRowCountnumberTotal number of child rows in this group.
Type
number
pagesarrayColumnRangeValues
export type ColumnRangeValues =
| { type: "categorical"; values: string[] }
| { type: "range"; min: number; max: number }
| { type: "temporal"; min: string; max: string };PivotConfig
Input to PivotTableDataModel.getViewModelData. Describes which fields go on the row axis, column axis, and how to filter and sort the data.
Prop
Type
rowsunionDefines the row axis. Pass a plain string, an operator tree (AxisExpr), or an AxisConfig to include dimensional projection.
Type
AxisExpr | AxisConfig
columnsunionDefines the column axis. Same types as rows.
Type
AxisExpr | AxisConfig
filter?arrayFilters applied globally to both axes before aggregation. Supports ScalarFilter and TupleFilter. Multiple filters are combined with AND.
Type
Filter[] | undefined
sort?arrayControls the ordering of row facet values. Each SortEntry can sort by the dimension value itself (by absent) or by a measure's aggregated value (by set to a measure field). direction: "noop" keeps the natural order.
Type
SortEntry[] | undefined
metadata?unknownAgent-defined metadata configuration. Core does not interpret this field — it passes it through to the metadata plumber's resolver and reshaper.
Type
unknown
AxisExpr
type AxisExpr =
| string
| { type: "cross"; children: AxisExpr[] }
| { type: "concat"; children: AxisExpr[] }
| { type: "hierarchy"; fields: string[] };A plain string is a column name. cross, concat, and hierarchy are table algebra operators used to compose pivot axes. See PivotTableDataModel for usage and visual examples.
AxisConfig
type AxisConfig = { expr: AxisExpr; projection?: DimensionalProjectionPath[] };Wraps an AxisExpr with optional dimensional projection to control which values are expanded.
DimensionalProjectionPath
Controls which values are expanded at a single level of a dimensional projection. Forms a linked list - each node describes one level, and next points to the projection for the level below.
Prop
Type
openunionValues to expand at this level. "*" expands all values; an array expands only the listed values.
Type
string[] | "*"
next?objectProjection for the next level down. Only applies to values matched by open. If absent, expansion stops at this level.
Type
DimensionalProjectionPath | undefined
PivotDataFetchAndTransformIR
Intermediate representation passed to PivotTableDataModel.getData. Contains the dimensional structure and measures to aggregate. The subclass interprets this to produce grouped, aggregated data.
Prop
Type
dimSpecDimSpecmeasuresarrayFlat list of measures to aggregate. Each has a field, aggregation function, and optional filters.
Type
Measure[]
sort?arraySort instructions for row dimension values. When present, only covers row dimension fields.
Type
SortEntry[] | undefined
Measure
A measure to aggregate in the pivot query. Extracted from the AxisExpr during IR building - any field whose schema type is "measure" becomes a Measure entry.
Prop
Type
fieldstringColumn name of the measure field.
Type
string
aggregationAggregateFnAggregation function to apply. See AggregateFn. Defaults to "sum" if not specified in the schema.
Type
AggregateFn
filterarrayPivotRawDataFromSource
The return type of PivotTableDataModel.getData. Column-major format: data[i] is the full value array for columns[i]. Dimension columns come first (in tree-traversal order of the DimSpec), followed by measure columns.
Example for cross("region", "department") with measure revenue:
{
columns: ["region", "department", "revenue"],
data: [
["NA", "NA", "EU", "EU"], // region (dimension)
["Elec", "App", "Elec", "App"], // department (dimension)
[8150, 1670, 5650, 1730], // revenue (measure)
],
}Prop
Type
columnsarrayColumn names in order: dimension columns first, then measure columns.
Type
string[]
dataarrayColumn-major data. data[i] holds all values for columns[i]. All inner arrays have the same length (the row count).
Type
any[][]
metadata?Record<string, array>Metadata columns extracted separately from the main data. Keys are metadata aliases (e.g. "__meta__profit_pct"), values are column-major arrays aligned with the main data rows.
Type
Record<string, any[]> | undefined
PivotFilterQuery
Query passed to PivotTableDataModel.resolveFacetValues to retrieve available values for filter UIs. Returns one array of values per field.
Example: fetch distinct regions and countries for filter dropdowns:
const query: PivotFilterQuery = {
type: "facet",
fields: ["region", "country"],
mode: "distinct",
};
const result = await model.resolveFacetValues(query);
// result: [["NA", "EU", "APAC"], ["USA", "Canada", "UK", "Germany"]]Prop
Type
type"facet"Always "facet".
Type
"facet"
fieldsarrayColumn names to query values for.
Type
string[]
modeunion"distinct" returns unique values per field independently. "group" returns observed combinations across fields.
Type
"distinct" | "group"
filters?arrayOptional pre-filters to narrow the values returned (e.g. only show countries within a selected region).
Type
ScalarFilter[] | undefined
TupleFilter
Filters on combinations of multiple columns. Each entry in value is a tuple that must match across all fields. For example, fields: ["region", "country"], op: "in", value: [["Europe", "Germany"], ["Europe", "France"]] includes only rows where region/country is one of those exact pairs.
Prop
Type
type"tuple"Always "tuple" for tuple filters.
Type
"tuple"
fieldsarrayColumns that form the tuple (e.g. ["region", "country"]).
Type
string[]
opunion"in" includes matching tuples; "not_in" excludes them.
Type
"in" | "not_in"
valuearrayArray of tuples to match. Each inner array has one value per field, in the same order as fields.
Type
(string | number)[][]
Renderer
BaseSliceResult
Data required for the viewport defined by x0-x1 (columns) and y0-y1 (rows). The viewmodel decides which data to include. This is called a slice.
Prop
Type
numRowsnumberTotal number of rows in the viewmodel (not just the slice).
Type
number
numColsnumberTotal number of columns in the viewmodel (not just the slice).
Type
number
sliceNumRowsnumberNumber of rows in this slice.
Type
number
sliceNumColsnumberNumber of columns in this slice.
Type
number
columnFacets?arrayColumn facet values for the sliced columns, transposed from the viewmodel's storage. The viewmodel stores facets as colFacets[level][colIndex]; the slice transposes them to columnFacets[colIndex][level] (grouped per column).
Example - viewmodel with 2 levels, 4 columns:
colFacets = [["Q1","Q1","Q2","Q2"], ["revenue","cost","revenue","cost"]]Slice for columns 1-2:
columnFacets = [["Q1","cost"], ["Q2","revenue"]]Absent when the slice is empty.
Type
(string | null)[][] | undefined
data?arrayColumn-major data for the sliced range: data[colIndex][rowIndex]. Absent when the slice is empty.
Type
any[][] | undefined
PivotSliceResult
Extends BaseSliceResult.
Slice result for pivot grids. Extends BaseSliceResult with multi-level row facets.
Prop
Type
rowFacetsarrayRow facet values for the sliced rows, transposed from the viewmodel's storage. The viewmodel stores row facets as rowFacets[level][rowIndex]; the slice transposes them to rowFacets[rowIndex][level] (grouped per row). null means the value is the same as the row above (for merge/span rendering).
Example - viewmodel with 2 levels, 3 rows:
rowFacets = [["Europe",null,"North America"], ["Germany","France",null]]Slice for rows 0-2:
rowFacets = [["Europe","Germany"], [null,"France"], ["North America",null]]Type
(string | null)[][]
FlatSliceResult
Extends BaseSliceResult.
Slice result for flat/standard tables. Extends BaseSliceResult with single-level row facets and per-row metadata.
Prop
Type
rowFacetsarrayRow facet values for the sliced rows. Group rows have a string label (e.g. "USA"); data/leaf rows have null. Single level, so no transposition - same shape as the viewmodel's storage.
Type
(string | null)[]
rowMetaarrayDataViewport
Prop
Type
x0numberType
number
y0numberType
number
x1numberType
number
y1numberType
number
FacetData
type FacetData = (string | null)[][];An array of facet levels. Each level is an array of values across all columns (for column facets) or all rows (for row facets). null means the value is the same as the previous cell at that level (used for merge/span rendering).
FlatRowMeta
Prop
Type
depthnumberType
number
isLeafunionType
boolean
isExpandedunionType
boolean
GridDataViewModelOptions
Prop
Type
vTrackDefs?arrayType
VTrackDef<any>[] | undefined
facetDefs?objectType
{ row: Partial<FacetDef>[]; col: Partial<FacetDef>[]; axis: "row" | "col"; } | undefined
VTrackDef
Prop
Type
renderer?CellRenderer<T>Type
CellRenderer<T> | undefined
cellHeight?numberType
number | undefined
sampleData?TType
T | undefined
colSize?unionType
ColAutoSizeConfig | undefined
valueFormatter?ValueFormatter<T>Type
ValueFormatter<T> | undefined
ResolvedVTrackDef
Extends VTrackDef. The resolved form after the viewmodel normalizes options - renderer and colSize are guaranteed present.
Prop
Type
isCustomunionType
boolean
MetaState
Namespaced key-value store attached to the viewmodel. Persists across data updates and any lifecycle changes in the grid - use it as a general-purpose grid store. The namespace is typically the calling component's name, preventing key collisions when multiple components store state in the same metaState instance.
Prop
Type
setfunctionSets a value under namespace and key.
Type
(namespace: string, key: string, value: any) => void
getfunctionReturns all key-value pairs under namespace, or undefined if the namespace does not exist.
Type
(namespace: string) => Record<string, any> | undefined
clearfunctionClears a single key within namespace, or the entire namespace if key is omitted.
Type
(namespace: string, key?: string) => void
ColAutoSizeConfig
export interface IColAutoSize {
strategy: "max-cell" | "clamped-width" | "static";
excludeColumnFacets?: boolean;
}
export interface IColAutoSizeStrategyMaxCell extends IColAutoSize {
strategy: "max-cell";
}
// Fits container
export interface IColAutoSizeStrategyStatic extends IColAutoSize {
strategy: "static";
width: number;
unit: "%" | "fr" | "px";
}
export interface IColAutoSizeStrategyClampedWidth extends IColAutoSize {
strategy: "clamped-width";
maxWidthInPx?: number;
minWidthInPx?: number;
}
export type ColAutoSizeConfig =
| IColAutoSizeStrategyMaxCell
| IColAutoSizeStrategyClampedWidth
| IColAutoSizeStrategyStatic;FacetDef
Prop
Type
textstringType
string
facetField?unionType
string | null | undefined
headerRendererFacetHeaderRendererType
FacetHeaderRenderer
trackRendererFacetCellRenderer<string>Type
FacetCellRenderer<string>
meta?objectType
FacetMeta | undefined
pseudo?unionType
boolean | undefined
colSize?unionType
ColAutoSizeConfig | undefined
groupSchema?arrayType
DataSchema[] | undefined
valueFormatter?ValueFormatter<any>Type
ValueFormatter<any> | undefined
GridConfig
Configuration for the grid renderer. Pass a partial GridConfig to the Grid constructor; missing fields use defaultConfig.
Prop
Type
defaultCellHeightnumberHeight in pixels used for data rows when no VTrackDef.cellHeight override is set. Default: 19.
Type
number
defaultCellWidthnumberWidth in pixels used as the initial column width before auto-sizing measures actual content. Default: 50.
Type
number
overscannumberNumber of extra rows and columns rendered beyond the visible viewport in each direction. Higher values reduce blank flashes during fast scrolling but increase DOM node count. Default: 2.
Type
number
enableResizeUIunionWhen true, column facet cells render a drag handle on the right edge for interactive column resizing. Double-click the handle to auto-fit to content width. Default: true.
Type
boolean
fixturesobjectFixture classes to instantiate on each edge of the grid. The layout creates one instance per class and positions them in array order. See Fixtures.
Type
LayoutFixtureClasses
themestringName of the theme to apply. The layout resolves the theme via getTheme(name) and sets CSS custom properties on the grid container. Default: "light".
Type
string
columnAutosizingStrategyOnScrollunionControls how column widths update on scroll. "max-seen" keeps the widest measurement seen so far (columns only grow). "dynamic" re-measures every frame (columns can shrink when wide content scrolls out). Default: "max-seen".
Type
"dynamic" | "max-seen"
dataFetchDebounceMsnumberDebounce interval in milliseconds for the viewDataEmpty event. Prevents flooding the data source with fetch requests during fast scrolling. Default: 150.
Type
number
LayoutEvents
Events emitted by the layout engine and forwarded through the Grid instance.
type LayoutEvents = {
renderComplete: { x0: number; y0: number; x1: number; y1: number };
viewDataEmpty: { startRow: number; endRow: number };
viewModelDataChanged: { x0: number; y0: number; x1: number; y1: number };
"debug_perf:metrics": {
timeToRender: number;
renderCount: number;
nodesActive: number;
nodesAppendedInThisFrame: number;
nodesDeletedInThisFrame: number;
contentCellRerenderCount: number;
poolSize: number;
};
};GridEvents
Extends LayoutEvents with selection events. This is the event map for the Grid class.
type GridEvents = LayoutEvents & {
selectionAdded: { hash: string; fromRow: number; fromCol: number; toRow: number; toCol: number };
selectionRemoved: { hash: string; fromRow: number; fromCol: number; toRow: number; toCol: number };
};SelectionRule
interface SelectionRule {
id: number;
predicates: PredicateNode[];
terminal: TerminalOp;
}PredicateNode
type PredicateNode =
| { type: "facet"; predicate: FacetPredicate }
| { type: "cell"; predicate: CellPredicate };FacetPredicate
type FacetPredicate = (dim: string, dimVal: string | null, path: [string, string | null][]) => boolean;A function that tests whether a facet cell matches. dim is the dimension name, dimVal is the cell's value, and path is the ancestor facet values as [dimName, dimValue] pairs.
CellPredicate
type CellPredicate = (value: any) => boolean;A function that tests whether a data cell's value matches.
TerminalOp
type TerminalOp =
| { type: "prop"; props: SelectionProps }
| { type: "style"; fn: (container: HTMLElement) => void };SelectionProps
Prop
Type
cellRenderer?CellRenderer<any>Type
CellRenderer<any> | undefined
trackRenderer?FacetCellRenderer<string>Type
FacetCellRenderer<string> | undefined
colSize?unionType
ColAutoSizeConfig | undefined
valueFormatter?ValueFormatter<any>Type
ValueFormatter<any> | undefined
PivotDataViewModelParams
Output of PivotTableDataModel.getViewModelData. A fully reshaped 2D pivot grid ready for the renderer.
Prop
Type
dataarray2D grid of aggregated values. data[col][row] holds the value at column position col and row position row. null means no data exists for that cell (the combination was not observed in the source data).
Type
any[][]
columnFacetsFacetDataColumn facet levels. Each inner array holds values for one facet level. For cross("quarter", concat("revenue", "cost")), this has two dimension levels (quarter) plus a measure-name level.
Type
FacetData
rowFacets?FacetDataRow facet levels. Same structure as columnFacets but for the row axis. Absent when the row axis has no dimensions.
Type
FacetData | undefined
options?objectFacet metadata such as projection state for each facet level.
Type
GridDataViewModelOptions | undefined
schema?arrayThe original schema passed to the data model.
Type
DataSchema[] | undefined
metadata?Partial<object>Metadata for value cells, facets, and headers. Merged into the ViewModel on construction and updateData.
Type
Partial<ViewModelMetadata> | undefined
FlattenedDataViewModelParams
The view model output produced by StandardTableDataModel. Contains the flattened row data ready for the renderer.
Prop
Type
dataarrayColumn-major data arrays for the visible rows. Each inner array holds all values for one column - e.g. 3 rows with columns [name, age] is [["Alice", "Bob", "Carol"], [30, 25, 28]]. This data is always contiguous (no gaps) - only pages that form a contiguous block around the current scroll position are included. Column-major layout supports large datasets efficiently as the renderer can access and iterate a single column array without touching other columns.
Type
any[][]
columnFacetsFacetDataColumn header labels. The layout uses this to render hierarchical column headers - each level is an array of labels. For standard tables, there is only one level and all columns are leaf-level headers.
Type
FacetData
rowFacet?arrayRow facet values. When groupBy is active, some rows are group rows (showing a group label like "USA") and others are data/leaf rows. Group rows have their group value here (e.g. "USA"); leaf/data rows have null. The renderer uses this to display group row labels in a separate facet column on the left, visually distinguishing group headers from data rows. Only present when groupBy is non-empty.
Type
(string | null)[] | undefined
rowMeta?objectPacked row metadata byte array encoding depth, isLeaf, and isExpanded per row.
Type
Uint8Array<ArrayBufferLike> | undefined
options?objectRenderer options forwarded from setViewModelOptions.
Type
GridDataViewModelOptions | undefined
schema?arraytotalRows?numberTotal number of rows the data source has, including expanded children. This is larger than the rows in data since pages are lazy loaded - only a contiguous subset is present in data. The renderer uses this for scrollbar sizing and virtual scroll calculations.
Type
number | undefined
offsetTop?numberNumber of rows in the data source that precede the returned data block. Since pages are lazy loaded, the page cache can have holes - only a contiguous block around the current scroll position is included in data. offsetTop tells the renderer how many rows come before this block, so it can position the rendered rows correctly within the full virtual scroll area.
Type
number | undefined
metadata?Partial<object>Metadata for value cells, facets, and headers. Merged into the ViewModel on construction and updateData.
Type
Partial<ViewModelMetadata> | undefined