# `MishkaCmsBuilderWeb.SidebarMenu`
[🔗](https://github.com/mishka-group/mishka_cms_builder/blob/v0.0.1-alpha.2/lib/mishka_cms_builder_web/sidebar_menu.ex#L5)

The visual editor's admin pages — a `"sidebar:menus"` plugin (`MishkaCmsCore.Sidebar`).

The editor is reached from a page, layout, component or error-page row, never from the nav, so
both of its LiveViews are declared as pages (`nav: false`) rather than links. The canvas is a
declaration of its own because it is a mount of its own: it answers inside an iframe, and an
undeclared page is one `MishkaCmsCore.Sidebar.PageGuard` refuses.

Both open to any name that opens an editor — the page, layout, component and error-page areas and
`admin:dashboard:code` — and the editor then asks for the type it opens on. The names are read
from `MishkaCmsBuilder.Plugins.Settings.opens/0`, the same ones that write the
editor's own settings, so the two lists cannot drift. Neither page names an `extension:`: that
would make the editor a switch each site can turn off, and it is not one.

The core names none of this, so a host without the editor has no builder pages at all.

# `error_return`

```elixir
@type error_return() ::
  {:error, [%{action: atom(), field: atom(), message: String.t()}]}
```

# `okey_return`

```elixir
@type okey_return() :: {:ok, struct() | map() | module() | [any()]}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `config`

```elixir
@spec config() :: keyword()
```

# `config`

```elixir
@spec config(atom()) :: any()
```

# `enable`

```elixir
@spec enable() :: okey_return() | error_return()
```

# `get`

```elixir
@spec get() :: keyword()
```

# `health_check`

```elixir
@spec health_check() :: :ok | {:degraded, term()} | {:error, term()}
```

Optional. See `c:MishkaInstaller.Event.Hook.health_check/0`. Override to report health.

# `items`

```elixir
@spec items() :: [MishkaCmsCore.Sidebar.Item.t()]
```

Every admin page the editor owns, each declared as a page and none as a link.

# `on_dependency_error`

```elixir
@spec on_dependency_error(term()) :: term()
```

Optional. See `c:MishkaInstaller.Event.Hook.on_dependency_error/1`. Override to react.

# `permissions`

```elixir
@spec permissions(String.t()) :: [
  MishkaCmsCore.Accounts.Checks.AccessPermissions.requirement()
]
```

The permissions declared for one of the editor's pages. See `MishkaCmsCore.Sidebar.permissions/2`.

# `register`

```elixir
@spec register() :: okey_return() | error_return()
```

# `restart`

```elixir
@spec restart() :: okey_return() | error_return()
```

# `start`

```elixir
@spec start() :: okey_return() | error_return()
```

# `start_link`

# `stop`

```elixir
@spec stop() :: okey_return() | error_return()
```

# `unregister`

```elixir
@spec unregister() :: okey_return() | error_return()
```

---

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