Champ de saisie
Un champ de texte complet : libellé au-dessus, indication en dessous, icônes à l'intérieur, compteur de caractères, bouton d'effacement et état de chargement, le tout autour d'un vrai <input>.
Utilisation
Exemples
Libellé et indication
label s'affiche au-dessus du champ et y place le curseur au clic. hint s'affiche sous le champ et lui est lié par aria-describedby.
Shown next to everything you publish.
Tailles
size définit la hauteur à 32, 40 ou 48 pixels, et compact retire 4px à l'une quelconque d'entre elles.
Icônes
iconStart et iconEnd posent une icône décorative à chaque extrémité du champ. Le slot #end remplace l'icône de fin, là où #start est rendu après l'icône de début plutôt qu'à sa place.
This handle is free.
Effaçable
clearable ajoute une croix qui vide le champ, affichée tant qu'il y a quelque chose à vider et que le champ est modifiable. clearVisible répond vous-même à cette question, pour un champ dont la valeur n'est pas son texte.
États
disabled grise le champ et le sort de l'ordre de tabulation. readonly le garde focalisable et copiable, et masque la croix sauf indication contraire. invalid sert à une règle que le navigateur ne peut pas vérifier lui-même, et loading place un indicateur là où va l'icône de fin.
That handle is already taken.
Icônes cliquables
Un écouteur @click:icon-start ou @click:icon-end transforme l'icône en vrai bouton, qui demande alors iconStartLabel ou iconEndLabel.
Press the magnifier to search.
Compteurs
counter affiche la longueur au bout du champ. maxlength est la limite dure du navigateur, là où softLimit est une ligne que le lecteur peut franchir : le texte n'est jamais coupé, le compteur passe au rouge et le champ tombe en erreur par la validité native. La prop compte des caractères, comme sur VTextarea ; sur VFileInput, le même nom compte des fichiers et leur taille.
The browser refuses the twenty-first character.
Type past forty and the field goes into error instead.
Motif
Il n'y a pas de prop pattern : l'attribut natif atteint l'input par fallthrough, avec inputmode, name et tout ce dont un formulaire a besoin. Le champ passe au rouge par :user-invalid, une fois que le lecteur l'a quitté.
Five digits.
API
Props
| Prop | Type | Défaut |
|---|---|---|
size | InputSize'sm' | 'md' | 'lg' | 'md' |
| La hauteur du champ : 32, 40 ou 48 pixels. | ||
compact | boolean | false |
| Retire 4px à la hauteur, en laissant le rembourrage, le texte et les icônes tels quels. | ||
type | InputType'text' | 'email' | 'number' | 'password' | 'search' | 'tel' | 'url' | 'text' |
Le type natif du champ, qui est aussi ce qui indique à un téléphone quel clavier proposer : un pavé numérique pour number, une touche @ pour email. | ||
invalid | boolean | false |
| Marque le champ comme invalide quoi qu'en pense le navigateur. C'est la voie pour une règle que seul le serveur peut vérifier ; tout ce que le navigateur sait valider seul colore déjà le champ sans elle. | ||
disabled | boolean | false |
| Rend le champ inutilisable, grisé par les tokens de couleur. | ||
readonly | boolean | false |
Montre la valeur sans permettre de la changer. Le champ peut toujours être focalisé et copié, et il masque le bouton d'effacement à moins que clearVisible ne réponde explicitement à cette question. | ||
noTyping | boolean | false |
| Refuse le clavier sans dessiner le champ en lecture seule : l'attribut natif est posé, mais le champ garde son apparence ordinaire et sa croix d'effacement. Pour un champ dont la valeur vient d'ailleurs, d'un sélecteur ou d'une boîte de dialogue de fichiers, et qui n'en est pas moins modifiable. | ||
label | string | aucune |
| Le libellé au-dessus du champ, lié à lui pour qu'un clic dessus y place le focus. | ||
hint | string | aucune |
| Une ligne d'aide sous le champ. Elle est liée au champ pour les technologies d'assistance, donc elle est lue avec le libellé. | ||
iconStart | IconSource | aucune |
Une icône dans le champ, au début. Elle est décorative jusqu'à ce qu'un écouteur @click:icon-start soit attaché : elle devient alors un vrai bouton et demande iconStartLabel. | ||
iconEnd | IconSource | aucune |
La même chose à la fin du champ. Le slot #end la remplace, et l'indicateur de chargement prend sa place pendant qu'il tourne. | ||
iconStartLabel | string | aucune |
| Ce que fait l'icône de début, en mots, une fois qu'elle est cliquable. | ||
iconEndLabel | string | aucune |
| Ce que fait l'icône de fin, en mots, une fois qu'elle est cliquable. | ||
loading | boolean | false |
| Affiche un indicateur à la fin du champ, à la place de l'icône ou du slot de fin. | ||
loadingText | string | aucune |
| Ce que les lecteurs d'écran annoncent pendant que l'indicateur tourne. Il retombe sur le dictionnaire du design system. | ||
clearable | boolean | false |
| Propose une croix qui vide le champ. Elle apparaît quand il y a quelque chose à effacer et que le champ est modifiable. | ||
clearVisible | boolean | aucune |
| Décide si la croix est affichée, au lieu de laisser le champ le déduire de son propre contenu. Cette prop existe pour les composants bâtis sur celui-ci, où ce qu'il y a à effacer n'est pas le texte : VCombobox tient sa sélection en puces à côté du champ, et un sélecteur de date ou d'heure en lecture seule change sa valeur par un panneau plutôt qu'à la frappe. | ||
clearLabel | string | aucune |
| Ce que fait le bouton d'effacement, en mots. Il retombe sur le dictionnaire du design system. | ||
maxlength | number | aucune |
| Le nombre maximum de caractères. Par défaut c'est la limite du navigateur lui-même, qui refuse simplement tout ce qui la dépasse. | ||
softLimit | boolean | false |
| Transforme cette limite en limite souple : le lecteur peut taper au-delà, et le champ passe en erreur au lieu de refuser les frappes en silence. C'est rapporté par la validité native, donc un formulaire ne peut pas être envoyé au-dessus de la limite. | ||
counter | boolean | false |
| Affiche ce qui a été saisi, à la fin du champ : 12/80 face à une limite, ou simplement 12 sans limite. | ||
v-model | string | number | '' |
La valeur, typée en texte ou en nombre plutôt qu'en texte seul. Sur un <input type="number">, Vue convertit la valeur en nombre de lui-même : un modèle limité aux chaînes rendrait donc un nombre à qui lui a passé une chaîne. | ||
Événements
| Événement | Type |
|---|---|
click:icon-start | [event: MouseEvent] |
| L'icône de début a été pressée. Attacher cet écouteur est ce qui en fait un bouton. | |
click:icon-end | [event: MouseEvent] |
| L'icône de fin a été pressée. Attacher cet écouteur est ce qui en fait un bouton. | |
clear | [] |
| Le bouton d'effacement a été pressé. La valeur est déjà vidée. | |
Slots
| Slot | Type |
|---|---|
start | {} |
Du contenu au début du champ, rendu après iconStart plutôt qu'à sa place. | |
value-end | {} |
| Vos propres contrôles dans le champ, placés avant ceux du champ lui-même : la croix d'effacement et l'icône de fin. C'est la place de ce qui agit sur la valeur, pour que l'ordre de lecture et l'ordre de tabulation coïncident. | |
end | {} |
Du contenu à la fin du champ, qui remplace iconEnd. Il est masqué pendant le chargement, l'indicateur prenant cette place. | |
Types
Les types que les tables ci-dessus nomment, écrits comme la librairie les déclare. Ceux qui portent export s'importent depuis vectis-ui pour typer votre propre code ; les autres décrivent la forme de ce qu'un slot fournit.
export interface BuiltinIcon {
name: string
paths: readonly [string] | readonly [string, string]
}export type IconRender =
| { path: string; viewBox?: string }
| { component: Component; props?: Record<string, unknown> }
| { src: string }
| { text: string; class?: string }
| { class: string }export type IconSource = string | BuiltinIcon | IconRender