Elements

O catálogo completo dos elements do Tokeflow Bridge SDK — campos seguros de cartão, campos de endereço de cobrança e botões de carteira — além de suas opções, métodos, estado e eventos de mudança.

Elements são os blocos de construção do Tokeflow Bridge SDK. Cada element renderiza um único input — um número de cartão, um CPF, uma cidade de cobrança — que o seu cliente digita diretamente na sua página.

Os campos seguros do Tokeflow rodam dentro de iframes isolados e cross-origin; os dados do cartão são criptografados no navegador e nunca chegam aos seus servidores. Você estiliza o container ao redor, escuta as mudanças de estado e entrega o element ao tokenize() quando estiver pronto. O valor sensível nunca entra no seu JavaScript — apenas metadados não sensíveis (bandeira do cartão, BIN, últimos quatro dígitos) são expostos a você.

Esta página é a referência de cada element: o catálogo, as opções que cada um aceita, os métodos que você pode chamar em uma instância e o formato do estado e do evento change que você lê de volta.

Os elements vivem no navegador e são criados a partir de uma chave pública (pk_…). As chaves públicas são restritas a escopos seguros para o cliente e podem ser enviadas com segurança no código do navegador. Nunca coloque uma chave secreta (sk_…) no navegador — consulte Autenticação.

Como os elements se encaixam

Um element é um handle leve na sua página sobre um iframe em sandbox que é dono do input real. Você o cria, monta em um container que você controla e reage ao seu estado. Quando o formulário está completo, você passa as referências dos elements para a tokenização — o SDK criptografa os dados coletados dentro do iframe e retorna uma referência de token (tok_…).

As teclas digitadas pelo cliente permanecem dentro do iframe cross-origin. Seu código só chega a ver os booleanos e os metadados não sensíveis descritos em Estado do element e no evento change.

Elements disponíveis

Todo element tem uma factory vanilla (chamada na instância tokeflow inicializada) e um componente React equivalente. Os elements de cartão e de carteira são de propósito específico; os elements de endereço e de texto são inputs de propósito geral que você pode ligar a um formulário de cobrança.

ElementFactory vanillaComponente ReactPropósito
Card (combinado)createCardElement()<CardElement>Número + validade + CVC em um único iframe
Card NumbercreateCardNumberElement()<CardNumberElement>Apenas o número do cartão
Card ExpirationcreateCardExpirationElement()<CardExpirationElement>Apenas a data de validade
Card CVCcreateCardCvcElement()<CardCvcElement>Apenas o CVC/CVV
Cardholder NamecreateCardholderNameElement()<CardholderNameElement>Nome no cartão
TextcreateTextElement()<TextElement>Input de texto genérico
CPFcreateCpfElement()<CpfElement>Input de CPF brasileiro (usado no PIX)
Address Line 1createAddressLine1Element()<AddressLine1Element>Linha 1 do endereço de cobrança
Address Line 2createAddressLine2Element()<AddressLine2Element>Linha 2 do endereço de cobrança
CitycreateCityElement()<CityElement>Cidade de cobrança
StatecreateStateElement()<StateElement>Estado/região de cobrança
Postal CodecreatePostalCodeElement()<PostalCodeElement>Código postal/CEP de cobrança
CountrycreateCountryElement()<CountryElement>País de cobrança
Apple Pay buttoncreateApplePayButton()<ApplePayButton>Botão de pagamento Apple Pay
Google Pay buttoncreateGooglePayButton()<GooglePayButton>Botão de pagamento Google Pay

Use o CardElement combinado para a integração mais simples — um único iframe contém número, validade e CVC. Recorra aos elements divididos (CardNumberElement, CardExpirationElement, CardCvcElement) apenas quando você precisar de cada campo em seu próprio slot de layout.

Os botões de carteira (ApplePayButton, GooglePayButton) renderizam um botão de pagamento da plataforma em vez de um input de texto. Seu fluxo de clique está documentado no Guia rápido do SDK; esta página cobre os elements de input.

Opções do element

As opções são passadas para a factory (ou como props para o componente React) quando você cria um element. Todas as opções são opcionais.

Opções base

Estas opções estão disponíveis em todo element.

OpçãoTypeDescrição
styleElementStyleEstilização visual aplicada dentro do iframe (cores, fontes, estilos específicos de estado). Consulte Estilização.
placeholderstring | objectTexto de placeholder. Uma string simples na maioria dos elements; um objeto por campo no element de cartão combinado (veja abaixo).
disabledbooleanRenderiza o input desabilitado (não editável, não focável). Padrão false.
readOnlybooleanRenderiza o input somente leitura (focável, não editável). Padrão false.
autoFocusbooleanFoca o input automaticamente quando ele é montado. Padrão false.
targetIdstringId DOM do container no qual montar, como alternativa a passar um seletor para mount().
localeTokeflowLocaleSobrescrita de locale por element ('en' ou 'pt-BR'). Recai sobre o locale de inicialização do SDK.
translationsobjectSobrescritas por element para labels, placeholders e strings de erro. Consulte Localização.
themeobjectEscape hatch de tema de baixo nível para controle fino além de style. Consulte Estilização.

