Message
Una fila de mensaje de chat con avatar, nombre, burbujas y estado, donde los mensajes nuevos suben desde el lado del remitente.
pnpm dlx shadcn@latest add https://hextaui.com/r/message.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/message.tsx components/ui/bubble.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Un mensaje dispone un avatar, un nombre, uno o más <Bubble /> y una línea de estado. Las burbujas heredan el align del mensaje, así que lo defines una sola vez.
Alineación
align="end" coloca el avatar y las burbujas en el otro lado para tus propios mensajes.
Encabezado y pie
<MessageHeader /> contiene el nombre y la hora, y <MessageFooter /> una sola línea de estado. El avatar siempre se alinea con la última burbuja, con o sin pie.
Asistente
Una burbuja ghost ocupa todo el ancho para respuestas largas, y un icono en <MessageAvatar /> se convierte en un recuadro redondo.
Contenido largo
Las burbujas ajustan los enlaces largos, y el texto del encabezado y del pie puede truncarse sin empujar el avatar.
De derecha a izquierda
Start y end intercambian lados, y los mensajes nuevos crecen desde la esquina correspondiente.
- Los mensajes son contenido simple. Para un chat en vivo, envuelve la lista en un elemento
role="log"para que los lectores de pantalla lean los mensajes nuevos al llegar. - Pon el nombre del remitente en un encabezado o en texto visualmente oculto, ya que la alineación por sí sola no dice quién escribió un mensaje.
- La entrada solo se reproduce para los mensajes añadidos después del primer renderizado de la lista. Con movimiento reducido aparecen con un fundido.
Cada parte renderiza un <div> y acepta render.
El hilo. Los mensajes añadidos después de su primer renderizado se animan al entrar.
| Atributo | Descripción |
|---|---|
data-slot="message-group" | Apunta al hilo en CSS. |
| Prop | Tipo | Predeterminado |
|---|---|---|
alignLado de la conversación. Las burbujas lo heredan. | "start" | "end" | "start" |
animatedAparece deslizándose cuando se añade a un MessageGroup después de su primer renderizado. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="message" | Apunta a los mensajes en CSS. |
data-align | El lado. |
data-entering | Presente en los mensajes que se animan al entrar. |
| Atributo | Descripción |
|---|---|
data-slot="message-avatar" | Se alinea con la última burbuja. Un icono o imagen sin más se dimensiona a 32px. |
| Atributo | Descripción |
|---|---|
data-slot="message-content" | Apila el encabezado, las burbujas y el pie. |
| Atributo | Descripción |
|---|---|
data-slot="message-header" | Nombre y hora sobre las burbujas. |
data-slot="message-footer" | Una línea de estado debajo. Mantenla en una sola línea para que el avatar siga alineado. |
- BubbleBurbujas de mensajes de chat con variantes, esquinas agrupadas, reacciones y espacio para contenido interactivo.
- AvatarFotos de usuario con iniciales como alternativa, insignias de estado y grupos apilados que se colapsan en un contador.
- AttachmentTarjetas de archivos e imágenes para subidas, con progreso, estados, acciones, un trigger de tarjeta completa y nombres que conservan su extensión.
- MarkerNotas discretas entre el contenido, como separadores de fecha y eventos del sistema, con fechas y horas fijas que se leen como Hoy o Ayer.
- Message scrollerUn área de desplazamiento de chat que sigue los mensajes nuevos, conserva tu posición mientras lees mensajes anteriores y cuenta lo que te perdiste en el botón de salto.
Usado en bloques
Bloques que se construyen sobre Message.
- Prompt InputUn compositor de chat que empieza como una línea tranquila, crece hasta convertirse en una tarjeta mientras escribes y baja cuando empieza la conversación. Enter envía, de forma segura con entrada en japonés y chino. Pega, suelta o elige archivos con vistas previas, progreso y reintento. @ añade archivos y / ejecuta comandos desde un menú junto al cursor. Un selector de modelo con teclas numéricas, un control deslizante de esfuerzo que cobra vida en Max, un anillo de contexto, dictado con forma de onda en vivo, chips de herramientas, una cola para los mensajes escritos mientras se transmite una respuesta y borradores que sobreviven a una recarga.
- Agent TodosMuestra el plan de un agente mientras trabaja. Cada paso pasa de pendiente a por hacer, en curso y hecho, con tiempos en vivo, fallos y las llamadas a herramientas detrás. Una píldora de estado para sobre el compositor, cambios del plan que puedes ver y un paso de revisión para editar el plan antes de ejecutarlo.
- Chat SidebarLa barra lateral de una app de chat. Logo, búsqueda y Nuevo chat arriba, tus propios enlaces debajo, chats fijados, proyectos que se expanden para mostrar sus chats, recientes agrupados por día y filas con menús al pasar el cursor y con clic derecho, renombrado en línea, eliminación con deshacer y estados de respuesta en vivo.
- Chat ThreadToda la conversación alrededor del compositor. Tu pregunta se fija arriba mientras la respuesta llega en streaming, los puntos de control del lateral saltan entre mensajes, y cada respuesta se puede copiar, editar, reintentar, valorar y cambiar entre versiones. Las respuestas renderizan Markdown con bloques de código, tablas y citas, y el razonamiento, las llamadas a herramientas y Prompt Input encajan directamente.