'use client';
import { forwardRef, ButtonHTMLAttributes } from 'react';
export interface GlitchButtonProps extends ButtonHTMLAttributes {
/** Button variant */
variant?: 'default' | 'outline' | 'ghost';
/** Glitch intensity on hover */
intensity?: 'subtle' | 'medium' | 'intense';
/** Primary glitch color (hex or CSS color) */
glitchColor?: string;
/** Secondary glitch color (hex or CSS color) */
glitchColorAlt?: string;
}
const variantClasses = {
default: 'bg-neutral-950 text-neutral-50 border border-neutral-800',
outline: 'bg-transparent text-neutral-50 border-2 border-current',
ghost: 'bg-transparent text-neutral-50 border-none',
};
const intensityClasses = {
subtle: {
layer1: 'hover:opacity-50 hover:animate-[glitch-subtle_0.5s_infinite]',
layer2: 'hover:opacity-30 hover:animate-[glitch-subtle-alt_0.5s_infinite]',
button: '',
},
medium: {
layer1: 'hover:opacity-70 hover:animate-[glitch-medium_0.2s_infinite]',
layer2: 'hover:opacity-50 hover:animate-[glitch-medium-alt_0.2s_infinite]',
button: '',
},
intense: {
layer1: 'hover:opacity-90 hover:animate-[glitch-intense_0.1s_infinite]',
layer2: 'hover:opacity-70 hover:animate-[glitch-intense-alt_0.1s_infinite]',
button: 'hover:animate-[button-shake_0.1s_infinite]',
},
};
export const GlitchButton = forwardRef(
(
{
children,
variant = 'default',
intensity = 'medium',
glitchColor = '#ff0040',
glitchColorAlt = '#00ffff',
className,
style,
...props
},
ref
) => {
const intensityClass = intensityClasses[intensity];
return (
);
}
);
GlitchButton.displayName = 'GlitchButton';
export default GlitchButton;