Typography

Work in progress
Heading and Text components for all typographic needs.

Heading

Four levels mapping to h1h4. The level prop controls both the rendered tag and the visual size.

Giant Hairball Has Perfect Grammar, Linguists Say

Weather Likely To Become Different Before Changing

Tree Stuck In Cat; Firefighters Baffled

The llama is a quadruped

<Stack space="small">
<Heading level="1">Giant Hairball Has Perfect Grammar, Linguists Say</Heading>
<Heading level="2">Weather Likely To Become Different Before Changing</Heading>
<Heading level="3">Tree Stuck In Cat; Firefighters Baffled</Heading>
<Heading level="4">The llama is a quadruped</Heading>
</Stack>

Visual size override

The size prop overrides the visual size independently of the semantic level. Useful when accessibility or SEO requires a specific heading rank but the design calls for a different visual treatment — for example, a page with a single h1 that should appear smaller than its default size. Letter-spacing is preserved regardless of the size override.

Level 1, default size

Level 1, size xx-large

Level 1, size x-large

<Stack space="small">
<Heading level="1">Level 1, default size</Heading>
<Heading level="1" size="xx-large">Level 1, size xx-large</Heading>
<Heading level="1" size="x-large">Level 1, size x-large</Heading>
</Stack>

Weights

normal (400)

medium (500)

semibold (600)

bold (700)

Text

Eight sizes from x-small to display. Defaults to standard (16px) rendered as a span.

x-small:Weather Likely To Become Different Before Changingsmall:Weather Likely To Become Different Before Changingstandard:Weather Likely To Become Different Before Changinglarge:Weather Likely To Become Different Before Changingx-large:Weather Likely To Become Different Before Changingxx-large:Weather Likely To Become Different Before Changingxxx-large:Weather Likely To Become Different Before Changingdisplay:Weather Likely To Become Different Before Changing
<Stack space="small">
<Text size="x-small">x-small:Weather Likely To Become Different Before Changing</Text>
<Text size="small">small:Weather Likely To Become Different Before Changing</Text>
<Text size="standard">standard:Weather Likely To Become Different Before Changing</Text>
<Text size="large">large:Weather Likely To Become Different Before Changing</Text>
<Text size="x-large">x-large:Weather Likely To Become Different Before Changing</Text>
<Text size="xx-large">xx-large:Weather Likely To Become Different Before Changing</Text>
<Text size="xxx-large">xxx-large:Weather Likely To Become Different Before Changing</Text>
<Text size="display">display:Weather Likely To Become Different Before Changing</Text>
</Stack>

Weights

normal (400)medium (500)semibold (600)bold (700)

Tones

neutralsecondarylinkbrandcriticalcautionpositiveinfopromote
<Stack space="small">
<Text tone="neutral">neutral</Text>
<Text tone="secondary">secondary</Text>
<Text tone="link">link</Text>
<Text tone="brand">brand</Text>
<Text tone="critical">critical</Text>
<Text tone="caution">caution</Text>
<Text tone="positive">positive</Text>
<Text tone="info">info</Text>
<Text tone="promote">promote</Text>
</Stack>

Alignment

Aligned leftAligned centerAligned right

Font family

Sans-serif is the default. Use family="mono" for fixed-width content like code, measurements, or numeric data where column alignment matters.

Sans-serif - Giant Hairball Has Perfect Grammar, Linguists SayMono - space.xx-large = 3remMono - fontSize.standard = 1rem / 16pxMono medium - const result = compute(a, b)
<Stack space="small">
<Text>Sans-serif - Giant Hairball Has Perfect Grammar, Linguists Say</Text>
<Text family="mono">Mono - space.xx-large = 3rem</Text>
<Text family="mono">Mono - fontSize.standard = 1rem / 16px</Text>
<Text
family="mono"
weight="medium">
Mono medium - const result = compute(a, b)
</Text>
</Stack>

Element types

The element prop controls the rendered HTML tag without changing the visual style.

Default: span

Rendered as: p

Text styled like heading level 2