Pular para o conteúdo

SearchField

Campo de busca com ícone, botão de limpar e envio por Enter.

O SearchField é o campo de busca do Admin: ícone de lupa, texto e um botão de limpar que só aparece quando há texto. É a peça de busca da barra de filtros da lista de Pedidos. Para texto livre em formulários use TextField; para escolher entre opções conhecidas, Select.

import { SearchField } from "@rastreio-x/ui";

Padrão

A composição é SearchField.Group com SearchIcon, Input e ClearButton. Sem rótulo visível, aria-label é obrigatório.

Variantes

primary tem sombra suave; secondary não tem, e é a variante para usar em cartões e barras de filtro.

Filtro ao digitar

Com value e onChange você filtra a cada tecla. Serve para listas locais pequenas; anuncie o resultado em uma região aria-live.

Envio por Enter

onSubmit recebe o texto ao pressionar Enter e onClear avisa quando o botão (ou Esc) limpa o campo. É o padrão da lista de Pedidos: a busca vai ao servidor só quando a pessoa confirma.

Estados

Preenchido, com o botão de limpar visível, e desabilitado.

Anatomia

  • SearchField.Group: o contêiner que desenha o campo.
  • SearchField.SearchIcon: a lupa, decorativa.
  • SearchField.Input: o campo de texto, com placeholder.
  • SearchField.ClearButton: limpa o texto; some quando o campo está vazio.

Propriedades

Raiz (SearchField):

Campo (SearchField.Input):

Botão de limpar (SearchField.ClearButton):

Animações

O botão de limpar aparece e some com uma transição curta de opacidade do HeroUI, e o foco troca o fundo do campo com transição de cor. Com prefers-reduced-motion, a folha global da fachada reduz tudo a 0,01 ms.

Acessibilidade

  • O campo tem papel searchbox; o grupo ao redor fica dentro de uma região role="search" quando está num FilterBar.
  • Sem Label visível, passe aria-label ao SearchField: busca sem nome acessível é falha.
  • Esc limpa o texto; Enter dispara onSubmit. O botão de limpar é focável e tem nome (Limpar busca).
  • A lupa é aria-hidden. Anuncie contagem de resultados em uma região aria-live="polite".
  • O anel de foco mantém 3:1 contra a superfície; o texto, 4,5:1.

Boas práticas

Faça

Placeholder que diz o que dá para buscar, como Buscar por Pedido, Cliente ou e-mail.

Evite

Placeholder genérico como Buscar, ou campo de busca sem `aria-label`.
  • Prefira onSubmit quando a busca vai ao servidor; filtre ao digitar só em listas locais.
  • Mostre o estado vazio explicando que nenhum item combina e como limpar a busca.
  • Use variant="secondary" em cartões e barras de filtro.
  • Mantenha o texto buscado na URL quando a lista é uma página navegável.

Relacionados

  • FilterField a barra de filtros onde a busca mora.
  • TextField para texto livre em formulários.
  • Select para opções conhecidas.
  • Input o campo simples de uma linha.