Skip to content

Start here

Data Table

Full-featured grid: sorting, filtering, tabs, inline editing, and per-cell source citations.

Full-featured grid: sorting, filtering, tabs, inline editing, and per-cell source citations.

Add it to an app

  1. Open the app builder and find Data Table in the component palette.
  2. Insert it into the intended region or container.
  3. Set its properties in the inspector. Use a literal for a fixed value or a binding for a value supplied by the app.
  4. Connect its events where the app should respond to a user gesture.
  5. Preview with representative data and save after resolving validation problems.

The type name in the builder’s code view is data_table.

Settings

SettingAccepted valueRequiredDefaultWhat it controls
Columns (columns)list of objectNo[]Supports expression bindings. The listed default is inserted when adding a new component.
align (columns[].align)"left" / "right"NoNot specified—
anchorKey (columns[].anchorKey)stringNoNot specified—
confidenceKey (columns[].confidenceKey)stringNoNot specified—
hidden (columns[].hidden)booleanNoNot specified—
key (columns[].key)stringYesNot specified—
label (columns[].label)stringNoNot specified—
pinned (columns[].pinned)booleanNoNot specified—
sortable (columns[].sortable)booleanNoNot specified—
type (columns[].type)"text" / "number" / "date" / "boolean"NoNot specified—
Data (data)list of objectNo[]Supports expression bindings. Rows to show; wins over windowed mode when non-empty. The listed default is inserted when adding a new component.
Dock ('bottom' — literal) (dock)"bottom"NoNot specifiedLiteral only; do not use an expression binding.
Server filter payload key (filterKey)stringNoNot specified—
Server filter payload value (filterValue)stringNoNot specifiedSupports expression bindings.
Table height (CSS length) (height)stringNo"28rem"Supports expression bindings. The listed default is inserted when adding a new component.
Highlighted row (source index) (highlightedRowIndex)integer or null; minimum 0NoNot specifiedSupports expression bindings.
Low-confidence threshold (0..1) (lowConfidenceBelow)number; minimum 0; maximum 1No0.75The listed default is inserted when adding a new component.
Open-table request (openTableRequest)object or nullNoNot specifiedSupports expression bindings.
columns (openTableRequest.columns)list of objectNoNot specified—
align (openTableRequest.columns[].align)"left" / "right"NoNot specified—
anchorKey (openTableRequest.columns[].anchorKey)stringNoNot specified—
confidenceKey (openTableRequest.columns[].confidenceKey)stringNoNot specified—
hidden (openTableRequest.columns[].hidden)booleanNoNot specified—
key (openTableRequest.columns[].key)stringYesNot specified—
label (openTableRequest.columns[].label)stringNoNot specified—
pinned (openTableRequest.columns[].pinned)booleanNoNot specified—
sortable (openTableRequest.columns[].sortable)booleanNoNot specified—
type (openTableRequest.columns[].type)"text" / "number" / "date" / "boolean"NoNot specified—
id (openTableRequest.id)stringYesNot specified—
label (openTableRequest.label)stringNoNot specified—
revision (openTableRequest.revision)numberYesNot specified—
Populating (run in flight) (populating)booleanNoNot specifiedSupports expression bindings.
Populating text (populatingText)stringNo"Generating rows…"The listed default is inserted when adding a new component.
Record type (windowed mode) (recordType)stringNo""The listed default is inserted when adding a new component.
Refresh token (refreshToken)string or nullNoNot specifiedSupports expression bindings. A new value reloads the active table tab's rows.
Imperative row landing (scrollToRow)integer or null; minimum 0NoNot specifiedSupports expression bindings. Source-row index to scroll to and ring.
Show filter row (showFilter)booleanNotrueSupports expression bindings. The listed default is inserted when adding a new component.
Initial sort direction (asc|desc) (sortDir)"asc" / "desc"No"asc"The listed default is inserted when adding a new component.
Initial sort column (sortKey)stringNoNot specifiedSupports expression bindings.
Data source id (windowed mode) (source)stringNo""The listed default is inserted when adding a new component.
Tabs (tabs)list of objectNoNot specifiedSupports expression bindings.
columns (tabs[].columns)list of objectNoNot specified—
align (tabs[].columns[].align)"left" / "right"NoNot specified—
anchorKey (tabs[].columns[].anchorKey)stringNoNot specified—
confidenceKey (tabs[].columns[].confidenceKey)stringNoNot specified—
hidden (tabs[].columns[].hidden)booleanNoNot specified—
key (tabs[].columns[].key)stringYesNot specified—
label (tabs[].columns[].label)stringNoNot specified—
pinned (tabs[].columns[].pinned)booleanNoNot specified—
sortable (tabs[].columns[].sortable)booleanNoNot specified—
type (tabs[].columns[].type)"text" / "number" / "date" / "boolean"NoNot specified—
data (tabs[].data)list of objectNoNot specified—
filterKey (tabs[].filterKey)stringNoNot specified—
filterValue (tabs[].filterValue)stringNoNot specified—
id (tabs[].id)stringYesNot specified—
label (tabs[].label)stringNoNot specified—
recordType (tabs[].recordType)stringNoNot specified—
source (tabs[].source)stringNoNot specified—
tableId (tabs[].tableId)stringNoNot specified—

