{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/s7BDBBXxKMyZCEY4ncs5/nH86BhY8JbePyDEoMhiD/Imagehoovertrailfree.js"],
  "sourcesContent": ["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useState,useRef}from\"react\";import{motion,AnimatePresence}from\"framer-motion\";import{addPropertyControls,ControlType}from\"framer\";/**\n *\n * @framerIntrinsicWidth 1400\n * @framerIntrinsicHeight 1000\n *\n * @framerDisableUnlink\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export function ImageMotionTrail({images,effectType,speed,trailDistance,lingerTime,maxImages,style}){const[mousePos,setMousePos]=useState({x:0,y:0});const[trailImages,setTrailImages]=useState([]);const imageIndex=useRef(0);const lastImageTime=useRef(Date.now());// Smooth movement function (lerp)\nconst lerp=(a,b,n)=>(1-n)*a+n*b;useEffect(()=>{if(images.length<3)return;const handleMouseMove=e=>{const newMousePos={x:e.clientX,y:e.clientY};if(effectType===\"Magnetic\"){setMousePos(prev=>({x:lerp(prev.x,newMousePos.x,.2),y:lerp(prev.y,newMousePos.y,.2)}));}else if(effectType===\"Classic\"){setMousePos(prev=>({x:lerp(prev.x,newMousePos.x,.15),y:lerp(prev.y,newMousePos.y,.15)}));}// \u2705 Fix: Ensure Classic spawns images closer together!\nconst spacingThreshold=effectType===\"Classic\"?trailDistance*.3:trailDistance*.5;if(Date.now()-lastImageTime.current>speed*100){createTrailImage(newMousePos.x,newMousePos.y,spacingThreshold);lastImageTime.current=Date.now();}};window.addEventListener(\"mousemove\",handleMouseMove);return()=>window.removeEventListener(\"mousemove\",handleMouseMove);},[images,effectType]);const createTrailImage=(x,y,spacing)=>{if(images.length===0)return;imageIndex.current=(imageIndex.current+1)%images.length;let newX=x;let newY=y;if(effectType===\"Randomized\"){newX+=(Math.random()-.5)*200;newY+=(Math.random()-.5)*200;}const newImage={id:Date.now(),src:images[imageIndex.current],x:newX,y:newY};setTrailImages(prev=>{let updatedImages=[...prev,newImage];if(updatedImages.length>maxImages){updatedImages=updatedImages.slice(updatedImages.length-maxImages);}return updatedImages;});setTimeout(()=>{setTrailImages(prev=>prev.length>0?prev.slice(1):prev);},Math.max(speed*900+lingerTime*800,700));};return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:0,width:\"100vw\",height:\"100vh\",pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(AnimatePresence,{children:trailImages.map((image,index)=>/*#__PURE__*/_jsx(motion.img,{src:image.src,style:{position:\"absolute\",width:`${style.width}px`,height:`${style.height}px`,borderRadius:`${style.radius}px`,objectFit:style.type,pointerEvents:\"none\"},initial:{opacity:0,scale:1.3,x:image.x-style.width/2,y:image.y-style.height/2},animate:{opacity:1,scale:1,x:effectType===\"Magnetic\"?mousePos.x-style.width/2:image.x-style.width/2,y:effectType===\"Magnetic\"?mousePos.y-style.height/2:image.y-style.height/2,transition:{duration:effectType===\"Classic\"?.4:.3,ease:\"easeOut\"}},exit:{opacity:0,scale:.7,transition:{duration:.3,delay:index*.08}}},image.id))})});}// **\uD83D\uDD25 PERFECTLY GROUPED PROPERTY CONTROLS**\naddPropertyControls(ImageMotionTrail,{effectType:{type:ControlType.Enum,title:\"Effect\",options:[\"Classic\",\"Magnetic\",\"Randomized\"],optionTitles:[\"Classic Trail\",\"Magnetic Effect\",\"Randomized Trail\"],defaultValue:\"Classic\"},images:{type:ControlType.Array,title:\"Images\",propertyControl:{type:ControlType.Image},defaultValue:[],description:\"Select at least 3 images for the animation to trigger.\"},style:{type:ControlType.Object,title:\"Style\",controls:{width:{type:ControlType.Number,title:\"Width\",min:50,max:300,step:5,defaultValue:160},height:{type:ControlType.Number,title:\"Height\",min:50,max:300,step:5,defaultValue:160},radius:{type:ControlType.Number,title:\"Radius\",min:0,max:100,step:5,defaultValue:0},type:{type:ControlType.Enum,title:\"Type\",options:[\"cover\",\"contain\",\"fill\"],defaultValue:\"cover\"}}},trailDistance:{type:ControlType.Number,title:\"Frequency\",min:20,max:200,step:5,defaultValue:35,description:\"Controls how often new images appear as the cursor moves.\"},speed:{type:ControlType.Number,title:\"Visible For\",min:.2,max:3,step:.1,defaultValue:1,description:\"Determines how long the images stay visible before they fade out.\"},lingerTime:{type:ControlType.Number,title:\"Linger Time\",min:0,max:3,step:.1,defaultValue:.2,description:\"Sets how long an image remains on screen before disappearing.\"},maxImages:{type:ControlType.Number,title:\"Max Images\",min:5,max:50,step:1,defaultValue:20,description:\"Limits the number of images displayed in the trail at a time \\n \\n  Made with \uD83D\uDDA4 by [Harsh](https://harshworks.framer.website)\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"ImageMotionTrail\":{\"type\":\"reactComponent\",\"name\":\"ImageMotionTrail\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"fixed\",\"framerIntrinsicWidth\":\"1400\",\"framerIntrinsicHeight\":\"1000\",\"framerDisableUnlink\":\"*\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Imagehoovertrailfree.map"],
  "mappings": "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",
  "names": ["ImageMotionTrail", "images", "effectType", "speed", "trailDistance", "lingerTime", "maxImages", "style", "mousePos", "setMousePos", "ye", "trailImages", "setTrailImages", "imageIndex", "pe", "lastImageTime", "lerp", "a", "b", "n", "ue", "handleMouseMove", "e", "newMousePos", "prev", "spacingThreshold", "createTrailImage", "window", "x", "y", "spacing", "newX", "newY", "newImage", "updatedImages", "p", "AnimatePresence", "image", "index", "motion", "addPropertyControls", "ControlType"]
}
