# UserInputView

**コントロール機能**：ユーザーが入力したデータ（テキスト、画像、音声、動画など）をMarkdown形式で表示します。音声・動画メディアデータは独立したプレーヤー形式で表示されます。  
**タイプ**：コンテナーコントロール  
**親クラス**：bricks.VBox

## 初期化パラメータ

- `opts` (Object) - 設定オプション。VBoxの汎用パラメータを継承：
  - `data` (Object) - ユーザー入力の生データオブジェクト。キーと値はそれぞれフィールド名とその値に対応。
  - `input_fields` (Array) - フィールド定義配列。各フィールドは以下のプロパティを含みます：
    - `name` (String) - フィールド名（例：`video1`, `audio2`, `image3`、通常のテキストなど）
    - `label` (String, オプション) - 表示用ラベル。Markdownでの見出し表示に使用。

> 注意：`data` 内のファイルBlobオブジェクトは `URL.createObjectURL()` を使ってプレビュー可能なURLに変換されます。

## 主なイベント

明示的なカスタムイベントはありません。`show_input(data)` が呼び出された際に自動的にコンテンツレイアウトが更新されます。

---

# LlmOut

**コントロール機能**：大規模言語モデルから返されるJSONデータに基づき、応答内容のインターフェースを動的に構築します。推論テキスト、回答内容、エラーメッセージ、音声、動画、画像など複数のタイプのコンテンツをレンダリングできます。  
**タイプ**：コンテナーコントロール  
**親クラス**：bricks.VBox

## 初期化パラメータ

- `opts` (Object) - 設定オプション。VBoxの汎用パラメータを継承しており、特別なコンストラクタパラメータはありません。

内部ステート属性（`update(data)` メソッドによって管理）：
- `reasoning_content` (String) - 累積された推論プロセスのテキスト。
- `content` (String) - 累積された最終回答の内容。
- `error` (String) - エラーメッセージテキスト。
- `images` (Array) - 画像URLのリスト。
- 各メディアコントロールのインスタンス：`rc_w`, `c_w`, `v_w`, `a_w`, `i_w` など。

## 主なイベント

### update(data)

**発火条件**：新しい大規模モデルの出力データを受け取ったときに手動でこのメソッドを呼び出します。

パラメータ `data` (Object) は以下の任意のプロパティをサポート：

| プロパティ | 型 | 説明 |
|----------|----|------|
| `reasoning_content` | String | 推論プロセスのテキスト。通常はMarkdown形式でレンダリングされます。 |
| `content` | String | 最終的な応答内容。Markdown対応。 |
| `error` | String | エラーメッセージ。赤色のスタイルで表示されます。 |
| `audio` | String | 音声リソース。URLまたはBase64エンコード文字列が可能。プロトコル接頭辞は自動処理されます。 |
| `video` | String | 動画リソース。URLまたはBase64をサポート。 |
| `image` | String または Array[String] | 単一または複数の画像URL。 |

**動作説明**：
- 新しいコンテンツは既存のフィールドに自動的に追加（アペンドモード）されます。
- メディアリソースが初めて現れた場合、対応するプレーヤーコンポーネント（AudioPlayer / VideoPlayer）が作成されます。以降の更新では、その `add_url()` メソッドが呼び出されます。
- すべてのコンテンツは次の順序でコンテナーに追加されます：エラー → 推論内容 → 回答内容 → 動画 → 音声 → 画像。
- 古いコンポーネントを `clear_widgets()` でクリアした後、再描画することでビューの一貫性を保ちます。

> 登録情報：このコントロールは `bricks.Factory.register('LlmOut', bricks.LlmOut)` により登録されており、設定ベースでの生成が可能です。