Elements
El catálogo completo de elements del Tokeflow Bridge SDK — campos seguros de tarjeta, campos de dirección de facturación y botones de billetera — además de sus opciones, métodos, estado y eventos de cambio.
Los Elements son los bloques de construcción del Tokeflow Bridge SDK. Cada element renderiza una única entrada — un número de tarjeta, un CPF, una ciudad de facturación — que tu cliente escribe directamente en tu página.
Los campos seguros de Tokeflow se ejecutan dentro de iframes aislados de origen cruzado; los datos de la tarjeta se cifran en el navegador y nunca tocan tus servidores. Tú aplicas estilos al contenedor circundante, escuchas los cambios de estado y entregas el element a tokenize() cuando estás listo. El valor sensible nunca entra en tu JavaScript — solo se te expone metadatos no sensibles (marca de la tarjeta, BIN, últimos cuatro).
Esta página es la referencia de cada element: el catálogo, las opciones que acepta cada uno, los métodos que puedes invocar sobre una instancia y la forma del estado y del evento change que lees de vuelta.
Los elements viven en el navegador y se crean a partir de una clave pública (pk_…). Las claves públicas están restringidas a alcances seguros para el cliente y es seguro incluirlas en el código del navegador. Nunca pongas una clave secreta (sk_…) en el navegador — consulta Authentication.
Cómo encajan los elements
Un element es un controlador ligero en tu página sobre un iframe aislado que posee la entrada real. Lo creas, lo montas en un contenedor que tú controlas y reaccionas a su estado. Cuando el formulario está completo, pasas las referencias del element a la tokenización — el SDK cifra los datos recopilados dentro del iframe y devuelve una referencia de token (tok_…).
Las pulsaciones de teclas del cliente permanecen dentro del iframe de origen cruzado. Tu código solo llega a ver los booleanos y los metadatos no sensibles descritos en Estado del element y el evento change.
Elements disponibles
Cada element tiene una fábrica vanilla (invocada sobre la instancia tokeflow inicializada) y un componente React equivalente. Los elements de tarjeta y billetera son de propósito específico; los elements de dirección y texto son entradas de propósito general que puedes conectar a un formulario de facturación.
| Element | Fábrica vanilla | Componente React | Propósito |
|---|---|---|---|
| Card (combinado) | createCardElement() | <CardElement> | Número + vencimiento + CVC en un solo iframe |
| Card Number | createCardNumberElement() | <CardNumberElement> | Solo número de tarjeta |
| Card Expiration | createCardExpirationElement() | <CardExpirationElement> | Solo fecha de vencimiento |
| Card CVC | createCardCvcElement() | <CardCvcElement> | Solo CVC/CVV |
| Cardholder Name | createCardholderNameElement() | <CardholderNameElement> | Nombre en la tarjeta |
| Text | createTextElement() | <TextElement> | Entrada de texto genérica |
| CPF | createCpfElement() | <CpfElement> | Entrada de CPF brasileño (usada para PIX) |
| Address Line 1 | createAddressLine1Element() | <AddressLine1Element> | Línea 1 de la dirección de facturación |
| Address Line 2 | createAddressLine2Element() | <AddressLine2Element> | Línea 2 de la dirección de facturación |
| City | createCityElement() | <CityElement> | Ciudad de facturación |
| State | createStateElement() | <StateElement> | Estado/región de facturación |
| Postal Code | createPostalCodeElement() | <PostalCodeElement> | Código postal/ZIP de facturación |
| Country | createCountryElement() | <CountryElement> | País de facturación |
| Apple Pay button | createApplePayButton() | <ApplePayButton> | Botón de pago de Apple Pay |
| Google Pay button | createGooglePayButton() | <GooglePayButton> | Botón de pago de Google Pay |
Usa el CardElement combinado para la integración más simple — un solo iframe contiene número, vencimiento y CVC. Recurre a los elements divididos (CardNumberElement, CardExpirationElement, CardCvcElement) solo cuando necesites cada campo en su propia posición de diseño.
Los botones de billetera (ApplePayButton, GooglePayButton) renderizan un botón de pago de la plataforma en lugar de una entrada de texto. Su flujo de clic está documentado en SDK quickstart; esta página cubre los elements de entrada.
Opciones del element
Las opciones se pasan a la fábrica (o como props al componente React) cuando creas un element. Todas las opciones son opcionales.
Opciones base
Estas opciones están disponibles en todos los elements.
| Opción | Tipo | Descripción |
|---|---|---|
style | ElementStyle | Estilos visuales aplicados dentro del iframe (colores, fuentes, estilos específicos de estado). Consulta Estilos. |
placeholder | string | object | Texto de marcador de posición. Una cadena simple en la mayoría de los elements; un objeto por campo en el element de tarjeta combinado (ver más abajo). |
disabled | boolean | Renderiza la entrada deshabilitada (no editable, no enfocable). Por defecto es false. |
readOnly | boolean | Renderiza la entrada de solo lectura (enfocable, no editable). Por defecto es false. |
autoFocus | boolean | Enfoca la entrada automáticamente cuando se monta. Por defecto es false. |
targetId | string | Id del DOM del contenedor en el que montar, como alternativa a pasar un selector a mount(). |
locale | TokeflowLocale | Anulación de configuración regional por element ('en' o 'pt-BR'). Recae en la configuración regional de inicialización del SDK. |
translations | object | Anulaciones por element para etiquetas, marcadores de posición y cadenas de error. Consulta Localización. |
theme | object | Vía de escape de tema de bajo nivel para un control detallado más allá de style. Consulta Estilos. |
Opciones específicas de tarjeta
El CardElement combinado acepta estas además de las opciones base.
| Opción | Tipo | Descripción |
|---|---|---|
placeholder | object | Marcadores de posición por campo: cardNumber, cardExpirationDate, cardSecurityCode. |
showCardIcon | boolean | Muestra el ícono de la marca de tarjeta detectada dentro del campo. Por defecto es true. |
hidePostalCode | boolean | Oculta el campo de código postal integrado. Por defecto es false. |
iconStyle | 'solid' | 'outline' | Estilo visual para el ícono de la marca de tarjeta. |
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 un element de una sola línea que no sea de tarjeta, placeholder es simplemente una cadena:
const cpf = tokeflow.createCpfElement({ placeholder: '000.000.000-00' });
const name = tokeflow.createTextElement({ placeholder: 'Full Name' });En React, cada opción es una prop:
<CardElement
showCardIcon
hidePostalCode
iconStyle="outline"
placeholder={{
cardNumber: '1234 5678 9012 3456',
cardExpirationDate: 'MM/YY',
cardSecurityCode: 'CVC',
}}
/>Métodos del element
Invoca estos sobre una instancia de element. En React, obtén la instancia desde la propiedad .element de la ref (por ejemplo, cardRef.current.element).
| Método | Firma | Descripción |
|---|---|---|
mount | mount(target) | Renderiza el iframe en un selector CSS o un HTMLElement. |
unmount | unmount() | Elimina el iframe y desacopla el element del DOM. |
focus | focus() | Enfoca la entrada de forma programática. |
blur | blur() | Desenfoca la entrada de forma programática. |
clear | clear() | Limpia el valor actual. |
setValue | setValue(value) | Establece el valor. Solo elements de tipo texto (por ejemplo, Text, Address, City) — no los campos seguros de tarjeta. |
getState | getState(): ElementState | Lee el estado actual de forma sincrónica. Consulta Estado del element. |
update | update(options) | Actualiza las opciones después de la creación (por ejemplo, alternar disabled). |
on | on(event, handler) | Se suscribe a un evento (ready, change, focus, blur, error). |
off | off(event, handler) | Cancela la suscripción de un manejador. |
// 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() es solo para elements de tipo texto no sensibles. Los campos seguros de tarjeta (número, vencimiento, CVC) nunca exponen ni aceptan su valor a través de tu JavaScript — eso es lo que mantiene los datos de la tarjeta fuera de tu página.
Estado del element
getState() devuelve el estado actual de un element de forma sincrónica. No hay funciones auxiliares isValid() / isEmpty() — lee estos booleanos en su lugar.
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
}Una comprobación típica antes de tokenizar:
const state = cardElement.getState();
if (state.complete && state.valid) {
// ready to tokenize
}Eventos
Suscríbete con on(event, handler) y cancela la suscripción con off(event, handler). Los elements emiten:
| Evento | Carga útil | Cuándo |
|---|---|---|
ready | — | El iframe se ha cargado y el element es interactivo. |
change | ElementChangeEvent | El valor o la validez cambió. |
focus | — | La entrada obtuvo el foco. |
blur | — | La entrada perdió el foco. |
error | ElementError | Ocurrió un error a nivel de 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));En React, los mismos eventos son 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"
/>El evento change
El evento change transporta ElementChangeEvent. El objeto opcional value contiene solo metadatos no sensibles — nunca el número de tarjeta, el vencimiento o el CVC en bruto.
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
};
}| Campo | Tipo | Descripción |
|---|---|---|
elementType | ElementType | Qué element emitió el evento. |
empty | boolean | Si la entrada está actualmente vacía. |
complete | boolean | Si la entrada está completamente rellenada y es válida. |
error | ElementError | Presente cuando el valor actual es inválido. Singular — no hay un arreglo errors. |
value.type | string | Tipo de entrada detectado. |
value.brand | string | Marca de tarjeta detectada (campo de número de tarjeta). |
value.bin | string | Número de identificación bancaria — los dígitos iniciales (campo de número de tarjeta). |
value.last4 | string | Últimos cuatro dígitos (campo de número de tarjeta). |
El objeto value expone solo la marca, el BIN y los últimos cuatro — nunca el PAN completo, el vencimiento o el CVC. Úsalo para elementos de la interfaz (mostrar un ícono de marca, enmascarar) pero nunca lo trates como los datos de la tarjeta en sí; la única forma de usar la tarjeta es tokenizarla.
Estilos
Aplica estilos a un element mediante la opción style (ElementStyle), que controla la apariencia dentro del iframe, además de la opción theme como vía de escape de bajo nivel. El contenedor alrededor del iframe es DOM plano al que aplicas estilos con tu propio 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 });Refleja el estado del element en tu contenedor escuchando el evento change y alternando clases:
.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; }Localización
El SDK viene con paquetes de traducción integrados en y pt-BR para etiquetas de element, marcadores de posición y mensajes de error. Establece un locale por defecto en la inicialización del SDK, o anúlalo por element con locale y 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' },
},
},
});Precedencia: las translations por element ganan sobre las translations de la inicialización del SDK, que ganan sobre el paquete integrado. Cualquier campo que no anules recae en las cadenas integradas.
Ejemplo de ciclo de vida
Un ciclo completo de crear → montar → comprobar → tokenizar → desmontar con el element de tarjeta 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 pasos
- SDK quickstart — inicializa el SDK, monta elements y tokeniza de extremo a extremo.
- Authentication — claves públicas frente a secretas y dónde pertenece cada una.
- Transactions — cobra el token en tu servidor, luego captura, anula o reembolsa.