Skip to content

React table full-width and separator rows

Try it live: open a Mantine starter in StackBlitz — add extraRows([...]) from @adapttable/mantine/extra-rows to features. Other UI kits →

See it working: the all-options demo — turn Extra attached to a person on.

A separator is a thin rule. A full-width row is one cell that spans the table. Both are host-injected slots in the same kind-tagged list grouping already uses. Without the extraRows feature nothing is inserted.

import { DataTable } from "@adapttable/mantine";
import { extraRows } from "@adapttable/mantine/extra-rows";
<DataTable
data={rows}
columns={columns}
rowKey={(row) => row.id}
features={[
extraRows([
{ key: "s", kind: "separator", beforeRowId: "2" },
{
key: "note",
kind: "fullWidth",
render: () => <em>Shipped Friday.</em>,
},
]),
]}
/>;

beforeRowId is a data-row id. Omit it to append after the last data row. Several extras that share a target keep the host’s order. A named extra stays in front of that person through drag-reorder and pin — it is its own full-width row, with its own height, not folded into the person below. When a Team (or any) row span would paint through that extra, the extra sits on top of the spanned column so the note stays whole. The extra uses the backgroundColor / background that rowAppearance({ rowStyle }) gives that person (light and dark are whatever you passed) — AdaptTable does not pick a colour of its own.

features={[
extraRows([
{
key: "note",
kind: "fullWidth",
beforeRowId: ada.id,
render: () =>
`Attached to ${ada.name} — drag or pin them and this extra comes along.`,
},
]),
]}

The slots join the grouping entry list when grouping is on, so they window with the groups. On a flat or tree table they splice into the rendered body. Mobile cards keep the same slots: a rule between cards, or a full-width note.

Extras are content, not table state — nothing goes in the URL or a saved view.