# `MishkaCmsCore.Dashboard.Widgets.OverviewMetrics`
[🔗](https://github.com/mishka-group/mishka_cms_core/blob/v0.0.1/lib/mishka_cms_core/dashboard/widgets/overview_metrics.ex#L5)

Dashboard widget (a `dashboard:widgets` plugin): the full-width dark KPI band at the top of the
board — Sites, Users, Drafts, Open issues, Bloggers, Versions. Anyone holding anything on the
dashboard sees the band; a tile shows its count only to whoever may see the card it comes from,
and `—` to anyone else.

It's a `:panel` widget (renders its own edge-to-edge dark surface, no white card), registered and
ordered like every other widget so an admin can reorder or hide it. Counts are aggregated from the
sibling widgets' `load/1`, resolved at *runtime* (`Module.concat` + `Code.ensure_loaded?`) so core
keeps no compile-time dependency on the blog/document extensions — a KPI whose source extension
isn't installed simply falls back to `—`.

A tile's accent is a colour on the row, but it reaches the markup as a whole class through
`ink_class/1` and `dot_class/1` rather than as a `style` attribute: CSP has no nonce for an
attribute, so `style-src-attr` can only be closed by there being none. Written out one clause per
colour because Tailwind reads source text — an interpolated class name has no rule at all, which
is what `MishkaCmsWeb.InterpolatedClassTest` guards.

# `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.

# `load`

Loads the six KPI tiles, each count resolved from its source widget (runtime-guarded).

# `on_dependency_error`

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

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

# `register`

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

# `render`

# `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()
```

# `widget`

```elixir
@spec widget() :: MishkaCmsCore.Dashboard.Widget.t()
```

This widget's descriptor.

---

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