Toggle Group

A set of two-state buttons that can be toggled on or off, supporting single or multiple selection.

Examples

Default

A set of two-state buttons that can be toggled on or off.

<%= render "ui/toggle_group", type: "single", variant: "outline" do %>
  <%= render "ui/toggle_group/item", value: "left" do %>Left<% end %>
  <%= render "ui/toggle_group/item", value: "center" do %>Center<% end %>
  <%= render "ui/toggle_group/item", value: "right" do %>Right<% end %>
<% end %>

Multiple Selection

Multiple items can be selected simultaneously.

<%= render "ui/toggle_group", type: "multiple", variant: "outline" do %>
  <%= render "ui/toggle_group/item", value: "bold" do %>B<% end %>
  <%= render "ui/toggle_group/item", value: "italic" do %>I<% end %>
  <%= render "ui/toggle_group/item", value: "underline" do %>U<% end %>
<% end %>

Outline

Toggle group with outline variant.

<%= render "ui/toggle_group", type: "single", variant: "outline" do %>
  <%= render "ui/toggle_group/item", value: "bold" do %>
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 12h12"/><path d="M6 18h12"/><path d="M6 6h12"/></svg>
  <% end %>
  <%= render "ui/toggle_group/item", value: "italic" do %>
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6h8"/><path d="M8 18h8"/><path d="M12 6v12"/></svg>
  <% end %>
  <%= render "ui/toggle_group/item", value: "underline" do %>
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 6h-12"/><path d="M17 18h-12"/><path d="M3 12h18"/></svg>
  <% end %>
<% end %>

Small

A small toggle group.

<%= render "ui/toggle_group", type: "single", variant: "outline", size: "sm" do %>
  <%= render "ui/toggle_group/item", value: "bold" do %>B<% end %>
  <%= render "ui/toggle_group/item", value: "italic" do %>I<% end %>
  <%= render "ui/toggle_group/item", value: "underline" do %>U<% end %>
<% end %>

Large

A large toggle group.

<%= render "ui/toggle_group", type: "single", variant: "outline", size: "lg" do %>
  <%= render "ui/toggle_group/item", value: "bold" do %>B<% end %>
  <%= render "ui/toggle_group/item", value: "italic" do %>I<% end %>
  <%= render "ui/toggle_group/item", value: "underline" do %>U<% end %>
<% end %>

Disabled

A disabled toggle group.

<%= render "ui/toggle_group", type: "single", variant: "outline", disabled: true do %>
  <%= render "ui/toggle_group/item", value: "bold" do %>B<% end %>
  <%= render "ui/toggle_group/item", value: "italic" do %>I<% end %>
  <%= render "ui/toggle_group/item", value: "underline" do %>U<% end %>
<% end %>

Features

  • Custom styling with Tailwind classes
  • Single or multiple selection modes
  • Variant styles (default, outline)
  • Multiple sizes (sm, default, lg)
  • Spacing control between items
  • Disabled state support
  • ARIA attributes for accessibility

API Reference

Toggle Group

A container that groups related toggle items together with consistent styling.

Parameters

NameTypeDefaultDescription
typeStringsingleSelection mode (single or multiple)
valueString | ArraynilInitial selected value(s)
variantStringdefaultVisual style variant (default or outline)
orientationSymbol:horizontalOrientation of the group (horizontal or vertical)
spacingInteger0Gap spacing between items (0, 1, 2, etc.)

Data Attributes

AttributeValuesDescription
data-controllerStimulus controller for toggle group behavior
data-orientationThe current orientation of the group
data-spacingSpacing between items
data-variantVisual style variant

Item

An individual toggle button within the group.

Parameters

NameTypeDefaultDescription
valueStringnilThe value associated with this item
pressedBooleanfalseWhether the item is currently pressed/selected
disabledBooleanfalseWhether the item is disabled
sizeStringdefaultSize of the item (sm, default, lg)

Data Attributes

AttributeValuesDescription
data-stateCurrent pressed state of the item
data-valueThe value of this item
data-disabledPresent when item is disabled

Accessibility

Uses role="radiogroup" for single selection or role="group" for multiple selection, with appropriate aria-checked/aria-pressed states.

ARIA Attributes