{{-- Itens de navegação do painel — **o mesmo** dado na coluna e no menu acionável (ADR-036). O dado chega pronto do Core (`PanelMenu`: manifesto de módulos agrupado, ordenado e filtrado por permissão — ADR-014/ADR-033); a marcação é idêntica e só a apresentação muda (CSS). `label` e `title` são **chaves** de tradução (ADR-012). Nada aqui busca dados. Grupos (variante `sidebar`, P5.6.S2): cada grupo é um `
` nativo com `` (abre sem JS) e nasce **aberto** quando contém a rota atual — o estado manual é persistido pelo enhancement (`data-cms-nav-group`), nunca pelo servidor. --}} @php $variant ??= 'sidebar'; $menu ??= []; /** Marca a tela atual (inclusive subpáginas) sem vazar link para outra área. */ $isCurrent = static function (?string $url): bool { if (! is_string($url) || $url === '') { return false; } $base = rtrim($url, '/'); return request()->url() === $base || str_starts_with(request()->url(), $base.'/'); }; /** O grupo da rota atual nasce aberto: a navegação nunca esconde onde o operador está. */ $groupIsCurrent = static function (array $group) use ($isCurrent): bool { foreach ($group['items'] as $item) { if ($isCurrent($item['url'])) { return true; } foreach ($item['children'] as $child) { if ($isCurrent($child['url'] ?? null)) { return true; } } } return false; }; @endphp