Button

Triggers an action. Renders a native <button> by default.

WAI-ARIA pattern

Installation

npx nuecrea-ui add button

Usage

import { Button } from '@/components/ui/button';

const variants = ['default', 'secondary', 'outline', 'ghost', 'destructive', 'link'] as const;
const sizes = ['sm', 'md', 'lg'] as const;

export default function ButtonStory() {
  return (
    <main className="grid gap-4">
      {variants.map((variant) => (
        <div key={variant} className="flex items-center gap-3">
          {sizes.map((size) => (
            <Button key={size} variant={variant} size={size}>
              {`${variant} ${size}`}
            </Button>
          ))}
          <Button variant={variant} disabled>
            disabled
          </Button>
          <Button variant={variant} loading>
            loading
          </Button>
        </div>
      ))}
      <div className="flex items-center gap-3">
        <Button size="icon" aria-label="Add">
          +
        </Button>
      </div>
    </main>
  );
}

API reference

Button

The button element. Renders <button>.

PropTypeDefaultDescription
variant'default' | 'secondary' | 'outline' | 'ghost' | 'destructive' | 'link'"default"Visual style.
size'sm' | 'md' | 'lg' | 'icon'"md"Height, padding and font size.
disabledbooleanfalseWhether the button ignores user interaction.
focusableWhenDisabledbooleanfalseWhether the button stays focusable when disabled.
loadingbooleanfalseShows a pending state: disables interaction, keeps focus, sets aria-busy.
Data attributePresent when
data-disableddisabled or loading
data-loadingloading

Keyboard

KeyAction
EnterActivates the button.
SpaceActivates the button.