{"version":3,"file":"SmoothScroll.D3abl8HA.mjs","names":["useRef","useCallback","customEvent"],"sources":["https:/framerusercontent.com/modules/3KLNX03RNKjtopOzD2tz/iGWmGF3sdRH7xtI6PwxS/SmoothScroll.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,useCallback,useEffect,useRef}from\"react\";import{ControlType,addPropertyControls,useIsStaticRenderer}from\"framer\";// User request: Create a Framer code override HOC named withSmoothScroll that adds inertia/eased smooth scrolling to a wrapped page-root element, with configurable controls and clean setup/teardown.\nconst SMOOTH_SCROLL_SYNC_EVENT=\"framer:smooth-scroll-sync\";export function withSmoothScroll(Component){const Wrapped=/*#__PURE__*/forwardRef(function Wrapped(props,ref){const{duration=1.2,easingStrength=.85,wheelMultiplier=1,touchMultiplier=1,smoothTouch=false,...rest}=props;const isStatic=useIsStaticRenderer();const rafRef=useRef(null);const currentYRef=useRef(0);const targetYRef=useRef(0);const maxScrollRef=useRef(0);const lastTimeRef=useRef(0);const touchYRef=useRef(0);const isProgrammaticScrollRef=useRef(false);const isAnchorNavigationActiveRef=useRef(false);const anchorNavigationStartedAtRef=useRef(0);const updateBounds=useCallback(()=>{if(typeof window===\"undefined\"||typeof document===\"undefined\")return;const doc=document.documentElement;maxScrollRef.current=Math.max(0,doc.scrollHeight-window.innerHeight);},[]);const stopAnimation=useCallback(()=>{if(rafRef.current!==null&&typeof window!==\"undefined\"){window.cancelAnimationFrame(rafRef.current);rafRef.current=null;}},[]);useEffect(()=>{if(typeof window===\"undefined\"||typeof document===\"undefined\")return;if(isStatic)return;const reducedMotionQuery=window.matchMedia?.(\"(prefers-reduced-motion: reduce)\");if(reducedMotionQuery?.matches)return;updateBounds();currentYRef.current=window.scrollY;targetYRef.current=window.scrollY;const clamp=value=>Math.min(maxScrollRef.current,Math.max(0,value));const anchorInputSafetyWindowMs=200;const animate=time=>{if(lastTimeRef.current===0){lastTimeRef.current=time;}const deltaTime=(time-lastTimeRef.current)/1e3;lastTimeRef.current=time;const safeDuration=Math.max(.001,duration);const strength=Math.min(1,Math.max(0,easingStrength));const easing=1-Math.exp(-deltaTime/safeDuration*(1+strength*5));currentYRef.current+=(targetYRef.current-currentYRef.current)*easing;if(Math.abs(targetYRef.current-currentYRef.current)<.35){currentYRef.current=targetYRef.current;}isProgrammaticScrollRef.current=true;window.scrollTo(0,currentYRef.current);if(Math.abs(targetYRef.current-currentYRef.current)>=.35){rafRef.current=window.requestAnimationFrame(animate);}else{stopAnimation();lastTimeRef.current=0;isAnchorNavigationActiveRef.current=false;}};const startAnimation=()=>{if(rafRef.current!==null)return;rafRef.current=window.requestAnimationFrame(animate);};const getDocumentLayoutY=element=>{let y=0;let current=element;while(current){y+=current.offsetTop;current=current.offsetParent;}return y;};const scrollToHashTarget=targetId=>{if(!targetId)return false;updateBounds();stopAnimation();lastTimeRef.current=0;currentYRef.current=window.scrollY;if(targetId===\"top\"){targetYRef.current=0;isAnchorNavigationActiveRef.current=true;anchorNavigationStartedAtRef.current=performance.now();startAnimation();return true;}const targetElement=document.getElementById(targetId);if(!targetElement)return false;const absoluteTargetY=getDocumentLayoutY(targetElement);targetYRef.current=clamp(absoluteTargetY);isAnchorNavigationActiveRef.current=true;anchorNavigationStartedAtRef.current=performance.now();startAnimation();return true;};const handleWheel=event=>{event.preventDefault();if(isAnchorNavigationActiveRef.current){const elapsed=performance.now()-anchorNavigationStartedAtRef.current;if(elapsed<anchorInputSafetyWindowMs)return;isAnchorNavigationActiveRef.current=false;}updateBounds();const multiplier=event.deltaMode===0?touchMultiplier:wheelMultiplier;const nextTarget=targetYRef.current+event.deltaY*multiplier;targetYRef.current=clamp(nextTarget);startAnimation();};const handleScroll=()=>{if(isProgrammaticScrollRef.current){isProgrammaticScrollRef.current=false;return;}currentYRef.current=window.scrollY;targetYRef.current=window.scrollY;};const handleResize=()=>{updateBounds();targetYRef.current=clamp(targetYRef.current);currentYRef.current=clamp(currentYRef.current);};const handleTouchStart=event=>{if(!smoothTouch)return;if(event.touches.length===0)return;touchYRef.current=event.touches[0].clientY;};const handleTouchMove=event=>{if(!smoothTouch)return;if(event.touches.length===0)return;const newY=event.touches[0].clientY;const delta=touchYRef.current-newY;touchYRef.current=newY;event.preventDefault();if(isAnchorNavigationActiveRef.current){const elapsed=performance.now()-anchorNavigationStartedAtRef.current;if(elapsed<anchorInputSafetyWindowMs)return;isAnchorNavigationActiveRef.current=false;}updateBounds();targetYRef.current=clamp(targetYRef.current+delta*touchMultiplier);startAnimation();};const handleDocumentClick=event=>{if(event.button!==0)return;if(event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return;const target=event.target;if(!(target instanceof Element))return;const anchor=target.closest(\"a[href]\");if(!anchor)return;if(anchor.target===\"_blank\"||anchor.hasAttribute(\"download\"))return;const rawHref=anchor.getAttribute(\"href\");if(!rawHref)return;let targetId=\"\";if(rawHref.startsWith(\"#\")){targetId=decodeURIComponent(rawHref.slice(1));}else{let parsedUrl;try{parsedUrl=new URL(rawHref,window.location.href);}catch{return;}const isSamePage=parsedUrl.origin===window.location.origin&&parsedUrl.pathname===window.location.pathname&&parsedUrl.hash.length>1;if(!isSamePage)return;targetId=decodeURIComponent(parsedUrl.hash.slice(1));}if(!targetId)return;const canHandle=targetId===\"top\"||Boolean(document.getElementById(targetId));if(!canHandle)return;event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();scrollToHashTarget(targetId);};const handleHashChange=()=>{const rawHash=window.location.hash;if(!rawHash||rawHash.length<2)return;const targetId=decodeURIComponent(rawHash.slice(1));scrollToHashTarget(targetId);};const handleSmoothScrollSync=event=>{const customEvent=event;const nextYRaw=customEvent.detail?.targetY;if(typeof nextYRaw!==\"number\"||!Number.isFinite(nextYRaw))return;updateBounds();const nextY=clamp(nextYRaw);stopAnimation();lastTimeRef.current=0;isAnchorNavigationActiveRef.current=false;targetYRef.current=nextY;currentYRef.current=nextY;isProgrammaticScrollRef.current=true;window.scrollTo(0,nextY);};window.addEventListener(\"wheel\",handleWheel,{passive:false});window.addEventListener(\"scroll\",handleScroll,{passive:true});window.addEventListener(\"resize\",handleResize);window.addEventListener(\"touchstart\",handleTouchStart,{passive:false});window.addEventListener(\"touchmove\",handleTouchMove,{passive:false});document.addEventListener(\"click\",handleDocumentClick,{capture:true});window.addEventListener(\"hashchange\",handleHashChange);window.addEventListener(SMOOTH_SCROLL_SYNC_EVENT,handleSmoothScrollSync);return()=>{stopAnimation();window.removeEventListener(\"wheel\",handleWheel);window.removeEventListener(\"scroll\",handleScroll);window.removeEventListener(\"resize\",handleResize);window.removeEventListener(\"touchstart\",handleTouchStart);window.removeEventListener(\"touchmove\",handleTouchMove);document.removeEventListener(\"click\",handleDocumentClick,{capture:true});window.removeEventListener(\"hashchange\",handleHashChange);window.removeEventListener(SMOOTH_SCROLL_SYNC_EVENT,handleSmoothScrollSync);};},[duration,easingStrength,wheelMultiplier,touchMultiplier,smoothTouch,isStatic,stopAnimation,updateBounds]);return /*#__PURE__*/_jsx(Component,{ref:ref,...rest});});addPropertyControls(Wrapped,{duration:{type:ControlType.Number,title:\"Duration\",defaultValue:1.2,min:.1,max:3,step:.05},easingStrength:{type:ControlType.Number,title:\"Easing\",defaultValue:.85,min:0,max:1,step:.01},wheelMultiplier:{type:ControlType.Number,title:\"Wheel\",defaultValue:1,min:.1,max:4,step:.1},touchMultiplier:{type:ControlType.Number,title:\"Touch\",defaultValue:1,min:.1,max:4,step:.1},smoothTouch:{type:ControlType.Boolean,title:\"Smooth Touch\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"}});return Wrapped;}\nexport const __FramerMetadata__ = {\"exports\":{\"withSmoothScroll\":{\"type\":\"reactHoc\",\"name\":\"withSmoothScroll\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SmoothScroll.map"],"mappings":"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"}