# `MingaEditor.State.Render`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/state/render.ex#L1)

Editor-owned render orchestration state.

This value owns the renderer connection, render correlation, semantic message
store, and layout observations committed from one editor revision. Renderer
process caches remain owned by `MingaEditor.Renderer.Server`.

# `t`

```elixir
@type t() :: %MingaEditor.State.Render{
  focus_tree: MingaEditor.FocusTree.t() | nil,
  last_cursor_line: non_neg_integer() | nil,
  layout: MingaEditor.Layout.t() | nil,
  message_store: MingaEditor.UI.Panel.MessageStore.t(),
  render_correlation: term(),
  renderer: pid() | nil
}
```

# `accept_correlation`

```elixir
@spec accept_correlation(t(), MingaEditor.State.RenderCorrelation.t()) :: t()
```

Commits correlation state produced by a render scheduling transition.

# `accept_message_store`

```elixir
@spec accept_message_store(t(), MingaEditor.UI.Panel.MessageStore.t()) :: t()
```

Commits a semantic message store transition.

# `append_message`

```elixir
@spec append_message(
  t(),
  String.t(),
  MingaEditor.UI.Panel.MessageStore.level(),
  atom() | nil
) :: t()
```

Appends a structured editor log message to the semantic message store.

# `cache_layout`

```elixir
@spec cache_layout(t(), MingaEditor.Layout.t() | nil, MingaEditor.FocusTree.t() | nil) ::
  t()
```

Commits layout and focus observations derived from the same editor revision.

# `connect_renderer`

```elixir
@spec connect_renderer(t(), pid() | nil) :: t()
```

Records the renderer process currently serving this editor.

# `invalidate_layout`

```elixir
@spec invalidate_layout(t()) :: t()
```

Invalidates layout observations after a shell transition.

# `new`

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

Creates render state with a fresh semantic message store.

# `observe_cursor_line`

```elixir
@spec observe_cursor_line(t(), non_neg_integer() | nil) :: t()
```

Remembers the last cursor line included in frontend presentation.

# `stage_layout`

```elixir
@spec stage_layout(t(), MingaEditor.Layout.t()) :: t()
```

Stages a layout while its focus tree is derived from the full editor state.

---

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