'use client'; import * as React from 'react'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { ChevronDown } from 'lucide-react'; import { cn } from '@/lib/utils'; import type { NavItem } from '@/lib/layout/nav-items'; function isActive(pathname: string, href: string): boolean { return pathname === href || pathname.startsWith(`${href}/`); } function isGroupActive(pathname: string, item: NavItem): boolean { if (isActive(pathname, item.href)) return true; return item.children?.some((child) => isActive(pathname, child.href)) ?? false; } interface NavListProps { items: NavItem[]; /** Modo ícones-apenas (sidebar recolhida) — grupos viram link direto pro primeiro filho. */ collapsed?: boolean; /** Disparado ao navegar (o Drawer usa isso para fechar). */ onNavigate?: () => void; } /** * Lista de navegação com estado de item/grupo ativo — compartilhada entre * `Sidebar` (desktop) e `Drawer` (mobile) para não duplicar essa lógica em * dois lugares. */ export function NavList({ items, collapsed = false, onNavigate }: NavListProps) { const pathname = usePathname(); const [openHref, setOpenHref] = React.useState(null); return ( ); }