import React, { useMemo } from 'react'; import { NavLink } from 'react-router-dom'; import { type LucideIcon } from 'lucide-react'; import { cn } from '@/lib/utils'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; export interface NavItem { icon: LucideIcon; to: string; end?: boolean; label: string; } interface NavPillProps { item: NavItem; onNavigate?: () => void; badge?: number; badgeNames?: string[]; } export const NavPill = React.memo(function NavPill({ item, onNavigate, badge = 0, badgeNames = [] }: NavPillProps) { const Icon = useMemo(() => item.icon, [item.icon]); const to = useMemo(() => item.to, [item.to]); const end = useMemo(() => item.end, [item.end]); const label = useMemo(() => item.label, [item.label]); return ( cn( 'inline-flex items-center gap-2 rounded-full px-3 py-2 text-sm font-medium transition-all', 'focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50', isActive ? 'bg-primary text-primary-foreground shadow-sm shadow-primary/20' : 'text-muted-foreground hover:bg-accent hover:text-accent-foreground hover:shadow-sm' )} > {label} {badge > 0 && ( {badge > 99 ? '99+' : badge}

{badge} past due

{badgeNames.slice(0, 5).map(name => (

ยท {name}

))} {badgeNames.length > 5 && (

+{badgeNames.length - 5} more

)}
)}
); }); NavPill.displayName = 'NavPill';