import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from "react";
interface ButtonProps extends ButtonHTMLAttributes {
variant?: "primary" | "secondary" | "ghost";
size?: "sm" | "md" | "lg";
isLoading?: boolean;
leftIcon?: ReactNode;
rightIcon?: ReactNode;
fullWidth?: boolean;
}
export const Button = forwardRef(
(
{
variant = "primary",
size = "md",
isLoading = false,
leftIcon,
rightIcon,
fullWidth = false,
disabled,
className = "",
children,
...props
},
ref,
) => {
const baseStyles =
"inline-flex items-center justify-center gap-2 font-medium rounded-full transition-all duration-150 ease-spring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-40 disabled:cursor-not-allowed";
const variants = {
primary: "btn-accent",
secondary: "btn",
ghost: "btn-ghost",
};
const sizes = {
sm: "px-3 py-1.5 text-xs h-8",
md: "px-5 py-2 text-sm h-10",
lg: "px-6 py-3 text-base h-12",
};
const width = fullWidth ? "w-full" : "";
return (
);
},
);
Button.displayName = "Button";