'use client' import { useMediaQuery } from '@gentleduck/hooks/use-media-query' import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from '@gentleduck/registry-ui/breadcrumb' import { Button } from '@gentleduck/registry-ui/button' import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from '@gentleduck/registry-ui/drawer' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@gentleduck/registry-ui/dropdown-menu' import Link from 'next/link' import * as React from 'react' function toTitleCase(segment: string) { return segment .replace(/[-_]+/g, ' ') .split(' ') .filter(Boolean) .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(' ') } export function DocsPathBreadcrumb({ segments, basePath = '/docs' }: { segments: string[]; basePath?: string }) { const [open, setOpen] = React.useState(false) const isDesktop = useMediaQuery('(min-width: 768px)') if (!segments.length) return null const items = segments.map((segment, index) => ({ href: `${basePath}/${segments.slice(0, index + 1).join('/')}`, isLast: index === segments.length - 1, label: toTitleCase(segment), })) // Always show: first + last. Collapse everything in between. const first = items[0] const last = items.length > 1 ? items[items.length - 1] : null const middle = items.length > 2 ? items.slice(1, -1) : [] return ( {first && ( {first.isLast ? ( {first.label} ) : ( {first.label} )} )} {middle.length > 0 && ( <> {isDesktop ? ( {middle.map((item) => ( {item.label} ))} ) : ( Navigate to Select a page to navigate to.
{middle.map((item) => ( {item.label} ))}
)}
)} {last && ( <> {last.label} )}
) }