Tabs

Tabs container component (Phlex) Root component for tabbed interface with keyboard navigation

Examples

Default

A set of layered sections of content shown one at a time.

Make changes to your account here.

<%= render "ui/tabs", default_value: "account" do %>
  <%= render "ui/tabs/list" do %>
    <%= render "ui/tabs/trigger", value: "account", content: "Account" %>
    <%= render "ui/tabs/trigger", value: "password", content: "Password" %>
  <% end %>
  <%= render "ui/tabs/content", value: "account" do %>
    <p class="text-sm text-muted-foreground">Make changes to your account here.</p>
  <% end %>
  <%= render "ui/tabs/content", value: "password" do %>
    <p class="text-sm text-muted-foreground">Change your password here.</p>
  <% end %>
<% end %>

With Cards

Tabs containing card content with forms.

Account
Make changes to your account here.
<%= render "ui/tabs", default_value: "account", classes: "w-[400px]" do %>
  <%= render "ui/tabs/list", classes: "grid w-full grid-cols-2" do %>
    <%= render "ui/tabs/trigger", value: "account", content: "Account" %>
    <%= render "ui/tabs/trigger", value: "password", content: "Password" %>
  <% end %>
  <%= render "ui/tabs/content", value: "account" do %>
    <%= render "ui/card" do %>
      <%= render "ui/card/header" do %>
        <%= render "ui/card/title" do %>Account<% end %>
        <%= render "ui/card/description" do %>Make changes to your account here.<% end %>
      <% end %>
      <%= render "ui/card/content", classes: "space-y-2" do %>
        <div class="space-y-1">
          <%= render "ui/label", for: "name" do %>Name<% end %>
          <%= render "ui/input", id: "name", value: "Pedro Duarte" %>
        </div>
        <div class="space-y-1">
          <%= render "ui/label", for: "username" do %>Username<% end %>
          <%= render "ui/input", id: "username", value: "@peduarte" %>
        </div>
      <% end %>
      <%= render "ui/card/footer" do %>
        <%= render "ui/button" do %>Save changes<% end %>
      <% end %>
    <% end %>
  <% end %>
  <%= render "ui/tabs/content", value: "password" do %>
    <%= render "ui/card" do %>
      <%= render "ui/card/header" do %>
        <%= render "ui/card/title" do %>Password<% end %>
        <%= render "ui/card/description" do %>Change your password here.<% end %>
      <% end %>
      <%= render "ui/card/content", classes: "space-y-2" do %>
        <div class="space-y-1">
          <%= render "ui/label", for: "current" do %>Current password<% end %>
          <%= render "ui/input", id: "current", type: "password" %>
        </div>
        <div class="space-y-1">
          <%= render "ui/label", for: "new" do %>New password<% end %>
          <%= render "ui/input", id: "new", type: "password" %>
        </div>
      <% end %>
      <%= render "ui/card/footer" do %>
        <%= render "ui/button" do %>Save password<% end %>
      <% end %>
    <% end %>
  <% end %>
<% end %>

Multiple Tabs

Tabs with more than two options.

Overview of your dashboard and key metrics.

<%= render "ui/tabs", default_value: "overview" do %>
  <%= render "ui/tabs/list" do %>
    <%= render "ui/tabs/trigger", value: "overview", content: "Overview" %>
    <%= render "ui/tabs/trigger", value: "analytics", content: "Analytics" %>
    <%= render "ui/tabs/trigger", value: "reports", content: "Reports" %>
    <%= render "ui/tabs/trigger", value: "notifications", content: "Notifications" %>
  <% end %>
  <%= render "ui/tabs/content", value: "overview" do %>
    <p class="text-sm text-muted-foreground">Overview of your dashboard and key metrics.</p>
  <% end %>
  <%= render "ui/tabs/content", value: "analytics" do %>
    <p class="text-sm text-muted-foreground">Detailed analytics and performance data.</p>
  <% end %>
  <%= render "ui/tabs/content", value: "reports" do %>
    <p class="text-sm text-muted-foreground">Generate and view reports.</p>
  <% end %>
  <%= render "ui/tabs/content", value: "notifications" do %>
    <p class="text-sm text-muted-foreground">Manage your notification preferences.</p>
  <% end %>
<% end %>

Features

  • Keyboard navigation with arrow keys

API Reference

Tabs

Parameters

NameTypeDefaultDescription
default_valueStringThe default value
orientationStringhorizontalOrientation (horizontal or vertical)
activation_modeStringautomaticThe activation mode

Content

Parameters

NameTypeDefaultDescription
valueStringThe current value
default_valueStringThe default value
orientationStringhorizontalOrientation (horizontal or vertical)

List

Parameters

NameTypeDefaultDescription
orientationStringhorizontalOrientation (horizontal or vertical)

Trigger

Parameters

NameTypeDefaultDescription
valueStringThe current value
default_valueStringThe default value
orientationStringhorizontalOrientation (horizontal or vertical)
disabledBooleanfalseWhether the element is disabled

Accessibility

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

Keyboard Shortcuts

KeyDescription
ArrowDownMoves focus to next item
ArrowUpMoves focus to previous item
ArrowLeftMoves focus left or decreases value
ArrowRightMoves focus right or increases value
HomeMoves focus to first item
EndMoves focus to last item
TabMoves focus to next focusable element

JavaScript

Stimulus Controller

ui--tabs

Values

NameTypeDescription
defaultValueStringThe defaultValue

Actions

selectTabactivateTriggerdeactivateTriggershowContenthideContent