{"version":3,"file":"SmoothImageCursor.qtdRT887.mjs","names":["useRef","useState","useMemo","useCallback"],"sources":["https:/framerusercontent.com/modules/KCcHFFkWHYb7sNJkZUvd/hlsQst4eU2SiqLNxx4IO/SmoothImageCursor.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{startTransition,useCallback,useEffect,useMemo,useRef,useState}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export default function SmoothImageCursor(props){const{image1,image2,image3,image4,image5,image6,image7,image8,image9,image10,backgroundColor,imageScale,sizeRandomness,rotationRandomness,trailSpacing,fadeOutDuration,maxImagesOnScreen,imageOpacity,imageBorderRadius}=props;const isStaticRenderer=useIsStaticRenderer();const containerRef=useRef(null);const stickersRef=useRef([]);const rafRef=useRef(null);const lastSpawnRef=useRef(null);const idRef=useRef(0);const imageIndexRef=useRef(0);const[,setRenderTick]=useState(0);const imagePool=useMemo(()=>{const entries=[image1,image2,image3,image4,image5,image6,image7,image8,image9,image10];return entries.map(item=>({src:item?.src??\"\",alt:item?.alt??\"\"})).filter(item=>item.src.length>0);},[image1,image2,image3,image4,image5,image6,image7,image8,image9,image10]);const triggerRender=useCallback(()=>{startTransition(()=>{setRenderTick(value=>value+1);});},[]);const spawnSticker=useCallback((clientX,clientY)=>{const node=containerRef.current;if(!node||imagePool.length===0)return;const rect=node.getBoundingClientRect();const inside=clientX>=rect.left&&clientX<=rect.right&&clientY>=rect.top&&clientY<=rect.bottom;if(!inside){lastSpawnRef.current=null;return;}const last=lastSpawnRef.current;if(last){const dx=clientX-last.x;const dy=clientY-last.y;const distance=Math.hypot(dx,dy);if(distance<Math.max(1,trailSpacing))return;}const chosen=imagePool[imageIndexRef.current%imagePool.length];imageIndexRef.current+=1;const randomUnit=Math.random()*2-1;const randomizedSize=Math.max(1,imageScale*(1+randomUnit*sizeRandomness));const randomizedRotation=(Math.random()*2-1)*rotationRandomness;const sticker={id:idRef.current++,x:clientX-rect.left,y:clientY-rect.top,createdAt:performance.now(),size:randomizedSize,rotation:randomizedRotation,src:chosen.src,alt:chosen.alt||\"\"};const next=[...stickersRef.current,sticker];const cap=Math.max(1,Math.round(maxImagesOnScreen));if(next.length>cap){stickersRef.current=next.slice(next.length-cap);}else{stickersRef.current=next;}lastSpawnRef.current={x:clientX,y:clientY};triggerRender();},[imagePool,imageScale,maxImagesOnScreen,rotationRandomness,sizeRandomness,trailSpacing,triggerRender]);useEffect(()=>{if(isStaticRenderer)return;if(typeof window===\"undefined\")return;const onMouseMove=event=>{spawnSticker(event.clientX,event.clientY);};window.addEventListener(\"mousemove\",onMouseMove,{passive:true});return()=>{window.removeEventListener(\"mousemove\",onMouseMove);};},[isStaticRenderer,spawnSticker]);useEffect(()=>{if(isStaticRenderer)return;if(typeof window===\"undefined\")return;const tick=()=>{const now=performance.now();const lifeMs=Math.max(50,fadeOutDuration*1e3);const prevLength=stickersRef.current.length;const alive=stickersRef.current.filter(item=>now-item.createdAt<lifeMs);const hadAny=prevLength>0;if(alive.length!==prevLength){stickersRef.current=alive;}if(hadAny||alive.length>0)triggerRender();rafRef.current=window.requestAnimationFrame(tick);};const startLoop=()=>{if(rafRef.current!==null)return;rafRef.current=window.requestAnimationFrame(tick);};const stopLoop=()=>{if(rafRef.current!==null){window.cancelAnimationFrame(rafRef.current);rafRef.current=null;}};const node=containerRef.current;let observer=null;if(node&&typeof window.IntersectionObserver!==\"undefined\"){observer=new window.IntersectionObserver(entries=>{const entry=entries[0];if(!entry)return;if(entry.isIntersecting){startLoop();}else{stopLoop();}},{threshold:0,rootMargin:\"32px\"});observer.observe(node);}else{startLoop();}return()=>{if(observer)observer.disconnect();stopLoop();};},[fadeOutDuration,isStaticRenderer,triggerRender]);const now=typeof performance!==\"undefined\"?performance.now():Date.now();const durationMs=Math.max(50,fadeOutDuration*1e3);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",background:backgroundColor,pointerEvents:\"none\"},children:stickersRef.current.map(sticker=>{const age=now-sticker.createdAt;const progress=Math.max(0,Math.min(1,age/durationMs));const currentOpacity=imageOpacity*(1-progress);const currentScale=1-progress*.45;return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:sticker.x,top:sticker.y,width:sticker.size,height:sticker.size,transform:`translate(-50%, -50%) rotate(${sticker.rotation}deg) scale(${currentScale})`,transformOrigin:\"center\",opacity:currentOpacity,willChange:\"transform, opacity\",pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(\"img\",{src:sticker.src,alt:sticker.alt,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",borderRadius:imageBorderRadius,display:\"block\",pointerEvents:\"none\",userSelect:\"none\"}})},sticker.id);})});}addPropertyControls(SmoothImageCursor,{image1:{type:ControlType.ResponsiveImage,title:\"Image 1\"},image2:{type:ControlType.ResponsiveImage,title:\"Image 2\"},image3:{type:ControlType.ResponsiveImage,title:\"Image 3\"},image4:{type:ControlType.ResponsiveImage,title:\"Image 4\"},image5:{type:ControlType.ResponsiveImage,title:\"Image 5\"},image6:{type:ControlType.ResponsiveImage,title:\"Image 6\"},image7:{type:ControlType.ResponsiveImage,title:\"Image 7\"},image8:{type:ControlType.ResponsiveImage,title:\"Image 8\"},image9:{type:ControlType.ResponsiveImage,title:\"Image 9\"},image10:{type:ControlType.ResponsiveImage,title:\"Image 10\"},backgroundColor:{type:ControlType.Color,title:\"Background Color\",defaultValue:\"rgba(0,0,0,0)\"},imageScale:{type:ControlType.Number,title:\"Image Scale\",defaultValue:60,min:10,max:300,step:1},sizeRandomness:{type:ControlType.Number,title:\"Size Randomness\",defaultValue:.2,min:0,max:1,step:.01},rotationRandomness:{type:ControlType.Number,title:\"Rotation Randomness\",defaultValue:30,min:0,max:180,step:1,unit:\"deg\"},trailSpacing:{type:ControlType.Number,title:\"Trail Spacing\",defaultValue:40,min:1,max:300,step:1},fadeOutDuration:{type:ControlType.Number,title:\"Fade-out Duration (s)\",defaultValue:.8,min:.1,max:10,step:.1},maxImagesOnScreen:{type:ControlType.Number,title:\"Max Images On Screen\",defaultValue:20,min:1,max:100,step:1},imageOpacity:{type:ControlType.Number,title:\"Image Opacity\",defaultValue:1,min:0,max:1,step:.01},imageBorderRadius:{type:ControlType.Number,title:\"Image Border Radius\",defaultValue:8,min:0,max:200,step:1}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SmoothImageCursor\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerSupportedLayoutWidth\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SmoothImageCursor.map"],"mappings":"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"}