Skip to content
GetUrUI

Chat bubbles

4 variantsNew
.md

Four message threads — support with typing indicator, group chat with reactions, file and voice attachments, and delivery receipts — where every new message springs in.

chatmessagebubblesupporttyping indicatorreactionsvoice noteattachmentread receipt

Support thread

support-thread.tsx

Support conversation with grouped bubbles, quick-reply chips and a typing indicator before each answer.

$npx shadcn@latest add @geturui/chat-bubbles-support-thread
.zip
PropTypeDefaultDescription
agentName / agentRolestring—Header identity.
messagesSupportMessage[]—{ id, from: "agent" | "user", text, time } initial thread.
quickRepliesQuickReply[]—{ label, reply } chips; each is used once.
fallbackReplystring—Agent answer for typed messages.
typingDelaynumber1400Milliseconds the typing indicator shows.
onSend(text: string) => void—Called for every user message.
classNamestring—Extra classes on the root element.

Group reactions

group-reactions.tsx

Group chat with grouped senders, toggleable reaction pills whose counts roll and an inline reaction picker.

$npx shadcn@latest add @geturui/chat-bubbles-group-reactions
.zip
PropTypeDefaultDescription
channel / membersstring / number—Header label and member count.
messagesGroupMessage[]—{ id, author, time, text, reactions?, mine? } per message.
onReact(messageId, reaction, active) => void—Called when a reaction is added or removed.
classNamestring—Extra classes on the root element.

Attachments

attachments.tsx

File message with a ring-progress download and a voice note with a seekable waveform and speed control.

$npx shadcn@latest add @geturui/chat-bubbles-attachments
.zip
PropTypeDefaultDescription
sender / notestring—Sender name and the text above the file.
file{ name: string; size: string; pages?: number }—Attachment details.
voiceSecondsnumber34Voice note length.
downloadMsnumber1600Simulated download time; wire onDownload to the real request.
onDownload() => void—Called when the download starts.
classNamestring—Extra classes on the root element.

Delivery states

delivery-states.tsx

Direct-message thread where sent messages animate through sending, sent, delivered and read, with retry on failure.

$npx shadcn@latest add @geturui/chat-bubbles-delivery-states
.zip
PropTypeDefaultDescription
contactstring"Theo Lind"Who the thread is with.
messagesDeliveryMessage[]—{ id, mine, text, time, status? } where status is sending, sent, delivered, read or failed.
autoReadbooleantrueWalk new messages all the way to read.
onSend / onRetry(text: string) => void / (id: string) => void—Send and retry handlers.
classNamestring—Extra classes on the root element.

Install the whole set

Installs every chat bubbles variant at once. Each section above has its own command for a single variant.

$npx shadcn@latest add @geturui/chat-bubbles
Download source (.zip)

Accessibility

  • Threads are live regions (role=log) so new messages and the typing indicator are announced politely.
  • Reactions, playback and retry are real buttons with aria-pressed or descriptive labels; the waveform is a keyboard slider.
  • Message entrances and bouncing dots become simple fades with reduced motion.

Related