Construit sur l’UI SDK 0.1.0-beta.1 de Vercel. Son API peut changer.
Rating
Une notation par étoiles sur l’UI SDK de Vercel, avec étoiles entières ou demi-étoiles, aperçu au survol, moyennes en lecture seule et prise en charge des formulaires.
- Composants de formulaire
- 2 parties
- 10 exemples
@tabler/icons-react@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-rating.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.1 @ui-sdk/core@0.1.0-beta.1 @tabler/icons-react class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/ui-sdk-rating.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.
Rating affiche son enfant une fois par étoile, mettez donc un RatingItem à l’intérieur. Chaque étoile dessine une étoile vide avec une pleine découpée selon --rating-fill, pour afficher exactement les demi-étoiles et les moyennes comme 4,3.
Avec step={0.5}, chaque moitié d’étoile est son propre radio, et les flèches avancent d’une demi-étoile.
Une notation en lecture seule est une image nommée par getValueLabel, et elle affiche n’importe quelle note, comme une moyenne.
size vaut sm, default ou lg.
Avec deselectable, appuyer à nouveau sur l’étoile cochée efface la note.
Passez value et onValueChange, où null signifie pas encore de note. Un contrôleur issu de createRatingController() définit la note depuis n’importe où.
Avec un name, la note est envoyée avec le formulaire. required bloque l’envoi tant qu’il n’y a pas de note, avec le message du navigateur.
Passez votre propre icône comme enfant de RatingItem et changez-la avec data-filled. tone règle la couleur.
Une notation désactivée ne prend pas le focus, ne change pas et n’envoie rien.
Les étoiles partent de la droite, et une demi-étoile se remplit depuis son bord droit.
| Touche | Action |
|---|---|
| Tab | Entre dans la notation, sur l’étoile cochée ou la première. |
| ←→↑↓ | Passe à la note suivante ou précédente et la coche, en s’arrêtant aux extrémités sauf si loop est activé. |
| Space | Coche l’étoile ciblée, ou la décoche si elle l’est déjà et que la notation est désélectionnable. |
| Enter | Envoie le formulaire. |
Une notation est un groupe de radios avec un seul arrêt de tabulation. Chaque étoile contient un radio par note possible, nommé par getValueLabel : nommez donc les notes avec des mots courants, comme « Super, 5 sur 5 ». Les icônes d’étoile sont masquées aux lecteurs d’écran. Une notation en lecture seule est une seule image.
Les étoiles ne grossissent au survol et ne rétrécissent à l’appui que si le mouvement est autorisé. Sur écran tactile, chaque étoile reçoit un espacement supplémentaire, et en mode couleurs forcées les étoiles pleines prennent la couleur du texte et les vides le gris du système.
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 |
|---|---|---|
value | number | null | – |
defaultValue | number | null | – |
onValueChange | (value: number | null, details) => void | – |
max | number | 5 |
step | number | 1 |
size | "sm" | "default" | "lg" | "default" |
tone | "default" | "neutral" | "destructive" | "default" |
deselectable | boolean | false |
readOnly | boolean | false |
disabled | boolean | false |
required | boolean | false |
name | string | – |
loop | boolean | false |
getValueLabelNomme chaque note pour son radio, et une notation en lecture seule. | (value: number, max: number) => string | – |
controllerIssu de createRatingController(). | RatingController | – |
| Attribut | Description |
|---|---|
data-slot="rating" | Cible la notation en CSS. |
data-size | La taille : sm, default ou lg. |
data-tone | Le ton : default, neutral ou destructive. |
data-readonly | Présent en lecture seule. |
data-disabled | Présent lorsque l’élément est désactivé. |
--rating-color | La couleur des étoiles pleines, réglée par tone. |
| Prop | Type | Par défaut |
|---|---|---|
childrenL’icône de l’étoile. Par défaut, une étoile Tabler remplie selon --rating-fill. | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Description |
|---|---|
data-slot="rating-item" | Cible une étoile en CSS. |
data-filled | Présent sur les étoiles entièrement couvertes par la note affichée. |
data-partial | Présent sur l’étoile partiellement couverte par la note affichée. |
data-checked | Présent sur l’étoile où se termine la note. |
data-highlighted | Présent sur les étoiles jusqu’à la note prévisualisée par le pointeur. |
--rating-fill | La part de l’étoile couverte par la note affichée, de 0 à 1. |
- CalendarUne grille de dates pour la sélection simple, de plage et multiple, avec des mois qui défilent, des aperçus de plage et des jours à taille tactile.
- CheckboxUne case à cocher dont la coche se dessine, avec des parents indéterminés, des groupes et des libellés qui partagent son survol.
- ComboboxUn select filtrable avec chips, groupes et résultats asynchrones, dans un popup qui se redimensionne pendant la saisie.
- Date pickerUn bouton qui ouvre un calendrier dans un popover, ou une bottom sheet sur mobile, pour des dates simples et des plages.
- FieldDes libellés, descriptions et erreurs reliés à leur contrôle, avec états de validation et mises en page pour les formulaires.
- InputUn champ de saisie texte en trois tailles, avec états invalide et lecture seule, style de validation natif et police tactile de 16px pour que les téléphones ne zooment jamais.