"use client"; import { useEffect } from "react"; import { elementForHash } from "@/app/components/cinematic/fragment-nav"; /** * Caminho já exibido neste documento. Fica fora do componente porque o template da raiz remonta quando o primeiro * segmento da rota muda (de / para /cases), e a carga inicial precisa seguir distinta de uma troca de página. */ let shownPath: string | null = null; /** Os testes reproduzem vários documentos dentro de um só. */ export function resetFocusOnNavigation() { shownPath = null; } /** * Depois de uma troca de página no navegador (o `pathname` mudou), o foco vai para o contêiner do conteúdo * (`#main-content`, o mesmo destino do link "Pular"): leitor de tela e teclado seguem da página nova, não do link * clicado na antiga. Sem rolar a página (preventScroll) e sem nada na carga inicial, que não tem página anterior. * Quando a URL traz um `#id` que existe na página nova (de /privacidade para /#contact), o foco é do destino da * âncora (quem chega a ele dá o foco); o contêiner não o toma, para o Tab seguir dali. */ export function useFocusOnNavigation(pathname: string) { useEffect(() => { const previous = shownPath; shownPath = pathname; if (previous === null || previous === pathname) return; if (elementForHash(window.location.hash)) return; document.getElementById("main-content")?.focus({ preventScroll: true }); }, [pathname]); }