# `Dala.Screen.Manager`
[🔗](https://github.com/manhvu/dala/blob/main/lib/dala/screen/manager.ex#L1)

Central registry for tracking all active screens in the application.

Screens auto-register when started and can be queried by id, name, or pid.
Monitors registered screens so crashed processes are cleaned up automatically.

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `dispatch`

```elixir
@spec dispatch(pid() | atom() | integer(), term()) :: :ok | {:error, :not_found}
```

Sends a message to a screen identified by `identifier` (id, name, or pid).

Returns `:ok` if sent, `{:error, :not_found}` if identifier doesn't match any screen.

# `list`

```elixir
@spec list() :: [%{id: integer(), name: atom() | nil, pid: pid(), module: module()}]
```

Lists all registered screens as a list of maps with `:id`, `:name`, `:pid`, `:module`.

# `next_id`

```elixir
@spec next_id() :: integer()
```

Generates a unique screen ID.

# `register`

```elixir
@spec register(integer(), atom() | nil, pid(), module()) :: :ok
```

Registers a screen with the registry.

- `id`: auto-generated unique integer ID
- `name`: optional screen name (atom or nil)
- `pid`: screen process PID
- `module`: screen module (e.g., `MyApp.HomeScreen`)

# `start_link`

```elixir
@spec start_link(keyword()) :: GenServer.on_start()
```

Starts the screen manager (supervision child spec).

# `unregister`

```elixir
@spec unregister(pid()) :: :ok
```

Unregisters a screen by its PID (called when screen stops).

---

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