Pular para o conteúdo
Storybookv2Pacote

AppInput

Átomos

Abrir no Storybook

Campo de texto de uma linha com rótulo, texto de apoio, mensagem de erro, ícones e slots laterais.

Quando usar: formulários (nome, CPF, e-mail, número da nota fiscal, busca) que precisam de rótulo e feedback de validação.

Quando não usar: texto de várias linhas (use AppTextarea) ou escolha entre opções fixas (use um <select> nativo).

O ref e o className são repassados ao <input>; as demais props HTML também.

Importar

import { AppInput } from '@handsondigital/idplugger-ui'

CSS

Para carregar só o CSS deste componente (além do tokens.css), importe o arquivo dele; as dependências vêm por @import:

@import '@handsondigital/idplugger-ui/css/AppInput.css';

Com Tailwind 4 e camadas, use a variante em @layer idplugger-ui:

@import '@handsondigital/idplugger-ui/css/layer/AppInput.css';

Exemplos

Default

Exemplo: AppInput, Default
const Default = () => <AppInput label="CPF" placeholder="000.000.000-00" />;

With Hint

Exemplo: AppInput, With Hint
const WithHint = () => <AppInput
label="Número da nota fiscal"
placeholder=""
hint="Está no topo do cupom fiscal." />;

With Error

Exemplo: AppInput, With Error
const WithError = () => <AppInput
label="CPF"
placeholder="000.000.000-00"
error="CPF inválido. Confira os números."
defaultValue="123" />;

Disabled

Exemplo: AppInput, Disabled
const Disabled = () => <AppInput
label="CPF"
placeholder="000.000.000-00"
disabled
defaultValue="123.456.789-00" />;

Sizes

Exemplo: AppInput, Sizes
const Sizes = () => <div style={{ display: 'grid', gap: 16 }}>
<AppInput placeholder="000.000.000-00" label="Pequeno" size="sm" />
<AppInput
placeholder="000.000.000-00"
label="Médio (padrão)"
size="md" />
</div>;

Leading Icon

Exemplo: AppInput, Leading Icon
const LeadingIcon = () => <AppInput
label="E-mail"
placeholder="nome@email.com"
type="email"
leadingIcon={<IconMail />}
trailingIcon={<IconHelpOutline />} />;

Payment

Exemplo: AppInput, Payment
const Payment = () => <AppInput
label="Número do cartão"
placeholder="0000 0000 0000 0000"
inputMode="numeric"
startContent={<AppPaymentIcon method="visa" />} />;

Tags

Exemplo: AppInput, Tags
const Tags = () => <AppInput
label="Buscar"
placeholder="Digite…"
leadingIcon={<IconSearch />}
startContent={<AppTag removeLabel="Remover Marketing">Marketing</AppTag>} />;

Leading Text Addon

Exemplo: AppInput, Leading Text Addon
const LeadingTextAddon = () => <AppInput
label="Site"
placeholder="www.exemplo.com.br"
leadingAddon="http://" />;

Trailing Select Addon

Exemplo: AppInput, Trailing Select Addon
const TrailingSelectAddon = () => <AppInput
label="Valor"
placeholder="0,00"
inputMode="decimal"
trailingAddon={(<select aria-label="Moeda" defaultValue="BRL">
<option value="BRL">R$</option>
<option value="USD">US$</option>
</select>)} />;

Trailing Button Addon

Exemplo: AppInput, Trailing Button Addon
const TrailingButtonAddon = () => <AppInput
label="Link de indicação"
placeholder="000.000.000-00"
defaultValue="https://exemplo.com.br/promo/abc"
readOnly
trailingAddon={<AppButton appearance="ghost" size="sm">Copiar</AppButton>} />;

Props

PropTipoPadrãoDescrição
label*string—Rótulo visível do campo (obrigatório): vira o nome acessível via <label htmlFor>.
endActionReactNode—Ação interativa no fim do campo, antes do segmento direito (ex.: alternar a visibilidade da senha). Ao contrário de trailingIcon, que é decorativo, o elemento deve ser focável e descrever a própria ação (ex.: aria-label).
errorstring—Mensagem de erro: troca o hint, pinta o campo de vermelho e marca aria-invalid.
hintstring—Texto de apoio abaixo do campo. Some enquanto houver error.
leadingAddonReactNode—Segmento à esquerda: texto fixo ("http://", com divisor) ou <select> ("R$", sem divisor, com seta).
leadingIconReactNode—Ícone de 20px antes do texto. Decorativo (aria-hidden).
size"sm" | "md"—Altura do campo: sm ou md. Padrão: md.
startContentReactNode—Conteúdo livre antes do texto, na própria caixa: selos de pagamento, tags etc.
trailingAddonReactNode—Segmento à direita: AppButton (com divisor) ou <select> de moeda (sem divisor, com seta).
trailingIconReactNode—Ícone de 16px no fim do campo (ex.: ajuda). Com error, o ícone de erro toma o lugar. Decorativo.