Ballmac UI home

Reasoning Disclosure

A collapsible 'thinking' panel for model reasoning: shows a shimmering 'Thinking…' while streaming, opens automatically, then collapses to 'Thought for 12s' when done.

The user wants the chat to stay pinned to the newest message. Pinning should only happen when they are already at the bottom; otherwise their scroll position must be respected. A floating button can offer a jump back.

Installation

$ pnpm dlx shadcn@latest add @ballmac/reasoning-disclosure

Usage

import { ReasoningDisclosure, formatThoughtDuration } from "@/components/ballmac/reasoning-disclosure"

The full example is in the Code tab above.

API reference

PropTypeDefault
streaming

True while the model is still reasoning. Shows "Thinking…" and opens the panel.

booleanfalse
duration

How long the model reasoned, in seconds. Shown as "Thought for 12s" once streaming ends.

number—
open

Controlled open state. When set, streaming no longer opens or closes the panel.

boolean—
defaultOpen

Initial open state when uncontrolled. Defaults to `streaming`.

boolean—
onOpenChange

Called when the panel opens or closes, including the automatic open and collapse.

(open: boolean) => void—
autoCollapse

Collapse automatically when streaming ends (uncontrolled only).

booleantrue
label

Replaces the header text.

React.ReactNode—
contentClassName

Classes for the content panel.

string—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Enter / SpaceOpens or closes the reasoning (aria-expanded, aria-controls)
—The shimmer is decorative and stops under reduced motion

Use with AI

Wrap a model's reasoning text: <ReasoningDisclosure streaming={isReasoning} duration={seconds}>{text}</ReasoningDisclosure>. It opens while streaming and collapses when streaming ends unless you control open. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Reasoning Disclosure (@ballmac/reasoning-disclosure) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Showing reasoning or 'thinking' tokens from reasoning models above the final answer
  • Any secondary, verbose content that should be visible while it is produced and tucked away afterwards

Not for

  • FAQ-style expanders (use an accordion)
  • Tool call details (use tool-call-card)

Registry JSON: https://ui.ballmac.com/r/reasoning-disclosure.json

Credits

Free to use in personal and commercial projects.

Registry
shadcn/utils