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

followingno anchor

States · walked from the machine

followingidleanchored

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.

Message 1

Self-contained content reserves a stable off-screen estimate.

Checking computed utility styles…