# `Cinder.Theme.DslModule`
[🔗](https://github.com/sevenseacat/cinder/blob/v0.16.0/lib/cinder/theme/dsl_module.ex#L1)

DSL module for creating custom Cinder themes.

This module provides the `use Cinder.Theme` functionality that allows
users to define custom themes using a simple macro-based DSL.

## Usage

    defmodule MyApp.CustomTheme do
      use Cinder.Theme

      # Table
      set :container_class, "my-custom-table-container"
      set :row_class, "my-custom-row hover:bg-blue-50"

      # Filters
      set :filter_container_class, "my-filter-container"
      set :filter_text_input_class, "my-text-input"
    end

## Theme Inheritance

You can extend built-in theme presets:

    defmodule MyApp.DarkTheme do
      use Cinder.Theme
      extends :modern

      # Override just what you need
      set :container_class, "bg-gray-900 text-white"
      set :row_class, "border-gray-700 hover:bg-gray-800"
    end

Or extend your own custom themes:

    defmodule MyApp.BaseTheme do
      use Cinder.Theme

      set :container_class, "my-base-container"
      set :row_class, "my-base-row"
    end

    defmodule MyApp.SpecializedTheme do
      use Cinder.Theme
      extends MyApp.BaseTheme

      # Override container, inherit row_class from BaseTheme
      set :container_class, "my-specialized-container"
    end

**Note**: When extending custom themes, make sure the base theme module is
compiled before the extending theme. In Phoenix applications, define your
base themes before themes that extend them, or place them in separate files
with appropriate compilation order.

# `__before_compile__`
*macro* 

Before compile callback to generate the theme configuration function.

# `component`
*macro* 

Deprecated: component grouping is no longer needed.

This macro is kept for backwards compatibility but does nothing.
Run `mix cinder.upgrade` to update your themes to the new flat syntax.

# `extends`
*macro* 

Macro for extending from another theme.

# `resolve_base_theme`

Resolves a base theme at compile time.

# `resolve_theme`

Resolves a theme module's DSL configuration into a theme map.

# `set`
*macro* 

Macro for setting a theme property.

# `validate_theme`

Validates that all overrides in a theme module are valid.

---

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