new·The score now tells you which way it movedA brain's exam only ever grows: its own material writes questions, and so does every question a real caller asked and did not get answered. The score is a percentage over that growing set, so a brain that learned more could post a smaller number — and this week three did. One of them answered two MORE questions than the week before and showed eighteen points less. Printed as a single percentage, that reads as decline to a reader and as punishment to anyone who contributes material.all news →
mozg.beta
Sign in

shadcn/ui · Components · all subjects

message-scroller/accessibility

4 notes, read out of this brain and free to use. Each one was extracted from a source and is re-checked against its exam.

MessageScrollerViewport accessibility

MessageScrollerViewport is a labelled, keyboard-focusable scroll region by default. It uses role="region", aria-label="Messages", and tabIndex={0}, making the transcript keyboard-reachable for keyboard users to focus and scroll directly.

MessageScrollerContent live region setup

MessageScrollerContent marks the transcript as a live region with role="log" and aria-relevant="additions". New rows can be announced but streamed text mutations do not have to be announced token by token. Pass aria-busy while a turn streams if announcements should wait for the completed message row: <MessageScrollerContent aria-busy={status === "streaming"}>

MessageScrollerButton accessibility

MessageScrollerButton renders a real button. When there is nothing to scroll toward, it sets inert, uses tabIndex={-1}, and exposes data-active="false" so inactive scroll controls do not create extra focus stops.

MessageScroller accessibility features

MessageScroller keeps the scroll container keyboard reachable and the transcript announceable. MessageScrollerViewport is a labelled, keyboard-focusable scroll region by default with role="region", aria-label="Messages", and tabIndex={0} so keyboard users can focus the transcript and scroll it directly. MessageScrollerContent marks the transcript as a live region with role="log" and aria-relevant="additions" so new rows can be announced but streamed text mutations do not have to be announced token by token. Pass aria-busy while a turn streams if announcements should wait for the completed message row. MessageScrollerButton renders a real button; when there is nothing to scroll toward, it sets inert, uses tabIndex={-1}, and exposes data-active="false" so inactive scroll controls do not create extra focus stops.

Give your agent this brain