System

Buttons / One component for every button variant.

Variants

Names follow an emphasis ladder from default (loudest) to text (quietest), and a tone suffix swaps the color family: -destructive or -muted.

variant
default
Primary action. The gradient blooms from the cursor on hover
outline
Secondary action beside a primary
ghost
Quiet action inside an interactive cluster (toolbar, repeated actions)
soft
Quiet action that must read as pressable without hover (touch, standalone)
ghost-muted
Resting rail or nav chip; only the active item carries accent
destructive
Filled red for destructive actions
text
Inline, link-like action (see textHover); pairs with size="inline" in real usage
ghost-destructive
Quiet red action (e.g. close button)

Sizes

Every variant accepts every size. inline strips height + padding for the text variant.

size

Icons

iconStart and iconEnd drop a Lucide icon on either side of the label and auto-pad that side. Pass both to bracket the action.

iconStart / iconEnd

States

disabled drops to 50% and kills pointer events. loading swaps the label for a spinner and blocks clicks without resizing the button.

disabled / loading

Text variant

The text variant reads as an inline link. textHover sets the color it shifts to on hover, and defaults to accenthere; pass it explicitly on any other variant to override that variant’s own hover color.

textHover

As a link

asChild renders the button’s styles onto its child, so a Link (or any element) becomes the button instead of nesting one inside the other.

Props

Every prop the component accepts.

PropTypeDefaultNotes
variantdefault · outline · ghost · soft · text · destructive · ghost-destructive · ghost-muteddefaultVisual style and emphasis
sizesm · default · lg · icon · inlinedefaultHeight + padding scale
iconStart / iconEndLucideIconnoneIcon before/after the label; auto-pads that side
iconSizexs · sm · default · lg · xldefaultOverrides the size-derived icon scale
textHoveraccent · destructive · foreground · backgroundaccent on text, unset otherwiseHover color override, any variant; background for transparent variants over bright/hoverGlow backdrops
hoverGlowbooleanfalseBackdrop-brightness lens hover for transparent variants over animated backdrops
loadingbooleanfalseSwaps label for a spinner; blocks clicks
disabledbooleanfalse50% opacity, no pointer events
asChildbooleanfalseRenders styles onto the child (e.g. a Link) instead of a button