Hecho sobre el UI SDK 0.1.0-beta.1 de Vercel. Su API puede cambiar.
Rating
Una valoración con estrellas sobre el UI SDK de Vercel, con estrellas enteras o medias, vista previa al pasar el cursor, medias de solo lectura y soporte de formularios.
- Componentes de formulario
- 2 partes
- 10 ejemplos
@tabler/icons-react@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-rating.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @ui-sdk/react@0.1.0-beta.1 @ui-sdk/core@0.1.0-beta.1 @tabler/icons-react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/ui-sdk-rating.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
UI SDK añade un poco de CSS propio en una capa de cascada llamada ui-sdk. Declara esa capa al principio de tu hoja de estilos global, encima del import de Tailwind, para que tus clases ganen.
Rating renderiza su hijo una vez por estrella, así que pon un RatingItem dentro. Cada estrella dibuja una estrella vacía con una llena recortada a --rating-fill, así que las medias estrellas y medias como 4,3 se ven exactas.
Con step={0.5}, cada mitad de estrella es su propio radio, y las flechas avanzan media estrella.
Una valoración de solo lectura es una imagen nombrada por getValueLabel y muestra cualquier puntuación, como una media.
size es sm, default o lg.
Con deselectable, pulsar de nuevo la estrella marcada borra la puntuación.
Pasa value y onValueChange, donde null significa sin puntuación. Un controlador de createRatingController() fija la puntuación desde cualquier lugar.
Con un name, la puntuación se envía con el formulario. required bloquea el envío hasta que haya puntuación, con el mensaje propio del navegador.
Pasa tu propio icono como hijo de RatingItem y cámbialo con data-filled. tone define el color.
Una valoración deshabilitada no recibe foco ni cambia, y no envía nada.
Las estrellas van desde la derecha, y una media estrella se llena desde su borde derecho.
| Key | Acción |
|---|---|
| Tab | Entra en la valoración, en la estrella marcada o en la primera. |
| ←→↑↓ | Pasa a la puntuación siguiente o anterior y la marca, deteniéndose en los extremos salvo que loop esté activo. |
| Space | Marca la estrella enfocada, o la desmarca si ya lo está y la valoración es deseleccionable. |
| Enter | Envía el formulario. |
Una valoración es un grupo de radios con una sola parada de tabulación. Cada estrella tiene un radio por puntuación que puede elegir, nombrado por getValueLabel, así que nombra las puntuaciones con palabras que la gente usa, como “Genial, 5 de 5”. Los iconos de estrella se ocultan a los lectores de pantalla. Una valoración de solo lectura es, en cambio, una única imagen.
Las estrellas solo crecen al pasar el cursor y se encogen al pulsar cuando se permite el movimiento. En pantallas táctiles cada estrella tiene relleno extra, y en modo de colores forzados las estrellas llenas usan el color del texto y las vacías el gris del sistema.
Cada parte envuelve la parte de UI SDK del mismo nombre y acepta todas sus props, incluidas render y un className que puede ser una función del estado de la parte.
| Prop | Tipo | Predeterminado |
|---|---|---|
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 |
getValueLabelNombra cada puntuación para su radio y para una valoración de solo lectura. | (value: number, max: number) => string | – |
controllerDe createRatingController(). | RatingController | – |
| Atributo | Descripción |
|---|---|
data-slot="rating" | Selecciona la valoración en CSS. |
data-size | El tamaño: sm, default o lg. |
data-tone | El tono: default, neutral o destructive. |
data-readonly | Presente cuando es de solo lectura. |
data-disabled | Presente cuando está deshabilitado. |
--rating-color | El color de las estrellas llenas, definido por tone. |
| Prop | Tipo | Predeterminado |
|---|---|---|
childrenEl icono de la estrella. Por defecto, una estrella de Tabler que se llena según --rating-fill. | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descripción |
|---|---|
data-slot="rating-item" | Selecciona una estrella en CSS. |
data-filled | Presente en las estrellas que la puntuación mostrada cubre por completo. |
data-partial | Presente en la estrella que la puntuación mostrada cubre en parte. |
data-checked | Presente en la estrella donde termina la puntuación. |
data-highlighted | Presente en las estrellas hasta la puntuación que previsualiza el puntero. |
--rating-fill | Cuánto de la estrella cubre la puntuación mostrada, de 0 a 1. |
- CalendarUna cuadrícula de fechas para selección única, de rango y múltiple, con meses deslizantes, vistas previas de rango y días de tamaño táctil.
- CheckboxUna casilla de verificación cuya marca se dibuja, con padres indeterminados, grupos y etiquetas que comparten su hover.
- ComboboxUn select filtrable con chips, grupos y resultados asíncronos, en un popup que cambia de tamaño mientras escribes.
- Date pickerUn botón que abre un calendario en un popover, o en una hoja inferior en móviles, para fechas únicas y rangos.
- FieldEtiquetas, descripciones y errores conectados a su control, con estados de validación y diseños para formularios.
- InputUn campo de texto con tres tamaños, estados inválido y de solo lectura, estilos de validación nativos y una fuente táctil de 16px para que los móviles nunca hagan zoom.