Self-contained content reserves a stable off-screen estimate.
Docs Platform
MessageScroller
A following transcript. The machine owns follow vs pinned. Viewport geometry, prepend preservation, and edge thresholds stay in the controller.
Live machine
The shipped messageScrollerMachine — following the end or anchored where the reader scrolled, decided entirely by scroll reports.
message-scroller · live via createService
States · walked from the machine
Transitions from here · click to send
Context
{
"jumping": false,
"anchorId": null,
"defaultApplied": false,
"pendingJumpId": null
}Log · newest first
No events yet — use the component above or send a transition.
Explore the layers
Machine
(@grassroot/ui-machines/message-scroller).
Headless: five adapters plus
mountMessageScroller. Spec:
packages/ui-headless/core/src/message-scroller/message-scroller.spec.md.
Behaviour contract
Following sticks to the edge. User scroll away pins. New items while pinned do not steal the viewport.
Utility contract
The shipped styled adapters opt into the same framework-neutral utilities: thin scrollbars on the viewport and Render Auto on each message. The computed values below are read from the real CSS classes used by the adapters, including the ten-rem message estimate.