{"version":3,"file":"GridPatternOverlay.DQVOVJJq.mjs","names":["useRef","useState","useCallback","__esmMin","init_ssg_sandbox_shims","init_npm_react_18_3_1","window","ce","init_jsx_runtime","ne","_e","de","addPropertyControls","ControlType","init_framer_BikQVKhx","GridPatternOverlay","props","wrapperRef","dims","setDims","measured","setMeasured","forceOverflowVisible","el","node","i","style","findSection","reposition","sectionEl","sectionRect","elRect","t1","t2","t3","t4","observer","overflowTimer","innerStop","fadeSoftness","headerGradient","fadeHeaderRadiusX","fadeHeaderRadiusY","fadeX","fadeHeaderY","bodyGradient","fadeBodyRadiusX","fadeBodyRadiusY","fadeBodyY","embedGradient","fadeEmbedRadiusX","fadeEmbedRadiusY","fadeEmbedX","fadeEmbedY","fadeEmbedSoftness","maskImageValue","fadeEmbed","maskSizeValue","maskStyle","fadeMask","gridColor","lineWidth","gridSpacing","gridOpacity","init_GridPatternOverlay"],"sources":["https:/framerusercontent.com/modules/S7yp1o9LlIsvdC4BiV1z/Rbo81MGUvCfA7AM5qGPl/GridPatternOverlay.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect,useRef,useCallback}from\"react\";import{addPropertyControls,ControlType}from\"framer\";function GridPatternOverlay(props){const{gridColor=\"rgb(225, 224, 218)\",lineWidth=1,gridSpacing=40,gridOpacity=.12,fadeMask=false,fadeX=25,fadeHeaderY=35,fadeHeaderRadiusX=240,fadeHeaderRadiusY=110,fadeBodyY=62,fadeBodyRadiusX=280,fadeBodyRadiusY=150,fadeSoftness=60,fadeEmbed=false,fadeEmbedX=50,fadeEmbedY=75,fadeEmbedRadiusX=520,fadeEmbedRadiusY=320,fadeEmbedSoftness=92,style}=props;const wrapperRef=useRef(null);const[dims,setDims]=useState({x:0,y:0,w:0,h:0});// False until the section has been measured. While false the grid layer is\n// not painted, so it can never register as a layout shift.\nconst[measured,setMeasured]=useState(false);const forceOverflowVisible=useCallback(()=>{const el=wrapperRef.current;if(!el)return;let node=el.parentElement;for(let i=0;i<10;i++){if(!node)break;const style=window.getComputedStyle(node);if(style.overflow===\"hidden\"||style.overflow===\"clip\"||style.overflowX===\"hidden\"||style.overflowY===\"hidden\"){// Only force overflow on tiny Framer wrappers (height < 10px),\n// not on section-level containers which need overflow hidden for mobile\nif(node.offsetHeight<10){node.style.overflow=\"visible\";}}// Stop at any container with meaningful height (section-level)\nif(node.offsetHeight>=100){break;}node=node.parentElement;}},[]);const findSection=useCallback(()=>{const el=wrapperRef.current;if(!el)return null;let node=el;while(node&&node.parentElement){node=node.parentElement;if(node.offsetWidth>=300&&node.offsetHeight>=200){return node;}}return null;},[]);const reposition=useCallback(()=>{const el=wrapperRef.current;if(!el)return;forceOverflowVisible();const sectionEl=findSection();if(!sectionEl)return;const sectionRect=sectionEl.getBoundingClientRect();const elRect=el.getBoundingClientRect();setDims({x:sectionRect.left-elRect.left,y:sectionRect.top-elRect.top,w:sectionRect.width,h:sectionRect.height});setMeasured(true);},[findSection,forceOverflowVisible]);useEffect(()=>{if(typeof window===\"undefined\")return;// Measure straight away so the grid appears on the next frame.\nreposition();const t1=setTimeout(reposition,100);const t2=setTimeout(reposition,300);const t3=setTimeout(reposition,800);const t4=setTimeout(reposition,2e3);let observer=null;try{observer=new ResizeObserver(()=>reposition());if(wrapperRef.current?.parentElement){observer.observe(wrapperRef.current.parentElement);}}catch(e){// no-op\n}window.addEventListener(\"resize\",reposition);const overflowTimer=window.setInterval(forceOverflowVisible,3e3);return()=>{clearTimeout(t1);clearTimeout(t2);clearTimeout(t3);clearTimeout(t4);observer?.disconnect();window.removeEventListener(\"resize\",reposition);clearInterval(overflowTimer);};},[reposition,forceOverflowVisible]);// Build a CSS mask that fades the grid out where the header text and\n// the body text sit, and fades it back in everywhere else. Two radial\n// gradients are intersected so each one carves a soft hole.\n// When fadeMask is false, no mask styles are applied at all, so this\n// change is fully reversible and a no-op for every other instance.\n// When fadeEmbed is true a third gradient is added that carves out\n// the area where an embedded component (e.g. Cal.com) sits, so the\n// grid never appears on top of the embed. fadeEmbed defaults to false\n// so existing instances are unaffected.\nconst softnessClamped=Math.max(0,Math.min(95,fadeSoftness));const innerStop=`${softnessClamped}%`;const headerGradient=`radial-gradient(ellipse ${fadeHeaderRadiusX}px ${fadeHeaderRadiusY}px at ${fadeX}% ${fadeHeaderY}%, transparent 0%, transparent ${innerStop}, black 100%)`;const bodyGradient=`radial-gradient(ellipse ${fadeBodyRadiusX}px ${fadeBodyRadiusY}px at ${fadeX}% ${fadeBodyY}%, transparent 0%, transparent ${innerStop}, black 100%)`;const embedSoftnessClamped=Math.max(0,Math.min(99,fadeEmbedSoftness));const embedInnerStop=`${embedSoftnessClamped}%`;const embedGradient=`radial-gradient(ellipse ${fadeEmbedRadiusX}px ${fadeEmbedRadiusY}px at ${fadeEmbedX}% ${fadeEmbedY}%, transparent 0%, transparent ${embedInnerStop}, black 100%)`;const maskImageValue=fadeEmbed?`${headerGradient}, ${bodyGradient}, ${embedGradient}`:`${headerGradient}, ${bodyGradient}`;const maskSizeValue=fadeEmbed?\"100% 100%, 100% 100%, 100% 100%\":\"100% 100%, 100% 100%\";const maskStyle=fadeMask?{WebkitMaskImage:maskImageValue,maskImage:maskImageValue,WebkitMaskComposite:\"source-in\",maskComposite:\"intersect\",WebkitMaskRepeat:\"no-repeat\",maskRepeat:\"no-repeat\",WebkitMaskSize:maskSizeValue,maskSize:maskSizeValue}:{};return /*#__PURE__*/_jsx(\"div\",{ref:wrapperRef,style:{position:\"relative\",width:0,height:0,overflow:\"visible\",pointerEvents:\"none\",...style},children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:dims.x,top:dims.y,width:dims.w||\"100vw\",height:dims.h||\"100vh\",// Not painted until measured => never a layout-shift source.\nvisibility:measured?\"visible\":\"hidden\",backgroundImage:`linear-gradient(to right, ${gridColor} ${lineWidth}px, transparent ${lineWidth}px), linear-gradient(to bottom, ${gridColor} ${lineWidth}px, transparent ${lineWidth}px)`,backgroundSize:`${gridSpacing}px ${gridSpacing}px`,backgroundPosition:`0px 0px`,opacity:gridOpacity,pointerEvents:\"none\",zIndex:0,...maskStyle}})});}addPropertyControls(GridPatternOverlay,{gridColor:{title:\"Grid Color\",type:ControlType.Color,defaultValue:\"rgb(225, 224, 218)\"},lineWidth:{title:\"Line Width\",type:ControlType.Number,defaultValue:1,min:.5,max:4,step:.5},gridSpacing:{title:\"Grid Spacing\",type:ControlType.Number,defaultValue:40,min:8,max:120,step:1},gridOpacity:{title:\"Opacity\",type:ControlType.Number,defaultValue:.12,min:0,max:1,step:.01},fadeMask:{title:\"Fade Mask\",type:ControlType.Boolean,defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},fadeX:{title:\"Fade X %\",type:ControlType.Number,defaultValue:25,min:0,max:100,step:1,hidden:props=>!props.fadeMask},fadeHeaderY:{title:\"Header Y %\",type:ControlType.Number,defaultValue:35,min:0,max:100,step:1,hidden:props=>!props.fadeMask},fadeHeaderRadiusX:{title:\"Header RX\",type:ControlType.Number,defaultValue:240,min:20,max:1e3,step:1,hidden:props=>!props.fadeMask},fadeHeaderRadiusY:{title:\"Header RY\",type:ControlType.Number,defaultValue:110,min:20,max:600,step:1,hidden:props=>!props.fadeMask},fadeBodyY:{title:\"Body Y %\",type:ControlType.Number,defaultValue:62,min:0,max:100,step:1,hidden:props=>!props.fadeMask},fadeBodyRadiusX:{title:\"Body RX\",type:ControlType.Number,defaultValue:280,min:20,max:1e3,step:1,hidden:props=>!props.fadeMask},fadeBodyRadiusY:{title:\"Body RY\",type:ControlType.Number,defaultValue:150,min:20,max:600,step:1,hidden:props=>!props.fadeMask},fadeSoftness:{title:\"Softness %\",type:ControlType.Number,defaultValue:60,min:0,max:95,step:1,hidden:props=>!props.fadeMask},fadeEmbed:{title:\"Fade Embed\",type:ControlType.Boolean,defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:props=>!props.fadeMask},fadeEmbedX:{title:\"Embed X %\",type:ControlType.Number,defaultValue:50,min:0,max:100,step:1,hidden:props=>!props.fadeMask||!props.fadeEmbed},fadeEmbedY:{title:\"Embed Y %\",type:ControlType.Number,defaultValue:75,min:0,max:100,step:1,hidden:props=>!props.fadeMask||!props.fadeEmbed},fadeEmbedRadiusX:{title:\"Embed RX\",type:ControlType.Number,defaultValue:520,min:20,max:2e3,step:1,hidden:props=>!props.fadeMask||!props.fadeEmbed},fadeEmbedRadiusY:{title:\"Embed RY\",type:ControlType.Number,defaultValue:320,min:20,max:1500,step:1,hidden:props=>!props.fadeMask||!props.fadeEmbed},fadeEmbedSoftness:{title:\"Embed Softness %\",type:ControlType.Number,defaultValue:92,min:0,max:99,step:1,hidden:props=>!props.fadeMask||!props.fadeEmbed}});export default GridPatternOverlay;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"GridPatternOverlay\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./GridPatternOverlay.map"],"mappings":"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"}