Lens
StableUma lupa que segue o ponteiro sobre o conteúdo que ela cobre: um círculo que mostra a mesma área ampliada, sem tirar nada de lugar. Serve para detalhe — a textura de um produto, um trecho de um gráfico, o recorte de uma captura de tela. A cópia ampliada é a mesma coisa duas vezes, então ela fica fora da árvore de acessibilidade; o conteúdo embaixo continua inteiro.
Instalação
npx up-web-ds add lensPreview
Basic
sha256:9f2c1ab · 4.1 kB · stable · internal
Over An Image
Loupe
Parked
Pinned
With Content
Cada `/r/*` exige um Bearer token; sem credencial, 401.
Ver a página de ajudaAll states
Basic
sha256:9f2c1ab · 4.1 kB · stable · internal
Over An Image
Loupe
Parked
Pinned
With Content
Cada `/r/*` exige um Bearer token; sem credencial, 401.
Ver a página de ajudaUsage
Props
prop obrigatória.
Metadata
Notas de acessibilidade
Verificado em tests/e2e/lens.spec.ts no Chromium desktop e mobile, em light e dark, com Axe sem violações WCAG 2.2 AA. Teclado: a lupa é um realce de ponteiro sobre conteúdo que já está inteiro embaixo dela, então não há nada para operar — ela não entra na sequência de tabulação e não captura foco, verificado em navegador e por teste. Isso é uma mudança deliberada em relação ao upstream, registrada no ingestion record: lá havia tabIndex={0} com role="region" e um handler de Escape, mas nenhuma tecla movia a lupa, então era uma parada de tabulação que não fazia nada. Quem precisa de ampliação por teclado tem o zoom do navegador e a lupa do sistema, que ampliam tudo e não só este recorte. Leitor de tela verificado por teste e pela árvore de acessibilidade do navegador: a camada ampliada é aria-hidden, porque é o mesmo conteúdo uma segunda vez — lê-lo de novo, em outra ordem, seria ruído —, e `ariaLabel` nomeia a região que a lupa cobre; cada instância precisa de um nome próprio, porque dois landmarks com o mesmo nome é violação de landmark-unique. Elementos interativos dentro do conteúdo continuam alcançáveis: a camada ampliada não os duplica na árvore nem os cobre para o teclado. Touch verificado em viewport de 375px com emulação de toque: não há alvo próprio — a lupa reage a ponteiro — e o conteúdo embaixo permanece tocável; a área não provoca rolagem horizontal. Reduced motion verificado em navegador com prefers-reduced-motion: reduce e por teste: o movimento é animado em JavaScript, então motion-safe: não o alcança e a política é useReducedMotion() — o círculo continua aparecendo, porque aparecer é a função, mas chega sem crescer e com duração zero.
Classificação
- Layer
- Primitive
- Domínio
- Domain-free (compartilhado)
- Categoria
- data-display
- Status
- Stable
Origem e distribuição
- Fonte
- magic registry / lens
- Licença
- MIT
- Distribuição
- Interna
Acessibilidade
- Teclado: revisado
- Leitor de tela: revisado
- Touch: revisado
- Reduced motion: revisado
Dependências
- Pacotes
- motion
- Ícones
- Nenhum
- Construído sobre
- Nenhum
- Usado por
- Nenhum ainda