Accordion

Accordion container component (Phlex) Wraps collapsible accordion items with Stimulus controller

Examples

Basic Accordion

A vertically stacked set of interactive headings that each reveal a section of content.

<%= render "ui/accordion", classes: "w-full" do %>
  <%= render "ui/accordion/item", value: "item-1" do %>
    <%= render "ui/accordion/trigger", content: "Is it accessible?" %>
    <%= render "ui/accordion/content", content: "Yes. It adheres to the WAI-ARIA design pattern." %>
  <% end %>
  <%= render "ui/accordion/item", value: "item-2" do %>
    <%= render "ui/accordion/trigger", content: "Is it styled?" %>
    <%= render "ui/accordion/content", content: "Yes. It comes with default styles that match shadcn/ui design system." %>
  <% end %>
  <%= render "ui/accordion/item", value: "item-3" do %>
    <%= render "ui/accordion/trigger", content: "Is it animated?" %>
    <%= render "ui/accordion/content", content: "Yes. It features smooth transitions when expanding and collapsing." %>
  <% end %>
<% end %>

Initially Open

An accordion item can be open by default.

This accordion item starts in the open state.

<%= render "ui/accordion", classes: "w-full" do %>
  <%= render "ui/accordion/item", value: "open-1", initial_open: true do %>
    <%= render "ui/accordion/trigger", content: "Getting Started" %>
    <%= render "ui/accordion/content", content: "This accordion item starts in the open state." %>
  <% end %>
  <%= render "ui/accordion/item", value: "open-2" do %>
    <%= render "ui/accordion/trigger", content: "Advanced Usage" %>
    <%= render "ui/accordion/content", content: "Learn about advanced features and customization options." %>
  <% end %>
<% end %>

Multiple Open

With type="multiple", multiple accordion items can be open at the same time.

We accept all major credit cards, PayPal, and bank transfers.

Standard shipping takes 3-5 business days.

<%= render "ui/accordion", classes: "w-full", type: "multiple" do %>
  <%= render "ui/accordion/item", value: "multi-1", initial_open: true do %>
    <%= render "ui/accordion/trigger", content: "What payment methods do you accept?" %>
    <%= render "ui/accordion/content", content: "We accept all major credit cards, PayPal, and bank transfers." %>
  <% end %>
  <%= render "ui/accordion/item", value: "multi-2", initial_open: true do %>
    <%= render "ui/accordion/trigger", content: "How long does shipping take?" %>
    <%= render "ui/accordion/content", content: "Standard shipping takes 3-5 business days." %>
  <% end %>
  <%= render "ui/accordion/item", value: "multi-3" do %>
    <%= render "ui/accordion/trigger", content: "What is your return policy?" %>
    <%= render "ui/accordion/content", content: "We offer a 30-day money-back guarantee on all products." %>
  <% end %>
<% end %>

Features

  • Keyboard navigation with arrow keys
  • Animation support

API Reference

Accordion

Parameters

NameTypeDefaultDescription
typeStringsingleThe type
collapsibleBooleanfalseThe collapsible

Content

Parameters

NameTypeDefaultDescription
item_valueStringnilThe item value
initial_openBooleanfalseThe initial open

Item

Parameters

NameTypeDefaultDescription
valueStringThe current value
initial_openBooleanfalseThe initial open

Trigger

Parameters

NameTypeDefaultDescription
item_valueStringnilThe item value
initial_openBooleanfalseThe initial open

Accessibility

Implements the WAI-ARIA Accordion pattern with proper roles, states, and keyboard navigation.

Keyboard Shortcuts

KeyDescription
EnterActivates the focused element
ArrowDownMoves focus to next item
ArrowUpMoves focus to previous item
HomeMoves focus to first item
EndMoves focus to last item

JavaScript

Stimulus Controller

ui--accordion

Values

NameTypeDescription
typeStringThe type

Actions

removeKeyboardNavigationtoggle