# `WorkflowStem.Projection`
[🔗](https://github.com/fosferon/workflow_stem/blob/main/lib/workflow_stem/projection.ex#L1)

Canonical UI projection contract returned by the stem runtime.

The projector layer in the host application must be able to render a workflow step and
submit events without understanding workflow logic.

# `t`

```elixir
@type t() :: %WorkflowStem.Projection{
  artifacts: map(),
  available_events: [atom() | String.t()],
  blocked_reasons: map(),
  breakpoint_hits: list(),
  current_state: atom() | String.t() | nil,
  errors: [map()],
  execution_id: WorkflowStem.Types.execution_id(),
  extensions: map(),
  profile: WorkflowStem.Types.profile(),
  subscriptions: [String.t()],
  trace: list(),
  ui: ui_descriptor() | nil
}
```

# `ui_descriptor`

```elixir
@type ui_descriptor() :: %{:key =&gt; atom() | String.t(), optional(:assigns) =&gt; map()}
```

---

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