Navigation
Breadcrumb
Path navigation component that shows the user's current location in the hierarchy, with support for links, current page, and ellipsis.
Installation
bash
npx polyui add breadcrumbBasic
Compose Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, and BreadcrumbSeparator to build a breadcrumb nav.
Basic
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
export function BreadcrumbBasic() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Basic</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}Slash Separator
Slash Separator
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
import { HomeIcon } from "lucide-react"
export function BreadcrumbSlashSeparator() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Slash Separator</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#" className="flex items-center gap-2">
<HomeIcon className="size-4" />
Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator> / </BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator> / </BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}Icon Items
Icon Items
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
import { HomeIcon, FolderIcon, FileIcon } from "lucide-react"
export function BreadcrumbIconItems() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Icon Items</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">
<HomeIcon className="size-4" />
<span className="sr-only">Home</span>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#" className="flex items-center gap-2">
<FolderIcon className="size-4" />
Documents
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage className="flex items-center gap-2">
<FileIcon className="inline size-4" />
Add Document
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}Dot Separator
Dot Separator
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
export function BreadcrumbDotSeparator() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Dot Separator</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator>·</BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator>·</BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}Badge Style
Badge Style
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
import { Badge } from "@polyui/react/badge"
export function BreadcrumbBadgeStyle() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Badge Style</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">
<Badge variant="outline" className="text-muted-foreground hover:text-foreground">
Home
</Badge>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">
<Badge variant="outline" className="text-muted-foreground hover:text-foreground">
Documents
</Badge>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>
<Badge variant="outline" className="border-primary text-primary">
Add Document
</Badge>
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}With Ellipsis
Use BreadcrumbEllipsis to collapse intermediate levels when the path is deeply nested.
With Ellipsis
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis } from "@polyui/react/breadcrumb"
export function BreadcrumbWithEllipsis() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">With Ellipsis</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbEllipsis />
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}With Dropdown
With Dropdown
tsx
export function BreadcrumbWithDropdown() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">With Dropdown</p>
<BreadcrumbDropdownInner />
</div>
)
}Outline Container
Outline Container
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
import { HomeIcon } from "lucide-react"
export function BreadcrumbOutlineContainer() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Outline Container</p>
<Breadcrumb>
<BreadcrumbList className="h-8 gap-2 rounded-md border px-3 text-sm">
<BreadcrumbItem>
<BreadcrumbLink href="#">
<HomeIcon className="size-4" />
<span className="sr-only">Home</span>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Breadcrumb | React.ComponentProps<"nav"> | — | Root container, renders as <nav aria-label="breadcrumb">. |
BreadcrumbLink › href | string | — | Link href. Supports render prop to swap in Next.js Link or similar. |
BreadcrumbPage | React.ComponentProps<"span"> | — | Current page marker with aria-current="page", no link interaction. |
BreadcrumbSeparator › children | React.ReactNode | ArrowRight01Icon | Separator content, defaults to ArrowRight01Icon, customizable. |