Champ d'heure
Un champ d'heure sous l'une de trois formes : saisi avec un masque, rempli depuis une horloge, ou une liste d'heures à intervalle fixe. La valeur est toujours une chaîne HH:mm sur 24 heures.
Utilisation
Exemples
Libellé, indication et icône
label et hint se comportent comme sur n'importe quel champ. pickerIcon change le glyphe qui ouvre l'horloge, iconStart pose une icône au début du champ, et loading affiche un indicateur à la place de l'icône d'horloge. pickerIconLabel, clearLabel, loadingText et iconStartLabel renomment ce que chacun annonce.
Type it or pick it from the clock
The glyph that opens the clock is yours to choose
An icon at the start, a spinner at the end while something loads
Tailles
size définit la hauteur du champ à 32, 40 ou 48 pixels, et compact lui retire 4px. L'horloge garde ses propres mesures.
Modes
mode choisit la forme du champ : input le masque pour n'y saisir que des chiffres, l'horloge devenant alors optionnelle via showPicker ; picker fait de l'horloge la seule entrée, qui y est donc imposée ; list abandonne l'horloge au profit d'une liste d'heures que l'on filtre.
No icon, no panel: the mask is the whole control
showPicker adds the icon and the panel it opens
Nothing can be typed, so the clock is the only way in
Every half hour, found by typing rather than by scrolling
Pas
minuteStep est ce que propose le cadran, le pas des flèches du clavier et la découpe de la liste. Il laisse le masque tranquille, et mérite d'être posé sur une liste avant toute chose : la minute par défaut fait 1440 lignes.
The face offers four minutes an hour, and the arrow keys move by the same step
The step is what the rows are cut at: 48 of them here rather than 1440
The mask still takes any time; the step drives the clock and the arrow keys
Ce que l’on peut choisir
min, max, allowedHours et allowedMinutes restreignent ce qui peut être choisi. La liste et l'horloge écartent ce qui ne peut pas l'être ; le champ saisi valide l'entrée et se déclare invalide par la validité du contrôle.
Type 08:00 and leave the field: the value stands and the field turns invalid
The rows outside the bounds are not offered at all
The face prints only the hours it can take
Effaçable
clearable ajoute une croix qui vide la valeur, à gauche de l'icône d'horloge et non à sa place. La forme liste prend sa propre croix du combobox sur lequel elle est bâtie, formulation comprise.
The cross sits to the left of the clock icon, never in its place
Emptying the field is then the reader's own business
Here the cross is the combobox's own, chevron included
États
invalid sert à une règle que le navigateur ne peut pas vérifier lui-même. disabled grise le champ et empêche l'ouverture du panneau. readonly montre la valeur figée : rien ne se saisit, aucune horloge n'est rendue et le bouton AM/PM disparaît avec elle, tandis que le champ garde son contraste et prend le focus.
For a rule the browser cannot check by itself
Greyed through the colour tokens, and the panel can no longer be opened
No typing, no clock, no clear cross
Horloge de douze heures
La valeur est une chaîne sur 24 heures quoi qu'il y ait à l'écran. Là où se choisit la moitié de la journée dépend de la forme : un bouton dans le champ saisi, la paire de l'horloge à côté de ses chiffres, et rien dans une liste, chaque ligne énonçant la sienne.
The mask says nothing about the half of the day, so a button in the field does
Here the pair belongs to the clock, beside its two large numerals
Every row spells its own half of the day, so neither control is needed
Localisation
locale décide de l'horloge, du masque et de la façon d'écrire une heure, et l'emporte sur la locale globale. format passe au-dessus des deux, pour un champ qui doit se lire d'une seule façon quelle que soit la langue.
format overrides what the tag would have chosen
Positionnement
placement nomme la direction d'ouverture préférée du panneau, au-dessus ou en dessous du champ.
API
Props
| Prop | Type | Défaut |
|---|---|---|
format | TimePickerFormat'12h' | '24h' | aucune |
| Si les heures sont montrées sur une horloge de 12 ou de 24 heures. Omise, la langue du lecteur décide, ce qui est presque toujours ce que l'on veut. | ||
mode | TimeInputMode'picker' | 'input' | 'list' | 'input' |
La forme que prend le champ : saisissable, en mode picker où l'horloge est la seule voie d'entrée et se trouve donc forcée, ou une LISTE d'heures à intervalle fixe, où une horloge n'aurait aucun sens. C'est une autre question que readonly, qui gèle le champ par toutes les voies à la fois. | ||
showPicker | boolean | false |
Propose le sélecteur à côté d'un champ saisissable : une icône en fin de champ, et un panneau qui s'ouvre au focus. L'horloge suit ce qui est saisi et, sans valeur, s'ouvre vide. Cela ne signifie rien en mode picker, où l'horloge est imposée, ni en mode list, où la liste tient lieu de panneau. | ||
minuteStep | number | 1 |
| L'intervalle entre deux heures qui peuvent être choisies. Il s'applique au sélecteur, aux flèches et aux lignes de la liste. | ||
min | string | aucune |
| L'heure la plus tôt que l'on puisse choisir, incluse, en chaîne canonique sur 24 heures. Le sélecteur et la liste retirent tous deux ce qu'elle exclut, et une heure saisie en dehors rend le champ invalide. | ||
max | string | aucune |
| L'heure la plus tard que l'on puisse choisir, incluse, écrite comme min. | ||
allowedHours | TimePickerAllowed | aucune |
| Les heures que l'on peut choisir : leur liste, ou une règle qui répond pour l'une d'elles. L'heure passée à une règle est toujours celle sur 24 heures, quelle que soit l'horloge affichée. | ||
allowedMinutes | TimePickerAllowed | aucune |
| Les minutes que l'on peut choisir : leur liste, ou une règle qui répond pour l'une d'elles. | ||
locale | string | aucune |
| Une locale BCP 47, qui décide de l'horloge et de la façon dont une heure est écrite. Elle l'emporte sur la locale globale du design system et retombe dessus. | ||
label | string | aucune |
| Le libellé au-dessus du champ. | ||
hint | string | aucune |
| Une ligne d'aide sous le champ. | ||
placeholder | string | aucune |
| Ce que dit le champ quand il est vide. | ||
size | TimeInputSize'sm' | 'md' | 'lg' | 'md' |
| La hauteur du champ : 32, 40 ou 48 pixels. | ||
compact | boolean | false |
| Retire 4px à la hauteur. | ||
disabled | boolean | false |
| Rend le champ inutilisable, grisé par les tokens de couleur. | ||
readonly | boolean | false |
Montre l'heure sans permettre de la changer : rien ne se tape, il n'y a ni horloge ni croix de vidage, et les attributs qui annonçaient un panneau disparaissent avec eux. Le champ garde le focus et reste copiable, ce qui le distingue de disabled. | ||
invalid | boolean | false |
| Marque le champ comme invalide, pour une règle à vous. | ||
iconStart | IconSource | aucune |
Une icône dans le champ, au début. Décorative jusqu'à ce qu'un écouteur @click:icon-start en fasse un bouton. | ||
iconStartLabel | string | aucune |
| Ce que fait l'icône de début, en mots, une fois cliquable. | ||
pickerIconLabel | string | aucune |
| Ce que fait l'icône de fin, en mots. Elle nomme le bouton qui ouvre l'horloge, et sa valeur par défaut vient du dictionnaire du design system. | ||
loading | boolean | false |
| Affiche une roue à la place de l'icône de l'horloge. Elle dit que quelque chose se charge et ne change rien d'autre : le champ reste saisissable et le panneau s'ouvre toujours. | ||
loadingText | string | aucune |
| Ce que les lecteurs d'écran annoncent pendant que la roue tourne. Sa valeur par défaut vient du dictionnaire du design system. | ||
clearable | boolean | false |
| Propose une croix qui vide la valeur, affichée avant l'icône de fin. | ||
clearLabel | string | aucune |
| Ce que fait cette croix, en mots. Sa valeur par défaut vient du dictionnaire du design system. | ||
pickerIcon | IconSource | schedule |
| L'icône qui ouvre l'horloge, en fin de champ. Sans effet sur la forme liste, dont le chevron suit la convention de la liste déroulante. La croix d'effacement apparaît à sa gauche plutôt qu'à sa place. | ||
placement | TimeInputPlacement'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end' | 'bottom-start' |
| Où le panneau s'ouvre par rapport au champ. | ||
v-model | string | null | null |
| L'heure, toujours en chaîne sur 24 heures quelle que soit l'horloge affichée : vous n'avez donc jamais à savoir laquelle la langue du lecteur utilise. | ||
Événements
| Événement | Type |
|---|---|
click:icon-start | [event: MouseEvent] |
L'icône de début a été cliquée. Attacher cet écouteur est ce qui en fait un vrai bouton, qui demande alors iconStartLabel. | |
clear | [] |
| La croix de vidage a vidé le champ. La valeur est déjà remise à zéro. | |
Slots
| Slot | Type |
|---|---|
start | {} |
Du contenu au début du champ, rendu après iconStart plutôt qu'à sa 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. | |
footer | TimeInputFooterSlotProps |
La bande au pied de l'horloge, qui REMPLACE les boutons Annuler et OK au lieu de s'y ajouter. Elle reçoit les deux actions, et c'est ce qui la rend utilisable : l'horloge écrit un brouillon que seul confirm valide, donc un pied à vous sans lui laisserait la valeur inchangeable depuis le panneau. Elle reçoit aussi cancel, et close, la même fonction sous le nom que donne le pied de VDateInput. Elle n'est pas rendue en mode liste, qui n'a pas de panneau propre. | |
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
export type TimePickerAllowed = number[] | ((value: number) => boolean)