Tessina UI
ConfiguratorGitHubIntroduction
InstallationUsageTheming
ComponentsAccordionAction SheetAlertAlertDialogArea ChartAspectRatioAvatarBadgeBannerBar ChartBottom NavBreadcrumbButtonButtonGroupCalendarCardCarouselChartChatBubbleCheckboxChipCodeBlockCollapsibleColor PickerComboboxCommandContainerContextMenuDate PickerDividerDrawerDropdown MenuEmptyStateFABFieldFieldsetFile UploadFile Upload 2FlexFormGridHoverCardIconButtonLabelLine ChartLinkMenubarMeterModalNavigation MenuNumberFieldOTP InputPaginationPie ChartPopoverProgressPromptInputRadar ChartRadial ChartRadioRatingScroll AreaSearchSegmentedControlSelectShortcutSidebarSkeletonSliderSpacerSpinnerSplit ButtonStackStatusStepperSurfaceSwitchTableTabsTextareaTime PickerToastToggleButtonToggleGroupToolbarTooltipTop Header DesktopTop Header Mobile
Contributing
Components

Split Button

A compound button with a primary action and a dropdown trigger for secondary options

Playground

Installation

pnpm add @tessinaui/ui

Usage

import { SplitButton } from "@tessinaui/ui";
<SplitButton label="Create project">
  <SplitButton.Item>Blank project</SplitButton.Item>
  <SplitButton.Item>Use a template</SplitButton.Item>
</SplitButton>

Examples

Default

A basic split button with a primary action and a dropdown of secondary options.

Variants

Four visual styles — primary, secondary, ghost, and outline.

Intents

Semantic color intents for the primary action — error, warning, success, and info.

Sizes

Five sizes from xs to xl; xs through lg shown here.

With Icon

A leading icon rendered before the label.

States

Disabled and loading states applied to both the action and the dropdown trigger.

API Reference

SplitButton Props

PropTypeDefaultDescription
labelstring—Text label for the primary action button
variant"primary" | "secondary" | "ghost" | "outline" | "on-color""primary"Visual style variant
intent"none" | "error" | "warning" | "success" | "info""none"Semantic color intent
size"xs" | "sm" | "md" | "lg" | "xl""md"Size of the button
rounded"full" | "lg" | "md" | "sm" | "none""full"Border radius style
leadingIconReact.ReactNode—Icon rendered before the label
trailingIconReact.ReactNode—Icon rendered after the label
onClickMouseEventHandler—Handler for the primary action click
disabledbooleanfalseDisables both action and dropdown trigger
loadingbooleanfalseShows a spinner in the action section
openboolean—Controlled open state of the dropdown
onOpenChange(open: boolean) => void—Called when dropdown open state changes
dropdownAlign"start" | "center" | "end""end"Alignment of the dropdown menu
childrenReact.ReactNode—Dropdown menu items

SplitButton.Item Props

Extends @radix-ui/react-dropdown-menu Item props.

PropTypeDescription
disabledbooleanDisables the menu item
onSelect(event: Event) => voidCalled when item is selected

SplitButton.Separator

A horizontal line divider between menu items. No additional props.

SplitButton.Label

A non-interactive label for grouping items.

Sizes

SizeHeightUse case
xs32pxCompact toolbars
sm40pxSecondary actions
md48pxDefault, most use cases
lg56pxProminent actions
xl96pxHero / landing page CTAs

Accessibility

The Split Button component:

  • Two focusable buttons — action button and dropdown trigger — each with their own Tab stop
  • Dropdown trigger has aria-label="More options"
  • Uses Radix UI's DropdownMenu primitive for full keyboard navigation (arrow keys, Enter, Escape)
  • Focus ring on both buttons (focus-visible:ring-2) meets WCAG 2.1 AA
  • disabled propagates to both sections and sets pointer-events-none
  • aria-disabled is set automatically by Radix when the trigger is disabled

Spinner

Animated loading indicators with ring, dots, and pulse variants, five sizes, intent colors including brand primary, optional track, label positions, and LTR/RTL support.

Stack

A flex-based layout primitive for arranging items in a row or column. Configurable direction, gap, alignment, justification, wrapping, reversal, dividers, inline display, polymorphic rendering, and LTR/RTL support. Ships with HStack and VStack convenience wrappers.

On this page

PlaygroundInstallationUsageExamplesDefaultVariantsIntentsSizesWith IconStatesAPI ReferenceSplitButton PropsSplitButton.Item PropsSplitButton.SeparatorSplitButton.LabelSizesAccessibility