{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/lo3S12N8iu5JibtCZk5J/dya0cK6x0FLBoIledw77/MouseFollow.js", "ssg:https://framerusercontent.com/modules/khnWw2e326fj4TimYWpK/2q9HsFeqBcpiMnNPc42K/MouseFollowRealtime.js"],
  "sourcesContent": ["import{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect,useRef}from\"react\";import{useMotionValue,useSpring,useMotionValueEvent}from\"framer-motion\";// Apply this override to object you want to follow the mouse\nexport function withFollowMouse(Component){return props=>{const[rect,ref]=useElementBoundingClientRect();const[mouseX,mouseY]=useMousePosition();/* useSpring MotionValues */const springValue={stiffness:150,damping:30};const x=useSpring(mouseX,springValue);const y=useSpring(mouseY,springValue);return /*#__PURE__*/_jsx(Component,{...props,ref:ref,style:{...props.style,x,y,position:\"fixed\",// align center of component to mouse pointer\ntop:-rect.height/2,left:-rect.width/2,pointerEvents:\"none\"}});};}// Apply this override to object you want to follow the mouse\nexport function withFollowMouseHideOffScreen(Component){return props=>{const[rect,ref]=useElementBoundingClientRect();const[mouseX,mouseY]=useMousePosition();/* Hide if off screen */const[hidden,setHidden]=useState(true);const tolerance=50;useMotionValueEvent(mouseX,\"change\",latest=>{const y=mouseY.get();setHidden(latest<=tolerance||latest>=window.innerWidth-tolerance||y<=tolerance||y>=window.innerHeight-tolerance);});useMotionValueEvent(mouseY,\"change\",latest=>{const x=mouseX.get();setHidden(latest<=tolerance||latest>=window.innerHeight-tolerance||x<=tolerance||x>=window.innerWidth-tolerance);});return /*#__PURE__*/_jsx(Component,{...props,ref:ref,animate:{opacity:hidden?0:1},style:{...props.style,x:mouseX,y:mouseY,opacity:0,position:\"fixed\",top:-rect.height/2,left:-rect.width/2,pointerEvents:\"none\"}});};}function useMousePosition(){const mouseX=useMotionValue(0);const mouseY=useMotionValue(0);useEffect(()=>{const handleMouseMove=event=>{mouseX.set(event.clientX);mouseY.set(event.clientY);};window.addEventListener(\"mousemove\",handleMouseMove);return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);};},[]);return[mouseX,mouseY];}function useElementBoundingClientRect(){const ref=useRef(null);const[rect,setRect]=useState({x:0,y:0,left:0,right:200,top:0,bottom:200,width:200,height:200});useEffect(()=>{if(ref.current){setRect(ref.current.getBoundingClientRect());}},[]);return[rect,ref];}\nexport const __FramerMetadata__ = {\"exports\":{\"withFollowMouse\":{\"type\":\"reactHoc\",\"name\":\"withFollowMouse\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withFollowMouseHideOffScreen\":{\"type\":\"reactHoc\",\"name\":\"withFollowMouseHideOffScreen\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MouseFollow.map", "import{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect,useRef}from\"react\";import{useMotionValue,useSpring,useMotionValueEvent}from\"framer-motion\";// Apply this override to object you want to follow the mouse\nexport function withFollowMouse(Component){return props=>{const[rect,ref]=useElementBoundingClientRect();const[mouseX,mouseY]=useMousePosition();/* useSpring MotionValues */const springValue={stiffness:400,damping:30};const x=useSpring(mouseX,springValue);const y=useSpring(mouseY,springValue);return /*#__PURE__*/_jsx(Component,{...props,ref:ref,style:{...props.style,x,y,position:\"fixed\",// align center of component to mouse pointer\ntop:-rect.height/2,left:-rect.width/2,pointerEvents:\"none\"}});};}// Apply this override to object you want to follow the mouse\nexport function withFollowMouseHideOffScreen(Component){return props=>{const[rect,ref]=useElementBoundingClientRect();const[mouseX,mouseY]=useMousePosition();/* Hide if off screen */const[hidden,setHidden]=useState(true);const tolerance=50;useMotionValueEvent(mouseX,\"change\",latest=>{const y=mouseY.get();setHidden(latest<=tolerance||latest>=window.innerWidth-tolerance||y<=tolerance||y>=window.innerHeight-tolerance);});useMotionValueEvent(mouseY,\"change\",latest=>{const x=mouseX.get();setHidden(latest<=tolerance||latest>=window.innerHeight-tolerance||x<=tolerance||x>=window.innerWidth-tolerance);});return /*#__PURE__*/_jsx(Component,{...props,ref:ref,animate:{opacity:hidden?0:1},style:{...props.style,x:mouseX,y:mouseY,opacity:0,position:\"fixed\",top:-rect.height/2,left:-rect.width/2,pointerEvents:\"none\"}});};}function useMousePosition(){const mouseX=useMotionValue(0);const mouseY=useMotionValue(0);useEffect(()=>{const handleMouseMove=event=>{mouseX.set(event.clientX);mouseY.set(event.clientY);};window.addEventListener(\"mousemove\",handleMouseMove);return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);};},[]);return[mouseX,mouseY];}function useElementBoundingClientRect(){const ref=useRef(null);const[rect,setRect]=useState({x:0,y:0,left:0,right:200,top:0,bottom:200,width:200,height:200});useEffect(()=>{if(ref.current){setRect(ref.current.getBoundingClientRect());}},[]);return[rect,ref];}\nexport const __FramerMetadata__ = {\"exports\":{\"withFollowMouseHideOffScreen\":{\"type\":\"reactHoc\",\"name\":\"withFollowMouseHideOffScreen\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withFollowMouse\":{\"type\":\"reactHoc\",\"name\":\"withFollowMouse\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MouseFollowRealtime.map"],
  "mappings": "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",
  "names": ["withFollowMouse", "Component", "props", "rect", "ref", "useElementBoundingClientRect", "mouseX", "mouseY", "useMousePosition", "springValue", "x", "useSpring", "y", "p", "useMousePosition", "mouseX", "useMotionValue", "mouseY", "ue", "handleMouseMove", "event", "window", "useElementBoundingClientRect", "ref", "pe", "rect", "setRect", "ye", "withFollowMouseHideOffScreen", "Component", "props", "rect", "ref", "useElementBoundingClientRect", "mouseX", "mouseY", "useMousePosition", "hidden", "setHidden", "ye", "tolerance", "useMotionValueEvent", "latest", "y", "window", "x", "p", "useMotionValue", "ue", "handleMouseMove", "event", "pe", "setRect"]
}
