https://framer.com/m/TableX-CmtYcu.js

Io / UI Basics / TableX

TableX

TableX takes a pasted spreadsheet or a JSON array and renders it as a themed table. Sorting, selection, sticky headers and per-column render types are props, not markup — and every colour below resolves from the project tokens, so the table follows light and dark mode.

Data-driven31 controlssort · select · sticky

Examples

Live specimens for every control the component exposes.

Default

Rows in, table out. The data below is TableX’s own control list, so the page documents itself.

PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.
PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.

Selection

selectable adds a checkbox column and a select-all box in the header.

PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.
PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.

Sticky header and scroll

scrollable gives the table its own scroll area; stickyHeader keeps the labels in place while the body moves.

PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.
shadowshadowBox shadow on the table container.
cellPaddingnumberPadding inside every cell, 4–32.
fontSizenumberCell text size, 10–24.
headerFontSizenumberHeader text size, 10–20.
defaultSortKeystringColumn key sorted on first render.
defaultSortDirectionenumNone, asc or desc for that initial sort.
emptyStateTextstringMessage shown when there are no rows.
radiusnumberCorner radius of the table container.
backgroundcolorTable container background.
headerBackgroundcolorHeader row background.
headerHovercolorHeader background while hovered.
headerTextcolorHeader label colour.
rowHovercolorRow background while hovered.
rowSelectedcolorBackground of a selected row.
rowSelectedHovercolorBackground of a selected row while hovered.
cellTextcolorCell text colour.
bordercolorRules between rows and around the table.
sortIconcolorSort indicator colour.
emptyTextcolorEmpty-state text colour.
badgeBGcolorDefault background for badge cells.
badgeTextcolorDefault text colour for badge cells.
currencyTextcolorText colour for currency cells.
percentageTextcolorText colour for percentage cells.

Render types

columnsConfig sets a renderType per column. Here the type column renders as a badge.

PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.
PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.

Density

cellPadding and fontSize carry the whole density change — the same rows, tighter.

PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.

cellPadding 16 · fontSize 14

PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.

cellPadding 8 · fontSize 13

Empty state

With no rows the table keeps its frame and shows emptyStateText instead of collapsing.

PropTypeBehaviour
No props match this filter
PropTypeBehaviour
No props match this filter

Props

The controls exposed on the instance panel.

PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.
shadowshadowBox shadow on the table container.
cellPaddingnumberPadding inside every cell, 4–32.
fontSizenumberCell text size, 10–24.
headerFontSizenumberHeader text size, 10–20.
defaultSortKeystringColumn key sorted on first render.
defaultSortDirectionenumNone, asc or desc for that initial sort.
emptyStateTextstringMessage shown when there are no rows.
radiusnumberCorner radius of the table container.
backgroundcolorTable container background.
headerBackgroundcolorHeader row background.
headerHovercolorHeader background while hovered.
headerTextcolorHeader label colour.
rowHovercolorRow background while hovered.
rowSelectedcolorBackground of a selected row.
rowSelectedHovercolorBackground of a selected row while hovered.
cellTextcolorCell text colour.
bordercolorRules between rows and around the table.
sortIconcolorSort indicator colour.
emptyTextcolorEmpty-state text colour.
badgeBGcolorDefault background for badge cells.
badgeTextcolorDefault text colour for badge cells.
currencyTextcolorText colour for currency cells.
percentageTextcolorText colour for percentage cells.
PropTypeBehaviour
dataSourcestringTSV/CSV paste or a JSON array — the rows themselves.
columnsConfigstringJSON array overriding per-column label, align, sortable and renderType.
selectablebooleanTurns on row selection checkboxes.
sortablebooleanLets a header click sort that column.
animatedbooleanAnimates row entry and exit when the data changes.
layoutenumAuto sizes columns to content; Fixed splits width evenly.
scrollablebooleanWraps the table in its own scroll area.
stickyHeaderbooleanPins the header row while the body scrolls.
shadowshadowBox shadow on the table container.
cellPaddingnumberPadding inside every cell, 4–32.
fontSizenumberCell text size, 10–24.
headerFontSizenumberHeader text size, 10–20.
defaultSortKeystringColumn key sorted on first render.
defaultSortDirectionenumNone, asc or desc for that initial sort.
emptyStateTextstringMessage shown when there are no rows.
radiusnumberCorner radius of the table container.
backgroundcolorTable container background.
headerBackgroundcolorHeader row background.
headerHovercolorHeader background while hovered.
headerTextcolorHeader label colour.
rowHovercolorRow background while hovered.
rowSelectedcolorBackground of a selected row.
rowSelectedHovercolorBackground of a selected row while hovered.
cellTextcolorCell text colour.
bordercolorRules between rows and around the table.
sortIconcolorSort indicator colour.
emptyTextcolorEmpty-state text colour.
badgeBGcolorDefault background for badge cells.
badgeTextcolorDefault text colour for badge cells.
currencyTextcolorText colour for currency cells.
percentageTextcolorText colour for percentage cells.

Usage

Guidance carried over from the component definition.

Reach for TableX

Structured rows that need sorting or row selection.

The data arrives as pasted CSV/TSV or a JSON array.

Columns need badge, currency or percentage rendering.

A long table needs a sticky header inside its own scroll area.

Reach for something else

Cells need inline editing or input controls.

The content is not really tabular.

You need grouping, tree rows or pagination.

Io — UI Basics

Every table above is a live TableX instance rendering this component’s own control list. Colour, type and radius resolve from the project theme tokens.

io

An experiment in what a design system becomes when AI can consume it.

© 2026 io

Contact me

Create a free website with Framer, the website builder loved by startups, designers and agencies.