- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Attachment
- Avatar
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- Context Menu
- Desktop Window
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Field
- Frame
- Heading
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Live Waveform
- Marker
- Menubar
- Message
- Message Scroller
- Meter
- Meter Ring
- Native Select
- Navigation Menu
- NumberCount
- Pagination
- Popover
- Progress
- Progress Ring
- Radio Group
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Timeline
- Toast
- Toggle
- Toggle Group
- Tooltip
Project Initialized
Beta Release
Official Launch
import {
Timeline,
TimelineContent,Examples#
With Left-Aligned Dates#
AI Engine Integration
Collaborative Editing
Visual Theme Builder
Enterprise Security
import {
Timeline,
TimelineContent,With Custom Indicators#
Order Placed
Payment Confirmed
Shipped
Delivered
import { IconCheck } from "@tabler/icons-react"
import {With Icons#
Forked Repository
Pull Request Submitted
Comparing Branches
Merged Branch
import {
IconGitCompare,
IconGitFork,Alternating Layout#
Seed Funding
Product MVP
First Client
Series A
Global Expansion
import {
Timeline,
TimelineDate,Horizontal Orientation#
Source Code Checkout
12sSuccessfully fetched latest changes from the main branch.
Dependency Installation
1m 45sAll npm packages installed and cached for future builds.
Unit & Integration Tests
RunningRunning 142 test suites across the entire codebase...
Production Build
PendingOptimizing assets and generating static site pages.
import { IconCheck, IconChevronRight, IconCircle } from "@tabler/icons-react"
import { Badge } from "@/components/ui/badge"Horizontal with Top Indicators#
import {
Timeline,
TimelineContent,Customized Timeline#
Planning
Design
Development
import {
Timeline,
TimelineContent,Compact Roadmap#
Kickoff
Discovery
Implementation
"use client"
import {Activity Feed#
Production Deploy
successStaging Deploy
successPreview Deploy
failedProduction Deploy
successimport { IconCheck, IconX } from "@tabler/icons-react"
import { Badge } from "@/components/ui/badge"Highlighting the Current Step#
animate marks the step that is running right now — ping sends a halo out
from the indicator, pulse fades it in and out. Both fire only where
step === value, so setting the prop once inside a .map() is enough, and both
sit behind motion-safe so a reader who prefers reduced motion sees a still
indicator.
ping
Set up job
Run actions/checkout@v4
Run bun test
Post job cleanup
pulse
Set up job
Run actions/checkout@v4
Run bun test
Post job cleanup
import {
Timeline,
TimelineContent,Installation#
bunx --bun shadcn@latest add @ondo-ui/timeline
Usage#
import {
Timeline,
TimelineContent,
TimelineDate,
TimelineHeader,
TimelineIndicator,
TimelineItem,
TimelineSeparator,
TimelineTitle,
} from "@/components/ui/timeline"<Timeline>
<TimelineItem step={1}>
<TimelineHeader>
<TimelineDate>March 2024</TimelineDate>
<TimelineTitle>Project Initialized</TimelineTitle>
</TimelineHeader>
<TimelineIndicator />
<TimelineSeparator />
<TimelineContent>
Successfully set up the project repository and initial architecture.
</TimelineContent>
</TimelineItem>
</Timeline>API Reference#
Timeline#
The root component for the timeline.
| Prop | Type | Default | Description |
|---|---|---|---|
defaultValue | number | 1 | The initial active step. |
value | number | - | The current active step (controlled). |
onValueChange | (value: number) => void | - | Callback fired when the active step changes. |
orientation | "horizontal" | "vertical" | "vertical" | The layout orientation of the timeline. |
size | "sm" | "default" | "lg" | "default" | Scales the indicator, its icon, and the rail geometry together. |
size sets --timeline-indicator, --timeline-icon and --timeline-rail, and
the item's margin, the indicator's offset and the separator's length are all
derived from them. Changing it moves the whole rail as one piece rather than
leaving the dot and the line out of step.
No part of the timeline changes the active step, so onValueChange only fires
if you call the setter yourself. In practice value and defaultValue are
what you reach for: they mark how far along the sequence is, and every item
whose step is at or below it renders as completed.
TimelineItem#
A single item in the timeline.
| Prop | Type | Default | Description |
|---|---|---|---|
step | number | - | Required. The step number for this item. |
TimelineDate#
The date or time label for a timeline item.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the date label. |
TimelineTitle#
The title for a timeline item.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the title. |
TimelineIndicator#
The visual indicator (usually a dot) for a timeline item.
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "muted" | "info" | "success" | "warning" | "destructive" | "default" | Picks the indicator's color from the theme's semantic set. |
fill | "outline" | "solid" | "outline" | Draws the indicator as a ring or as a disc. |
animate | "ping" | "pulse" | - | Emphasizes the step that is currently running. |
className | string | - | Additional CSS classes for the indicator. |
variant names the color and fill decides how it is applied, so the two are
independent: any hue can be a ring or a disc. fill="solid" is what you want
when the indicator holds an icon, since the icon needs a background to sit on.
Completion still deepens whichever you pick — an outline ring goes from faint to full, and a solid disc goes from tinted to filled.
animate only fires on the step where step === value, so you can set it once
inside a .map() and just the running step will move. It is wrapped in
motion-safe, so a reader who prefers reduced motion gets a still indicator.
TimelineSeparator#
The line connecting timeline indicators.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the separator line. |
TimelineHeader#
A container for the date and title.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the header container. |
TimelineContent#
The main descriptive content for a timeline item.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the content container. |
On This Page
ExamplesWith Left-Aligned DatesWith Custom IndicatorsWith IconsAlternating LayoutHorizontal OrientationHorizontal with Top IndicatorsCustomized TimelineCompact RoadmapActivity FeedHighlighting the Current StepInstallationUsageAPI ReferenceTimelineTimelineItemTimelineDateTimelineTitleTimelineIndicatorTimelineSeparatorTimelineHeaderTimelineContent