{"version":3,"file":"ShaderFlow.C93KK2TE.mjs","names":["useMemo","useRef"],"sources":["https:/framerusercontent.com/modules/puzZ9fZBgJDlI0vwEifS/hHdh2FP3YD9xzLWsRHLn/ShaderFlow.js"],"sourcesContent":["// Request: remove rainbow channel separation, render monochrome/tintable wave (default white),\n// preserve existing wave motion/distortion behavior and existing numeric controls/background fallback colors.\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useMemo,useRef}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * Shader Flow\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export default function ShaderFlow(props){const{xScale=1,yScale=.5,distortion=.05,speed=.01,tintColor=\"#FFFFFF\"}=props;const tintColorRGB=useMemo(()=>{const color=tintColor.trim();if(color.startsWith(\"#\")){const hex=color.slice(1);if(hex.length===3){const r=Number.parseInt(hex[0]+hex[0],16)/255;const g=Number.parseInt(hex[1]+hex[1],16)/255;const b=Number.parseInt(hex[2]+hex[2],16)/255;return[r,g,b];}if(hex.length===6){const r=Number.parseInt(hex.slice(0,2),16)/255;const g=Number.parseInt(hex.slice(2,4),16)/255;const b=Number.parseInt(hex.slice(4,6),16)/255;return[r,g,b];}}const rgbMatch=color.match(/^rgba?\\(\\s*([+\\-]?\\d*\\.?\\d+)\\s*,\\s*([+\\-]?\\d*\\.?\\d+)\\s*,\\s*([+\\-]?\\d*\\.?\\d+)/);if(rgbMatch){const r=Math.min(255,Math.max(0,Number(rgbMatch[1])))/255;const g=Math.min(255,Math.max(0,Number(rgbMatch[2])))/255;const b=Math.min(255,Math.max(0,Number(rgbMatch[3])))/255;return[r,g,b];}return[1,1,1];},[tintColor]);const canvasRef=useRef(null);const propsRef=useRef({xScale,yScale,distortion,speed,tintColorRGB});useEffect(()=>{propsRef.current={xScale,yScale,distortion,speed,tintColorRGB};},[xScale,yScale,distortion,speed,tintColorRGB]);const sceneRef=useRef({gl:null,program:null,uniforms:{resolution:null,time:null,xScale:null,yScale:null,distortion:null,tintColor:null},animationId:null,timeValue:0});useEffect(()=>{if(typeof window===\"undefined\")return;if(!canvasRef.current)return;if(RenderTarget.current()===RenderTarget.thumbnail)return;const canvas=canvasRef.current;const{current:refs}=sceneRef;const gl=canvas.getContext(\"webgl\",{alpha:true,antialias:false,preserveDrawingBuffer:false});if(!gl)return;refs.gl=gl;const vertexShaderSource=`\n            attribute vec2 position;\n            void main() {\n                gl_Position = vec4(position, 0.0, 1.0);\n            }\n        `;const fragmentShaderSource=`\n            precision highp float;\n            uniform vec2 resolution;\n            uniform float time;\n            uniform float xScale;\n            uniform float yScale;\n            uniform float distortion;\n            uniform vec3 tintColor;\n\n            void main() {\n                vec2 p = (gl_FragCoord.xy * 2.0 - resolution) / min(resolution.x, resolution.y);\n                float d = length(p) * distortion;\n                float waveX = p.x * (1.0 + d);\n                float luminance = 0.05 / abs(p.y + sin((waveX + time) * xScale) * yScale);\n                vec3 color = luminance * tintColor;\n                gl_FragColor = vec4(color, 1.0);\n            }\n        `;const createShader=(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)){gl.deleteShader(shader);return null;}return shader;};const vertexShader=createShader(gl.VERTEX_SHADER,vertexShaderSource);const fragmentShader=createShader(gl.FRAGMENT_SHADER,fragmentShaderSource);if(!vertexShader||!fragmentShader)return;const program=gl.createProgram();if(!program)return;gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){return;}refs.program=program;gl.useProgram(program);const positions=new Float32Array([-1,-1,1,-1,-1,1,1,-1,-1,1,1,1]);const positionBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.bufferData(gl.ARRAY_BUFFER,positions,gl.STATIC_DRAW);const positionLocation=gl.getAttribLocation(program,\"position\");gl.enableVertexAttribArray(positionLocation);gl.vertexAttribPointer(positionLocation,2,gl.FLOAT,false,0,0);refs.uniforms.resolution=gl.getUniformLocation(program,\"resolution\");refs.uniforms.time=gl.getUniformLocation(program,\"time\");refs.uniforms.xScale=gl.getUniformLocation(program,\"xScale\");refs.uniforms.yScale=gl.getUniformLocation(program,\"yScale\");refs.uniforms.distortion=gl.getUniformLocation(program,\"distortion\");refs.uniforms.tintColor=gl.getUniformLocation(program,\"tintColor\");const handleResize=()=>{if(!canvas||!gl||!refs.uniforms.resolution)return;const width=canvas.clientWidth;const height=canvas.clientHeight;canvas.width=width*window.devicePixelRatio;canvas.height=height*window.devicePixelRatio;gl.viewport(0,0,canvas.width,canvas.height);gl.uniform2f(refs.uniforms.resolution,canvas.width,canvas.height);};const animate=()=>{if(!gl||!refs.program||!refs.uniforms.time)return;refs.timeValue+=propsRef.current.speed;gl.uniform1f(refs.uniforms.time,refs.timeValue);gl.uniform1f(refs.uniforms.xScale,propsRef.current.xScale);gl.uniform1f(refs.uniforms.yScale,propsRef.current.yScale);gl.uniform1f(refs.uniforms.distortion,propsRef.current.distortion);if(refs.uniforms.tintColor){gl.uniform3f(refs.uniforms.tintColor,propsRef.current.tintColorRGB[0],propsRef.current.tintColorRGB[1],propsRef.current.tintColorRGB[2]);}gl.drawArrays(gl.TRIANGLES,0,6);refs.animationId=requestAnimationFrame(animate);};handleResize();window.addEventListener(\"resize\",handleResize);animate();return()=>{if(refs.animationId)cancelAnimationFrame(refs.animationId);window.removeEventListener(\"resize\",handleResize);if(gl&&refs.program)gl.deleteProgram(refs.program);if(gl&&vertexShader)gl.deleteShader(vertexShader);if(gl&&fragmentShader)gl.deleteShader(fragmentShader);};},[]);if(RenderTarget.current()===RenderTarget.thumbnail){return /*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\",width:\"100%\",height:\"100%\",backgroundColor:\"#000000\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:\"#fff\",fontSize:14,fontFamily:\"sans-serif\"},children:\"Shader Flow\"});}return /*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",display:\"block\",backgroundColor:\"#000000\"}});}addPropertyControls(ShaderFlow,{xScale:{type:ControlType.Number,title:\"X Scale\",defaultValue:1,min:.1,max:5,step:.1},yScale:{type:ControlType.Number,title:\"Y Scale\",defaultValue:.5,min:.1,max:2,step:.1},distortion:{type:ControlType.Number,title:\"Distortion\",defaultValue:.05,min:0,max:.5,step:.01},speed:{type:ControlType.Number,title:\"Speed\",defaultValue:.01,min:.001,max:.1,step:.001},tintColor:{type:ControlType.Color,title:\"Tint\",defaultValue:\"#FFFFFF\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ShaderFlow\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"fixed\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ShaderFlow.map"],"mappings":"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"}