{"version":3,"file":"GlitchImage.B3iG9R-m.mjs","names":["useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/cRaj9yJAx0emdM0NWICe/Y2fiCRwlPa8E5t8LWRHh/GlitchImage.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{useRef,useEffect,useCallback}from\"react\";// --- GLSL Shaders (raw strings for WebGL) ---\nconst VERT=`\nattribute vec2 position;\nvarying vec2 vUv;\nvoid main() {\n  vUv = position * 0.5 + 0.5;\n  vUv.y = 1.0 - vUv.y;\n  gl_Position = vec4(position, 0.0, 1.0);\n}\n`;const FRAG=`\nprecision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uMouse;\nuniform float uHover;\nuniform float uTime;\nuniform vec2 uResolution;\nuniform vec2 uImageResolution;\nuniform float uWaveIntensity;\nuniform float uGlitchIntensity;\nuniform float uRgbShift;\nuniform float uScanlineIntensity;\nuniform float uFieldRadius;\nuniform float uPixelSize;\nuniform float uPixelIntensity;\nuniform float uWaveDirection;\nuniform float uGlitchMode;\nvarying vec2 vUv;\n\nvec2 coverUv(vec2 uv, vec2 canvasSize, vec2 textureSize) {\n  float canvasAspect = canvasSize.x / canvasSize.y;\n  float textureAspect = textureSize.x / textureSize.y;\n  \n  vec2 scale;\n  if (canvasAspect > textureAspect) {\n    // Canvas is wider - fit to width, crop height\n    scale = vec2(1.0, textureAspect / canvasAspect);\n  } else {\n    // Canvas is taller - fit to height, crop width\n    scale = vec2(canvasAspect / textureAspect, 1.0);\n  }\n  \n  // Center the image\n  vec2 offset = (vec2(1.0) - scale) * 0.5;\n  return uv * scale + offset;\n}\n\nvoid main() {\n  vec2 uv = coverUv(vUv, uResolution, uImageResolution);\n\n  float dist = distance(uv, uMouse);\n  float proximity = smoothstep(uFieldRadius, 0.0, dist);\n  float effectStrength = proximity * uHover;\n\n  // Pixel distortion layer\n  vec2 pixelUv = uv;\n  if (uPixelIntensity > 0.0 && uPixelSize > 0.0) {\n    float pixelEffect = effectStrength * uPixelIntensity;\n    vec2 pixelGrid = floor(uv * uResolution / uPixelSize) * uPixelSize / uResolution;\n    pixelUv = mix(uv, pixelGrid + (uPixelSize / uResolution) * 0.5, pixelEffect);\n  }\n\n  // Wave displacement with direction control\n  // 0 = horizontal, 1 = vertical, 2 = diagonal\n  float wave = 0.0;\n  if (uWaveDirection < 0.5) {\n    // Horizontal waves\n    wave = sin(pixelUv.x * 30.0 + uTime * 3.0) * 0.012 * effectStrength * uWaveIntensity;\n    wave += sin(pixelUv.x * 80.0 - uTime * 5.0) * 0.006 * effectStrength * uWaveIntensity;\n  } else if (uWaveDirection < 1.5) {\n    // Vertical waves\n    wave = sin(pixelUv.y * 30.0 + uTime * 3.0) * 0.012 * effectStrength * uWaveIntensity;\n    wave += sin(pixelUv.y * 80.0 - uTime * 5.0) * 0.006 * effectStrength * uWaveIntensity;\n  } else {\n    // Diagonal waves\n    float diag = (pixelUv.x + pixelUv.y) * 0.5;\n    wave = sin(diag * 30.0 + uTime * 3.0) * 0.012 * effectStrength * uWaveIntensity;\n    wave += sin(diag * 80.0 - uTime * 5.0) * 0.006 * effectStrength * uWaveIntensity;\n  }\n\n  // Block glitch with mode control\n  // 0 = blocks, 1 = noise, 2 = chromatic\n  float blockGlitch = 0.0;\n  if (uGlitchMode < 0.5) {\n    // Block mode\n    float blockY = floor(pixelUv.y * 40.0 + uTime * 2.0);\n    float blockNoise = fract(sin(blockY * 43758.5453) * 1.0);\n    blockGlitch = step(0.92, blockNoise) * 0.035 * effectStrength * uGlitchIntensity;\n  } else if (uGlitchMode < 1.5) {\n    // Noise mode\n    float noiseX = fract(sin(dot(pixelUv * 100.0, vec2(12.9898, 78.233)) + uTime) * 43758.5453);\n    blockGlitch = (noiseX - 0.5) * 0.025 * effectStrength * uGlitchIntensity;\n  } else {\n    // Chromatic mode (more RGB separation)\n    float chromaY = floor(pixelUv.y * 20.0 + uTime * 3.0);\n    float chromaNoise = fract(sin(chromaY * 12345.6789) * 1.0);\n    blockGlitch = step(0.85, chromaNoise) * 0.05 * effectStrength * uGlitchIntensity;\n  }\n\n  // RGB split\n  float rgbShift = (0.012 + 0.025 * proximity) * effectStrength * uRgbShift;\n\n  // pixelUv already carries the cover transform from line 1 of main().\n  // Re-applying coverUv here squared the scale factor: harmless on a desktop\n  // canvas (aspect ~= the image, so scale ~= 1) but a severe over-crop on a\n  // tall phone, which is what deformed the image on mobile.\n  vec2 uvR = pixelUv + vec2(rgbShift + wave + blockGlitch, wave * 0.5);\n  vec2 uvG = pixelUv + vec2(-wave * 0.5 + blockGlitch, -rgbShift * 0.3);\n  vec2 uvB = pixelUv + vec2(-rgbShift + wave * 0.3 + blockGlitch, wave * 0.8);\n\n  float r = texture2D(uTexture, uvR).r;\n  float g = texture2D(uTexture, uvG).g;\n  float b = texture2D(uTexture, uvB).b;\n\n  vec3 color = vec3(r, g, b);\n\n  // Scanlines\n  float scanline = sin(pixelUv.y * uResolution.y * 1.5) * 0.04 * effectStrength * uScanlineIntensity;\n  color -= scanline;\n\n  // Flicker\n  float flicker = 1.0 + sin(uTime * 20.0) * 0.02 * effectStrength;\n  color *= flicker;\n\n  gl_FragColor = vec4(color, 1.0);\n}\n`;// --- Raw WebGL helper (no three.js dependency) ---\nfunction createShader(gl,type,src){const s=gl.createShader(type);gl.shaderSource(s,src);gl.compileShader(s);if(!gl.getShaderParameter(s,gl.COMPILE_STATUS)){console.error(gl.getShaderInfoLog(s));gl.deleteShader(s);return null;}return s;}function createProgram(gl,vs,fs){const v=createShader(gl,gl.VERTEX_SHADER,vs);const f=createShader(gl,gl.FRAGMENT_SHADER,fs);if(!v||!f)return null;const p=gl.createProgram();gl.attachShader(p,v);gl.attachShader(p,f);gl.linkProgram(p);if(!gl.getProgramParameter(p,gl.LINK_STATUS)){console.error(gl.getProgramInfoLog(p));return null;}gl.deleteShader(v);gl.deleteShader(f);return p;}/**\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 300\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function GlitchImage(props){const{image={src:\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\",alt:\"Gradient 1 - Blue\"},waveIntensity=1,glitchIntensity=1,rgbShift=1,scanlineIntensity=1,fieldRadius=.3,pixelSize=8,pixelIntensity=0,waveDirection=1,glitchMode=0,scrollReactive=true,style}=props;const canvasRef=useRef(null);const isStatic=useIsStaticRenderer();const stateRef=useRef({mouseX:.5,mouseY:.5,hover:0,hoverTarget:0,animId:0,program:null,gl:null,texture:null,buffer:null,isCleanedUp:false,uniforms:{},startTime:Date.now(),isReady:false,cleanup:null,imageWidth:0,imageHeight:0,lastTop:0,scrollEnergy:0});useEffect(()=>{if(isStatic)return;const canvas=canvasRef.current;if(!canvas||!image.src)return;let mounted=true;const st=stateRef.current;st.isCleanedUp=false;const initTimeout=setTimeout(()=>{if(!mounted||st.isCleanedUp)return;const gl=canvas.getContext(\"webgl\",{antialias:false,alpha:false,premultipliedAlpha:false,powerPreference:\"high-performance\"});if(!gl)return;const program=createProgram(gl,VERT,FRAG);if(!program)return;st.gl=gl;st.program=program;st.startTime=Date.now();const buf=gl.createBuffer();st.buffer=buf;gl.bindBuffer(gl.ARRAY_BUFFER,buf);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,1,1]),gl.STATIC_DRAW);const posLoc=gl.getAttribLocation(program,\"position\");gl.enableVertexAttribArray(posLoc);gl.vertexAttribPointer(posLoc,2,gl.FLOAT,false,0,0);gl.useProgram(program);st.uniforms={uTexture:gl.getUniformLocation(program,\"uTexture\"),uMouse:gl.getUniformLocation(program,\"uMouse\"),uHover:gl.getUniformLocation(program,\"uHover\"),uTime:gl.getUniformLocation(program,\"uTime\"),uResolution:gl.getUniformLocation(program,\"uResolution\"),uImageResolution:gl.getUniformLocation(program,\"uImageResolution\"),uWaveIntensity:gl.getUniformLocation(program,\"uWaveIntensity\"),uGlitchIntensity:gl.getUniformLocation(program,\"uGlitchIntensity\"),uRgbShift:gl.getUniformLocation(program,\"uRgbShift\"),uScanlineIntensity:gl.getUniformLocation(program,\"uScanlineIntensity\"),uFieldRadius:gl.getUniformLocation(program,\"uFieldRadius\"),uPixelSize:gl.getUniformLocation(program,\"uPixelSize\"),uPixelIntensity:gl.getUniformLocation(program,\"uPixelIntensity\"),uWaveDirection:gl.getUniformLocation(program,\"uWaveDirection\"),uGlitchMode:gl.getUniformLocation(program,\"uGlitchMode\")};const tex=gl.createTexture();st.texture=tex;gl.bindTexture(gl.TEXTURE_2D,tex);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,1,1,0,gl.RGBA,gl.UNSIGNED_BYTE,new Uint8Array([0,0,0,255]));const img=new Image;img.crossOrigin=\"anonymous\";img.onload=()=>{if(st.isCleanedUp||!mounted)return;// Use naturalWidth/naturalHeight — `img.width`/`img.height`\n// are layout dimensions and return 0 for off-DOM Images,\n// which would make coverUv a no-op and squash the image.\nconst w=img.naturalWidth||img.width||1;const h=img.naturalHeight||img.height||1;st.imageWidth=w;st.imageHeight=h;gl.bindTexture(gl.TEXTURE_2D,tex);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,img);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);st.isReady=true;};img.onerror=()=>{console.error(\"Failed to load image:\",image.src);};img.src=image.src;const resize=()=>{if(st.isCleanedUp||!canvas||!mounted)return;const rect=canvas.getBoundingClientRect();const dpr=Math.min(window.devicePixelRatio||1,2);canvas.width=Math.max(1,rect.width*dpr);canvas.height=Math.max(1,rect.height*dpr);gl.viewport(0,0,canvas.width,canvas.height);};resize();const ro=new ResizeObserver(resize);ro.observe(canvas);// Touch devices never fire hover, so drive the same effect from\n// scrolling instead. Desktop keeps the pointer path untouched.\nconst coarsePointer=typeof window!==\"undefined\"&&typeof window.matchMedia===\"function\"&&window.matchMedia(\"(hover: none)\").matches;const scrollDriven=scrollReactive&&coarsePointer;const render=()=>{if(st.isCleanedUp||!st.gl||!st.program||!mounted)return;const u=st.uniforms;const elapsed=(Date.now()-st.startTime)/1e3;if(scrollDriven){// Measure the element, not window.scrollY: these pages use\n// Smooth Scroll, which can move content without moving the\n// window. Energy builds while scrolling and decays when it\n// stops, so the glitch pulses with the motion.\nconst top=canvas.getBoundingClientRect().top;const delta=Math.abs(top-st.lastTop);st.lastTop=top;st.scrollEnergy=Math.min(1,st.scrollEnergy*.9+delta/55);st.hoverTarget=st.scrollEnergy;st.mouseX=.5;st.mouseY=.5;}st.hover+=(st.hoverTarget-st.hover)*.08;gl.uniform1i(u.uTexture,0);gl.uniform2f(u.uMouse,st.mouseX,st.mouseY);gl.uniform1f(u.uHover,st.hover);gl.uniform1f(u.uTime,elapsed);gl.uniform2f(u.uResolution,canvas.width,canvas.height);// Fall back to canvas dimensions only if image truly hasn't\n// loaded yet (both natural dims 0). Once loaded we use the\n// real source dimensions so the cover math works on mobile.\ngl.uniform2f(u.uImageResolution,st.imageWidth||canvas.width,st.imageHeight||canvas.height);gl.uniform1f(u.uWaveIntensity,waveIntensity);gl.uniform1f(u.uGlitchIntensity,glitchIntensity);gl.uniform1f(u.uRgbShift,rgbShift);gl.uniform1f(u.uScanlineIntensity,scanlineIntensity);gl.uniform1f(u.uFieldRadius,fieldRadius);gl.uniform1f(u.uPixelSize,pixelSize);gl.uniform1f(u.uPixelIntensity,pixelIntensity);gl.uniform1f(u.uWaveDirection,waveDirection);gl.uniform1f(u.uGlitchMode,glitchMode);gl.drawArrays(gl.TRIANGLE_STRIP,0,4);st.animId=requestAnimationFrame(render);};st.lastTop=canvas.getBoundingClientRect().top;render();st.cleanup=()=>{if(st.animId)cancelAnimationFrame(st.animId);ro.disconnect();if(gl&&st.buffer)gl.deleteBuffer(st.buffer);if(gl&&st.texture)gl.deleteTexture(st.texture);if(gl&&st.program)gl.deleteProgram(st.program);st.buffer=null;st.texture=null;st.program=null;st.gl=null;};},0);return()=>{mounted=false;st.isCleanedUp=true;clearTimeout(initTimeout);if(st.cleanup)st.cleanup();};},[image.src,waveIntensity,glitchIntensity,rgbShift,scanlineIntensity,fieldRadius,pixelSize,pixelIntensity,waveDirection,glitchMode,scrollReactive,isStatic]);const onMouseMove=useCallback(e=>{if(isStatic)return;const rect=canvasRef.current?.getBoundingClientRect();if(!rect)return;stateRef.current.mouseX=(e.clientX-rect.left)/rect.width;stateRef.current.mouseY=(e.clientY-rect.top)/rect.height;},[isStatic]);const onMouseEnter=useCallback(()=>{if(isStatic)return;stateRef.current.hoverTarget=1;},[isStatic]);const onMouseLeave=useCallback(()=>{if(isStatic)return;stateRef.current.hoverTarget=0;},[isStatic]);if(!image.src){return /*#__PURE__*/_jsx(\"div\",{style:{...style,width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",background:\"#111\",color:\"#666\",fontFamily:\"Inter, sans-serif\",fontSize:14},children:\"Add an image\"});}if(isStatic){return /*#__PURE__*/_jsx(\"div\",{style:{...style,width:\"100%\",height:\"100%\",backgroundImage:`url(${image.src})`,backgroundSize:\"cover\",backgroundPosition:\"center\"}});}return /*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{...style,width:\"100%\",height:\"100%\",display:\"block\"},onMouseMove:onMouseMove,onMouseEnter:onMouseEnter,onMouseLeave:onMouseLeave});}addPropertyControls(GlitchImage,{image:{type:ControlType.ResponsiveImage,title:\"Image\"},fieldRadius:{type:ControlType.Number,title:\"Field Radius\",defaultValue:.3,min:.05,max:1,step:.05},waveDirection:{type:ControlType.Enum,title:\"Wave Direction\",options:[0,1,2],optionTitles:[\"Horizontal\",\"Vertical\",\"Diagonal\"],defaultValue:1,displaySegmentedControl:true},glitchMode:{type:ControlType.Enum,title:\"Glitch Mode\",options:[0,1,2],optionTitles:[\"Blocks\",\"Noise\",\"Chromatic\"],defaultValue:0,displaySegmentedControl:true},pixelSize:{type:ControlType.Number,title:\"Pixel Size\",defaultValue:8,min:2,max:32,step:1},pixelIntensity:{type:ControlType.Number,title:\"Pixel Distortion\",defaultValue:0,min:0,max:1,step:.05},waveIntensity:{type:ControlType.Number,title:\"Wave\",defaultValue:1,min:0,max:3,step:.1},glitchIntensity:{type:ControlType.Number,title:\"Glitch\",defaultValue:1,min:0,max:3,step:.1},rgbShift:{type:ControlType.Number,title:\"RGB Shift\",defaultValue:1,min:0,max:3,step:.1},scanlineIntensity:{type:ControlType.Number,title:\"Scanlines\",defaultValue:1,min:0,max:3,step:.1},scrollReactive:{type:ControlType.Boolean,title:\"Scroll Glitch\",description:\"On touch devices, drive the distortion from scrolling since there is no hover.\",defaultValue:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"GlitchImage\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"300\",\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicWidth\":\"400\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./GlitchImage.map"],"mappings":"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"}