MishkaChelekom.Overrides (Mishka Chelekom v0.0.9-beta.3)

Copy Markdown View Source

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"
end

Register 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

class_for(component, part)

@spec class_for(atom(), atom()) :: String.t() | nil

Resolve the override classes for {component, part} across the configured modules (first non-nil wins), or nil if none.

configured()

The configured override modules, in resolution order.

merge(component, part, base, user \\ nil)

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.

override(component, part, classes)

(macro)

Declare an override for {component, part}.