# `MingaEditor.Frontend.Emit.Context`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/frontend/emit/context.ex#L1)

Focused data contract for the emit pipeline.

Contains exactly what the emit stage needs from the render pipeline input,
decoupling it from `MingaEditor.State.t()`. The pipeline builds this context
in the Emit stage before calling `Emit.emit/4`.

# `t`

```elixir
@type t() :: %MingaEditor.Frontend.Emit.Context{
  agent_ui: MingaEditor.Agent.UIState.t(),
  buffers: MingaEditor.State.Buffers.t(),
  capabilities: MingaEditor.Frontend.Capabilities.t(),
  completion: Minga.Editing.Completion.t() | nil,
  config_state: Minga.RenderModel.UI.ConfigState.t() | nil,
  cursor_animate: boolean() | nil,
  editing: MingaEditor.VimState.t(),
  file_tree: MingaEditor.State.FileTree.t(),
  font_registry: MingaEditor.UI.FontRegistry.t(),
  force_keyframe?: boolean(),
  frame_seq: non_neg_integer() | nil,
  git_syncing: boolean(),
  git_toast: MingaEditor.Frontend.Protocol.GUI.git_toast() | nil,
  gui?: boolean(),
  highlight: MingaEditor.State.Highlighting.t(),
  keymap_scope: Minga.Keymap.Scope.scope_name(),
  last_input_seq: non_neg_integer(),
  layout: MingaEditor.Layout.t(),
  line_spacing: number() | nil,
  message_store: MingaEditor.UI.Panel.MessageStore.t(),
  notifications: MingaEditor.UI.NotificationCenter.t(),
  port_manager: pid(),
  search: MingaEditor.State.Search.t(),
  shell: module(),
  shell_id: atom(),
  shell_state: term(),
  sidebar_registry: MingaEditor.Extension.Sidebar.table(),
  status_bar_data: term(),
  surface_placements: [MingaEditor.Layout.SurfaceRegistry.wire_placement()],
  tab_bar: MingaEditor.State.TabBar.t() | nil,
  theme: MingaEditor.UI.Theme.t(),
  title: String.t(),
  viewport: MingaEditor.Viewport.t(),
  windows: MingaEditor.State.Windows.t()
}
```

# `from_editor_state`

```elixir
@spec from_editor_state(map()) :: t()
```

Builds an emit context from render pipeline input.

---

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