{"version":3,"file":"Grid_SVG.BCN2q7ox.mjs","names":["useRef","useMemo","rect","_Fragment"],"sources":["https:/framerusercontent.com/modules/xDMkBO01HOfOWlkXnrQn/0GwntsmivlTB0iMHcI68/Grid_SVG.js"],"sourcesContent":["import{jsx as _jsx,Fragment as _Fragment}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useRef,useEffect,useMemo}from\"react\";export default function ElasticGrid2D(props){const{enableHover=false,gridSize=8,cellSize=50,elasticStrength=25,animationSpeed=2,liquidEffect=.8,waveAmplitude=15,waveDensity=.3,smoothingFactor=.85,fpsLimit=60}=props;const containerRef=useRef(null);const canvasRef=useRef(null);const contextRef=useRef(null);const mouseRef=useRef({x:0,y:0});const previousMouseRef=useRef({x:0,y:0});const requestIdRef=useRef(null);const isInitializedRef=useRef(false);const timeRef=useRef(0);const lastFrameTimeRef=useRef(0);const gridPointsRef=useRef({horizontal:[],vertical:[]});// Calculate frame delay based on FPS limit\nconst frameDelay=useMemo(()=>1e3/fpsLimit,[fpsLimit]);// Initialize canvas setup\nuseEffect(()=>{if(!containerRef.current||isInitializedRef.current)return;const container=containerRef.current;// Create off-screen canvas for better performance\nconst offscreenCanvas=document.createElement(\"canvas\");container.appendChild(offscreenCanvas);canvasRef.current=offscreenCanvas;// Get context with optimized settings\nconst ctx=offscreenCanvas.getContext(\"2d\",{alpha:false});contextRef.current=ctx;// Set initial mouse position outside the view to avoid initial distortion\nconst rect=container.getBoundingClientRect();previousMouseRef.current={x:rect.width/2,y:rect.height/2};mouseRef.current={...previousMouseRef.current};// Handle resize with debounce\nlet resizeTimeout=null;const handleResize=()=>{if(resizeTimeout)clearTimeout(resizeTimeout);resizeTimeout=setTimeout(()=>{if(!canvasRef.current||!containerRef.current)return;const canvas=canvasRef.current;const container=containerRef.current;const rect=container.getBoundingClientRect();const width=rect.width;const height=rect.height;// Set canvas dimensions with higher resolution\nconst dpr=window.devicePixelRatio||1;canvas.width=width*dpr;canvas.height=height*dpr;canvas.style.width=`${width}px`;canvas.style.height=`${height}px`;// Scale the context\nconst ctx=contextRef.current;ctx.scale(dpr,dpr);// Set background color once to avoid clearing\nctx.fillRect(0,0,width,height);// Initialize grid points\ninitializeGridPoints(width,height);},150);};// Initial sizing\nhandleResize();window.addEventListener(\"resize\",handleResize);// Start animation\nanimateWithThrottle();isInitializedRef.current=true;// Cleanup\nreturn()=>{window.removeEventListener(\"resize\",handleResize);if(resizeTimeout)clearTimeout(resizeTimeout);if(requestIdRef.current){cancelAnimationFrame(requestIdRef.current);}if(canvasRef.current&&containerRef.current){containerRef.current.removeChild(canvasRef.current);}isInitializedRef.current=false;};},[]);// Re-initialize when key props change\nuseEffect(()=>{if(!isInitializedRef.current||!containerRef.current||!canvasRef.current)return;const container=containerRef.current;const rect=container.getBoundingClientRect();initializeGridPoints(rect.width,rect.height);},[gridSize,cellSize]);// Initialize grid points with optimized spatial index\nconst initializeGridPoints=(width,height)=>{const horizontal=[];const vertical=[];// Calculate grid dimensions\nconst gridWidth=gridSize*cellSize;const gridHeight=gridSize*cellSize;// Calculate offsets to center grid\nconst offsetX=(width-gridWidth)/2;const offsetY=(height-gridHeight)/2;// Optimize number of segments based on grid size and view size\nconst segmentCount=Math.min(Math.max(10,gridSize*2),30);// Create horizontal lines with control points\nfor(let i=0;i<=gridSize;i++){const y=i*cellSize+offsetY;const line=[];for(let j=0;j<=segmentCount;j++){const x=j/segmentCount*gridWidth+offsetX;line.push({originalX:x,originalY:y,currentX:x,currentY:y,velocityX:0,velocityY:0,lastUpdated:0});}horizontal.push(line);}// Create vertical lines with control points\nfor(let i=0;i<=gridSize;i++){const x=i*cellSize+offsetX;const line=[];for(let j=0;j<=segmentCount;j++){const y=j/segmentCount*gridHeight+offsetY;line.push({originalX:x,originalY:y,currentX:x,currentY:y,velocityX:0,velocityY:0,lastUpdated:0});}vertical.push(line);}gridPointsRef.current={horizontal,vertical};};// Animation function with throttling for better performance\nconst animateWithThrottle=()=>{if(!contextRef.current||!canvasRef.current)return;const updateAnimation=timestamp=>{// Control frame rate\nif(timestamp-lastFrameTimeRef.current<frameDelay){requestIdRef.current=requestAnimationFrame(updateAnimation);return;}lastFrameTimeRef.current=timestamp;// Update time with consistent step regardless of frame rate\ntimeRef.current+=.01*animationSpeed;// Smooth mouse movement with reduced calculations\nconst mouse=mouseRef.current;const prevMouse=previousMouseRef.current;prevMouse.x+=(mouse.x-prevMouse.x)*smoothingFactor;prevMouse.y+=(mouse.y-prevMouse.y)*smoothingFactor;// Get current dimensions\nconst canvas=canvasRef.current;const ctx=contextRef.current;const width=canvas.width/(window.devicePixelRatio||1);const height=canvas.height/(window.devicePixelRatio||1);// Optimize clearing - only clear the necessary area\nctx.clearRect(0,0,width,height);// Set line style\nctx.strokeStyle=\"#DEDEDE\";ctx.lineWidth=2;// Update grid points more efficiently\nupdateGridPoints(gridPointsRef.current.horizontal,gridPointsRef.current.vertical,prevMouse.x,prevMouse.y,timestamp);// Draw lines with optimized approach\ndrawGridLines(ctx,gridPointsRef.current);// Continue animation loop\nrequestIdRef.current=requestAnimationFrame(updateAnimation);};requestIdRef.current=requestAnimationFrame(updateAnimation);};// Optimized update of grid points with enhanced wave effects\nconst updateGridPoints=(horizontalLines,verticalLines,mouseX,mouseY,timestamp)=>{const time=timeRef.current;// Calculate influence radius\nconst influenceRadius=cellSize*4;// Update horizontal lines\nhorizontalLines.forEach((line,lineIndex)=>{line.forEach((point,pointIndex)=>{// Base wave effect always applied regardless of hover state\nconst wavePhase=time+pointIndex/line.length*2*Math.PI*waveDensity;const baseWaveY=Math.sin(wavePhase)*waveAmplitude;// Add horizontal displacement for more organic feel\nconst horizontalWave=Math.cos(time*.7+pointIndex*.2)*(waveAmplitude*.2);// Mouse influence\nlet mouseInfluenceX=0;let mouseInfluenceY=0;const dx=point.originalX-mouseX;const dy=point.originalY-mouseY;const distance=Math.sqrt(dx*dx+dy*dy);if(distance<influenceRadius){const influence=Math.max(0,1-distance/influenceRadius)*liquidEffect;// Primary influence - vertical displacement on horizontal lines\nmouseInfluenceY=influence*elasticStrength*Math.sign(dy)*(1-distance/influenceRadius);// Secondary influence - horizontal displacement for liquid effect\nmouseInfluenceX=horizontalWave*influence*.8;}// Apply spring physics\nconst springFactor=.1;const dampingFactor=.7;// Target positions with combined effects\nconst targetY=point.originalY+baseWaveY+mouseInfluenceY;const targetX=point.originalX+horizontalWave*.5+mouseInfluenceX;// Update velocity\npoint.velocityX+=(targetX-point.currentX)*springFactor;point.velocityY+=(targetY-point.currentY)*springFactor;point.velocityX*=dampingFactor;point.velocityY*=dampingFactor;// Update position\npoint.currentX+=point.velocityX;point.currentY+=point.velocityY;point.lastUpdated=timestamp;});});// Update vertical lines with similar approach\nverticalLines.forEach((line,lineIndex)=>{line.forEach((point,pointIndex)=>{// Base wave effect always applied\nconst wavePhase=time+pointIndex/line.length*2*Math.PI*waveDensity;const baseWaveX=Math.cos(wavePhase)*waveAmplitude;// Add vertical displacement for more organic feel\nconst verticalWave=Math.sin(time*.7+pointIndex*.2)*(waveAmplitude*.2);// Mouse influence\nlet mouseInfluenceX=0;let mouseInfluenceY=0;const dx=point.originalX-mouseX;const dy=point.originalY-mouseY;const distance=Math.sqrt(dx*dx+dy*dy);if(distance<influenceRadius){const influence=Math.max(0,1-distance/influenceRadius)*liquidEffect;// Primary influence - horizontal displacement on vertical lines\nmouseInfluenceX=influence*elasticStrength*Math.sign(dx)*(1-distance/influenceRadius);// Secondary influence - vertical displacement for liquid effect\nmouseInfluenceY=verticalWave*influence*.8;}// Apply spring physics\nconst springFactor=.1;const dampingFactor=.7;// Target positions with combined effects\nconst targetX=point.originalX+baseWaveX+mouseInfluenceX;const targetY=point.originalY+verticalWave*.5+mouseInfluenceY;// Update velocity\npoint.velocityX+=(targetX-point.currentX)*springFactor;point.velocityY+=(targetY-point.currentY)*springFactor;point.velocityX*=dampingFactor;point.velocityY*=dampingFactor;// Update position\npoint.currentX+=point.velocityX;point.currentY+=point.velocityY;point.lastUpdated=timestamp;});});};// Optimized drawing with path batching\nconst drawGridLines=(ctx,{horizontal,vertical})=>{// Draw horizontal lines with optimized path approach\nhorizontal.forEach(line=>{if(line.length<2)return;ctx.beginPath();ctx.moveTo(line[0].currentX,line[0].currentY);// Use optimized curve drawing - fewer quadratic curves for better performance\nfor(let i=1;i<line.length;i++){if(i%2===0||i===line.length-1){const currentPoint=line[i];const prevPoint=line[i-1];// Calculate midpoint for smoother curves\nconst midX=(prevPoint.currentX+currentPoint.currentX)/2;const midY=(prevPoint.currentY+currentPoint.currentY)/2;ctx.quadraticCurveTo(prevPoint.currentX,prevPoint.currentY,midX,midY);}}ctx.stroke();});// Draw vertical lines with optimized path approach\nvertical.forEach(line=>{if(line.length<2)return;ctx.beginPath();ctx.moveTo(line[0].currentX,line[0].currentY);// Use optimized curve drawing - fewer quadratic curves for better performance\nfor(let i=1;i<line.length;i++){if(i%2===0||i===line.length-1){const currentPoint=line[i];const prevPoint=line[i-1];// Calculate midpoint for smoother curves\nconst midX=(prevPoint.currentX+currentPoint.currentX)/2;const midY=(prevPoint.currentY+currentPoint.currentY)/2;ctx.quadraticCurveTo(prevPoint.currentX,prevPoint.currentY,midX,midY);}}ctx.stroke();});};// Optimized mouse handler with throttling\nconst handleMouseMove=(()=>{let lastMoveTime=0;const moveThrottle=16// ~60fps\n;return e=>{const now=Date.now();if(now-lastMoveTime<moveThrottle)return;lastMoveTime=now;if(!containerRef.current)return;const rect=containerRef.current.getBoundingClientRect();mouseRef.current={x:e.clientX-rect.left,y:e.clientY-rect.top};};})();if(RenderTarget.current()===\"CANVAS\"){return /*#__PURE__*/_jsx(_Fragment,{children:/*#__PURE__*/_jsx(\"h1\",{style:{fontSize:\"24px\",color:\"white\",textAlign:\"center\"},children:\"Effect Will Appear In Preview\"})});}return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\",overflow:\"hidden\",position:\"relative\"},onMouseMove:enableHover?handleMouseMove:undefined});}// Add property controls for Framer\naddPropertyControls(ElasticGrid2D,{enableHover:{type:ControlType.Boolean,defaultValue:false},gridSize:{type:ControlType.Number,title:\"Grid Size\",defaultValue:8,min:2,max:20,step:1},cellSize:{type:ControlType.Number,title:\"Cell Size\",defaultValue:50,min:20,max:100,step:1},elasticStrength:{type:ControlType.Number,title:\"Elastic Strength\",defaultValue:25,min:5,max:50,step:1},animationSpeed:{type:ControlType.Number,title:\"Animation Speed\",defaultValue:2,min:.5,max:5,step:.1},liquidEffect:{type:ControlType.Number,title:\"Liquid Effect\",defaultValue:.8,min:.1,max:50,step:.05},waveAmplitude:{type:ControlType.Number,title:\"Wave Amplitude\",defaultValue:0,min:0,max:30,step:1},waveDensity:{type:ControlType.Number,title:\"Wave Density\",defaultValue:.3,min:.1,max:1,step:.05},smoothingFactor:{type:ControlType.Number,title:\"Smoothing Factor\",defaultValue:.85,min:.5,max:.98,step:.01},fpsLimit:{type:ControlType.Number,title:\"FPS Limit\",defaultValue:60,min:15,max:120,step:5}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ElasticGrid2D\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Grid_SVG.map"],"mappings":"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"}