1import {2 Breadcrumb,3 BreadcrumbEllipsis,4 BreadcrumbItem,5 BreadcrumbLink,6 BreadcrumbList,7 BreadcrumbSeparator,8} from "~/components/ui/breadcrumb";9import {10 DropdownMenu,11 DropdownMenuContent,12 DropdownMenuItem,13 DropdownMenuTrigger,14} from "~/components/ui/dropdown-menu";15
16export default function BreadcrumbDemo() {17 return (18 <Breadcrumb>19 <BreadcrumbList>20 <BreadcrumbItem>21 <BreadcrumbLink as="a" href="/">22 Home23 </BreadcrumbLink>24 </BreadcrumbItem>25 <BreadcrumbSeparator />26 <BreadcrumbItem>27 <DropdownMenu>28 <DropdownMenuTrigger class="flex items-center gap-1">29 <BreadcrumbEllipsis class="size-4" />30 <span class="sr-only">Toggle menu</span>31 </DropdownMenuTrigger>32 <DropdownMenuContent>33 <DropdownMenuItem>Documentation</DropdownMenuItem>34 <DropdownMenuItem>Themes</DropdownMenuItem>35 <DropdownMenuItem>GitHub</DropdownMenuItem>36 </DropdownMenuContent>37 </DropdownMenu>38 </BreadcrumbItem>39 <BreadcrumbSeparator />40 <BreadcrumbItem>41 <BreadcrumbLink as="a" href="/docs/components">42 Components43 </BreadcrumbLink>44 </BreadcrumbItem>45 </BreadcrumbList>46 </Breadcrumb>47 );48}
npx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/breadcrumb.json
yarn shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/breadcrumb.json
pnpm dlx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/breadcrumb.json
bunx --bun shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/breadcrumb.json
Install the following dependencies
npm install @kobalte/core
yarn add @kobalte/core
pnpm add @kobalte/core
bun add @kobalte/core
Copy and paste the following code into your project
1import type { PolymorphicProps } from "@kobalte/core";2import type { Component, ComponentProps, JSX, ValidComponent } from "solid-js";3
4import { mergeProps, splitProps } from "solid-js";5import * as BreadcrumbPrimitive from "@kobalte/core/breadcrumbs";6import ChevronRightIcon from "lucide-solid/icons/chevron-right";7import MoreHorizontalIcon from "lucide-solid/icons/more-horizontal";8
9import { cn } from "~/lib/utils";10
11// const Breadcrumb = BreadcrumbPrimitive.Root;12type BreadcrumbProps<T extends ValidComponent = "nav"> =13 BreadcrumbPrimitive.BreadcrumbsRootProps<T>;14
15const Breadcrumb = <T extends ValidComponent = "nav">(16 props: PolymorphicProps<T, BreadcrumbProps<T>>,17) => {18 const merged = mergeProps(19 {20 separator: () => <ChevronRightIcon />,21 },22 props,23 );24
25 return <BreadcrumbPrimitive.Root data-slot="breadcrumb" {...merged} />;26};27
28const BreadcrumbList: Component<ComponentProps<"ol">> = (props) => {29 const [local, others] = splitProps(props, ["class"]);30 return (31 <ol32 data-slot="breadcrumb-list"33 class={cn(34 "flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",35 local.class,36 )}37 {...others}38 />39 );40};41
42const BreadcrumbItem: Component<ComponentProps<"li">> = (props) => {43 const [local, others] = splitProps(props, ["class"]);44 return (45 <li46 data-slot="breadcrumb-item"47 class={cn("inline-flex items-center gap-1.5", local.class)}48 {...others}49 />50 );51};52
53type BreadcrumbLinkProps<T extends ValidComponent = "a"> =54 BreadcrumbPrimitive.BreadcrumbsLinkProps<T> & { class?: string | undefined };55
56const BreadcrumbLink = <T extends ValidComponent = "a">(57 props: PolymorphicProps<T, BreadcrumbLinkProps<T>>,58) => {59 const [local, others] = splitProps(props as BreadcrumbLinkProps, ["class"]);60 return (61 <BreadcrumbPrimitive.Link62 data-slot="breadcrumb-link"63 class={cn("ui-current:font-bold", local.class)}64 {...others}65 />66 );67};68
69type BreadcrumbSeparatorProps<T extends ValidComponent = "span"> =70 BreadcrumbPrimitive.BreadcrumbsSeparatorProps<T> & {71 class?: string | undefined;72 children?: JSX.Element;73 };74
75const BreadcrumbSeparator = <T extends ValidComponent = "span">(76 props: PolymorphicProps<T, BreadcrumbSeparatorProps<T>>,77) => {78 const [local, others] = splitProps(props as BreadcrumbSeparatorProps, [79 "class",80 "children",81 ]);82 return (83 <BreadcrumbPrimitive.Separator84 data-slot="breadcrumb-separator"85 class={cn("[&>svg]:size-3.5", local.class)}86 {...others}87 />88 );89};90
91const BreadcrumbEllipsis: Component<ComponentProps<"span">> = (props) => {92 const [local, others] = splitProps(props, ["class"]);93 return (94 <span95 data-slot="breadcrumb-ellipsis"96 class={cn("flex size-9 items-center justify-center", local.class)}97 {...others}98 >99 <MoreHorizontalIcon class="size-4" />100 <span class="sr-only">More</span>101 </span>102 );103};104
105export {106 Breadcrumb,107 BreadcrumbList,108 BreadcrumbItem,109 BreadcrumbLink,110 BreadcrumbSeparator,111 BreadcrumbEllipsis,112};
Update the import paths to match your project setup.
1import {2 Breadcrumb,3 BreadcrumbEllipsis,4 BreadcrumbItem,5 BreadcrumbLink,6 BreadcrumbList,7 BreadcrumbSeparator,8} from "~/components/ui/breadcrumb";
1<Breadcrumb>2 <BreadcrumbList>3 <BreadcrumbItem>4 <BreadcrumbLink href="/">Home</BreadcrumbLink>5 </BreadcrumbItem>6 <BreadcrumbSeparator />7 <BreadcrumbItem>8 <BreadcrumbLink href="/components">Components</BreadcrumbLink>9 </BreadcrumbItem>10 <BreadcrumbSeparator />11 <BreadcrumbItem>12 <BreadcrumbPage>Breadcrumb</BreadcrumbPage>13 </BreadcrumbItem>14 </BreadcrumbList>15</Breadcrumb>
To use a custom separator, pass a custom separator component to the separator
props of the Breadcrumb
component.
1import { SlashIcon } from "lucide-solid";2
3import {4 Breadcrumb,5 BreadcrumbEllipsis,6 BreadcrumbItem,7 BreadcrumbLink,8 BreadcrumbList,9 BreadcrumbSeparator,10} from "~/components/ui/breadcrumb";11import {12 DropdownMenu,13 DropdownMenuContent,14 DropdownMenuItem,15 DropdownMenuTrigger,16} from "~/components/ui/dropdown-menu";17
18export default function BreadcrumbDemo() {19 return (20 <Breadcrumb separator={<SlashIcon />}>21 <BreadcrumbList>22 <BreadcrumbItem>23 <BreadcrumbLink as="a" href="/">24 Home25 </BreadcrumbLink>26 </BreadcrumbItem>27 <BreadcrumbSeparator />28 <BreadcrumbItem>29 <DropdownMenu>30 <DropdownMenuTrigger class="flex items-center gap-1">31 <BreadcrumbEllipsis class="size-4" />32 <span class="sr-only">Toggle menu</span>33 </DropdownMenuTrigger>34 <DropdownMenuContent>35 <DropdownMenuItem>Documentation</DropdownMenuItem>36 <DropdownMenuItem>Themes</DropdownMenuItem>37 <DropdownMenuItem>GitHub</DropdownMenuItem>38 </DropdownMenuContent>39 </DropdownMenu>40 </BreadcrumbItem>41 <BreadcrumbSeparator />42 <BreadcrumbItem>43 <BreadcrumbLink as="a" href="/docs/components">44 Components45 </BreadcrumbLink>46 </BreadcrumbItem>47 </BreadcrumbList>48 </Breadcrumb>49 );50}