fix(navegacao): foco em âncora de outra página, vitrine acessível e 3D mais leve
Foco cai no destino ao chegar de outra página; âncoras ignoram ?tipo=; movimento reduzido salta em todos os cliques; cronômetro da janela ampliada; degradê no topo de Projetos e legendas do mergulho com intervalos testados; vitrine acima da barra de cookies e com 2 paradas por projeto; reel-list.css no global; 3D montado em tarefas curtas, limitado a ~30 qps e estático com WebGL por software; pôsteres da vitrine de 330 para 158 KB; SC Plus regravado; scripts sem funções acima de complexidade 10.
This commit is contained in:
1 parent
9e2d65a926
commit
204ebd5fa5
49 files changed
+2197
-606
No files matched your search
@@ -38,14 +38,29 @@ function mockMedia(active: string[] = [DIVE_QUERY]) {
|
||||
}));
|
||||
}
|
||||
|
||||
/** Um WebGL2 que abre, e que diz na extensão de depuração em que renderizador desenha. */
|
||||
function mockWebGLRenderer(renderer: string) {
|
||||
HTMLCanvasElement.prototype.getContext = (() => ({
|
||||
getExtension: (name: string) =>
|
||||
name === "WEBGL_debug_renderer_info"
|
||||
? { UNMASKED_RENDERER_WEBGL: 37446 }
|
||||
: null,
|
||||
getParameter: (parameter: number) =>
|
||||
parameter === 37446 ? renderer : null,
|
||||
})) as unknown as typeof HTMLCanvasElement.prototype.getContext;
|
||||
}
|
||||
|
||||
function mockNavigator(values: Record<string, unknown>) {
|
||||
for (const [key, value] of Object.entries(values))
|
||||
Object.defineProperty(navigator, key, { configurable: true, value });
|
||||
}
|
||||
|
||||
/** O que o globals.css dá ao hero: a altura do mergulho (telas de hero além dele) vem de `--hero-tail`. */
|
||||
const HERO_TAIL = { "--hero-tail": 1.7 } as React.CSSProperties;
|
||||
|
||||
function Hero() {
|
||||
return (
|
||||
<section className="hero">
|
||||
<section className="hero" style={HERO_TAIL}>
|
||||
<HeroField />
|
||||
</section>
|
||||
);
|
||||
@@ -155,7 +170,7 @@ describe("HeroField (ambient background)", () => {
|
||||
expect(mockScenes.at(-1)?.labelsRef).toBeUndefined();
|
||||
});
|
||||
|
||||
it.each([
|
||||
it.each<[string, () => void]>([
|
||||
["a touch pointer", () => mockMedia([DIVE_QUERY, "(pointer: coarse)"])],
|
||||
["reduced motion", () => mockMedia(["(prefers-reduced-motion: reduce)"])],
|
||||
["the data saver", () => mockNavigator({ connection: { saveData: true } })],
|
||||
@@ -168,6 +183,17 @@ describe("HeroField (ambient background)", () => {
|
||||
undefined;
|
||||
},
|
||||
],
|
||||
...[
|
||||
"ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
|
||||
"llvmpipe (LLVM 15.0.7, 256 bits)",
|
||||
"ANGLE (Microsoft, Microsoft Basic Render Driver (0x0000008C) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||||
].map(
|
||||
(renderer) =>
|
||||
[
|
||||
`software WebGL (${renderer.slice(0, 24)}...)`,
|
||||
() => mockWebGLRenderer(renderer),
|
||||
] as [string, () => void],
|
||||
),
|
||||
])(
|
||||
"keeps the light static background (no WebGL, no dive, no scroll work) with %s",
|
||||
async (_label, arrange) => {
|
||||
|
||||
Reference in new issue
Block a user