Layout controls

Additional host-rendered controls: keepMounted. These control the surrounding component region rather than the record values.

Values available to bindings

ValueTypeInitial valueMeaning
activeCitationobject or nullnullThe cited cell's anchor bag plus a monotonic revision; null when uncited.
activeTabIdstring or nullnullThe active tab, in tabs mode.
filterActivebooleanfalseA filter query is applied.
openTabIdslist of string[]Open tab ids: the authored prefix, then runtime tabs.
rowsLoadedinteger0Rows loaded so far.
rowsTotalinteger or nullnullAdvisory total, when known.
selectedCellobject or nullnullThe selected cell {rowIndex, columnKey, value}.
selectedRowobject or nullnullThe selected row.
selectedRowIndexinteger or nullnullThe selected row's source index.
selectedTableCellobject or nullnullA saved table's selected cell: table/row identity and its exact value.
sortedByobject or nullnullThe active sort {key, dir}.
status"idle" / "loading" / "ready" / "error" / "unavailable""idle"Read state of the rows.

Refer to these values through components.<component-id>.<value> in a binding. Use the identifier assigned to this instance of Data Table, not the component type name.

Events

  • onCellSelect — A cell was selected.

  • onCite — The active citation changed (null included).

  • onRowSelect — A row was selected.

  • onSortChange — The sort changed.

  • onTabChange — Another tab became active.

  • onTabClose — A tab was closed.

  • onTableCellChange — The selected saved-table cell changed.

Connect only the actions the app needs. An event can fetch results, run an enabled data source, set state, update another component, show a notification, or navigate where supported.

Keyboard and accessible labels

Accessible label source: Data table.

Updates are announced through the component’s live status region.

Example: Bound rows with typed columns

SettingExample value
columns[{"key":"url","label":"URL"},{"key":"count","label":"Count","type":"number"}]
data"{{ dataSources.checks.data || [] }}"
showFiltertrue

Example: Tables-workbench grid docked at the bottom

SettingExample value
dock"bottom"
keepMountedtrue
openTableRequest"{{ app.activeOpenRequest }}"
populating"{{ dataSources.populate.isRunning }}"
refreshToken"{{ dataSources.populate.lastRunAt }}"

When onRowSelect occurs, the example performs:

  • setStateValue with {"key":"viewerOpen","value":true}

If it is empty or unavailable

Check the source binding, the selected item, and the app’s access. A hosted document, table, review, or storage component needs the corresponding app capability; an offline preview cannot supply live private data. A source running with no results is different from an invalid binding. Inspect the app’s workflow and data source before changing the presentation.