{"version":3,"file":"DotPatternGlow.DSZoSiLD.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/VaEaWdszkzzsnviP91hC/Xycr5tTSrOFtOLA2PTXA/DotPatternGlow.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * Dot Pattern Glow — the Templates-grid dot pattern as a live background.\n * Construction matches the source art: a uniform grid of dots (#32363B, 3px)\n * revealed through a radial gradient (700x700, transparent center fading to\n * the page background) — and the gradient center follows the pointer,\n * and stays wherever the cursor last was.\n * Purely decorative: render with pointer-events none; it listens on window.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 1280\n * @framerIntrinsicHeight 693\n */export default function DotPatternGlow(props){const{dotColor=\"#32363B\",spacing=8,dotSize=3,gradientSize=700,intensity=1,followSpeed=.08,style}=props;const canvasRef=useRef(null);useEffect(()=>{const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;const c=ctx;const isStatic=RenderTarget.current()!==RenderTarget.preview;const reduced=typeof window!==\"undefined\"&&!!window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;// parse dot color once\nconst probe=document.createElement(\"canvas\");probe.width=probe.height=1;const pc=probe.getContext(\"2d\");pc.fillStyle=dotColor;pc.fillRect(0,0,1,1);const[cr,cg,cb]=pc.getImageData(0,0,1,1).data;let w=0;let h=0;let dpr=Math.min(window.devicePixelRatio||1,2);const resize=()=>{const rect=canvas.getBoundingClientRect();w=Math.max(1,rect.width);h=Math.max(1,rect.height);canvas.width=Math.round(w*dpr);canvas.height=Math.round(h*dpr);c.setTransform(dpr,0,0,dpr,0,0);};resize();let gx=w/2;let gy=h/2;let tx=gx;let ty=gy;const onMove=e=>{const rect=canvas.getBoundingClientRect();const x=e.clientX-rect.left;const y=e.clientY-rect.top;const pad=200;if(x>-pad&&x<rect.width+pad&&y>-pad&&y<rect.height+pad){tx=x;ty=y;}};const draw=()=>{c.clearRect(0,0,w,h);// radial gradient mask: alpha 1 at the gradient center -> 0 at its radius,\n// exactly like the source art's 700x700 radial gradient overlay.\nconst radius=Math.max(1,gradientSize/2);const size=Math.max(.5,dotSize);const r2=radius*radius;const x0=Math.max(spacing/2,gx-radius-spacing);const x1=Math.min(w,gx+radius+spacing);const y0=Math.max(spacing/2,gy-radius-spacing);const y1=Math.min(h,gy+radius+spacing);for(let x=x0-(x0-spacing/2)%spacing;x<x1;x+=spacing){for(let y=y0-(y0-spacing/2)%spacing;y<y1;y+=spacing){const dx=x-gx;const dy=y-gy;const d2=dx*dx+dy*dy;if(d2>=r2)continue;const t=1-Math.sqrt(d2)/radius;const a=t*intensity;if(a<=.01)continue;c.fillStyle=\"rgba(\"+cr+\", \"+cg+\", \"+cb+\", \"+Math.min(1,a)+\")\";c.fillRect(x-size/2,y-size/2,size,size);}}};if(isStatic||reduced){draw();return;}let raf=0;const loop=()=>{gx+=(tx-gx)*followSpeed;gy+=(ty-gy)*followSpeed;draw();raf=requestAnimationFrame(loop);};raf=requestAnimationFrame(loop);window.addEventListener(\"mousemove\",onMove);const ro=new ResizeObserver(()=>{resize();gx=w/2;gy=h/2;tx=gx;ty=gy;});ro.observe(canvas);return()=>{cancelAnimationFrame(raf);window.removeEventListener(\"mousemove\",onMove);ro.disconnect();};},[dotColor,spacing,dotSize,gradientSize,intensity,followSpeed]);return /*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{width:\"100%\",height:\"100%\",display:\"block\",pointerEvents:\"none\",...style}});}addPropertyControls(DotPatternGlow,{dotColor:{type:ControlType.Color,title:\"Dot Color\",defaultValue:\"#32363B\"},spacing:{type:ControlType.Number,title:\"Spacing\",defaultValue:8,min:4,max:40},dotSize:{type:ControlType.Number,title:\"Dot Size\",defaultValue:3,min:.5,max:8,step:.5},gradientSize:{type:ControlType.Number,title:\"Gradient Size\",defaultValue:700,min:200,max:2e3,step:10},intensity:{type:ControlType.Number,title:\"Intensity\",defaultValue:1,min:.2,max:2,step:.05},followSpeed:{type:ControlType.Number,title:\"Follow Ease\",defaultValue:.08,min:.01,max:.3,step:.01}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DotPatternGlow\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"693\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicWidth\":\"1280\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DotPatternGlow.map"],"mappings":"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"}