{"version":3,"file":"l7xe_bXpH.BvR1iXw4.mjs","names":["useRef","useState","_Fragment"],"sources":["https:/framerusercontent.com/modules/d1dpbpF7eWnaDMhbXZFR/hsIceIG7b82ewTahN4HO/Smooth_Scroll.js","https:/framerusercontent.com/modules/iN8ynYdGXIo2D1M7HYty/7ZI6YxonKWkO70Xf8lFe/l7xe_bXpH.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef,useState}from\"react\";/**\n * @framerDisableUnlink\n */export default function OptimizedSmoothScroll(props){// Destructure props at the top level\nconst{intensity=10,enabled=true,disableOnTouch=true}=props;// Component state\nconst lenisRef=useRef(null);const[isLenisLoaded,setIsLenisLoaded]=useState(false);const rafRef=useRef(null);const[isTouchDevice,setIsTouchDevice]=useState(false);const[isOverlayOpen,setIsOverlayOpen]=useState(false);const isInitialLoadRef=useRef(true);const lastScrollPosition=useRef(0);// Check if the device is a touch device - function defined outside hooks\nconst checkTouchDevice=()=>{if(typeof window!==\"undefined\"){return\"ontouchstart\"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;}return false;};// Set touch device state on first render\nuseEffect(()=>{setIsTouchDevice(checkTouchDevice());},[]);// Determine if smooth scroll should be active\n// Now it also considers if an overlay is open\nconst shouldActivate=enabled&&!(disableOnTouch&&isTouchDevice)&&!isOverlayOpen;// Priority load styles to ensure smooth scroll is active from the start\nuseEffect(()=>{const addInitialStyles=()=>{// Add initial styles to ensure smooth scrolling is active from the start\nconst styleEl=document.createElement(\"style\");styleEl.id=\"lenis-initial-styles\";styleEl.innerHTML=`\n                html.lenis {\n                    height: auto;\n                }\n                \n                .lenis.lenis-smooth {\n                    scroll-behavior: auto !important;\n                }\n                \n                .lenis.lenis-smooth [data-lenis-prevent] {\n                    overscroll-behavior: contain;\n                }\n                \n                .lenis.lenis-stopped {\n                    overflow: hidden;\n                }\n                \n                .lenis.lenis-scrolling iframe {\n                    pointer-events: none;\n                }\n            `;document.head.appendChild(styleEl);return()=>{const existingStyle=document.getElementById(\"lenis-initial-styles\");if(existingStyle){existingStyle.remove();}};};// If we should activate, add styles right away\nif(shouldActivate){return addInitialStyles();}},[shouldActivate]);// Dynamically load Lenis to avoid issues during initial rendering\nuseEffect(()=>{if(!shouldActivate)return;let isMounted=true;// Load Lenis dynamically\nconst loadLenis=async()=>{try{// Use dynamic import to load Lenis only when needed\nconst Lenis=(await import(\"@studio-freight/lenis\")).default;if(isMounted){// Initialize Lenis with smoother settings\nlenisRef.current=new Lenis({duration:intensity/10,smoothWheel:true,syncTouch:!disableOnTouch,touchMultiplier:2,wheelMultiplier:1.5,orientation:\"vertical\",gestureOrientation:\"vertical\",smoothTouch:!disableOnTouch,easing:t=>Math.min(1,1.001-Math.pow(2,-10*t)),immediate:false});// Start the lenis instance immediately\nlenisRef.current.start();// Make sure to set up RAF loop immediately\nconst raf=time=>{if(lenisRef.current){lenisRef.current.raf(time);}rafRef.current=requestAnimationFrame(raf);};rafRef.current=requestAnimationFrame(raf);setIsLenisLoaded(true);}}catch(error){console.warn(\"Failed to load Lenis:\",error);}};// Load Lenis with higher priority\nsetTimeout(loadLenis,0);return()=>{isMounted=false;// Proper cleanup\nif(lenisRef.current){lenisRef.current.destroy();lenisRef.current=null;}if(rafRef.current){cancelAnimationFrame(rafRef.current);rafRef.current=null;}setIsLenisLoaded(false);};},[shouldActivate,intensity,disableOnTouch]);// Set up animation loop only when Lenis is loaded - Now this is handled in the initialization\nuseEffect(()=>{// Only handle stopping the RAF loop here, starting is done in the init\nif(!isLenisLoaded||!shouldActivate)return;return()=>{if(rafRef.current){cancelAnimationFrame(rafRef.current);rafRef.current=null;}};},[isLenisLoaded,shouldActivate]);// Only reset scroll position on initial load, not when closing overlay\nuseEffect(()=>{if(lenisRef.current&&isLenisLoaded){if(isInitialLoadRef.current){lenisRef.current.scrollTo(0,{immediate:true});isInitialLoadRef.current=false;}}},[isLenisLoaded]);// Save scroll position periodically\nuseEffect(()=>{if(!shouldActivate)return;const saveScrollPosition=()=>{lastScrollPosition.current=window.scrollY;};// Save position every 300ms\nconst interval=setInterval(saveScrollPosition,300);// Also save on scroll\nwindow.addEventListener(\"scroll\",saveScrollPosition,{passive:true});return()=>{clearInterval(interval);window.removeEventListener(\"scroll\",saveScrollPosition);};},[shouldActivate]);// Handle overlays and modals - Enhanced version\nuseEffect(()=>{// Function to check if overlay is open\nconst checkOverlayState=()=>{const overlayElement=document.getElementById(\"overlay\");if(overlayElement){// Check if the overlay has children (which means it's active)\nconst hasChildren=overlayElement.children.length>0;// Only update if the state actually changed to prevent unnecessary effects\nif(hasChildren!==isOverlayOpen){setIsOverlayOpen(hasChildren);if(hasChildren){// If overlay is opened, save current position first\nlastScrollPosition.current=window.scrollY;// Then stop Lenis\nif(lenisRef.current){lenisRef.current.stop();}}else if(enabled&&!(disableOnTouch&&isTouchDevice)){// If overlay is closed and should be active, restart Lenis\nif(lenisRef.current){// Get saved position before restart\nconst savedPosition=lastScrollPosition.current;lenisRef.current.start();// After a small delay, restore position\nsetTimeout(()=>{window.scrollTo({top:savedPosition,behavior:\"auto\"});},10);}}}}};// Run the check immediately\ncheckOverlayState();// Observe changes to the overlay element\nconst overlayElement=document.getElementById(\"overlay\");if(overlayElement){const observer=new MutationObserver(()=>{checkOverlayState();});observer.observe(overlayElement,{childList:true});return()=>{observer.disconnect();};}// Also observe the HTML element for overflow changes\n// This catches modals that might not use the overlay element\nconst htmlElement=document.documentElement;const bodyObserver=new MutationObserver(()=>{const isOverflowHidden=window.getComputedStyle(htmlElement).overflow===\"hidden\";if(isOverflowHidden){// Save position before stopping\nlastScrollPosition.current=window.scrollY;if(lenisRef.current){lenisRef.current.stop();}}else if(enabled&&!(disableOnTouch&&isTouchDevice)&&!isOverlayOpen){if(lenisRef.current){// Get saved position\nconst savedPosition=lastScrollPosition.current;lenisRef.current.start();// Restore position\nsetTimeout(()=>{window.scrollTo({top:savedPosition,behavior:\"auto\"});},10);}}});bodyObserver.observe(htmlElement,{attributes:true,attributeFilter:[\"style\"]});return()=>{bodyObserver.disconnect();};},[isOverlayOpen,enabled,disableOnTouch,isTouchDevice]);// Debug info for development purposes\nconst debugInfo=process.env.NODE_ENV===\"development\"?/*#__PURE__*/_jsxs(\"div\",{style:{display:\"none\"},children:[`Touch device: ${isTouchDevice?\"Yes\":\"No\"}`,`Smooth scroll active: ${shouldActivate?\"Yes\":\"No\"}`,`Overlay open: ${isOverlayOpen?\"Yes\":\"No\"}`,`Last scroll position: ${lastScrollPosition.current}`]}):null;return /*#__PURE__*/_jsxs(_Fragment,{children:[debugInfo,isLenisLoaded&&shouldActivate&&/*#__PURE__*/_jsx(\"style\",{children:`\n                    html.lenis {\n                        height: auto;\n                    }\n                    \n                    .lenis.lenis-smooth {\n                        scroll-behavior: auto !important;\n                    }\n                    \n                    .lenis.lenis-smooth [data-lenis-prevent] {\n                        overscroll-behavior: contain;\n                    }\n                    \n                    .lenis.lenis-stopped {\n                        overflow: hidden;\n                    }\n                    \n                    .lenis.lenis-scrolling iframe {\n                        pointer-events: none;\n                    }\n                    `})]});}OptimizedSmoothScroll.displayName=\"Smooth Scroll\";addPropertyControls(OptimizedSmoothScroll,{intensity:{title:\"Intensity\",type:ControlType.Number,defaultValue:10,min:1,max:20,step:1},enabled:{title:\"Enabled\",type:ControlType.Boolean,defaultValue:true},disableOnTouch:{title:\"Disable on touch devices\",type:ControlType.Boolean,defaultValue:true,description:\"Smooth Scroll v4 automatically disables smooth scrolling on phones and tablets and is now enhanced to disable automatically when overlays are open.\\n\\nBy [Andr\\xe9s Marciales](https://www.x.com/aamarciales)\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"OptimizedSmoothScroll\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Smooth_Scroll.map","// Generated by Framer (beb597f)\nimport{fontStore}from\"framer\";fontStore.loadFonts([\"CUSTOMV2;Bounded Regular\",\"CUSTOMV2;Bounded Black\"]);export const fonts=[{explicitInter:true,fonts:[{cssFamilyName:\"Bounded Regular\",source:\"custom\",style:\"normal\",uiFamilyName:\"Bounded\",url:\"https://pridumay.studio/_fc/assets/GGPlPKmjBeuZ7nCoXRcHqmTQA1w.woff2\",weight:\"400\"},{cssFamilyName:\"Bounded Black\",source:\"custom\",style:\"normal\",uiFamilyName:\"Bounded\",url:\"https://pridumay.studio/_fc/assets/sRMZyu7fhc0r91XYPAORkm8sonI.woff2\",weight:\"900\"}]}];export const css=['.framer-83CWM .framer-styles-preset-kjpgfo:not(.rich-text-wrapper), .framer-83CWM .framer-styles-preset-kjpgfo.rich-text-wrapper h4 { --framer-font-family: \"Bounded Regular\", \"Bounded Regular Placeholder\", sans-serif; --framer-font-family-bold: \"Bounded Black\", sans-serif; --framer-font-open-type-features: normal; --framer-font-size: 14px; --framer-font-style: normal; --framer-font-style-bold: normal; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-font-weight-bold: 900; --framer-letter-spacing: 0.5px; --framer-line-height: 1.4em; --framer-paragraph-spacing: 40px; --framer-text-alignment: start; --framer-text-color: #ffffff; --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; }'];export const className=\"framer-83CWM\";\nexport const __FramerMetadata__ = {\"exports\":{\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}