Opções específicas de cartão

O CardElement combinado aceita estas além das opções base.

OpçãoTypeDescrição
placeholderobjectPlaceholders por campo: cardNumber, cardExpirationDate, cardSecurityCode.
showCardIconbooleanMostra o ícone da bandeira detectada do cartão dentro do campo. Padrão true.
hidePostalCodebooleanOculta o campo de código postal embutido. Padrão false.
iconStyle'solid' | 'outline'Estilo visual do ícone da bandeira do cartão.
const element = tokeflow.createCardElement({
  style: { /* see Styling */ },

  // Per-field placeholders on the combined card element
  placeholder: {
    cardNumber: '1234 5678 9012 3456',
    cardExpirationDate: 'MM/YY',
    cardSecurityCode: 'CVC',
  },

  disabled: false,
  readOnly: false,
  autoFocus: false,

  locale: 'pt-BR',       // per-element locale override
  translations: { /* ... */ },

  // Card-element specifics
  showCardIcon: true,
  hidePostalCode: true,
  iconStyle: 'solid',    // 'solid' | 'outline'
});

Para um element de linha única que não seja de cartão, placeholder é apenas uma string:

const cpf = tokeflow.createCpfElement({ placeholder: '000.000.000-00' });
const name = tokeflow.createTextElement({ placeholder: 'Full Name' });

No React, toda opção é uma prop:

<CardElement
  showCardIcon
  hidePostalCode
  iconStyle="outline"
  placeholder={{
    cardNumber: '1234 5678 9012 3456',
    cardExpirationDate: 'MM/YY',
    cardSecurityCode: 'CVC',
  }}
/>

Métodos do element

Chame estes em uma instância de element. No React, obtenha a instância a partir da propriedade .element da ref (por exemplo, cardRef.current.element).

MétodoAssinaturaDescrição
mountmount(target)Renderiza o iframe em um seletor CSS ou HTMLElement.
unmountunmount()Remove o iframe e desanexa o element do DOM.
focusfocus()Foca o input programaticamente.
blurblur()Desfoca o input programaticamente.
clearclear()Limpa o valor atual.
setValuesetValue(value)Define o valor. Apenas elements do tipo texto (por exemplo, Text, Address, City) — não os campos seguros de cartão.
getStategetState(): ElementStateLê o estado atual de forma síncrona. Consulte Estado do element.
updateupdate(options)Atualiza as opções após a criação (por exemplo, alternar disabled).
onon(event, handler)Inscreve-se em um evento (ready, change, focus, blur, error).
offoff(event, handler)Cancela a inscrição de um handler.
// Mount / unmount
element.mount('#container');          // selector or HTMLElement
element.unmount();

// Focus management
element.focus();
element.blur();

// Value
element.clear();
element.setValue('some value');       // text-style elements only

// State
const state = element.getState();     // ElementState

// Update options after creation
element.update({ disabled: true });

// Events
element.on('change', handler);
element.off('change', handler);

setValue() é apenas para elements não sensíveis, do tipo texto. Os campos seguros de cartão (número, validade, CVC) nunca expõem nem aceitam seu valor por meio do seu JavaScript — é isso que mantém os dados do cartão fora da sua página.

Estado do element

getState() retorna o estado atual de um element de forma síncrona. Não há helpers isValid() / isEmpty() — leia estes booleanos em vez disso.

interface ElementState {
  empty: boolean;     // no value entered yet
  focused: boolean;   // input currently has focus
  valid: boolean;     // current value passes validation
  invalid: boolean;   // current value fails validation
  complete: boolean;  // input is fully filled and valid
  error?: ElementError; // present when the value is invalid
}

Um gate típico antes de tokenizar:

const state = cardElement.getState();

if (state.complete && state.valid) {
  // ready to tokenize
}

Eventos

Inscreva-se com on(event, handler) e cancele a inscrição com off(event, handler). Os elements emitem:

EventoPayloadQuando
ready—O iframe foi carregado e o element está interativo.
changeElementChangeEventO valor ou a validade mudou.
focus—O input ganhou foco.
blur—O input perdeu foco.
errorElementErrorOcorreu um erro no nível do element.
cardElement.on('ready', () => {
  console.log('Element is ready');
});

cardElement.on('change', (event) => {
  console.log('Complete:', event.complete);
  console.log('Empty:', event.empty);
  console.log('Error:', event.error?.message);
  // Brand / BIN / last4 are surfaced under `value` on the card-number field:
  console.log('Brand:', event.value?.brand, 'BIN:', event.value?.bin, 'last4:', event.value?.last4);
});

cardElement.on('focus', () => console.log('Element focused'));
cardElement.on('blur', () => console.log('Element blurred'));
cardElement.on('error', (event) => console.error('Element error:', event));

