File size: 885 Bytes
b190b45 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import React, { ButtonHTMLAttributes, ReactNode } from 'react';
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
variant?: 'primary' | 'secondary' | 'ghost' | 'danger' | 'success';
size?: 'sm' | 'md' | 'lg';
icon?: boolean;
children: ReactNode;
}
export const Button: React.FC<ButtonProps> = ({
variant = 'primary',
size = 'md',
icon = false,
className = '',
children,
...props
}) => {
const baseClass = 'btn';
const variantClass = `btn-${variant}`;
const sizeClass = size !== 'md' ? `btn-${size}` : '';
const iconClass = icon ? 'btn-icon' : '';
const classes = [
baseClass,
variantClass,
sizeClass,
iconClass,
className
].filter(Boolean).join(' ');
return (
<button className={classes} {...props}>
{children}
</button>
);
};
export default Button;
|