Display
Timeline
An ordered list dressed as a timeline: dots, connectors, and honest time elements.
Shipped the combobox
Planted, watered, and released into the wild.
Wrote the docs
Every prop pressed neatly, like flowers in a notebook.
Broke the build, briefly
A rogue semicolon. We do not speak of it.
Show codeHide code
import {
Timeline,
TimelineConnector,
TimelineContent,
TimelineDot,
TimelineItem,
TimelineTime,
TimelineTitle,
} from "@/registry/lilt/ui/timeline";
export default function TimelineDemo() {
return (
<Timeline className="w-full max-w-sm">
<TimelineItem>
<TimelineDot variant="mint" />
<TimelineConnector />
<TimelineContent>
<TimelineTitle>Shipped the combobox</TimelineTitle>
<TimelineTime dateTime="2026-07-01">July 1</TimelineTime>
<p className="text-sm leading-relaxed text-[var(--lilt-text-muted)]">
Planted, watered, and released into the wild.
</p>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineDot />
<TimelineConnector />
<TimelineContent>
<TimelineTitle>Wrote the docs</TimelineTitle>
<TimelineTime dateTime="2026-07-08">July 8</TimelineTime>
<p className="text-sm leading-relaxed text-[var(--lilt-text-muted)]">
Every prop pressed neatly, like flowers in a notebook.
</p>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineDot variant="danger" />
<TimelineContent>
<TimelineTitle>Broke the build, briefly</TimelineTitle>
<TimelineTime dateTime="2026-07-15">July 15</TimelineTime>
<p className="text-sm leading-relaxed text-[var(--lilt-text-muted)]">
A rogue semicolon. We do not speak of it.
</p>
</TimelineContent>
</TimelineItem>
</Timeline>
);
}Installation
npx shadcn@latest add @lilt/timelineAccessibility
- An ordered list under the hood — item count and position come free for screen readers.
- Dates are real time elements with dateTime; dots and connectors are aria-hidden decoration.