Makuco UI
ComponentesData Entry & Selection

Search

Campo de busca com ícone de lupa, botão de limpar e suporte a debounce. Use `mk-search` para buscas em listagens, tabelas e páginas de conteúdo.

O mk-search é o campo de busca do Makuco UI. Diferentemente do mk-input, não possui rótulo nem integração com formulários nativos — é um campo utilitário focado exclusivamente na experiência de busca. O ícone de lupa fica sempre à direita; quando há valor, o botão × e um divisor surgem antes dele.

Possui duas variantes: default (pill, 40px) e subtle (arredondado, 36px) — ambas com suporte a debounce, estado de carregamento, texto auxiliar e mensagem de erro.

Padrão

import { MkSearch } from '@db1/makuco-ui-react';

<MkSearch placeholder="Buscar..." />
<mk-search placeholder="Buscar..."></mk-search>

Sutil

Use variant="subtle" em contextos de maior densidade: cabeçalhos de tabela, toolbars compactas. Borda arredondada (radius-md), altura 36px, tipografia 12px e borda mais leve.

<MkSearch variant="subtle" placeholder="Buscar..." />
<mk-search variant="subtle" placeholder="Buscar..."></mk-search>

Com valor e botão de limpar

Quando value está preenchido, o botão ×, um divisor e o ícone de lupa aparecem agrupados à direita. Clicar no × emite mkClear e reseta o campo para vazio. Pressionar Escape tem o mesmo efeito.

<MkSearch
  value="Design system"
  placeholder="Buscar..."
  onMkClear={() => console.log('cleared')}
/>
<mk-search
  value="Design system"
  placeholder="Buscar..."
  (mkClear)="onClear()"
></mk-search>

Texto auxiliar

Use supportText para orientar o usuário sobre o que pode ser buscado. O texto aparece abaixo do campo e é referenciado via aria-describedby.

<MkSearch
  supportText="Busque por nome, código ou categoria"
  placeholder="Buscar..."
/>
<mk-search
  helper-text="Busque por nome, código ou categoria"
  placeholder="Buscar..."
></mk-search>

Estado de erro

Defina errorMessage para colocar o componente em estado inválido: borda vermelha, mensagem de erro abaixo do campo. Quando errorMessage e supportText estão ambos definidos, apenas errorMessage é exibido.

<MkSearch
  value="???"
  errorMessage="Nenhum resultado encontrado"
/>
<mk-search
  value="???"
  error-message="Nenhum resultado encontrado"
></mk-search>

Com debounce

Use debounce (em ms) para reduzir a frequência de chamadas em buscas que fazem requisições ao servidor. O evento mkChange só é emitido após o período de inatividade configurado.

<MkSearch
  debounce={300}
  placeholder="Buscar..."
  onMkChange={(e) => fetchResults(e.detail)}
/>
<mk-search
  [debounce]="300"
  placeholder="Buscar..."
  (mkChange)="fetchResults($event.detail)"
></mk-search>

Loading

Defina loading para exibir um spinner enquanto a busca está em andamento. O botão de limpar é ocultado automaticamente durante o carregamento.

const [loading, setLoading] = React.useState(false);

<MkSearch
  loading={loading}
  placeholder="Buscar..."
  onMkChange={async (e) => {
    setLoading(true);
    await fetchResults(e.detail);
    setLoading(false);
  }}
/>
<mk-search
  [loading]="isLoading"
  placeholder="Buscar..."
  (mkChange)="onSearch($event.detail)"
></mk-search>

Desabilitado

<MkSearch disabled placeholder="Campo desabilitado" />
<mk-search disabled placeholder="Campo desabilitado"></mk-search>

Somente leitura

<MkSearch readonly value="Valor somente leitura" />
<mk-search readonly value="Valor somente leitura"></mk-search>
PropTipoPadrãoDescrição
variant"default" | "subtle""default"Variante visual. default: pill, 40px, body-sm. subtle: arredondado, 36px, caption.
valuestringValor controlado do campo.
placeholderstringTexto exibido quando o campo está vazio.
supportTextstringTexto de suporte exibido abaixo do campo quando não há errorMessage.
errorMessagestringMensagem de erro. Quando definida, ativa o estado inválido (borda vermelha).
namestringAtributo name nativo.
debouncenumber0Delay em ms para o evento mkChange. Quando 0, o evento é emitido imediatamente.
loadingbooleanfalseExibe um spinner no lugar do botão de limpar.
disabledbooleanfalseDesabilita o campo, impedindo a interação do usuário.
readonlybooleanfalseTorna o campo somente leitura.
labelstring"Buscar"Rótulo acessível para o landmark role="search" e o input nativo.

Eventos

EventoComponentePayloadDescrição
mkChangemk-searchstringEmitido após debounce ms de inatividade (ou imediatamente se debounce = 0) com o valor atual. Ao limpar via × ou Escape, é emitido imediatamente com "".
mkClearmk-searchvoidEmitido ao clicar no botão × ou ao pressionar Escape com valor preenchido.
mkFocusmk-searchvoidEmitido quando o campo recebe foco.
mkBlurmk-searchvoidEmitido quando o campo perde o foco.

Acessibilidade

O mk-search implementa o padrão de landmark de busca da especificação WAI-ARIA.

  • O host recebe role="search" — landmark nativo reconhecido por leitores de tela para identificar regiões de busca na página.
  • O aria-label do landmark e do input nativo são controlados pela prop label (padrão: "Buscar"). Personalize quando houver múltiplos campos de busca na mesma página.
  • O ícone de lupa é aria-hidden="true" — puramente decorativo.
  • O spinner tem role="status" e aria-label="Carregando resultados".
  • O botão de limpar possui aria-label="Limpar busca" e pode ser ativado por teclado (Enter ou Space).
  • supportText e errorMessage são vinculados ao input via aria-describedby.
TeclaComportamento
EscapeLimpa o campo quando há valor e o campo não está desabilitado ou somente leitura.
TabMove o foco para o próximo elemento interativo (input → botão ×, quando visível).
Enter / Space (no botão ×)Limpa o campo e retorna o foco para o input.

On this page