# `PhiaUi.ComponentRegistry`
[🔗](https://github.com/charlenopires/PhiaUI/blob/v0.1.17/lib/phia_ui/component_registry.ex#L1)

Source of truth for all 829 PhiaUI components.

Each entry is keyed by an atom and contains:

- `:name` — snake_case string identifier
- `:module` — the Elixir module that will be generated on ejection
- `:template_file` — path inside `priv/templates/` for the EEx source
- `:js_hooks` — list of JS hook names required by this component
- `:dependencies` — list of component atoms this component composes
- `:tier` — domain tier (`:primitive | :interactive | :form | :navigation | :shell | :widget | :collab`)
- `:shadcn_equivalent` — matching shadcn/ui component name, or `nil`
- `:status` — `:planned` or `:implemented`

## Usage

    # All components
    PhiaUi.ComponentRegistry.all()

    # Single lookup
    PhiaUi.ComponentRegistry.get(:button)

    # Filter by tier
    PhiaUi.ComponentRegistry.by_tier(:primitive)

# `component_meta`

```elixir
@type component_meta() :: %{
  name: String.t(),
  module: module(),
  template_file: String.t(),
  js_hooks: [String.t()],
  dependencies: [atom()],
  tier: tier(),
  shadcn_equivalent: String.t() | nil,
  status: status()
}
```

# `status`

```elixir
@type status() :: :planned | :implemented
```

# `tier`

```elixir
@type tier() ::
  :primitive
  | :interactive
  | :form
  | :navigation
  | :shell
  | :widget
  | :layout
  | :animation
  | :surface
  | :collab
```

# `all`

```elixir
@spec all() :: %{required(atom()) =&gt; component_meta()}
```

Returns the full registry map — all 829 component metadata entries.

# `by_tier`

```elixir
@spec by_tier(tier()) :: [component_meta()]
```

Returns all components in a given tier.

# `get`

```elixir
@spec get(atom()) :: component_meta() | nil
```

Returns metadata for a single component by key, or `nil` if not found.

---

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