Aller au contenu

Apparence

Préréglages, couleurs, jetons de design et règles ignorées silencieusement par le SDK.

Un seul objet appearance stylise tout : le checkout hébergé, la superposition et chaque composant de champ de paiement. Il comprend trois couches appliquées dans cet ordre.

  1. Un préréglage theme, si vous en indiquez un.
  2. Les clés de premier niveau, comme primaryColor.
  3. variables et rules, pour un contrôle par jeton et par sélecteur.

Chaque couche remplace la précédente. Un préréglage constitue donc un point de départ, pas une contrainte.

Les trois couches à la fois
await mount('#checkout', {
  sessionId,
  appearance: {
    theme: 'stripe',
    primaryColor: '#6366f1',
    colorScheme: 'auto',
    labels: 'floating',
    variables: { colorText: '#0f172a', fontSizeBase: '16px' },
    rules: { '.Input': { borderRadius: '8px' } },
  },
});

Préréglages

theme place un ensemble de clés de premier niveau sous les vôtres. Voici leurs valeurs exactes.

PréréglageValeurs définies
stripeprimaryColor: #0570de, borderRadius: 4px, la stack de polices système, shadow: low
nightcolorScheme: dark, primaryColor: #7c3aed, backgroundColor: #0f172a, buttonTextColor: #f8fafc, inputBackgroundColor: #1e293b, inputBorderColor: #334155, textMutedColor: #94a3b8, borderRadius: 8px, shadow: none
flatshadow: none, borderRadius: 0
noneRien. Seules vos propres clés s'appliquent

stripe correspond à l'apparence par défaut d'un checkout Wajub. L'indiquer ne change donc rien, sauf si vous remplacez également certaines de ses valeurs.

Clés de premier niveau

Cette couche fournit les raccourcis. Chaque valeur est une simple chaîne CSS.

CléTypeÉlément stylisé
primaryColorCouleur CSSAccent, boutons principaux et liens
secondaryColorCouleur CSSAccents secondaires
backgroundColorCouleur CSSSurface derrière le formulaire
buttonTextColorCouleur CSSTexte des boutons principaux
inputBackgroundColorCouleur CSSArrière-plan des champs
inputBorderColorCouleur CSSBordure des champs
textMutedColorCouleur CSSTexte d'aide et secondaire
successColorCouleur CSSÉtats de réussite et badges
errorColorCouleur CSSErreurs et messages de validation
fontFamilyStack de polices CSSTout le checkout
borderRadiusLongueur CSSRayon par défaut des angles
shadowlow ou noneÉlévation
colorSchemelight, dark, autoauto suit les réglages système du payeur
labelsabove ou floatingPosition des libellés de champs
disableAnimationsbooleanSupprime les transitions et les mouvements

L'ancien objet theme

theme: { primaryColor, fontFamily, borderRadius } dans la configuration de montage est l'ancienne structure. Le SDK le remplit encore depuis appearance pour assurer la rétrocompatibilité. Vous ne devez donc jamais le définir vous-même. appearance.theme désigne autre chose : le nom d'un préréglage.

Variables

Cette couche concerne les jetons. Chaque clé correspond à une propriété CSS personnalisée sur l'élément racine du checkout. Elle atteint ainsi chaque composant qui lit ce jeton, pas une seule surface.

KeyCSS custom property
colorPrimary--wj-color-primary-500
colorBackground--wj-color-bg-surface
colorText--wj-color-text-primary
colorTextSecondary--wj-color-text-secondary
colorTextPlaceholder--wj-color-text-tertiary
colorDanger--wj-color-text-danger
colorSuccess--wj-color-text-success
fontFamily--wj-font-family-sans
fontSizeBase--wj-font-size-base
fontWeightNormal--wj-font-weight-normal
fontWeightMedium--wj-font-weight-medium
fontWeightBold--wj-font-weight-bold
spacingUnit--wj-spacing-unit
borderRadius--wj-radius
spacingGridRow--wj-spacing-grid-row
spacingGridColumn--wj-spacing-grid-column

Seules ces seize clés sont acceptées. Toute autre clé est ignorée lors de l'envoi.

Typographie centralisée
appearance: {
  variables: {
    fontFamily: 'Inter, system-ui, sans-serif',
    fontSizeBase: '15px',
    fontWeightMedium: '600',
    spacingUnit: '4px',
  },
}

Si une clé de premier niveau et le jeton correspondant sont tous deux définis, la première l'emporte. Choisissez une méthode et conservez-la.

Règles

Cette couche de sélecteurs est la plus limitée. Elle sert à modifier les champs du formulaire, pas à refaire le style du checkout.

Sélecteurs. Uniquement .Input et .Label, avec au maximum un seul parmi :hover, :focus, :focus-within, :disabled, ::placeholder, ::selection.

