Conversación@unozero-ai/ui

ChatMessage

Burbuja de un hilo de chat, del usuario o del asistente.

Usar

import {
  ChatMessage,
  TypingIndicator,
} from "@unozero-ai/ui/react";

<ChatMessage></ChatMessage>

Huésped y asistente

sender="user" va a la derecha, en el color de marca y elevado; sender="assistant", el valor por defecto, va a la izquierda, plano, con borde y avatar. Cada burbuja es sombra o borde, nunca las dos (la Regla del O Uno o el Otro). timestamp es texto ya formateado: el componente no sabe de zonas horarias. En el kit React se llamaba role; aquí es sender, porque role en un elemento HTML es su rol ARIA.

Hola, ¿tienen habitación para dos del 14 al 17 de octubre?Hola, Laura. Sí, tengo disponible la Doble Estándar por 312.000 COP la noche, con desayuno incluido.

Mensajes con estado

success y warning no tiñen la burbuja: el estado va en una etiqueta con icono y palabra en la cabecera, con el texto de header. Así el estado se lee aunque el tenant cambie la paleta (la Regla del Tenant). Resérvalos para los mensajes que cambian algo: una reserva hecha, un pago que vence.

Listo, Laura. Tu código es RES-48213. Doble Estándar · 14 al 17 de octubre · 936.000 COPEl enlace de pago vence hoy a las 11:52. Si no se completa, la habitación vuelve a quedar libre.

Cabecera y autor

Con la variante por defecto, header es una etiqueta neutra que dice de dónde sale el mensaje: una nota de voz transcrita, una respuesta tomada de la base de conocimiento. Es contexto para el equipo del hotel, no un estado. author es nuevo: nombra a quien escribe, en negrita sobre el texto, para cuando una persona del equipo toma la conversación que llevaba el asistente.

¿El parqueadero está incluido o se paga aparte? Llegamos en carro como a las diez de la noche.El parqueadero cubierto cuesta 25.000 COP por noche y se paga en recepción.Hola, soy Andrea. Te dejo apartado un puesto cubierto; la recepción abre las 24 horas, así que puedes llegar a las diez sin problema.

Estado de entrega

Nuevo en este kit. status dice si el mensaje salió, junto a la hora: un reloj mientras se envía (sending), un check al salir (sent), dos al llegar (delivered) y dos plenos al leerse (read). La forma cambia en cada paso, así que no depende del color, y el lector de pantalla oye la palabra. failed pone «No se envió» en rojo debajo de la burbuja; el botón de reintentar no viene en el componente, lo pones tú. Los textos salen de setLabels (messageSending, messageFailed…).

Te comparto el comprobante de la transferencia.¿Me confirmas cuando lo veas?Llegamos hacia las 3 de la tarde.¿Hay cuna para un bebé?Somos dos adultos y un bebé de 8 meses.

Un hilo

index escalona la entrada de cada burbuja 40 ms para que un hilo no aparezca de golpe. El contenido ahora es un slot: además de texto, que respeta sus saltos de línea, admite elementos. Una Markdown dentro del mensaje del asistente pinta negritas y listas, algo que el kit React no permitía porque envolvía el contenido en un párrafo. Úsala solo en las burbujas del asistente: sus enlaces van en el color de marca y no se leen sobre la del huésped. TypingIndicator cierra el hilo mientras el asistente prepara la respuesta y su label se anuncia.

Hola, ¿tienen habitación para dos del 14 al 17 de octubre?La doble. ¿Se puede pagar con transferencia?

API

Generada del custom-elements.json que publica @unozero-ai/ui. Las partes se estilan desde tu CSS con el nombre del elemento: uz-button::part(base).

ChatMessage · <uz-chat-message>

PropTipoDefectoDescripción
sender"assistant" | "user""assistant"Quién escribe: assistant (entrante, a la izquierda) o user (saliente, a la derecha).
variant"default" | "success" | "warning""default"success o warning añaden a la cabecera una etiqueta de estado con icono; la burbuja no se tiñe.
timestampstring""Hora ya formateada («09:41»), abajo a la derecha de la burbuja.
headerstring""Texto de la etiqueta de cabecera: el estado con success/warning o el contexto («Nota de voz · 0:14»).
authorstring""Nombre de quien escribe, en negrita sobre el contenido.
status"sending" | "sent" | "delivered" | "read" | "failed" | undefined—Estado de entrega junto a la hora; failed añade un aviso bajo la burbuja.
indexnumber0Posición en el hilo: retrasa la entrada 40 ms por cada una.
SlotDescripción
(por defecto)El contenido del mensaje.
Parte CSSDescripción
uz-chat-message::part(bubble)La burbuja.

TypingIndicator · <uz-typing-indicator>

PropTipoDefectoDescripción
labelstring""Texto que acompaña a los puntos y se anuncia («El asistente está escribiendo…»).