Support the primary action without competing with it.
outline
Offer a bounded secondary action on a quiet surface.
ghost
Keep repeated or low-emphasis actions visually calm.
link
Use for navigation with an anchor render target; it has no control padding and underlines on hover or focus-visible.
danger
Signal a destructive action that needs explicit intent.
Anatomy
leading iconlabelbadgekbdtrailing icon
For an icon-only action, use icon and an aria-label. Button uses that accessible name as the required Tooltip label unless an explicit tooltip is provided; label, kbd, and directional icon slots are intentionally omitted.
Slot
Purpose
button
Base UI button primitive with variant, size, disabled, loading, and focus states.
button-icon
Optional leading or trailing icon rendered through the Nerio icon adapter.
button-label
Visible action text that remains available while loading.
button-badge
Optional Badge count or status placed after the visible action label.
button-kbd
Optional quiet keyboard shortcut hint placed between the label and trailing icon.
States
State
Behavior
Default, hover, and active
Variant tokens control interaction feedback.
Focus
Focus-visible uses the shared Nerio focus ring.
Loading
Disables repeat activation and exposes aria-busy.
Disabled
Prevents activation while preserving layout.
Motion
Hover, press, and focus use the shared motion tokens and respect reduced-motion preferences.
Hover transitions background, border, color, and opacity through motion tokens.
Press uses a subtle tokenized scale transform and is removed for reduced motion.
Focus-visible animates the shared focus ring without moving layout.
Accessibility
Hover or focus an icon-only button to see its Tooltip. The tooltip is supplementary: aria-label still supplies the action name.
A Button Badge remains in the accessible name, so use a concise count or status that refines the action.
Uses the Base UI Button primitive and renders a native button by default.
For navigation, set nativeButton={false} and render Button as a native anchor with variant link; it has no control padding and underlines on hover or focus-visible.
Custom render elements receive Button-owned content, state hooks, caller props, event handlers, classes, and refs without losing their chosen native semantics; function renders retain the Base UI button interaction contract.
Provide concise visible text or an accessible name.
Loading preserves the action name, disables repeat activation, and exposes aria-busy; loadingLabel is deprecated.
Disabled and loading states prevent repeat activation.
Icons render through the Nerio icon adapter and remain decorative by default.
For an icon-only Button, provide icon and an aria-label; Button uses that accessible name as the Tooltip label unless an explicit tooltip is provided.
Shortcut display is supplemental; add aria-keyshortcuts yourself when a keyboard shortcut is functional.
Badge content remains part of the Button accessible name; use a concise count or status that refines the action.
Deprecated subtle and destructive variants normalize to secondary and danger; use the canonical variants in new code.