navbar.tsx2.5 KBView on GitHub import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
import { buttonVariants } from '@/components/ui/button';
import { type LucideIcon } from 'lucide-react';
import { cn } from '@/lib/utils';
interface NavProps {
isCollapsed: boolean;
links: {
title: string;
label?: string;
icon: LucideIcon;
variant: 'default' | 'ghost';
}[];
}
export function Nav({ links, isCollapsed }: NavProps) {
return (
<div
data-collapsed={isCollapsed}
className="group flex flex-col gap-4 py-2 data-[collapsed=true]:py-2"
>
<nav className="grid gap-1 px-2 group-data-[collapsed=true]:justify-center group-data-[collapsed=true]:px-2">
{links.map((link) =>
isCollapsed ? (
<Tooltip key=[redacted] delayDuration={0}>
<TooltipTrigger asChild>
<a
href="#"
className={cn(
buttonVariants({ variant: link.variant, size: 'icon' }),
'h-9 w-9',
link.variant === 'default' &&
'dark:bg-muted dark:text-muted-foreground dark:hover:bg-muted dark:hover:text-white',
)}
>
<link.icon className="h-4 w-4" />
<span className="sr-only">{link.title}</span>
</a>
</TooltipTrigger>
<TooltipContent side="right" className="flex items-center gap-4">
{link.title}
{link.label && <span className="text-muted-foreground ml-auto">{link.label}</span>}
</TooltipContent>
</Tooltip>
) : (
<a
key=[redacted]
href="#"
className={cn(
buttonVariants({ variant: link.variant, size: 'sm' }),
link.variant === 'default' &&
'dark:bg-muted dark:hover:bg-muted dark:text-white dark:hover:text-white',
'justify-start',
)}
>
<link.icon className="mr-2 h-4 w-4" />
{link.title}
{link.label && (
<span
className={cn(
'ml-auto',
link.variant === 'default' && 'text-background dark:text-white',
)}
>
{link.label}
</span>
)}
</a>
),
)}
</nav>
</div>
);
}