nomadcode/apps/web/src/components/common/Button.tsx
toki 3a4e5be1e0 chore: import nomadcode-web into apps/web
git-subtree-dir: apps/web
git-subtree-mainline: 9212ed02ac
git-subtree-split: 5d65cbf2d5
2026-05-21 13:35:30 +09:00

21 lines
680 B
TypeScript

import type { ButtonHTMLAttributes, ReactNode } from "react";
type ButtonVariant = "primary" | "secondary" | "ghost" | "danger";
type ButtonSize = "sm" | "md" | "icon";
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
variant?: ButtonVariant;
size?: ButtonSize;
icon?: ReactNode;
}
export function Button({ className = "", variant = "primary", size = "md", icon, children, ...props }: ButtonProps) {
const classes = ["button", `button--${variant}`, `button--${size}`, className].filter(Boolean).join(" ");
return (
<button className={classes} {...props}>
{icon}
{children ? <span>{children}</span> : null}
</button>
);
}