Card
Una superficie para agrupar contenido, con tres variantes, contenido multimedia de borde a borde, radios concéntricos y enlaces en toda la tarjeta.
pnpm dlx shadcn@latest add https://hextaui.com/r/card.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 class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/card.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Variantes
default se apoya en un anillo muy fino con una sombra suave, outline quita el relleno y la sombra, y muted usa una superficie rellena para secciones más discretas.
Tamaños
size="sm" reduce juntos el espaciado, el radio y el tamaño del título, de modo que una tarjeta compacta siga pareciendo de la misma familia. size="flush" elimina el espaciado interior para diseños personalizados como listas y filas plegables que aportan su propio relleno.
Media
Una imagen, vídeo, picture o proporción de aspecto colocada primero o al final llega de borde a borde. La tarjeta quita el relleno de ese lado y recorta el contenido multimedia a sus esquinas.
Tarjeta clicable
Pon un <CardLink /> en el título para que toda la tarjeta sea un solo enlace. Los botones y otros controles de su interior siguen siendo clicables y conservan su propio foco, como la estrella de aquí.
Variantes clicables
Cada variante recibe su propio feedback al pasar el cursor cuando contiene un enlace, y el anillo de foco envuelve toda la tarjeta cuando el enlace recibe foco con el teclado.
Bordes
Añade border-b al encabezado o border-t al pie y la tarjeta añade el relleno correspondiente en el lado interior.
Anidado
Una tarjeta dentro de CardContent deriva su radio del radio del padre menos el espaciado, de modo que las esquinas permanecen concéntricas.
Contenido largo
Los títulos sin espacios, las URL largas, los emoji y el texto CJK se ajustan dentro de una tarjeta estrecha en lugar de ensancharla.
Semántica
Cada parte admite una prop render, así que una tarjeta puede ser un <article> con un encabezado, header y footer reales.
De derecha a izquierda
La acción pasa al inicio en línea y el pie sigue la dirección de lectura.
Una tarjeta no es enfocable por sí sola. Estas teclas se aplican cuando contiene un <CardLink />.
| Key | Acción |
|---|---|
| Tab | Da foco al enlace de la tarjeta, que dibuja el anillo de foco alrededor de toda la tarjeta, y luego pasa a cada control de su interior. |
| Enter | Sigue al enlace de la tarjeta. |
- El nombre accesible del enlace es su propio texto, así que mantén
<CardLink />dentro del título en lugar de envolver toda la tarjeta en un ancla. - Los controles dentro de una tarjeta clicable se elevan por encima del área de clic del enlace, así que siguen siendo accesibles con el puntero y el teclado.
- Usa
renderen<CardTitle />para dar al título el nivel de encabezado que encaje en tu página.
Cada parte renderiza un <div> por defecto, acepta sus atributos y admite una prop render para cambiar el elemento.
| Prop | Tipo | Predeterminado |
|---|---|---|
variant | "default" | "outline" | "muted" | "default" |
sizeEscala juntos el espaciado, el radio y el tamaño del título. | "default" | "sm" | "flush" | "default" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="card" | Apunta a la tarjeta en CSS. |
data-variant | La variante actual. |
data-size | El tamaño actual. |
data-link | Presente mientras la tarjeta contiene un CardLink. |
--card-spacing | Espaciado interior compartido por todas las partes. Lo define size. |
--card-radius | Radio de las esquinas. Las tarjetas anidadas derivan el suyo del padre. |
--card-title-size | Tamaño de fuente usado por CardTitle. |
| Prop | Tipo | Predeterminado |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="card-header" | Una cuadrícula que coloca CardAction en la esquina superior final. |
| Prop | Tipo | Predeterminado |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="card-title" | Selecciona el título. |
| Prop | Tipo | Predeterminado |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="card-description" | Selecciona la descripción. |
| Prop | Tipo | Predeterminado |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="card-action" | Abarca las filas del título y la descripción, por encima del área de clic de un CardLink. |
| Prop | Tipo | Predeterminado |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="card-content" | Pasa el radio y el espaciado de la tarjeta a las tarjetas anidadas. |
| Prop | Tipo | Predeterminado |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="card-footer" | Selecciona el pie. |
| Prop | Tipo | Predeterminado |
|---|---|---|
href | string | – |
renderPasa aquí el componente de enlace de tu router. | ReactElement | (props, state) => ReactElement | <a> |
| Atributo | Descripción |
|---|---|
data-slot="card-link" | Extiende su área de clic sobre toda la tarjeta. |
- 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.
- 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.
- ItemUna 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.
- KbdTeclas para atajos que muestran los símbolos correctos en cada plataforma, se leen en voz alta correctamente y se hunden como las teclas reales.
Usado en bloques
Bloques que se construyen sobre Card.
- Code BlockBloques de código pensados para respuestas de IA. Resaltado de sintaxis que sigue el ritmo del streaming, copiar, descargar y ajustar líneas, números de línea y líneas resaltadas, diffs con aceptar y rechazar, y una terminal para comandos.
- Diff ReviewRevisa las ediciones de un agente en todos los archivos antes de que se apliquen. Un árbol de archivos con contadores, aceptar o rechazar cada cambio, cada archivo o todo, comentarios en cualquier línea o rango que vuelven al agente, vistas unificada y dividida, resaltado a nivel de palabra, deshacer, ediciones en streaming y un resumen «Editados 4 archivos» para el chat.
- Tool CallsMuestra lo que hace un agente, una línea por paso. Las lecturas y búsquedas se pliegan en un resumen breve, mientras que las ediciones, comandos, aprobaciones y errores permanecen a la vista. Cada paso se abre en una vista real: el archivo, el diff, la terminal o los resultados. Cubre todos los estados de herramienta de AI SDK, incluidas las aprobaciones con un motivo para dar otra indicación.