No React, os mesmos eventos são props: onReady, onChange, onFocus, onBlur, onError.

<CardElement
  ref={cardRef}
  id="card"
  onReady={() => console.log('Ready')}
  onChange={(e) => console.log('Change:', e.complete, e.error?.message)}
  onFocus={() => console.log('Focus')}
  onBlur={() => console.log('Blur')}
  onError={(e) => console.error('Error:', e)}
  className="my-card-element"
/>

O evento change

O evento change carrega ElementChangeEvent. O objeto opcional value contém apenas metadados não sensíveis — nunca o número do cartão bruto, a validade ou o CVC.

interface ElementChangeEvent {
  elementType: ElementType;
  empty: boolean;
  complete: boolean;
  error?: ElementError;    // singular — there is no `errors` array
  value?: {                // non-sensitive metadata only
    type?: string;         // detected input type
    brand?: string;        // e.g. 'visa', 'mastercard'
    bin?: string;          // bank identification number (leading digits)
    last4?: string;        // last four digits
  };
}
FieldTypeDescrição
elementTypeElementTypeQual element emitiu o evento.
emptybooleanSe o input está atualmente vazio.
completebooleanSe o input está totalmente preenchido e válido.
errorElementErrorPresente quando o valor atual é inválido. Singular — não há um array errors.
value.typestringTipo de input detectado.
value.brandstringBandeira de cartão detectada (campo de número do cartão).
value.binstringNúmero de identificação do banco — os dígitos iniciais (campo de número do cartão).
value.last4stringÚltimos quatro dígitos (campo de número do cartão).

O objeto value expõe apenas a bandeira, o BIN e os últimos quatro dígitos — nunca o PAN completo, a validade ou o CVC. Use-o para affordances de UI (mostrar um ícone de bandeira, mascarar), mas nunca o trate como os dados do cartão em si; a única forma de usar o cartão é tokenizá-lo.

Estilização

Estilize um element por meio da opção style (ElementStyle), que controla a aparência dentro do iframe, além da opção theme como um escape hatch de baixo nível. O container ao redor do iframe é DOM comum que você estiliza com o seu próprio CSS.

const style = {
  base: {
    color: '#333',
    fontSize: '16px',
    fontFamily: '-apple-system, BlinkMacSystemFont, sans-serif',
    fontWeight: '400',
    lineHeight: '24px',
    '::placeholder': { color: '#aaa', fontStyle: 'italic' },
    ':focus': { color: '#000' },
  },
  complete: { color: '#28a745' }, // input complete and valid
  invalid: { color: '#dc3545' },  // input invalid
  empty: { color: '#6c757d' },    // input empty
};

const cardElement = tokeflow.createCardElement({ style });

Reflita o estado do element no seu container escutando o evento change e alternando classes:

.card-element-container {
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 12px;
  transition: border-color 0.2s, box-shadow 0.2s;
}
.card-element-container:focus-within { border-color: #0066ff; }
.card-element-container.invalid { border-color: #dc3545; }
.card-element-container.complete { border-color: #28a745; }

Localização

O SDK vem com pacotes de tradução en e pt-BR embutidos para labels de elements, placeholders e mensagens de erro. Defina um locale padrão na inicialização do SDK, ou sobrescreva por element com locale e translations.

// Override strings for a single element
const cardNumber = tokeflow.createCardNumberElement({
  locale: 'pt-BR',
  translations: {
    number: {
      label: 'Número do cartão',
      errors: { invalid: 'Verifique o número do cartão' },
    },
  },
});

Precedência: as translations por element vencem as translations de inicialização do SDK, que vencem o pacote embutido. Qualquer campo que você não sobrescrever recai sobre as strings embutidas.

Exemplo de ciclo de vida

Um ciclo completo de criar → montar → gate → tokenizar → desmontar com o element de cartão combinado:

// 1. Create
const cardElement = tokeflow.createCardElement({
  placeholder: {
    cardNumber: '1234 5678 9012 3456',
    cardExpirationDate: 'MM/YY',
    cardSecurityCode: 'CVC',
  },
  showCardIcon: true,
});

// 2. Mount
cardElement.mount('#card-element');

// 3. React to state
cardElement.on('change', (event) => {
  const container = document.getElementById('card-element');
  container.classList.toggle('invalid', !!event.error);
  container.classList.toggle('complete', event.complete);
});

// 4. Gate before tokenizing
async function pay() {
  const state = cardElement.getState();
  if (!state.complete || !state.valid) return;

  const token = await tokeflow.cards.tokenize({ card: cardElement });
  // send token.tokenId to your server

  // 5. Clean up
  cardElement.unmount();
}

Próximos passos

  • Guia rápido do SDK — inicialize o SDK, monte elements e tokenize de ponta a ponta.
  • Autenticação — chaves públicas vs. secretas e onde cada uma pertence.
  • Transações — cobre o token no seu servidor, depois capture, cancele ou reembolse.

Nesta página