Message
Uma linha de mensagem de chat com avatar, nome, balões e status, em que as novas mensagens surgem do lado do remetente.
pnpm dlx shadcn@latest add https://hextaui.com/r/message.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/message.tsx components/ui/bubble.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Uma mensagem organiza um avatar, um nome, um ou mais <Bubble /> e uma linha de status. Os balões herdam o align da mensagem, então você o define uma vez.
Alinhamento
align="end" coloca o avatar e os balões do outro lado para suas próprias mensagens.
Header e footer
<MessageHeader /> guarda o nome e a hora, e <MessageFooter /> uma única linha de status. O avatar sempre se alinha com o último balão, com ou sem rodapé.
Assistente
Um balão ghost ocupa toda a largura para respostas longas, e um ícone em <MessageAvatar /> vira um tile redondo.
Conteúdo longo
Os balões quebram links longos, e o texto do cabeçalho e do rodapé pode ser truncado sem empurrar o avatar.
Da direita para a esquerda
Início e fim trocam de lado, e as novas mensagens crescem a partir do canto correspondente.
- As mensagens são conteúdo simples. Para um chat ao vivo, envolva a lista em um elemento
role="log"para que os leitores de tela leiam as novas mensagens conforme chegam. - Coloque o nome do remetente em um cabeçalho ou em texto visualmente oculto, já que o alinhamento sozinho não diz quem escreveu a mensagem.
- A entrada só ocorre para mensagens adicionadas depois da primeira renderização da lista. Com movimento reduzido, elas aparecem com fade.
Toda parte renderiza um <div> e aceita render.
A conversa. As mensagens adicionadas depois da primeira renderização entram com animação.
| Atributo | Descrição |
|---|---|
data-slot="message-group" | Seleciona a conversa no CSS. |
| Prop | Tipo | Padrão |
|---|---|---|
alignLado da conversa. Os balões o herdam. | "start" | "end" | "start" |
animatedSobe ao entrar quando adicionado a um MessageGroup após a primeira renderização. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="message" | Seleciona as mensagens no CSS. |
data-align | O lado. |
data-entering | Presente nas mensagens que entram com animação. |
| Atributo | Descrição |
|---|---|
data-slot="message-avatar" | Alinha com o último balão. Um ícone ou imagem avulsa é dimensionado para 32px. |
| Atributo | Descrição |
|---|---|
data-slot="message-content" | Empilha o cabeçalho, os balões e o rodapé. |
| Atributo | Descrição |
|---|---|
data-slot="message-header" | Nome e hora acima dos balões. |
data-slot="message-footer" | Uma linha de status abaixo. Mantenha-a em uma única linha para o avatar continuar alinhado. |
- BubbleBalões de mensagem de chat com variantes, cantos agrupados, reações e espaço para conteúdo interativo.
- AvatarFotos de usuário com fallback de iniciais, badges de status e grupos empilhados que se recolhem em uma contagem.
- AttachmentCards de arquivo e imagem para uploads, com progresso, estados, ações, um gatilho no card inteiro e nomes que mantêm a extensão.
- MarkerNotas discretas entre o conteúdo, como divisores de data e eventos do sistema, com datas e horários fixos que aparecem como Hoje ou Ontem.
- Message scrollerUma área de rolagem de chat que acompanha as novas mensagens, mantém sua posição enquanto você relê e conta o que você perdeu no botão de saltar.
Usado em blocos
Blocos que se baseiam em Message.
- Prompt InputUm campo de conversa que começa como uma linha discreta, cresce até virar um card conforme você escreve e desce quando a conversa começa. Enter envia, de forma segura com entrada em japonês e chinês. Cole, solte ou escolha arquivos com prévias, progresso e nova tentativa. @ adiciona arquivos e / executa comandos a partir de um menu no cursor. Um seletor de modelo com teclas numéricas, um slider de esforço que ganha vida no Max, um anel de contexto, ditado com forma de onda ao vivo, chips de ferramentas, uma fila para mensagens digitadas enquanto uma resposta é transmitida e rascunhos que sobrevivem a um recarregamento.
- Agent TodosMostre o plano de um agente enquanto ele trabalha. Cada etapa passa de backlog para a fazer, em andamento e concluída, com tempos ao vivo, falhas e as chamadas de ferramenta por trás dela. Uma pílula de status para acima do composer, mudanças no plano que você consegue ver e uma etapa de revisão para editar o plano antes de executá-lo.
- Chat SidebarA barra lateral de um app de chat. Logo, busca e Novo chat no topo, seus próprios links abaixo, chats fixados, projetos que se expandem para mostrar seus chats, recentes agrupados por dia e linhas com menus de hover e de clique direito, renomeação inline, exclusão com desfazer e estados de resposta ao vivo.
- Chat ThreadA conversa inteira ao redor do composer. Sua pergunta fica fixa no topo enquanto a resposta chega em streaming, checkpoints na lateral saltam entre mensagens, e toda resposta pode ser copiada, editada, repetida, avaliada e alternada entre versões. As respostas renderizam Markdown com blocos de código, tabelas e citações, e o raciocínio, as chamadas de ferramenta e o Prompt Input se encaixam diretamente.