Cybersecurity-Projects/PROJECTS/intermediate/api-security-scanner/frontend/src/components/common/Button.tsx

35 lines
770 B
TypeScript

// ===========================
// Button.tsx
// ©AngelaMos | 2025
// ===========================
import type { ButtonHTMLAttributes } from 'react'
import './Button.css'
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
variant?: 'primary' | 'secondary' | 'ghost'
size?: 'sm' | 'md' | 'lg'
isLoading?: boolean
children: React.ReactNode
}
export const Button = ({
variant = 'primary',
size = 'md',
isLoading = false,
disabled,
children,
...props
}: ButtonProps): React.ReactElement => {
return (
<button
className={`button button--${variant} button--${size}`}
disabled={disabled ?? isLoading}
aria-busy={isLoading}
{...props}
>
{isLoading ? 'Loading...' : children}
</button>
)
}