Skip to content
GitHub

Timeline

A timeline component that displays events with customizable orientation, alignment, and spacing. A visual representation of events in chronological order.

Project Initialized

Successfully set up the project repository and initial architecture.

Beta Release

Launched the beta version for early testers and feedback.

Official Launch

The platform is now live for all users worldwide.
import {
Timeline,
TimelineContent,
TimelineDate,
TimelineHeader,
TimelineIndicator,
TimelineItem,
TimelineSeparator,
TimelineTitle,
} from "@/components/ui/pxl/timeline";
export default function TimelineDemo() {
return (
<Timeline defaultValue={2} className="w-full max-w-md">
<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>
<TimelineItem step={2}>
<TimelineHeader>
<TimelineDate>April 2024</TimelineDate>
<TimelineTitle>Beta Release</TimelineTitle>
</TimelineHeader>
<TimelineIndicator />
<TimelineSeparator />
<TimelineContent>
Launched the beta version for early testers and feedback.
</TimelineContent>
</TimelineItem>
<TimelineItem step={3}>
<TimelineHeader>
<TimelineDate>June 2024</TimelineDate>
<TimelineTitle>Official Launch</TimelineTitle>
</TimelineHeader>
<TimelineIndicator />
<TimelineSeparator />
<TimelineContent>
The platform is now live for all users worldwide.
</TimelineContent>
</TimelineItem>
</Timeline>
);
}
pnpm dlx shadcn@latest add pxl-ui/registry/timeline
import {
Timeline,
TimelineContent,
TimelineDate,
TimelineHeader,
TimelineIndicator,
TimelineItem,
TimelineSeparator,
TimelineTitle,
} from "@/components/reui/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>

Planning

Scope definition and resource planning.

Design

UI/UX design and prototyping.

Development

Core features implementation.
import {
Timeline,
TimelineContent,
TimelineDate,
TimelineHeader,
TimelineIndicator,
TimelineItem,
TimelineSeparator,
TimelineTitle,
} from "@/components/ui/pxl/timeline";
const releaseCycle = [
{
id: 1,
date: "Week 1",
title: "Planning",
description: "Scope definition and resource planning.",
},
{
id: 2,
date: "Week 2",
title: "Design",
description: "UI/UX design and prototyping.",
},
{
id: 3,
date: "Week 4",
title: "Development",
description: "Core features implementation.",
},
];
export default function HorizontalTimelineExample() {
return (
<Timeline
defaultValue={2}
orientation="horizontal"
className="w-full max-w-xl"
>
{releaseCycle.map((item) => (
<TimelineItem key={item.id} step={item.id}>
<TimelineHeader>
<TimelineSeparator />
<TimelineDate>{item.date}</TimelineDate>
<TimelineTitle>{item.title}</TimelineTitle>
<TimelineIndicator />
</TimelineHeader>
<TimelineContent>{item.description}</TimelineContent>
</TimelineItem>
))}
</Timeline>
);
}

Forked Repository

Forked the repository to create a new branch for development.

Pull Request Submitted

Submitted PR #342 with new feature implementation. Waiting for code review.

Comparing Branches

Received comments on PR. Minor adjustments needed in error handling.

Merged Branch

