'use client' import { motion, useMotionValue, useSpring } from 'framer-motion' import { useEffect, useState } from 'react' interface CursorFollowerProps { isVisible: boolean imageSrc: string | null } export function CursorFollower({ isVisible, imageSrc }: CursorFollowerProps) { const [isTouchDevice, setIsTouchDevice] = useState(false) const cursorX = useMotionValue(0) const cursorY = useMotionValue(0) const springConfig = { damping: 25, stiffness: 300, mass: 0.5 } const cursorXSpring = useSpring(cursorX, springConfig) const cursorYSpring = useSpring(cursorY, springConfig) useEffect(() => { setIsTouchDevice('ontouchstart' in window || navigator.maxTouchPoints > 0) }, []) useEffect(() => { if (isTouchDevice) return const updateCursor = (e: MouseEvent) => { cursorX.set(e.clientX) cursorY.set(e.clientY) } window.addEventListener('mousemove', updateCursor) return () => window.removeEventListener('mousemove', updateCursor) }, [cursorX, cursorY, isTouchDevice]) if (isTouchDevice) return null return ( {imageSrc && (
Cursor preview
)}
) }