Construit sur l’UI SDK 0.1.0-beta.2 de Vercel. Son API peut changer.
Timeline
Une frise chronologique sur l’UI SDK de Vercel pour l’activité, le suivi de commande et les étapes d’un agent, verticale ou horizontale, avec statuts, horodatages, icônes et mode flux.
- Composants d’affichage de données
- 7 parties
- 8 exemples
@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-timeline.jsonAjoute le composant, les tokens de thème HextaUI et les composants HextaUI dont il dépend.
Ajoutez les tokens de thème à votre CSS global, si ce n’est pas déjà fait.
Installez les dépendances.
pnpm add @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/ui-sdk-timeline.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
UI SDK ajoute un peu de CSS dans une couche de cascade nommée ui-sdk. Déclarez cette couche en haut de votre feuille de style globale, au-dessus de l’import Tailwind, pour que vos classes l’emportent.
Une frise liste ce qui s’est passé, ou se passera, comme un flux d’activité, le suivi d’une commande ou les étapes d’un agent. Pour les lecteurs d’écran, c’est une liste avec un seul arrêt de tabulation, et les flèches passent d’un événement à l’autre. Passez dateTime à TimelineTime pour que la date soit lisible par les machines tout en gardant un texte convivial. UI SDK la marque comme expérimentale en 0.1.0-beta.2.
Chaque partie d’un élément est facultative. Le marqueur a sa propre colonne et le connecteur va de lui à l’événement suivant, masqué après le dernier. Tout autre contenu placé dans un élément, comme un bouton ou un repliable, s’aligne sur le titre.
Donnez à chaque élément un status complete, current ou upcoming. L’événement en cours reçoit aria-current="step" et l’arrêt de tabulation, et un contrôleur cible un événement par sa value. Indiquez aussi le statut dans le titre, car le marqueur ne fait que l’afficher.
Une icône dans TimelineMarker le transforme en petit cercle. Placez un indicateur de chargement dans l’étape en cours pendant qu’un agent travaille, et une durée comme PT5S dans dateTime.
La variant du marqueur vaut success, warning, destructive ou info, pour un point vide ou une icône.
orientation="horizontal" aligne les événements en rangée, comme une feuille de route. Gauche et Droite passent de l’un à l’autre, et loop={false} s’arrête aux extrémités.
Les liens et boutons d’un événement restent dans l’ordre de tabulation. Tab passe de l’événement à eux, et les flèches passent toujours d’un événement à l’autre.
feed transforme la liste en flux d’articles pour les frises qui s’allongent, et Page suiv. et Page préc. passent de l’un à l’autre. Activez busy pendant le chargement.
Les marqueurs et la ligne passent à droite.
| Touche | Action |
|---|---|
| ↓↑ | Passent d’un événement à l’autre dans une frise verticale. |
| →← | Passent d’un événement à l’autre dans une frise horizontale. Elles s’inversent en écriture de droite à gauche. |
| HomeEnd | Ciblent le premier ou le dernier événement. |
| PageDownPageUp | Dans un flux, ciblent l’article suivant ou précédent, depuis n’importe où à l’intérieur d’un article. |
| Tab | Entre sur l’événement en cours, sinon le premier, puis passe aux liens et boutons qu’il contient. |
Une frise est une liste nommée avec aria-label, ou un flux d’articles avec leurs positions. Chaque événement est nommé par son titre et décrit par son heure et sa description, et les marqueurs et connecteurs sont masqués aux lecteurs d’écran.
L’événement ciblé affiche un anneau avec de l’espace autour. Les couleurs du marqueur ne passent en fondu d’un statut à l’autre que si les animations sont autorisées, et en couleurs forcées les points et lignes prennent la couleur du texte.
Chaque partie enveloppe la partie UI SDK du même nom et accepte toutes ses props, y compris render et un className qui peut être une fonction de son état.
| Prop | Type | Par défaut |
|---|---|---|
orientation | "vertical" | "horizontal" | "vertical" |
loop | boolean | true |
feed | boolean | false |
busyPose aria-busy sur un flux pendant son chargement. | boolean | false |
controllerIssu de createTimelineController(). | TimelineController | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Description |
|---|---|
data-slot="timeline" | Pour cibler la frise en CSS. |
data-orientation | vertical ou horizontal. |
data-busy | Présent tant qu’un flux est occupé. |
--timeline-count | Le nombre d’événements dans la page. |
| Prop | Type | Par défaut |
|---|---|---|
valueNomme l’événement pour le focus() du contrôleur. | string | – |
status | "complete" | "current" | "upcoming" | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Description |
|---|---|
data-slot="timeline-item" | Pour cibler un événement en CSS. |
data-complete | Présent quand le statut de l’événement est complete. |
data-current | Présent quand le statut de l’événement est current. |
data-upcoming | Présent quand le statut de l’événement est upcoming. |
data-first | Présent sur le premier événement une fois dans la page. |
data-last | Présent sur le dernier événement une fois dans la page. |
--timeline-index | La place de l’événement à partir de 0. |
| Prop | Type | Par défaut |
|---|---|---|
variant | "default" | "success" | "warning" | "destructive" | "info" | "default" |
childrenUne icône ou une image. Vide, il dessine un point. | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Description |
|---|---|
data-slot="timeline-marker" | Pour cibler le marqueur en CSS. |
data-variant | La variante du marqueur. |
data-complete | Présent quand le statut de l’événement est complete. |
data-current | Présent quand le statut de l’événement est current. |
data-upcoming | Présent quand le statut de l’événement est upcoming. |
La ligne du marqueur à l’événement suivant. Elle est pleine sous un événement terminé et masquée après le dernier.
Nomme son événement. Affichez-le comme titre avec render={<h3 />} pour qu’on puisse passer d’un événement à l’autre par les titres.
| Prop | Type | Par défaut |
|---|---|---|
dateTimeUne date, heure ou durée lisible par les machines. Elle décrit l’événement. | string | – |
Plus de détails sur son événement. Il décrit l’événement.
- AvatarDes photos d’utilisateurs avec initiales en repli, badges de statut et groupes empilés qui se réduisent en compteur.
- BadgeDes libellés de statut avec pastilles colorées, des tags amovibles qui se referment en glissant et des compteurs qui défilent vers leur nouvelle valeur.
- CardUne surface pour regrouper du contenu, avec trois variantes, médias bord à bord, rayons concentriques et liens sur toute la carte.
- ChartDes graphiques Recharts aux couleurs du thème, avec une infobulle et une légende qui lisent leurs libellés depuis une seule config, et une navigation au clavier avec anneau de focus visible.
- Data tableUn tableau pour de vraies données, avec tri, recherche, sélection de lignes, colonnes épinglées, en-tête fixe et pagination.
- ItemUne ligne de média, de texte et d’actions pour les listes, réglages et sélecteurs, avec une surface groupée et une surbrillance de survol qui glisse d’une ligne à l’autre.