{"version":3,"file":"InteractiveGrid_prod.uQflqefN.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/wskW1SoDKxJzJIiqOylQ/Z86JKWtK3QU4ffeT2odo/InteractiveGrid_prod.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef,useState}from\"react\";/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 800\n * @framerIntrinsicHeight 500\n * @framerDisableUnlink\n */export default function KineticGrid(props){const{clickInteraction=false,clickProps={},cursorTrail=false,cursorTrailProps={},backgroundColor=\"transparent\",gridColor=\"#FFFFFF\",dotColor=\"#FFFFFF\",hoverColor=\"#FFFFFF\",gridSize=60,repulsionStrength=-.65,radius=290,dotSize=1.5,gridThickness=.5,baseOpacity=.09}=props;const{clickForce=0,motionSpeed=1}=clickProps;const{trailMode=\"hover\",trailLength=.1,trailColor=\"#FFFFFF\"}=cursorTrailProps;const canvasRef=useRef(null);const animationRef=useRef(null);const dotsRef=useRef(new Map);const mousePosRef=useRef(null);const trailPointsRef=useRef([]);const isMouseDownRef=useRef(false);const[mounted,setMounted]=useState(false);const colorsRef=useRef({backgroundColor,gridColor,dotColor,hoverColor,gridSize,repulsionStrength,radius,dotSize,gridThickness,baseOpacity,clickInteraction,clickForce,motionSpeed,cursorTrail,trailMode,trailLength,trailColor});const prevGridSizeRef=useRef(gridSize);useEffect(()=>{const gridSizeChanged=prevGridSizeRef.current!==gridSize;prevGridSizeRef.current=gridSize;colorsRef.current={backgroundColor,gridColor,dotColor,hoverColor,gridSize,repulsionStrength,radius,dotSize,gridThickness,baseOpacity,clickInteraction,clickForce,motionSpeed,cursorTrail,trailMode,trailLength,trailColor};if(gridSizeChanged&&mounted&&canvasRef.current){const canvas=canvasRef.current;const width=canvas.clientWidth||canvas.offsetWidth||1;const height=canvas.clientHeight||canvas.offsetHeight||1;dotsRef.current.clear();for(let gx=-gridSize;gx<width+gridSize*2;gx+=gridSize){for(let gy=-gridSize;gy<height+gridSize*2;gy+=gridSize){const key=`${gx},${gy}`;dotsRef.current.set(key,{x:gx,y:gy,vx:0,vy:0,size:1,targetSize:1,brightness:1});}}}},[mounted,backgroundColor,gridColor,dotColor,hoverColor,gridSize,repulsionStrength,radius,dotSize,gridThickness,baseOpacity,clickInteraction,clickForce,motionSpeed,cursorTrail,trailMode,trailLength,trailColor]);const parseColor=color=>{if(!color||color===\"transparent\")return{r:0,g:0,b:0,a:0};const rgbaMatch=color.match(/rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)/i);if(rgbaMatch)return{r:parseInt(rgbaMatch[1]),g:parseInt(rgbaMatch[2]),b:parseInt(rgbaMatch[3]),a:parseFloat(rgbaMatch[4])};const rgbMatch=color.match(/rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i);if(rgbMatch)return{r:parseInt(rgbMatch[1]),g:parseInt(rgbMatch[2]),b:parseInt(rgbMatch[3]),a:1};let hex=color.replace(\"#\",\"\");if(hex.length===8){return{r:parseInt(hex.substring(0,2),16),g:parseInt(hex.substring(2,4),16),b:parseInt(hex.substring(4,6),16),a:parseInt(hex.substring(6,8),16)/255};}if(hex.length===3)hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];const r=parseInt(hex.substring(0,2),16),g=parseInt(hex.substring(2,4),16),b=parseInt(hex.substring(4,6),16);return{r:isNaN(r)?160:r,g:isNaN(g)?160:g,b:isNaN(b)?160:b,a:1};};useEffect(()=>{setMounted(true);},[]);useEffect(()=>{if(!mounted)return;const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;const maxDist=400;const getSpringParams=()=>{const speed=colorsRef.current.motionSpeed;const t=Math.max(0,Math.min(1,speed));return{springStiffness:.02+t*.06,damping:.7+t*.05};};const getCanvasSize=()=>{const width=canvas.clientWidth||canvas.offsetWidth||1;const height=canvas.clientHeight||canvas.offsetHeight||1;return{width,height};};const initDots=()=>{dotsRef.current.clear();const{width,height}=getCanvasSize();const currentGridSize=colorsRef.current.gridSize;for(let gx=-currentGridSize;gx<width+currentGridSize*2;gx+=currentGridSize){for(let gy=-currentGridSize;gy<height+currentGridSize*2;gy+=currentGridSize){const key=`${gx},${gy}`;dotsRef.current.set(key,{x:gx,y:gy,vx:0,vy:0,size:1,targetSize:1,brightness:1});}}};let{width,height}=getCanvasSize();canvas.width=width;canvas.height=height;initDots();let lastTime=performance.now();const getHoverIntensity=(x,y)=>{const mouse=mousePosRef.current;if(!mouse)return 0;const hoverRadius=colorsRef.current.radius;const dx=x-mouse.x,dy=y-mouse.y;const dist=Math.sqrt(dx*dx+dy*dy);if(dist>hoverRadius)return 0;return Math.pow(1-dist/hoverRadius,3.5);};const mapRepulsion=value=>{return value<=0?value*25:value*90;};const getCursorPush=(baseX,baseY)=>{const mouse=mousePosRef.current;const currentRepulsion=colorsRef.current.repulsionStrength;const mappedRepulsion=mapRepulsion(currentRepulsion);if(!mouse||mappedRepulsion===0)return{x:0,y:0};const dx=baseX-mouse.x,dy=baseY-mouse.y;const dist=Math.sqrt(dx*dx+dy*dy);if(dist===0)return{x:0,y:0};const normalizedDist=Math.min(dist/maxDist,1);const pushAmount=Math.pow(1-normalizedDist,2)*mappedRepulsion;return{x:dx/dist*pushAmount,y:dy/dist*pushAmount};};const getClickPush=(baseX,baseY)=>{if(!colorsRef.current.clickInteraction||!isMouseDownRef.current)return{x:0,y:0};const mouse=mousePosRef.current;const force=colorsRef.current.clickForce;if(!mouse||force<=0)return{x:0,y:0};const dx=baseX-mouse.x,dy=baseY-mouse.y;const dist=Math.sqrt(dx*dx+dy*dy);if(dist===0)return{x:0,y:0};const normalizedDist=Math.min(dist/maxDist,1);const pushAmount=Math.pow(1-normalizedDist,2)*force*100;return{x:dx/dist*pushAmount,y:dy/dist*pushAmount};};const animate=()=>{const now=performance.now();const deltaTime=now-lastTime;lastTime=now;const currentColors=colorsRef.current;const hoverColorParsed=parseColor(currentColors.hoverColor);const gridColorParsed=parseColor(currentColors.gridColor);const dotColorParsed=parseColor(currentColors.dotColor);const bgColorParsed=parseColor(currentColors.backgroundColor);const currentGridSize=currentColors.gridSize;const currentDotSize=currentColors.dotSize;const currentGridThickness=currentColors.gridThickness;const currentBaseOpacity=currentColors.baseOpacity;ctx.clearRect(0,0,width,height);ctx.fillStyle=`rgba(${bgColorParsed.r}, ${bgColorParsed.g}, ${bgColorParsed.b}, ${bgColorParsed.a})`;ctx.fillRect(0,0,width,height);dotsRef.current.forEach((dot,key)=>{const[gxStr,gyStr]=key.split(\",\");const gx=parseInt(gxStr),gy=parseInt(gyStr);const rightDot=dotsRef.current.get(`${gx+currentGridSize},${gy}`);const bottomDot=dotsRef.current.get(`${gx},${gy+currentGridSize}`);const hoverIntensity=getHoverIntensity(dot.x,dot.y);if(rightDot){const avgHover=(hoverIntensity+getHoverIntensity(rightDot.x,rightDot.y))/2;const r=Math.round(gridColorParsed.r+(hoverColorParsed.r-gridColorParsed.r)*avgHover);const g=Math.round(gridColorParsed.g+(hoverColorParsed.g-gridColorParsed.g)*avgHover);const b=Math.round(gridColorParsed.b+(hoverColorParsed.b-gridColorParsed.b)*avgHover);const lineOpacity=currentBaseOpacity+(1-currentBaseOpacity)*avgHover;ctx.beginPath();ctx.moveTo(dot.x,dot.y);ctx.lineTo(rightDot.x,rightDot.y);ctx.lineWidth=currentGridThickness+avgHover*2;ctx.strokeStyle=`rgba(${r}, ${g}, ${b}, ${lineOpacity})`;ctx.stroke();}if(bottomDot){const avgHover=(hoverIntensity+getHoverIntensity(bottomDot.x,bottomDot.y))/2;const r=Math.round(gridColorParsed.r+(hoverColorParsed.r-gridColorParsed.r)*avgHover);const g=Math.round(gridColorParsed.g+(hoverColorParsed.g-gridColorParsed.g)*avgHover);const b=Math.round(gridColorParsed.b+(hoverColorParsed.b-gridColorParsed.b)*avgHover);const lineOpacity=currentBaseOpacity+(1-currentBaseOpacity)*avgHover;ctx.beginPath();ctx.moveTo(dot.x,dot.y);ctx.lineTo(bottomDot.x,bottomDot.y);ctx.lineWidth=currentGridThickness+avgHover*2;ctx.strokeStyle=`rgba(${r}, ${g}, ${b}, ${lineOpacity})`;ctx.stroke();}});const{springStiffness,damping}=getSpringParams();dotsRef.current.forEach((dot,key)=>{const[gxStr,gyStr]=key.split(\",\");const gx=parseInt(gxStr),gy=parseInt(gyStr);const targetX=gx+getCursorPush(gx,gy).x+getClickPush(gx,gy).x;const targetY=gy+getCursorPush(gx,gy).y+getClickPush(gx,gy).y;const forceX=(targetX-dot.x)*springStiffness;const forceY=(targetY-dot.y)*springStiffness;dot.vx=(dot.vx+forceX)*damping;dot.vy=(dot.vy+forceY)*damping;dot.x+=dot.vx;dot.y+=dot.vy;const hoverIntensity=getHoverIntensity(dot.x,dot.y);dot.targetSize=currentDotSize+hoverIntensity*currentDotSize;dot.size+=(dot.targetSize-dot.size)*.15;const r=Math.round(dotColorParsed.r+(hoverColorParsed.r-dotColorParsed.r)*hoverIntensity);const g=Math.round(dotColorParsed.g+(hoverColorParsed.g-dotColorParsed.g)*hoverIntensity);const b=Math.round(dotColorParsed.b+(hoverColorParsed.b-dotColorParsed.b)*hoverIntensity);const opacity=currentBaseOpacity+(1-currentBaseOpacity)*hoverIntensity;ctx.beginPath();ctx.arc(dot.x,dot.y,Math.max(currentDotSize*.5,dot.size),0,Math.PI*2);ctx.fillStyle=`rgba(${r}, ${g}, ${b}, ${opacity})`;ctx.fill();});const{cursorTrail:ct,trailLength:tlen,trailColor:tcolor}=currentColors;const effectiveTrailLength=Math.max(1,Math.round(tlen*50));if(ct&&effectiveTrailLength>0){const trail=trailPointsRef.current;if(trail.length>1){const now=performance.now();const maxAge=Math.max(200,effectiveTrailLength*40);ctx.save();ctx.lineCap=\"round\";ctx.lineJoin=\"round\";ctx.lineWidth=2;ctx.beginPath();let started=false;for(let i=0;i<trail.length;i++){const point=trail[i],age=now-point.time;if(age<maxAge){if(!started){ctx.moveTo(point.x,point.y);started=true;}else{ctx.lineTo(point.x,point.y);}}}const trailAlpha=trail.length>0?Math.max(0,1-(now-trail[trail.length-1].time)/maxAge):0;const tc=parseColor(tcolor);ctx.strokeStyle=`rgba(${tc.r}, ${tc.g}, ${tc.b}, ${trailAlpha*.9*tc.a})`;ctx.stroke();ctx.restore();}}animationRef.current=requestAnimationFrame(animate);};animationRef.current=requestAnimationFrame(animate);const handleMouseMove=e=>{const rect=canvas.getBoundingClientRect();const canvasWidth=canvas.clientWidth||canvas.offsetWidth||1;const canvasHeight=canvas.clientHeight||canvas.offsetHeight||1;const scaleX=canvasWidth/rect.width;const scaleY=canvasHeight/rect.height;const x=(e.clientX-rect.left)*scaleX;const y=(e.clientY-rect.top)*scaleY;// Only track if mouse is within component bounds\nif(x>=0&&y>=0&&x<=canvasWidth&&y<=canvasHeight){mousePosRef.current={x,y};const{cursorTrail:ct,trailMode:tm,trailLength:tlen}=colorsRef.current;const effectiveLength=Math.max(1,Math.round(tlen*100));if(ct&&effectiveLength>0&&(tm===\"hover\"||isMouseDownRef.current)){const now=performance.now();const trail=trailPointsRef.current;trail.push({x,y,time:now});if(trail.length>effectiveLength)trail.splice(0,trail.length-effectiveLength);}}else{mousePosRef.current=null;}};const handleMouseDown=()=>{isMouseDownRef.current=true;};const handleMouseUp=()=>{if(colorsRef.current.trailMode===\"click\")trailPointsRef.current=[];isMouseDownRef.current=false;};// Attach listeners to window to allow interaction with underlying elements\nwindow.addEventListener(\"mousemove\",handleMouseMove);window.addEventListener(\"mousedown\",handleMouseDown);window.addEventListener(\"mouseup\",handleMouseUp);const handleResize=()=>{const newSize=getCanvasSize();width=newSize.width;height=newSize.height;canvas.width=width;canvas.height=height;initDots();};const resizeObserver=new ResizeObserver(handleResize);resizeObserver.observe(canvas);return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);window.removeEventListener(\"mousedown\",handleMouseDown);window.removeEventListener(\"mouseup\",handleMouseUp);resizeObserver.disconnect();if(animationRef.current)cancelAnimationFrame(animationRef.current);};},[mounted]);if(!mounted)return null;return /*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",top:0,left:0,width:\"100%\",height:\"100%\",pointerEvents:\"none\",...props.style}});}addPropertyControls(KineticGrid,{clickInteraction:{type:ControlType.Boolean,title:\"Click\",defaultValue:false},clickProps:{type:ControlType.Object,title:\"Click Props\",hidden:p=>!p.clickInteraction,controls:{clickForce:{type:ControlType.Number,title:\"Click Force\",defaultValue:.5,min:.1,max:1,step:.1},motionSpeed:{type:ControlType.Number,title:\"Snappyness\",defaultValue:.5,min:.1,max:1,step:.1}}},cursorTrail:{type:ControlType.Boolean,title:\"Cursor Trail\",defaultValue:false},cursorTrailProps:{type:ControlType.Object,hidden:p=>!p.cursorTrail,title:\"Trail Props\",controls:{trailMode:{type:ControlType.Enum,title:\"Trail Mode\",options:[\"click\",\"hover\"],defaultValue:\"hover\"},trailLength:{type:ControlType.Number,title:\"Trail Length\",defaultValue:.1,min:.1,max:1,step:.1},trailColor:{type:ControlType.Color,title:\"Trail Color\",defaultValue:\"#FFFFFF\"}}},gridThickness:{type:ControlType.Number,title:\"Grid Stroke\",defaultValue:.5,min:.1,max:3,step:.1},dotSize:{type:ControlType.Number,title:\"Dot Size\",defaultValue:1.5,min:.5,max:5,step:.1},baseOpacity:{type:ControlType.Number,title:\"Far Opacity\",defaultValue:.09,min:0,max:1,step:.01},gridSize:{type:ControlType.Number,title:\"Grid Size\",defaultValue:60,min:20,max:100,step:5},repulsionStrength:{type:ControlType.Number,title:\"Repulsion\",defaultValue:-.65,min:-1,max:1,step:.01},radius:{type:ControlType.Number,title:\"Radius\",defaultValue:350,min:50,max:1e3,step:10},hoverColor:{type:ControlType.Color,title:\"Hover\",defaultValue:\"#0073FF\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"transparent\"},gridColor:{type:ControlType.Color,title:\"Grid\",defaultValue:\"#FFFFFF\"},dotColor:{type:ControlType.Color,title:\"Dots\",defaultValue:\"#FFFFFF\",description:\"More components at [Framer University](https://frameruni.link/cc).\"}});KineticGrid.displayName=\"Kinetic Grid\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"KineticGrid\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"500\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"800\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./InteractiveGrid_prod.map"],"mappings":"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"}