Item
Una fila de contenido multimedia, texto y acciones para listas, ajustes y selectores, con una superficie agrupada y un resaltado al pasar el cursor que se desliza entre filas.
pnpm dlx shadcn@latest add https://hextaui.com/r/item.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 @base-ui/react @tabler/icons-react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/item.tsx lib/motion.ts Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Dale al media de tipo icono un tone para mosaicos de colores como los de Ajustes de iOS, o déjalo sin definir para un mosaico neutro. Un elemento se vuelve interactivo cuando se renderiza como enlace, botón o etiqueta mediante render. Solo entonces recibe estilos de hover, pulsación y foco, así que las filas estáticas nunca fingen ser clicables.
Agrupado
variant="grouped" coloca los elementos en una sola superficie. Los separadores se dibujan por ti y se sangran hasta el texto, la primera y la última fila se quedan con las esquinas exteriores, y los separadores contiguos a una fila con hover o foco se desvanecen.
Resaltado al pasar el cursor
Los elementos interactivos de un grupo comparten un único resaltado que se desliza hasta la fila bajo el puntero y adopta sus esquinas. Solo sigue a un ratón o lápiz, nunca al táctil, y se desactiva con highlight={false}. Las esquinas del media de imagen son concéntricas con la fila.
Seleccionable
Renderiza un elemento como <label> alrededor de un Checkbox y toda la fila lo activa. Un control marcado, o aria-selected, aria-checked o aria-pressed en el elemento, marca la fila como seleccionada.
Variantes
default no tiene superficie, outline dibuja una línea fina y muted se apoya sobre un relleno suave.
Tamaños
size escala juntos el relleno, el espacio, el radio de las esquinas y el contenido multimedia. Un grupo reduce su espacio para acompañarlo.
Avatar
El <ItemMedia /> por defecto solo centra su contenido, así que un Avatar o AvatarGroup encaja directamente.
Personas
Una lista agrupada de personas. Los separadores empiezan donde empieza el texto, sea lo que sea que haya en el slot de media, así que se alinean bajo los nombres.
Acciones
<ItemActions /> contiene botones al final de la fila. Mantén el propio elemento estático cuando contenga botones, para que nunca haya un botón dentro de un enlace.
Encabezado y pie
<ItemHeader /> y <ItemFooter /> ocupan una fila completa encima y debajo del contenido.
Separator
En un grupo por defecto, coloca tú mismo un <ItemSeparator /> entre los elementos.
Contenido largo
Los títulos se limitan a una línea y las descripciones a dos. Las cadenas sin espacios se ajustan en lugar de ensanchar la fila.
De derecha a izquierda
El relleno, los márgenes de los separadores y el chevron siguen la dirección de lectura.
| Key | Acción |
|---|---|
| Tab | Pasa al siguiente elemento interactivo, en el orden del código fuente como cualquier enlace o botón. |
| Enter | Sigue un elemento de enlace o pulsa un elemento de botón. |
| Space | Pulsa un elemento de botón o activa un elemento de etiqueta. |
- Un grupo es una lista cuando sus elementos son filas simples. Los elementos renderizados como enlaces o botones conservan su propio rol, y el grupo elimina el rol de lista para que el marcado siga siendo válido. Renderiza el grupo como
<ul>y los elementos como<li>que envuelvan enlaces si quieres ambos. <ItemMedia variant="icon" />y el chevron están ocultos para los lectores de pantalla. Dale a las imágenes un texto alternativo real cuando tengan significado.- El resaltado es decorativo. El foco del teclado muestra el anillo de foco, y el resaltado nunca mueve el foco ni cambia el orden de tabulación.
Cada parte renderiza un <div> por defecto y acepta render y los atributos de su elemento.
| Prop | Tipo | Predeterminado |
|---|---|---|
variant | "default" | "outline" | "muted" | "default" |
size | "default" | "sm" | "xs" | "default" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="item" | Apunta a los elementos en CSS. |
data-variant | La variante actual. |
data-size | El tamaño actual. |
data-interactive | Presente cuando el elemento se renderiza como enlace, botón o etiqueta. |
data-highlighted | Presente mientras el resaltado del grupo está sobre él. |
--item-radius | Radio de las esquinas. Las esquinas del elemento multimedia derivan de él. Lo define size. |
--item-px / --item-py / --item-gap | Relleno y gap. Lo define size. |
--item-media-size | Tamaño de los iconos e imágenes. Se define con size. |
--item-inset | Dónde empieza un separador agrupado. Se mide para alinearse con ItemContent, sea cual sea el contenido multimedia. |
| Prop | Tipo | Predeterminado |
|---|---|---|
variantgrouped coloca los elementos en una sola superficie con separadores automáticos. | "default" | "grouped" | "default" |
highlightMuestra un único resaltado que se desliza entre los elementos interactivos al pasar el cursor. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="item-group" | Apunta a los grupos en CSS. |
data-variant | La variante actual. |
data-highlight | Presente cuando el resaltado al pasar el cursor está activado. |
--item-group-radius | Radio de las esquinas de una superficie agrupada. El primer y el último elemento lo siguen. |
data-slot="item-highlight" | El elemento de resaltado, con data-visible y data-pressed. |
| Prop | Tipo | Predeterminado |
|---|---|---|
varianticon coloca el icono en un recuadro y lo oculta a los lectores de pantalla. image recorta a un cuadrado. Ambos tienen esquinas concéntricas con el elemento. | "default" | "icon" | "image" | "default" |
toneCon la variante icon, rellena el recuadro con un color sólido y vuelve blanco el icono, como en Ajustes de iOS. Déjalo sin definir para un recuadro neutro. | "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "sky" | "blue" | "indigo" | "purple" | "pink" | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="item-media" | Apunta al contenido multimedia en CSS. |
data-variant | La variante actual. |
data-tone | El color del recuadro, cuando se define tone en un icono. |
--item-media-tone | El color del recuadro. Asígnale cualquier color para un tono personalizado. |
| Atributo | Descripción |
|---|---|
data-slot="item-content" | Crece para llenar la fila. Un segundo bloque de contenido se ajusta a su texto. |
| Atributo | Descripción |
|---|---|
data-slot="item-title" | Limitado a una línea. |
| Prop | Tipo | Predeterminado |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <p> |
| Atributo | Descripción |
|---|---|
data-slot="item-description" | Limitado a dos líneas. |
| Atributo | Descripción |
|---|---|
data-slot="item-actions" | Selecciona las acciones en CSS. |
| Atributo | Descripción |
|---|---|
data-slot="item-header" | Una fila de ancho completo sobre el contenido. |
data-slot="item-footer" | Una fila de ancho completo bajo el contenido. |
Un chevron final que se desplaza hacia la dirección de lectura cuando se pasa el cursor sobre su elemento. Acepta todas las props de iconos de Tabler.
| Atributo | Descripción |
|---|---|
data-slot="item-chevron" | Apunta al chevron en CSS. |
| Atributo | Descripción |
|---|---|
data-slot="item-separator" | Una línea fina con role="separator". |
- MotionLas curvas de easing, duraciones y la comprobación de movimiento reducido con las que se anima cada componente, además de hooks para transformaciones de tamaño y resaltados deslizantes.
- AvatarFotos de usuario con iniciales como alternativa, insignias de estado y grupos apilados que se colapsan en un contador.
- BadgeEtiquetas de estado con puntos de color, tags eliminables que se deslizan al cerrarse y contadores que ruedan hasta su nuevo valor.
- CardUna superficie para agrupar contenido, con tres variantes, contenido multimedia de borde a borde, radios concéntricos y enlaces en toda la tarjeta.
- ChartGráficos de Recharts con colores del tema, un tooltip y una leyenda que leen las etiquetas de una sola configuración, y navegación con teclado con un anillo de foco visible.
- Data tableUna tabla para datos reales, con ordenación, búsqueda, selección de filas, columnas fijadas, un encabezado fijo y paginación.