# `Cinder.Filters.Registry`
[🔗](https://github.com/sevenseacat/cinder/blob/v0.16.0/lib/cinder/filters/registry.ex#L1)

Registry for managing available filter types in Cinder.

Provides centralized registration and discovery of filter implementations,
along with default filter type inference based on data types.

# `all_filters`

Returns a map of all registered filter types to their implementing modules.

# `all_filters_with_custom`

Gets all filters including custom registered ones.

Custom filters take precedence over built-in filters if there's a naming conflict
(though registration prevents this from happening).

## Returns
Map of all filter types to their implementing modules

## Examples

    iex> Cinder.Filters.Registry.all_filters_with_custom()
    %{
      text: Cinder.Filters.Text,
      select: Cinder.Filters.Select,
      slider: MyApp.Filters.Slider
    }

# `custom_filter?`

Checks if a filter type is a custom (user-registered) filter.

## Parameters
- `filter_type` - Filter type atom to check

## Returns
Boolean indicating if the filter type is custom

## Examples

    iex> Cinder.Filters.Registry.custom_filter?(:slider)
    true

    iex> Cinder.Filters.Registry.custom_filter?(:text)
    false

# `default_options`

Gets default filter options for a given filter type.

## Parameters
- `filter_type` - Filter type atom
- `column_key` - Column key for context (optional)

## Returns
Keyword list of default options for the filter type

# `filter_types`

Returns a list of all registered filter type atoms.

## Examples

    iex> Cinder.Filters.Registry.filter_types()
    [:text, :select, :multi_select, :multi_checkboxes, :date_range, :number_range, :boolean]

# `get_filter`

Gets the implementing module for a filter type.

Checks both built-in and custom registered filters.

## Examples

    iex> Cinder.Filters.Registry.get_filter(:text)
    Cinder.Filters.Text

    iex> Cinder.Filters.Registry.get_filter(:slider)
    MyApp.Filters.Slider

    iex> Cinder.Filters.Registry.get_filter(:unknown)
    nil

# `infer_filter_type`

Infers the appropriate filter type based on Ash resource attribute.

## Parameters
- `attribute` - Ash resource attribute definition
- `column_key` - Column key for context

## Returns
Atom representing the inferred filter type

# `list_custom_filters`

Lists all registered custom filter types.

## Returns
Map of custom filter types to their implementing modules

## Examples

    iex> Cinder.Filters.Registry.list_custom_filters()
    %{slider: MyApp.Filters.Slider, color_picker: MyApp.Filters.ColorPicker}

# `register_config_filter`

# `register_config_filters`

Registers custom filters from application configuration.

This function should be called during application startup to register
filters defined in config files.

## Configuration

    config :cinder, :filters, %{
      slider: MyApp.Filters.Slider,
      color_picker: MyApp.Filters.ColorPicker
    }

## Returns
:ok if all filters registered successfully, {:error, [reasons]} if any failed

# `registered?`

Checks if a filter type is registered.

Checks both built-in and custom registered filters.

## Examples

    iex> Cinder.Filters.Registry.registered?(:text)
    true

    iex> Cinder.Filters.Registry.registered?(:slider)
    true

    iex> Cinder.Filters.Registry.registered?(:unknown)
    false

# `validate_custom_filters`

Validates that all registered custom filters are properly implemented.

This function can be called at application startup to ensure all custom filters
are valid and will work correctly.

## Returns
:ok if all filters are valid, {:error, [reasons]} if any are invalid

## Examples

    iex> Cinder.Filters.Registry.validate_custom_filters()
    :ok

    iex> Cinder.Filters.Registry.validate_custom_filters()
    {:error, ["Module MyApp.Filters.BrokenSlider does not implement required function render/4"]}

---

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