import { ButtonHTMLAttributes, forwardRef } from "react";
import { cn } from "@/utils/helpers";
interface ButtonProps extends ButtonHTMLAttributes {
variant?: "primary" | "secondary" | "outline" | "danger" | "success";
size?: "sm" | "md" | "lg";
isLoading?: boolean;
fullWidth?: boolean;
}
const Button = forwardRef(
(
{
children,
className,
variant = "primary",
size = "md",
isLoading = false,
fullWidth = false,
disabled,
...props
},
ref
) => {
const baseStyles =
"inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed";
const variants = {
primary:
"bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500",
secondary:
"bg-secondary-500 text-white hover:bg-secondary-600 focus:ring-secondary-500",
outline:
"border-2 border-primary-600 text-primary-600 hover:bg-primary-50 focus:ring-primary-500",
danger:
"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500",
success:
"bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500",
};
const sizes = {
sm: "px-3 py-1.5 text-sm",
md: "px-4 py-2 text-base",
lg: "px-6 py-3 text-lg",
};
return (
);
}
);
Button.displayName = "Button";
export default Button;