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

Canonical cross-platform card model with fallback rendering helpers.

# `component`

```elixir
@type component() :: Jido.Chat.Card.Component.t()
```

# `t`

```elixir
@type t() :: %Jido.Chat.Card{
  components: [any()],
  id: nil | nil | binary(),
  markdown: nil | nil | any(),
  metadata: map(),
  summary: nil | nil | binary(),
  title: nil | nil | binary()
}
```

# `actions`

```elixir
@spec actions([component() | map()], keyword() | map()) :: component()
```

Builds an actions component.

# `add`

```elixir
@spec add(t(), component() | map() | String.t()) :: t()
```

Adds a component to the end of a card.

# `button`

```elixir
@spec button(String.t(), String.t(), keyword() | map()) :: component()
```

Builds a button component.

# `divider`

```elixir
@spec divider() :: component()
```

Builds a divider component.

# `fallback_text`

```elixir
@spec fallback_text(t()) :: String.t()
```

Returns the best text fallback for a card.

# `field`

```elixir
@spec field(String.t(), String.t(), keyword() | map()) :: component()
```

Builds a field component.

# `fields`

```elixir
@spec fields([component() | map()], keyword() | map()) :: component()
```

Builds a grouped fields component.

# `from_map`

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

Builds a card from serialized map data.

# `image`

```elixir
@spec image(String.t(), keyword() | map()) :: component()
```

Builds an image component.

# `link`

```elixir
@spec link(String.t(), String.t(), keyword() | map()) :: component()
```

Builds a text link component.

# `link_button`

```elixir
@spec link_button(String.t(), String.t(), keyword() | map()) :: component()
```

Builds a link button component.

# `new`

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

Creates a canonical card.

# `normalize`

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

Normalizes card input.

# `radio_select`

```elixir
@spec radio_select(String.t(), [component() | map()], keyword() | map()) ::
  component()
```

Builds a radio select component.

# `schema`

Returns the schema for cards.

# `section`

```elixir
@spec section(keyword() | map()) :: component()
```

Builds a section component.

# `select`

```elixir
@spec select(String.t(), [component() | map()], keyword() | map()) :: component()
```

Builds a select component.

# `select_option`

```elixir
@spec select_option(String.t(), String.t(), keyword() | map()) :: component()
```

Builds a select option component.

# `table`

```elixir
@spec table([String.t()], [[String.t()]], keyword() | map()) :: component()
```

Builds a table component.

# `text`

```elixir
@spec text(String.t(), keyword() | map()) :: component()
```

Builds a text component.

# `to_adapter_payload`

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

Returns a plain map suitable for adapter-specific rendering.

# `to_map`

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

Serializes a card into a plain map with a type marker.

# `to_markdown`

```elixir
@spec to_markdown(t()) :: Jido.Chat.Markdown.t()
```

Renders the card to canonical Markdown.

---

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