| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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,
- }
|