Três ofertas (site que traz pedidos pelo WhatsApp, sistema para tirar a operação da planilha, revisão de sistema existente) com miniatura e formulário com o tipo escolhido; botão principal do hero abre o WhatsApp; moldura da SEV no hero do celular; menu fecha ao navegar, Esc, foco preso incluindo a barra de cookies e espaço para ela; CinematicHome como componente de servidor com ilha cliente; /ia com H1 de oferta e cartão do que você recebe; botão flutuante em aside com transform; AVIF antes de WebP; copy sem repetir contato direto.
39 lines
1002 B
TypeScript
39 lines
1002 B
TypeScript
"use client";
|
|
|
|
import type { ReactNode } from "react";
|
|
import {
|
|
CONTACT_KIND_EVENT,
|
|
type ContactKind,
|
|
contactKindHref,
|
|
} from "./contact-subject";
|
|
import HoverPrefetchLink from "./HoverPrefetchLink";
|
|
|
|
/**
|
|
* Botão de uma oferta da home: leva ao formulário de contato com o tipo de projeto já escolhido.
|
|
* Na própria home o clique rola até o formulário (useCinematicScroll) sem trocar a busca do endereço, então o
|
|
* tipo também segue por evento; o `href` com `?tipo=` cobre quem chega de outra página ou abre o link em outra aba.
|
|
*/
|
|
export default function ContactOfferLink({
|
|
kind,
|
|
className,
|
|
children,
|
|
}: {
|
|
kind: ContactKind;
|
|
className?: string;
|
|
children: ReactNode;
|
|
}) {
|
|
return (
|
|
<HoverPrefetchLink
|
|
href={contactKindHref(kind)}
|
|
className={className}
|
|
onClick={() =>
|
|
window.dispatchEvent(
|
|
new CustomEvent<ContactKind>(CONTACT_KIND_EVENT, { detail: kind }),
|
|
)
|
|
}
|
|
>
|
|
{children}
|
|
</HoverPrefetchLink>
|
|
);
|
|
}
|