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