Module: UI::AccordionItemBehavior

Included in:
AccordionItem, AccordionItemComponent
Defined in:
app/behaviors/ui/accordion_item_behavior.rb

Overview

Shared behavior for Accordion Item component Handles classes, states, and data attributes

Instance Method Summary collapse

Instance Method Details

#item_base_classesObject

Base CSS classes for accordion item



9
10
11
# File 'app/behaviors/ui/accordion_item_behavior.rb', line 9

def item_base_classes
  "border-b border-border last:border-b-0"
end

#item_classesObject

Merge base classes with custom classes using TailwindMerge



14
15
16
# File 'app/behaviors/ui/accordion_item_behavior.rb', line 14

def item_classes
  TailwindMerge::Merger.new.merge([item_base_classes, @classes].compact.join(" "))
end

#item_data_attributesObject

Data attributes for Stimulus target



19
20
21
22
23
24
# File 'app/behaviors/ui/accordion_item_behavior.rb', line 19

def item_data_attributes
  {
    ui__accordion_target: "item",
    value: @value || ""
  }
end

#item_html_attributesObject

Build complete HTML attributes hash for accordion item



38
39
40
41
42
43
44
45
46
# File 'app/behaviors/ui/accordion_item_behavior.rb', line 38

def item_html_attributes
  base_attrs = @attributes&.except(:data) || {}
  base_attrs.merge(
    class: item_classes,
    "data-state": item_state,
    "data-orientation": @orientation || "vertical",
    data: merged_item_data_attributes
  )
end

#item_stateObject

Determine initial state



33
34
35
# File 'app/behaviors/ui/accordion_item_behavior.rb', line 33

def item_state
  @initial_open ? "open" : "closed"
end

#merged_item_data_attributesObject

Merge user-provided data attributes



27
28
29
30
# File 'app/behaviors/ui/accordion_item_behavior.rb', line 27

def merged_item_data_attributes
  user_data = @attributes&.fetch(:data, {}) || {}
  user_data.merge(item_data_attributes)
end