Module: Wabi::Variants

Included in:
Base
Defined in:
lib/wabi/variants.rb

Overview

CVA-style variant DSL. Use by extending into a class:

class Button
  extend Wabi::Variants
  variants do
    base "btn"
    variant :size, { sm: "h-8", md: "h-10" }, default: :md
  end
end

Button.new.tokens(size: :sm) # => "btn h-8"

Defined Under Namespace

Classes: Definition

Instance Method Summary collapse

Instance Method Details

#variants(&block) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/wabi/variants.rb', line 16

def variants(&block)
  definition = Definition.new
  definition.instance_eval(&block)
  @_wabi_variants = definition
  define_method(:tokens) do |**opts|
    self.class.instance_variable_get(:@_wabi_variants).resolve(**opts)
  end
end