timeline-custom-dot-demo

PreviousNext
Docs
diceuiexample

Preview

Loading preview…
examples/timeline-custom-dot-demo.tsx
import { Code, Layers, Rocket } from "lucide-react";
import {
  Timeline,
  TimelineConnector,
  TimelineContent,
  TimelineDescription,
  TimelineDot,
  TimelineHeader,
  TimelineItem,
  TimelineTime,
  TimelineTitle,
} from "@/registry/default/ui/timeline";

const timelineItems = [
  {
    id: "project-kickoff",
    dateTime: "2025-01-15",
    date: "January 15, 2025",
    title: "Project Kickoff",
    description: "Initial meeting to define scope.",
    icon: Rocket,
  },
  {
    id: "design-phase",
    dateTime: "2025-02-01",
    date: "February 1, 2025",
    title: "Design Phase",
    description: "Created wireframes and mockups.",
    icon: Layers,
  },
  {
    id: "development",
    dateTime: "2025-03-01",
    date: "March 1, 2025",
    title: "Development",
    description: "Building core features.",
    icon: Code,
  },
];

export default function TimelineCustomDotDemo() {
  return (
    <Timeline activeIndex={1} className="[--timeline-dot-size:2rem]">
      {timelineItems.map((item) => (
        <TimelineItem key={item.id}>
          <TimelineDot>
            <item.icon className="size-3.5" />
          </TimelineDot>
          <TimelineConnector />
          <TimelineContent>
            <TimelineHeader>
              <TimelineTime dateTime={item.dateTime}>{item.date}</TimelineTime>
              <TimelineTitle>{item.title}</TimelineTitle>
            </TimelineHeader>
            <TimelineDescription>{item.description}</TimelineDescription>
          </TimelineContent>
        </TimelineItem>
      ))}
    </Timeline>
  );
}

Installation

npx shadcn@latest add @diceui/timeline-custom-dot-demo

Usage

import { TimelineCustomDotDemo } from "@/components/timeline-custom-dot-demo"
<TimelineCustomDotDemo />