{"version":3,"file":"ParticleSphere.CAYKh8bK.mjs","names":["p","useRef"],"sources":["https:/framerusercontent.com/modules/Qg3EHSzb9yfiODVaqlE7/SJO2YyanGDcJW5zeiMq6/ParticleSphere.js"],"sourcesContent":["// Particle Torus — Framer Code Component\n// WebGL renderer — perfectly smooth, transparent background, crisp square points\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";const isMobile=typeof navigator!==\"undefined\"&&/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);function buildTorus(n,tubeRadius){const R=.72;const r=Math.max(.04,tubeRadius);const phi=(1+Math.sqrt(5))/2;const TAU=Math.PI*2;const ox=new Float32Array(n);const oy=new Float32Array(n);const oz=new Float32Array(n);for(let i=0;i<n;i++){const u=i/phi%1*TAU;const v=i/n*TAU;const cv=Math.cos(v),sv=Math.sin(v);const cu=Math.cos(u),su=Math.sin(u);ox[i]=(R+r*cv)*cu;oy[i]=r*sv;oz[i]=(R+r*cv)*su;}return{ox,oy,oz};}function createShader(gl,type,src){const s=gl.createShader(type);gl.shaderSource(s,src);gl.compileShader(s);return s;}function createProgram(gl,vs,fs){const p=gl.createProgram();gl.attachShader(p,createShader(gl,gl.VERTEX_SHADER,vs));gl.attachShader(p,createShader(gl,gl.FRAGMENT_SHADER,fs));gl.linkProgram(p);return p;}const VS=`\nattribute vec3 aPos;\nuniform float uRotX;\nuniform float uRotY;\nuniform float uFov;\nuniform float uScale;\nuniform float uAspect;\nuniform float uPointSize;\nvoid main() {\n    float cy = cos(uRotY), sy = sin(uRotY);\n    float cx = cos(uRotX), sx = sin(uRotX);\n    float x1 = aPos.x * cy - aPos.z * sy;\n    float z1 = aPos.x * sy + aPos.z * cy;\n    float y2 = aPos.y * cx - z1 * sx;\n    float z2 = aPos.y * sx + z1 * cx;\n    float persp = uFov / (uFov + z2);\n    // uScale is in terms of width (clip x). Divide x by aspect to keep circle round.\n    // y stays as-is — sized relative to width so torus is always width-proportional.\n    float nx = x1 * persp * uScale / uAspect;\n    float ny = y2 * persp * uScale;\n    gl_Position  = vec4(nx, ny, z2 * 0.001, 1.0);\n    gl_PointSize = uPointSize;\n}\n`;const FS=`\nprecision mediump float;\nuniform vec4 uColor;\nvoid main() { gl_FragColor = uColor; }\n`;let _cel=null;function resolveRGBA(css){if(typeof document===\"undefined\")return[1,1,1,1];if(!_cel){_cel=document.createElement(\"div\");_cel.style.cssText=\"display:none;position:fixed;pointer-events:none\";document.body.appendChild(_cel);}_cel.style.color=css;const c=getComputedStyle(_cel).color;const m=c.match(/[\\d.]+/g)||[];return[(+m[0]||255)/255,(+m[1]||255)/255,(+m[2]||255)/255,m[3]!==undefined?+m[3]:1];}export default function ParticleTorus({particleCount=2500,particleSize=2,color=\"#ffffff\",rotationSpeed=.4,tubeRadius=.11,dragEnabled=true,dragSpeed=1.2,pauseOnHover=false,scale=1,cursorInteraction=true,cursorRadius=80,cursorStrength=.4,clickForce=8,style={},...rest}){const wrapRef=useRef(null);const canvasRef=useRef(null);const S=useRef({ox:new Float32Array(0),oy:new Float32Array(0),oz:new Float32Array(0),px:new Float32Array(0),py:new Float32Array(0),pz:new Float32Array(0),vx:new Float32Array(0),vy:new Float32Array(0),vz:new Float32Array(0),SX:new Float32Array(0),SY:new Float32Array(0),count:0,tubeRadius:-1,rotX:-Math.PI/2,rotY:0,vRotX:0,vRotY:0,dragging:false,hovering:false,overParticle:false,lastMX:0,lastMY:0,cursorX:-9999,cursorY:-9999,W:0,H:0,dpr:1,raf:0,resizeDirty:false,gl:null,prog:null,posBuf:null,posData:new Float32Array(0)});const P=useRef({particleCount,particleSize,color,rotationSpeed,tubeRadius,dragEnabled,dragSpeed,pauseOnHover,scale,cursorInteraction,cursorRadius,cursorStrength,clickForce});P.current={particleCount,particleSize,color,rotationSpeed,tubeRadius,dragEnabled,dragSpeed,pauseOnHover,scale,cursorInteraction,cursorRadius,cursorStrength,clickForce};useEffect(()=>{const canvas=canvasRef.current;const wrap=wrapRef.current;const s=S.current;const gl=canvas.getContext(\"webgl\",{alpha:true,premultipliedAlpha:false,antialias:false,depth:false});if(!gl){console.warn(\"WebGL unavailable\");return;}s.gl=gl;const prog=createProgram(gl,VS,FS);s.prog=prog;gl.useProgram(prog);gl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);gl.clearColor(0,0,0,0);s.posBuf=gl.createBuffer();// Cache all locations once — never look them up per frame\nconst uRotX=gl.getUniformLocation(prog,\"uRotX\");const uRotY=gl.getUniformLocation(prog,\"uRotY\");const uFov=gl.getUniformLocation(prog,\"uFov\");const uScale=gl.getUniformLocation(prog,\"uScale\");const uAspect=gl.getUniformLocation(prog,\"uAspect\");const uPointSize=gl.getUniformLocation(prog,\"uPointSize\");const uColor=gl.getUniformLocation(prog,\"uColor\");const aPos=gl.getAttribLocation(prog,\"aPos\");gl.enableVertexAttribArray(aPos);function build(n,tr){const{ox,oy,oz}=buildTorus(n,tr);s.count=n;s.tubeRadius=tr;s.ox=ox;s.oy=oy;s.oz=oz;s.px=new Float32Array(ox);s.py=new Float32Array(oy);s.pz=new Float32Array(oz);s.vx=new Float32Array(n);s.vy=new Float32Array(n);s.vz=new Float32Array(n);s.SX=new Float32Array(n);s.SY=new Float32Array(n);s.posData=new Float32Array(n*3);gl.bindBuffer(gl.ARRAY_BUFFER,s.posBuf);gl.bufferData(gl.ARRAY_BUFFER,s.posData,gl.DYNAMIC_DRAW);}s.dpr=Math.min(window.devicePixelRatio||1,2);const p0=P.current;build(isMobile?Math.max(200,p0.particleCount/2|0):p0.particleCount,p0.tubeRadius);function syncSize(){const w=wrap.offsetWidth,h=wrap.offsetHeight;if(w<1||h<1)return;if(w===s.W&&h===s.H){s.resizeDirty=false;return;}s.W=w;s.H=h;canvas.width=Math.round(w*s.dpr);canvas.height=Math.round(h*s.dpr);gl.viewport(0,0,canvas.width,canvas.height);s.resizeDirty=false;}const ro=new ResizeObserver(()=>{s.resizeDirty=true;});ro.observe(wrap);function draw(){s.raf=requestAnimationFrame(draw);if(s.resizeDirty||s.W<1)syncSize();const W=s.W,H=s.H;if(W<1||H<1)return;const p=P.current;const target=isMobile?Math.max(200,p.particleCount/2|0):p.particleCount;if(s.count!==target||s.tubeRadius!==p.tubeRadius)build(target,p.tubeRadius);if(!s.dragging&&!(p.pauseOnHover&&s.hovering)){s.vRotY-=p.rotationSpeed*35e-5;}s.vRotX*=.96;s.vRotY*=.96;s.rotX+=s.vRotX;s.rotY+=s.vRotY;const n=s.count;const hasCursor=p.cursorInteraction;const curX=s.cursorX,curY=s.cursorY;const cRad=p.cursorRadius,cStr=p.cursorStrength;// All constants computed once per frame\nconst aspect=W/H;const fov=2.5;const glScale=.28*p.scale*2;const halfW=W*.5,halfH=H*.5;const cosX=Math.cos(s.rotX),sinX=Math.sin(s.rotX);const cosY=Math.cos(s.rotY),sinY=Math.sin(s.rotY);for(let i=0;i<n;i++){if(hasCursor){s.vx[i]*=.92;s.vy[i]*=.92;s.vz[i]*=.92;s.px[i]+=(s.ox[i]-s.px[i])*.055+s.vx[i];s.py[i]+=(s.oy[i]-s.py[i])*.055+s.vy[i];s.pz[i]+=(s.oz[i]-s.pz[i])*.055+s.vz[i];if(Math.abs(s.vx[i])<2e-4&&Math.abs(s.vy[i])<2e-4&&Math.abs(s.px[i]-s.ox[i])<2e-4){s.px[i]=s.ox[i];s.py[i]=s.oy[i];s.pz[i]=s.oz[i];s.vx[i]=0;s.vy[i]=0;s.vz[i]=0;}}else{s.px[i]=s.ox[i];s.py[i]=s.oy[i];s.pz[i]=s.oz[i];}// Rotate + project — matches GPU shader exactly\nconst x1=s.px[i]*cosY-s.pz[i]*sinY;const z1=s.px[i]*sinY+s.pz[i]*cosY;const y2=s.py[i]*cosX-z1*sinX;const z2=s.py[i]*sinX+z1*cosX;const persp=fov/(fov+z2);s.SX[i]=halfW+x1*persp*glScale/aspect*halfW;s.SY[i]=halfH-y2*persp*glScale*halfH;if(hasCursor){const dx=s.SX[i]-curX,dy=s.SY[i]-curY;const d2=dx*dx+dy*dy;if(d2<cRad*cRad&&d2>0){const d=Math.sqrt(d2);const f=(1-d/cRad)*cStr*.5;s.vx[i]+=dx/d*f;s.vy[i]+=dy/d*f;const vmax=.06;const vm=Math.sqrt(s.vx[i]*s.vx[i]+s.vy[i]*s.vy[i]);if(vm>vmax){s.vx[i]=s.vx[i]/vm*vmax;s.vy[i]=s.vy[i]/vm*vmax;}}}s.posData[i*3]=s.px[i];s.posData[i*3+1]=s.py[i];s.posData[i*3+2]=s.pz[i];}if(p.dragEnabled){const hitR=Math.max(16,p.cursorRadius*.4);let hit=false;for(let i=0;i<n;i++){const dx=s.SX[i]-curX,dy=s.SY[i]-curY;if(dx*dx+dy*dy<hitR*hitR){hit=true;break;}}if(hit!==s.overParticle){s.overParticle=hit;if(!s.dragging)wrap.style.cursor=hit?\"grab\":\"default\";}}// WebGL draw — all uniforms cached, zero per-frame lookups\ngl.clear(gl.COLOR_BUFFER_BIT);gl.bindBuffer(gl.ARRAY_BUFFER,s.posBuf);gl.bufferSubData(gl.ARRAY_BUFFER,0,s.posData);gl.vertexAttribPointer(aPos,3,gl.FLOAT,false,0,0);gl.uniform1f(uRotX,s.rotX);gl.uniform1f(uRotY,s.rotY);gl.uniform1f(uFov,fov);gl.uniform1f(uScale,glScale);gl.uniform1f(uAspect,aspect);gl.uniform1f(uPointSize,Math.max(1,p.particleSize)*s.dpr);const[r,g,b,a]=resolveRGBA(p.color);gl.uniform4f(uColor,r,g,b,a);gl.drawArrays(gl.POINTS,0,n);}function start(){if(wrap.offsetWidth>0){syncSize();draw();}else requestAnimationFrame(start);}start();return()=>{cancelAnimationFrame(s.raf);ro.disconnect();};},[]);function onMouseDown(e){if(!P.current.dragEnabled||!S.current.overParticle)return;e.preventDefault();const s=S.current;s.dragging=true;s.vRotX=0;s.vRotY=0;s.lastMX=e.clientX;s.lastMY=e.clientY;wrapRef.current.style.cursor=\"grabbing\";function onMove(ev){const dx=ev.clientX-s.lastMX,dy=ev.clientY-s.lastMY;const spd=P.current.dragSpeed*.005;s.rotY+=dx*spd;s.rotX+=dy*spd;s.vRotY=dx*spd;s.vRotX=dy*spd;s.lastMX=ev.clientX;s.lastMY=ev.clientY;const c=canvasRef.current;if(c){const r=c.getBoundingClientRect();s.cursorX=ev.clientX-r.left;s.cursorY=ev.clientY-r.top;}}function onUp(){s.dragging=false;wrapRef.current.style.cursor=s.overParticle?\"grab\":\"default\";window.removeEventListener(\"mousemove\",onMove);window.removeEventListener(\"mouseup\",onUp);}window.addEventListener(\"mousemove\",onMove);window.addEventListener(\"mouseup\",onUp);}function onMouseMove(e){const c=canvasRef.current;if(!c)return;const r=c.getBoundingClientRect();S.current.cursorX=e.clientX-r.left;S.current.cursorY=e.clientY-r.top;}function onMouseEnter(){S.current.hovering=true;}function onMouseLeave(){S.current.hovering=false;if(!S.current.dragging){S.current.cursorX=-9999;S.current.cursorY=-9999;S.current.overParticle=false;wrapRef.current.style.cursor=\"default\";}}function onClick(e){const p=P.current;if(!p.cursorInteraction)return;const c=canvasRef.current;if(!c)return;const rect=c.getBoundingClientRect();const mx=e.clientX-rect.left,my=e.clientY-rect.top;const s=S.current,scR=p.cursorRadius*1.5;for(let i=0;i<s.count;i++){const dx=s.SX[i]-mx,dy=s.SY[i]-my;const d=Math.sqrt(dx*dx+dy*dy);if(d<scR&&d>0){const f=(1-d/scR)*p.clickForce*.025;s.vx[i]+=dx/d*f*.5;s.vy[i]+=dy/d*f*.5;s.vz[i]+=(Math.random()-.5)*f*.3;}}}function onTouchStart(e){// Don't preventDefault on start — lets Safari scroll work normally\nconst s=S.current,p=P.current;const t=e.touches[0];const c=canvasRef.current;if(c){const r=c.getBoundingClientRect();s.cursorX=t.clientX-r.left;s.cursorY=t.clientY-r.top;}if(p.dragEnabled){s.dragging=true;s.vRotX=0;s.vRotY=0;}s.lastMX=t.clientX;s.lastMY=t.clientY;function onMove(ev){if(!ev.touches.length)return;const touch=ev.touches[0];const c2=canvasRef.current;if(c2){const r=c2.getBoundingClientRect();s.cursorX=touch.clientX-r.left;s.cursorY=touch.clientY-r.top;}if(p.dragEnabled){// Only block scroll when user is actively rotating\nev.preventDefault();const dx=touch.clientX-s.lastMX,dy=touch.clientY-s.lastMY;const spd=p.dragSpeed*.005;s.rotY+=dx*spd;s.rotX+=dy*spd;s.vRotY=dx*spd;s.vRotX=dy*spd;}s.lastMX=touch.clientX;s.lastMY=touch.clientY;}function onEnd(){s.dragging=false;s.cursorX=-9999;s.cursorY=-9999;window.removeEventListener(\"touchmove\",onMove);window.removeEventListener(\"touchend\",onEnd);window.removeEventListener(\"touchcancel\",onEnd);}// passive true on start so Safari doesn't suppress touch events\n// passive false on move so we can preventDefault when dragging\nwindow.addEventListener(\"touchmove\",onMove,{passive:!p.dragEnabled});window.addEventListener(\"touchend\",onEnd);window.addEventListener(\"touchcancel\",onEnd);}return /*#__PURE__*/_jsx(\"div\",{ref:wrapRef,style:{width:\"100%\",height:\"100%\",position:\"relative\",zIndex:0,isolation:\"auto\",cursor:\"default\",touchAction:\"none\",userSelect:\"none\",WebkitUserSelect:\"none\",...style},onMouseDown:onMouseDown,onMouseMove:onMouseMove,onMouseEnter:onMouseEnter,onMouseLeave:onMouseLeave,onClick:onClick,onTouchStart:onTouchStart,...rest,children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{display:\"block\",width:\"100%\",height:\"100%\"}})});}addPropertyControls(ParticleTorus,{particleCount:{type:ControlType.Number,title:\"Count\",defaultValue:2500,min:50,max:8e3,step:50,displayStepper:true},particleSize:{type:ControlType.Number,title:\"Size\",defaultValue:2,min:1,max:8,step:1,displayStepper:true},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#ffffff\"},rotationSpeed:{type:ControlType.Number,title:\"Speed\",defaultValue:.4,min:0,max:3,step:.1,displayStepper:true},tubeRadius:{type:ControlType.Number,title:\"Tube Radius\",defaultValue:.11,min:.04,max:.25,step:.01,displayStepper:true},dragEnabled:{type:ControlType.Boolean,title:\"Drag\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},dragSpeed:{type:ControlType.Number,title:\"Drag Speed\",defaultValue:1.2,min:.1,max:3,step:.1,displayStepper:true,hidden:p=>!p.dragEnabled},pauseOnHover:{type:ControlType.Boolean,title:\"Pause on Hover\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},scale:{type:ControlType.Number,title:\"Scale\",defaultValue:1,min:.2,max:2,step:.05,displayStepper:true},cursorInteraction:{type:ControlType.Boolean,title:\"Cursor FX\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},cursorRadius:{type:ControlType.Number,title:\"Cursor Radius\",defaultValue:80,min:10,max:300,step:5,displayStepper:true,hidden:p=>!p.cursorInteraction},cursorStrength:{type:ControlType.Number,title:\"Cursor Strength\",defaultValue:.4,min:0,max:2,step:.05,displayStepper:true,hidden:p=>!p.cursorInteraction},clickForce:{type:ControlType.Number,title:\"Click Force\",defaultValue:8,min:0,max:30,step:1,displayStepper:true,hidden:p=>!p.cursorInteraction}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ParticleTorus\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ParticleSphere.map"],"mappings":"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"}