# `MishkaGervaz.Table.Types.Filter`
[🔗](https://github.com/mishka-group/mishka_gervaz/blob/v0.0.1-alpha.3/lib/mishka_gervaz/table/types/filter.ex#L1)

Built-in filter type registry.

Provides lookup for built-in filter types by atom name.
Custom filter types can be used directly by passing the module.

## Built-in Types

- `:text` - Text search input (default)
- `:select` - Dropdown select
- `:boolean` - Checkbox
- `:number` - Number input
- `:date` - Date picker
- `:date_range` - Date range picker
- `:relation` - Relationship select (auto-loads options)

## Usage in DSL

    filters do
      filter :name                           # Auto-detects type (text)
      filter :status, type: :select          # Built-in type
      filter :created_at, type: :date_range  # Built-in type
      filter :category, type: MyApp.TreeFilter # Custom type
    end

See `MishkaGervaz.Table.Behaviours.TypeRegistry` (base),
`MishkaGervaz.Table.Behaviours.FilterType`, and
`MishkaGervaz.Table.Entities.Filter`.

# `builtin?`

```elixir
@spec builtin?(atom()) :: boolean()
```

Check if type name is registered.

# `builtin_types`

```elixir
@spec builtin_types() :: [atom()]
```

List all built-in type names.

# `default`

```elixir
@spec default() :: module() | nil
```

Get the default type module.

# `get`

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

Get module by type name.

Returns the module for built-in types, or the type itself
if it's already a module (for custom types).

# `get_or_passthrough`

```elixir
@spec get_or_passthrough(atom()) :: module()
```

Get module, falling back to type itself for custom modules.

Unlike `get/1` which returns nil for unknown types,
this returns the type as-is (assuming it's a custom module).

# `resolve_type`

```elixir
@spec resolve_type(map()) :: module()
```

Resolve filter type module from filter configuration.

Checks in order:
1. If type is a module with `render_input/3`, use it directly
2. If type is an atom, look up in built-in registry
3. Otherwise, default to Text filter

## Examples

    iex> MishkaGervaz.Table.Types.Filter.resolve_type(%{type: :select})
    MishkaGervaz.Table.Types.Filter.Select

    iex> MishkaGervaz.Table.Types.Filter.resolve_type(%{})
    MishkaGervaz.Table.Types.Filter.Text

---

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