<!-- source-hash: 0d9faa5f98d4a04ec4d4d1a8221ac7cd -->
A React component that renders a batch of pending AI tool-call approvals, allowing users to approve or reject multiple tool executions at once, with expandable argument details and live execution status indicators.

## Key Components

### `ApprovalBatchMessage` (default export)
A `forwardRef` component that renders the full approval card. Accepts:

| Prop | Type | Description |
|------|------|-------------|
| `data` | `ApprovalBatchSegment["data"]` | Tool calls, executions, and request ID |
| `status` | `ApprovalBatchSegment["status"]` | `"pending"` \| `"approved"` \| `"rejected"` |
| `onApprove` | `(requestId?) => void \| Promise<void>` | Called when user approves the batch |
| `onReject` | `(requestId?) => void \| Promise<void>` | Called when user rejects the batch |

### `ToolCallRow` (internal)
Renders a single collapsible tool call row showing the command text, filtered arguments via `ArgRow`, execution result via `ResultBlock`, and a live `ExecutionStatusIcon`.

### `ExecutionStatusIcon` (internal)
Displays the per-tool execution state:
- **Pending batch** → hidden
- **Approved / executing** → `DotsLoaderIcon` (spinner)
- **Done + success** → green `CheckCircleIcon`
- **Done + failure** → red `XmarkCircleIcon`

### Helper: `getArgEntries`
Filters tool call arguments, excluding body-level keys (via `COMMAND_BODY_KEYS`) and null/empty values.

## Usage Example

```typescript
import { ApprovalBatchMessage } from "./approval-batch-message"

<ApprovalBatchMessage
  data={{
    approvalRequestId: "req_123",
    toolCalls: [
      {
        toolExecutionRequestId: "exec_1",
        toolType: "SHELL",
        toolCallArguments: { command: "ls -la" },
        toolExplanation: "List directory contents",
      },
    ],
    executions: {},
  }}
  status="pending"
  onApprove={(id) => console.log("Approved:", id)}
  onReject={(id) => console.log("Rejected:", id)}
/>
```