Button

PreviousNext

Interactive buttons with variants, icons, and collection layouts.

Basic Usage

Variants

Branded variants

Beyond the standard shadcn variants, the Button ships branded variants used across the Project Exodus marketing surfaces. cta-secondary is designed for dark backgrounds.

With Icons

Icons can be positioned left or right via iconPosition.

Icon-Only

Always provide ariaLabel for icon-only buttons.

Loading State

The loading prop shows a spinner and disables interaction.

Button Groups

Use connected on ButtonCollection for segmented controls and aligned button sets.

Toolbar

For toolbars that mix buttons with text labels and visual separators, use ButtonGroup, ButtonGroupText, and ButtonGroupSeparator directly.

Format:

Vertical Orientation

Props

ButtonItem

PropTypeDefaultDescription
labelstring | ReactNodeRequiredButton label or content
iconReactNode-Icon element
descriptionstring-Description text (with container)
titlestring-Title text (with container)
idstring | number-Unique identifier
hrefstring-URL for link buttons
onClick() => void-Click handler
disabledbooleanfalseDisable the button
loadingbooleanfalseShow loading spinner
type"button" | "submit" | "reset""button"Button type attribute
buttonVariant"default" | "destructive" | "outline" | "secondary" | "ghost" | "link""default"Visual variant
buttonSize"default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg""default"Size variant
showContainerbooleanfalseWrap in a container
containerVariant"card" | "outline" | "ghost" | "minimal""card"Container style
iconPosition"left" | "right""left"Icon placement
target"_blank" | "_self" | "_parent" | "_top"-Link target
ariaLabelstring-Accessibility label for icon buttons
classNamestring-Additional CSS classes

ButtonCollection

PropTypeDefaultDescription
itemsButtonItemProps[]RequiredArray of button items
layout"stack" | "grid" | "inline""stack"Collection layout
columns1 | 2 | 3 | 41Grid columns (grid layout only)
gap"sm" | "md" | "lg""md"Spacing between items
justify"start" | "center" | "end" | "between""start"Horizontal alignment
connectedbooleanfalseConnect buttons visually
buttonVariantstring"default"Shared variant (cascades to items)
buttonSizestring"default"Shared size (cascades to items)
onItemClick(item, index) => void-Collection-level click handler
classNamestring-Additional CSS classes

ButtonGroup

PropTypeDefaultDescription
orientation"horizontal" | "vertical""horizontal"Layout direction
classNamestring-Additional CSS classes

ButtonGroupSeparator

Renders a visual divider between items. Extends Separator.

PropTypeDefaultDescription
orientation"horizontal" | "vertical""vertical"Separator direction
classNamestring-Additional CSS classes

ButtonGroupText

A styled text/label element rendered inside a group.

PropTypeDefaultDescription
asChildbooleanfalseRender as child element via Radix Slot
classNamestring-Additional CSS classes