LiveStyle.Compiler.CSS.Plugin behaviour (LiveStyle v0.12.0)

View Source

Behaviour for CSS plugins in the compilation pipeline.

Each plugin is responsible for generating a specific type of CSS output from the manifest (e.g., variables, keyframes, atomic rules).

Implementing a Plugin

defmodule MyAppWeb.CSS.CustomPlugin do
  @behaviour LiveStyle.Compiler.CSS.Plugin

  @impl true
  def generate(manifest) do
    # Generate CSS from manifest
    "/* custom CSS */"
  end
end

Registering Plugins

Add custom plugins to the pipeline via configuration:

config :live_style,
  css_plugins: [
    {100, MyAppWeb.CSS.CustomPlugin}
  ]

The tuple format is {priority, module} where lower priority runs first.

Default Plugins

The default pipeline (in order):

  1. LiveStyle.Compiler.CSS.Vars - @property rules for typed vars (priority 100)
  2. LiveStyle.Compiler.CSS.DynamicProperties - @property rules for dynamic vars (priority 150)
  3. LiveStyle.Compiler.CSS.Vars - :root variables (priority 200)
  4. LiveStyle.Compiler.CSS.Keyframes - @keyframes (priority 300)
  5. LiveStyle.Compiler.CSS.PositionTry - @position-try (priority 400)
  6. LiveStyle.Compiler.CSS.ViewTransitionClasses - view transitions (priority 500)
  7. LiveStyle.Compiler.CSS.Classes - style classes (priority 600)
  8. LiveStyle.Compiler.CSS.ThemeClasses - theme overrides (priority 700)

Summary

Callbacks

Generates CSS output from the manifest.

Functions

Returns custom plugins from configuration.

Returns the default plugin pipeline.

Returns the list of registered plugins, sorted by priority.

Callbacks

generate(t)

@callback generate(LiveStyle.Manifest.t()) :: String.t()

Generates CSS output from the manifest.

Returns a CSS string (may be empty if no relevant content).

Functions

custom_plugins()

@spec custom_plugins() :: [{integer(), {module(), atom()}}]

Returns custom plugins from configuration.

Custom plugins can be specified as:

  • {priority, module} - calls module.generate/1
  • {priority, {module, :function}} - calls module.function/1

default_plugins()

@spec default_plugins() :: [{integer(), {module(), atom()}}]

Returns the default plugin pipeline.

The order matches StyleX:

  1. @property rules (typed vars)
  2. @property rules (dynamic vars)
  3. @keyframes animations
  4. :root variables
  5. @position-try rules
  6. View transition rules
  7. Atomic style rules
  8. Theme override rules

plugins()

@spec plugins() :: [{integer(), {module(), atom()}}]

Returns the list of registered plugins, sorted by priority.

Each entry is a {priority, {module, function}} tuple.