{"version":3,"file":"Particles.CI9apffC.mjs","names":["useRef","__esmMin","init_npm_react_18_3_1","window","de","init_jsx_runtime","c","ce","init_ssg_sandbox_shims","addPropertyControls","init_framer_CaDWdxiz","ControlType","ParticleField","props","canvasRef","stateRef","canvas","ctx","state","rafId","lastTime","rand","min","max","parseColor","color","hex","m","p","s","withAlpha","a","alpha","geom","w","h","circleScale","seedNodes","gap","dotSpacing","rowH","rows","R","cols","nodes","grid","y","cy","off","x","cx","dx","dy","big","r0","dotSize","edges","r","here","right","blCol","brCol","bl","br","ringStart","ringCount","k","th","ox","oy","rn","b1","b2","d1","d2","i","ddx","ddy","d","adj","b","resize","dpr","rect","spawnParticle","n","src","maxReach","reach","candidates","j","neigh","tick","dt","time","t","rotateSpeed","cos","sin","twinkleSpeed","rx","ry","dr","px","py","enableMouse","mouse","dist","mouseRadius","f","mouseStrength","lineColor","lineOpacity","particleRate","particles","A","B","particleSpeed","ripples","fade","tb","sx","sy","hx","hy","grad","particleColor","hg","hitGrow","dotColor","rp","node","ease","base","onMove","e","onLeave","ro","backgroundColor","style","init_Particles"],"sources":["https:/framerusercontent.com/modules/0uQMEWf22RR88klBfLo9/8B2LQoRCFYKBjoQdqxsf/Particles.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef}from\"react\";/**\n * PARTICLE FIELD\n *\n * A circular honeycomb mesh: nodes sit on a hexagonal (triangular)\n * lattice clipped to a circle and connect to their neighbours with thin\n * lines. The whole mesh slowly rotates (controllable). Nodes gently\n * twinkle and shoot small trailing particles to one another along their\n * connections; a node grows briefly when a particle reaches it. Hovering\n * the mouse pushes nearby nodes aside and brightens them.\n *\n * Drop this into Framer:  Assets panel  ➜  +  ➜  New Code File ➜ paste.\n * Then drag the component onto the canvas. All visuals are tweakable\n * from the right-hand Properties panel.\n *\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 600\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function ParticleField(props){const{backgroundColor,dotColor,lineColor,lineOpacity,particleColor,dotSpacing,dotSize,twinkleSpeed,circleScale,rotateSpeed,reach,particleRate,particleSpeed,hitGrow,enableMouse,mouseRadius,mouseStrength,style}=props;const canvasRef=useRef(null);const stateRef=useRef({nodes:[],edges:[],adj:[],particles:[],ripples:[],mouse:{x:-9999,y:-9999,active:false},spawnAccumulator:0,angle:0,width:0,height:0});useEffect(()=>{const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;const state=stateRef.current;const TRAIL_FRACTION=.26;const DRIFT=1.2// px of gentle node wander\n;const PULSE_DECAY=2.4// how fast a hit \"grow\" relaxes\n;const HOVER_PUSH=30// max px a hovered node is nudged\n;const RIPPLE_DURATION=.95// seconds a ripple lives\n;const RIPPLE_SPREAD=22// px a ripple expands\n;const BIG_CHANCE=.06// fraction of nodes that are much larger\n;let rafId=0;let lastTime=0;const rand=(min,max)=>min+Math.random()*(max-min);const parseColor=color=>{if(color.startsWith(\"#\")){let hex=color.slice(1);if(hex.length===3)hex=hex.split(\"\").map(c=>c+c).join(\"\");return{r:parseInt(hex.slice(0,2),16),g:parseInt(hex.slice(2,4),16),b:parseInt(hex.slice(4,6),16),a:1};}const m=color.match(/rgba?\\(([^)]+)\\)/);if(m){const p=m[1].split(\",\").map(s=>parseFloat(s));return{r:p[0],g:p[1],b:p[2],a:p[3]===undefined?1:p[3]};}return{r:255,g:255,b:255,a:1};};const withAlpha=(color,alpha)=>{const c=parseColor(color);const a=Math.max(0,Math.min(1,alpha))*c.a;return`rgba(${c.r}, ${c.g}, ${c.b}, ${a})`;};const geom=()=>{const w=state.width;const h=state.height;return{w,h,cx:w/2,cy:h/2,R:Math.min(w,h)/2*circleScale};};// Hexagonal/triangular lattice clipped to a circle. Each node's\n// base position is stored as an offset from the centre (ox, oy)\n// so the whole mesh can be rotated rigidly each frame.\nconst seedNodes=()=>{const{cx,cy,R}=geom();const gap=Math.max(10,dotSpacing);const rowH=gap*Math.sqrt(3)/2;const rows=Math.ceil(2*R/rowH)+2;const cols=Math.ceil(2*R/gap)+2;const nodes=[];const grid={}// \"row,col\" -> node index\n;for(let r=0;r<rows;r++){const y=cy-R+r*rowH;const off=r%2*(gap/2);for(let c=0;c<cols;c++){const x=cx-R+c*gap+off;const dx=x-cx;const dy=y-cy;if(dx*dx+dy*dy<=R*R){grid[r+\",\"+c]=nodes.length;// A few nodes are much larger than the rest.\nconst big=Math.random()<BIG_CHANCE;const r0=dotSize*(big?rand(2.6,4.4):rand(.6,1.2));nodes.push({ox:dx,oy:dy,x,y,phase:rand(0,Math.PI*2),a0:rand(.45,1),r0,big,ring:false,tw:1,pulse:0,hover:0});}}}// Connect each node to its right neighbour and the two nodes\n// in the row below — yields the triangular/hex mesh.\nconst edges=[];for(let r=0;r<rows;r++){for(let c=0;c<cols;c++){const here=grid[r+\",\"+c];if(here===undefined)continue;const right=grid[r+\",\"+(c+1)];if(right!==undefined)edges.push([here,right]);const blCol=r%2===0?c-1:c;const brCol=r%2===0?c:c+1;const bl=grid[r+1+\",\"+blCol];const br=grid[r+1+\",\"+brCol];if(bl!==undefined)edges.push([here,bl]);if(br!==undefined)edges.push([here,br]);}}// One extra ring of evenly spaced nodes on a perfect circle,\n// triangulated back into the mesh, so the outer edge is round.\nconst ringStart=nodes.length;const ringCount=Math.max(12,Math.round(2*Math.PI*R/gap));for(let k=0;k<ringCount;k++){const th=k/ringCount*Math.PI*2;const ox=Math.cos(th)*R;const oy=Math.sin(th)*R;nodes.push({ox,oy,x:cx+ox,y:cy+oy,phase:rand(0,Math.PI*2),a0:rand(.8,1),r0:dotSize*rand(1.3,1.9),big:false,ring:true,tw:1,pulse:0,hover:0});}// ring-to-ring (the round outline)\nfor(let k=0;k<ringCount;k++)edges.push([ringStart+k,ringStart+(k+1)%ringCount]);// ring-to-interior: connect each ring node to its 2 nearest\n// interior nodes to triangulate the band.\nfor(let k=0;k<ringCount;k++){const rn=nodes[ringStart+k];let b1=-1,b2=-1,d1=Infinity,d2=Infinity;for(let i=0;i<ringStart;i++){const ddx=nodes[i].ox-rn.ox;const ddy=nodes[i].oy-rn.oy;const d=ddx*ddx+ddy*ddy;if(d<d1){d2=d1;b2=b1;d1=d;b1=i;}else if(d<d2){d2=d;b2=i;}}if(b1>=0)edges.push([ringStart+k,b1]);if(b2>=0)edges.push([ringStart+k,b2]);}// Adjacency list — used to shoot a particle to a connected node.\nconst adj=nodes.map(()=>[]);for(const[a,b]of edges){adj[a].push(b);adj[b].push(a);}state.nodes=nodes;state.edges=edges;state.adj=adj;state.particles=[];state.ripples=[];};const resize=()=>{const dpr=Math.min(window.devicePixelRatio||1,2);const rect=canvas.getBoundingClientRect();const w=Math.max(1,rect.width);const h=Math.max(1,rect.height);canvas.width=Math.round(w*dpr);canvas.height=Math.round(h*dpr);ctx.setTransform(dpr,0,0,dpr,0,0);state.width=w;state.height=h;seedNodes();};// A node shoots a particle to another node within \"reach\" cells —\n// not just its immediate neighbour. Falls back to a neighbour.\nconst spawnParticle=()=>{const nodes=state.nodes;const n=nodes.length;if(n<2)return;const i=Math.floor(Math.random()*n);const src=nodes[i];const gap=Math.max(10,dotSpacing);const maxReach=gap*reach;const candidates=[];for(let j=0;j<n;j++){if(j===i)continue;const d=Math.hypot(nodes[j].ox-src.ox,nodes[j].oy-src.oy);if(d>gap*.6&&d<=maxReach)candidates.push(j);}let j;if(candidates.length){j=candidates[Math.floor(Math.random()*candidates.length)];}else{const neigh=state.adj[i];if(!neigh||!neigh.length)return;j=neigh[Math.floor(Math.random()*neigh.length)];}state.particles.push({from:i,to:j,t:0});};const tick=time=>{const dt=lastTime?Math.min((time-lastTime)/1e3,.05):0;lastTime=time;const t=time/1e3;const{cx,cy}=geom();const{w,h}={w:state.width,h:state.height};const{nodes,edges,particles,ripples,mouse}=state;state.angle+=rotateSpeed*(Math.PI/180)*dt;const cos=Math.cos(state.angle);const sin=Math.sin(state.angle);ctx.clearRect(0,0,w,h);// --- update node positions: rotate mesh + drift + hover ---\nfor(const n of nodes){n.tw=.5+.5*Math.sin(t*twinkleSpeed+n.phase);const rx=n.ox*cos-n.oy*sin;const ry=n.ox*sin+n.oy*cos;const dr=n.ring?0:DRIFT// keep the ring perfectly round\n;let px=cx+rx+Math.sin(t*.3+n.phase)*dr;let py=cy+ry+Math.cos(t*.27+n.phase*1.3)*dr;n.hover=0;if(enableMouse&&mouse.active){const dx=px-mouse.x;const dy=py-mouse.y;const dist=Math.hypot(dx,dy);if(dist<mouseRadius&&dist>.01){const f=1-dist/mouseRadius;px+=dx/dist*f*mouseStrength*HOVER_PUSH;py+=dy/dist*f*mouseStrength*HOVER_PUSH;n.hover=f;}}n.x=px;n.y=py;if(n.pulse>0)n.pulse=Math.max(0,n.pulse-dt*PULSE_DECAY);}// --- mesh lines (single batched path) ---\nctx.setLineDash([]);ctx.lineWidth=1;ctx.strokeStyle=withAlpha(lineColor,lineOpacity);ctx.beginPath();for(let i=0;i<edges.length;i++){const a=nodes[edges[i][0]];const b=nodes[edges[i][1]];ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);}ctx.stroke();// --- spawn + advance trailing particles along edges ---\nstate.spawnAccumulator+=dt*particleRate;while(state.spawnAccumulator>=1){spawnParticle();state.spawnAccumulator-=1;}ctx.lineCap=\"round\";for(let i=particles.length-1;i>=0;i--){const p=particles[i];const A=nodes[p.from];const B=nodes[p.to];if(!A||!B){particles.splice(i,1);continue;}const dist=Math.hypot(B.x-A.x,B.y-A.y);p.t+=particleSpeed/Math.max(dist,1)*dt*60;if(p.t>=1){B.pulse=1// particle hit → target node grows\n;ripples.push({from:p.to,t:0})// + ripple\n;particles.splice(i,1);continue;}const fade=Math.sin(p.t*Math.PI);const tb=Math.max(0,p.t-TRAIL_FRACTION);const sx=A.x+(B.x-A.x)*tb;const sy=A.y+(B.y-A.y)*tb;const hx=A.x+(B.x-A.x)*p.t;const hy=A.y+(B.y-A.y)*p.t;const grad=ctx.createLinearGradient(sx,sy,hx,hy);grad.addColorStop(0,withAlpha(particleColor,0));grad.addColorStop(1,withAlpha(particleColor,fade*.9));ctx.strokeStyle=grad;ctx.lineWidth=2.2;ctx.beginPath();ctx.moveTo(sx,sy);ctx.lineTo(hx,hy);ctx.stroke();const hg=ctx.createRadialGradient(hx,hy,0,hx,hy,5);hg.addColorStop(0,withAlpha(particleColor,fade));hg.addColorStop(1,withAlpha(particleColor,0));ctx.fillStyle=hg;ctx.beginPath();ctx.arc(hx,hy,5,0,Math.PI*2);ctx.fill();}// --- nodes on top (solid; grow on hit / hover, no gradient) ---\nfor(const n of nodes){const alpha=Math.min(1,n.a0*(.45+.55*n.tw)+n.pulse*.5+n.hover*.4);const r=n.r0*(.85+.3*n.tw)*(1+n.pulse*hitGrow+n.hover*.6);ctx.fillStyle=withAlpha(dotColor,alpha);ctx.beginPath();ctx.arc(n.x,n.y,r,0,Math.PI*2);ctx.fill();}// --- ripples from hit nodes (narrow dashed rings, no fill) ---\nctx.setLineDash([2,3]);ctx.lineWidth=1;for(let i=ripples.length-1;i>=0;i--){const rp=ripples[i];rp.t+=dt/RIPPLE_DURATION;const node=nodes[rp.from];if(rp.t>=1||!node){ripples.splice(i,1);continue;}const ease=1-(1-rp.t)*(1-rp.t)// ease-out\n;const base=node.r0*1.6;const alpha=(1-rp.t)*.6;ctx.strokeStyle=withAlpha(dotColor,alpha);ctx.beginPath();ctx.arc(node.x,node.y,base+ease*RIPPLE_SPREAD,0,Math.PI*2);ctx.stroke();// second, inner trailing ring\nctx.strokeStyle=withAlpha(dotColor,alpha*.6);ctx.beginPath();ctx.arc(node.x,node.y,base+ease*RIPPLE_SPREAD*.55,0,Math.PI*2);ctx.stroke();}ctx.setLineDash([]);rafId=requestAnimationFrame(tick);};const onMove=e=>{const rect=canvas.getBoundingClientRect();state.mouse.x=e.clientX-rect.left;state.mouse.y=e.clientY-rect.top;state.mouse.active=true;};const onLeave=()=>{state.mouse.active=false;};const ro=new ResizeObserver(resize);ro.observe(canvas);resize();if(enableMouse){window.addEventListener(\"pointermove\",onMove);canvas.addEventListener(\"pointerleave\",onLeave);}rafId=requestAnimationFrame(tick);return()=>{cancelAnimationFrame(rafId);ro.disconnect();window.removeEventListener(\"pointermove\",onMove);canvas.removeEventListener(\"pointerleave\",onLeave);};},[dotColor,lineColor,lineOpacity,particleColor,dotSpacing,dotSize,twinkleSpeed,circleScale,rotateSpeed,reach,particleRate,particleSpeed,hitGrow,enableMouse,mouseRadius,mouseStrength]);return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",background:backgroundColor,overflow:\"hidden\",...style},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{width:\"100%\",height:\"100%\",display:\"block\"}})});}ParticleField.defaultProps={backgroundColor:\"#001C2C\",dotColor:\"#FBFBF4\",lineColor:\"#FBFBF4\",lineOpacity:.14,particleColor:\"#FBFBF4\",dotSpacing:30,dotSize:1.4,twinkleSpeed:1.2,circleScale:.92,rotateSpeed:6,reach:5,particleRate:3,particleSpeed:1.4,hitGrow:1.1,enableMouse:true,mouseRadius:160,mouseStrength:.8};addPropertyControls(ParticleField,{backgroundColor:{type:ControlType.Color,title:\"Background\"},dotColor:{type:ControlType.Color,title:\"Nodes\"},lineColor:{type:ControlType.Color,title:\"Lines\"},lineOpacity:{type:ControlType.Number,title:\"Line opacity\",min:0,max:1,step:.02},particleColor:{type:ControlType.Color,title:\"Particles\"},dotSpacing:{type:ControlType.Number,title:\"Spacing\",min:14,max:64,step:1,unit:\"px\"},dotSize:{type:ControlType.Number,title:\"Node size\",min:.5,max:4,step:.1},twinkleSpeed:{type:ControlType.Number,title:\"Twinkle\",min:0,max:4,step:.1},circleScale:{type:ControlType.Number,title:\"Circle size\",min:.4,max:1,step:.02},rotateSpeed:{type:ControlType.Number,title:\"Rotate\",min:-30,max:30,step:.5,unit:\"\\xb0/s\"},reach:{type:ControlType.Number,title:\"Reach\",min:1,max:12,step:.5,unit:\" cells\"},particleRate:{type:ControlType.Number,title:\"Particles / sec\",min:0,max:14,step:.5},particleSpeed:{type:ControlType.Number,title:\"Particle speed\",min:.3,max:4,step:.1},hitGrow:{type:ControlType.Number,title:\"Hit grow\",min:0,max:2.5,step:.1},enableMouse:{type:ControlType.Boolean,title:\"Mouse react\",defaultValue:true},mouseRadius:{type:ControlType.Number,title:\"Hover radius\",min:40,max:400,step:10,unit:\"px\",hidden:props=>!props.enableMouse},mouseStrength:{type:ControlType.Number,title:\"Hover push\",min:0,max:3,step:.1,hidden:props=>!props.enableMouse}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ParticleField\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"600\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"600\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Particles.map"],"mappings":"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"}