"use client"; import React, { useState, useEffect } from "react"; import { motion, useMotionValue, useSpring } from "framer-motion"; import { MoveUpRight as ArrowIcon } from "lucide-react"; interface VisualItem { key: number; url: string; label: string; } const visualData: VisualItem[] = [ { key: 1, url: "https://images.pexels.com/photos/9002742/pexels-photo-9002742.jpeg", label: "Pinky Island", }, { key: 2, url: "https://images.pexels.com/photos/31622979/pexels-photo-31622979.jpeg", label: "Greedy Model", }, { key: 3, url: "https://images.pexels.com/photos/12187128/pexels-photo-12187128.jpeg", label: "Sigma Connect", }, { key: 4, url: "https://images.pexels.com/photos/28168248/pexels-photo-28168248.jpeg", label: "Futuristic Gamma", }, ]; const ImageReveal: React.FC = () => { const [focusedItem, setFocusedItem] = useState(null); const [isLargeScreen, setIsLargeScreen] = useState(true); const cursorX = useMotionValue(0); const cursorY = useMotionValue(0); const smoothX = useSpring(cursorX, { stiffness: 300, damping: 40 }); const smoothY = useSpring(cursorY, { stiffness: 300, damping: 40 }); useEffect(() => { const updateScreen = () => { setIsLargeScreen(window.innerWidth >= 768); }; updateScreen(); window.addEventListener("resize", updateScreen); return () => window.removeEventListener("resize", updateScreen); }, []); const onMouseTrack = (e: React.MouseEvent) => { cursorX.set(e.clientX); cursorY.set(e.clientY); }; const onHoverActivate = (item: VisualItem) => { setFocusedItem(item); }; const onHoverDeactivate = () => { setFocusedItem(null); }; return (
{visualData.map((item) => (
onHoverActivate(item)} > {!isLargeScreen && ( {item.label} )}

{item.label}

))} {isLargeScreen && focusedItem && ( )}
); }; export default ImageReveal;