Markdown
Pinta el Markdown acotado que escribe el asistente, sin dependencias.
Usar
import { Markdown } from "@unozero-ai/ui/react";
<Markdown></Markdown>Respuesta del asistente
Lo que escribe un modelo de lenguaje cuando responde a un huésped: negritas para lo que se compara, una lista corta y un enlace. Pasa el texto en content. Ahora cabe dentro de ChatMessage, que recibe su contenido por un slot; el kit React no lo permitía. Los enlaces web se abren en otra pestaña con rel="noopener noreferrer" y el lector de pantalla oye que se abren aparte.
El subconjunto
Entiende esto y nada más:
- Títulos de
#a######, pintados como párrafos destacados y no comoh1–h6: no entran en el esquema de títulos de la página. **negrita**,*cursiva*,`código`y[enlace](url).- Listas con
-,*o+, y numeradas con1.o1). - Citas con
>y bloques de código entre```, nuevos en este kit: en el de React quedaban como texto. - Párrafos separados por una línea en blanco. Un salto de línea simple se respeta como salto, igual que en WhatsApp.
Lo que se queda como texto
El guion bajo no es énfasis: identificadores como session_1784_st salen intactos. El HTML se muestra como texto, así que un modelo que lo escriba no puede inyectar nada en la página: el componente construye los nodos con plantillas de Lit, nunca con innerHTML. Las tablas no están en el subconjunto y quedan como texto plano; una imagen sale como un enlace a su archivo, con el «!» delante. Si tu asistente las necesita, este componente no basta.
Enlaces seguros
Nuevo en este kit. Un enlace solo sale si su destino es http, https o mailto; las rutas relativas heredan el de la página. Con javascript:, data: o vbscript:, en mayúsculas o en minúsculas, queda su texto sin enlace. Si alguien consigue que el modelo escriba uno así, el huésped no tiene nada que pulsar.
En la base de conocimiento
El mismo subconjunto es el que escribe el equipo del hotel en la base de conocimiento, así que la vista previa del editor y la respuesta del asistente en el chat se ven igual.
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).