Zone de texte
Un champ de texte multiligne, avec le même décor que VInput : libellé au-dessus, indication en dessous, icônes à l'intérieur, compteur et bouton d'effacement. Il peut grandir à mesure que le texte est saisi.
Utilisation
Exemples
Libellé et indication
label est un vrai <label> lié au champ : cliquer les mots place le curseur dans la boîte. hint passe sous le champ et lui est lié par aria-describedby.
Tailles
size pose les rembourrages, l'échelle typographique et les icônes, jamais la hauteur, qui vient de rows. compact retire 4px aux rembourrages à chacune des trois tailles.
Icônes
iconStart et iconEnd posent une icône décorative à chaque extrémité, sur la première ligne plutôt qu'au milieu de la boîte. 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.
Icônes cliquables
Un écouteur @click:icon-start ou @click:icon-end transforme l'icône en vrai bouton, qui demande alors son libellé. Chaque bouton est son propre arrêt de tabulation et reste hors de la zone de saisie.
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. L'appuyer rend aussitôt le focus à la zone de saisie, et clear est émis après coup.
Compteurs
counter passe sous le champ, à côté du texte d'aide. Face à maxlength, le navigateur refuse tout ce qui dépasse la limite, là où softLimit laisse le lecteur continuer : le compteur passe au rouge et le champ se déclare invalide par la validité native. Il compte des caractères, comme sur VInput ; sur VFileInput, la même prop compte des fichiers et leur taille.
Croissance automatique
rows donne au champ sa hauteur de départ, et par défaut sa hauteur tout court. autoGrow laisse la boîte grandir à mesure que le texte est saisi, en CSS pur.
États
invalid sert à une règle que le navigateur ne peut pas vérifier lui-même. disabled grise le champ par les tokens de couleur. readonly reste focalisable et copiable, et masque la croix. loading place un indicateur là où va l'icône de fin, le champ restant utilisable.
API
Props
| Prop | Type | Défaut |
|---|---|---|
size | TextareaSize'sm' | 'md' | 'lg' | 'md' |
| La taille du champ, qui fixe son rembourrage, son échelle typographique et ses icônes. | ||
compact | boolean | false |
| Retire 4px au champ en resserrant son rembourrage, en laissant le nombre de lignes, la typographie et les icônes tels quels. | ||
rows | number | 5 |
Combien de lignes de texte le champ affiche, l'attribut natif rows, qui est ce qui donne sa hauteur au champ. Tout ce qui est sous 1 est ramené à 1, et à 1 le champ fait exactement la hauteur d'un VInput de même taille. | ||
autoGrow | boolean | false |
Laisse le champ grandir à mesure que le texte est saisi, au lieu de défiler dans la hauteur que rows lui donne, qui reste sa hauteur de départ. C'est du CSS pur : là où le navigateur ne le prend pas en charge, le champ se comporte comme une zone de texte ordinaire. | ||
invalid | boolean | false |
| Marque le champ comme invalide quoi qu'en pense le navigateur, la voie pour une règle que seul le serveur peut vérifier. | ||
disabled | boolean | false |
| Rend le champ inutilisable, grisé par les tokens de couleur. | ||
readonly | boolean | false |
| Montre le texte sans permettre de le changer. Le champ peut toujours être focalisé et copié, et le bouton d'effacement est masqué. | ||
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, liée à la zone de texte pour les technologies d'assistance afin d'être 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, champ en lecture seule compris. C'est la même échappatoire que celle de VInput, pour les composants bâtis dessus qui tiennent ailleurs que dans le texte ce qu'il y a à effacer. | ||
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, sous le champ : 12/80 face à une limite, ou simplement 12 sans limite. | ||
v-model | string | '' |
| Le texte du champ, vide au départ. | ||
É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. | |
end | {} |
Du contenu à la fin du champ, qui remplace iconEnd. Il est masqué pendant le chargement, l'indicateur prenant cette place. | |
value-end | {} |
Des contrôles à vous à l'intérieur du champ, placés avant ceux que le champ possède : la croix d'effacement et l'icône qui ouvre le panneau. Ces deux-là sont l'affordance propre du composant, ce qui explique l'absence de slot end ici. | |
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