SplitButton
v1.0.7Updated 27 Aug 2026Primary action button with an attached caret segment that opens a dropdown of secondary actions. Both segments share Button's tone × emphasis × size API with correctly joined border radii, and the menu is fully keyboard
Preview
Live · 12 stories▸Why this is recommendedbuttondropdownmenuactions+4
The default, out-of-the-box SplitButton.
- ✓Save with alternate save modes (save & send, save as draft)
- ✓Export with format choices (PDF / print / copy link)
- ✓Record payment with method variants (cash / PromptPay / transfer)
- Tone × emphasis × size shared across both segments (full recipe matrix)
- Declarative items: label / icon / onSelect / destructive / disabled / separatorBefore
- Loading state on the primary segment (caret disabled while loading)
- Caret exposes aria-label ("More actions"), aria-haspopup and aria-expanded
- Controlled and uncontrolled menu open state
- Menu side/align control and full Radix keyboard navigation
- prefers-reduced-motion respected for caret rotation and menu animation
- ✕Unrelated action collections (use DropdownMenu alone)
- ✕Two equally weighted actions (use ButtonGroup)
Install
Ask your agent, or call the MCP tool directly. The resolved bundle is written into your project.
Usage
Tick variants in the left menu — each adds a tab with that variant’s real story source, the same code the preview above renders.
Props
itemsSecondary actions shown in the caret dropdown
yestoneSemantic tone shared by both segments
—emphasisVisual emphasis shared by both segments
—sizeSize shared by both segments
—loadingSpinner on the primary segment; caret disabled too
—caretLabelAccessible label for the caret trigger (default "More actions")
—openControlled open state of the dropdown menu
—onOpenChangeOpen-state change callback
—Every tonal component shares the same tone × emphasis API, so the pair looks identical across Button, Badge, Alert and more.