# `Jido.Chat.Card`
[🔗](https://github.com/agentjido/jido_chat/blob/v1.2.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.

# `area_chart`

```elixir
@spec area_chart(list(), keyword() | map()) :: component()
```

Builds an area chart component.

# `area_chart`

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

# `bar_chart`

```elixir
@spec bar_chart(list(), keyword() | map()) :: component()
```

Builds a bar chart component.

# `bar_chart`

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

# `button`

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

Builds a button component.

# `chart`

```elixir
@spec chart(
  :pie | :bar | :area | :line | atom() | String.t(),
  list(),
  keyword() | map()
) :: component()
```

Builds a chart component from a chart type and data points.

# `chart`

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

Builds a named-series chart with ordered shared categories.

# `divider`

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

Builds a divider component.

# `dynamic_select`

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

Builds a dynamic select. This is an alias for `external_select/2`.

# `external_select`

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

Builds a select whose options load from an external source.

# `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.

# `line_chart`

```elixir
@spec line_chart(list(), keyword() | map()) :: component()
```

Builds a line chart component.

# `line_chart`

```elixir
@spec line_chart([String.t()], list(), keyword() | map()) :: 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() | String.t()) ::
  component()
```

Builds a link button component.

# `link_button`

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

Builds a link button with an explicit action ID and options.

# `new`

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

Creates a canonical card.

# `normalize`

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

Normalizes card input.

# `pie_chart`

```elixir
@spec pie_chart(list(), keyword() | map()) :: component()
```

Builds a pie chart component.

# `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.

# `select_option_group`

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

Builds a select option group.

# `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*
