{"version":3,"file":"ParticleSphere.CIQEAPIM.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/TmPAJfl7KsPto5wuygcE/np4phfuL58r0k3T8Iyat/ParticleSphere.js"],"sourcesContent":["// 3D particle sphere with twinkling effect using WebGL\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * 3D Particle Sphere\n *\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 600\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function ParticleSphere(props){const{particleCount=500,sphereRadius=2,particleSize=.05,twinkleSpeed=.1,floatIntensity=.5,repulsionRadius=.3,rotationSpeed=.5}=props;const canvasRef=useRef(null);const animationFrameRef=useRef(null);const particleDataRef=useRef(null);const rotationRef=useRef({x:0,y:0});const mouseRef=useRef({x:0,y:0,isHovering:false});// Drag rotation refs\nconst isDraggingRef=useRef(false);const lastDragPos=useRef({x:0,y:0});const dragVelocity=useRef({x:0,y:0});const isStatic=useIsStaticRenderer();const backgroundColor=\"#FFFFFF\";const particleColor=\"#333333\";useEffect(()=>{if(!canvasRef.current||isStatic)return;const canvas=canvasRef.current;const gl=canvas.getContext(\"webgl\",{antialias:true,alpha:true});if(!gl){console.error(\"WebGL not supported\");return;}// Vertex shader\nconst vertexShaderSource=`\n            attribute vec3 position;\n            attribute float opacity;\n            uniform mat4 projection;\n            uniform mat4 view;\n            uniform float pointSize;\n            varying float vOpacity;\n\n            void main() {\n                vOpacity = opacity;\n                vec4 mvPosition = view * vec4(position, 1.0);\n                gl_Position = projection * mvPosition;\n                gl_PointSize = pointSize * (300.0 / -mvPosition.z);\n            }\n        `;// Fragment shader — clean alpha with no mode-dependent branching\nconst fragmentShaderSource=`\n            precision mediump float;\n            uniform vec3 color;\n            varying float vOpacity;\n\n            void main() {\n                vec2 center = gl_PointCoord - vec2(0.5);\n                float dist = length(center);\n                if (dist > 0.5) discard;\n\n                float edge = 1.0 - dist * 1.5;\n                float alpha = edge * vOpacity;\n                gl_FragColor = vec4(color, alpha);\n            }\n        `;// Compile shader\nfunction compileShader(gl,source,type){const shader=gl.createShader(type);if(!shader)return null;gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error(\"Shader compile error:\",gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}return shader;}const vertexShader=compileShader(gl,vertexShaderSource,gl.VERTEX_SHADER);const fragmentShader=compileShader(gl,fragmentShaderSource,gl.FRAGMENT_SHADER);if(!vertexShader||!fragmentShader)return;// Create program\nconst program=gl.createProgram();if(!program)return;gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error(\"Program link error:\",gl.getProgramInfoLog(program));return;}gl.useProgram(program);// Get attribute and uniform locations\nconst positionLocation=gl.getAttribLocation(program,\"position\");const opacityLocation=gl.getAttribLocation(program,\"opacity\");const projectionLocation=gl.getUniformLocation(program,\"projection\");const viewLocation=gl.getUniformLocation(program,\"view\");const colorLocation=gl.getUniformLocation(program,\"color\");const pointSizeLocation=gl.getUniformLocation(program,\"pointSize\");// Create particle data\nconst positions=new Float32Array(particleCount*3);const originalPositions=new Float32Array(particleCount*3);const opacities=new Float32Array(particleCount);const twinklePhases=new Float32Array(particleCount);const twinkleSpeeds=new Float32Array(particleCount);for(let i=0;i<particleCount;i++){const theta=Math.random()*Math.PI*2;const phi=Math.acos(2*Math.random()-1);const radius=sphereRadius;const x=radius*Math.sin(phi)*Math.cos(theta);const y=radius*Math.sin(phi)*Math.sin(theta);const z=radius*Math.cos(phi);positions[i*3]=x;positions[i*3+1]=y;positions[i*3+2]=z;originalPositions[i*3]=x;originalPositions[i*3+1]=y;originalPositions[i*3+2]=z;opacities[i]=Math.random();twinklePhases[i]=Math.random()*Math.PI*2;twinkleSpeeds[i]=.5+Math.random()*1.5;}particleDataRef.current={positions,originalPositions,twinklePhases,twinkleSpeeds};// Create buffers\nconst positionBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.bufferData(gl.ARRAY_BUFFER,positions,gl.DYNAMIC_DRAW);const opacityBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,opacityBuffer);gl.bufferData(gl.ARRAY_BUFFER,opacities,gl.DYNAMIC_DRAW);// Matrix functions\nfunction perspective(fov,aspect,near,far){const f=1/Math.tan(fov/2);const nf=1/(near-far);return new Float32Array([f/aspect,0,0,0,0,f,0,0,0,0,(far+near)*nf,-1,0,0,2*far*near*nf,0]);}function multiply(a,b){const result=new Float32Array(16);for(let i=0;i<4;i++){for(let j=0;j<4;j++){result[i*4+j]=a[i*4+0]*b[0*4+j]+a[i*4+1]*b[1*4+j]+a[i*4+2]*b[2*4+j]+a[i*4+3]*b[3*4+j];}}return result;}function rotateX(angle){const c=Math.cos(angle);const s=Math.sin(angle);return new Float32Array([1,0,0,0,0,c,s,0,0,-s,c,0,0,0,0,1]);}function rotateY(angle){const c=Math.cos(angle);const s=Math.sin(angle);return new Float32Array([c,0,-s,0,0,1,0,0,s,0,c,0,0,0,0,1]);}function translate(x,y,z){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,x,y,z,1]);}// Parse color\nfunction parseColor(color){const normalizedColor=color.trim().toLowerCase();if(normalizedColor.startsWith(\"#\")){const hex=normalizedColor.slice(1);if(hex.length===3){const r=parseInt(hex[0]+hex[0],16)/255;const g=parseInt(hex[1]+hex[1],16)/255;const b=parseInt(hex[2]+hex[2],16)/255;return[r,g,b];}else if(hex.length===6){const r=parseInt(hex.slice(0,2),16)/255;const g=parseInt(hex.slice(2,4),16)/255;const b=parseInt(hex.slice(4,6),16)/255;return[r,g,b];}}if(normalizedColor.startsWith(\"rgb\")){const match=normalizedColor.match(/rgba?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/);if(match&&match.length>=4){return[parseFloat(match[1])/255,parseFloat(match[2])/255,parseFloat(match[3])/255];}}if(normalizedColor.startsWith(\"hsl\")){const match=normalizedColor.match(/hsla?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%?\\s*,\\s*([\\d.]+)%?/);if(match&&match.length>=4){const h=parseFloat(match[1])/360;const s=parseFloat(match[2])/100;const l=parseFloat(match[3])/100;let r,g,b;if(s===0){r=g=b=l;}else{const hue2rgb=(p,q,t)=>{if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p;};const q=l<.5?l*(1+s):l+s-l*s;const p=2*l-q;r=hue2rgb(p,q,h+1/3);g=hue2rgb(p,q,h);b=hue2rgb(p,q,h-1/3);}return[r,g,b];}}console.warn(`Failed to parse color: ${color}, defaulting to white`);return[1,1,1];}const parsedColor=parseColor(particleColor);// Resize handler using ResizeObserver for Framer layout changes\nlet resizeObserver=null;function resize(){if(!canvas)return;const dpr=Math.min(window.devicePixelRatio||1,2);const width=canvas.clientWidth;const height=canvas.clientHeight;canvas.width=Math.round(width*dpr);canvas.height=Math.round(height*dpr);gl.viewport(0,0,canvas.width,canvas.height);}resize();if(typeof ResizeObserver!==\"undefined\"){resizeObserver=new ResizeObserver(()=>resize());resizeObserver.observe(canvas);}else{window.addEventListener(\"resize\",resize);}// Mouse / touch handlers\nconst handleMouseMove=e=>{const rect=canvas.getBoundingClientRect();const nx=(e.clientX-rect.left)/rect.width*2-1;const ny=-((e.clientY-rect.top)/rect.height)*2+1;mouseRef.current={x:nx,y:ny,isHovering:true};if(isDraggingRef.current){const dx=e.clientX-lastDragPos.current.x;const dy=e.clientY-lastDragPos.current.y;const sensitivity=8e-4;rotationRef.current.y+=dx*sensitivity;rotationRef.current.x+=dy*sensitivity;dragVelocity.current={x:dx*sensitivity,y:dy*sensitivity};lastDragPos.current={x:e.clientX,y:e.clientY};}else{const hoverSensitivity=25e-5;rotationRef.current.y+=e.movementX*hoverSensitivity;rotationRef.current.x+=e.movementY*hoverSensitivity;}};const handleMouseLeave=()=>{mouseRef.current.isHovering=false;isDraggingRef.current=false;};const handleMouseDown=e=>{isDraggingRef.current=true;lastDragPos.current={x:e.clientX,y:e.clientY};dragVelocity.current={x:0,y:0};};const handleMouseUp=()=>{isDraggingRef.current=false;};const handleTouchStart=e=>{isDraggingRef.current=true;mouseRef.current.isHovering=false;const pos=e.touches[0];lastDragPos.current={x:pos.clientX,y:pos.clientY};dragVelocity.current={x:0,y:0};};const handleTouchMove=e=>{if(!isDraggingRef.current)return;const pos=e.touches[0];const dx=pos.clientX-lastDragPos.current.x;const dy=pos.clientY-lastDragPos.current.y;const sensitivity=8e-4;rotationRef.current.y+=dx*sensitivity;rotationRef.current.x+=dy*sensitivity;dragVelocity.current={x:dx*sensitivity,y:dy*sensitivity};lastDragPos.current={x:pos.clientX,y:pos.clientY};};const handleTouchEnd=()=>{isDraggingRef.current=false;};canvas.addEventListener(\"mousemove\",handleMouseMove);canvas.addEventListener(\"mouseleave\",handleMouseLeave);canvas.addEventListener(\"mousedown\",handleMouseDown);canvas.addEventListener(\"mouseup\",handleMouseUp);canvas.addEventListener(\"touchstart\",handleTouchStart,{passive:true});canvas.addEventListener(\"touchmove\",handleTouchMove,{passive:true});canvas.addEventListener(\"touchend\",handleTouchEnd);// Clear with transparent background\ngl.clearColor(0,0,0,0);// Standard alpha blending\ngl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);gl.disable(gl.DEPTH_TEST);// Animation loop\nlet time=0;const animate=()=>{time+=.016;if(!isDraggingRef.current){// momentum decay after drag release\nrotationRef.current.y+=dragVelocity.current.x*.9;rotationRef.current.x+=dragVelocity.current.y*.9;dragVelocity.current.x*=.9;dragVelocity.current.y*=.9;// Resume auto-rotation only when both axes have settled\nif(Math.abs(dragVelocity.current.x)<1e-4&&Math.abs(dragVelocity.current.y)<1e-4){rotationRef.current.y+=rotationSpeed*.01;}}// Compute aspect and matrices once per frame\nconst aspect=canvas.width/canvas.height;const projectionMatrix=perspective(75*Math.PI/180,aspect,.1,1e3);let viewMatrix=rotateY(rotationRef.current.y);viewMatrix=multiply(viewMatrix,rotateX(rotationRef.current.x));viewMatrix=multiply(viewMatrix,translate(0,0,-5));if(particleDataRef.current){const{positions,originalPositions,twinklePhases,twinkleSpeeds}=particleDataRef.current;for(let i=0;i<particleCount;i++){const i3=i*3;// Float effect\nconst floatX=Math.sin(time*.5+i*.1)*floatIntensity*.1;const floatY=Math.cos(time*.3+i*.2)*floatIntensity*.1;const floatZ=Math.sin(time*.4+i*.15)*floatIntensity*.1;positions[i3]=originalPositions[i3]+floatX;positions[i3+1]=originalPositions[i3+1]+floatY;positions[i3+2]=originalPositions[i3+2]+floatZ;// Mouse repulsion\nif(mouseRef.current.isHovering){const px=positions[i3];const py=positions[i3+1];const pz=positions[i3+2];const vx=viewMatrix[0]*px+viewMatrix[4]*py+viewMatrix[8]*pz+viewMatrix[12];const vy=viewMatrix[1]*px+viewMatrix[5]*py+viewMatrix[9]*pz+viewMatrix[13];const vz=viewMatrix[2]*px+viewMatrix[6]*py+viewMatrix[10]*pz+viewMatrix[14];const vw=viewMatrix[3]*px+viewMatrix[7]*py+viewMatrix[11]*pz+viewMatrix[15];const clipX=projectionMatrix[0]*vx+projectionMatrix[4]*vy+projectionMatrix[8]*vz+projectionMatrix[12]*vw;const clipY=projectionMatrix[1]*vx+projectionMatrix[5]*vy+projectionMatrix[9]*vz+projectionMatrix[13]*vw;const clipW=projectionMatrix[3]*vx+projectionMatrix[7]*vy+projectionMatrix[11]*vz+projectionMatrix[15]*vw;const ndcX=clipX/clipW;const ndcY=clipY/clipW;const dx=ndcX-mouseRef.current.x;const dy=ndcY-mouseRef.current.y;const distance=Math.sqrt(dx*dx+dy*dy);const repulsionStrength=.15;if(distance<repulsionRadius){const force=(1-distance/repulsionRadius)*repulsionStrength;const dirX=positions[i3];const dirY=positions[i3+1];const dirZ=positions[i3+2];const dirLength=Math.sqrt(dirX*dirX+dirY*dirY+dirZ*dirZ);if(dirLength>0){positions[i3]+=dirX/dirLength*force;positions[i3+1]+=dirY/dirLength*force;positions[i3+2]+=dirZ/dirLength*force;}}}// Twinkle effect\ntwinklePhases[i]+=twinkleSpeeds[i]*twinkleSpeed*.02;opacities[i]=(Math.sin(twinklePhases[i])+1)*.5;}// Update buffers\ngl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.bufferData(gl.ARRAY_BUFFER,positions,gl.DYNAMIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,opacityBuffer);gl.bufferData(gl.ARRAY_BUFFER,opacities,gl.DYNAMIC_DRAW);}// Clear\ngl.clear(gl.COLOR_BUFFER_BIT);// Render\ngl.uniformMatrix4fv(projectionLocation,false,projectionMatrix);gl.uniformMatrix4fv(viewLocation,false,viewMatrix);gl.uniform3f(colorLocation,parsedColor[0],parsedColor[1],parsedColor[2]);gl.uniform1f(pointSizeLocation,particleSize);gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.enableVertexAttribArray(positionLocation);gl.vertexAttribPointer(positionLocation,3,gl.FLOAT,false,0,0);gl.bindBuffer(gl.ARRAY_BUFFER,opacityBuffer);gl.enableVertexAttribArray(opacityLocation);gl.vertexAttribPointer(opacityLocation,1,gl.FLOAT,false,0,0);gl.drawArrays(gl.POINTS,0,particleCount);animationFrameRef.current=requestAnimationFrame(animate);};animate();// Cleanup\nreturn()=>{if(resizeObserver){resizeObserver.disconnect();}else{window.removeEventListener(\"resize\",resize);}canvas.removeEventListener(\"mousemove\",handleMouseMove);canvas.removeEventListener(\"mouseleave\",handleMouseLeave);canvas.removeEventListener(\"mousedown\",handleMouseDown);canvas.removeEventListener(\"mouseup\",handleMouseUp);canvas.removeEventListener(\"touchstart\",handleTouchStart);canvas.removeEventListener(\"touchmove\",handleTouchMove);canvas.removeEventListener(\"touchend\",handleTouchEnd);if(animationFrameRef.current!==null){cancelAnimationFrame(animationFrameRef.current);}gl.deleteProgram(program);gl.deleteShader(vertexShader);gl.deleteShader(fragmentShader);gl.deleteBuffer(positionBuffer);gl.deleteBuffer(opacityBuffer);};},[particleCount,sphereRadius,particleSize,twinkleSpeed,floatIntensity,repulsionRadius,rotationSpeed,isStatic]);if(isStatic){return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",backgroundColor,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:particleColor,fontSize:16,fontFamily:\"sans-serif\"},children:\"3D Particle Sphere\"});}return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",position:\"relative\",backgroundColor,overflow:\"hidden\"},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",display:\"block\"}})});}addPropertyControls(ParticleSphere,{particleCount:{type:ControlType.Number,title:\"Particle Count\",defaultValue:500,min:100,max:1e4,step:50},sphereRadius:{type:ControlType.Number,title:\"Sphere Radius\",defaultValue:2,min:.5,max:10,step:.1},particleSize:{type:ControlType.Number,title:\"Particle Size\",defaultValue:.05,min:.001,max:.5,step:.001},twinkleSpeed:{type:ControlType.Number,title:\"Twinkle Speed\",defaultValue:.25,min:0,max:5,step:.05},floatIntensity:{type:ControlType.Number,title:\"Float Intensity\",defaultValue:.5,min:0,max:2,step:.1},rotationSpeed:{type:ControlType.Number,title:\"Rotation Speed\",defaultValue:.1,min:0,max:5,step:.1},repulsionRadius:{type:ControlType.Number,title:\"Blast Radius\",defaultValue:.3,min:0,max:1.5,step:.05}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ParticleSphere\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"600\",\"framerIntrinsicWidth\":\"600\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ParticleSphere.map"],"mappings":"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"}