---
type Variant = 'primary' | 'secondary' | 'ghost' | 'inverse';
type Size = 'sm' | 'md' | 'lg';
interface Props {
variant?: Variant;
size?: Size;
href?: string;
type?: 'button' | 'submit' | 'reset';
class?: string;
ariaLabel?: string;
disabled?: boolean;
id?: string;
}
const {
variant = 'primary',
size = 'md',
href,
type = 'button',
class: className = '',
ariaLabel,
disabled,
id,
} = Astro.props;
const base =
'inline-flex items-center justify-center gap-2 font-label-md rounded-md transition-all duration-200 select-none disabled:opacity-50 disabled:cursor-not-allowed active:scale-[0.98]';
const sizes: Record = {
sm: 'h-9 px-4 text-[13px]',
md: 'h-10 px-5 text-sm',
lg: 'h-12 px-7 text-label-md',
};
const variants: Record = {
primary: 'bg-primary text-white hover:brightness-110',
secondary: 'bg-white text-on-surface border border-border-subtle hover:border-primary',
ghost: 'text-primary hover:bg-primary/5',
inverse: 'bg-inverse-surface text-white hover:bg-primary',
};
const cls = [base, sizes[size], variants[variant], className].filter(Boolean).join(' ');
---
{
href ? (
) : (
)
}