import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb";
import { preventNavigation } from "@/examples/data";
export default function BreadcrumbBasic() {
return (
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#" onClick={preventNavigation}>
Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#" onClick={preventNavigation}>
Projects
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#" onClick={preventNavigation}>
Website redesign
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Settings</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
);
}- Add the registryOnce per project
pnpm dlx shadcn@latest registry add @jarvis=https://ui.jarv.is/r/{name}.json - Add breadcrumb
pnpm dlx shadcn@latest add @jarvis/breadcrumb
Usage
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb";
export function ProjectBreadcrumb() {
return (
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/projects">Projects</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Website redesign</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
);
}End the trail with BreadcrumbPage rather than a link. To use your router's link, pass it to
render on BreadcrumbLink, as in render={<Link to="/projects" />}.
Composition
Examples
Collapsed
Replace the middle of a long trail with a BreadcrumbEllipsis that opens a menu of the hidden
pages. Give its trigger an aria-label.
import {
Breadcrumb,
BreadcrumbEllipsis,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { preventNavigation } from "@/examples/data";
export default function BreadcrumbCollapsed() {
return (
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#" onClick={preventNavigation}>
Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<DropdownMenu>
<DropdownMenuTrigger
aria-label="Show hidden pages"
className="flex rounded-xs hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring"
>
<BreadcrumbEllipsis />
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem>Acme</DropdownMenuItem>
<DropdownMenuItem>Projects</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#" onClick={preventNavigation}>
Website redesign
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Settings</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
);
}Custom separator
Pass children to BreadcrumbSeparator to replace the chevron.
import { FolderIcon, HomeIcon, SlashIcon } from "lucide-react";
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb";
import { preventNavigation } from "@/examples/data";
export default function BreadcrumbCustomSeparator() {
return (
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink
href="#"
onClick={preventNavigation}
className="flex items-center gap-1.5"
>
<HomeIcon className="size-3.5" />
Acme
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator>
<SlashIcon />
</BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink
href="#"
onClick={preventNavigation}
className="flex items-center gap-1.5"
>
<FolderIcon className="size-3.5" />
Mobile app
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator>
<SlashIcon />
</BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>Release notes</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
);
}Props
| Part | Extends |
|---|---|
| Breadcrumb | <nav> |
| BreadcrumbList | <ol> |
| BreadcrumbItem | <li> |
| BreadcrumbLink | <a> |
| BreadcrumbPage | <span> |
| BreadcrumbSeparator | <li> |
| BreadcrumbEllipsis | <span> |
The tables leave out className, style and render. Parts built on Base UI take them as its styling and composition guides describe.