'use client'; import { forwardRef, HTMLAttributes } from 'react'; import styles from './chromatic-aberration.module.css'; export interface ChromaticAberrationProps extends HTMLAttributes { /** Aberration intensity */ intensity?: 'subtle' | 'medium' | 'intense' | 'extreme'; /** Red channel offset in pixels */ redOffset?: number; /** Green channel offset in pixels */ greenOffset?: number; /** Blue channel offset in pixels */ blueOffset?: number; /** Enable on hover only */ hoverOnly?: boolean; /** Animate the effect */ animated?: boolean; /** Animation speed */ animationSpeed?: number; } export const ChromaticAberration = forwardRef( ( { intensity = 'medium', redOffset, greenOffset, blueOffset, hoverOnly = false, animated = false, animationSpeed = 1, className, children, ...props }, ref ) => { const offsets = { subtle: { red: 1, green: 0, blue: -1 }, medium: { red: 3, green: 0, blue: -3 }, intense: { red: 6, green: 0, blue: -6 }, extreme: { red: 10, green: 0, blue: -10 }, }[intensity]; const finalRedOffset = redOffset ?? offsets.red; const finalGreenOffset = greenOffset ?? offsets.green; const finalBlueOffset = blueOffset ?? offsets.blue; return (
{children}
{children}
{children}
); } ); ChromaticAberration.displayName = 'ChromaticAberration'; export default ChromaticAberration;