Message
Eine Chat-Nachrichtenzeile mit Avatar, Name, Bubbles und Status, in der neue Nachrichten von der Seite des Absenders hereinsteigen.
pnpm dlx shadcn@latest add https://hextaui.com/r/message.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @base-ui/react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/message.tsx components/ui/bubble.tsx Passe die Importpfade an dein Projekt-Setup an.
Eine Nachricht ordnet einen Avatar, einen Namen, eine oder mehrere <Bubble /> und eine Statuszeile an. Blasen erben das align der Nachricht, du setzt es also nur einmal.
Ausrichtung
align="end" setzt Avatar und Blasen für deine eigenen Nachrichten auf die andere Seite.
Header und Footer
<MessageHeader /> enthält Name und Zeit, <MessageFooter /> eine einzelne Statuszeile. Der Avatar fluchtet immer mit der letzten Blase, mit oder ohne Footer.
Assistent
Eine ghost-Blase nimmt für lange Antworten die volle Breite ein, und ein Icon in <MessageAvatar /> wird zu einer runden Kachel.
Langer Inhalt
Blasen umbrechen lange Links, und Header- und Footer-Text können abgeschnitten werden, ohne den Avatar zu verschieben.
Rechts nach links
Start und Ende tauschen die Seiten, und neue Nachrichten wachsen aus der passenden Ecke.
- Nachrichten sind einfacher Inhalt. Umschließe die Liste für einen Live-Chat mit einem
role="log"-Element, damit Screenreader neue Nachrichten beim Eintreffen vorlesen. - Setze den Namen des Absenders in einen Header oder in visuell versteckten Text, da die Ausrichtung allein nicht sagt, wer eine Nachricht geschrieben hat.
- Der Auftritt läuft nur für Nachrichten, die nach dem ersten Rendern der Liste hinzukommen. Bei reduzierter Bewegung blenden sie ein.
Jeder Teil rendert ein <div> und akzeptiert render.
Der Thread. Nach seinem ersten Rendern hinzugefügte Nachrichten werden animiert eingeblendet.
| Attribut | Beschreibung |
|---|---|
data-slot="message-group" | Den Thread per CSS ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
alignSeite der Unterhaltung. Blasen erben sie. | "start" | "end" | "start" |
animatedSteigt ein, wenn sie nach dem ersten Rendern zu einer MessageGroup hinzugefügt wird. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="message" | Nachrichten per CSS ansprechen. |
data-align | Die Seite. |
data-entering | Vorhanden bei Nachrichten, die einblenden. |
| Attribut | Beschreibung |
|---|---|
data-slot="message-avatar" | Fluchtet mit der letzten Blase. Ein einzelnes Icon oder Bild wird auf 32px skaliert. |
| Attribut | Beschreibung |
|---|---|
data-slot="message-content" | Stapelt Header, Blasen und Footer. |
| Attribut | Beschreibung |
|---|---|
data-slot="message-header" | Name und Zeit über den Blasen. |
data-slot="message-footer" | Eine Statuszeile darunter. Halte sie einzeilig, damit der Avatar ausgerichtet bleibt. |
- BubbleChat-Nachrichten-Bubbles mit Varianten, gruppierten Ecken, Reaktionen und Platz für interaktive Inhalte.
- AvatarNutzerfotos mit Initialen als Fallback, Statusbadges und gestapelte Gruppen, die zu einer Zahl einklappen.
- AttachmentDatei- und Bildkarten für Uploads, mit Fortschritt, Zuständen, Aktionen, einem Trigger über die ganze Karte und Namen, die ihre Dateiendung behalten.
- MarkerLeise Hinweise zwischen Inhalten, etwa Datumstrenner und Systemereignisse, mit Sticky-Datums- und Zeitangaben, die als Heute oder Gestern gelesen werden.
- Message scrollerEin Chat-Scrollbereich, der neuen Nachrichten folgt, beim Zurücklesen deine Position hält und auf dem Sprung-Button zählt, was du verpasst hast.
In Blocks verwendet
Blocks, die auf Message aufbauen.
- Prompt InputEin Chat-Composer, der als ruhige einzelne Zeile beginnt, beim Schreiben zu einer Karte wächst und nach unten wandert, sobald die Unterhaltung beginnt. Enter sendet, sicher bei japanischer und chinesischer Eingabe. Dateien per Einfügen, Ablegen oder Auswählen hinzufügen, mit Vorschau, Fortschritt und Wiederholen. @ fügt Dateien hinzu und / führt Befehle aus einem Menü an der Einfügemarke aus. Ein Modellwähler mit Zifferntasten, ein Effort-Slider, der bei Max lebendig wird, ein Kontextring, Diktat mit Live-Wellenform, Tool-Chips, eine Warteschlange für Nachrichten, die während einer streamenden Antwort getippt werden, und Entwürfe, die einen Reload überstehen.
- Agent TodosZeige den Plan eines Agenten, während er arbeitet. Jeder Schritt wandert von Backlog über To do und In Arbeit zu Erledigt, mit Live-Zeiten, Fehlern und den dahinterliegenden Tool-Aufrufen. Eine Status-Pille für über dem Composer, sichtbare Planänderungen und ein Review-Schritt, um den Plan vor der Ausführung zu bearbeiten.
- Chat SidebarDie Seitenleiste für eine Chat-App. Logo, Suche und Neuer Chat oben, deine eigenen Links darunter, angeheftete Chats, Projekte, die sich aufklappen und ihre Chats zeigen, zuletzt verwendete nach Tag gruppiert und Zeilen mit Hover- und Rechtsklick-Menüs, direktem Umbenennen, Löschen mit Rückgängig und Live-Antwortzuständen.
- Chat ThreadDie ganze Unterhaltung rund um den Composer. Deine Frage bleibt oben angeheftet, während die Antwort streamt, Checkpoints an der Seite springen zwischen Nachrichten, und jede Antwort lässt sich kopieren, bearbeiten, wiederholen, bewerten und zwischen Versionen umschalten. Antworten rendern Markdown mit Codeblöcken, Tabellen und Zitaten, und Thinking, Tool-Aufrufe und Prompt Input lassen sich direkt einsetzen.