{"version":3,"file":"Orb_1.CVmASI07.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/eftVYq3wGSMuBy8PMfn1/r33SgidAXeEPeoQH84F9/Orb_1.js"],"sourcesContent":["// Nova Component - WebGL animated orb with customizable properties\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export default function Nova(props){const{hue=0,hoverIntensity=.2,rotateOnHover=true}=props;const ctnDom=useRef(null);const isStatic=useIsStaticRenderer();const vert=/* glsl */`\n        precision highp float;\n        attribute vec2 position;\n        attribute vec2 uv;\n        varying vec2 vUv;\n        void main() {\n            vUv = uv;\n            gl_Position = vec4(position, 0.0, 1.0);\n        }\n    `;const frag=/* glsl */`\n        precision highp float;\n\n        uniform float iTime;\n        uniform vec3 iResolution;\n        uniform float hue;\n        uniform float hover;\n        uniform float rot;\n        uniform float hoverIntensity;\n        varying vec2 vUv;\n\n        vec3 rgb2yiq(vec3 c) {\n            float y = dot(c, vec3(0.299, 0.587, 0.114));\n            float i = dot(c, vec3(0.596, -0.274, -0.322));\n            float q = dot(c, vec3(0.211, -0.523, 0.312));\n            return vec3(y, i, q);\n        }\n        \n        vec3 yiq2rgb(vec3 c) {\n            float r = c.x + 0.956 * c.y + 0.621 * c.z;\n            float g = c.x - 0.272 * c.y - 0.647 * c.z;\n            float b = c.x - 1.106 * c.y + 1.703 * c.z;\n            return vec3(r, g, b);\n        }\n        \n        vec3 adjustHue(vec3 color, float hueDeg) {\n            float hueRad = hueDeg * 3.14159265 / 180.0;\n            vec3 yiq = rgb2yiq(color);\n            float cosA = cos(hueRad);\n            float sinA = sin(hueRad);\n            float i = yiq.y * cosA - yiq.z * sinA;\n            float q = yiq.y * sinA + yiq.z * cosA;\n            yiq.y = i;\n            yiq.z = q;\n            return yiq2rgb(yiq);\n        }\n\n        vec3 hash33(vec3 p3) {\n            p3 = fract(p3 * vec3(0.1031, 0.11369, 0.13787));\n            p3 += dot(p3, p3.yxz + 19.19);\n            return -1.0 + 2.0 * fract(vec3(\n                p3.x + p3.y,\n                p3.x + p3.z,\n                p3.y + p3.z\n            ) * p3.zyx);\n        }\n\n        float snoise3(vec3 p) {\n            const float K1 = 0.333333333;\n            const float K2 = 0.166666667;\n            vec3 i = floor(p + (p.x + p.y + p.z) * K1);\n            vec3 d0 = p - (i - (i.x + i.y + i.z) * K2);\n            vec3 e = step(vec3(0.0), d0 - d0.yzx);\n            vec3 i1 = e * (1.0 - e.zxy);\n            vec3 i2 = 1.0 - e.zxy * (1.0 - e);\n            vec3 d1 = d0 - (i1 - K2);\n            vec3 d2 = d0 - (i2 - K1);\n            vec3 d3 = d0 - 0.5;\n            vec4 h = max(0.6 - vec4(\n                dot(d0, d0),\n                dot(d1, d1),\n                dot(d2, d2),\n                dot(d3, d3)\n            ), 0.0);\n            vec4 n = h * h * h * h * vec4(\n                dot(d0, hash33(i)),\n                dot(d1, hash33(i + i1)),\n                dot(d2, hash33(i + i2)),\n                dot(d3, hash33(i + 1.0))\n            );\n            return dot(vec4(31.316), n);\n        }\n\n        vec4 extractAlpha(vec3 colorIn) {\n            float a = max(max(colorIn.r, colorIn.g), colorIn.b);\n            return vec4(colorIn.rgb / (a + 1e-5), a);\n        }\n\n        const vec3 baseColor1 = vec3(0.611765, 0.262745, 0.996078);\n        const vec3 baseColor2 = vec3(0.298039, 0.760784, 0.913725);\n        const vec3 baseColor3 = vec3(0.062745, 0.078431, 0.600000);\n        const float innerRadius = 0.6;\n        const float noiseScale = 0.65;\n\n        float light1(float intensity, float attenuation, float dist) {\n            return intensity / (1.0 + dist * attenuation);\n        }\n        float light2(float intensity, float attenuation, float dist) {\n            return intensity / (1.0 + dist * dist * attenuation);\n        }\n\n        vec4 draw(vec2 uv) {\n            vec3 color1 = adjustHue(baseColor1, hue);\n            vec3 color2 = adjustHue(baseColor2, hue);\n            vec3 color3 = adjustHue(baseColor3, hue);\n            \n            float ang = atan(uv.y, uv.x);\n            float len = length(uv);\n            float invLen = len > 0.0 ? 1.0 / len : 0.0;\n            \n            float n0 = snoise3(vec3(uv * noiseScale, iTime * 0.5)) * 0.5 + 0.5;\n            float r0 = mix(mix(innerRadius, 1.0, 0.4), mix(innerRadius, 1.0, 0.6), n0);\n            float d0 = distance(uv, (r0 * invLen) * uv);\n            float v0 = light1(1.0, 10.0, d0);\n            v0 *= smoothstep(r0 * 1.05, r0, len);\n            float cl = cos(ang + iTime * 2.0) * 0.5 + 0.5;\n            \n            float a = iTime * -1.0;\n            vec2 pos = vec2(cos(a), sin(a)) * r0;\n            float d = distance(uv, pos);\n            float v1 = light2(1.5, 5.0, d);\n            v1 *= light1(1.0, 50.0, d0);\n            \n            float v2 = smoothstep(1.0, mix(innerRadius, 1.0, n0 * 0.5), len);\n            float v3 = smoothstep(innerRadius, mix(innerRadius, 1.0, 0.5), len);\n            \n            vec3 col = mix(color1, color2, cl);\n            col = mix(color3, col, v0);\n            col = (col + v1) * v2 * v3;\n            col = clamp(col, 0.0, 1.0);\n            \n            return extractAlpha(col);\n        }\n\n        vec4 mainImage(vec2 fragCoord) {\n            vec2 center = iResolution.xy * 0.5;\n            float size = min(iResolution.x, iResolution.y);\n            vec2 uv = (fragCoord - center) / size * 2.0;\n            \n            float angle = rot;\n            float s = sin(angle);\n            float c = cos(angle);\n            uv = vec2(c * uv.x - s * uv.y, s * uv.x + c * uv.y);\n            \n            uv.x += hover * hoverIntensity * 0.1 * sin(uv.y * 10.0 + iTime);\n            uv.y += hover * hoverIntensity * 0.1 * sin(uv.x * 10.0 + iTime);\n            \n            return draw(uv);\n        }\n\n        void main() {\n            vec2 fragCoord = vUv * iResolution.xy;\n            vec4 col = mainImage(fragCoord);\n            gl_FragColor = vec4(col.rgb * col.a, col.a);\n        }\n    `;// Custom WebGL utilities to replace OGL\nconst createShader=(gl,type,source)=>{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 createProgram=(gl,vertexShader,fragmentShader)=>{const program=gl.createProgram();if(!program)return null;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));gl.deleteProgram(program);return null;}return program;};useEffect(()=>{if(isStatic)return;const container=ctnDom.current;if(!container||typeof window===\"undefined\")return;let cleanup=null;const initWebGL=()=>{try{const canvas=document.createElement(\"canvas\");const gl=canvas.getContext(\"webgl\",{alpha:true,premultipliedAlpha:false});if(!gl){console.error(\"WebGL not supported\");return;}gl.clearColor(0,0,0,0);container.appendChild(canvas);// Create shaders\nconst vertexShader=createShader(gl,gl.VERTEX_SHADER,vert);const fragmentShader=createShader(gl,gl.FRAGMENT_SHADER,frag);if(!vertexShader||!fragmentShader)return;// Create program\nconst program=createProgram(gl,vertexShader,fragmentShader);if(!program)return;// Create triangle geometry\nconst positions=new Float32Array([-1,-1,3,-1,-1,3]);const uvs=new Float32Array([0,0,2,0,0,2]);const positionBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.bufferData(gl.ARRAY_BUFFER,positions,gl.STATIC_DRAW);const uvBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,uvBuffer);gl.bufferData(gl.ARRAY_BUFFER,uvs,gl.STATIC_DRAW);// Get attribute and uniform locations\nconst positionLocation=gl.getAttribLocation(program,\"position\");const uvLocation=gl.getAttribLocation(program,\"uv\");const iTimeLocation=gl.getUniformLocation(program,\"iTime\");const iResolutionLocation=gl.getUniformLocation(program,\"iResolution\");const hueLocation=gl.getUniformLocation(program,\"hue\");const hoverLocation=gl.getUniformLocation(program,\"hover\");const rotLocation=gl.getUniformLocation(program,\"rot\");const hoverIntensityLocation=gl.getUniformLocation(program,\"hoverIntensity\");function resize(){if(!container)return;const dpr=window.devicePixelRatio||1;const width=container.clientWidth;const height=container.clientHeight;canvas.width=width*dpr;canvas.height=height*dpr;canvas.style.width=width+\"px\";canvas.style.height=height+\"px\";gl.viewport(0,0,canvas.width,canvas.height);}window.addEventListener(\"resize\",resize);resize();let targetHover=0;let currentHover=0;let lastTime=0;let currentRot=0;const rotationSpeed=.3;const handleMouseMove=e=>{const rect=container.getBoundingClientRect();const x=e.clientX-rect.left;const y=e.clientY-rect.top;const width=rect.width;const height=rect.height;const size=Math.min(width,height);const centerX=width/2;const centerY=height/2;const uvX=(x-centerX)/size*2;const uvY=(y-centerY)/size*2;if(Math.sqrt(uvX*uvX+uvY*uvY)<.8){targetHover=1;}else{targetHover=0;}};const handleMouseLeave=()=>{targetHover=0;};container.addEventListener(\"mousemove\",handleMouseMove);container.addEventListener(\"mouseleave\",handleMouseLeave);let rafId;const update=t=>{rafId=requestAnimationFrame(update);const dt=(t-lastTime)*.001;lastTime=t;const effectiveHover=targetHover;currentHover+=(effectiveHover-currentHover)*.1;if(rotateOnHover&&effectiveHover>.5){currentRot+=dt*rotationSpeed;}gl.clear(gl.COLOR_BUFFER_BIT);gl.useProgram(program);// Set uniforms\ngl.uniform1f(iTimeLocation,t*.001);gl.uniform3f(iResolutionLocation,canvas.width,canvas.height,canvas.width/canvas.height);gl.uniform1f(hueLocation,hue);gl.uniform1f(hoverLocation,currentHover);gl.uniform1f(rotLocation,currentRot);gl.uniform1f(hoverIntensityLocation,hoverIntensity);// Set attributes\ngl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.enableVertexAttribArray(positionLocation);gl.vertexAttribPointer(positionLocation,2,gl.FLOAT,false,0,0);gl.bindBuffer(gl.ARRAY_BUFFER,uvBuffer);gl.enableVertexAttribArray(uvLocation);gl.vertexAttribPointer(uvLocation,2,gl.FLOAT,false,0,0);// Draw\ngl.drawArrays(gl.TRIANGLES,0,3);};rafId=requestAnimationFrame(update);cleanup=()=>{cancelAnimationFrame(rafId);window.removeEventListener(\"resize\",resize);container.removeEventListener(\"mousemove\",handleMouseMove);container.removeEventListener(\"mouseleave\",handleMouseLeave);if(container.contains(canvas)){container.removeChild(canvas);}gl.getExtension(\"WEBGL_lose_context\")?.loseContext();};}catch(error){console.error(\"Failed to initialize WebGL:\",error);}};initWebGL();return()=>{if(cleanup)cleanup();};},[hue,hoverIntensity,rotateOnHover,isStatic,vert,frag]);if(isStatic){return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",background:\"radial-gradient(circle, rgba(156,67,254,0.8) 0%, rgba(76,194,233,0.6) 50%, rgba(16,20,153,0.4) 100%)\",borderRadius:\"50%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:\"white\",fontSize:\"14px\",fontWeight:\"500\"},children:\"Orb\"});}return /*#__PURE__*/_jsx(\"div\",{ref:ctnDom,style:{width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\"}});}addPropertyControls(Nova,{hue:{type:ControlType.Number,title:\"Hue\",defaultValue:0,min:0,max:360,step:1,unit:\"\\xb0\"},hoverIntensity:{type:ControlType.Number,title:\"Hover Intensity\",defaultValue:.2,min:0,max:2,step:.05},rotateOnHover:{type:ControlType.Boolean,title:\"Rotate on Hover\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Nova\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerSupportedLayoutHeight\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Orb_1.map"],"mappings":"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"}