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).
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 :
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.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" />
L'entrée de masque prend en charge 3 modes de saisie :
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 :
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 :
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.
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',
}
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 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 :
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 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 ensemble dans une plage de sélection.
Un jeton char
ne doit représenter qu'un seul caractère, et son placeholder doit également être d'une seule lettre de longueur.
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 :
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
.
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.
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 :
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.
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 :
Les groupes ne peuvent pas être utilisés en mode sélection. Une exception sera levée.
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
:
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.
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
:
Exécuter un masque à l'envers ne fonctionne qu'en mode décalage.
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
:
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
:
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
:
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 :
.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 aux placeholders. 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 jetons (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 jetons ou modifie ceux existants. |
unmask-value | boolean | false | Par 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 | |||
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. |
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:
Clé de Section | Attribut | Par défaut | Description |
---|---|---|---|
label | label | for | Associe cela à un élément de saisie, améliorant l'accessibilité et l'expérience utilisateur |
input | input | disabled | Désactive un élément HTML, empêchant l'interaction de l'utilisateur et signalant un état non interactif |
aria-describedby | Améliore l'accessibilité en associant un élément à une description, facilitant la lecture par les lecteurs d'écran | ||
aria-required | Ajoute l'état requis lorsque la validation est requise. | ||
icon | icon | for | Chaque 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 |
Événement clavier | Description |
---|---|
Tab | Déplace le focus vers la prochaine entrée pouvant être ciblée sur la page. |
Shift + Tab | Déplace le focus vers l'entrée précédente pouvant être ciblée sur la page. |