# `MingaEditor.Extension.Sidebar.Entry`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/extension/sidebar/entry.ex#L1)

Source-owned sidebar registration metadata.

The sidebar registry stores this struct in ETS so layout, input, TUI rendering, and GUI emit share one typed shape instead of passing bare maps across module boundaries.

# `action_handler`

```elixir
@type action_handler() ::
  (MingaEditor.State.t(), String.t(), map() -&gt; MingaEditor.State.t())
  | {module(), atom()}
  | {module(), atom(), [term()]}
  | nil
```

Action handler invoked through the editor action pipeline.

# `placement`

```elixir
@type placement() :: :left
```

Sidebar placement.

# `source`

```elixir
@type source() :: Minga.Extension.ContributionCleanup.contribution_source()
```

Contribution source that owns a sidebar.

# `t`

```elixir
@type t() :: %MingaEditor.Extension.Sidebar.Entry{
  action_handler: action_handler(),
  badge_count: non_neg_integer() | nil,
  description: String.t(),
  display_name: String.t(),
  focused?: boolean(),
  icon: String.t(),
  id: String.t(),
  input_handler: module() | nil,
  placement: placement(),
  preferred_width: pos_integer(),
  priority: integer(),
  semantic_kind: String.t(),
  snapshot: MingaEditor.Extension.Sidebar.Snapshot.t(),
  source: source(),
  visible?: boolean()
}
```

# `publish_snapshot`

```elixir
@spec publish_snapshot(t(), MingaEditor.Extension.Sidebar.Snapshot.t()) :: t()
```

Updates the cached snapshot.

# `set_focused`

```elixir
@spec set_focused(t(), boolean()) :: t()
```

Updates focus.

# `set_visible`

```elixir
@spec set_visible(t(), boolean()) :: t()
```

Updates visibility.

---

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