Message
Une ligne de message de chat avec avatar, nom, bulles et statut, où les nouveaux messages remontent depuis le côté de l’expéditeur.
pnpm dlx shadcn@latest add https://hextaui.com/r/message.jsonAjoute le composant, les tokens de thème HextaUI et les composants HextaUI dont il dépend.
Ajoutez les tokens de thème à votre CSS global, si ce n’est pas déjà fait.
Installez les dépendances.
pnpm add @base-ui/react class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/message.tsx components/ui/bubble.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
Un message dispose un avatar, un nom, un ou plusieurs <Bubble /> et une ligne de statut. Les bulles héritent du align du message : vous ne le définissez qu'une fois.
Alignement
align="end" place l'avatar et les bulles de l'autre côté pour vos propres messages.
En-tête et pied de page
<MessageHeader /> contient le nom et l'heure, et <MessageFooter /> une seule ligne de statut. L'avatar reste toujours aligné sur la dernière bulle, avec ou sans pied.
Assistant
Une bulle ghost occupe toute la largeur pour les longues réponses, et une icône dans <MessageAvatar /> devient une pastille ronde.
Contenu long
Les bulles coupent les longs liens, et le texte de l'en-tête et du pied peut être tronqué sans pousser l'avatar.
De droite à gauche
Début et fin échangent leurs côtés, et les nouveaux messages grandissent depuis le coin correspondant.
- Les messages sont du contenu simple. Pour un chat en direct, entourez la liste d'un élément
role="log"afin que les lecteurs d'écran lisent les nouveaux messages à leur arrivée. - Mettez le nom de l'expéditeur dans un en-tête ou dans un texte visuellement masqué, car l'alignement seul n'indique pas qui a écrit un message.
- L'entrée ne se joue que pour les messages ajoutés après le premier rendu de la liste. Avec la réduction des animations, ils apparaissent en fondu.
Chaque partie rend un <div> et accepte render.
Le fil. Les messages ajoutés après son premier rendu s'animent à l'entrée.
| Attribut | Description |
|---|---|
data-slot="message-group" | Cible le fil en CSS. |
| Prop | Type | Par défaut |
|---|---|---|
alignCôté de la conversation. Les bulles en héritent. | "start" | "end" | "start" |
animatedApparaît en montant quand il est ajouté à un MessageGroup après son premier rendu. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Description |
|---|---|
data-slot="message" | Cible les messages en CSS. |
data-align | Le côté. |
data-entering | Présent sur les messages qui s'animent à leur arrivée. |
| Attribut | Description |
|---|---|
data-slot="message-avatar" | S'aligne sur la dernière bulle. Une icône ou une image seule est dimensionnée à 32px. |
| Attribut | Description |
|---|---|
data-slot="message-content" | Empile l'en-tête, les bulles et le pied. |
| Attribut | Description |
|---|---|
data-slot="message-header" | Nom et heure au-dessus des bulles. |
data-slot="message-footer" | Une ligne de statut en dessous. Limitez-la à une seule ligne pour que l'avatar reste aligné. |
- BubbleDes bulles de messages de chat avec variantes, coins groupés, réactions et place pour du contenu interactif.
- AvatarDes photos d’utilisateurs avec initiales en repli, badges de statut et groupes empilés qui se réduisent en compteur.
- AttachmentDes cartes de fichiers et d’images pour les uploads, avec progression, états, actions, un déclencheur sur toute la carte et des noms qui conservent leur extension.
- MarkerDes notes discrètes entre les contenus, comme les séparateurs de date et les événements système, avec des dates et heures fixes qui se lisent « Aujourd’hui » ou « Hier ».
- Message scrollerUne zone de défilement de chat qui suit les nouveaux messages, garde votre position quand vous remontez et compte les messages manqués sur le bouton de retour en bas.
Utilisé dans les blocks
Des blocks qui s’appuient sur Message.
- Prompt InputUn champ de discussion qui démarre sur une seule ligne sobre, grandit en carte à mesure que vous écrivez et descend une fois la conversation lancée. Entrée envoie, sans risque avec la saisie japonaise et chinoise. Collez, déposez ou choisissez des fichiers avec aperçus, progression et nouvel essai. @ ajoute des fichiers et / lance des commandes depuis un menu au niveau du curseur. Un sélecteur de modèle avec touches numériques, un curseur d’effort qui s’anime à Max, un anneau de contexte, la dictée avec forme d’onde en direct, des chips d’outils, une file pour les messages saisis pendant qu’une réponse arrive en streaming, et des brouillons qui survivent à un rechargement.
- Agent TodosAffichez le plan d’un agent pendant son travail. Chaque étape passe de backlog à à faire, en cours puis terminé, avec des durées en direct, les échecs et les appels d’outils qui les sous-tendent. Une pastille de statut à placer au-dessus du champ de saisie, des changements de plan visibles et une étape de relecture pour modifier le plan avant son exécution.
- Chat SidebarLa barre latérale d’une application de chat. Logo, recherche et Nouveau chat en haut, vos propres liens en dessous, chats épinglés, projets qui se déploient pour montrer leurs chats, récents regroupés par jour, et des lignes avec menus au survol et au clic droit, renommage en ligne, suppression avec annulation et états de réponse en direct.
- Chat ThreadToute la conversation autour du champ de saisie. Votre question reste épinglée en haut pendant que la réponse arrive en streaming, des points de repère sur le côté permettent de sauter d’un message à l’autre, et chaque réponse peut être copiée, modifiée, relancée, notée et basculée entre versions. Les réponses affichent du Markdown avec blocs de code, tableaux et citations, et la réflexion, les appels d’outils et Prompt Input s’y insèrent directement.