export declare const fragmentShaderSource = " \n precision mediump float;\n\n uniform vec2 uResolution;\n uniform float uTime;\n uniform sampler2D uTextureCurrent; // Current image\n uniform sampler2D uTextureNext; // Next image\n uniform sampler2D uTexturePrevious; // Back image\n uniform vec2 uMouse; // Mouse position in normalized coordinates [0,1]\n uniform float uRadius; // Base radius of the reveal area\n uniform float uTimeRange; // Base radius of the reveal area\n\n // Fake noise function using sin()\n float noise(vec2 uv) {\n return fract(sin(dot(uv, vec2(12.9898, 78.233))) * 43758.5453);\n }\n\n void main() {\n vec2 uv = gl_FragCoord.xy / uResolution;\n\n // rotate Y\n uv.y = 1.0 - uv.y;\n \n // Make the radius oscillate over time\n float dynamicRadius = uRadius + sin(uTime * uTimeRange) * 0.005;\n\n // Compute distance from mouse position\n float dist = length(uv - uMouse);\n \n // Add randomness to create an irregular shape\n float randomOffset = noise(uv * 50.0) * 0.05;\n \n // Final \"cloudy\" mask with gaps\n float cloudMask = smoothstep(dynamicRadius + randomOffset, dynamicRadius * .28, dist);\n\n // Sample both textures\n vec4 currentColor = texture2D(uTextureCurrent, uv);\n vec4 nextColor = texture2D(uTextureNext, uv);\n vec4 previousColor = texture2D(uTexturePrevious, uv);\n\n // Blend images based on the distorted reveal mask\n vec4 finalColor = mix(currentColor, nextColor, cloudMask);\n\n if(uMouse.x <= 0.6 ){\n float mixValue = (0.6 - uMouse.x)/0.2;\n if(uMouse.x < 0.4) mixValue=1.0;\n vec4 mixture = mix(nextColor, previousColor,mixValue);\n finalColor = mix(currentColor, mixture, cloudMask);\n }\n gl_FragColor = finalColor;\n }\n\n";