Component reference
ListRow
One entry in a ListGroup, or alone as a summary.
Preview
ListRow has no story of its own; this one draws it as part of PageHeader.
Page header, cards and grouped rows
Shows each public component's props and slots separately; does not assemble an application page.
render: () => (
<Stack>
<PageHeader
title="Example page header"
description="Component description slot"
leading={<Icon name="folder" />}
actions={<Button size="small">Action</Button>}
/>
<ResourceCard
title="Example resource"
subtitle="Resource category"
description="The caller provides the description."
icon={<Icon name="folder" />}
/>
<ResourceCard
title="Disabled resource"
tone="muted"
description="Component example in the disabled state."
/>
<ListRow
tone="accent"
title="Summary row"
tags={<Tag tone="accent">Selected</Tag>}
description="Standalone item"
/>
<ListGroup>
<ListRow title="First item" description="The caller provides the content" />
<ListRow title="Expanded item" expanded>
<p>Expanded content slot</p>
</ListRow>
</ListGroup>
</Stack>
)Installation
bun add meowtail
Usage
Taken from the examples on this page.
import { ListRow } from "meowtail";
<ListRow
tone="accent"
title="Summary row"
tags={<Tag tone="accent">Selected</Tag>}
description="Standalone item"
/>Examples
Other stories that draw ListRow.
Documentation page with sections
One content page inside a host region: identity, page tools, a status row and the section rhythm. The outer Container stands in for the host shell's page area; Page itself owns no viewport and no scrolling.
render: () => (
<Container width="page">
<Page
eyebrow="Guide · Composition"
title="Build a page from regions"
description="Page arranges the page identity, optional tools and the content rhythm; Section names one part of that content and keeps its heading level."
actions={[
<Button variant="outline">Copy page link</Button>,
<Button variant="quiet">Edit this page</Button>,
]}
toolbar={
<Toolbar label="Page tools">
<Button variant="quiet" size="small">
<Icon name="list-checks" />
Filters
</Button>
<Button variant="quiet" size="small">
<Icon name="list" />
Outline
</Button>
</Toolbar>
}
notice={
<Alert
layout="bar"
tone="info"
actions={
<Button variant="quiet" size="small">
View source
</Button>
}
>
This guide is generated from the authoring templates; only the local controls run here.
</Alert>
}
>
<Section title="Overview" description="What the two compositions own.">
<p>
The page owns the identity block and the spacing between its sections; each section owns
one titled region. Both arrangements compose primitives that already exist, so the page
keeps one visual language instead of starting another one.
</p>
</Section>
<Section
title="Compose the identity"
description="Eyebrow, title, description and actions form one block."
actions={
<Button variant="quiet" size="small">
Open example
</Button>
}
>
<p>
PageHeader renders the h1 and its supporting copy. The eyebrow names the area the page
belongs to, and the actions act on the page rather than on one section.
</p>
<ListGroup>
<ListRow
title="Eyebrow"
description="A small label for the area the page belongs to."
status="Optional"
/>
<ListRow
title="Actions"
description="Controls that act on the whole page, aligned with the title."
/>
<ListRow
title="Notice"
description="A status row between the identity and the content."
status={[<Badge tone="accent">Current</Badge>]}
/>
</ListGroup>
</Section>
<Section
title="Keep one section rhythm"
description="Sections stack at the page's spacing step."
actions={
<Button variant="quiet" size="small">
Reset
</Button>
}
footer="A nested section steps down one heading level."
variant="card"
>
<p>
The card variant wraps the same section in the existing Card surface, so a card section
and a plain section stay one visual language.
</p>
<Section title="Nested section">
<p>
A section inside a page renders h2; a section nested in another section renders h3.
The heading level comes from the surrounding region rather than from the caller.
</p>
</Section>
</Section>
<Section title="Escapes stay available" description="Custom chrome replaces identity only.">
<p>
A host that already renders its own header passes the header slot: the toolbar, notice
and content stay, and the identity block is replaced rather than duplicated. Genuinely
custom regions can still drop to PageFrame, Card or a layout primitive.
</p>
</Section>
</Page>
</Container>
)Text, indicator, and page slots
render: () => (
<SchemePair>
{(scheme) => (
<Stack gap="relaxed">
<Inline gap="normal">
<Status state="processing" label="In progress" />
<Status state="returned" label="Run returned" />
<Status state="warning" label="Waiting for answer" />
<Status state="danger" label="Connection failed" />
<Status state="unknown" label="Status unconfirmed" />
</Inline>
<ListGroup>
<ListRow
title="Model source"
description="Choose an executable model connection"
status={<Status state="success" label="In use" />}
actions={
<Button size="small" variant="quiet">
Configure
</Button>
}
/>
<ListRow
title="Local service"
status={<Status state="unknown" label="No version yet" />}
/>
</ListGroup>
<ResourceCard
title="Message extensions"
subtitle="Channel"
status={<Status state="success" label="Enabled" />}
actions={<Button size="small">View settings</Button>}
/>
<Status
state="danger"
label="Connection failed for development-workspace-with-a-long-identifier; retry after checking its configuration."
/>
<Field label="Connection name" htmlFor={`status-connection-${scheme}`}>
<Input id={`status-connection-${scheme}`} value="Development workspace" />
</Field>
</Stack>
)}
</SchemePair>
)API reference
Children open under the row when expanded.
Props
| Prop | Type | Default |
|---|---|---|
titleRequired | Child | – |
tagsTags beside the title, such as "CLI" or "Default". | Child | – |
description | Child | – |
statusA state in words with its dot; the row's only status. | Child | – |
actions | Child | – |
tone"accent" is the row the reader should notice first, such as the default. | "default" | "accent" | "default" |
expandedOpen content under the row, such as its editor. Children render here. | boolean | false |
Also takes className, children and the attributes and events of its root element.
DOM parts
rootlinecopyheadingtitletagsdescriptionstatusactionspanel
Registry
The component is registered as list-row in the meowtail component registry.