Merged the feature branch into the main branch. Ready for deployment.
import {
Timeline,
TimelineContent,
TimelineDate,
TimelineHeader,
TimelineIndicator,
TimelineItem,
TimelineSeparator,
TimelineTitle,
} from "@/components/ui/pxl/timeline";
const gitActivity = [
{
id: 1,
date: "15 minutes ago",
title: "Forked Repository",
description:
"Forked the repository to create a new branch for development.",
icon: (
<svg
className="size-3.5"
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
viewBox="0 0 24 24"
>
<path d="M5 2h4v2H7v2H5V2Zm0 10H3V6h2v6Zm2 2H5v-2h2v2Zm2 2v-2H7v2H3v-2H1v2h2v2h4v4h2v-4h2v-2H9Zm0 0v2H7v-2h2Zm6-12v2H9V4h6Zm4 2h-2V4h-2V2h4v4Zm0 6V6h2v6h-2Zm-2 2v-2h2v2h-2Zm-2 2v-2h2v2h-2Zm0 2h-2v-2h2v2Zm0 0h2v4h-2v-4Z" />
</svg>
),
},
{
id: 2,
date: "10 minutes ago",
title: "Pull Request Submitted",
description:
"Submitted PR #342 with new feature implementation. Waiting for code review.",
icon: (
<svg
className="size-3.5"
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
viewBox="0 0 24 24"
>
<path d="M7 12v10H5V12h2Zm13 10h-4v-2h4v2Zm-4-2h-2v-4h2v4Zm6 0h-2v-4h2v4Zm-2-4h-4v-2h4v2ZM8 10H4V8h4v2ZM4 8H2V4h2v4Zm6 0H8V4h2v4Zm7-1h-5V5h5v2ZM8 4H4V2h4v2Z" />
</svg>
),
},
{
id: 3,
date: "5 minutes ago",
title: "Comparing Branches",
description:
"Received comments on PR. Minor adjustments needed in error handling.",
icon: (
<svg
className="size-3.5"
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
viewBox="0 0 24 24"
>
<path d="M8 22H4v-2h4v2Zm-4-2H2v-4h2v4Zm6 0H8v-4h2v4Zm7-1h-5v-2h5v2Zm2-2h-2v-5h2v5ZM8 16H4v-2h4v2Zm-1-4H5V2h2v10Zm13-2h-4V8h4v2Zm-4-2h-2V4h2v4Zm6 0h-2V4h2v4Zm-2-4h-4V2h4v2Z" />
</svg>
),
},
{
id: 4,
date: "Just now",
title: "Merged Branch",
description:
"Merged the feature branch into the main branch. Ready for deployment.",
icon: (
<svg
className="size-3.5"
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
viewBox="0 0 24 24"
>
<path d="M7 22H5V12h2v10Zm13 0h-4v-2h4v2Zm-4-2h-2v-4h2v4Zm6 0h-2v-4h2v4Zm-2-4h-4v-2h4v2Zm-6-2h-2v-2h2v2Zm-2-2h-2v-2h2v2Zm-4-2H4V8h4v2ZM4 8H2V4h2v4Zm6 0H8V4h2v4ZM8 4H4V2h4v2Z" />
</svg>
),
},
];
export default function TimelineIconsExample() {
return (
<Timeline defaultValue={3} className="w-full max-w-md">
{gitActivity.map((item) => (
<TimelineItem
key={item.id}
step={item.id}
className="group-data-[orientation=vertical]/timeline:ms-10"
>
<TimelineHeader>
<TimelineSeparator className="group-data-[orientation=vertical]/timeline:-left-7 group-data-[orientation=vertical]/timeline:h-[calc(100%-1.5rem-0.25rem)] group-data-[orientation=vertical]/timeline:translate-y-6.5" />
<TimelineTitle className="mt-0.5">{item.title}</TimelineTitle>
<TimelineIndicator className="bg-foreground/10 group-data-completed/timeline-item:bg-foreground group-data-completed/timeline-item:text-background flex size-6 items-center justify-center border-none group-data-[orientation=vertical]/timeline:-left-7">
{item.icon}
</TimelineIndicator>
</TimelineHeader>
<TimelineContent>
{item.description}
<TimelineDate className="mt-2 mb-0">{item.date}</TimelineDate>
</TimelineContent>
</TimelineItem>
))}
</Timeline>
);
}

AI Engine Integration

Deep integration of advanced LLMs for real-time code generation and context-aware suggestions.

Collaborative Editing

Multi-user real-time collaboration with shared cursors and instant synchronization across workspaces.

Visual Theme Builder

Interactive interface for creating and managing custom design systems with automated CSS variable generation.

Enterprise Security

