Split Button
Pair a default action with a secondary menu without crowding the toolbar.
Overview
Pair a default action with a secondary menu without crowding the toolbar. This entry is written as a registry-ready component spec: useful to humans, copyable by AI tools, and easy to map to a future shadcn registry item.
Anatomy
- Root
- Label
- Leading icon
- Trailing icon
- Loading indicator
Variants
- default
- muted
- outline
- ghost
- destructive
States
- default
- hover
- focus-visible
- active
- disabled
- loading
Component spec
Styling tokens
Accessibility notes
- Use semantic HTML or the matching Radix primitive before custom roles.
- Keep focus-visible states obvious without adding decorative glow.
- Ensure icon-only controls have an accessible label.
- Do not rely on color alone for state or validation.
shadcn implementation
Use Radix Dropdown Menu through the matching shadcn component when possible.
Use shadcn tokens for background, border, ring, muted text, radius, and state variants. Keep component-specific classes local and copyable.
HeroUI mapping
Split Button can map to a HeroUI component only as an optional adapter. Keep UnBoring copy and token language framework-neutral.
Create a Split Button component for an AI-generated interface using shadcn-style composition. Use shadcn/ui button + dropdown-menu as the implementation base. The component should support default, muted, outline, ghost, destructive variants and default, hover, focus-visible, active, disabled, loading states. Include clear anatomy for Root, Label, Leading icon, Trailing icon, Loading indicator. Keep the visual language black, white, and gray with subtle borders, practical spacing, accessible focus states, and no decorative noise.
Do not invent a custom component API when shadcn/ui button + dropdown-menu already covers the base behavior. Avoid random gradients, oversized radii, unclear disabled states, missing labels, icon-only controls without accessible names, and variants that change layout unexpectedly.
Base: shadcn/ui button + dropdown-menu Primitive: Radix Dropdown Menu Tailwind: Use shadcn tokens for background, border, ring, muted text, radius, and state variants. Keep component-specific classes local and copyable. Dependency: Use Radix Dropdown Menu through the matching shadcn component when possible.
{
"id": "split-button",
"category": "components",
"trigger": "user interaction",
"target": "split button",
"feeling": [
"polished",
"practical",
"precise"
],
"palette": [
"black",
"white",
"gray"
],
"radius": "8px or less",
"border": "1px solid rgba(237, 237, 236, 0.14)",
"background": "neutral surface with subtle contrast",
"foreground": "high-contrast text",
"mutedForeground": "secondary text at 68-74% contrast",
"focusRing": "2px neutral ring with offset",
"shadow": "soft elevation only when interaction needs tactility",
"motionDuration": "120ms-220ms"
}
Usage notes
Short guidance for humans and AI tools before copying the component.
Split Button helps teams pair a default action with a secondary menu without crowding the toolbar. It should feel like a reusable product primitive, not a one-off decoration.
Start from shadcn/ui button + dropdown-menu. Use Radix Dropdown Menu through the matching shadcn component when possible. Keep variants token-driven and keep states predictable.
Do not invent a custom component API when shadcn/ui button + dropdown-menu already covers the base behavior. Avoid random gradients, oversized radii, unclear disabled states, missing labels, icon-only controls without accessible names, and variants that change layout unexpectedly.