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.

ElementFábrica vanillaComponente ReactPropósito
Card (combinado)createCardElement()<CardElement>Número + vencimiento + CVC en un solo iframe
Card NumbercreateCardNumberElement()<CardNumberElement>Solo número de tarjeta
Card ExpirationcreateCardExpirationElement()<CardExpirationElement>Solo fecha de vencimiento
Card CVCcreateCardCvcElement()<CardCvcElement>Solo CVC/CVV
Cardholder NamecreateCardholderNameElement()<CardholderNameElement>Nombre en la tarjeta
TextcreateTextElement()<TextElement>Entrada de texto genérica
CPFcreateCpfElement()<CpfElement>Entrada de CPF brasileño (usada para PIX)
Address Line 1createAddressLine1Element()<AddressLine1Element>Línea 1 de la dirección de facturación
Address Line 2createAddressLine2Element()<AddressLine2Element>Línea 2 de la dirección de facturación
CitycreateCityElement()<CityElement>Ciudad de facturación
StatecreateStateElement()<StateElement>Estado/región de facturación
Postal CodecreatePostalCodeElement()<PostalCodeElement>Código postal/ZIP de facturación
CountrycreateCountryElement()<CountryElement>País de facturación
Apple Pay buttoncreateApplePayButton()<ApplePayButton>Botón de pago de Apple Pay
Google Pay buttoncreateGooglePayButton()<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ónTipoDescripción
styleElementStyleEstilos visuales aplicados dentro del iframe (colores, fuentes, estilos específicos de estado). Consulta Estilos.
placeholderstring | objectTexto 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).
disabledbooleanRenderiza la entrada deshabilitada (no editable, no enfocable). Por defecto es false.
readOnlybooleanRenderiza la entrada de solo lectura (enfocable, no editable). Por defecto es false.
autoFocusbooleanEnfoca la entrada automáticamente cuando se monta. Por defecto es false.
targetIdstringId del DOM del contenedor en el que montar, como alternativa a pasar un selector a mount().
localeTokeflowLocaleAnulación de configuración regional por element ('en' o 'pt-BR'). Recae en la configuración regional de inicialización del SDK.
translationsobjectAnulaciones por element para etiquetas, marcadores de posición y cadenas de error. Consulta Localización.
themeobjectVí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ónTipoDescripción
placeholderobjectMarcadores de posición por campo: cardNumber, cardExpirationDate, cardSecurityCode.
showCardIconbooleanMuestra el ícono de la marca de tarjeta detectada dentro del campo. Por defecto es true.
hidePostalCodebooleanOculta 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étodoFirmaDescripción
mountmount(target)Renderiza el iframe en un selector CSS o un HTMLElement.
unmountunmount()Elimina el iframe y desacopla el element del DOM.
focusfocus()Enfoca la entrada de forma programática.
blurblur()Desenfoca la entrada de forma programática.
clearclear()Limpia el valor actual.
setValuesetValue(value)Establece el valor. Solo elements de tipo texto (por ejemplo, Text, Address, City) — no los campos seguros de tarjeta.
getStategetState(): ElementStateLee el estado actual de forma sincrónica. Consulta Estado del element.
updateupdate(options)Actualiza las opciones después de la creación (por ejemplo, alternar disabled).
onon(event, handler)Se suscribe a un evento (ready, change, focus, blur, error).
offoff(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:

EventoCarga útilCuándo
ready—El iframe se ha cargado y el element es interactivo.
changeElementChangeEventEl valor o la validez cambió.
focus—La entrada obtuvo el foco.
blur—La entrada perdió el foco.
errorElementErrorOcurrió 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
  };
}
CampoTipoDescripción
elementTypeElementTypeQué element emitió el evento.
emptybooleanSi la entrada está actualmente vacía.
completebooleanSi la entrada está completamente rellenada y es válida.
errorElementErrorPresente cuando el valor actual es inválido. Singular — no hay un arreglo errors.
value.typestringTipo de entrada detectado.
value.brandstringMarca de tarjeta detectada (campo de número de tarjeta).
value.binstringNúmero de identificación bancaria — los dígitos iniciales (campo de número de tarjeta).
value.last4stringÚ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.

En esta página