Data List

1.3.3

Apresenta listagens de itens estruturados em linhas verticais de fácil leitura, como pedidos ou notificações, sem seleção nem ações em lote.

  • Exibir registros estruturados em uma lista vertical: apresentar itens como pedidos, notificações ou atividade recente, cada um com seus próprios atributos, sem necessidade de comparar entre colunas. Ex.: "Pedidos recentes", "Atividade da conta".
  • Priorizar a leitura rápida por linha: organizar poucos atributos-chave por item (título, data, status) em um formato de leitura vertical, em contextos administrativos em que a ordem entre os itens é relevante. Ex.: número do pedido, cliente e status de pagamento em uma mesma linha.
  • Comparar atributos entre muitos itens em colunas: quando cada linha precisa mostrar vários atributos comparáveis entre si, ser filtrada ou ordenada por coluna. Nesse caso, usar Data Table.
  • Habilitar seleção ou interação por linha: quando cada linha precisa responder a um clique, mostrar um checkbox, um radio ou um toggle. O Data List não oferece essas props. Nesse caso, usar Interactive List.
  • Exibir menos de 3 itens ou mais de 15 sem paginação: uma listagem muito curta não justifica o padrão completo, e uma muito longa sem scroll ou paginação adequada dificulta encontrar um item específico.

#1042

22 mar

Dr. Johnnie Bins

R$ 45.900,00

4 produtos

Pagamento pendente

Row com texto, tag de status e link de detalhe

  1. Row: unidade repetível da lista (DataList.Row); é renderizada com role listitem dentro de DataList (role list) e admite seu próprio topDivider.
  2. Text: título e metadados do item (data, cliente, valor); cada row combina os que forem necessários, sem uma posição fixa entre eles.
  3. Tag (opcional): status do item, como o pagamento ou o envio.
  4. Link (opcional): acesso a mais detalhes ou a uma ação de expandir conteúdo dentro da mesma linha.
Tênis urbano

Tênis urbano

24 em estoque

Row com Thumbnail para identificar o item visualmente

  1. Thumbnail (opcional): imagem do item; útil quando ajuda a identificá-lo mais rápido do que somente o texto.

#1042

22 mar

Dr. Johnnie Bins

R$ 45.900,00

#1041

21 mar

Earnest Berge

R$ 18.500,00

Com divisores: separa cada row com uma borda inferior em toda a lista (bottomDivider em DataList, true por padrão) e uma borda superior por row (topDivider em DataList.Row, também true por padrão). Recomendado para listagens em que é preciso marcar onde cada item termina. Ex.: pedidos, notificações.

#1042

22 mar

Dr. Johnnie Bins

R$ 45.900,00

#1041

21 mar

Earnest Berge

R$ 18.500,00

Sem divisores: remove os separadores passando bottomDivider={false} para DataList e topDivider={false} para cada DataList.Row. Recomendado para listagens mais compactas, ou quando o espaçamento entre rows já é suficiente para diferenciá-las. Ex.: um resumo curto dentro de uma card.

Padding small

Padding base (padrão)

Padding none

Padding das linhas: controla o espaçamento interno de cada DataList.Row com padding (small, base — padrão — ou none); paddingBottom permite um espaçamento inferior diferente e, se não for definido, usa o valor de padding. Usar small ou none para listagens mais compactas. Ex.: uma listagem dentro de um painel lateral estreito pode usar small.

O Data List costuma viver dentro do body de Page, com um título ou uma contagem de itens acima. Por ser uma lista vertical de uma única coluna, é a alternativa ao Data Table em contêineres estreitos — uma barra lateral, um modal ou uma tela mobile — em que exibir colunas comparáveis obrigaria a cortar informação ou a usar scroll horizontal.

Pedidos recentes

3 pedidos

#1042

22 mar

Dr. Johnnie Bins

R$ 45.900,00

Pagamento pendente

#1041

21 mar

Earnest Berge

R$ 18.500,00

Não enviado

#1042

22 mar

Dr. Johnnie Bins

R$ 45.900,00

Pagamento pendente

Exibir somente os atributos que ajudam a identificar ou decidir sobre o item, sem sobrecarregar a linha.

