Accordion

Exclusive accordions using the HTML details element. When you want to say a lot but not all at once.

What is this?

This is an accordion component for collapsible content.

Usage

<%= ui.accordion name: "faq" do %>
  <%= ui.accordion_summary "Question 1" %>
  <%= ui.accordion_body do %>
    <p>Answer to question 1.</p>
  <% end %>
<% end %>

<%= ui.accordion name: "faq" do %>
  <%= ui.accordion_summary "Question 2" %>
  <%= ui.accordion_body do %>
    <p>Answer to question 2.</p>
  <% end %>
<% end %>
Props
PropTypeDefaultDescription
nameStringnilName attribute for grouping accordions. Accordions with the same name will close when another opens (exclusive behavior).
openBooleanfalseWhether the accordion is initially expanded.

Also accepts any HTML attributes via **options (e.g., id:, data:, aria:). class: is also supported for custom styling.

SubcomponentsUse subcomponents below or any HTML.
NameHelperDescription
accordion_summaryui.accordion_summaryThe clickable header that toggles the accordion open/closed.
accordion_bodyui.accordion_bodyThe collapsible content area of the accordion.

Examples

Accordion group

First Item

Content for the first accordion item.

Second Item

Content for the second accordion item.

Third Item

Content for the third accordion item.

<div class="divide-y divide-border">
  <%= ui.accordion name: "tech-specs", open: true do %>
    <%= ui.accordion_summary "First Item" %>
    <%= ui.accordion_body do %>
      <p>Content for the first accordion item.</p>
    <% end %>
  <% end %>

  <%= ui.accordion name: "tech-specs" do %>
    <%= ui.accordion_summary "Second Item" %>
    <%= ui.accordion_body do %>
      <p>Content for the second accordion item.</p>
    <% end %>
  <% end %>

  <%= ui.accordion name: "tech-specs" do %>
    <%= ui.accordion_summary "Third Item" %>
    <%= ui.accordion_body do %>
      <p>Content for the third accordion item.</p>
    <% end %>
  <% end %>
</div>

Independent accordions

Standalone Accordion

This accordion operates independently without a name group.

<%= ui.accordion do %>
  <%= ui.accordion_summary "Standalone Accordion" %>
  <%= ui.accordion_body do %>
    <p>This accordion operates independently without a name group.</p>
  <% end %>
<% end %>