paperclip/ui/src/components/SidebarNavItem.tsx

43 lines
1 KiB
TypeScript
Raw Normal View History

import { NavLink } from "react-router-dom";
import { cn } from "../lib/utils";
import type { LucideIcon } from "lucide-react";
interface SidebarNavItemProps {
to: string;
label: string;
icon: LucideIcon;
end?: boolean;
badge?: number;
}
export function SidebarNavItem({
to,
label,
icon: Icon,
end,
badge,
}: SidebarNavItemProps) {
return (
<NavLink
to={to}
end={end}
className={({ isActive }) =>
cn(
"flex items-center gap-2.5 px-3 py-2 text-[13px] font-medium transition-colors",
isActive
? "bg-accent text-foreground"
: "text-foreground/80 hover:bg-accent/50 hover:text-foreground"
)
}
>
<Icon className="h-4 w-4 shrink-0" />
<span className="flex-1 truncate">{label}</span>
{badge != null && badge > 0 && (
<span className="ml-auto text-xs bg-primary text-primary-foreground rounded-full px-1.5 py-0.5 leading-none">
{badge}
</span>
)}
</NavLink>
);
}