Button

form

A versatile button component with multiple variants, sizes, and a loading state. Built with CVA for variant management and Framer Motion for micro-interactions.

import { Button } from '@/components/forge'

Preview

Button

Code Example

Props

PropTypeDefaultRequiredDescription
variant'primary' | 'secondary' | 'ghost' | 'danger''primary'NoVisual style variant
size'sm' | 'md' | 'lg''md'NoControls height and padding
loadingbooleanfalseNoShows spinner and disables interaction
disabledbooleanfalseNoDisables the button
classNamestring-NoAdditional CSS classes merged via clsx + tailwind-merge
childrenReact.ReactNode-YesButton content

Variants

primarysecondaryghostdanger

Accessibility

  • Uses native <button> element for full keyboard support
  • Disabled state communicated via aria-disabled
  • Loading state sets aria-busy and visually indicated by spinner
  • Focus ring uses --gridnest-accent color with focus-visible selector

Related Components