A conversation assembling itself, typing bubbles swapping for messages as the thread scrolls up
This is the format it was composed for. Switch above to see it lay itself out for another: same animation, re-arranged for the frame.
Everything below can be changed without touching the animation. Hand the list to an agent, or edit the values at the bottom of the component file.
The conversation, in order. Alternate senders, and end on an outgoing message so the read receipt lands at the foot of the thread. Six short messages is the sweet spot for this budget; more are compressed to fit and the oldest scroll off the top.
now: 6 items
Name in the thread header. Its initials draw the avatar too, so a first and last name reads best.
now: Priya Raman
Small line under the contact name, e.g. 'Online' or 'Active now'. Omit for a barer header.
now: Online
Show a three-dot typing bubble before every incoming message, which then collapses as the message takes its place.
now: true
Rule-and-label divider above the first message, e.g. 'Today'. Omit to open straight on the first bubble.
now: Today
Read receipt under the last outgoing bubble, e.g. 'Read 9:41'. Omit to leave the thread hanging.
now: Read 9:41
Show the input bar pinned to the bottom of the frame. Its send button presses in just before each outgoing message.
now: true
Placeholder text in the input bar. Only rendered when `composer` is true.
now: Message
Scales the whole conversation's timing. 1 is the natural read, below 1 hurries it, above 1 lets it breathe. Capped automatically so the last bubble always lands before the exit window.
now: 1.15
Brand token id, one of the keys of BRANDS.
now: slate
No Tailwind, no CSS, no asset files. Inline styles only.
A vertical messaging thread that builds itself: incoming bubbles on the left in the surface colour, outgoing on the right in the accent, each one springing in from its bottom corner. Show a three-dot typing bubble before every incoming message and swap it for the message when it arrives, keep the stack anchored to the bottom so it scrolls up as it fills, and put a read receipt under the last outgoing bubble.