Data components
Group content, display sortable tables, and reveal controlled detail.
Section
Groups children under optional header and footer text.
Prop
Type
<Section header="Identity" footer="All fields are required.">
<TextField value={name} onChange={setName} />
</Section>Sections can appear in lists or ordinary layout containers. On Windows, rows nested inside a list section do not participate in the outer list's row selection.
Table
Tables receive serializable columns and rows. Cells are strings keyed by column.
Prop
Type
<Table
columns={[
{ key: 'name', label: 'Name' },
{ key: 'status', label: 'Status', sortable: false },
]}
rows={[
{ id: 'one', cells: { name: 'Aurora', status: 'Active' } },
]}
value={selection}
selectionMode="single"
sort={sort}
onChange={setSelection}
onSortChange={setSort}
/>The host never sorts rows. A header interaction requests a new SortDescriptor; the application sorts its data, provides the reordered rows, and echoes the descriptor.
On macOS 14.0 through 14.3, NatUI uses a list-based table fallback because the dynamic table API requires macOS 14.4.
DisclosureGroup
Shows or hides child content using a controlled Boolean value.
Prop
Type
<DisclosureGroup label="Details" value={expanded} onChange={setExpanded}>
<Text>Additional information</Text>
</DisclosureGroup>Disclosure state is always controlled. If React does not accept a native expansion change, NatUI corrects the host back to the current prop.