feat(home): ofertas que vendem o título, WhatsApp no hero e menu do celular acessível
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.
This commit is contained in:
1 parent
de6af74a0c
commit
f8545cd442
44 files changed
+2286
-571
No files matched your search
@@ -1,6 +1,11 @@
|
||||
import {
|
||||
AI_REVIEW_SUBJECT,
|
||||
CASES_SUBJECT,
|
||||
HOME_SUBJECT,
|
||||
headerOpensWhatsApp,
|
||||
isServiceOrCasePath,
|
||||
RESUME_SUBJECT,
|
||||
SERVICES_SUBJECT,
|
||||
type WhatsAppContexts,
|
||||
whatsAppSubjectForPath,
|
||||
} from "./whatsapp";
|
||||
@@ -43,14 +48,27 @@ describe("whatsAppSubjectForPath", () => {
|
||||
|
||||
it.each([
|
||||
"",
|
||||
"/servicos/",
|
||||
"/cases/",
|
||||
"/ia/extra",
|
||||
"/IA",
|
||||
"/cases/sev-modaintima/extra",
|
||||
"/curriculo/extra",
|
||||
"/servicos/a/b",
|
||||
])("path: %j -> no subject", (pathname) => {
|
||||
expect(whatsAppSubjectForPath(pathname, contexts)).toBeUndefined();
|
||||
});
|
||||
|
||||
it.each([
|
||||
["/servicos/", SERVICES_SUBJECT],
|
||||
["/cases/", CASES_SUBJECT],
|
||||
["/curriculo/", RESUME_SUBJECT],
|
||||
["/", HOME_SUBJECT],
|
||||
])(
|
||||
"path: the index page %j (with or without the slash) -> its own subject",
|
||||
(pathname, subject) => {
|
||||
expect(whatsAppSubjectForPath(pathname, contexts)).toBe(subject);
|
||||
expect(whatsAppSubjectForPath(pathname)).toBe(subject);
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
describe("isServiceOrCasePath", () => {
|
||||
@@ -61,3 +79,19 @@ describe("isServiceOrCasePath", () => {
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
describe("headerOpensWhatsApp", () => {
|
||||
it.each(["", "/servicos/a/b", "/cases/a/b", "/IA", "/curriculo/extra"])(
|
||||
"path: %j -> false (the header button goes to the home form)",
|
||||
(pathname) => {
|
||||
expect(headerOpensWhatsApp(pathname)).toBe(false);
|
||||
},
|
||||
);
|
||||
|
||||
it.each(["/ia/", "/cases/", "/servicos/", "/curriculo/"])(
|
||||
"path: the index page %j with the trailing slash -> true",
|
||||
(pathname) => {
|
||||
expect(headerOpensWhatsApp(pathname)).toBe(true);
|
||||
},
|
||||
);
|
||||
});
|
||||
Reference in new issue
Block a user