'use client';
import { forwardRef, ButtonHTMLAttributes, AnchorHTMLAttributes, ReactNode } from 'react';
import styles from './cta-brutal.module.css';
type BaseProps = {
children: ReactNode;
variant?: 'default' | 'outline' | 'gold' | 'inverse';
size?: 'sm' | 'md' | 'lg' | 'xl';
icon?: ReactNode;
iconPosition?: 'left' | 'right';
fullWidth?: boolean;
glitch?: boolean;
shake?: boolean;
loading?: boolean;
disabled?: boolean;
};
type ButtonProps = BaseProps & ButtonHTMLAttributes & { href?: never };
type AnchorProps = BaseProps & AnchorHTMLAttributes & { href: string };
export type CtaBrutalProps = ButtonProps | AnchorProps;
export const CtaBrutal = forwardRef(
({ children, variant = 'default', size = 'md', icon, iconPosition = 'right', fullWidth = false, glitch = false, shake = false, loading = false, disabled = false, className, ...props }, ref) => {
const classes = [
styles.button,
variant === 'outline' && styles.variantOutline,
variant === 'gold' && styles.variantGold,
variant === 'inverse' && styles.variantInverse,
size === 'sm' && styles.sizeSm,
size === 'lg' && styles.sizeLg,
size === 'xl' && styles.sizeXl,
fullWidth && styles.fullWidth,
glitch && styles.glitch,
shake && styles.shake,
loading && styles.loading,
disabled && styles.disabled,
className,
].filter(Boolean).join(' ');
const content = (
<>
{icon && iconPosition === 'left' && {icon}}
{children}
{icon && iconPosition === 'right' && {icon}}
>
);
if ('href' in props && props.href) {
return (
{content}
);
}
return (
);
}
);
CtaBrutal.displayName = 'CtaBrutal';
export default CtaBrutal;