Tous les éléments que vous pouvez cibler
appearance: {
  rules: {
    '.Input': { borderRadius: '8px', borderColor: '#cbd5e1', padding: '12px' },
    '.Input:focus': { borderColor: '#6366f1', outline: '2px solid #c7d2fe' },
    '.Input::placeholder': { color: '#94a3b8' },
    '.Label': { fontWeight: '500', fontSize: '14px', letterSpacing: '0.01em' },
  },
}

Propriétés. Trente-deux propriétés en camelCase, converties en kebab-case à la réception.

GroupeValeurs autorisées
Couleurcolor, backgroundColor, opacity
Bordureborder, borderColor, borderWidth, borderStyle, borderRadius
Boîtepadding et ses quatre côtés, margin et ses quatre côtés
TypographiefontFamily, fontSize, fontWeight, fontStyle, lineHeight, letterSpacing, textAlign, textDecoration
EffetboxShadow, outline, outlineColor, outlineWidth, outlineOffset

Valeurs. Uniquement des chaînes non vides. Toute valeur contenant url(, expression(, @import, javascript:, < ou > est refusée. Les images d'arrière-plan et les importations de polices sont donc exclues.

Pour aller plus loin, utilisez custom_css dans l'image de marque de votre compte afin d'injecter une véritable feuille de style. Consultez Image de marque et thème.

Modifier l'apparence après le montage

Les deux types d'instances acceptent update(), mais leur comportement diffère.

Un bouton de mode sombre sur votre page
let checkout;

await mount('#checkout', { sessionId, onReady: (instance) => (checkout = instance) });

darkToggle.onchange = (event) =>
  checkout.update({ appearance: { colorScheme: event.target.checked ? 'dark' : 'light' } });
AppelCheckout hébergéChamp de paiement
update({ appearance })Appliqué en directAppliqué en direct
update({ locale })Appliqué en directAppliqué en direct
update({ currency })Appliqué en direct aux sessions multidevisesSans objet
update({ layout })Enregistré localement, sans changementAppliqué en direct

Pour modifier la mise en page du checkout hébergé après le montage, remontez-le ou configurez la session.

Dans React, Vue et Svelte, les composants de champs surveillent appearance, locale et layout, puis appellent eux-mêmes update(). CheckoutEmbed ne le fait pas. Conservez l'instance reçue par onReady pour la piloter.

Locale

La locale parvient au checkout comme paramètre d'URL. Le checkout détermine les valeurs qu'il comprend.

Lors du montage et après
await mount('#checkout', { sessionId, locale: 'fr' });
checkout.update({ locale: 'en' });

Valeurs prises en charge : fr, en, es, pt, ar. L'arabe s'affiche de droite à gauche. Si vous omettez locale, la valeur par défaut de la session s'applique. Elle provient de l'image de marque de votre compte ou de la préférence enregistrée du client.

Mise en page

Quatre façons de disposer les moyens de paiement.

ValeurAffichage pour le payeur
classicUne liste verticale, par défaut
compactLa même liste, plus dense
tabsUn onglet par catégorie
accordionDes sections repliables
Configuration lors du montage
await mount('#checkout', { sessionId, layout: 'tabs' });

Si vous l'omettez, la valeur par défaut de la session s'applique. Elle diffère du champ layout de l'image de marque du compte, qui choisit le design de la page hébergée elle-même.

Données transmises et méthode

L'apparence n'est pas injectée dans l'iframe. Elle est encodée dans son URL avant son chargement. C'est pourquoi elle est filtrée et reste fixée au montage pour tout élément non couvert par update().

CoucheDans l'URL
Préréglagetheme_preset=
Clés de premier niveautheme_primary=, theme_bg=, theme_radius=, etc.
colorScheme, labelscolor_scheme=, labels=
disableAnimationsdisable_animations=1
variablesUne valeur var_<key>= par jeton
rulesrules_b64=, le JSON en base64url

Dans le checkout, colorScheme définit data-theme sur l'élément racine. auto le supprime pour laisser les préférences système décider. rules devient une feuille de style injectée unique.

Image de marque serveur ou apparence client

Ces deux options ne s'excluent pas. L'image de marque définit l'apparence par défaut de tous vos checkouts. appearance définit l'apparence actuelle de cette intégration précise.

ObjectifEmplacement
Votre logo et vos couleurs sur chaque checkoutImage de marque du Dashboard
Un bouton de mode sombre sur votre siteappearance.colorScheme et update()
Une campagne sur une pageappearance lors de ce montage
Une police ou une image d'arrière-plancustom_css dans l'image de marque, impossible avec rules

L'apparence client se superpose à l'image de marque de la session dans l'iframe. Seules les valeurs que vous indiquez sont remplacées. La liste des champs côté serveur figure dans Image de marque et thème.

Que pensez-vous de ce contenu ?