# `ExRatatui.Widgets.Paragraph`
[🔗](https://github.com/mcass19/ex_ratatui/blob/v0.8.2/lib/ex_ratatui/widgets/paragraph.ex#L1)

A text display widget with optional wrapping, alignment, and scrolling.

## Fields

  * `:text` - the text content. Accepts a plain string (with `\n` for newlines),
    a `%ExRatatui.Text.Span{}`, a `%ExRatatui.Text.Line{}`, a `%ExRatatui.Text{}`,
    or a list of spans/lines. See `ExRatatui.Text` for the full rich-text model.
  * `:style` - `%ExRatatui.Style{}` for foreground/background/modifiers
  * `:block` - optional `%ExRatatui.Widgets.Block{}` container (borders, title)
  * `:alignment` - `:left`, `:center`, or `:right`
  * `:wrap` - `true` to wrap text at widget boundary
  * `:scroll` - `{vertical, horizontal}` scroll offset

## Examples

    iex> %ExRatatui.Widgets.Paragraph{text: "Hello!", alignment: :center}
    %ExRatatui.Widgets.Paragraph{
      text: "Hello!",
      style: %ExRatatui.Style{},
      block: nil,
      alignment: :center,
      wrap: false,
      scroll: {0, 0}
    }

    iex> alias ExRatatui.Widgets.{Paragraph, Block}
    iex> alias ExRatatui.Style
    iex> %Paragraph{
    ...>   text: "Hello, world!",
    ...>   style: %Style{fg: :green, modifiers: [:bold]},
    ...>   alignment: :center,
    ...>   block: %Block{title: "Greeting", borders: [:all]}
    ...> }
    %ExRatatui.Widgets.Paragraph{
      text: "Hello, world!",
      style: %ExRatatui.Style{fg: :green, modifiers: [:bold]},
      block: %ExRatatui.Widgets.Block{title: "Greeting", borders: [:all]},
      alignment: :center,
      wrap: false,
      scroll: {0, 0}
    }

Rich text with per-span styling:

    iex> alias ExRatatui.Widgets.Paragraph
    iex> alias ExRatatui.Text.{Line, Span}
    iex> alias ExRatatui.Style
    iex> %Paragraph{
    ...>   text: [
    ...>     Line.new([Span.new("error: ", style: %Style{fg: :red, modifiers: [:bold]}),
    ...>               Span.new("something broke")])
    ...>   ]
    ...> }.text
    ...> |> length()
    1

# `t`

```elixir
@type t() :: %ExRatatui.Widgets.Paragraph{
  alignment: :left | :center | :right,
  block: ExRatatui.Widgets.Block.t() | nil,
  scroll: {non_neg_integer(), non_neg_integer()},
  style: ExRatatui.Style.t(),
  text: text_like(),
  wrap: boolean()
}
```

# `text_like`

```elixir
@type text_like() ::
  String.t()
  | ExRatatui.Text.Span.t()
  | ExRatatui.Text.Line.t()
  | ExRatatui.Text.t()
  | [ExRatatui.Text.Line.t()]
  | [ExRatatui.Text.Span.t()]
```

---

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