| import * as React from 'react' | |
| import { Slot } from '@radix-ui/react-slot' | |
| import { ChevronRight, MoreHorizontal } from 'lucide-react' | |
| import { cn } from '@/lib/utils' | |
| function Breadcrumb({ ...props }: React.ComponentProps<'nav'>) { | |
| return <nav aria-label="breadcrumb" data-slot="breadcrumb" {...props} /> | |
| } | |
| function BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) { | |
| return ( | |
| <ol | |
| data-slot="breadcrumb-list" | |
| className={cn( | |
| 'text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5', | |
| className, | |
| )} | |
| {...props} | |
| /> | |
| ) | |
| } | |
| function BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) { | |
| return ( | |
| <li | |
| data-slot="breadcrumb-item" | |
| className={cn('inline-flex items-center gap-1.5', className)} | |
| {...props} | |
| /> | |
| ) | |
| } | |
| function BreadcrumbLink({ | |
| asChild, | |
| className, | |
| ...props | |
| }: React.ComponentProps<'a'> & { | |
| asChild?: boolean | |
| }) { | |
| const Comp = asChild ? Slot : 'a' | |
| return ( | |
| <Comp | |
| data-slot="breadcrumb-link" | |
| className={cn('hover:text-foreground transition-colors', className)} | |
| {...props} | |
| /> | |
| ) | |
| } | |
| function BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) { | |
| return ( | |
| <span | |
| data-slot="breadcrumb-page" | |
| role="link" | |
| aria-disabled="true" | |
| aria-current="page" | |
| className={cn('text-foreground font-normal', className)} | |
| {...props} | |
| /> | |
| ) | |
| } | |
| function BreadcrumbSeparator({ | |
| children, | |
| className, | |
| ...props | |
| }: React.ComponentProps<'li'>) { | |
| return ( | |
| <li | |
| data-slot="breadcrumb-separator" | |
| role="presentation" | |
| aria-hidden="true" | |
| className={cn('[&>svg]:size-3.5', className)} | |
| {...props} | |
| > | |
| {children ?? <ChevronRight />} | |
| </li> | |
| ) | |
| } | |
| function BreadcrumbEllipsis({ | |
| className, | |
| ...props | |
| }: React.ComponentProps<'span'>) { | |
| return ( | |
| <span | |
| data-slot="breadcrumb-ellipsis" | |
| role="presentation" | |
| aria-hidden="true" | |
| className={cn('flex size-9 items-center justify-center', className)} | |
| {...props} | |
| > | |
| <MoreHorizontal className="size-4" /> | |
| <span className="sr-only">More</span> | |
| </span> | |
| ) | |
| } | |
| export { | |
| Breadcrumb, | |
| BreadcrumbList, | |
| BreadcrumbItem, | |
| BreadcrumbLink, | |
| BreadcrumbPage, | |
| BreadcrumbSeparator, | |
| BreadcrumbEllipsis, | |
| } | |

