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