Gebaut auf Vercels UI SDK 0.1.0-beta.1. Die API kann sich ändern.
Rating
Eine Sternebewertung auf Vercels UI SDK mit ganzen oder halben Sternen, Hover-Vorschau, schreibgeschützten Durchschnitten und Formularunterstützung.
- Formularkomponenten
- 2 Teilen
- 10 Beispielen
@tabler/icons-react@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-rating.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @ui-sdk/react@0.1.0-beta.1 @ui-sdk/core@0.1.0-beta.1 @tabler/icons-react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/ui-sdk-rating.tsx Passe die Importpfade an dein Projekt-Setup an.
UI SDK bringt etwas eigenes CSS in einem Cascade Layer namens ui-sdk mit. Deklariere diesen Layer ganz oben im globalen Stylesheet, über dem Tailwind-Import, damit deine Klassen gewinnen.
Rating rendert sein Kind einmal pro Stern, also setze ein RatingItem hinein. Jeder Stern zeichnet einen leeren Stern mit einem gefüllten, der auf --rating-fill zugeschnitten ist, sodass halbe Sterne und Durchschnitte wie 4,3 exakt erscheinen.
Mit step={0.5} ist jede Sternhälfte ein eigenes Radio, und die Pfeiltasten bewegen sich um einen halben Stern.
Eine schreibgeschützte Bewertung ist ein Bild, benannt durch getValueLabel, und zeigt jede Punktzahl, etwa einen Durchschnitt.
size ist sm, default oder lg.
Mit deselectable löscht ein erneuter Druck auf den gewählten Stern die Punktzahl.
Übergib value und onValueChange, wobei null „noch keine Punktzahl“ bedeutet. Ein Controller aus createRatingController() setzt die Punktzahl von überall.
Mit einem name wird die Punktzahl mit dem Formular gesendet. required blockiert das Absenden, bis es eine Punktzahl gibt, mit der Meldung des Browsers.
Übergib dein eigenes Symbol als Kind von RatingItem und wechsle es mit data-filled. tone legt die Farbe fest.
Eine deaktivierte Bewertung lässt sich weder fokussieren noch ändern und sendet nichts.
Die Sterne beginnen rechts, und ein halber Stern füllt sich von seinem rechten Rand.
| Taste | Aktion |
|---|---|
| Tab | Springt in die Bewertung, auf den gewählten oder den ersten Stern. |
| ←→↑↓ | Wechselt zur nächsten oder vorherigen Punktzahl und wählt sie, an den Enden ist Schluss, außer loop ist gesetzt. |
| Space | Wählt den fokussierten Stern, oder hebt die Auswahl auf, wenn er gewählt ist und die Bewertung abwählbar ist. |
| Enter | Sendet das Formular ab. |
Eine Bewertung ist eine Radio-Gruppe mit einem Tab-Stopp. Jeder Stern enthält ein Radio pro wählbarer Punktzahl, benannt durch getValueLabel. Benenne Punktzahlen also mit Worten, die Menschen benutzen, etwa „Super, 5 von 5“. Die Sternsymbole sind für Screenreader verborgen. Eine schreibgeschützte Bewertung ist stattdessen ein einzelnes Bild.
Sterne wachsen beim Hovern und schrumpfen beim Drücken nur, wenn Bewegung erlaubt ist. Auf Touchscreens bekommt jeder Stern zusätzlichen Innenabstand, und im Modus „Erzwungene Farben“ nutzen gefüllte Sterne die Textfarbe und leere das Systemgrau.
Jeder Teil umhüllt den gleichnamigen UI-SDK-Teil und nimmt alle seine Props an, auch render und einen className, der eine Funktion des Zustands sein kann.
| Prop | Typ | Standard |
|---|---|---|
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 |
getValueLabelBenennt jede Punktzahl für ihr Radio und für eine schreibgeschützte Bewertung. | (value: number, max: number) => string | – |
controllerAus createRatingController(). | RatingController | – |
| Attribut | Beschreibung |
|---|---|
data-slot="rating" | Spricht die Bewertung in CSS an. |
data-size | Die Größe: sm, default oder lg. |
data-tone | Der Ton: default, neutral oder destructive. |
data-readonly | Vorhanden, wenn schreibgeschützt. |
data-disabled | Vorhanden, wenn deaktiviert. |
--rating-color | Die Farbe gefüllter Sterne, gesetzt durch tone. |
| Prop | Typ | Standard |
|---|---|---|
childrenDas Symbol des Sterns. Standard ist ein Tabler-Stern, der sich nach --rating-fill füllt. | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Beschreibung |
|---|---|
data-slot="rating-item" | Spricht einen Stern in CSS an. |
data-filled | Vorhanden auf Sternen, die die angezeigte Punktzahl ganz abdeckt. |
data-partial | Vorhanden auf dem Stern, den die angezeigte Punktzahl teilweise abdeckt. |
data-checked | Vorhanden auf dem Stern, auf dem die Punktzahl endet. |
data-highlighted | Vorhanden auf den Sternen bis zur Punktzahl, die ein Zeiger in der Vorschau zeigt. |
--rating-fill | Wie viel des Sterns die angezeigte Punktzahl abdeckt, von 0 bis 1. |
- CalendarEin Datumsraster für Einzel-, Bereichs- und Mehrfachauswahl, mit gleitenden Monaten, Bereichsvorschau und Tagen in Touch-Größe.
- CheckboxEine Checkbox, deren Häkchen sich einzeichnet, mit unbestimmten übergeordneten Elementen, Gruppen und Labels, die ihren Hover teilen.
- ComboboxEin filterbares Select mit Chips, Gruppen und asynchronen Ergebnissen, in einem Popup, das sich beim Tippen anpasst.
- Date pickerEin Button, der einen Kalender in einem Popover öffnet, auf Smartphones als Bottom Sheet, für einzelne Daten und Zeiträume.
- FieldLabels, Beschreibungen und Fehler, mit ihrem Steuerelement verbunden, mit Validierungszuständen und Layouts für Formulare.
- InputEin Texteingabefeld mit drei Größen, ungültigen und schreibgeschützten Zuständen, nativem Validierungsstyling und einer 16-px-Schrift für Touch, damit Smartphones nie hineinzoomen.