Viora LogoViora UI
Login

Split Button

A compound button joining a primary action with a dropdown menu of secondary actions and spring-animated width.

split-button.tsx
Loading source code...

Installation

npx viora-ui@latest add split-button
pnpm dlx viora-ui@latest add split-button
npx viora-ui@latest add split-button
bunx viora-ui@latest add split-button

Step 1: Install Dependencies

npm install @radix-ui/react-dropdown-menu motion lucide-react

Step 2: Copy the Source Code Copy split-button.tsx into your @/components/arc/split-button/ directory.

Usage

import { SplitButton } from "@/components/arc/split-button/split-button";

export function MergeButton() {
  return (
    <SplitButton
      label="Merge pull request"
      onClick={merge}
      actions={[
        { label: "Squash and merge", onSelect: squash },
        { label: "Rebase and merge", onSelect: rebase },
        { label: "Close pull request", onSelect: close, destructive: true },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
labelstring—Label for the main action button.
actionsSplitButtonAction[][]Array of actions for the dropdown menu.
onClick() => void—Click handler for the primary button half.
iconReactNode—Optional icon displayed alongside label.
variant"primary" | "secondary""primary"Button visual variant.
disabledbooleanfalseDisables both buttons.

Built by Otis

Last updated: 10/12/2026