Breadcrumb
Chevron-separated navigation trail; last item is the current page.
import { Breadcrumb, BreadcrumbItem }from "@/components/ui"
Trail
Full source
The complete component, read from src/components/ui/breadcrumb.tsx.
breadcrumb.tsx
import { ChevronRight } from "lucide-react";
export interface BreadcrumbItem {
label: string;
href?: string;
}
export interface BreadcrumbProps {
items: BreadcrumbItem[];
}
export function Breadcrumb({ items }: BreadcrumbProps) {
return (
<nav aria-label="Breadcrumb" className="flex items-center gap-1.5 text-sm">
{items.map((item, i) => {
const isLast = i === items.length - 1;
return (
<span key={i} className="flex items-center gap-1.5">
{i > 0 && (
<ChevronRight size={14} aria-hidden="true" className="text-text-tertiary" />
)}
{isLast ? (
<span aria-current="page" className="font-medium text-text">
{item.label}
</span>
) : (
<a
href={item.href}
className="text-text-secondary transition-colors hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent rounded"
>
{item.label}
</a>
)}
</span>
);
})}
</nav>
);
}