Démarrage rapide de l'installation Pro :rocket:

Introduction

L'entrée mask transforme automatiquement la saisie de l'utilisateur pour correspondre à un format fourni. Utilisées correctement, les entrées de masque peuvent offrir une meilleure expérience utilisateur en éliminant toute ambiguïté pour la valeur souhaitée (par exemple un numéro de téléphone ou un numéro de sécurité sociale).

Aperçu de l'entrée de masque

2 mins

Exemple de base

Charger l'exemple en direct

Masques

Le masque est le format souhaité de l'entrée. Il est transmis à la propriété mask où il est analysé pour les jetons. Le masque est composé de :

  • Jetons - Une représentation en chaîne de caractères d'une région modifiable par l'utilisateur. Affichée en blanc ci-dessous.
  • Littéraux de chaîne - Tout caractère qui n'est pas un jeton. Non modifiable par l'utilisateur. Affiché en orange ci-dessous.
Image de la chaîne de masque avec des jetons et des littéraux de chaîne en différentes couleurs.

Jetons intégrés

L'entrée de masque est livrée avec 4 jetons intégrés :

  • h - Accepte un caractère hexadécimal (0-9a-fA-F).
  • # - Accepte un caractère numérique.
  • a - Accepte un caractère alphabétique.
  • * - Accepte n'importe quel caractère.
Charger l'exemple en direct

Échapper les intégrés

Si vous avez besoin d'utiliser l'un des jetons intégrés comme un littéral de chaîne dans votre masque, vous pouvez les échapper avec \. Ici, nous échappons le signe dièse # pour l'utiliser dans notre couleur hexadécimale :

<FormKit mask="\#hhhhhh" type="mask" />

Modes

L'entrée de masque prend en charge 3 modes de saisie :

  • Shift (par défaut)
  • Replace
  • Select

Mode Shift & Replace

Par défaut, les caractères d'un masque sont automatiquement décalés vers l'avant lors de la frappe. Cela est notable lorsqu'un masque est déjà rempli et que vous placez le curseur au début ou près du début de l'entrée et commencez à taper. Les caractères suivant votre curseur sont "décalés" vers l'avant au fur et à mesure que vous tapez. Cependant, en mode replace, les caractères suivants sont écrasés par une nouvelle valeur :

Charger l'exemple en direct

Mode Select

En mode select, les jetons de type char équivalents sont regroupés en plages de texte sélectionnables. FormKit sélectionne automatiquement ces plages de texte lors d'un clic ou d'une mise au point sur l'entrée. Ces plages de sélection sont maintenues pendant que l'utilisateur tape. Utilisé avec goût, cela produit une UX claire car l'utilisateur est conscient de la valeur qu'il est censé entrer.

De plus, lorsqu'une entrée est en mode select, l'utilisateur peut utiliser les touches fléchées ou tab pour déplacer son focus d'une plage de sélection à une autre :

Charger l'exemple en direct
Options du mode Select

La propriété de jeton selectDirection contrôle dans quelle direction les nouveaux caractères s'écoulent dans la plage sélectionnée. Vous pouvez remplir les caractères de sélection "vides" avec une valeur prédéterminée (comme des zéros non significatifs "0") en utilisant la propriété selectFill. Voir propriétés des jetons.

Jetons

Création de nouveaux jetons

Que se passe-t-il si un motif peut accepter des lettres ou des chiffres à la même position ? Il est relativement simple de créer de nouveaux jetons. Il existe 2 types de jetons :

  • char accepte un seul caractère.
  • enum accepte n'importe quelle chaîne d'un tableau de valeurs possibles.

Les propriétés suivantes doivent être définies pour créer un nouveau jeton :

{
  /**
   * Le type de jeton. Peut être un `char` ou un `enum`.
   */
  type: 'char',
  /**
   * Le jeton à extraire du masque.
   */
  token: 'z',
  /**
   * Un caractère de remplacement à afficher dans l'entrée lorsque `show-mask` est
   * activé.
   */
  placeholder: '_',
  /**
   * Lors de l'utilisation du mode `select`, détermine dans quelle direction les nouveaux caractères
   * sont insérés.
   */
  selectDirection: 'left',
  /**
   * (Uniquement pour le type `char`). Une expression régulière qui décrit les types de
   * caractères qui peuvent apparaître dans cet emplacement. Ce motif sera évalué
   * sur des caractères individuels — et non dans le contexte de la chaîne entière.
   */
  pattern: /[A-Za-z0-9]/,
  /**
   * (Uniquement pour le type `char`, optionnel). Un caractère optionnel pour "remplir" la
   * plage de sélection en mode select. Par exemple, un selectFill défini à
   * "0" peut être utile avec des chiffres pour produire des zéros non significatifs comme "001".
   */
  selectFill: "0",
  /**
   * (Uniquement pour le type `enum`). Un tableau de valeurs possibles.
   */
  values: [
    'Mars',
    'Avril',
    'Mai'
  ],
}

