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.
| Element | Factory vanilla | Componente React | Propósito |
|---|---|---|---|
| Card (combinado) | createCardElement() | <CardElement> | Número + validade + CVC em um único iframe |
| Card Number | createCardNumberElement() | <CardNumberElement> | Apenas o número do cartão |
| Card Expiration | createCardExpirationElement() | <CardExpirationElement> | Apenas a data de validade |
| Card CVC | createCardCvcElement() | <CardCvcElement> | Apenas o CVC/CVV |
| Cardholder Name | createCardholderNameElement() | <CardholderNameElement> | Nome no cartão |
| Text | createTextElement() | <TextElement> | Input de texto genérico |
| CPF | createCpfElement() | <CpfElement> | Input de CPF brasileiro (usado no PIX) |
| Address Line 1 | createAddressLine1Element() | <AddressLine1Element> | Linha 1 do endereço de cobrança |
| Address Line 2 | createAddressLine2Element() | <AddressLine2Element> | Linha 2 do endereço de cobrança |
| City | createCityElement() | <CityElement> | Cidade de cobrança |
| State | createStateElement() | <StateElement> | Estado/região de cobrança |
| Postal Code | createPostalCodeElement() | <PostalCodeElement> | Código postal/CEP de cobrança |
| Country | createCountryElement() | <CountryElement> | País de cobrança |
| Apple Pay button | createApplePayButton() | <ApplePayButton> | Botão de pagamento Apple Pay |
| Google Pay button | createGooglePayButton() | <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ção | Type | Descrição |
|---|---|---|
style | ElementStyle | Estilização visual aplicada dentro do iframe (cores, fontes, estilos específicos de estado). Consulte Estilização. |
placeholder | string | object | Texto de placeholder. Uma string simples na maioria dos elements; um objeto por campo no element de cartão combinado (veja abaixo). |
disabled | boolean | Renderiza o input desabilitado (não editável, não focável). Padrão false. |
readOnly | boolean | Renderiza o input somente leitura (focável, não editável). Padrão false. |
autoFocus | boolean | Foca o input automaticamente quando ele é montado. Padrão false. |
targetId | string | Id DOM do container no qual montar, como alternativa a passar um seletor para mount(). |
locale | TokeflowLocale | Sobrescrita de locale por element ('en' ou 'pt-BR'). Recai sobre o locale de inicialização do SDK. |
translations | object | Sobrescritas por element para labels, placeholders e strings de erro. Consulte Localização. |
theme | object | Escape 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ção | Type | Descrição |
|---|---|---|
placeholder | object | Placeholders por campo: cardNumber, cardExpirationDate, cardSecurityCode. |
showCardIcon | boolean | Mostra o ícone da bandeira detectada do cartão dentro do campo. Padrão true. |
hidePostalCode | boolean | Oculta 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étodo | Assinatura | Descrição |
|---|---|---|
mount | mount(target) | Renderiza o iframe em um seletor CSS ou HTMLElement. |
unmount | unmount() | Remove o iframe e desanexa o element do DOM. |
focus | focus() | Foca o input programaticamente. |
blur | blur() | Desfoca o input programaticamente. |
clear | clear() | Limpa o valor atual. |
setValue | setValue(value) | Define o valor. Apenas elements do tipo texto (por exemplo, Text, Address, City) — não os campos seguros de cartão. |
getState | getState(): ElementState | Lê o estado atual de forma síncrona. Consulte Estado do element. |
update | update(options) | Atualiza as opções após a criação (por exemplo, alternar disabled). |
on | on(event, handler) | Inscreve-se em um evento (ready, change, focus, blur, error). |
off | off(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:
| Evento | Payload | Quando |
|---|---|---|
ready | — | O iframe foi carregado e o element está interativo. |
change | ElementChangeEvent | O valor ou a validade mudou. |
focus | — | O input ganhou foco. |
blur | — | O input perdeu foco. |
error | ElementError | Ocorreu 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
};
}| Field | Type | Descrição |
|---|---|---|
elementType | ElementType | Qual element emitiu o evento. |
empty | boolean | Se o input está atualmente vazio. |
complete | boolean | Se o input está totalmente preenchido e válido. |
error | ElementError | Presente quando o valor atual é inválido. Singular — não há um array errors. |
value.type | string | Tipo de input detectado. |
value.brand | string | Bandeira de cartão detectada (campo de número do cartão). |
value.bin | string | Número de identificação do banco — os dígitos iniciais (campo de número do cartão). |
value.last4 | string | Ú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.