Content & Data
Timeline
Timeline is a vertical, chronological event list built on Content/Timeline Item rows — Default outlined-ring or Highlighted solid-dot markers, connector suppression purely positional.
Composed from Timeline Item rows — no top-level variants of its own
- React last updated
- 2026-07-19
- Documentation last updated
- 2026-07-19
- Accessibility target
- WCAG 2.2 AA (target)
- Version
- 0.1.0-beta
Known open questions
- Exact marker/connector pixel sizing, using one shared marker color across both states, and the Timestamp/Description secondary-text token choice are this implementation's own decisions where the given facts didn't specify them.
- No truncation is applied anywhere (Title, Timestamp, or Description) — Alert and Card don't truncate their titles either, and Figma's own reference shows the Description wrapping, not truncating, at 220px. List Item does truncate, but its single-line row density isn't comparable to Timeline's larger content blocks.
- An empty data array renders nothing (null) — no other collection component in this codebase (Table, Tree View, Bar Chart, Line Chart) has an established empty-state convention to follow instead.
Purpose
Anatomy
Variants and states
When to use
When not to use
Accessibility
Keyboard behavior
Common mistakes
Properties
Why is connector visibility based on position, not state?
How does the connector reach the next item's marker when a description is long?
Why no truncation on Title, Timestamp, or Description?
What happens with an empty data array?
Tokens used
Component API
| Prop | Type | Default | Description |
|---|---|---|---|
| data | { title: string; timestamp: string; description: string; state?: "default" | "highlighted" }[] | — | Chronological list of events, in display order. state defaults to "default". |
React example
import { Timeline } from "@/components/ui";
const events = [
{ title: "Order placed", timestamp: "Jan 3, 9:14 AM", description: "Order #48213 received." },
{
title: "Payment confirmed",
timestamp: "Jan 3, 9:16 AM",
description: "Charge captured successfully.",
state: "highlighted",
},
{ title: "Delivered", timestamp: "Jan 6, 2:41 PM", description: "Left at front door." },
];
export function Example() {
return <Timeline data={events} />;
}