Par exemple, un nouveau jeton qui accepte des lettres et des chiffres, et qui est représenté par la lettre z dans la chaîne de masque ressemblerait à ceci :

{
  type: 'char',
  token: 'z',
  pattern: /[A-Za-z0-9]/,
  placeholder: '_',
  selectDirection: 'left',
}
Les placeholders ne doivent pas correspondre au pattern

Tout placeholder que vous définissez ne doit pas correspondre à l'expression régulière pattern fournie dans la définition du jeton.

Ajouter des jetons via la prop

Pour passer un nouveau jeton à l'entrée de masque, vous pouvez utiliser la propriété tokens qui attend un objet avec des clés qui correspondent à la propriété token. Par exemple, notre nouveau jeton dans l'exemple ci-dessus peut être appliqué directement :

Charger l'exemple en direct

Ajouter des jetons globalement

Pour enregistrer vos jetons de masque globalement, étendez la propriété config de votre configuration globale FormKit :

Charger l'exemple en direct

Modifier les jetons

En plus de créer de nouveaux jetons, la propriété tokens peut également modifier les jetons existants. Toute valeur fournie à la propriété tokens sera fusionnée avec les jetons existants pour cette entrée. Par exemple, le jeton chiffre (#) n'a pas de selectFill par défaut. Pour en ajouter un, il suffit de l'étendre :

Charger l'exemple en direct

Jetons de caractères

Les jetons char acceptent un seul caractère. Pour qu'un caractère soit accepté, il doit correspondre à l'expression régulière token.pattern. Les quatre jetons intégrés (h, #, a et *) sont tous des jetons de type char.

En mode select, les jetons char sont regroupés ensemble dans une plage de sélection.

Placeholders

Un jeton char ne doit représenter qu'un seul caractère, et son placeholder doit également être d'une seule lettre de longueur.

Jetons Enum

Les jetons Enum permettent des masques de longueur variable au sein d'un ensemble prédéfini d'options. Lorsqu'un utilisateur commence à taper, la valeur du jeton Enum changera pour la première valeur correspondante, et la plage de sélection reflétera les caractères actuellement non appariés. En pratique, cela fonctionne un peu comme une autocomplétion pour ce jeton spécifique. De plus, les utilisateurs peuvent parcourir les options disponibles pour un jeton donné en appuyant sur les touches fléchées haut/bas.

Une date avec des noms de mois à autocomplétion pourrait être bien représentée avec des enums :

Charger l'exemple en direct
Exigence du mode sélection

Les Enums sont uniquement pris en charge en mode select. Lorsqu'un jeton enum est trouvé dans une chaîne de masque, le mode de l'entrée est forcément défini sur select.

Groupes

Les groupes sont un moyen de traiter plusieurs caractères de masque comme une seule unité. Vous créez un groupe en entourant les caractères de masque souhaités de {} :

<FormKit mask="id{-a#a}" type="mask" />
<!-- "-a#a" est le groupe -->

Par eux-mêmes, les groupes ne font rien à moins que vous ne définissiez des options de groupe.

Options de groupe

Les options de groupe vous permettent d'appliquer une fonctionnalité à un groupe entier en utilisant un pipe | suivi du nom de l'option et de ses arguments. Les options disponibles sont :

  • repeat — permet à un groupe d'être répété un nombre infini de fois.
  • placeholder — Un caractère pour tenir l'espace avant la saisie de l'utilisateur.
Placeholders de groupe

Un placeholder défini dans un groupe a une spécificité plus élevée qu'un placeholder défini dans la définition du jeton et le remplacera.

Paramètres d'option

Des arguments peuvent être passés à une option de groupe en utilisant deux-points, comme placeholder:+, où le symbole plus + est passé à l'option placeholder.

Vous pouvez enchaîner les options de groupe :

Charger l'exemple en direct
Ne peut pas être utilisé en mode sélection

Les groupes ne peuvent pas être utilisés en mode sélection. Une exception sera levée.

Préfixe & suffixe

Vous pouvez vous assurer que certains caractères apparaissent toujours au début ou à la fin d'une entrée en utilisant respectivement les propriétés prefix et suffix :

Charger l'exemple en direct
Les valeurs ne peuvent pas correspondre au masque

Votre contenu de préfixe et de suffixe ne peut pas correspondre au masque. Par exemple, si votre masque a un jeton de chiffre #, votre préfixe/suffixe ne peut pas contenir de nombres.

Exécuter le masque à l'envers

Dans certaines circonstances, vous pouvez vouloir exécuter votre masque à l'envers. Le masque testera si l'entrée de l'utilisateur remplit le masque de droite à gauche. Cela est courant dans les entrées de type monétaire et peut être appliqué en ajoutant la propriété reverse :

Charger l'exemple en direct
Exigence du mode décalage

Exécuter un masque à l'envers ne fonctionne qu'en mode décalage.

Valeurs du masque

Valeurs incomplètes

Une valeur de masque n'est pas considérée comme "complète" tant que l'utilisateur n'a pas rempli l'ensemble du motif. Jusqu'à ce point, FormKit considérera la valeur de l'entrée comme "vide". Cela rend son utilisation pratique avec des règles de validation comme required. Cependant, si vous souhaitez accepter des valeurs incomplètes, vous pouvez le faire via la propriété allow-incomplete :

Charger l'exemple en direct

Valeurs non masquées

Par défaut, la valeur d'une entrée masquée inclut le formatage fourni via la propriété mask. Cependant, si vous souhaitez la valeur brute non masquée avec les littéraux de chaîne supprimés, vous pouvez utiliser la propriété unmask-value :

Charger l'exemple en direct

Masquer le masque

Par défaut, l'entrée mask affiche le caractère de placeholder de chaque jeton. Vous pouvez désactiver ce comportement (sauf en mode sélection) tout en appliquant automatiquement le formatage via la propriété show-mask :

Charger l'exemple en direct

Superposition (colorisation d'un masque)

Par défaut, la valeur d'un masque est affichée via la valeur de son élément d'entrée. Bien que cela fonctionne "tel quel", cela ne permet pas de différencier stylistiquement le texte. Par exemple, il serait agréable que les parties "littérales" du masque aient une apparence différente des parties "placeholders".

Pour obtenir cet effet, vous pouvez activer une superposition qui rend des éléments DOM positionnés directement au-dessus de l'entrée elle-même. Le texte à l'intérieur de l'entrée est toujours là, mais il sera transparent. En général, les styles de positionnement nécessaires pour la superposition sont automatiquement appliqués pour vous.

La superposition contient 4 sections possibles sur lesquelles vous pouvez cibler vos styles :

  • Littéral (.formkit-overlay-literal ou overlay-literal-class)
  • Placeholder (.formkit-overlay-placeholder ou overlay-placeholder-class)
  • Enum (.formkit-overlay-enum ou overlay-enum-class)
  • Char (.formkit-overlay-char ou overlay-char-class)

Le thème genesis par défaut prend automatiquement en charge la superposition et applique des couleurs gris clair aux placeholders. Si vous n'utilisez pas Genesis, veuillez vous assurer que la section inner est positionnée (comme position: relative).

Charger l'exemple en direct

Props & Attributs

PropTypePar défautDescription
allow-incompletebooleanfalsePar défaut, la valeur d'une entrée de masque est vide jusqu'à ce que le motif soit complet. Cette prop permet à l'entrée d'utiliser des valeurs incomplètes.
maskstringnoneLe masque à appliquer. Il s'agit d'une chaîne composée de jetons (comme “#”) et de valeurs de chaînes littérales.
modestringshiftDétermine comment fonctionne l'entrée de masque. Les options sont shift, replace et select.
overlaybooleanfalseRend des éléments DOM qui imitent l'entrée de texte pour permettre la différenciation dans la stylisation du masque.
prefixstringnoneCaractères qui apparaîtront toujours au début de l'entrée.
reversebooleanfalseExécute le masque à l'envers — de droite à gauche.
show-maskbooleantrueAffiche une représentation en direct du placeholder du motif comme valeur interne de l'entrée.
suffixstringnoneCaractères qui apparaîtront toujours à la fin de l'entrée.
tokensObject{}Ajoute de nouveaux jetons ou modifie ceux existants.
unmask-valuebooleanfalsePar défaut, la valeur de l'entrée est la même que ce qui est affiché (avec formatage). Les littéraux de chaîne seront retirés de la valeur si cette prop est définie sur vrai.
Afficher Universel props
configObject{}Options de configuration à fournir au nœud d'entrée et à tout nœud descendant de cette entrée.
delayNumber20Nombre de millisecondes à attendre avant que la valeur d'une entrée ne soit déclenchée avant que le commit hook ne soit déclenché.
dirtyBehaviorstringtouchedDétermine comment le drapeau "dirty" de cette entrée est défini. Peut être défini sur touched ou comparetouched (par défaut) est plus performant, mais ne détectera pas lorsque le formulaire correspond à nouveau à son état initial.
errorsArray[]Tableau de chaînes à afficher comme messages d'erreur sur ce champ.
helpString''Texte pour le texte d'aide associé à l'entrée.
idStringinput_{n}L'identifiant unique de l'entrée. Fournir un identifiant permet également d'accéder globalement au nœud de l'entrée.
ignoreBooleanfalseEmpêche une entrée d'être incluse dans un parent (groupe, liste, formulaire, etc). Utile lors de l'utilisation d'entrées pour l'interface utilisateur au lieu de valeurs réelles.
indexNumberundefinedPermet d'insérer une entrée à l'index donné si le parent est une liste. Si la valeur de l'entrée est indéfinie, elle hérite de la valeur de cette position d'index. Si elle a une valeur, elle l'insère dans les valeurs de la liste à l'index donné.
labelString''Texte pour l'élément label associé à l'entrée.
nameStringinput_{n}Le nom de l'entrée tel qu'identifié dans l'objet de données. Cela doit être unique au sein d'un groupe de champs.
parentFormKitNodecontextualPar défaut, le parent est un groupe d'enrobage, une liste ou un formulaire — mais cette propriété permet une affectation explicite du nœud parent.
prefix-iconString''Spécifie une icône à placer dans la section prefixIcon.
preservebooleanfalseConserve la valeur de l'entrée sur un groupe parent, une liste ou un formulaire lorsque l'entrée est démontée.
preserve-errorsbooleanfalsePar défaut, les erreurs définies sur les entrées à l'aide de setErrors sont automatiquement effacées lors de l'entrée, en définissant cette propriété sur true, l'erreur est maintenue jusqu'à ce qu'elle soit explicitement effacée.
sections-schemaObject{}Un objet de clés de section et de valeurs partielles de schéma, où chaque partie de schéma est appliquée à la section respective.
suffix-iconString''Spécifie une icône à placer dans la section suffixIcon.
typeStringtextLe type d'entrée à afficher à partir de la bibliothèque.
validationString, Array[]Les règles de validation à appliquer à l'entrée.
validation-visibilityStringblurDétermine quand afficher les règles de validation en échec d'une entrée. Les valeurs valides sont blur, dirty et live.
validation-labelString{label prop}Détermine quelle étiquette utiliser dans les messages d'erreur de validation, par défaut, elle utilise la propriété label si elle est disponible, sinon elle utilise la propriété name.
validation-rulesObject{}Règles de validation personnalisées supplémentaires à rendre disponibles pour la propriété de validation.
valueAnyundefinedInitialise la valeur initiale d'une entrée et/ou de ses enfants. Non réactif. Peut initialiser des groupes entiers (formulaires) et des listes..

Sections

Vous pouvez cibler une section spécifique d'une entrée en utilisant la "key" de cette section, ce qui vous permet de modifier les classes de cette section, le HTML (via :sections-schema) ou le contenu (via des emplacements)). En savoir plus sur les sections ici.

Entrez un numéro de téléphone
📞
Input field
❤️
🚀
Veuillez entrer votre numéro de téléphone.
Le numéro de téléphone est requis.
Section-keyDescription
outerL'élément d'enrobage le plus externe.
wrapperUn enrobage autour de l'étiquette et de l'entrée.
labelL'étiquette de l'entrée.
prefixN'a pas de sortie par défaut, mais permet du contenu directement avant un élément d'entrée.
prefixIconUn élément pour afficher une icône avant la section de préfixe.
innerUn enrobage autour de l'élément d'entrée réel.
suffixN'a pas de sortie par défaut, mais permet du contenu directement après un élément d'entrée.
suffixIconUn élément pour afficher une icône après la section de suffixe.
inputL'élément d'entrée lui-même.
helpL'élément contenant le texte d'aide.
messagesUn enrobage autour de tous les messages.
messageL'élément (ou plusieurs éléments) contenant un message — le plus souvent des messages de validation et d'erreur.

Accessibilité

Tous les champs de saisie FormKit sont conçus en tenant compte des considérations d'accessibilité suivantes. Aidez-nous à améliorer continuellement l'accessibilité pour tous en signalant les problèmes d'accessibilité ici:

Balises sémantiquesAttributs AriaAccessible au clavierIndicateurs de focusContraste des couleurs avec le thème fourniÉtiquettes accessibles, texte d'aide et erreurs
Clé de SectionAttributPar défautDescription
labellabelforAssocie cela à un élément de saisie, améliorant l'accessibilité et l'expérience utilisateur
inputinputdisabledDésactive un élément HTML, empêchant l'interaction de l'utilisateur et signalant un état non interactif
aria-describedbyAméliore l'accessibilité en associant un élément à une description, facilitant la lecture par les lecteurs d'écran
aria-requiredAjoute l'état requis lorsque la validation est requise.
iconiconforChaque fois qu'une icône est définie comme libellé, elle la relie à un élément de saisie, améliorant l'accessibilité et l'expérience utilisateur

Interactions Clavier

Événement clavierDescription
TabDéplace le focus vers la prochaine entrée pouvant être ciblée sur la page.
Shift + TabDéplace le focus vers l'entrée précédente pouvant être ciblée sur la page.