Components / Chat Pane

Chat Pane

The universal Elle chat layout: one frame (header, optional banner, the scrollable stream on the shared readable measure, working status bar over the composer) across /chats, the area companions, onboarding, and Cora. Surfaces supply the stream entries, header, and footer; the engine behind them is the surface’s concern.

import { ChatPane, ChatHeader, ChatTitle, ChatPaneBanner, CHAT_CONTENT_WIDTH } from '@layers/ui/chat-pane'

Rendered stock

House rules

  • ONE header shape everywhere: ChatHeader + ChatTitle. Surfaces never hand-roll their own chat chrome.
  • ChatTitle is thread identity ALONE — never an area/subpage breadcrumb tail (ruling 2026-07-23). Surface context reaches Elle through page context, not the header.
  • Scroll behavior belongs to MessageScroller (follow the live edge, yield to the reader, jump-to-latest); never add scroll hooks around the pane.
  • No divider above the footer: the status bar and composer float over the same surface as the stream.
  • Consumers import from @layers/ui/chat-pane; never copy the file into an app (the copy arrangement is what drifted).

See also