{"version":3,"file":"EchoStack.CGQzeM4N.mjs","names":["useRef","useState","useCallback"],"sources":["https:/framerusercontent.com/modules/lJm3LUw73jQyepKIeLcl/MgKxjHESvfEtWq9ga57T/EchoStack.js"],"sourcesContent":["/**\n * EchoStack\n * @framer\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,useIsStaticRenderer,RenderTarget}from\"framer\";import{useCallback,useRef,useState,useEffect}from\"react\";export default function EchoStack(props){const{image,layerCount=5,scaleFactor=.85,offsetX=0,offsetY=-15,rotationOffset=0,opacityFalloff=.1,blurFalloff=1,borderRadius=50,enableShadow=false,shadowColor=\"rgba(0,0,0,0.25)\",shadowSize=10,mirrorMode=\"none\",enableScrollParallax=true,scrollParallaxStrength=20,scrollParallaxDirection=\"vertical\",enablePointerParallax=false,pointerParallaxStrength=10,hoverScale=1.05,hoverDuration=300,hoverStagger=true,hoverStaggerDirection=\"topToBottom\",hoverStaggerDelay=50,style}=props;const isStatic=useIsStaticRenderer();const isCanvas=RenderTarget.current()===RenderTarget.canvas;const isLive=!isStatic&&!isCanvas;const ref=useRef(null);const[scrollProgress,setScrollProgress]=useState(0);const[pointer,setPointer]=useState({x:0,y:0});const[hovered,setHovered]=useState(false);// Suppress synthetic mouse events browsers fire ~300ms after touch\nconst lastTouchTime=useRef(0);// Holds the setTimeout that triggers the out animation\nconst touchOutTimer=useRef(null);// ─── Scroll parallax ──────────────────────────────────────────────────────\nuseEffect(()=>{if(!isLive||!enableScrollParallax)return;const handleScroll=()=>{if(!ref.current)return;const rect=ref.current.getBoundingClientRect();const windowH=window.innerHeight;const progress=1-(rect.top+rect.height)/(windowH+rect.height);setScrollProgress(Math.max(-.5,Math.min(.5,progress-.5)));};handleScroll();window.addEventListener(\"scroll\",handleScroll,{passive:true});return()=>window.removeEventListener(\"scroll\",handleScroll);},[isLive,enableScrollParallax]);useEffect(()=>{return()=>{if(touchOutTimer.current)clearTimeout(touchOutTimer.current);};},[]);// ─── Pointer / touch parallax ─────────────────────────────────────────────\nconst handlePointerMove=useCallback(e=>{if(!isLive||!enablePointerParallax||!ref.current)return;const clientX=e.touches?e.touches[0].clientX:e.clientX;const clientY=e.touches?e.touches[0].clientY:e.clientY;const rect=ref.current.getBoundingClientRect();setPointer({x:(clientX-rect.left-rect.width/2)/(rect.width/2),y:(clientY-rect.top-rect.height/2)/(rect.height/2)});},[isLive,enablePointerParallax]);// ─── Desktop mouse ────────────────────────────────────────────────────────\nconst onMouseEnter=useCallback(()=>{if(!isLive||Date.now()-lastTouchTime.current<500)return;setHovered(true);},[isLive]);const handleMouseLeave=useCallback(()=>{if(Date.now()-lastTouchTime.current<500)return;setPointer({x:0,y:0});setHovered(false);},[]);// ─── Touch: play full in→out cycle on every tap ───────────────────────────\nconst handleTouchStart=useCallback(()=>{if(!isLive)return;lastTouchTime.current=Date.now();// Cancel any in-progress out timer so retapping mid-animation works\nif(touchOutTimer.current){clearTimeout(touchOutTimer.current);touchOutTimer.current=null;}setHovered(true);// Wait for the full in-animation to finish, then trigger out\nconst maxStaggerDelay=hoverStagger?(layerCount-1)*hoverStaggerDelay:0;touchOutTimer.current=setTimeout(()=>{setHovered(false);touchOutTimer.current=null;},hoverDuration+maxStaggerDelay);},[isLive,hoverDuration,hoverStagger,layerCount,hoverStaggerDelay]);const handleTouchEnd=useCallback(()=>{setPointer({x:0,y:0});},[]);// ─── Placeholder ──────────────────────────────────────────────────────────\nif(!image){return /*#__PURE__*/_jsx(\"div\",{style:{...style,background:\"#e0e0e0\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:\"#666\",fontSize:14,fontFamily:\"sans-serif\",borderRadius:`${borderRadius}%`},children:\"Select an image\"});}const br=`${borderRadius}%`;return /*#__PURE__*/_jsx(\"div\",{style:style,children:/*#__PURE__*/_jsx(\"div\",{ref:ref,onMouseMove:handlePointerMove,onMouseEnter:onMouseEnter,onMouseLeave:handleMouseLeave,onTouchStart:handleTouchStart,onTouchMove:handlePointerMove,onTouchEnd:handleTouchEnd,style:{position:\"absolute\",top:0,left:0,right:0,bottom:0,overflow:\"hidden\",borderRadius:br},children:Array.from({length:layerCount}).map((_,i)=>{const scale=Math.pow(scaleFactor,i);if(scale<.05)return null;const blur=(layerCount-1-i)*blurFalloff;const opacity=Math.max(0,1-i*opacityFalloff);const rotation=i*rotationOffset;let scrollTx=0,scrollTy=0;if(isLive&&enableScrollParallax){const p=scrollProgress*scrollParallaxStrength*i;if(scrollParallaxDirection===\"vertical\")scrollTy=p;else if(scrollParallaxDirection===\"horizontal\")scrollTx=p;else{scrollTx=p;scrollTy=p;}}let ptrTx=0,ptrTy=0;if(isLive&&enablePointerParallax){ptrTx=pointer.x*-pointerParallaxStrength*i;ptrTy=pointer.y*-pointerParallaxStrength*i;}const tx=i*offsetX+scrollTx+ptrTx;const ty=i*offsetY+scrollTy+ptrTy;let msx=1,msy=1;if(mirrorMode===\"alternateH\"&&i%2===1)msx=-1;else if(mirrorMode===\"alternateV\"&&i%2===1)msy=-1;const layerTransform=[`translate(${tx}px, ${ty}px)`,`scale(${scale})`,rotation!==0?`rotate(${rotation}deg)`:null,msx!==1||msy!==1?`scale(${msx}, ${msy})`:null].filter(Boolean).join(\" \");const shadowVal=enableShadow&&i>0?`0px ${i*shadowSize*.4}px ${i*shadowSize}px ${shadowColor}`:\"none\";let hoverDelay=0;if(isLive&&hoverStagger){if(hoverStaggerDirection===\"topToBottom\")hoverDelay=(layerCount-1-i)*hoverStaggerDelay;else if(hoverStaggerDirection===\"bottomToTop\")hoverDelay=i*hoverStaggerDelay;else if(hoverStaggerDirection===\"centerOut\"){const center=(layerCount-1)/2;hoverDelay=Math.abs(i-center)*hoverStaggerDelay;}}const imgScale=isLive&&hovered?hoverScale:1;return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",overflow:\"hidden\",borderRadius:br,opacity,filter:blur>0?`blur(${blur}px)`:\"none\",boxShadow:shadowVal,pointerEvents:i===0?\"auto\":\"none\",transform:layerTransform,transition:isLive?\"transform 0.12s ease-out\":\"none\",willChange:isLive?\"transform\":\"auto\"},children:/*#__PURE__*/_jsx(\"img\",{src:image,alt:\"\",draggable:false,style:{display:\"block\",width:\"100%\",height:\"100%\",objectFit:\"cover\",objectPosition:\"center\",transform:`scale(${imgScale})`,transition:isLive?`transform ${hoverDuration}ms ease-out ${hoverDelay}ms`:\"none\",willChange:isLive?\"transform\":\"auto\"}})},i);})})});}addPropertyControls(EchoStack,{image:{type:ControlType.Image,title:\"Image\"},layerCount:{type:ControlType.Number,defaultValue:5,min:1,max:20,title:\"Layers\",description:\"Total number of image copies stacked to create depth\"},scaleFactor:{type:ControlType.Number,defaultValue:.85,min:.5,max:.99,step:.01,title:\"Scale Factor\",description:\"How much each layer shrinks relative to the one in front\"},offsetX:{type:ControlType.Number,defaultValue:0,min:-50,max:50,title:\"Offset X\",description:\"Horizontal shift per layer in pixels\"},offsetY:{type:ControlType.Number,defaultValue:-15,min:-50,max:50,title:\"Offset Y\",description:\"Vertical shift per layer in pixels\"},rotationOffset:{type:ControlType.Number,defaultValue:0,min:-30,max:30,step:.5,title:\"Rotation per Layer\",description:\"Each layer rotates by this many degrees, creating a fan effect\"},opacityFalloff:{type:ControlType.Number,defaultValue:.1,min:0,max:1,step:.05,title:\"Opacity Falloff\",description:\"How quickly back layers fade out\"},blurFalloff:{type:ControlType.Number,defaultValue:1,min:0,max:10,title:\"Blur Falloff\",description:\"Back layers are blurred; the front layer is always sharp\"},borderRadius:{type:ControlType.Number,defaultValue:50,min:0,max:50,title:\"Roundness %\",description:\"0 = square corners, 50 = full circle\"},enableShadow:{type:ControlType.Boolean,defaultValue:false,title:\"Drop Shadow\",description:\"Shadow deepens on back layers to enhance the depth illusion\"},shadowColor:{type:ControlType.Color,defaultValue:\"rgba(0,0,0,0.25)\",title:\"Shadow Color\",hidden:p=>!p.enableShadow},shadowSize:{type:ControlType.Number,defaultValue:10,min:1,max:60,title:\"Shadow Size\",hidden:p=>!p.enableShadow},mirrorMode:{type:ControlType.Enum,defaultValue:\"none\",options:[\"none\",\"alternateH\",\"alternateV\"],optionTitles:[\"None\",\"Ripple Horizontal\",\"Ripple Vertical\"],title:\"Mirror Layers\",description:\"Flips every other layer for a ripple/echo effect\"},enableScrollParallax:{type:ControlType.Boolean,defaultValue:true,title:\"Scroll Parallax\",description:\"Layers shift at different speeds as the page scrolls\"},scrollParallaxStrength:{type:ControlType.Number,defaultValue:20,min:1,max:100,title:\"Scroll Amount\",hidden:p=>!p.enableScrollParallax},scrollParallaxDirection:{type:ControlType.Enum,defaultValue:\"vertical\",options:[\"vertical\",\"horizontal\",\"both\"],optionTitles:[\"Vertical\",\"Horizontal\",\"Both\"],title:\"Scroll Direction\",hidden:p=>!p.enableScrollParallax},enablePointerParallax:{type:ControlType.Boolean,defaultValue:false,title:\"Pointer Parallax\",description:\"Layers shift with mouse position or touch on mobile\"},pointerParallaxStrength:{type:ControlType.Number,defaultValue:10,min:1,max:50,title:\"Pointer Amount\",hidden:p=>!p.enablePointerParallax},hoverScale:{type:ControlType.Number,defaultValue:1.05,min:1,max:1.5,step:.01,title:\"Hover Scale\",description:\"How much images zoom in when hovered\"},hoverDuration:{type:ControlType.Number,defaultValue:300,min:50,max:1e3,step:10,title:\"Hover Speed (ms)\"},hoverStagger:{type:ControlType.Boolean,defaultValue:true,title:\"Stagger Hover\",description:\"Layers animate in sequence rather than all at once\"},hoverStaggerDirection:{type:ControlType.Enum,defaultValue:\"topToBottom\",options:[\"topToBottom\",\"bottomToTop\",\"centerOut\",\"allAtOnce\"],optionTitles:[\"Top → Bottom\",\"Bottom → Top\",\"Center Out\",\"All at Once\"],title:\"Stagger Direction\",hidden:p=>!p.hoverStagger},hoverStaggerDelay:{type:ControlType.Number,defaultValue:50,min:0,max:200,step:5,title:\"Stagger Delay (ms)\",description:\"Milliseconds between each layer's animation start\",hidden:p=>!p.hoverStagger}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"EchoStack\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./EchoStack.map"],"mappings":"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"}