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

Pure, protocol-independent lifecycle owner for one Git toast.

Informational and successful toasts are timed. Warning and error toasts are
sticky. Identity matching makes replacement safe against stale dismissal.

# `action`

```elixir
@type action() :: :pull_and_retry | nil
```

# `id`

```elixir
@type id() :: non_neg_integer()
```

# `level`

```elixir
@type level() :: :info | :success | :warning | :error
```

# `t`

```elixir
@type t() :: %MingaEditor.Shell.Traditional.GitToast{
  action: action(),
  id: id(),
  level: level() | nil,
  message: String.t() | nil,
  timer: reference() | nil
}
```

# `auto_dismiss?`

```elixir
@spec auto_dismiss?(t()) :: boolean()
```

Returns whether this toast level should be auto-dismissed.

# `dismiss`

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

Dismisses the current toast manually.

# `dismiss`

```elixir
@spec dismiss(t(), id()) :: t()
```

Dismisses only when the expected identity is still current.

# `present?`

```elixir
@spec present?(t()) :: boolean()
```

Returns whether a toast is currently present.

# `publish`

```elixir
@spec publish(t(), String.t(), level(), action()) :: t()
```

Publishes a latest-wins toast and advances its identity.

# `record_timer`

```elixir
@spec record_timer(t(), id(), reference()) :: t()
```

Records a timer handle only for the current timed toast identity.

# `timeout`

```elixir
@spec timeout(t(), id()) :: t()
```

Times out only a matching timed toast; sticky levels ignore timeout delivery.

---

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