# `Vibe.Presentation.Widget`
[🔗](https://github.com/elixir-vibe/vibe/blob/v0.2.3/lib/vibe/presentation/widget.ex#L1)

Renderer-neutral presentation widget shared by TUI and web surfaces.

# `placement`

```elixir
@type placement() :: :above_editor | :below_editor | :sidebar
```

# `t`

```elixir
@type t() :: %Vibe.Presentation.Widget{
  id: String.t(),
  placement: placement(),
  props: map(),
  type: widget_type(),
  version: non_neg_integer()
}
```

# `widget_type`

```elixir
@type widget_type() :: :lines | :markdown | :status | :panel | :progress | :list
```

# `lines`

```elixir
@spec lines(String.t() | atom(), [String.t()] | String.t(), keyword()) :: t()
```

# `markdown`

```elixir
@spec markdown(String.t() | atom(), String.t(), keyword()) :: t()
```

# `new`

```elixir
@spec new(String.t() | atom(), widget_type(), map(), keyword()) :: t()
```

# `normalize`

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

# `progress`

```elixir
@spec progress(
  String.t() | atom(),
  keyword()
) :: t()
```

---

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