Diagnóstico sem case que não cabe; desktop com o GCC Installer como projeto próprio; IoT com o Twins Lab e a nota da Apolo. Mosaico de pôsteres em /servicos e /cases, faixa baixa em uma coluna no currículo, privacidade e laboratório; Laboratório como lista compacta; SEV começando por catálogo, pedido no WhatsApp e painel; Joinville e SC nos títulos; imagens do LCP com fetchPriority e sizes reais; pré-carregamento só no hover; 404 com Open Graph próprio.
42 lines
1.0 KiB
TypeScript
42 lines
1.0 KiB
TypeScript
import HoverPrefetchLink from "@/app/components/HoverPrefetchLink";
|
|
import { CaseCover, coverSizes } from "./CaseCover";
|
|
import { getCaseMedia } from "./case-media";
|
|
|
|
/**
|
|
* Capa do case dentro de um cartão: a imagem leva ao case, mas fica fora da leitura e da ordem de tabulação,
|
|
* porque o link de texto do mesmo cartão já leva ao mesmo lugar. Sem captura gravada, não mostra nada.
|
|
* A rota do case só é pré-carregada quando a pessoa chega no link (HoverPrefetchLink).
|
|
*/
|
|
export function CaseCoverLink({
|
|
id,
|
|
title,
|
|
demoUrl,
|
|
sizes = coverSizes.card,
|
|
priority = false,
|
|
}: {
|
|
id: string;
|
|
title: string;
|
|
demoUrl?: string | null;
|
|
sizes?: string;
|
|
priority?: boolean;
|
|
}) {
|
|
if (!getCaseMedia(id, "desktop")) return null;
|
|
|
|
return (
|
|
<HoverPrefetchLink
|
|
href={`/cases/${id}`}
|
|
aria-hidden="true"
|
|
tabIndex={-1}
|
|
className="mb-sp-5 block"
|
|
>
|
|
<CaseCover
|
|
id={id}
|
|
title={title}
|
|
demoUrl={demoUrl}
|
|
sizes={sizes}
|
|
priority={priority}
|
|
/>
|
|
</HoverPrefetchLink>
|
|
);
|
|
}
|