KQ-841 · BUBBLE/LAND

Bubble Land

A message thread with a composer whose new bubble rises into the list from the composer's side on recoil, the two bounces of something landing. The bubble's delivery mark walks the states the parent reports: a ring while sending, one check drawn on flick once sent, a second check that walks out on snap when delivered, and both tinted cobalt when read; failure shakes the bubble on a tween and offers Retry beneath it. The composer is a textarea where Enter sends and Shift+Enter breaks a line, every mark is an image with a sentence, and a status region speaks delivered, read, and failure once each.

KQ-841 · BUBBLE/LAND
  1. Order 4471 is packed. Hold it at the depot, or send it on?
    9:38
  2. Hold it until Friday, please.
    9:39

Ines → Marta · read · 0 sent

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/bubble-land

Props

messages
BubbleMessage[]
default —
The thread, oldest first: id, from ("me" or "peer"), text, an optional formatted time, and for own messages a delivery of "sending", "sent", "delivered", "read", or "failed".
peerName
string
default "Them"
The other person; the mark's sentences name them ("Read by Marta").
onSend
(text: string) => void
default —
Fires from Enter or the Send control with the trimmed draft; append the message here with delivery "sending".
onRetry
(id: string) => void
default —
Fires from a failed bubble's Retry control; set that message back to "sending".
placeholder
string
default "Message"
Composer placeholder.
disabled
boolean
default false
Holds the composer while the parent is busy.
label
string
default —
Names the thread list for assistive technology.