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
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 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
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.
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.
Keep the visible focus treatment enabled.
Review the shared responsibility and evidence boundaries in the Accessibility foundation alongside this component-specific contract. Use the Spacing & layout foundation for shared density, wrapping, overflow, reflow, and component-versus-product ownership guidance. The Color foundation, Typography foundation, and Localization foundation define the shared visual-role, text-resilience, direction, and locale boundaries used by component examples.