Role-based access control, SOC2 compliance audit, and enhanced data encryption protocols.
import {
Timeline,
TimelineContent,
TimelineDate,
TimelineHeader,
TimelineIndicator,
TimelineItem,
TimelineSeparator,
TimelineTitle,
} from "@/components/ui/pxl/timeline";
const roadmap = [
{
id: 1,
date: "Jan 2025",
title: "AI Engine Integration",
description:
"Deep integration of advanced LLMs for real-time code generation and context-aware suggestions.",
},
{
id: 2,
date: "Feb 2025",
title: "Collaborative Editing",
description:
"Multi-user real-time collaboration with shared cursors and instant synchronization across workspaces.",
},
{
id: 3,
date: "Mar 2025",
title: "Visual Theme Builder",
description:
"Interactive interface for creating and managing custom design systems with automated CSS variable generation.",
},
{
id: 4,
date: "Apr 2025",
title: "Enterprise Security",
description:
"Role-based access control, SOC2 compliance audit, and enhanced data encryption protocols.",
},
];
export default function LeftAlignedDates() {
return (
<Timeline defaultValue={2} className="w-full max-w-md">
{roadmap.map((item) => (
<TimelineItem
key={item.id}
step={item.id}
className="sm:group-data-[orientation=vertical]/timeline:ms-32"
>
<TimelineHeader>
<TimelineSeparator />
<TimelineDate className="sm:group-data-[orientation=vertical]/timeline:absolute sm:group-data-[orientation=vertical]/timeline:-left-32 sm:group-data-[orientation=vertical]/timeline:w-20 sm:group-data-[orientation=vertical]/timeline:text-right">
{item.date}
</TimelineDate>
<TimelineTitle className="sm:-mt-0.5">{item.title}</TimelineTitle>
<TimelineIndicator />
</TimelineHeader>
<TimelineContent>{item.description}</TimelineContent>
</TimelineItem>
))}
</Timeline>
);
}

Seed Funding

Product MVP

First Client

Series A

Global Expansion

import {
Timeline,
TimelineDate,
TimelineHeader,
TimelineIndicator,
TimelineItem,
TimelineSeparator,
TimelineTitle,
} from "@/components/ui/pxl/timeline";
import { cn } from "@/lib/utils";
const milestones = [
{
id: 1,
date: "Jan 2024",
title: "Seed Funding",
},
{
id: 2,
date: "Mar 2024",
title: "Product MVP",
},
{
id: 3,
date: "May 2024",
title: "First Client",
},
{
id: 4,
date: "Jul 2024",
title: "Series A",
},
{
id: 5,
date: "Sep 2024",
title: "Global Expansion",
},
];
export default function TimelineAlternatingExample() {
return (
<Timeline defaultValue={3} className="w-full max-w-md">
{milestones.map((item) => (
<TimelineItem
key={item.id}
step={item.id}
className={cn(
"w-[calc(50%-1.5rem)] odd:ms-auto even:me-auto even:text-right even:group-data-[orientation=vertical]/timeline:ms-0 even:group-data-[orientation=vertical]/timeline:me-8",
"even:group-data-[orientation=vertical]/timeline:**:data-[slot=timeline-indicator]:-right-6 even:group-data-[orientation=vertical]/timeline:**:data-[slot=timeline-indicator]:left-auto",
"even:group-data-[orientation=vertical]/timeline:**:data-[slot=timeline-indicator]:translate-x-1/2 even:group-data-[orientation=vertical]/timeline:**:data-[slot=timeline-separator]:-right-6",
"even:group-data-[orientation=vertical]/timeline:**:data-[slot=timeline-separator]:left-auto even:group-data-[orientation=vertical]/timeline:**:data-[slot=timeline-separator]:translate-x-1/2",
)}
>
<TimelineHeader>
<TimelineSeparator />
<TimelineDate>{item.date}</TimelineDate>
<TimelineTitle>{item.title}</TimelineTitle>
<TimelineIndicator />
</TimelineHeader>
</TimelineItem>
))}
</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.

A single item in the timeline.

Prop Type Default Description
step number - Required. The step number for this item.

The date or time label for a timeline item.

Prop Type Default Description
className string - Additional CSS classes for the date label.

The title for a timeline item.

Prop Type Default Description
className string - Additional CSS classes for the title.

The visual indicator (usually a dot) for a timeline item.

Prop Type Default Description
className string - Additional CSS classes for the indicator.

The line connecting timeline indicators.

Prop Type Default Description
className string - Additional CSS classes for the separator line.

A container for the date and title.

Prop Type Default Description
className string - Additional CSS classes for the header container.

The main descriptive content for a timeline item.

Prop Type Default Description
className string - Additional CSS classes for the content container.