vaiperui

componentes / gallery

Gallery

Grade responsiva de miniaturas que abre um visualizador em tela cheia.

Como usar

Passe `items` (`src`, `alt`, `thumbnail` e `caption` opcionais). Cada miniatura é um botão que abre o `Lightbox` naquela imagem; o foco volta para a miniatura ao fechar. Controle a grade com `columns`, `gap` e `aspectRatio`, ou desligue o visualizador com `lightbox={false}` e use `onItemClick`.

preview
Gallery.tsx
import { Gallery } from "vaiperui";
<Gallery
aria-label="Fotos da viagem"
columns={3}
items={[
{ src: "/photos/road.jpg", alt: "Mountain road", caption: "Road" },
{ src: "/photos/sky.jpg", alt: "Starry sky", thumbnail: "/photos/sky-sm.jpg" },
]}
/>

Colunas

preview
2
4 · 1 / 1
colunas.tsx
<Gallery columns={2} items={items} />
<Gallery columns={4} aspectRatio="1 / 1" items={items} />

Radius e espaçamento

preview
none · 2
lg · 16
radius.tsx
<Gallery radius="none" gap={2} items={items} />
<Gallery radius="lg" gap={16} items={items} />

Sem visualizador

preview
lightbox={false}
sem-visualizador.tsx
<Gallery lightbox={false} onItemClick={(item, i) => select(i)} items={items} />

Props

PropValoresPadrãoDescrição
items{ src, alt, thumbnail?, caption? }[]—Imagens. `thumbnail` vai na grade, `src` no visualizador
columnsnumber3Colunas da grade
gapnumber8Espaço entre miniaturas, em px
aspectRatiostring4 / 3Proporção CSS de cada miniatura
lightboxbooleantrueAbrir o visualizador ao clicar
onItemClick(item, index) => voidnenhumChamado a cada clique em uma miniatura
openLabel(item, index) => stringOpen image N: altNome acessível de cada botão de miniatura
lightboxProps{ label, closeLabel, previousLabel, nextLabel, counterLabel }nenhumTextos do visualizador
radiusnone | sm | md | lg | fullmdArredondamento das miniaturas
animationnone | smooth | fast | bouncesmoothTransição do zoom ao passar o mouse
aria-labelstringnenhumDescreve a lista de imagens

Acessibilidade

  • Os itens formam uma lista (`<ul aria-label>`) e cada miniatura é um `<button>` real, alcançável com Tab e ativado com Enter ou Espaço.
  • Cada botão é nomeado por `openLabel(item, index)`, que por padrão é `Open image N: <alt>`.
  • `alt` é obrigatório em cada item e é usado na miniatura e no visualizador.
  • A legenda de hover também aparece quando o botão tem foco do teclado.
  • Com `lightbox`, o clique abre o `Lightbox` (um diálogo modal); sem ele, os botões só chamam `onItemClick`.

Teclado

TeclaAção
TabPercorre as miniaturas
Enter / SpaceAbre a imagem no visualizador

Tenha em mente

  • Escreva um `alt` real para cada imagem (descreva-a); o componente não valida isso.
  • Passe `aria-label` para a lista e traduza `openLabel` para o idioma da página.