Breadcrumb

Displays the path to the current resource using a hierarchy of links.

1'use client';
2
3import { Breadcrumb } from '@/components/ui/breadcrumb';
4
5export function Default() {
6 return (
7 <Breadcrumb>
8 <Breadcrumb.List>
9 <Breadcrumb.Item>
10 <Breadcrumb.Link href="/">Home</Breadcrumb.Link>
11 </Breadcrumb.Item>
12 <Breadcrumb.Separator />
13 <Breadcrumb.Item>
14 <Breadcrumb.Link href="/docs">Documentation</Breadcrumb.Link>
15 </Breadcrumb.Item>
16 <Breadcrumb.Separator />
17 <Breadcrumb.Item>
18 <Breadcrumb.Page>Components</Breadcrumb.Page>
19 </Breadcrumb.Item>
20 </Breadcrumb.List>
21 </Breadcrumb>
22 );
23}

Installation

Copy and paste the following code in your project.
import { ArrowRight01Icon, MoreHorizontalIcon } from '@hugeicons/core-free-icons';
import { HugeiconsIcon } from '@hugeicons/react';
import * as React from 'react';
import { cn } from '../lib/cn';
const BreadcrumbRoot = ({ className, ...props }: React.ComponentProps<'nav'>) => {
return <nav aria-label="breadcrumb" className={className} {...props} />;
};
const BreadcrumbList = ({ className, ...props }: React.ComponentProps<'ol'>) => {
return (
<ol
className={cn(
'text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5',
className,
)}
{...props}
/>
);
};
const BreadcrumbItem = ({ className, ...props }: React.ComponentProps<'li'>) => {
return <li className={cn('inline-flex items-center gap-1.5', className)} {...props} />;
};
type BreadcrumbLinkProps = React.ComponentProps<'a'> & {
children: React.ReactNode;
};
const BreadcrumbLink = ({ className, children, ...props }: BreadcrumbLinkProps) => {
const isLinkComponent =
React.isValidElement(children) &&
(typeof children.type === 'function' || typeof children.type === 'object');
if (isLinkComponent) {
return <span className={cn('hover:text-foreground', className)}>{children}</span>;
}
return (
<a className={cn('hover:text-foreground', className)} {...props}>
{children}
</a>
);
};
const BreadcrumbPage = ({ className, ...props }: React.ComponentProps<'span'>) => {
return (
<span
role="link"
aria-disabled="true"
aria-current="page"
className={cn('text-foreground font-normal', className)}
{...props}
/>
);
};
const BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<'li'>) => {
return (
<li
role="presentation"
aria-hidden="true"
className={cn('[&>svg]:size-3.5', className)}
{...props}
>
{children ?? <HugeiconsIcon icon={ArrowRight01Icon} size={14} className="size-3.5" />}
</li>
);
};
const BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<'span'>) => {
return (
<span
role="presentation"
aria-hidden="true"
className={cn('flex size-9 items-center justify-center', className)}
{...props}
>
<HugeiconsIcon icon={MoreHorizontalIcon} className="size-4" size={16} />
<span className="sr-only">More</span>
</span>
);
};
const Breadcrumb = Object.assign(BreadcrumbRoot, {
List: BreadcrumbList,
Item: BreadcrumbItem,
Link: BreadcrumbLink,
Page: BreadcrumbPage,
Separator: BreadcrumbSeparator,
Ellipsis: BreadcrumbEllipsis,
});
export { Breadcrumb };
Make sure to update the import paths according to your project structure.

Anatomy

import { Breadcrumb } from '@/components/ui/breadcrumb';
<Breadcrumb>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">Home</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="/docs">Documentation</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb>

API Reference

The root container for the breadcrumb navigation.
PropTypeDefaultDescription
classNamestring-Additional CSS classes
Container for breadcrumb items with proper spacing and layout.
PropTypeDefaultDescription
classNamestring-Additional CSS classes
Individual breadcrumb item wrapper.
PropTypeDefaultDescription
classNamestring-Additional CSS classes
Clickable link for navigation between pages.
PropTypeDefaultDescription
hrefstring-URL to navigate to
classNamestring-Additional CSS classes
Represents the current page (non-clickable).
PropTypeDefaultDescription
classNamestring-Additional CSS classes
Visual separator between breadcrumb items.
PropTypeDefaultDescription
childrenReactNodeArrow iconCustom separator element
classNamestring-Additional CSS classes