import { Ellipsis } from 'lucide-react' import Block from '../Primitives/Block/Block' import PrimitiveLink from '../Primitives/PrimitiveLink' import PrimitiveButton from '../Primitives/PrimitiveButton/PrimitiveButton' import PrimitiveText from '../Primitives/PrimitiveText/PrimitiveText' import { FOUNDATION_THEME } from '../../tokens' import type { BreadcrumbTokenType } from './breadcrumb.tokens' import type { BreadcrumbItemType, BreadcrumbProps, BreadcrumbSkeletonProps, } from './types' import { normalizeBreadcrumbItems } from './types' import { useResponsiveTokens } from '../../hooks/useResponsiveTokens' import { SkeletonVariant } from '../Skeleton' import BreadcrumbSkeleton from './BreadcrumbSkeleton' const MAX_ITEMS = 4 const BreadcrumbItem = ({ item, isActive, skeleton, }: { item: BreadcrumbItemType isActive: boolean skeleton?: BreadcrumbSkeletonProps }) => { const breadcrumbTokens = useResponsiveTokens('BREADCRUMB') const showSkeleton = skeleton?.show const skeletonVariant = skeleton?.variant as SkeletonVariant const handleClick = (event: React.MouseEvent) => { if (item.onClick) { event.preventDefault() item.onClick(event) } } if (showSkeleton) { return ( ) } return ( <> {item.leftSlot && ( )} {item.label} {item.rightSlot && ( )} {!isActive && ( )} ) } const Breadcrumb = ({ items: itemsProp, skeleton }: BreadcrumbProps) => { const items = normalizeBreadcrumbItems(itemsProp) const breadcrumbTokens = useResponsiveTokens('BREADCRUMB') if (items.length === 0) return null const baseItem = items[0] const shouldShowMenu = items.length > MAX_ITEMS const breadcrumbMenuItems = shouldShowMenu ? items.slice(1, items.length - 3) : [] const menuItems = breadcrumbMenuItems.map((item) => { return { label: item.label, href: item.href, leftSlot: item.leftSlot, rightSlot: item.rightSlot, } }) const restItems = shouldShowMenu ? items.slice(-3) : items.slice(1) return (
    {baseItem && (
  1. )} {menuItems.length > 0 && (
  2. )} {restItems.map((item, index) => (
  3. ))}
) } Breadcrumb.displayName = 'Breadcrumb' export default Breadcrumb