Centralized, Pyro-style overrides for component part classes (Layer 3, opt-in).
A project declares overrides in one place without editing generated component files:
defmodule MyAppWeb.Overrides do
use MishkaChelekom.Overrides
override :button, :root, "rounded-full"
override :dialog, :popup, "shadow-2xl ring-1 ring-black/5"
endRegister override modules (first match wins — exactly Pyro's resolution order); the default preset is conventionally appended last:
config :mishka_chelekom, :overrides, [MyAppWeb.Overrides, MishkaChelekom.Presets.Default]At render time, components compose base ++ override ++ user_class via merge/4 so the
caller's class still wins (through MishkaChelekom.CSS). Generated components remain
zero-dependency; this engine is only used when a project opts into it.
Summary
Functions
Resolve the override classes for {component, part} across the configured modules
(first non-nil wins), or nil if none.
The configured override modules, in resolution order.
Compose a part's final class string: component base, then the resolved override, then the
caller's user class — later wins via MishkaChelekom.CSS.classes/1.
Declare an override for {component, part}.
Functions
Resolve the override classes for {component, part} across the configured modules
(first non-nil wins), or nil if none.
The configured override modules, in resolution order.
@spec merge(atom(), atom(), MishkaChelekom.CSS.input(), MishkaChelekom.CSS.input()) :: String.t()
Compose a part's final class string: component base, then the resolved override, then the
caller's user class — later wins via MishkaChelekom.CSS.classes/1.
Declare an override for {component, part}.