# ChatReasoningComponent

Package: `@threadplane/chat` · 0.3.4

Reference: /docs/api/chat/ChatReasoningComponent

```typescript
import { ChatReasoningComponent } from '@threadplane/chat';
```

## ChatReasoningComponent

Renders an assistant's reasoning content as a compact pill that
expands to reveal the underlying text. Three visual states:

- Streaming: pill shows "Thinking…" with a pulsing dot; auto-expanded
 so the user sees reasoning stream in real time.
- Idle, with durationMs known: pill shows "Thought for {duration}";
 collapsed by default, expand on click.
- Idle, no duration: pill shows "Show reasoning"; collapsed by default.

The body re-uses chat-streaming-md so reasoning content gets the same
markdown rendering pipeline as the visible response (lists, code,
step labels often appear in reasoning output).

Internal state: a tristate "expanded" — null means follow auto state-
driven logic (force-expand while delivery is streaming, otherwise honor
defaultExpanded), boolean is a manual user choice that wins for the
lifetime of the instance.

```typescript
export declare class ChatReasoningComponent  {
  constructor();
  readonly content: import("@angular/core").InputSignal<string>;
  readonly defaultExpanded: import("@angular/core").InputSignal<boolean>;
  readonly delivery: import("@angular/core").InputSignal<MessageDelivery>;
  readonly document: import("@angular/core").Signal<import("../../streaming/streaming-markdown.component").StreamingMarkdownDocument>;
  readonly durationMs: import("@angular/core").InputSignal<number | undefined>;
  readonly expanded: import("@angular/core").Signal<boolean>;
  readonly expandedStr: import("@angular/core").Signal<string>;
  readonly hasContent: import("@angular/core").Signal<boolean>;
  readonly isStreaming: import("@angular/core").Signal<boolean>;
  readonly label: import("@angular/core").InputSignal<string | undefined>;
  readonly resolvedLabel: import("@angular/core").Signal<string>;
  toggle(): void;
}
```

**Angular selector:** `chat-reasoning`

- Input `content`: `string`

- Input `defaultExpanded`: `boolean`

- Input `delivery` (required): `MessageDelivery`

- Input `durationMs`: `number | undefined`

- Input `label`: `string | undefined`

### Constructor · overload 1

Constructs a new instance of the `ChatReasoningComponent` class

```typescript
constructor();
```

### content

```typescript
readonly content: import("@angular/core").InputSignal<string>;
```

### defaultExpanded

```typescript
readonly defaultExpanded: import("@angular/core").InputSignal<boolean>;
```

### delivery

```typescript
readonly delivery: import("@angular/core").InputSignal<MessageDelivery>;
```

### document

```typescript
readonly document: import("@angular/core").Signal<import("../../streaming/streaming-markdown.component").StreamingMarkdownDocument>;
```

### durationMs

```typescript
readonly durationMs: import("@angular/core").InputSignal<number | undefined>;
```

### expanded

```typescript
readonly expanded: import("@angular/core").Signal<boolean>;
```

### expandedStr

```typescript
readonly expandedStr: import("@angular/core").Signal<string>;
```

### hasContent

```typescript
readonly hasContent: import("@angular/core").Signal<boolean>;
```

### isStreaming

```typescript
readonly isStreaming: import("@angular/core").Signal<boolean>;
```

### label

```typescript
readonly label: import("@angular/core").InputSignal<string | undefined>;
```

### resolvedLabel

```typescript
readonly resolvedLabel: import("@angular/core").Signal<string>;
```

### toggle · overload 1

```typescript
toggle(): void;
```