L'entrée masque transforme automatiquement l'entrée de l'utilisateur pour correspondre à un format fourni. Utilisées de manière appropriée, les entrées masquées peuvent améliorer l'expérience utilisateur en éliminant toute ambiguïté sur la valeur souhaitée (par exemple un numéro de téléphone ou un numéro de sécurité sociale).
Le masque est le format souhaité de l'entrée. Il est passé à la propriété masque où il est analysé pour les tokens. Le masque est composé de :

L'entrée de masque est livrée avec 4 tokens 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.Si vous avez besoin d'utiliser l'un des tokens 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 hex :
<FormKit mask="\#hhhhhh" type="mask" />L'entrée de masque supporte 3 modes d'entrée :
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à peuplé 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 lorsque vous tapez. En mode remplacer, cependant, les caractères suivants sont écrasés par une nouvelle valeur :
En mode sélection, les tokens de type char équivalents sont regroupés en plages de texte sélectionnables. FormKit sélectionne automatiquement ces plages de texte lors du clic ou de la mise au point de l'entrée. Ces plages de sélection sont maintenues pendant que l'utilisateur tape. Lorsqu'il est 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 sélection, l'utilisateur peut utiliser les touches flèche ou tabulation pour déplacer son focus d'une plage de sélection à une autre :
La propriété de token selectDirection contrôle la direction dans laquelle 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 de token.
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 de caractères parmi 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 `enum`.
*/
type: 'char',
/**
* Le jeton à analyser à partir 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 s'écoulent
* dans.
*/
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é
* contre des caractères individuels - pas dans le contexte de la chaîne entière.
*/
pattern: /[A-Za-z0-9]/,
/**
* (Uniquement pour le type `char`, facultatif). Un caractère facultatif pour "remplir" le
* plage de sélection avec lorsqu'il est en mode sélection. Par exemple, un selectFill défini sur
* "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 les lettres et les 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',
}Tout placeholder que vous définissez ne doit pas correspondre à l'expression régulière pattern fournie dans la définition du jeton.
Pour passer un nouveau jeton à l'entrée du masque, vous pouvez utiliser la prop 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 :
Pour enregistrer vos jetons de masque globalement, étendez la propriété config de votre configuration globale FormKit :
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 de chiffre (#) n'a pas de selectFill par défaut. Pour en ajouter un, il suffit de l'étendre :
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 en une plage de sélection.
Un jeton char ne devrait jamais représenter qu'un seul caractère, et son espace réservé ne devrait également être qu'un seul caractère de longueur.
Les jetons Enum permettent des masques de longueur variable dans 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 correspondants. En pratique, cela fonctionne un peu comme une auto-complé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 en auto-complétion pourrait être bien représentée avec des énumérations :
Les énumérations ne sont prises en charge qu'en mode select. Lorsqu'un jeton enum est trouvé dans une chaîne de masque, le mode de l'entrée est forcé à select.
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 par {} :
<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.
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 tous les arguments. Les options disponibles sont :
Un espace réservé défini dans un groupe a une spécificité plus élevée qu'un espace réservé défini dans la définition du jeton et le remplacera.
Les arguments peuvent être passés à une option de groupe en utilisant un deux-points, comme placeholder:+, où le symbole plus + est passé à l'option placeholder.
Vous pouvez enchaîner les options de groupe :
Les groupes ne peuvent pas être utilisés en mode sélection. Une exception sera lancée.
Vous pouvez vous assurer que certains caractères apparaissent toujours au début ou à la fin d'une entrée en utilisant les props prefix et suffix, respectivement :
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 chiffres.
Dans des circonstances spécifiques, vous pouvez vouloir exécuter votre masque à l'envers. Le masque vérifiera si l'entrée de l'utilisateur remplit le masque de droite à gauche. Ceci est courant dans les entrées de type monétaire et peut être appliqué en ajoutant la prop reverse :
L'exécution d'un masque à l'envers ne fonctionne qu'en mode décalage.
La valeur d'un 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 le rend pratique à utiliser avec des règles de validation comme required. Cependant, si vous souhaitez accepter des valeurs incomplètes, vous pouvez le faire via la prop allow-incomplete :
Par défaut, la valeur d'une entrée de masque inclut le formatage fourni via la prop mask. Cependant, si vous souhaitez la valeur brute non masquée avec les littéraux de chaîne supprimés, vous pouvez utiliser la prop unmask-value :
Par défaut, l'entrée mask affiche le caractère de l'espace réservé de chaque jeton. Vous pouvez désactiver ce comportement (sauf en mode sélection) tout en appliquant automatiquement le formatage via la prop show-mask :
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 "out of the box", cela ne permet pas de différencier stylistiquement le texte. Par exemple, il serait agréable que les parties "littérales" du masque aient un aspect différent des parties "placeholder".
Pour obtenir cet effet, vous pouvez activer une superposition qui rend des éléments DOM qui sont positionnés directement sur 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 de superposition nécessaires sont automatiquement appliqués pour vous.
La superposition contient 4 sections possibles sur lesquelles vous pouvez cibler vos styles :
.formkit-overlay-literal ou overlay-literal-class).formkit-overlay-placeholder ou overlay-placeholder-class).formkit-overlay-enum ou overlay-enum-class).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 au placeholder. Si vous n'utilisez pas Genesis, veuillez vous assurer que la section inner est positionnée (comme position: relative).
| Prop | Type | Par défaut | Description |
|---|---|---|---|
| allow-incomplete | boolean | false | Par 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. |
| mask | string | none | Le masque à appliquer. Il s'agit d'une chaîne composée de tokens (comme “#”) et de valeurs de chaînes littérales. |
| mode | string | shift | Détermine comment fonctionne l'entrée de masque. Les options sont shift, replace et select. |
| overlay | boolean | false | Rend des éléments DOM qui imitent l'entrée de texte pour permettre la différenciation dans la stylisation du masque. |
| prefix | string | none | Caractères qui apparaîtront toujours au début de l'entrée. |
| reverse | boolean | false | Exécute le masque à l'envers — de droite à gauche. |
| show-mask | boolean | true | Affiche une représentation en direct du placeholder du motif comme valeur interne de l'entrée. |
| suffix | string | none | Caractères qui apparaîtront toujours à la fin de l'entrée. |
| tokens | Object | {} | Ajoute de nouveaux tokens ou modifie ceux existants. |
| unmask-value | boolean | false | Par défaut, la valeur de l'entrée est la même que celle qui est affichée (avec formatage). Les littéraux de chaîne seront supprimés de la valeur si cette prop est définie sur true. |
| Afficher Universel props | |||
| config | Object | {} | Options de configuration à fournir au nœud d'entrée et à tout nœud descendant de cette entrée. |
| delay | Number | 20 | Nombre 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é. |
| dirtyBehavior | string | touched | Détermine comment le drapeau "dirty" de cette entrée est défini. Peut être défini sur touched ou compare — touched (par défaut) est plus performant, mais ne détectera pas lorsque le formulaire correspond à nouveau à son état initial. |
| errors | Array | [] | Tableau de chaînes à afficher comme messages d'erreur sur ce champ. |
| help | String | '' | Texte pour le texte d'aide associé à l'entrée. |
| id | String | input_{n} | L'identifiant unique de l'entrée. Fournir un identifiant permet également d'accéder globalement au nœud de l'entrée. |
| ignore | Boolean | false | Empê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. |
| index | Number | undefined | Permet 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é. |
| label | String | '' | Texte pour l'élément label associé à l'entrée. |
| name | String | input_{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. |
| parent | FormKitNode | contextual | Par 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-icon | String | '' | Spécifie une icône à placer dans la section prefixIcon. |
| preserve | boolean | false | Conserve la valeur de l'entrée sur un groupe parent, une liste ou un formulaire lorsque l'entrée est démontée. |
| preserve-errors | boolean | false | Par 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-schema | Object | {} | 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-icon | String | '' | Spécifie une icône à placer dans la section suffixIcon. |
| type | String | text | Le type d'entrée à afficher à partir de la bibliothèque. |
| validation | String, Array | [] | Les règles de validation à appliquer à l'entrée. |
| validation-visibility | String | blur | Détermine quand afficher les règles de validation en échec d'une entrée. Les valeurs valides sont blur, dirty et live. |
| validation-label | String | {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-rules | Object | {} | Règles de validation personnalisées supplémentaires à rendre disponibles pour la propriété de validation. |
| value | Any | undefined | Initialise la valeur initiale d'une entrée et/ou de ses enfants. Non réactif. Peut initialiser des groupes entiers (formulaires) et des listes.. |
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.
| Section-key | Description |
|---|---|
| outer | L'élément d'enrobage le plus externe. |
| wrapper | Un enrobage autour de l'étiquette et de l'entrée. |
| label | L'étiquette de l'entrée. |
| prefix | N'a pas de sortie par défaut, mais permet du contenu directement avant un élément d'entrée. |
| prefixIcon | Un élément pour afficher une icône avant la section de préfixe. |
| inner | Un enrobage autour de l'élément d'entrée réel. |
| suffix | N'a pas de sortie par défaut, mais permet du contenu directement après un élément d'entrée. |
| suffixIcon | Un élément pour afficher une icône après la section de suffixe. |
| input | L'élément d'entrée lui-même. |
| help | L'élément contenant le texte d'aide. |
| messages | Un enrobage autour de tous les messages. |
| message | L'élément (ou plusieurs éléments) contenant un message — le plus souvent des messages de validation et d'erreur. |