Text & icons
Headings, body text, inline emphasis, formatted values and icons.
Title #
Headings with a separate visual size and outline level.
Title #
Section title. order picks the semantic level and size only the look, so a small title never breaks the heading outline.
Project settings
<Title order={3}>
Project settings
</Title>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Heading text. | ||
order | HeadingOrder | 3 | Heading level (<h1>–<h6>) for the document outline. Default 2. | |
size | HeadingOrder | Visual size 1–6 (1 is largest), independent of the level. Default: order, else 3. | ||
spaced | boolean | Keep the normal gap before a following Subtitle. |
HeadingOrder
type HeadingOrder = 1 | 2 | 3 | 4 | 5 | 6;Subtitle #
Secondary line under a title.
Manage domains, builds and access.
<Subtitle>Manage domains, builds and access.</Subtitle>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Subtitle text. | ||
order | HeadingOrder | 5 | Render as a heading at this level; by default a subtitle is a <p>. | |
size | HeadingOrder | 3 | Visual size 1–6. Default 5. |
HeadingOrder
type HeadingOrder = 1 | 2 | 3 | 4 | 5 | 6;Heading #
Section heading whose level can change after mount.
Team members
<Heading level={3}>
Team members
</Heading>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Heading text. | ||
level | 1 | 2 | 3 | 2 | Heading level (h1–h3). |
Also accepts the shared props: pass-through attributes, class, style, classes, styles, unstyled.
Text & prose #
Body text and long-form content.
Text #
Body text.
Last deployed 4 minutes ago by Ada.
<Text muted>
Last deployed 4 minutes ago by Ada.
</Text>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
as | "div" | "p" | "span" | Element to render; fixed at mount. | ||
children | content | Text content. | ||
danger | boolean | Danger colour, e.g. for an inline error. | ||
muted | boolean | Secondary (muted) colour. |
Prose #
Typographic container for rich text (headings, paragraphs, lists, links), e.g. rendered Markdown.
Release notes
This release focuses on accessibility: every overlay now traps focus and restores it on close.
- Keyboard support for menus and trees
- Reduced-motion aware transitions
<Prose>
<h3>Release notes</h3>
<p>
This release focuses on <a href="#a11y">accessibility</a>: every overlay now traps focus
and restores it on close.
</p>
<ul>
<li>Keyboard support for menus and trees</li>
<li>Reduced-motion aware transitions</li>
</ul>
</Prose>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Long-form content (headings, paragraphs, lists, links, code). | ||
measure | boolean | true | Cap the line length for readability (default true). |
Article #
Article container with readable text styles.
Designing a kit-wide customization system
Every component forwards attributes and exposes named slots…
<Article>
<ArticleTitle order={3}>Designing a kit-wide customization system</ArticleTitle>
<ArticleMeta>Ada Lovelace · Sep 12, 2026 · 6 min read</ArticleMeta>
<p>Every component forwards attributes and exposes named slots…</p>
</Article>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | ArticleTitle, ArticleMeta and the article body. |
Parts
ArticleTitle #
Article heading.
Designing a kit-wide customization system
<Article>
<ArticleTitle order={3}>
Designing a kit-wide customization system
</ArticleTitle>
</Article>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Content of this part. | ||
order | HeadingLevel | 1 | Heading level, to fit the page outline. Default 1. |
HeadingLevel
type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;ArticleMeta #
Article byline / metadata line.
Release 2.4
<Article>
<ArticleTitle order={3}>Release 2.4</ArticleTitle>
<ArticleMeta>Grace Hopper · Sep 1, 2026</ArticleMeta>
</Article>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Content of this part. |
Quote #
Block quote with an optional citation.
The most dangerous phrase in the language is “we've always done it this way.”Grace Hopper
The best way to predict the future is to invent it.Alan Kay
<Stack gap="1rem">
<Quote cite="Grace Hopper">
The most dangerous phrase in the language is “we've always done it this way.”
</Quote>
<Quote variant="plain" cite="Alan Kay">
The best way to predict the future is to invent it.
</Quote>
</Stack>Slots: root body cite
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | The quotation. | ||
cite | string | Who said it (shown under the quote). | ||
variant | "soft" | "plain" | "soft" | "soft" (default) adds a tinted background; "plain" keeps only the accent rule. |
Also accepts the shared props: pass-through attributes, class, style, classes, styles, unstyled.
Anchor #
Text link; external opens a new tab with rel="noreferrer noopener".
<Anchor href="/docs">
Read the docs
</Anchor>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
href | string | yes | Link target. | |
children | content | Link text. | ||
external | boolean | Open in a new tab (adds rel="noreferrer noopener"). |
Also accepts the shared props: pass-through attributes, class, style, classes, styles, unstyled.
Mark & highlight #
Mark a span you choose, or every match of a search term.
Mark #
Highlight text you choose (<mark>, highlighter-yellow by default). To mark every match of a query inside a string, use Highlight.
Deploys run on every push to main.
<Text>
Deploys run on <Mark>every push</Mark> to main.
</Text>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Text to highlight. | ||
tone | "accent" | "warning" | "success" | "warning" | Highlight colour. |
Highlight #
Mark every case-insensitive match of highlight inside text, e.g. search results. To mark a span you choose, use Mark.
<Highlight text="Deploy marketing-site to production" highlight="deploy" />Slots: root mark
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
highlight | string | string[] | yes | Term(s) to mark wherever they occur. | |
text | string | yes | The full text to show. | |
tone | "accent" | "warning" | "success" | "warning" | Mark colour (default "warning", highlighter yellow), as on Mark. |
Also accepts the shared props: pass-through attributes, class, style, classes, styles, unstyled.
Truncate & leader #
Fit text into limited space.
Truncate #
Ellipsis after lines lines.
<Truncate style={{ "max-width": "22rem" }} lines={2}>
The customization system covers every component: attributes are forwarded to the host
element, classes and styles target named slots, unstyled drops the built-in look, and
configureUI sets app-wide defaults. Text past the second line is cut with an ellipsis.
</Truncate>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Text to truncate. | ||
lines | number | 1 | Number of lines shown before the ellipsis. |
Leader #
UIkit-style dotted leader row.
<Leader label="Espresso" value="$3.50" />Slots: root dots label value
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
label | content | yes | Text on the left. | |
value | content | yes | Text on the right; dots fill the space between. |
Also accepts the shared props: pass-through attributes, class, style, classes, styles, unstyled.
Formatted values #
Numbers, relative times and countdowns.
NumberFormatter #
Formats a number with separators, decimals, prefix and suffix.
<NumberFormatter value={1234567.891} decimalScale={2} />| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
value | number | yes | Number to format. | |
decimalScale | number | 0 | Fixed number of decimals. | |
prefix | string | "" | Text before the number, e.g. $. | |
suffix | string | "" | Text after the number, e.g. %. | |
thousandSeparator | string | "," | Character between thousands groups. |
RelativeTime #
Relative time such as "5 minutes ago", with the full date in title.
<RelativeTime value={Date.now() - 5 * 60_000} />| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
value | number | yes | Absolute timestamp (ms). |
Countdown #
Live countdown.
<Countdown to={Date.now() + 3 * 86_400_000} />Slots: root suffix unit value
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
to | number | yes | Absolute target timestamp (ms). | |
units | { d: string; h: string; m: string; s: string; } | Unit suffixes (default d/h/m/s). |
Also accepts the shared props: pass-through attributes, class, style, classes, styles, unstyled.
VisuallyHidden #
Screen-reader-only text.
<Button variant="ghost" onClick={() => {}}>
★<VisuallyHidden>Add to favourites</VisuallyHidden>
</Button>| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
children | content | Text read by screen readers but not shown. |
Also accepts the shared props: pass-through attributes, class, style, classes, styles, unstyled.
Icon #
The built-in icon set.
Icon #
Built-in SVG icon.
<Icon name="bell" />| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
name | IconName | yes | Which built-in icon to draw. | |
label | string | Accessible name; without it the icon is decorative (aria-hidden). | ||
size | number | "sm" | "md" | "lg" | sm / md / lg, or a size in pixels. |
IconName — Material Design Icons path names used by <Icon />.
type IconName = | "check" | "x" | "plus" | "minus" | "search" | "user" | "users" | "settings" | "menu" | "home" | "heart" | "star" | "bell" | "mail" | "calendar" | "clock" | "edit" | "trash" | "copy" | "download" | "upload" | "link" | "external" | "info" | "warning" | "error" | "success" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-left" | "arrow-right" | "eye" | "eye-off" | "eye-outline" | "lock" | "unlock" | "filter" | "more" | "close" | "spinner" | "sun" | "moon" | "play" | "pause" | "refresh" | "share" | "image" | "file" | "folder" | "zap" | "phone" | "git" | "code";IconBadge #
Colored circular/square icon badge.
<IconBadge name="zap" tone="accent" />Slots: root icon
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
name | IconName | yes | Which built-in icon to draw. | |
size | "sm" | "md" | "lg" | "md" | Badge size. | |
tone | "accent" | "warning" | "success" | "danger" | "muted" | "accent" | Colour of the icon and its tinted background. |
IconName — Material Design Icons path names used by <Icon />.
type IconName = | "check" | "x" | "plus" | "minus" | "search" | "user" | "users" | "settings" | "menu" | "home" | "heart" | "star" | "bell" | "mail" | "calendar" | "clock" | "edit" | "trash" | "copy" | "download" | "upload" | "link" | "external" | "info" | "warning" | "error" | "success" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-left" | "arrow-right" | "eye" | "eye-off" | "eye-outline" | "lock" | "unlock" | "filter" | "more" | "close" | "spinner" | "sun" | "moon" | "play" | "pause" | "refresh" | "share" | "image" | "file" | "folder" | "zap" | "phone" | "git" | "code";Also accepts the shared props: pass-through attributes, class, style, classes, styles, unstyled.