Pular para o conteúdo principal

TokenInput

Campo de entrada especializado para códigos de verificação, tokens de autenticação, PINs e outros tipos de entrada de código sequencial.

Importação

import { TokenInput } from '@useblu/ocean-react';

Importação específica (recomendado para tree-shaking)

import { TokenInput } from '@useblu/ocean-react/TokenInput';

Importação de tipos TypeScript

import type { TokenInputProps } from '@useblu/ocean-react';

// Uso em componente customizado
const MyComponent: React.FC<TokenInputProps> = (props) => {
return <TokenInput {...props} />;
};

Playground Interativo

Explore o componente TokenInput no playground interativo do Storybook:

Documentação Completa

Para documentação técnica detalhada, exemplos de uso e API completa, consulte o Storybook do TokenInput.

No Storybook você encontrará:

  • Controles interativos para testar todas as props
  • API gerada automaticamente com tipagem completa
  • Exemplos visuais de todas as variantes e estados
  • Playground para experimentação rápida

Uso básico

<TokenInput
label="Código de Verificação"
digitsQuantity={4}
onChangeToken={(value) => console.log('Token:', value)}
/>

Quantidades de Dígitos

O TokenInput suporta diferentes quantidades de dígitos para diferentes contextos:

Guia de uso das quantidades

  • 4 dígitos: PINs e códigos curtos
  • 6 dígitos: Códigos de verificação TOKEN/Email padrão
  • 8 dígitos: Códigos de autenticação estendidos

Estados

O componente suporta diferentes estados visuais:

Estados disponíveis

  • Normal: Estado padrão para entrada de código
  • Disabled: Quando o campo não está disponível para edição
  • Error: Quando há erro de validação ou código inválido

Validação Interativa

Exemplo de validação com feedback em tempo real:

Exemplos de Uso

Verificação de Código TOKEN

const [tokenCode, setTokenCode] = useState('');
const [isValidating, setIsValidating] = useState(false);
const [error, setError] = useState('');

const handleTokenVerification = async (code: string) => {
if (code.length === 6) {
setIsValidating(true);
try {
await verifyTokenCode(code);
setError('');
} catch (err) {
setError('Código inválido. Tente novamente.');
} finally {
setIsValidating(false);
}
}
};

return (
<TokenInput
label="Código de Verificação TOKEN"
digitsQuantity={6}
error={!!error}
errorMessage={error}
disabled={isValidating}
onChangeToken={handleTokenVerification}
/>
);

Código de Autenticação

const [authCode, setAuthCode] = useState('');
const [isSubmitting, setIsSubmitting] = useState(false);

const handleAuthCodeSubmit = async (code: string) => {
if (code.length === 8) {
setIsSubmitting(true);
try {
await authenticateWithCode(code);
onAuthSuccess();
} catch (error) {
onAuthError('Código de autenticação inválido.');
} finally {
setIsSubmitting(false);
}
}
};

return (
<form onSubmit={handleSubmit}>
<TokenInput
label="Código de Autenticação"
digitsQuantity={8}
disabled={isSubmitting}
onChangeToken={handleAuthCodeSubmit}
/>
<Button type="submit" disabled={authCode.length !== 8 || isSubmitting}>
{isSubmitting ? 'Verificando...' : 'Autenticar'}
</Button>
</form>
);

API

Props

PropTipoPadrãoDescrição
digitsQuantitynumber-Quantidade de dígitos do token (obrigatório)
onChangeToken(value: string) => void-Callback quando o token é alterado (obrigatório)
labelstring-Rótulo descritivo do campo
errorbooleanfalseExibe estilo de erro
errorMessagestring-Mensagem de erro exibida quando error é true
disabledbooleanfalseDesabilita o campo
autoFocusbooleantrueFoca automaticamente no primeiro campo
tooltipMessagestring-Mensagem de ajuda em tooltip
htmlForstring-ID para associação com label
classNamestring-Classes CSS adicionais

Eventos

  • onChangeToken: Disparado quando o valor do token é alterado
  • Suporte a eventos padrão de input HTML (onFocus, onBlur, etc.)

Funcionalidades

  • Enter/Space: Move para o próximo campo
  • Backspace: Remove dígito e volta para campo anterior
  • Arrow Keys: Navega entre campos
  • Tab: Move foco para próximo elemento da página

Colagem de Código

  • Suporte a colagem de códigos completos
  • Distribui automaticamente os dígitos pelos campos
  • Filtra caracteres não numéricos

Validação

  • Validação em tempo real
  • Suporte a diferentes tipos de validação
  • Feedback visual imediato

Acessibilidade

  • ✅ Suporte completo a navegação por teclado
  • ✅ Estados de foco visíveis
  • ✅ Atributos ARIA apropriados
  • ✅ Suporte a screen readers
  • ✅ Labels associados corretamente
  • ✅ Contraste adequado em todos os estados
TeclaFunção
TabMove foco para o componente
Arrow keysNavega entre campos
BackspaceRemove dígito e volta para campo anterior
0-9Insere dígito e avança automaticamente
Ctrl+VCola código completo

Melhores práticas

✅ Faça

  • Use autoFocus para melhor experiência do usuário
  • Forneça labels descritivos e claros
  • Implemente validação apenas quando todos os dígitos estiverem preenchidos
  • Use mensagens de erro específicas e úteis
  • Considere limitações de tentativas para segurança
  • Use quantidades de dígitos apropriadas para cada contexto

❌ Não faça

  • Não valide códigos incompletos
  • Não omita labels para acessibilidade
  • Não implemente validação muito restritiva durante a digitação
  • Não ignore estados de carregamento durante validação
  • Não use quantidades de dígitos inadequadas para o contexto

Classes CSS

ClasseDescrição
.ods-token-inputEstilos aplicados ao container principal
.ods-token-input__inputEstilos aplicados a cada campo individual
.ods-token-input--errorEstilos aplicados no estado de erro
.ods-token-input--disabledEstilos aplicados no estado desabilitado