Button

Interactive button component with multiple variants and sizes. Built on HeroUI v3 with BEM theming.

Variants

Sizes

States

Icon Only

Usage

// Import from shared component library
import { Button } from "@neo/test-components"

// Primary button (default)
<Button>Click me</Button>

// Button variants
<Button variant="primary">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="tertiary">Tertiary</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="danger">Danger</Button>
<Button variant="danger-soft">Danger Soft</Button>

// Button sizes
<Button size="sm">Small</Button>
<Button size="md">Medium</Button>  {/* default */}
<Button size="lg">Large</Button>

// Disabled state
<Button isDisabled>Disabled</Button>

// Loading state
<Button isPending>
  <Spinner size="sm" />
  Loading...
</Button>

// Icon only
<Button isIconOnly variant="tertiary">
  ⚙️
</Button>

BEM Theming

Buttons use BEM classes for styling, making them easy to customize via CSS:

/* globals.css - customize button styles */
@layer components {
  .button { /* base styles */ }
  .button--sm { /* small size */ }
  .button--md { /* medium size */ }
  .button--lg { /* large size */ }
  .button--primary { /* primary variant */ }
  .button--secondary { /* secondary variant */ }
  .button--tertiary { /* tertiary variant */ }
  .button--ghost { /* ghost variant */ }
  .button--danger { /* danger variant */ }
  .button--icon-only { /* icon only */ }
}

This page is a Server Component — components from@neo/test-componentsare RSC-compatible.