# `Emerge.Engine.DiffState`
[🔗](https://github.com/emerge-elixir/emerge/blob/v0.2.1/lib/emerge/engine/diff_state.ex#L1)

Stateful diff helper that keeps numeric id assignments stable.

# `t`

```elixir
@type t() :: %Emerge.Engine.DiffState{
  event_registry: %{
    required(binary()) =&gt; %{required(term()) =&gt; {pid(), term()}}
  },
  tree: Emerge.Engine.Element.t() | nil,
  vdom: Emerge.Engine.VNode.t() | nil
}
```

# `build_event_registry`

# `diff_and_encode`

```elixir
@spec diff_and_encode(t(), Emerge.Engine.Element.t()) ::
  {binary(), t(), Emerge.Engine.Element.t()}
```

Compute patches for a new tree and return {patch_binary, updated_state, assigned_tree}.

# `dispatch_click`

```elixir
@spec dispatch_click(t(), binary()) :: :ok
```

# `dispatch_event`

```elixir
@spec dispatch_event(t(), binary(), term()) :: :ok
```

# `dispatch_event`

```elixir
@spec dispatch_event(t(), binary(), term(), term()) :: :ok
```

# `lookup_event`

```elixir
@spec lookup_event(t(), binary(), term()) :: {:ok, {pid(), term()}} | :error
```

# `new`

Initialize diff state with an optional tree.

---

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