# `MingaEditor.Shell.Chrome`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/shell/chrome.ex#L1)

Behaviour: how a shell builds chrome (tab bar, modeline, file tree,
overlays) and renders complete frames.

Carved out of `MingaEditor.Shell` so the rendering responsibility is
declared as a focused contract independent of input routing or buffer
lifecycle.

# `build_chrome`

```elixir
@callback build_chrome(
  editor_state :: term(),
  layout :: MingaEditor.Layout.t(),
  scrolls :: map(),
  cursor_info :: term()
) :: MingaEditor.RenderPipeline.Chrome.t()
```

Returns a chrome struct with draw lists for each UI region. The shell
decides which chrome elements exist and how they render.

# `render`

```elixir
@callback render(editor_state :: term()) :: term()
```

Runs the full render pipeline (content, chrome, compose, emit) and
sends commands to the frontend. Returns updated state with cached
render data.

---

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