{"version":3,"file":"FloatingParticlesBackground.C0rtG3ph.mjs","names":["useRef","useState","useCallback","p","allAbsorbed"],"sources":["https:/framerusercontent.com/modules/bTGgPjnB63YKS9Ye9g3a/zmA8mxwB6IbLf7BBP0aD/FloatingParticlesBackground.js"],"sourcesContent":["// Floating dust particles background with mouse interaction\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useCallback}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function FloatingParticlesBackground(props){const{particleCount=50,particleSize=2,particleOpacity=.6,glowIntensity=10,mouseInfluence=100,backgroundColor=\"#000000\",particleColor=\"#FFFFFF\",mouseGravity=\"none\",gravityStrength=50,glowAnimation=\"ease\",particleInteraction=false,interactionType=\"bounce\",attractionSpeed=.15,simultaneousAttractions=1,enableTimer=false,timerDuration=5}=props;const canvasRef=useRef(null);const animationRef=useRef();const mouseRef=useRef({x:0,y:0});const particlesRef=useRef([]);const isStatic=useIsStaticRenderer();const[canvasSize,setCanvasSize]=useState({width:800,height:600});const containerRef=useRef(null);const[breakpoint,setBreakpoint]=useState(\"Desktop\");const[allAbsorbed,setAllAbsorbed]=useState(false);const startTimeRef=useRef(Date.now());const[timerExpired,setTimerExpired]=useState(false);// Add effect to detect breakpoint based on window width\nuseEffect(()=>{if(typeof window===\"undefined\")return;const updateBreakpoint=()=>{const width=window.innerWidth;if(width>=1200){setBreakpoint(\"Desktop\");}else if(width>=810){setBreakpoint(\"Tablet\");}else{setBreakpoint(\"Phone\");}};updateBreakpoint();window.addEventListener(\"resize\",updateBreakpoint);return()=>{window.removeEventListener(\"resize\",updateBreakpoint);};},[]);const getColumnCount=useCallback(currentBreakpoint=>{if(currentBreakpoint===\"Desktop\")return 13;if(currentBreakpoint===\"Tablet\")return 9;return 5// Phone\n;},[]);const initializeParticles=useCallback((width,height,currentBreakpoint)=>{const cols=getColumnCount(currentBreakpoint);const particleRadius=.5// Half of the 1px particle size\n;const usableWidth=width-2*particleRadius;const usableHeight=height-2*particleRadius;// Compute horizontal spacing\nconst stepX=cols>1?usableWidth/(cols-1):0;// Enforce square grid: vertical spacing = horizontal spacing\nconst stepY=stepX;// Compute number of rows based on available height\nconst rows=stepY>0?Math.floor(usableHeight/stepY)+1:1;const particles=[];for(let row=0;row<rows;row++){for(let col=0;col<cols;col++){const x=particleRadius+stepX*col;const y=particleRadius+stepY*row;particles.push({x,y,originX:x,originY:y,vx:0,vy:0,size:1,opacity:.6,baseOpacity:.6,mass:1,id:particles.length,absorbed:false,isBeingAttracted:false});}}return particles;},[getColumnCount]);const redistributeParticles=useCallback((width,height,currentBreakpoint)=>{const cols=getColumnCount(currentBreakpoint);const particleRadius=.5// Half of the 1px particle size\n;const usableWidth=width-2*particleRadius;const usableHeight=height-2*particleRadius;// Compute horizontal spacing\nconst stepX=cols>1?usableWidth/(cols-1):0;// Enforce square grid: vertical spacing = horizontal spacing\nconst stepY=stepX;// Compute number of rows based on available height\nconst rows=stepY>0?Math.floor(usableHeight/stepY)+1:1;// Clear existing particles and regenerate for new grid\nparticlesRef.current=[];for(let row=0;row<rows;row++){for(let col=0;col<cols;col++){const x=particleRadius+stepX*col;const y=particleRadius+stepY*row;particlesRef.current.push({x,y,originX:x,originY:y,vx:0,vy:0,size:1,opacity:.6,baseOpacity:.6,mass:1,id:particlesRef.current.length,absorbed:false,isBeingAttracted:false});}}},[getColumnCount]);const updateParticles=useCallback(canvas=>{const rect=canvas.getBoundingClientRect();const mouse=mouseRef.current;// Find the nearest non-absorbed particles to the cursor\nconst particlesWithDistance=particlesRef.current.filter(p=>!p.absorbed).map(particle=>{const dx=mouse.x-particle.x;const dy=mouse.y-particle.y;const distance=Math.sqrt(dx*dx+dy*dy);return{particle,distance};}).sort((a,b)=>a.distance-b.distance);// Select the top N nearest particles based on simultaneousAttractions\nconst nearestParticles=particlesWithDistance.slice(0,simultaneousAttractions).map(item=>item.particle);// Mark only the nearest particles as being attracted\nparticlesRef.current.forEach(particle=>{particle.isBeingAttracted=nearestParticles.includes(particle);});// Check if all particles are absorbed\nconst allAbsorbed=particlesRef.current.every(p=>p.absorbed);if(allAbsorbed&&!allAbsorbed){setAllAbsorbed(true);}particlesRef.current.forEach((particle,index)=>{if(particle.absorbed)return;// Calculate distance to mouse\nconst dx=mouse.x-particle.x;const dy=mouse.y-particle.y;const distance=Math.sqrt(dx*dx+dy*dy);// Check if particle reached the cursor (within 2px)\nif(distance<2){particle.absorbed=true;particle.opacity=0;return;}// Only attract the nearest particles\nif(particle.isBeingAttracted&&distance>0){const normalizedDx=dx/distance;const normalizedDy=dy/distance;// Use the attractionSpeed prop\nparticle.vx+=normalizedDx*attractionSpeed;particle.vy+=normalizedDy*attractionSpeed;}// Apply damping to slow down movement\nparticle.vx*=.95;particle.vy*=.95;// Update position\nparticle.x+=particle.vx;particle.y+=particle.vy;});},[attractionSpeed,simultaneousAttractions]);const drawParticles=useCallback(ctx=>{ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);// Calculate timer fade\nlet timerFade=1;if(enableTimer){const elapsed=(Date.now()-startTimeRef.current)/1e3;const fadeStart=timerDuration*.8// Start fading at 80% of duration\n;const fadeEnd=timerDuration;if(elapsed>=fadeEnd){timerFade=0;if(!timerExpired){setTimerExpired(true);}}else if(elapsed>=fadeStart){// Smooth fade out over the last 20% of duration\ntimerFade=1-(elapsed-fadeStart)/(fadeEnd-fadeStart);}}particlesRef.current.forEach(particle=>{if(particle.absorbed)return;ctx.save();// Fixed pure black color with no variations\nctx.shadowColor=\"#000000\";ctx.shadowBlur=0;ctx.globalAlpha=1*timerFade;ctx.fillStyle=\"#000000\";ctx.beginPath();ctx.arc(particle.x,particle.y,1,0,Math.PI*2);ctx.fill();ctx.restore();});},[enableTimer,timerDuration,timerExpired]);const animate=useCallback(()=>{const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;updateParticles(canvas);drawParticles(ctx);animationRef.current=requestAnimationFrame(animate);},[updateParticles,drawParticles]);const handleMouseMove=useCallback(e=>{const canvas=canvasRef.current;if(!canvas)return;const rect=canvas.getBoundingClientRect();mouseRef.current={x:e.clientX-rect.left,y:e.clientY-rect.top};},[]);const resizeCanvas=useCallback(()=>{const canvas=canvasRef.current;const container=containerRef.current;if(!canvas||!container)return;const rect=container.getBoundingClientRect();const newWidth=rect.width;const newHeight=rect.height;canvas.width=newWidth;canvas.height=newHeight;// Update canvas size state\nsetCanvasSize({width:newWidth,height:newHeight});// Only redistribute if particles exist and size changed significantly\nif(particlesRef.current.length>0){redistributeParticles(newWidth,newHeight,breakpoint);}},[redistributeParticles,breakpoint]);// Effect to reinitialize particles when particle count changes OR on mount (page reload)\nuseEffect(()=>{if(isStatic)return;const canvas=canvasRef.current;if(!canvas)return;// Reset all particles on mount/reload\nparticlesRef.current=initializeParticles(canvas.width||canvasSize.width,canvas.height||canvasSize.height,breakpoint);setAllAbsorbed(false);startTimeRef.current=Date.now();setTimerExpired(false);},[particleCount,initializeParticles,isStatic,canvasSize,breakpoint]);// Effect to redistribute particles when breakpoint changes\nuseEffect(()=>{if(isStatic)return;const canvas=canvasRef.current;if(!canvas)return;redistributeParticles(canvas.width,canvas.height,breakpoint);},[breakpoint,redistributeParticles,isStatic]);// Effect to update particle properties when they change\nuseEffect(()=>{if(isStatic)return;particlesRef.current.forEach(particle=>{particle.baseOpacity=particleOpacity;particle.opacity=particleOpacity;});},[particleOpacity,isStatic]);useEffect(()=>{if(isStatic)return;resizeCanvas();if(typeof window!==\"undefined\"){window.addEventListener(\"mousemove\",handleMouseMove);window.addEventListener(\"resize\",resizeCanvas);}// Set up ResizeObserver for container\nif(containerRef.current&&typeof ResizeObserver!==\"undefined\"){const resizeObserver=new ResizeObserver(()=>{resizeCanvas();});resizeObserver.observe(containerRef.current);return()=>{resizeObserver.disconnect();if(typeof window!==\"undefined\"){window.removeEventListener(\"mousemove\",handleMouseMove);window.removeEventListener(\"resize\",resizeCanvas);}};}return()=>{if(typeof window!==\"undefined\"){window.removeEventListener(\"mousemove\",handleMouseMove);window.removeEventListener(\"resize\",resizeCanvas);}};},[handleMouseMove,resizeCanvas,isStatic]);useEffect(()=>{if(isStatic)return;animate();return()=>{if(animationRef.current){cancelAnimationFrame(animationRef.current);}};},[animate,isStatic]);if(isStatic){return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",backgroundColor,position:\"relative\",overflow:\"hidden\"},children:Array.from({length:Math.min(particleCount,20)}).map((_,i)=>/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:`${Math.random()*100}%`,top:`${Math.random()*100}%`,width:`${particleSize}px`,height:`${particleSize}px`,backgroundColor:particleColor,borderRadius:\"50%\",opacity:particleOpacity,boxShadow:`0 0 ${glowIntensity}px ${particleColor}`}},i))});}return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\",height:\"100%\",backgroundColor,position:\"relative\",overflow:\"hidden\"},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{width:\"100%\",height:\"100%\",display:\"block\",pointerEvents:\"none\"}})});}addPropertyControls(FloatingParticlesBackground,{particleCount:{type:ControlType.Number,title:\"Particle Count\",defaultValue:50,min:10,max:1e3,step:1},particleSize:{type:ControlType.Number,title:\"Particle Size\",defaultValue:2,min:1,max:10,step:.5,unit:\"px\"},particleOpacity:{type:ControlType.Number,title:\"Particle Opacity\",defaultValue:.6,min:.1,max:1,step:.1},attractionSpeed:{type:ControlType.Number,title:\"Attraction Speed\",defaultValue:.15,min:.01,max:2,step:.01},simultaneousAttractions:{type:ControlType.Number,title:\"Simultaneous Dots\",defaultValue:1,min:1,max:20,step:1},enableTimer:{type:ControlType.Boolean,title:\"Enable Timer\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},timerDuration:{type:ControlType.Number,title:\"Timer Duration\",defaultValue:5,min:1,max:60,step:.5,unit:\"s\",hidden:({enableTimer})=>!enableTimer},glowIntensity:{type:ControlType.Number,title:\"Glow Intensity\",defaultValue:10,min:0,max:30,step:1,unit:\"px\"},glowAnimation:{type:ControlType.Enum,title:\"Glow Animation\",options:[\"instant\",\"ease\",\"spring\"],optionTitles:[\"Instant\",\"Ease In-Out\",\"Spring\"],defaultValue:\"ease\",displaySegmentedControl:true},mouseInfluence:{type:ControlType.Number,title:\"Mouse Influence\",defaultValue:100,min:50,max:300,step:10,unit:\"px\"},backgroundColor:{type:ControlType.Color,title:\"Background Color\",defaultValue:\"#000000\"},particleColor:{type:ControlType.Color,title:\"Particle Color\",defaultValue:\"#FFFFFF\"},mouseGravity:{type:ControlType.Enum,title:\"Mouse Gravity\",options:[\"none\",\"attract\",\"repel\"],optionTitles:[\"None\",\"Attract\",\"Repel\"],defaultValue:\"none\",displaySegmentedControl:true},gravityStrength:{type:ControlType.Number,title:\"Gravity Strength\",defaultValue:50,min:10,max:200,step:10,hidden:({mouseGravity})=>mouseGravity===\"none\"},particleInteraction:{type:ControlType.Boolean,title:\"Particle Interaction\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},interactionType:{type:ControlType.Enum,title:\"Interaction Type\",options:[\"bounce\",\"merge\"],optionTitles:[\"Bounce\",\"Merge\"],defaultValue:\"bounce\",displaySegmentedControl:true,hidden:({particleInteraction})=>!particleInteraction}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FloatingParticlesBackground\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FloatingParticlesBackground.map"],"mappings":"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"}