Message Scroller

Smooth autoscroll container for streaming chat messages.

Smooth autoscroll container for streaming chat messages. Automatically scrolls down as new content streams in unless the user manually scrolls up.

User: Can you explain the monorepo architecture?
AI: Celestia Starter isolates backend Hono APIs from the Next.js UI client.
tsx
import {  MessageScrollerProvider,  MessageScroller,  MessageScrollerViewport,  MessageScrollerContent,  MessageScrollerItem,  MessageScrollerButton,} from "@celestia-project/ui/composite/message-scroller"
export function ChatScroller() {  return (    <MessageScrollerProvider>      <MessageScroller className="h-[400px]">        <MessageScrollerViewport>          <MessageScrollerContent>            <MessageScrollerItem messageId="1">              {/* Chat message content */}            </MessageScrollerItem>          </MessageScrollerContent>        </MessageScrollerViewport>        <MessageScrollerButton />      </MessageScroller>    </MessageScrollerProvider>  )}

Subcomponents

ComponentDescription
MessageScrollerProviderContext provider managing scroll positions and visibility state
MessageScrollerRoot container for the message scroller
MessageScrollerViewportScrollable viewport element with overflow handling
MessageScrollerContentInner content wrapper that manages spacer offsets
MessageScrollerItemIndividual message item with optional scrollAnchor and messageId
MessageScrollerButtonFloating scroll-to-bottom / scroll-to-top button

Hooks

  • useMessageScroller() — returns { scrollToEnd, scrollToMessage, scrollToStart }
  • useMessageScrollerScrollable() — returns { start: boolean, end: boolean }
  • useMessageScrollerVisibility() — returns { currentAnchorId, visibleMessageIds }