# `Jido.Chat.Modal`
[🔗](https://github.com/agentjido/jido_chat/blob/v1.0.0/lib/jido/chat/modal.ex#L1)

Canonical modal open payload and builder helpers.

# `t`

```elixir
@type t() :: %Jido.Chat.Modal{
  callback_id: nil | nil | binary(),
  close_label: binary(),
  elements: [any()],
  id: nil | nil | binary(),
  metadata: map(),
  notify_on_close: boolean(),
  private_metadata: nil | nil | binary(),
  submit_label: binary(),
  title: binary()
}
```

# `from_map`

```elixir
@spec from_map(map()) :: t()
```

Builds a modal from serialized map data.

# `new`

```elixir
@spec new(t() | map()) :: t()
```

Creates a canonical modal.

# `radio_select`

```elixir
@spec radio_select(
  String.t(),
  String.t(),
  [Jido.Chat.Modal.Element.t() | map()],
  keyword() | map()
) ::
  Jido.Chat.Modal.Element.t()
```

Builds a radio select element.

# `schema`

Returns the schema for modals.

# `select`

```elixir
@spec select(
  String.t(),
  String.t(),
  [Jido.Chat.Modal.Element.t() | map()],
  keyword() | map()
) ::
  Jido.Chat.Modal.Element.t()
```

Builds a select element.

# `select_option`

```elixir
@spec select_option(String.t(), String.t(), keyword() | map()) ::
  Jido.Chat.Modal.Element.t()
```

Builds a select option element.

# `text_input`

```elixir
@spec text_input(String.t(), String.t(), keyword() | map()) ::
  Jido.Chat.Modal.Element.t()
```

Builds a text input element.

# `to_adapter_payload`

```elixir
@spec to_adapter_payload(t()) :: map()
```

Returns a plain map suitable for adapter-specific modal rendering.

# `to_map`

```elixir
@spec to_map(t()) :: map()
```

Serializes the modal into a plain map with a type marker.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
