The users currently typing, with expired entries pruned. Schedules a redraw for when the most recent entry will expire, so the indicator clears itself.
Record an incoming typing event. When the sender has not disclosed their online status, their name is replaced with the anonymous placeholder.
Clear any pending expiry timer. Call when the owner is torn down.
Holds the set of users currently typing in a discussion.
The realtime socket feeds incoming without touching PostStream.
client-typingevents in via add, and the TypingIndicator component reads the live, expiry-pruned set via active. Keeping this state separate from PostStream lets the indicator be rendered anywhere — a theme or extension can hold its own TypingState and pass it to