Search for a command to run...
Displays the path to the current resource using a hierarchy of links.
npx shadcn@latest add @zaidan/breadcrumbpnpx shadcn add @zaidan/breadcrumbyarn dlx shadcn@latest add @zaidan/breadcrumbbunx shadcn@latest add @zaidan/breadcrumbCopy and paste the following code into your project.
1import {2 type BreadcrumbsLinkProps as BreadcrumbsLinkPrimitiveProps,3 type BreadcrumbsRootProps,4 type BreadcrumbsSeparatorProps as BreadcrumbsSeparatorPrimitiveProps,5 Link,6 Root,7 Separator,8} from "@kobalte/core/breadcrumbs";9import type { PolymorphicProps } from "@kobalte/core/polymorphic";10import { Ellipsis } from "lucide-solid";11import type { ComponentProps, ValidComponent } from "solid-js";12import { splitProps } from "solid-js";13
14import { cn } from "~/lib/utils";15
16type BreadcrumbProps<T extends ValidComponent = "nav"> = PolymorphicProps<17 T,18 BreadcrumbsRootProps<T>19> &20 Pick<ComponentProps<T>, "class">;21
22const Breadcrumb = <T extends ValidComponent = "nav">(props: BreadcrumbProps<T>) => {23 const [local, others] = splitProps(props as BreadcrumbProps, ["class"]);24 return (25 <Root26 aria-label="breadcrumb"27 class={cn("z-breadcrumb", local.class)}28 data-slot="breadcrumb"29 {...others}30 />31 );32};33
34type BreadcrumbListProps = ComponentProps<"ol">;35
36const BreadcrumbList = (props: BreadcrumbListProps) => {37 const [local, others] = splitProps(props, ["class"]);38 return (39 <ol40 class={cn("wrap-break-word z-breadcrumb-list flex flex-wrap items-center", local.class)}41 data-slot="breadcrumb-list"42 {...others}43 />44 );45};46
47type BreadcrumbItemProps = ComponentProps<"li">;48
49const BreadcrumbItem = (props: BreadcrumbItemProps) => {50 const [local, others] = splitProps(props, ["class"]);51 return (52 <li53 class={cn("z-breadcrumb-item inline-flex items-center", local.class)}54 data-slot="breadcrumb-item"55 {...others}56 />57 );58};59
60type BreadcrumbLinkProps<T extends ValidComponent = "a"> = PolymorphicProps<61 T,62 BreadcrumbsLinkPrimitiveProps<T>63> &64 Pick<ComponentProps<T>, "class">;65
66const BreadcrumbLink = <T extends ValidComponent = "a">(props: BreadcrumbLinkProps<T>) => {67 const [local, others] = splitProps(props as BreadcrumbLinkProps, ["class"]);68 return (69 <Link class={cn("z-breadcrumb-link", local.class)} data-slot="breadcrumb-link" {...others} />70 );71};72
73type BreadcrumbPageProps = ComponentProps<"span">;74
75const BreadcrumbPage = (props: BreadcrumbPageProps) => {76 const [local, others] = splitProps(props, ["class"]);77 return (78 // biome-ignore lint/a11y/useFocusableInteractive: <exception for breadcrumb>79 // biome-ignore lint/a11y/useSemanticElements: <exception for breadcrumb>80 <span81 aria-current="page"82 aria-disabled="true"83 class={cn("z-breadcrumb-page", local.class)}84 data-slot="breadcrumb-page"85 role="link"86 {...others}87 />88 );89};90
91type BreadcrumbSeparatorProps<T extends ValidComponent = "span"> = PolymorphicProps<92 T,93 BreadcrumbsSeparatorPrimitiveProps<T>94> &95 Pick<ComponentProps<T>, "class">;96
97const BreadcrumbSeparator = <T extends ValidComponent = "span">(98 props: BreadcrumbSeparatorProps<T>,99) => {100 const [local, others] = splitProps(props as BreadcrumbSeparatorProps, ["class"]);101 return (102 <Separator103 data-slot="breadcrumb-separator"104 role="presentation"105 aria-hidden="true"106 class={cn("z-breadcrumb-separator", local.class)}107 {...others}108 />109 );110};111
112type BreadcrumbEllipsisProps = ComponentProps<"span">;113
114const BreadcrumbEllipsis = (props: BreadcrumbEllipsisProps) => {115 const [local, others] = splitProps(props, ["class"]);116 return (117 <span118 data-slot="breadcrumb-ellipsis"119 role="presentation"120 aria-hidden="true"121 class={cn("z-breadcrumb-ellipsis flex items-center justify-center", local.class)}122 {...others}123 >124 <Ellipsis />125 <span class="sr-only">More</span>126 </span>127 );128};129
130export {131 Breadcrumb,132 BreadcrumbList,133 BreadcrumbItem,134 BreadcrumbLink,135 BreadcrumbPage,136 BreadcrumbSeparator,137 BreadcrumbEllipsis,138};Here are the source code of all the examples from the preview page:
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "~/components/ui/breadcrumb";function BreadcrumbBasic() { return ( <Example title="Basic" class="items-center justify-center"> <Breadcrumb separator={<ChevronRight />}> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="#">Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="#">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> </Example> );import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "~/components/ui/breadcrumb";import { Button } from "~/components/ui/button";import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger,} from "~/components/ui/dropdown-menu";function BreadcrumbWithDropdown() { return ( <Example title="With Dropdown" class="items-center justify-center"> <Breadcrumb separator={<ChevronRight />}> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="#">Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <DropdownMenu placement="bottom-start"> <DropdownMenuTrigger as={Button} size="icon-sm" variant="ghost" class="size-7"> <BreadcrumbEllipsis /> <span class="sr-only">Toggle menu</span> </DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuItem>Documentation</DropdownMenuItem> <DropdownMenuItem>Themes</DropdownMenuItem> <DropdownMenuItem>GitHub</DropdownMenuItem> </DropdownMenuContent> </DropdownMenu> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="#">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> </Example> );import { Link } from "@tanstack/solid-router";import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator,} from "~/components/ui/breadcrumb";function BreadcrumbWithLink() { return ( <Example title="With Link" class="items-center justify-center"> <Breadcrumb separator={<ChevronRight />}> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink as={Link} to="#"> Home </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbEllipsis /> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink as={Link} to="#"> Components </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> </Example> );