Confirmed the unread marker still lands at the right boundary. Item 23.
Chat - Indicators in context
Compose typing, unread, and scroll-to-bottom indicators inside a realistic thread layout.
Indicators are structural affordances rather than floating utilities, so their placement inside the thread layout is part of their behavior. The demo below shows where each indicator belongs in a realistic thread:
Indicator thread
Placement reference
Indicators.TypingIndicatornear the thread header or composerIndicators.UnreadMarkerinside the message row pipelineIndicators.ScrollToBottomAffordanceinside a message-list-aware containerMessageList.Rootas the source of unseen-message and scroll state
Implementation notes
- Tie indicators to a real thread so placement rules stay obvious.
- Show unread and typing state at the same time so the reader can see that the indicators solve different problems.
- Keep the surrounding layout realistic so the scroll affordance has a reason to appear.
When to use this pattern
Use this pattern when:
- The thread needs a visible unread boundary.
- Typing activity should be surfaced inline.
- The scroll position is no longer pinned to the latest message.
This pattern is common in shared support queues, collaborative assistant surfaces, and any thread where users routinely scroll away from the newest message.
Placement rules
TypingIndicatorbelongs near thread-level context such as the header or composer area.UnreadMarkerbelongs in the row pipeline because it marks a message boundary, not a global thread status.ScrollToBottomAffordancedepends on message-list state, so it is easiest to reason about when it stays inside a message-list-aware container.
See also
- See Indicators for details.