Sha256: da6475a8d3b860c4a1f255e0c82ba50fc711ba9546b73cc1959acd77df1b7ae7

Contents?: true

Size: 1.21 KB

Versions: 5

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

module Bs5
  class AccordionComponent < ViewComponent::Base
    include ComponentsHelper
    include ViewComponent::Slotable

    with_slot :item, collection: true, class_name: 'Item'

    def initialize(flush: false)
      @flush = flush
    end

    def flush?
      @flush
    end

    def id
      "accordion-#{object_id}"
    end

    def component_class
      class_names = ['accordion']
      class_names << %w[accordion-flush] if flush?
      class_names.join(' ')
    end

    class Item < ViewComponent::Slot
      attr_reader :title

      def initialize(title:, collapsed: true)
        @title = title
        @collapsed = collapsed
      end

      def id
        object_id
      end

      def header_id
        "header-#{id}"
      end

      def collapse_id
        "collapse-#{id}"
      end

      def collapsed?
        @collapsed
      end

      def button_class
        class_names = ['accordion-button']
        class_names << %w[collapsed] if collapsed?
        class_names.join(' ')
      end

      def collapse_class
        class_names = %w[accordion-collapse collapse]
        class_names << %w[show] unless collapsed?
        class_names.join(' ')
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
bs5-0.0.18 app/components/bs5/accordion_component.rb
bs5-0.0.17 app/components/bs5/accordion_component.rb
bs5-0.0.16 app/components/bs5/accordion_component.rb
bs5-0.0.15 app/components/bs5/accordion_component.rb
bs5-0.0.14 app/components/bs5/accordion_component.rb