Tessina UI
Tessina UI
GitHubIntroduction
InstallationUsageTheming
Components
ButtonIconButtonLinkSpinnerBadgeAvatarStatusChipShortcutSkeletonSurfaceProgressMeterRating
LabelFieldFieldsetCheckboxRadioSwitchSliderSelectComboboxSearchTextareaNumberFieldDate PickerTime PickerOTP InputFile UploadCalendar
AlertBannerToastTooltip
TabsAccordionCollapsibleBreadcrumbPaginationStepperSegmentedControlButtonGroupToggleButtonToggleGroupToolbarNavigation MenuMenubarBottom NavSidebar
Split ButtonFABDropdown MenuContextMenuCommandPopoverHoverCard
ContainerStackFlexGridAspectRatioSpacerCardCarouselDividerScroll Area
Table
ChatBubblePromptInputCodeBlock
ModalAlertDialogDrawerAction SheetTop Header MobileTop Header DesktopEmptyStateForm
Contributing
ComponentsAction Blocks

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>

Showcase

All variants, intents, sizes, and states:

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

Sidebar

A composable, accessible sidebar shell for app layouts. Desktop and mobile modes, three variants (inset, floating, classic), collapsible to icon rail or off-canvas, keyboard shortcut toggle, LTR and RTL. Built on Base UI Collapsible with a full compound-component API.

FAB

A pill-shaped floating action button with optional leading icon, label, and trailing icon

On this page

PlaygroundInstallationUsageShowcaseAPI ReferenceSplitButton PropsSplitButton.Item PropsSplitButton.SeparatorSplitButton.LabelSizesAccessibility