{"version":3,"file":"withSectionReveal.DW7IMvO2.mjs","names":["useRef","_Fragment"],"sources":["https:/framerusercontent.com/modules/eAtqoERQtZeHpxjWc5c9/LNOkN1oTtCuwx3yHRdVV/withSectionReveal.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useRef,useLayoutEffect}from\"react\";import{addPropertyControls,ControlType}from\"framer\";const EASING=\"cubic-bezier(0.22,1,0.36,1)\";const LEAF_LIFT=24;function baseTransform(node){const value=window.getComputedStyle(node).transform;return!value||value===\"none\"?\"\":value;}// Each direct child of the section becomes its own mask: the child clips, and\n// the elements *inside* it are pushed below that mask and slide back up.\n// Nothing is re-parented and no layout style is copied, so the child keeps the\n// exact layout Framer gave it - grid columns, flex direction, wrapping and all.\nfunction prepareChild(child,index,options){const{staggerDelay,duration,distance}=options;const delay=index*staggerDelay;const inner=Array.from(child.children).filter(node=>node instanceof HTMLElement);// a leaf layer (single Image, plain text) has nothing inside it to slide\n// behind a mask - lift and fade the layer itself instead\nif(inner.length===0){const base=baseTransform(child);return{measure(){},arm(){child.style.willChange=\"opacity, transform\";child.style.transition=`opacity ${duration}s ${EASING}, transform ${duration}s ${EASING}`;child.style.transitionDelay=`${delay}s`;},hide(){child.style.opacity=\"0\";child.style.transform=`${base} translateY(${LEAF_LIFT}px)`;},show(){child.style.opacity=\"1\";child.style.transform=base;},reset(){child.style.willChange=\"\";child.style.transition=\"\";child.style.transitionDelay=\"\";child.style.opacity=\"\";child.style.transform=\"\";}};}const previousOverflow=child.style.overflow;child.style.overflow=\"hidden\";// compose onto any transform Framer already set, rather than replacing it\nconst targets=inner.map(node=>({node,base:baseTransform(node)}));let offset=0;return{measure(){offset=child.getBoundingClientRect().height*distance/100;},arm(){targets.forEach(({node})=>{node.style.willChange=\"transform\";node.style.transition=`transform ${duration}s ${EASING}`;node.style.transitionDelay=`${delay}s`;});},hide(){targets.forEach(({node,base})=>{node.style.transform=`${base} translateY(${offset}px)`;});},show(){targets.forEach(({node,base})=>{node.style.transform=base;});},reset(){child.style.overflow=previousOverflow;targets.forEach(({node})=>{node.style.willChange=\"\";node.style.transition=\"\";node.style.transitionDelay=\"\";node.style.transform=\"\";});}};}function setupChildStagger(el,children,options){const{triggerOnce}=options;const groups=children.map((child,index)=>prepareChild(child,index,options));const settle=()=>groups.forEach(group=>group.measure());// hide before anything is armed, so the first frame is a jump, not a slide\nsettle();groups.forEach(group=>group.hide());let armed=false;let revealed=false;const reveal=()=>{if(revealed)return;revealed=true;if(!armed){armed=true;groups.forEach(group=>group.arm());}groups.forEach(group=>group.show());};const hide=()=>{revealed=false;settle();groups.forEach(group=>group.hide());};// heights are not final until images and fonts land - keep the offset in\n// sync so nothing peeks above the mask before it is revealed\nconst resizeObserver=new ResizeObserver(()=>{settle();if(!revealed)groups.forEach(group=>group.hide());});children.forEach(child=>resizeObserver.observe(child));const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){reveal();if(triggerOnce)observer.disconnect();}else if(!triggerOnce){hide();}},{threshold:0,rootMargin:\"0px 0px -10% 0px\"});observer.observe(el);return()=>{observer.disconnect();resizeObserver.disconnect();groups.forEach(group=>group.reset());};}// for a leaf layer with no children to stagger (e.g. a single Image) -\n// reveal the element itself directly, no DOM restructuring needed\nfunction setupLeafReveal(el,options){const{duration,triggerOnce}=options;const liftPx=LEAF_LIFT;el.style.willChange=\"opacity, transform\";el.style.opacity=\"0\";el.style.transform=`translateY(${liftPx}px)`;el.style.transition=`opacity ${duration}s ${EASING}, transform ${duration}s ${EASING}`;let revealed=false;const reveal=()=>{if(revealed)return;revealed=true;el.style.opacity=\"1\";el.style.transform=\"translateY(0)\";};const hide=()=>{revealed=false;el.style.opacity=\"0\";el.style.transform=`translateY(${liftPx}px)`;};const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){reveal();if(triggerOnce)observer.disconnect();}else if(!triggerOnce){hide();}},{threshold:0,rootMargin:\"0px 0px -10% 0px\"});observer.observe(el);return()=>observer.disconnect();}export function withSectionReveal(Component){return props=>{const{staggerDelay=.18,duration=1.5,distance=105,triggerOnce=true,...rest}=props;const sentinelRef=useRef(null);useLayoutEffect(()=>{const el=sentinelRef.current?.nextElementSibling;if(!el)return;let cleanup;let mutationObserver;let fallbackTimer;const finish=setup=>{if(el.dataset.staggerReady)return;el.dataset.staggerReady=\"true\";mutationObserver?.disconnect();window.clearTimeout(fallbackTimer);cleanup=setup();};const trySetupChildren=()=>{const children=Array.from(el.children);if(children.length===0)return false;finish(()=>setupChildStagger(el,children,{staggerDelay,duration,distance,triggerOnce}));return true;};if(!trySetupChildren()){// some containers (e.g. Grid layers) populate their\n// children slightly after initial mount - watch for that\nmutationObserver=new MutationObserver(()=>{trySetupChildren();});mutationObserver.observe(el,{childList:true});// if nothing ever shows up, this is a genuine leaf layer\n// (e.g. a single Image with no DOM children) - reveal it\n// directly instead of waiting forever\nfallbackTimer=window.setTimeout(()=>{finish(()=>setupLeafReveal(el,{duration,triggerOnce}));},300);}return()=>{mutationObserver?.disconnect();window.clearTimeout(fallbackTimer);cleanup?.();};},[staggerDelay,duration,distance,triggerOnce]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{ref:sentinelRef,style:{display:\"none\"}}),/*#__PURE__*/_jsx(Component,{...rest})]});};}addPropertyControls(withSectionReveal,{staggerDelay:{type:ControlType.Number,min:.02,max:.4,step:.01,defaultValue:.18},duration:{type:ControlType.Number,min:.2,max:2.5,step:.02,defaultValue:1.5},distance:{type:ControlType.Number,min:100,max:200,step:5,defaultValue:105},triggerOnce:{type:ControlType.Boolean,defaultValue:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"withSectionReveal\":{\"type\":\"reactHoc\",\"name\":\"withSectionReveal\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./withSectionReveal.map"],"mappings":"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"}