M4UG5FMI5ICQRLJCCNSLV3ZKCGIXDQ65ECJM4PBE3NZYHT3CJLDAC
import * as React from "react"
import { Slot } from "@radix-ui/react-slot"
import { ChevronRight, MoreHorizontal } from "lucide-react"
import { cn } from "@/lib/utils"
const Breadcrumb = React.forwardRef<
HTMLElement,
React.HTMLAttributes<HTMLElement>
>(({ className, ...props }, ref) => (
<nav
ref={ref}
aria-label="breadcrumb"
className={cn(
"flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground",
className
)}
{...props}
/>
))
Breadcrumb.displayName = "Breadcrumb"
const BreadcrumbList = React.forwardRef<
HTMLOListElement,
React.OlHTMLAttributes<HTMLOListElement>
>(({ className, ...props }, ref) => (
<ol
ref={ref}
className={cn(
"flex flex-wrap items-center gap-1.5 break-words",
className
)}
{...props}
/>
))
BreadcrumbList.displayName = "BreadcrumbList"
const BreadcrumbItem = React.forwardRef<
HTMLLIElement,
React.LiHTMLAttributes<HTMLLIElement>
>(({ className, ...props }, ref) => (
<li
ref={ref}
className={cn("inline-flex items-center gap-1.5", className)}
{...props}
/>
))
BreadcrumbItem.displayName = "BreadcrumbItem"
const BreadcrumbLink = React.forwardRef<
HTMLAnchorElement,
React.AnchorHTMLAttributes<HTMLAnchorElement> & {
asChild?: boolean
}
>(({ asChild, className, ...props }, ref) => {
const Comp = asChild ? Slot : "a"
return (
<Comp
ref={ref}
className={cn("hover:text-foreground transition-colors", className)}
{...props}
/>
)
})
BreadcrumbLink.displayName = "BreadcrumbLink"
const BreadcrumbPage = React.forwardRef<
HTMLSpanElement,
React.HTMLAttributes<HTMLSpanElement>
>(({ className, ...props }, ref) => (
<span
ref={ref}
role="link"
aria-current="page"
aria-disabled="true"
className={cn("font-normal text-foreground", className)}
{...props}
/>
))
BreadcrumbPage.displayName = "BreadcrumbPage"
const BreadcrumbSeparator = ({
children,
className,
...props
}: React.ComponentProps<"li">) => (
<li
role="presentation"
aria-hidden="true"
className={cn("[&>svg]:size-3.5", className)}
{...props}
>
{children || <ChevronRight className="size-3" />}
</li>
)
BreadcrumbSeparator.displayName = "BreadcrumbSeparator"
const BreadcrumbEllipsis = ({
className,
...props
}: React.ComponentProps<"span">) => (
<span
role="presentation"
aria-hidden="true"
className={cn("flex h-9 w-9 items-center justify-center", className)}
{...props}
>
<MoreHorizontal className="h-4 w-4" />
<span className="sr-only">More</span>
</span>
)
BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis"
export {
Breadcrumb,
BreadcrumbList,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbPage,
BreadcrumbSeparator,
BreadcrumbEllipsis,
}
<div className="flex justify-between items-center mb-4">
<h2 className="text-xl font-bold">
{!hideDatasetName && (
<div className="flex justify-between items-center mb-4">
<h2 className="text-xl font-bold">
Locations
</h2>
{datasetName && (
<div className="text-gray-600 text-sm flex items-center">
{datasetName}
</div>
)}
</div>
)}
{hideDatasetName && (
<h2 className="text-xl font-bold mb-4">
<div className="flex justify-between items-center mb-4">
<h2 className="text-xl font-bold">
{!hideDatasetName && (
<div className="flex justify-between items-center mb-4">
<h2 className="text-xl font-bold">
<span className="text-gray-800">{locationName}</span>
<span className="ml-2">Clusters</span>
</h2>
<div className="text-gray-600 text-sm flex items-center">
{datasetName}
</div>
</div>
)}
{hideDatasetName && (
<h2 className="text-xl font-bold mb-4">
<div className="flex">
<button
onClick={handleBackToDatasets}
className="px-4 py-2 text-sm bg-gray-100 hover:bg-gray-200 rounded-md flex items-center"
>
<span className="mr-1">←</span> Datasets
</button>
<div className="flex justify-between items-center py-1">
<Breadcrumb className="text-sm py-0">
<BreadcrumbList className="py-0">
<BreadcrumbItem>
<BreadcrumbLink onClick={handleBackToDatasets} className="cursor-pointer">
Datasets
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>
Locations
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
<div className="text-gray-600 text-sm flex items-center">
{selectedDatasetName}
</div>
<button
onClick={handleBackToDatasets}
className="mt-3 px-4 py-2 text-sm bg-gray-100 hover:bg-gray-200 rounded-md"
>
Datasets
</button>
<div className="mt-3">
<Breadcrumb className="text-sm py-0">
<BreadcrumbList className="py-0">
<BreadcrumbItem>
<BreadcrumbLink onClick={handleBackToDatasets} className="cursor-pointer">
Datasets
</BreadcrumbLink>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
<div className="flex">
<button
onClick={handleBackToLocations}
className="px-4 py-2 text-sm bg-gray-100 hover:bg-gray-200 rounded-md flex items-center mr-2"
>
<span className="mr-1">←</span> Locations
</button>
<button
onClick={handleBackToDatasets}
className="px-4 py-2 text-sm text-gray-600 hover:text-gray-800 flex items-center"
>
<span className="mr-1">↑</span> Datasets
</button>
<div className="flex justify-between items-center py-1">
<Breadcrumb className="text-sm py-0">
<BreadcrumbList className="py-0">
<BreadcrumbItem>
<BreadcrumbLink onClick={handleBackToDatasets} className="cursor-pointer">
Datasets
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink onClick={handleBackToLocations} className="cursor-pointer">
Locations
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>
Clusters
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
<div className="text-gray-600 text-sm flex items-center">
{selectedDatasetName}
</div>
<div className="flex mt-3">
<button
onClick={handleBackToLocations}
className="px-4 py-2 text-sm bg-gray-100 hover:bg-gray-200 rounded-md mr-2"
>
<span className="mr-1">←</span> Locations
</button>
<button
onClick={handleBackToDatasets}
className="px-4 py-2 text-sm text-gray-600 hover:text-gray-800 flex items-center"
>
<span className="mr-1">↑</span> Datasets
</button>
<div className="mt-3">
<Breadcrumb className="text-sm py-0">
<BreadcrumbList className="py-0">
<BreadcrumbItem>
<BreadcrumbLink onClick={handleBackToDatasets} className="cursor-pointer">
Datasets
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink onClick={handleBackToLocations} className="cursor-pointer">
Locations
</BreadcrumbLink>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>