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.
- Un préréglage
theme, si vous en indiquez un. - Les clés de premier niveau, comme
primaryColor. variablesetrules, 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.
await mount('#checkout', {
sessionId,
appearance: {
theme: 'stripe',
primaryColor: '#6366f1',
colorScheme: 'auto',
labels: 'floating',
variables: { colorText: '#0f172a', fontSizeBase: '16px' },
rules: { '.Input': { borderRadius: '8px' } },
},
});Le SDK ignore silencieusement tout élément inconnu
L'objet est filtré avant de quitter le navigateur. Une clé inconnue, un sélecteur absent de la courte liste ci-dessous ou une propriété hors de la liste autorisée disparaît sans avertissement. Aucune erreur n'est générée ni affichée dans la console. Une faute de frappe reste simplement sans effet.
Préréglages
theme place un ensemble de clés de premier niveau sous les vôtres. Voici leurs valeurs exactes.
| Préréglage | Valeurs définies |
|---|---|
stripe | primaryColor: #0570de, borderRadius: 4px, la stack de polices système, shadow: low |
night | colorScheme: dark, primaryColor: #7c3aed, backgroundColor: #0f172a, buttonTextColor: #f8fafc, inputBackgroundColor: #1e293b, inputBorderColor: #334155, textMutedColor: #94a3b8, borderRadius: 8px, shadow: none |
flat | shadow: none, borderRadius: 0 |
none | Rien. 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é |
|---|---|---|
primaryColor | Couleur CSS | Accent, boutons principaux et liens |
secondaryColor | Couleur CSS | Accents secondaires |
backgroundColor | Couleur CSS | Surface derrière le formulaire |
buttonTextColor | Couleur CSS | Texte des boutons principaux |
inputBackgroundColor | Couleur CSS | Arrière-plan des champs |
inputBorderColor | Couleur CSS | Bordure des champs |
textMutedColor | Couleur CSS | Texte d'aide et secondaire |
successColor | Couleur CSS | États de réussite et badges |
errorColor | Couleur CSS | Erreurs et messages de validation |
fontFamily | Stack de polices CSS | Tout le checkout |
borderRadius | Longueur CSS | Rayon par défaut des angles |
shadow | low ou none | Élévation |
colorScheme | light, dark, auto | auto suit les réglages système du payeur |
labels | above ou floating | Position des libellés de champs |
disableAnimations | boolean | Supprime 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.
| Key | CSS 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.
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.
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.
| Groupe | Valeurs autorisées |
|---|---|
| Couleur | color, backgroundColor, opacity |
| Bordure | border, borderColor, borderWidth, borderStyle, borderRadius |
| Boîte | padding et ses quatre côtés, margin et ses quatre côtés |
| Typographie | fontFamily, fontSize, fontWeight, fontStyle, lineHeight, letterSpacing, textAlign, textDecoration |
| Effet | boxShadow, 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.
Une règle non conforme ne génère aucune erreur
.Tab, .AccordionHeader, display, position et un arrière-plan url() passent tous dans
appearance sans avertissement ni effet. Si une règle ne fait rien, comparez-la aux trois listes
ci-dessus avant toute autre vérification.
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.
let checkout;
await mount('#checkout', { sessionId, onReady: (instance) => (checkout = instance) });
darkToggle.onchange = (event) =>
checkout.update({ appearance: { colorScheme: event.target.checked ? 'dark' : 'light' } });| Appel | Checkout hébergé | Champ de paiement |
|---|---|---|
update({ appearance }) | Appliqué en direct | Appliqué en direct |
update({ locale }) | Appliqué en direct | Appliqué en direct |
update({ currency }) | Appliqué en direct aux sessions multidevises | Sans objet |
update({ layout }) | Enregistré localement, sans changement | Appliqué 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.
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.
| Valeur | Affichage pour le payeur |
|---|---|
classic | Une liste verticale, par défaut |
compact | La même liste, plus dense |
tabs | Un onglet par catégorie |
accordion | Des sections repliables |
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().
| Couche | Dans l'URL |
|---|---|
| Préréglage | theme_preset= |
| Clés de premier niveau | theme_primary=, theme_bg=, theme_radius=, etc. |
colorScheme, labels | color_scheme=, labels= |
disableAnimations | disable_animations=1 |
variables | Une valeur var_<key>= par jeton |
rules | rules_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.
| Objectif | Emplacement |
|---|---|
| Votre logo et vos couleurs sur chaque checkout | Image de marque du Dashboard |
| Un bouton de mode sombre sur votre site | appearance.colorScheme et update() |
| Une campagne sur une page | appearance lors de ce montage |
| Une police ou une image d'arrière-plan | custom_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.