'use client'; import { forwardRef, HTMLAttributes } from 'react'; import styles from './wavy-text.module.css'; export interface WavyTextProps extends HTMLAttributes { /** The text to display with wave effect */ children: string; /** Wave height in pixels (default: 5) */ amplitude?: number; /** Number of wave cycles (default: 1) */ frequency?: number; /** Animation duration in seconds (default: 2) */ speed?: number; /** Wave direction (default: 'vertical') */ direction?: 'vertical' | 'horizontal'; } export const WavyText = forwardRef( ( { children, amplitude = 5, frequency = 1, speed = 2, direction = 'vertical', className, style, ...props }, ref ) => { const letters = children.split(''); return (
{letters.map((letter, index) => { const delay = (index / letters.length) * speed; const phase = (index / letters.length) * frequency * Math.PI * 2; return ( {letter === ' ' ? '\u00A0' : letter} ); })}
); } ); WavyText.displayName = 'WavyText'; export default WavyText;