'use client'; import { forwardRef, HTMLAttributes } from 'react'; export interface GlitchTextProps extends HTMLAttributes { /** The text to display with glitch effect */ children: string; /** Glitch intensity: subtle, medium, intense */ intensity?: 'subtle' | 'medium' | 'intense'; /** Glitch color (CSS color for the offset layers) */ glitchColor?: string; /** Secondary glitch color */ glitchColorAlt?: string; /** Disable animation (static glitch) */ static?: boolean; } const intensityClasses = { subtle: 'before:animate-[glitch-subtle-1_3s_infinite_alternate-reverse] after:animate-[glitch-subtle-2_3s_infinite_alternate-reverse]', medium: 'before:animate-[glitch-medium-1_0.3s_infinite_alternate-reverse] after:animate-[glitch-medium-2_0.3s_infinite_alternate-reverse]', intense: 'before:animate-[glitch-intense-1_0.15s_infinite_alternate-reverse] after:animate-[glitch-intense-2_0.15s_infinite_alternate-reverse]', }; const clipPaths = { subtle: { before: 'polygon(0 0, 100% 0, 100% 45%, 0 45%)', after: 'polygon(0 55%, 100% 55%, 100% 100%, 0 100%)', }, medium: { before: 'polygon(0 0, 100% 0, 100% 45%, 0 45%)', after: 'polygon(0 55%, 100% 55%, 100% 100%, 0 100%)', }, intense: { before: 'polygon(0 0, 100% 0, 100% 45%, 0 45%)', after: 'polygon(0 55%, 100% 55%, 100% 100%, 0 100%)', }, }; export const GlitchText = forwardRef( ( { children, intensity = 'medium', glitchColor = '#ff0040', glitchColorAlt = '#00ffff', static: isStatic = false, className = '', style, ...props }, ref ) => { return ( {children} {children} {children} ); } ); GlitchText.displayName = 'GlitchText'; export default GlitchText;