| 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; | |