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

Pure aggregate for Traditional sidebar selection and built-in surfaces.

The selected sidebar, Git status panel pair, and Observatory lifecycle are
kept together so opening, closing, and replacing one built-in surface cannot
leave an unrelated stale selection behind.

# `git_status_tui_state`

```elixir
@type git_status_tui_state() :: MingaEditor.GitStatus.TUIState.t()
```

# `t`

```elixir
@type t() :: %MingaEditor.Shell.Traditional.Sidebars{
  active_id: String.t() | nil,
  git_status_panel: MingaEditor.GitStatus.Panel.t() | nil,
  git_status_tui_state: git_status_tui_state() | nil,
  observatory: MingaEditor.Shell.Traditional.Observatory.t()
}
```

# `active_id`

```elixir
@spec active_id(t()) :: String.t() | nil
```

Returns the selected native sidebar id.

# `close_git_status`

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

Closes Git status and clears both shared and TUI-specific state.

# `close_observatory`

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

Closes Observatory and clears its selection when selected.

# `complete_observatory`

```elixir
@spec complete_observatory(
  t(),
  reference(),
  MingaEditor.Observatory.Data.t(),
  MingaEditor.Shell.Traditional.Observatory.timer()
) :: {:accepted | :stale, t()}
```

Completes a matching Observatory collection.

# `expire_observatory`

```elixir
@spec expire_observatory(t(), reference()) :: {:collect | :stale, t()}
```

Expires a matching Observatory refresh token.

# `git_status_panel`

```elixir
@spec git_status_panel(t()) :: MingaEditor.GitStatus.Panel.t() | nil
```

Returns the Git status panel.

# `git_status_tui_state`

```elixir
@spec git_status_tui_state(t()) :: git_status_tui_state() | nil
```

Returns the TUI-specific Git status view state.

# `inspect_observatory`

```elixir
@spec inspect_observatory(t(), MingaEditor.Observatory.Inspection.t() | nil) :: t()
```

Shows or dismisses Observatory process inspection.

# `observatory`

```elixir
@spec observatory(t()) :: MingaEditor.Shell.Traditional.Observatory.t()
```

Returns the Observatory lifecycle value.

# `open_observatory`

```elixir
@spec open_observatory(t(), MingaEditor.Shell.Traditional.Observatory.timer() | nil) ::
  t()
```

Opens and selects the Observatory surface.

# `replace_git_status`

```elixir
@spec replace_git_status(t(), MingaEditor.GitStatus.Panel.t() | nil) :: t()
```

Replaces the Git status panel while retaining its TUI view state.

# `replace_git_status_tui`

```elixir
@spec replace_git_status_tui(t(), git_status_tui_state() | nil) :: t()
```

Replaces the TUI-specific Git status view state.

# `replace_observatory_data`

```elixir
@spec replace_observatory_data(t(), MingaEditor.Observatory.Data.t() | nil) :: t()
```

Replaces Observatory data without changing refresh correlation.

# `select`

```elixir
@spec select(t(), String.t() | nil) :: t()
```

Selects a visible sidebar, or clears selection with nil.

---

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