Class: UI::Accordion

Inherits:
Base
  • Object
show all
Defined in:
app/views/ui/accordion.rb

Constant Summary

Constants inherited from Base

Base::TAILWIND_MERGER

Instance Method Summary collapse

Methods inherited from Base

#before_template

Constructor Details

#initialize(**props) ⇒ Accordion

Returns a new instance of Accordion.



9
10
11
12
# File 'app/views/ui/accordion.rb', line 9

def initialize(**props)
  super
  @items = []
end

Instance Method Details

#item(heading:, open: false, icon: nil, &block) ⇒ Object



14
15
16
17
# File 'app/views/ui/accordion.rb', line 14

def item(heading:, open: false, icon: nil, &block)
  @items << {heading:, open:, icon:, block:}
  nil
end

#view_template(&block) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/views/ui/accordion.rb', line 19

def view_template(&block)
  vanish(&block) if block_given?

  div(class: classes) do
    @items.each do |item|
      details(class: "group", open: item[:open]) do
        summary(class: summary_classes) do
          span(class: "inline-flex items-center gap-2") do
            plain item[:heading]
          end

          div(class: "text-gray-900") do
            render Icon(name: :chevron_down, variant: "outline", class: "size-3 block transition-all duration-300 group-open:rotate-180")
          end
        end
        div(class: content_classes) do
          item[:block].call
        end
      end
    end
  end
end