{"version":3,"file":"MeshBackground.D4M8pCGS.mjs","names":["React.useState","React.useRef"],"sources":["https:/framerusercontent.com/modules/u8tbIpn8ke8P5ITKWkR6/FZ3jrb4IlryBQgHan9Ek/MeshBackground.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";function drawGrain(canvas,grainPx){if(typeof window===\"undefined\")return;const dpr=Math.min(window.devicePixelRatio||1,2);const W=canvas.clientWidth;const H=canvas.clientHeight;if(!W||!H)return;// Noise is generated at (device resolution / grainPx) and upscaled with\n// smoothing off — grains get bigger but stay pixel-sharp, never blurry.\nconst gw=Math.max(1,Math.round(W*dpr/grainPx));const gh=Math.max(1,Math.round(H*dpr/grainPx));const noise=document.createElement(\"canvas\");noise.width=gw;noise.height=gh;const nctx=noise.getContext(\"2d\");if(!nctx)return;const img=nctx.createImageData(gw,gh);const d=img.data;for(let i=0;i<d.length;i+=4){// average of two uniforms ≈ triangular distribution — softer than\n// pure uniform, closer to photographic grain\nconst v=(Math.random()+Math.random())/2*255;d[i]=v;d[i+1]=v;d[i+2]=v;d[i+3]=255;}nctx.putImageData(img,0,0);canvas.width=W*dpr;canvas.height=H*dpr;const ctx=canvas.getContext(\"2d\");if(!ctx)return;ctx.imageSmoothingEnabled=false;ctx.drawImage(noise,0,0,gw,gh,0,0,canvas.width,canvas.height);}/**\n * ShaderGradient background. Modes:\n * - Baked (production): `staticImage` set — renders the pre-rendered shader\n *   frame as an <img>. If `grainTile` is also set, a small repeating noise\n *   tile is composited on top with plain opacity (no blend mode, so it can\n *   never trip Chrome's backdrop-filter tiling bug). The baked image should\n *   be mean-compensated for the tile opacity.\n * - Live: no image — lazy-loads three.js + shadergradient (experiments only).\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function MeshBackground(props){const{staticImage,grainTile,grainTileOpacity=.11,grainTileSize=192,color1=\"#d000ff\",color2=\"#203586\",color3=\"#103e3e\",wireframe=true,grain=true,uTime=11.3,uStrength=2.5,uDensity=2,brightness=.9,cameraZoom=8.5,rotationZ=30,fadeEdges=false,filmGrain=false,filmGrainAmt=.1,filmGrainBlend=\"multiply\",filmGrainSize=1,style}=props;const baked=!!(staticImage&&staticImage.src);const[mounted,setMounted]=React.useState(false);React.useEffect(()=>{setMounted(true);},[]);// Live mode: no placeholder — the section's own background shows while\n// WebGL boots, then the gradient fades in instead of popping.\nconst[ready,setReady]=React.useState(false);React.useEffect(()=>{if(baked||!mounted)return;const t=window.setTimeout(()=>setReady(true),250);return()=>window.clearTimeout(t);},[baked,mounted]);const grainRef=React.useRef(null);React.useEffect(()=>{if(!filmGrain)return;const canvas=grainRef.current;if(!canvas)return;const draw=()=>drawGrain(canvas,filmGrainSize);draw();let t=0;const ro=new ResizeObserver(()=>{window.clearTimeout(t);t=window.setTimeout(draw,150);});ro.observe(canvas);return()=>{window.clearTimeout(t);ro.disconnect();};},[filmGrain,filmGrainSize]);const fill={position:\"absolute\",inset:0};let layer=null;if(baked){layer=/*#__PURE__*/_jsx(\"img\",{src:staticImage.src,srcSet:staticImage.srcSet,alt:\"\",style:{...fill,width:\"100%\",height:\"100%\",objectFit:\"cover\"}});}// live WebGL mode removed for production - baked images only\nreturn /*#__PURE__*/_jsxs(\"div\",{\"data-mesh-bg\":true,style:{...style,position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",pointerEvents:\"none\",...fadeEdges?{WebkitMaskImage:\"radial-gradient(130% 115% at 50% 40%, #000 40%, transparent 97%)\",maskImage:\"radial-gradient(130% 115% at 50% 40%, #000 40%, transparent 97%)\"}:null},children:[layer,baked&&grainTile&&grainTile.src&&/*#__PURE__*/_jsx(\"div\",{style:{...fill,backgroundImage:`url(${grainTile.src})`,backgroundRepeat:\"repeat\",backgroundSize:`${grainTileSize}px ${grainTileSize}px`,opacity:grainTileOpacity,pointerEvents:\"none\"}}),filmGrain&&/*#__PURE__*/_jsx(\"canvas\",{ref:grainRef,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",mixBlendMode:filmGrainBlend===\"normal\"?undefined:filmGrainBlend,opacity:baked||ready?filmGrainAmt:0,transition:\"opacity 0.6s ease\",pointerEvents:\"none\"}})]});}addPropertyControls(MeshBackground,{staticImage:{type:ControlType.ResponsiveImage,title:\"Baked image\"},grainTile:{type:ControlType.ResponsiveImage,title:\"Grain tile\"},grainTileOpacity:{type:ControlType.Number,title:\"Tile grain amt\",min:0,max:.4,step:.005,defaultValue:.11},grainTileSize:{type:ControlType.Number,title:\"Tile size\",min:64,max:512,step:16,defaultValue:192},color1:{type:ControlType.Color,title:\"Color 1\",defaultValue:\"#d000ff\"},color2:{type:ControlType.Color,title:\"Color 2\",defaultValue:\"#203586\"},color3:{type:ControlType.Color,title:\"Color 3\",defaultValue:\"#103e3e\"},wireframe:{type:ControlType.Boolean,title:\"Wireframe\",defaultValue:true},grain:{type:ControlType.Boolean,title:\"Grain\",defaultValue:true},uTime:{type:ControlType.Number,title:\"U Time\",min:0,max:60,step:.1,defaultValue:11.3},uStrength:{type:ControlType.Number,title:\"U Strength\",min:0,max:5,step:.1,defaultValue:2.5},uDensity:{type:ControlType.Number,title:\"U Density\",min:0,max:5,step:.1,defaultValue:2},brightness:{type:ControlType.Number,title:\"Brightness\",min:.5,max:2,step:.05,defaultValue:.9},cameraZoom:{type:ControlType.Number,title:\"Zoom\",min:3,max:15,step:.5,defaultValue:8.5},rotationZ:{type:ControlType.Number,title:\"Rotation Z\",min:-90,max:90,step:5,defaultValue:30},fadeEdges:{type:ControlType.Boolean,title:\"Fade edges\",defaultValue:false},filmGrain:{type:ControlType.Boolean,title:\"Film grain\",defaultValue:false},filmGrainAmt:{type:ControlType.Number,title:\"Grain amt\",min:0,max:.5,step:.005,defaultValue:.1,hidden:p=>!p.filmGrain},filmGrainBlend:{type:ControlType.Enum,title:\"Grain blend\",options:[\"multiply\",\"overlay\",\"soft-light\",\"normal\"],optionTitles:[\"Multiply\",\"Overlay\",\"Soft Light\",\"Normal\"],defaultValue:\"multiply\",hidden:p=>!p.filmGrain},filmGrainSize:{type:ControlType.Number,title:\"Grain px\",min:1,max:4,step:.5,defaultValue:1,hidden:p=>!p.filmGrain}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MeshBackground\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MeshBackground.map"],"mappings":"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"}