# `Filament.Component`

Behaviour and macro for defining Filament components.

Components are modules that implement the render/1 callback and can be
composed together to build UIs. The defcomponent macro provides convenient
syntax for prop declarations and validation.

# `props`

```elixir
@type props() :: map()
```

# `rendered`

```elixir
@type rendered() :: Phoenix.LiveView.Rendered.t()
```

# `__filament_component__?`

```elixir
@callback __filament_component__?() :: boolean()
```

Marker function to identify Filament components

# `__props__`
*optional* 

```elixir
@callback __props__() :: keyword()
```

Returns component prop metadata

# `__validate_props__!`
*optional* 

```elixir
@callback __validate_props__!(props()) :: :ok | no_return()
```

Validates props map at runtime

# `render`

```elixir
@callback render(props()) :: rendered()
```

---

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