#1042

22 mar

Dr. Johnnie Bins

R$ 45.900,00

Depósito Norte · Envio expresso · Faturado

Pagamento pendente

Não enviado

Prioridade alta

Não acumular múltiplas tags, links e textos secundários na mesma linha: isso dificulta encontrar o dado relevante.

#1041

21 mar

4 produtos

Usar no máximo um Link de detalhe por linha para abrir ou expandir informações adicionais.

Não repetir vários links ou ações de detalhe na mesma linha: não fica claro qual corresponde a qual dado.

  • Estrutura semântica de lista: o DataList é renderizado com role list e cada DataList.Row com role listitem, de modo que um leitor de tela anuncia a quantidade de itens e a posição de cada um sem precisar de atributos ARIA adicionais.
  • A acessibilidade do conteúdo depende dos itens filhos: como cada row admite qualquer combinação de componentes (Text, Tag, Link, Icon…), os critérios de acessibilidade próprios desses componentes (contraste, foco visível, texto alternativo) continuam se aplicando dentro da linha; o Data List não adiciona nem remove nada por si só.
  • Sem comportamento próprio de foco ou teclado: o Data List não gerencia seleção nem interação. Se uma linha precisar responder ao teclado ou ao foco — por exemplo, um botão, um checkbox ou um toggle por item —, usar Interactive List, que implementa esse comportamento.

Instale o componente via terminal.

npm install @nimbus-ds/data-list

Listagem de pedidos com número, data, cliente, total e tags de status de pagamento e envio.

import React from "react";
import { DataList } from "@nimbus-ds/patterns";
import { Text, Tag, Link, Box } from "@nimbus-ds/components";
import {
  ChevronDownIcon,
  CreditCardIcon,
  BoxUnpackedIcon,
} from "@nimbus-ds/icons";

const Example: React.FC = () => (
  <DataList>
    {Array.from({ length: 3 }, (_, i) => (
      <DataList.Row key={i} gap="1">
        <Box display="flex" justifyContent="space-between">
          <Text fontWeight="medium" color="primary-interactive">
            #123456
          </Text>
          <Text>22 Mar</Text>
        </Box>
        <Box display="flex" justifyContent="space-between">
          <Text>Customer name</Text>
          <Text>R$ 3.500</Text>
        </Box>
        <Link textDecoration="none">
          10 products
          <ChevronDownIcon style={{ display: "inline-block", verticalAlign: "middle", marginLeft: "4px" }} />
        </Link>
        <Box display="flex" flexWrap="wrap" gap="2" pt="2">
          <Tag appearance="warning">
            <CreditCardIcon size={12} />
            <Text color="warning-textLow">Awaiting payment</Text>
          </Tag>
          <Tag appearance="primary">
            <BoxUnpackedIcon size={12} />
            <Text color="primary-textLow">Unfulfilled</Text>
          </Tag>
        </Box>
      </DataList.Row>
    ))}
  </DataList>
);

export default Example;

As propriedades adicionais são repassadas ao elemento que renderiza o <DataList> (uma div com role list). Consulte a documentação para ver a lista de atributos aceitos pelo elemento <DataList>.

  • Data Table — alternativa quando os itens compartilham atributos comparáveis para exibir em colunas.
  • Interactive List — alternativa quando cada linha precisa responder a um clique, checkbox, radio ou toggle.
  • Product Data List — alternativa quando cada item precisa de uma imagem destacada e organização em seções.
  • Thumbnail — componente usado dentro de uma row quando o item precisa de uma imagem.

DataList

NameTypeDefaultDescription

children*

React.ReactNode

Content of the List component.

bottomDivider

boolean

'true'

Defines whether the List has a bottom border.

DataList.Row

NameTypeDefaultDescription

padding

'base'
'none'
'small'

'base'

Optional padding for the row.

paddingBottom

'base'
'none'
'small'

'base'

Optional padding bottom for the row.

children*

React.ReactNode

Content of the row.

topDivider

boolean

'true'

Determines if the row has a top border.

Ajude-nos a melhorar a documentação

Encontrou um problema ou tem uma sugestão? Conte para a gente.