Menubar

Menubar - Phlex implementation

Examples

Default

A visually persistent menu common in desktop applications.

<%= render "ui/menubar" do %>
  <%= render "ui/menubar/menu" do %>
    <%= render "ui/menubar/trigger" do %>File<% end %>
    <%= render "ui/menubar/content" do %>
      <%= render "ui/menubar/item" do %>
        New Tab
        <%= render "ui/menubar/shortcut" do %>⌘T<% end %>
      <% end %>
      <%= render "ui/menubar/item" do %>
        New Window
        <%= render "ui/menubar/shortcut" do %>⌘N<% end %>
      <% end %>
      <%= render "ui/menubar/separator" %>
      <%= render "ui/menubar/item" do %>
        Print...
        <%= render "ui/menubar/shortcut" do %>⌘P<% end %>
      <% end %>
    <% end %>
  <% end %>
  <%= render "ui/menubar/menu" do %>
    <%= render "ui/menubar/trigger" do %>Edit<% end %>
    <%= render "ui/menubar/content" do %>
      <%= render "ui/menubar/item" do %>
        Undo
        <%= render "ui/menubar/shortcut" do %>⌘Z<% end %>
      <% end %>
      <%= render "ui/menubar/item" do %>
        Redo
        <%= render "ui/menubar/shortcut" do %>⇧⌘Z<% end %>
      <% end %>
      <%= render "ui/menubar/separator" %>
      <%= render "ui/menubar/item" do %>Cut<% end %>
      <%= render "ui/menubar/item" do %>Copy<% end %>
      <%= render "ui/menubar/item" do %>Paste<% end %>
    <% end %>
  <% end %>
<% end %>

With Checkbox Items

Menubar with checkbox items for toggling options.

<%= render "ui/menubar" do %>
  <%= render "ui/menubar/menu" do %>
    <%= render "ui/menubar/trigger" do %>View<% end %>
    <%= render "ui/menubar/content" do %>
      <%= render "ui/menubar/checkbox_item", checked: true do %>
        Show Toolbar
        <%= render "ui/menubar/shortcut" do %>⌘T<% end %>
      <% end %>
      <%= render "ui/menubar/checkbox_item" do %>
        Show Statusbar
        <%= render "ui/menubar/shortcut" do %>⌘S<% end %>
      <% end %>
      <%= render "ui/menubar/separator" %>
      <%= render "ui/menubar/checkbox_item", checked: true do %>Show Sidebar<% end %>
    <% end %>
  <% end %>
<% end %>

With Radio Items

Menubar with radio items for selecting one option from a group.

<%= render "ui/menubar" do %>
  <%= render "ui/menubar/menu" do %>
    <%= render "ui/menubar/trigger" do %>Format<% end %>
    <%= render "ui/menubar/content" do %>
      <%= render "ui/menubar/label" do %>Font Size<% end %>
      <%= render "ui/menubar/separator" %>
      <%= render "ui/menubar/radio_group", value: "medium" do %>
        <%= render "ui/menubar/radio_item", value: "small" do %>Small<% end %>
        <%= render "ui/menubar/radio_item", value: "medium" do %>Medium<% end %>
        <%= render "ui/menubar/radio_item", value: "large" do %>Large<% end %>
      <% end %>
    <% end %>
  <% end %>
<% end %>

Features

  • Custom styling with Tailwind classes
  • ARIA attributes for accessibility
  • Keyboard navigation with arrow keys
  • Click outside to close

API Reference

Menubar

Container for horizontal menu bar with Stimulus controller for interactivity.

Parameters

NameTypeDefaultDescription
loopBooleanfalseThe loop
aria_labelStringnilThe aria label

Content

Container for menu items that appears when trigger is activated.

Parameters

NameTypeDefaultDescription
alignStringstartAlignment within container
sideStringbottomWhich side to display on

Item

A selectable menu item.

Parameters

NameTypeDefaultDescription
variantSymbol:defaultVisual style variant
insetBooleanfalseThe inset
disabledBooleanfalseWhether the element is disabled

Label

Non-interactive label/header for menu sections.

Parameters

NameTypeDefaultDescription
insetBooleanfalseThe inset

Separator

Visual divider between menu items.

Shortcut

Displays keyboard shortcut hint for menu items.

Sub

Container for submenu within the menubar menu.

Sub Content

Container for submenu items.

Sub Trigger

Menu item that opens a submenu.

Parameters

NameTypeDefaultDescription
insetBooleanfalseThe inset
disabledBooleanfalseWhether the element is disabled

Trigger

Button that toggles the menu content open/closed.

Parameters

NameTypeDefaultDescription
firstBooleanfalseThe first

Accessibility

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

ARIA Attributes

  • aria-label
  • role="menubar"

Keyboard Shortcuts

KeyDescription
EnterActivates the focused element
SpaceActivates the focused element
EscapeCloses the component
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--menubar

Values

NameTypeDescription
openBooleanControls open state

Actions

initializeTriggerstoggleopenMenucloseAlltrackHoveredItemselectItemopenSubmenuopenSubmenuWithAutoUpdatecloseSubmenuAndCleanupcloseSubmenucancelSubmenuClosecloseSiblingSubmenusteardownKeyboardNavigationnavigateToNextMenunavigateToPreviousMenuopenSubmenuWithKeyboardcloseCurrentSubmenuactivateCurrentItemtoggleCheckboxselectRadio