Openstatus www.openstatus.dev
at main 109 lines 2.4 kB view raw
1import { Slot } from "@radix-ui/react-slot"; 2import { ChevronRight, MoreHorizontal } from "lucide-react"; 3import type * as React from "react"; 4 5import { cn } from "@/lib/utils"; 6 7function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { 8 return <nav aria-label="breadcrumb" data-slot="breadcrumb" {...props} />; 9} 10 11function BreadcrumbList({ className, ...props }: React.ComponentProps<"ol">) { 12 return ( 13 <ol 14 data-slot="breadcrumb-list" 15 className={cn( 16 "flex flex-wrap items-center gap-1.5 break-words text-muted-foreground text-sm sm:gap-2.5", 17 className, 18 )} 19 {...props} 20 /> 21 ); 22} 23 24function BreadcrumbItem({ className, ...props }: React.ComponentProps<"li">) { 25 return ( 26 <li 27 data-slot="breadcrumb-item" 28 className={cn("inline-flex items-center gap-1.5", className)} 29 {...props} 30 /> 31 ); 32} 33 34function BreadcrumbLink({ 35 asChild, 36 className, 37 ...props 38}: React.ComponentProps<"a"> & { 39 asChild?: boolean; 40}) { 41 const Comp = asChild ? Slot : "a"; 42 43 return ( 44 <Comp 45 data-slot="breadcrumb-link" 46 className={cn("transition-colors hover:text-foreground", className)} 47 {...props} 48 /> 49 ); 50} 51 52function BreadcrumbPage({ className, ...props }: React.ComponentProps<"span">) { 53 return ( 54 <span 55 data-slot="breadcrumb-page" 56 role="link" 57 aria-disabled="true" 58 aria-current="page" 59 className={cn("font-normal text-foreground", className)} 60 {...props} 61 /> 62 ); 63} 64 65function BreadcrumbSeparator({ 66 children, 67 className, 68 ...props 69}: React.ComponentProps<"li">) { 70 return ( 71 <li 72 data-slot="breadcrumb-separator" 73 role="presentation" 74 aria-hidden="true" 75 className={cn("[&>svg]:size-3.5", className)} 76 {...props} 77 > 78 {children ?? <ChevronRight />} 79 </li> 80 ); 81} 82 83function BreadcrumbEllipsis({ 84 className, 85 ...props 86}: React.ComponentProps<"span">) { 87 return ( 88 <span 89 data-slot="breadcrumb-ellipsis" 90 role="presentation" 91 aria-hidden="true" 92 className={cn("flex size-9 items-center justify-center", className)} 93 {...props} 94 > 95 <MoreHorizontal className="size-4" /> 96 <span className="sr-only">More</span> 97 </span> 98 ); 99} 100 101export { 102 Breadcrumb, 103 BreadcrumbList, 104 BreadcrumbItem, 105 BreadcrumbLink, 106 BreadcrumbPage, 107 BreadcrumbSeparator, 108 BreadcrumbEllipsis, 109};