Desktop File / Edit / View bar. Exactly one menu open at a time;
hover a sibling trigger while a menu is open to switch without an
intermediate click. Soma owns active-menu state + cross-menu
ArrowLeft/Right + typeahead + focus return on Escape. Per-menu
Item / Sub / Checkbox / Radio chrome is shared with
DropdownMenu — same parts, same recipe, same
menu-indicator (checkbox/radio glyphs match the standalone
Checkbox / RadioGroup).
FileNew tabNew windowNew incognito (offline)Open recentproject.sveltereadme.mdpackage.jsonClear recentPrint…QuitEditUndoRedoCutCopyPasteFind…Replace…View
Show status bar
LayersRulerGridGuidesThemeLightDarkSystemHelpDocumentationKeyboard shortcutsAbout UIX
trace
{#if trace.length === 0}
click a trigger or arrow-nav between menus
{:else}
{#each trace.slice(0, 3) as entry}
{entry.event} · {entry.family}{entry.intent ? ' · ' + entry.intent : ''}{fmtTime(entry.at)}
{/each}
{/if}
active {activeMenu || '—'}
{#if tab === 'live'}
Controls
Soma owns active-menu state + keyboard nav across menus. Eidos
adds size on the root and propagates it to per-menu Content via context.
soma Provider props
eidos visual size
· bar height + trigger padding + font-size + per-menu density
Bound state
· mirrors of CheckboxItem / CheckboxGroup / RadioGroup
somaheadless · active-menu state + cross-menu navsvelte
{somaSnippet}
eidosvisual · bar surface + trigger states + size contextsvelte
{eidosSnippet}
{/if}
{#if tab === 'api'}
API reference
Three menubar-specific parts (Provider, Menu, Trigger, Content)
plus DropdownMenu's full inner surface for Item / Sub /
Checkbox / Radio. The inner parts share recipes with
DropdownMenu — the
menu-indicator shared partial (checkbox/radio glyphs) applies
automatically.
Provider
Prop
Type
Default
Description
value bindable
string
''
Identifier of the currently open menu. Empty = none open.
onValueChange
(value: string) => void
—
Fires when the active menu changes.
dir
'ltr' | 'rtl'
'ltr'
Direction for cross-menu arrow nav.
loop
boolean
true
Wrap cross-menu arrow at edges.
size eidos
ResponsiveProp<'sm' | 'md' | 'lg'>
'md'
Visual size — bar height + trigger padding + per-menu density (via context).
Menu
Prop
Type
Default
Description
value
string
—
Unique identifier for this menu inside the menubar.
onOpenChange / onOpenChangeComplete
(open: boolean) => void
—
Per-menu open/close + animation-settle callbacks.
Trigger
Prop
Type
Default
Description
disabled
boolean
false
Disable opening this menu via this trigger.
…native button attrs
PrimitiveButtonAttributes
—
Renders a native <button>; all HTML button attrs flow through.
Stamped via context — no need to pass per Content.
Inner parts (shared with DropdownMenu)
Item, Group, GroupHeading,
Separator, Arrow, CheckboxItem,
CheckboxGroup, RadioGroup, RadioItem,
Sub, SubTrigger, SubContent —
identical API to DropdownMenu.
Eidos re-uses those wrappers so the recipe (and the
menu-indicator shared partial) is one source of truth.
Selectors at src/uix/eidos/components/menubar/menubar.css
(bar + trigger only). Per-menu Content / Item / Sub / Checkbox / Radio
chrome is reused from dropdown-menu.css + the shared
menu-indicator.css partial because soma's Menubar re-exports
the DropdownMenu parts for those slots.
Follows the APG menubar pattern.
Bar exposes role="menubar"; each per-menu Content is
role="menu". Trigger has aria-haspopup="menu",
aria-expanded and aria-controls.
Keyboard
Key
Action
ArrowRight / ArrowLeft on Trigger
Move focus to next/previous trigger (wraps if loop=true; RTL inverts).
Enter / Space / ArrowDown on Trigger
Open the menu, focus first item.
ArrowUp / ArrowDown on Item
Move within the menu.
ArrowLeft / ArrowRight on Item
Close current menu, focus + open prev/next menu.
Escape
Close the menu, return focus to its Trigger.
Home / End
Jump to first / last item.
Letter
Typeahead — focus next item starting with that letter.
Pointer
Gesture
Behavior
Click trigger
Opens its menu (or closes if already open).
Hover sibling trigger while a menu is open
Switches to the hovered menu without an intermediate click.