ListView
Lista de uma coluna com teclado, seleção e ações por item.
O ListView é a lista rica de uma coluna: tentativas de Webhook, Pedidos no celular, Fontes. Ele traz navegação por teclado, busca por inicial, seleção e ações por item. Para dados em colunas use DataGrid; para linhas-cartão fixas, sem seleção, ItemCard.
import { ListView } from "@rastreio-x/ui";
Padrão
Passe items e um render function. Cada ListView.Item tem id e textValue; o conteúdo vai em ListView.ItemContent com ListView.Title e ListView.Description. O aria-label é obrigatório.
Variante secundária
primary (padrão) tem fundo cinza com itens em superfície; secondary não tem fundo e é a escolha dentro de Widget e Sheet.
Seleção
selectionMode="multiple" (ou single) mostra as caixas de seleção. Use selectedKeys e onSelectionChange para controlar. Combine com ActionBar para ações em lote.
Ações por item
ListView.ItemAction reúne o estado e os botões à direita. onAction trata o clique na linha.
Itens desabilitados
disabledKeys impede seleção e foco. Explique o motivo no texto do item.
Lista vazia
renderEmptyState mostra o que fazer quando não há itens.
Anatomia
ListView.Item: a linha, comidetextValue.ListView.ItemContent: ícone ou avatar mais texto.ListView.TitleeListView.Description: texto principal e de apoio, truncados.ListView.ItemAction: o espaço de ações à direita.
Propriedades
ListView:
ListView.Item:
Animações
O ListView não anima entradas nem saídas; só o estado de hover, seleção e foco muda de cor. Com prefers-reduced-motion, a folha global da fachada reduz qualquer transição a 0,01 ms.
Acessibilidade
- Baseado em
GridListdo React Aria: papelgrid, linhas comrow, seleção anunciada. - Teclado: setas movem entre itens, Espaço seleciona, Enter dispara a ação, Home e End vão às pontas, digitar a inicial salta ao item.
aria-labelobrigatório noListView;textValueem cada item.- Botões dentro de
ListView.ItemActionprecisam do próprioaria-label. - Estado em ícone mais texto, nunca só cor.
Boas práticas
Faça
Evite
- Use
secondarydentro de painéis para não somar duas superfícies. - Para mais de 200 itens, ligue
virtualized. - Para dados em colunas e ordenação, use
DataGrid.