{"version":3,"file":"NoiseImage.CaO2Kh7l.mjs","names":["useRef","useMemo","useCallback"],"sources":["https:/framerusercontent.com/modules/dfJOjlObNH8gcHVFm3ln/1tHMrkR7M2jy9OKeWuMK/NoiseImage.js"],"sourcesContent":["// Image with adjustable noise effect - Improved version\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useMemo,useRef,useEffect,useCallback}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * Image with Noise Effect\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 300\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function NoiseImage(props){const{image={src:\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\",alt:\"Gradient 1 - Blue\"},noiseStrength=.2,style}=props;const canvasRef=useRef(null);const glContextRef=useRef(null);const programRef=useRef(null);const textureRef=useRef(null);const bufferRef=useRef(null);const imageRef=useRef(null);const lastImageSrc=useRef(\"\");const lastNoiseStrength=useRef(-1);const lastCanvasSize=useRef({width:0,height:0});const isImageLoaded=useRef(false);const contextLost=useRef(false);// Memoize shader sources to avoid recreation\nconst shaderSources=useMemo(()=>({vertex:`\n            attribute vec2 a_position;\n            attribute vec2 a_texCoord;\n            varying vec2 v_texCoord;\n            void main() {\n                gl_Position = vec4(a_position, 0, 1);\n                v_texCoord = a_texCoord;\n            }\n        `,fragment:`\n            precision mediump float;\n            varying vec2 v_texCoord;\n            uniform sampler2D u_image;\n            uniform float u_noiseStrength;\n            float rand(vec2 co) {\n                return fract(sin(dot(co.xy, vec2(12.9898,78.233))) * 43758.5453);\n            }\n            void main() {\n                vec4 color = texture2D(u_image, v_texCoord);\n                float nR = rand(v_texCoord + 0.1);\n                float nG = rand(v_texCoord + 0.2);\n                float nB = rand(v_texCoord + 0.3);\n                color.r += (nR - 0.5) * u_noiseStrength;\n                color.g += (nG - 0.5) * u_noiseStrength;\n                color.b += (nB - 0.5) * u_noiseStrength;\n                gl_FragColor = vec4(clamp(color.rgb, 0.0, 1.0), color.a);\n            }\n        `}),[]);// Initialize WebGL context and program once\nconst initWebGL=useCallback(()=>{const canvas=canvasRef.current;if(!canvas)return;// Reset context lost flag\ncontextLost.current=false;const gl=canvas.getContext(\"webgl\",{antialias:false,depth:false,stencil:false,alpha:false,preserveDrawingBuffer:false})||canvas.getContext(\"experimental-webgl\");if(!gl)return null;// Create and compile shaders\nconst createShader=(type,source)=>{const shader=gl.createShader(type);gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error(\"Shader error:\",gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}return shader;};const vs=createShader(gl.VERTEX_SHADER,shaderSources.vertex);const fs=createShader(gl.FRAGMENT_SHADER,shaderSources.fragment);if(!vs||!fs)return null;const program=gl.createProgram();gl.attachShader(program,vs);gl.attachShader(program,fs);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error(\"Program error:\",gl.getProgramInfoLog(program));return null;}// Create buffer once\nconst buffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]),gl.STATIC_DRAW);// Create texture once\nconst texture=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);// Store references\nglContextRef.current=gl;programRef.current=program;textureRef.current=texture;bufferRef.current=buffer;// Clean up shaders (they're linked into the program now)\ngl.deleteShader(vs);gl.deleteShader(fs);// If we have an image loaded, restore the texture\nif(imageRef.current){gl.bindTexture(gl.TEXTURE_2D,texture);gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,true);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,imageRef.current);// Update texture coordinates for current canvas size\nif(canvas){updateTextureCoordinates(gl,imageRef.current,canvas.clientWidth,canvas.clientHeight);}}return gl;},[shaderSources]);// Render function that only updates what's necessary\nconst render=useCallback(()=>{const canvas=canvasRef.current;const gl=glContextRef.current;const program=programRef.current;const texture=textureRef.current;const buffer=bufferRef.current;const img=imageRef.current;if(!canvas||!gl||!program||!texture||!buffer||!img||contextLost.current)return;// Check if context is lost\nif(gl.isContextLost()){contextLost.current=true;return;}// Update canvas size if needed\nconst displayWidth=canvas.clientWidth;const displayHeight=canvas.clientHeight;const sizeChanged=canvas.width!==displayWidth||canvas.height!==displayHeight;if(sizeChanged){canvas.width=displayWidth;canvas.height=displayHeight;gl.viewport(0,0,displayWidth,displayHeight);lastCanvasSize.current={width:displayWidth,height:displayHeight};// Update texture coordinates only when size changes\nupdateTextureCoordinates(gl,img,displayWidth,displayHeight);}gl.useProgram(program);gl.bindBuffer(gl.ARRAY_BUFFER,buffer);// Set up attributes\nconst a_position=gl.getAttribLocation(program,\"a_position\");const a_texCoord=gl.getAttribLocation(program,\"a_texCoord\");gl.enableVertexAttribArray(a_position);gl.vertexAttribPointer(a_position,2,gl.FLOAT,false,16,0);gl.enableVertexAttribArray(a_texCoord);gl.vertexAttribPointer(a_texCoord,2,gl.FLOAT,false,16,8);// Bind texture and set uniforms\ngl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,texture);const u_image=gl.getUniformLocation(program,\"u_image\");const u_noiseStrength=gl.getUniformLocation(program,\"u_noiseStrength\");gl.uniform1i(u_image,0);gl.uniform1f(u_noiseStrength,noiseStrength);// Clear with the specified background color instead of black\ngl.clearColor(.133,.322,.149,1)// #225226 in RGB\n;gl.clear(gl.COLOR_BUFFER_BIT);gl.drawArrays(gl.TRIANGLE_STRIP,0,4);},[noiseStrength]);// Separate function to update texture coordinates\nconst updateTextureCoordinates=useCallback((gl,img,canvasWidth,canvasHeight)=>{if(!gl||!img||!bufferRef.current)return;const canvasAspect=canvasWidth/canvasHeight;const imageAspect=img.width/img.height;let texLeft=0,texRight=1,texTop=1,texBottom=0;if(imageAspect>canvasAspect){// Image is wider - crop horizontally\nconst scale=canvasAspect/imageAspect;const offset=(1-scale)/2;texLeft=offset;texRight=1-offset;}else{// Image is taller - crop vertically\nconst scale=imageAspect/canvasAspect;const offset=(1-scale)/2;texTop=1-offset;texBottom=offset;}// Update buffer with new texture coordinates\ngl.bindBuffer(gl.ARRAY_BUFFER,bufferRef.current);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,texLeft,texBottom,1,-1,texRight,texBottom,-1,1,texLeft,texTop,1,1,texRight,texTop]),gl.STATIC_DRAW);},[]);// Load image and update texture\nuseEffect(()=>{if(!image.src||lastImageSrc.current===image.src)return;const img=new Image;img.crossOrigin=\"anonymous\";img.onload=()=>{imageRef.current=img;lastImageSrc.current=image.src;isImageLoaded.current=true;// Initialize WebGL if not already done or if context was lost\nlet gl=glContextRef.current;if(!gl||contextLost.current){gl=initWebGL();}if(!gl)return;// Update texture with new image\ngl.bindTexture(gl.TEXTURE_2D,textureRef.current);gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,true);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,img);// Update texture coordinates for current canvas size\nconst canvas=canvasRef.current;if(canvas){updateTextureCoordinates(gl,img,canvas.clientWidth,canvas.clientHeight);}render();};img.onerror=()=>console.error(\"Failed to load image:\",image.src);img.src=image.src;},[image.src,initWebGL,render,updateTextureCoordinates]);// Re-render when noise strength changes\nuseEffect(()=>{if(lastNoiseStrength.current!==noiseStrength&&imageRef.current){lastNoiseStrength.current=noiseStrength;// Check if we need to reinitialize WebGL\nif(!glContextRef.current||contextLost.current){initWebGL();}render();}},[noiseStrength,render,initWebGL]);// Handle resize with throttling\nuseEffect(()=>{const canvas=canvasRef.current;if(!canvas)return;let resizeTimeout;const handleResize=()=>{clearTimeout(resizeTimeout);resizeTimeout=setTimeout(()=>{// Check if we need to reinitialize WebGL\nif(!glContextRef.current||contextLost.current){initWebGL();}if(imageRef.current)render();},16)// ~60fps throttling\n;};const resizeObserver=new ResizeObserver(handleResize);resizeObserver.observe(canvas);return()=>{resizeObserver.disconnect();clearTimeout(resizeTimeout);};},[render,initWebGL]);// Handle WebGL context loss and restoration\nuseEffect(()=>{const canvas=canvasRef.current;if(!canvas)return;const handleContextLost=event=>{event.preventDefault();contextLost.current=true;console.log(\"WebGL context lost\");};const handleContextRestored=()=>{console.log(\"WebGL context restored\");contextLost.current=false;// Clear references so they get recreated\nglContextRef.current=null;programRef.current=null;textureRef.current=null;bufferRef.current=null;// Reinitialize WebGL\nconst gl=initWebGL();if(gl&&imageRef.current){render();}};canvas.addEventListener(\"webglcontextlost\",handleContextLost);canvas.addEventListener(\"webglcontextrestored\",handleContextRestored);return()=>{canvas.removeEventListener(\"webglcontextlost\",handleContextLost);canvas.removeEventListener(\"webglcontextrestored\",handleContextRestored);};},[initWebGL,render]);// Cleanup\nuseEffect(()=>{return()=>{const gl=glContextRef.current;if(gl&&!gl.isContextLost()){if(textureRef.current)gl.deleteTexture(textureRef.current);if(bufferRef.current)gl.deleteBuffer(bufferRef.current);if(programRef.current)gl.deleteProgram(programRef.current);}};},[]);return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\",backgroundColor:\"#225226\",...style},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{width:\"100%\",height:\"100%\",display:\"block\",backgroundColor:\"#225226\"},\"aria-label\":image.alt||\"Image with noise\"})});}addPropertyControls(NoiseImage,{image:{type:ControlType.ResponsiveImage,title:\"Image\"},noiseStrength:{type:ControlType.Number,title:\"Noise Strength\",min:0,max:1,step:.01,defaultValue:.2,unit:\"\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"NoiseImage\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"300\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"400\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./NoiseImage.map"],"mappings":"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"}