Skip to content
hightouchUI

Design system

v42.1.0

Split button

A split button pairs a primary action with a caret that opens a menu of alternate actions. Use it when there's one clearly preferred action, but the user occasionally needs a related one.

Example

Usage

Compose the menu with the same MenuItem and MenuDivider components used by Menu. Pass them through the menu prop, wrapping multiple items in a fragment.

Variant

Both segments share the same variant so the button reads as a single control.

Icon

Use icon to add a leading icon to the primary action.

Loading

The isLoading prop shows a spinner on the primary action and disables the caret while the action is in flight.

Disabled

The isDisabled prop disables both segments.

Combinations

Primary
Secondary
Small
Medium
Large

Guidelines

When to use it

  • When there's a single default action plus a small number of closely related alternates (for example, "Activate" with "Submit for approval").
  • When showing every action as a separate button would clutter the surface.

When not to use it

  • If the actions are equally weighted, use a Button Group instead.
  • If there's no clearly preferred action, use a Menu.

Content

  • Use sentence case for the primary label and menu items.
  • Make the primary action the one most users want most of the time.

Props

SplitButton

NameDefaultDescription
isLoading

booleanToggles the loading state.
isDisabled

booleanToggles the disabled state.
isJustified

booleanTake up an entire available container width.
children

ReactNodeButton text.
size

"sm" | "md" | "lg" | "xl"Determines the height of the button.
icon

ComponentType<SVGAttributes<SVGElement>>Primary icon that's displayed on the left. Only icon or imageUrl can be set at the same time.
variant"primary"Exclude<NonNullable<ButtonProps["variant"]>, "link">Button variant, which determines the appearance of both segments. The link variant is unsupported: it has no fill or border for the segments to share.
onClick

(event: MouseEvent<HTMLButtonElement>) => voidCallback for when the primary action is clicked.
menuAriaLabel"More actions"stringLabel of the caret menu trigger for screen readers.
menu

ReactNodeAlternate actions shown when the caret is clicked. Pass the MenuItems (and optional MenuDividers) directly; they're wrapped in a MenuList.
menuPlacement"end"MenuProps["placement"]Placement of the menu.