A primary action joined to a ▾ menu trigger — Save | ▾ → secondary actions.
Pure composition: <ButtonGroup attached> +
<Button> +
<DropdownMenu>. The ▾ trigger is
auto-rendered and inherits the group's variant / size / color; only the ▾ opens the menu.
0 own events — interactive by composition.
Root props propagate to both buttons; DropdownMenu provider props (open,
modal, onOpenChange…) pass through. The menu surface
(Menu / Item / Separator / Group /
CheckboxItem / RadioGroup / Sub…) is re-exported from
DropdownMenu.
Override the ▾ glyph. The default chevron rotates while open.
menuLabel
string
'More actions'
Accessible name for the ▾ trigger.
aria-label
string
—
Accessible name for the split group.
<SplitButton.Menu> props · the float
The menu IS a DropdownMenu.Content with
split-button-aware defaults: it anchors to the whole group, matches its width, and sits a
gap below it. Every Content positioning prop (side, align,
collisionPadding…) still passes through.
Prop
Type
Default
Description
matchAnchorWidth
ResponsiveProp<boolean>
true
Min width tracks the split surface (the anchor width); content can grow it.
sideOffset
number
canonical
Gap below the button. Unset → resolved from the size's --space-* step (density × scaling aware); pass a number to override.
Same model (primary + menu). UIX shares variant/size/color to both via the ButtonGroup context automatically.
ant-design
<Dropdown.Button>
Same split. UIX's menu is the full DropdownMenu (groups/checkbox/radio/submenus), not a flat list.
mui
ButtonGroup + Menu recipe
MUI documents it as a recipe; UIX ships it as a component with the chevron-rotates affordance.
{/if}
{#if tab === 'morfo'}
morfo · declarative contract
scope-eidos — no soma runtime. The morfo declares the split-specific contract: the
role="group" provider, the data-state that rotates the chevron,
and the Primary / Trigger parts (structural identities over the composed Button /
DropdownMenu.Trigger). Source: src/uix/morfo/components/split-button.ts.
SplitButton declares no events of its own — it is interactive by composition.
The primary fires contact-activate (Button), the ▾ fires
emerge-open / emerge-close (DropdownMenu), and each item fires
commit-select (DropdownMenu). Exercise the stage and watch the trace strip.
Layout + the segmented seam come from <ButtonGroup attached>;
Button + DropdownMenu paint the buttons. SplitButton's own CSS at
src/uix/eidos/components/split-button/split-button.css owns the
split-specific affordances: the ▾ rotates open and stays a slim tail, and the menu
tracks the surface width, scales with size, and sits a canonical gap below.