SnowballSH Foundation UI

Button

Pick a framework. Both use the same recipe, so the styling matches exactly.

Button props for React
PropTypeDefaultDescription
variant"primary" | "secondary" | "ghost"primaryVisual style.
size"sm" | "md" | "lg"mdHeight and padding.
disabledbooleanBlocks clicks and dims the button.

Also takes className and children. Anything else passes through to the button.

button.demo.tsx
import { Button } from "../react/index.js";

export default function ButtonDemo() {
  return (
    <div className="flex flex-col gap-4">
      {(["primary", "secondary", "ghost"] as const).map((variant) => (
        <div key={variant} className="flex flex-wrap items-center gap-3">
          {(["sm", "md", "lg"] as const).map((size) => (
            <Button key={size} variant={variant} size={size}>
              {variant} {size}
            </Button>
          ))}
        </div>
      ))}
      <div className="flex items-center gap-3">
        <Button disabled>disabled</Button>
      </div>
    </div>
  );
}