AshFormBuilder.Themes (AshFormBuilder v0.4.0)

View Source

Pluggable theme registry.

Themes can be referenced anywhere in the library by either:

Built-in shortnames

atommodule
:defaultAshFormBuilder.Themes.Default
:shadcnAshFormBuilder.Themes.Shadcn
:glassmorphismAshFormBuilder.Themes.Glassmorphism
:mishkaAshFormBuilder.Theme.MishkaTheme

Registering your own theme

# config/config.exs
config :ash_form_builder, :themes,
  my_brand: MyAppWeb.Themes.MyBrand,
  retro: MyAppWeb.Themes.Retro

Then reference by short name from the DSL:

forms do
  form :create do
    theme :my_brand
  end
end

Implement the AshFormBuilder.Theme behaviour and you're done — no module-name conventions or path tricks required.

Summary

Functions

All registered theme names (built-in + user).

Returns true if the given atom is a registered theme name.

Resolve a theme reference to a module.

Functions

list()

@spec list() :: [atom()]

All registered theme names (built-in + user).

registered?(name)

@spec registered?(atom()) :: boolean()

Returns true if the given atom is a registered theme name.

resolve(name)

@spec resolve(atom() | module()) :: module()

Resolve a theme reference to a module.

Accepts a module (returned as-is), a known short atom, or a user-registered atom. Raises KeyError if the atom is unknown so typos surface immediately at compile time when used from a DSL.

Examples

iex> AshFormBuilder.Themes.resolve(:default)
AshFormBuilder.Themes.Default

iex> AshFormBuilder.Themes.resolve(AshFormBuilder.Themes.Shadcn)
AshFormBuilder.Themes.Shadcn