Class: Vident::ClassListBuilder
- Inherits:
-
Object
- Object
- Vident::ClassListBuilder
- Defined in:
- lib/vident/class_list_builder.rb
Constant Summary collapse
- CLASSNAME_SEPARATOR =
" "
Instance Method Summary collapse
-
#build(extra_classes = nil, stimulus_class_names: []) ⇒ String?
Main method to build a final class list from multiple sources.
-
#initialize(tailwind_merger: nil, component_name: nil, root_element_attributes_classes: nil, root_element_classes: nil, root_element_html_class: nil, html_class: nil, additional_classes: nil) ⇒ ClassListBuilder
constructor
If the HTML “class” option is provided, it is taken in order of precedence of source.
Constructor Details
#initialize(tailwind_merger: nil, component_name: nil, root_element_attributes_classes: nil, root_element_classes: nil, root_element_html_class: nil, html_class: nil, additional_classes: nil) ⇒ ClassListBuilder
If the HTML “class” option is provided, it is taken in order of precedence of source. The order of precedence is: lowest | root_element_classes => whatever is returned .…… | root_element_attributes => the ‘html_options` value .…… | root_element(class: …) => the `class` value of the arguments passed to the root element highest | render MyComponent.new(html_options: { class: … }) => the `html_options` value The “classes” prop on the component on the other hand is used to add additional classes to the component. eg: render MyComponent.new(classes: “my-additional-class another-class”)
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/vident/class_list_builder.rb', line 17 def initialize(tailwind_merger: nil, component_name: nil, root_element_attributes_classes: nil, root_element_classes: nil, root_element_html_class: nil, html_class: nil, additional_classes: nil) @class_list = component_name ? [component_name] : [] @class_list.concat(Array.wrap(root_element_classes)) if root_element_classes && !root_element_attributes_classes && !root_element_html_class && !html_class @class_list.concat(Array.wrap(root_element_attributes_classes)) if root_element_attributes_classes && !root_element_html_class && !html_class @class_list.concat(Array.wrap(root_element_html_class)) if root_element_html_class && !html_class @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
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/vident/class_list_builder.rb', line 37 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 |