Class: Vident::ClassListBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/vident/class_list_builder.rb

Constant Summary collapse

CLASSNAME_SEPARATOR =
" "

Instance Method Summary collapse

Constructor Details

#initialize(tailwind_merger: nil, component_name: nil, element_classes: nil, html_class: nil, additional_classes: nil) ⇒ ClassListBuilder

Returns a new instance of ClassListBuilder.



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/vident/class_list_builder.rb', line 9

def initialize(tailwind_merger: nil, component_name: nil, element_classes: nil, html_class: nil, additional_classes: nil)
  @class_list = component_name ? [component_name] : []
  @class_list.concat(Array.wrap(element_classes)) if element_classes
  @class_list.concat(Array.wrap(html_class)) if html_class
  @class_list.concat(Array.wrap(additional_classes)) if additional_classes
  @class_list.compact!
  @tailwind_merger = tailwind_merger

  if @tailwind_merger && !defined?(::TailwindMerge::Merger)
    raise LoadError, "TailwindMerge gem is required when using tailwind_merger:. Add 'gem \"tailwind_merge\"' to your Gemfile."
  end
end

Instance Method Details

#build(extra_classes = nil, stimulus_class_names: []) ⇒ String?

Main method to build a final class list from multiple sources

Parameters:

  • class_lists (Array<String, Array, StimulusClass, nil>)

    Multiple class sources to merge

  • stimulus_class_names (Array<Symbol, String>) (defaults to: [])

    Optional names of stimulus classes to include

Returns:

  • (String, nil)

    Final space-separated class string or nil if no classes



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/vident/class_list_builder.rb', line 26

def build(extra_classes = nil, stimulus_class_names: [])
  class_list = @class_list + Array.wrap(extra_classes).compact
  flattened_classes = flatten_and_normalize_classes(class_list, stimulus_class_names)
  return nil if flattened_classes.empty?

  deduplicated_classes = dedupe_classes(flattened_classes)
  return nil if deduplicated_classes.blank?

  class_string = deduplicated_classes.join(CLASSNAME_SEPARATOR)

  if @tailwind_merger
    dedupe_with_tailwind(class_string)
  else
    class_string
  end
end