{"version":3,"file":"InteractiveDistortion.BjvSFle8.mjs","names":["useRef","vertexShaderSource","useState","useRef","useMemo","containerSize"],"sources":["https:/framerusercontent.com/modules/ieMf3vTzSHyZw7WKWt7K/q4YGbSVE7aHiBjX2TkWc/WebGL2Renderer.js","https:/framerusercontent.com/modules/nzujrEwVa3NDLifWxDuY/tg6yMi1cRpvXshHPiN7B/BackgroundCover.js","https:/framerusercontent.com/modules/yKtFVaeeB34aNGglmqj6/IHwgyGNXKt0EDTxuJTzo/InteractiveDistortion.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";/**\n * WebGL2Renderer - Advanced native WebGL2 Renderer component\n *\n * PROPRIETARY AND CONFIDENTIAL\n *\n * Copyright (c) 2025 Fugu 4D Agency. All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains the property\n * of Fugu 4D Agency. The intellectual and technical concepts contained\n * herein are proprietary to Fugu 4D Agency and may be covered by patents,\n * patents in process, and are protected by trade secret or copyright law.\n *\n * Dissemination of this information or reproduction of this material is strictly\n * forbidden unless prior written permission is obtained from Fugu 4D Agency.\n *\n * Unauthorized copying of this file, via any medium is strictly prohibited.\n *\n * THIS SOFTWARE IS PROVIDED \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n *//**\n * @framerDisableUnlink\n */export default function WebGL2Renderer({fragmentShaders,vertexShaderSource,onInit,onRender,onResize,onCleanup,bgColor=\"#000\"}){const canvasRef=useRef(null);const contextRef=useRef(null);const programsRef=useRef({});const resourcesRef=useRef({})// Para almacenar recursos creados (texturas, buffers, etc.)\n;const vaoRef=useRef(null)// Para almacenar el Vertex Array Object\n;// Función para compilar un shader\nconst compileShader=(gl,source,type)=>{const shader=gl.createShader(type);gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error(\"Error al compilar shader:\",gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}return shader;};// Función para crear un programa de shader\nconst createProgram=(gl,vertexSource,fragmentSource)=>{const vertexShader=compileShader(gl,vertexSource,gl.VERTEX_SHADER);const fragmentShader=compileShader(gl,fragmentSource,gl.FRAGMENT_SHADER);if(!vertexShader||!fragmentShader)return null;const program=gl.createProgram();gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error(\"Error al enlazar programa:\",gl.getProgramInfoLog(program));return null;}return program;};// Función para crear un cuadrado (geometría básica para fullscreen quad) usando VAO\nconst createQuad=gl=>{const vertices=new Float32Array([-1,-1,1,-1,-1,1,1,1]);// Crear y vincular VAO\nconst vao=gl.createVertexArray();gl.bindVertexArray(vao);// Crear y configurar VBO\nconst buffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);// Configurar atributo de posición\ngl.enableVertexAttribArray(0)// Asumimos que la posición es el atributo 0\n;gl.vertexAttribPointer(0,2,gl.FLOAT,false,0,0);// Desvinculamos el VAO para evitar modificaciones accidentales\ngl.bindVertexArray(null);gl.bindBuffer(gl.ARRAY_BUFFER,null);return{vao,buffer};};// Función para crear un framebuffer con textura\nconst createFramebuffer=(gl,width,height,options={})=>{const{format=gl.RGBA8,filterMin=gl.LINEAR,filterMag=gl.LINEAR,type=gl.UNSIGNED_BYTE,depth=false,stencil=false}=options;// Crear textura de color\nconst texture=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,filterMin);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,filterMag);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.texStorage2D(gl.TEXTURE_2D,1,format,width,height)// Más eficiente en WebGL2\n;// Crear framebuffer\nconst framebuffer=gl.createFramebuffer();gl.bindFramebuffer(gl.FRAMEBUFFER,framebuffer);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,texture,0);// Añadir buffer de profundidad/stencil si se solicita\nlet depthStencilBuffer=null;if(depth||stencil){depthStencilBuffer=gl.createRenderbuffer();gl.bindRenderbuffer(gl.RENDERBUFFER,depthStencilBuffer);if(depth&&stencil){gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH24_STENCIL8,width,height);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_STENCIL_ATTACHMENT,gl.RENDERBUFFER,depthStencilBuffer);}else if(depth){gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT24,width,height);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,depthStencilBuffer);}else if(stencil){gl.renderbufferStorage(gl.RENDERBUFFER,gl.STENCIL_INDEX8,width,height);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.STENCIL_ATTACHMENT,gl.RENDERBUFFER,depthStencilBuffer);}gl.bindRenderbuffer(gl.RENDERBUFFER,null);}// Verificar estado\nconst status=gl.checkFramebufferStatus(gl.FRAMEBUFFER);if(status!==gl.FRAMEBUFFER_COMPLETE){console.error(\"Error creando framebuffer:\",status);}gl.bindFramebuffer(gl.FRAMEBUFFER,null);return{texture,framebuffer,depthStencilBuffer};};// Función para crear un buffer de transformación\nconst createTransformFeedback=(gl,program,varyings,usage=gl.STREAM_COPY)=>{// Configurar transform feedback varyings\ngl.transformFeedbackVaryings(program,varyings,gl.SEPARATE_ATTRIBS);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error(\"Error al enlazar programa con transform feedback:\",gl.getProgramInfoLog(program));return null;}// Crear transform feedback object\nconst transformFeedback=gl.createTransformFeedback();// Crear buffers para los varyings\nconst buffers=varyings.map(()=>{const buffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(0),usage);return buffer;});return{transformFeedback,buffers,program};};// Función para crear una textura 3D\nconst createTexture3D=(gl,width,height,depth,format=gl.RGBA8,data=null)=>{const texture=gl.createTexture();gl.bindTexture(gl.TEXTURE_3D,texture);gl.texParameteri(gl.TEXTURE_3D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_3D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_3D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_3D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_3D,gl.TEXTURE_WRAP_R,gl.CLAMP_TO_EDGE);gl.texStorage3D(gl.TEXTURE_3D,1,format,width,height,depth);if(data){gl.texSubImage3D(gl.TEXTURE_3D,0,0,0,0,width,height,depth,gl.RGBA,gl.UNSIGNED_BYTE,data// pixels\n);}gl.bindTexture(gl.TEXTURE_3D,null);return texture;};// Función para crear un Uniform Buffer Object (UBO)\nconst createUniformBuffer=(gl,program,blockName,data)=>{const blockIndex=gl.getUniformBlockIndex(program,blockName);if(blockIndex===gl.INVALID_INDEX){console.error(`Bloque uniforme '${blockName}' no encontrado en el programa`);return null;}const blockSize=gl.getActiveUniformBlockParameter(program,blockIndex,gl.UNIFORM_BLOCK_DATA_SIZE);const buffer=gl.createBuffer();gl.bindBuffer(gl.UNIFORM_BUFFER,buffer);gl.bufferData(gl.UNIFORM_BUFFER,blockSize,gl.DYNAMIC_DRAW);if(data){gl.bufferSubData(gl.UNIFORM_BUFFER,0,data);}// Asignar buffer a un binding point\nconst bindingPoint=0// Puedes usar diferentes puntos para diferentes bloques\n;gl.uniformBlockBinding(program,blockIndex,bindingPoint);gl.bindBufferBase(gl.UNIFORM_BUFFER,bindingPoint,buffer);gl.bindBuffer(gl.UNIFORM_BUFFER,null);return{buffer,blockIndex,bindingPoint,blockSize};};// Efecto principal para inicializar WebGL2\nuseEffect(()=>{const canvas=canvasRef.current;canvas.width=window.innerWidth;canvas.height=window.innerHeight;// Obtener contexto WebGL2\nconst gl=canvas.getContext(\"webgl2\",{alpha:true,antialias:true,powerPreference:\"high-performance\",preserveDrawingBuffer:false});if(!gl){console.error(\"Tu navegador no soporta WebGL2\");return;}contextRef.current=gl;// Variables para tracking del ratón\nlet mouseX=0;let mouseY=0;let mouseDown=0;// Eventos del ratón\nconst handleMouseMove=e=>{const rect=canvas.getBoundingClientRect();mouseX=e.clientX-rect.left;mouseY=canvas.height-(e.clientY-rect.top)// Invertir Y para WebGL\n;};const handleMouseDown=()=>{mouseDown=1;};const handleMouseUp=()=>{mouseDown=0;};const handleTouchStart=e=>{e.preventDefault();const rect=canvas.getBoundingClientRect();mouseX=e.touches[0].clientX-rect.left;mouseY=canvas.height-(e.touches[0].clientY-rect.top);mouseDown=1;};const handleTouchMove=e=>{e.preventDefault();const rect=canvas.getBoundingClientRect();mouseX=e.touches[0].clientX-rect.left;mouseY=canvas.height-(e.touches[0].clientY-rect.top);};const handleTouchEnd=()=>{mouseDown=0;};// Agregar eventos de mouse y touch\ncanvas.addEventListener(\"mousemove\",handleMouseMove);canvas.addEventListener(\"mousedown\",handleMouseDown);canvas.addEventListener(\"mouseup\",handleMouseUp);canvas.addEventListener(\"touchstart\",handleTouchStart);canvas.addEventListener(\"touchmove\",handleTouchMove);canvas.addEventListener(\"touchend\",handleTouchEnd);// Crear los programas de shader\nfragmentShaders.forEach(({id,source})=>{const program=createProgram(gl,vertexShaderSource,source);programsRef.current[id]=program;});// Crear geometría básica (cuadrado)\nconst{vao,buffer}=createQuad(gl);vaoRef.current=vao;resourcesRef.current.quadBuffer=buffer;// Variables comunes\nlet width=canvas.width;let height=canvas.height;let animationFrameId;let frame=0;// Función de resize\nconst handleResize=()=>{canvas.width=window.innerWidth;canvas.height=window.innerHeight;width=canvas.width;height=canvas.height;gl.viewport(0,0,width,height);if(onResize){onResize(gl,width,height,resourcesRef.current);}};// Función de animación\nconst animate=()=>{frame++;if(onRender){onRender(gl,{programs:programsRef.current,resources:resourcesRef.current,vao:vaoRef.current,frame,width,height,mouse:{x:mouseX,y:mouseY,down:mouseDown}});}animationFrameId=requestAnimationFrame(animate);};// Inicializar recursos adicionales con funciones útiles de WebGL2\nif(onInit){onInit(gl,width,height,{createFramebuffer:(w,h,options)=>createFramebuffer(gl,w,h,options),createTransformFeedback:(program,varyings,usage)=>createTransformFeedback(gl,program,varyings,usage),createTexture3D:(w,h,d,format,data)=>createTexture3D(gl,w,h,d,format,data),createUniformBuffer:(program,blockName,data)=>createUniformBuffer(gl,program,blockName,data),programs:programsRef.current,resources:resourcesRef.current,vao:vaoRef.current});}// Escuchar eventos de resize\nwindow.addEventListener(\"resize\",handleResize);// Iniciar animación\nanimate();// Cleanup\nreturn()=>{cancelAnimationFrame(animationFrameId);window.removeEventListener(\"resize\",handleResize);canvas.removeEventListener(\"mousemove\",handleMouseMove);canvas.removeEventListener(\"mousedown\",handleMouseDown);canvas.removeEventListener(\"mouseup\",handleMouseUp);canvas.removeEventListener(\"touchstart\",handleTouchStart);canvas.removeEventListener(\"touchmove\",handleTouchMove);canvas.removeEventListener(\"touchend\",handleTouchEnd);// Liberar programas\nObject.values(programsRef.current).forEach(program=>{gl.deleteProgram(program);});// Liberar buffer del quad y VAO\ngl.deleteBuffer(resourcesRef.current.quadBuffer);gl.deleteVertexArray(vaoRef.current);// Ejecutar limpieza adicional\nif(onCleanup){onCleanup(gl,resourcesRef.current);}};},[fragmentShaders,vertexShaderSource,onInit,onRender,onResize,onCleanup]);return /*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{display:\"block\",width:\"100%\",height:\"100%\",backgroundColor:bgColor}});}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"WebGL2Renderer\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./WebGL2Renderer.map","// Welcome to Code in Framer\n// Get Started: https://www.framer.com/developers\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";/**\n * These annotations control how your component sizes\n * Learn more: https://www.framer.com/developers/components/auto-sizing\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerDisableUnlink\n */export default function BackgroundCover(props){return /*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\",width:\"100%\",height:\"100%\",backgroundImage:\"url(https://framer-plugins-assets.world-d8f.workers.dev/noiseEffect.jpg)\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",borderRadius:\"8px\",overflow:\"hidden\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{textAlign:\"center\",padding:\"20px\",color:\"#fff\",borderRadius:\"8px\",zIndex:\"10000\",backgroundColor:\"#1D1D1D\"},children:[/*#__PURE__*/_jsx(\"div\",{children:/*#__PURE__*/_jsx(Icon,{})}),/*#__PURE__*/_jsx(\"p\",{style:{fontSize:\"18px\",fontWeight:\"bold\",marginTop:\"20px\",marginBottom:\"0px\"},children:\"YOUR SHADER WILL BE SHOWN HERE\"}),/*#__PURE__*/_jsxs(\"p\",{style:{fontSize:\"14px\",marginTop:\"5px\",marginBottom:\"0px\",opacity:.7,display:\"flex\",flexDirection:\"column\"},children:[/*#__PURE__*/_jsx(\"span\",{children:\"Preview paused to save resources.\"}),/*#__PURE__*/_jsx(\"span\",{children:\"Hit Play on Framer to see the plugin in action.\"})]})]})});}const Icon=()=>{return /*#__PURE__*/_jsxs(\"svg\",{width:\"100\",height:\"100\",viewBox:\"0 0 100 100\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[/*#__PURE__*/_jsxs(\"g\",{\"clip-path\":\"url(#clip0_1074_969)\",children:[/*#__PURE__*/_jsx(\"mask\",{id:\"mask0_1074_969\",maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"100\",height:\"100\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M80.4688 0H19.5312C8.74444 0 0 8.74444 0 19.5312V80.4688C0 91.2556 8.74444 100 19.5312 100H80.4688C91.2556 100 100 91.2556 100 80.4688V19.5312C100 8.74444 91.2556 0 80.4688 0Z\",fill:\"white\"})}),/*#__PURE__*/_jsxs(\"g\",{mask:\"url(#mask0_1074_969)\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M80.4688 0H19.5312C8.74444 0 0 8.74444 0 19.5312V80.4688C0 91.2556 8.74444 100 19.5312 100H80.4688C91.2556 100 100 91.2556 100 80.4688V19.5312C100 8.74444 91.2556 0 80.4688 0Z\",fill:\"#F8F9FA\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M100 0H0V100.098H100V0Z\",fill:\"url(#paint0_linear_1074_969)\"}),/*#__PURE__*/_jsx(\"mask\",{id:\"mask1_1074_969\",maskUnits:\"userSpaceOnUse\",x:\"-11\",y:\"-11\",width:\"122\",height:\"122\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M110.547 -10.5469H-10.5469V110.547H110.547V-10.5469Z\",fill:\"white\"})}),/*#__PURE__*/_jsxs(\"g\",{mask:\"url(#mask1_1074_969)\",children:[/*#__PURE__*/_jsx(\"mask\",{id:\"mask2_1074_969\",maskUnits:\"userSpaceOnUse\",x:\"18\",y:\"37\",width:\"67\",height:\"26\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M84.771 37.4023H18.6294V62.6084H84.771V37.4023Z\",fill:\"white\"})}),/*#__PURE__*/_jsxs(\"g\",{mask:\"url(#mask2_1074_969)\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M19.1177 62.1201V37.8906H31.727C33.4692 37.8906 34.9233 38.2148 36.0894 38.8623C37.2554 39.5098 38.1382 40.416 38.7388 41.582C39.3394 42.748 39.6392 44.1309 39.6392 45.7324C39.6392 47.334 39.3267 48.7295 38.7036 49.918C38.0796 51.1074 37.1675 52.0312 35.9663 52.6904C34.7651 53.3496 33.2935 53.6797 31.5513 53.6797H24.3804V62.1211H19.1177V62.1201ZM24.3804 49.3691H30.8442C31.9507 49.3691 32.8042 49.0508 33.4048 48.415C34.0054 47.7793 34.3052 46.8965 34.3052 45.7656C34.3052 44.9883 34.1753 44.3408 33.9165 43.8232C33.6567 43.3057 33.2749 42.9053 32.769 42.6221C32.2622 42.3398 31.6216 42.1982 30.8442 42.1982H24.3804V49.3682V49.3691Z\",fill:\"white\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M39.5767 62.0117L48.2212 49.3701L40.3452 37.8906H46.7739L51.7895 45.5547H51.9663L56.9458 37.8906H62.9858L55.0737 49.3691L63.7974 62.1191H57.3687L51.5405 53.1475H51.3638L45.5708 62.1191H39.4956L39.5767 62.0117Z\",fill:\"white\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M66.7993 62.1201V37.8906H72.062V57.6348H84.2827V62.1201H66.7993Z\",fill:\"white\"})]}),/*#__PURE__*/_jsxs(\"g\",{opacity:\"0.1\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M50 -9.4035C58.0199 -9.4035 65.799 -7.8334 73.1217 -4.73505C80.1953 -1.74287 86.5482 2.53968 92.0037 7.99522C97.4593 13.4508 101.743 19.8036 104.734 26.8772C107.831 34.201 109.402 41.9801 109.402 49.999C109.402 58.018 107.832 65.798 104.734 73.1207C101.742 80.1943 97.4593 86.5472 92.0037 92.0027C86.5482 97.4583 80.1953 101.742 73.1217 104.733C65.799 107.83 58.0189 109.401 50 109.401C41.9811 109.401 34.201 107.831 26.8783 104.733C19.8047 101.741 13.4518 97.4583 7.99624 92.0027C2.5407 86.5472 -1.74287 80.1943 -4.73403 73.1207C-7.83136 65.798 -9.40247 58.018 -9.40247 49.999C-9.40247 41.9801 -7.83237 34.2 -4.73403 26.8772C-1.74186 19.8036 2.5407 13.4508 7.99624 7.99522C13.4518 2.53968 19.8047 -1.7439 26.8783 -4.73505C34.2021 -7.83237 41.9811 -9.4035 50 -9.4035ZM50 -9.78125C16.984 -9.78125 -9.78125 16.984 -9.78125 50C-9.78125 83.016 16.984 109.781 50 109.781C83.016 109.781 109.781 83.016 109.781 50C109.781 16.984 83.016 -9.78125 50 -9.78125Z\",fill:\"white\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M50 110.547C41.8269 110.547 33.8968 108.946 26.4321 105.789C19.2228 102.739 12.7474 98.374 7.18669 92.8133C1.626 87.2526 -2.73925 80.7782 -5.78859 73.5679C-8.94615 66.1022 -10.5469 58.1731 -10.5469 50C-10.5469 41.8269 -8.94615 33.8968 -5.78859 26.4321C-2.73925 19.2228 1.626 12.7474 7.18669 7.18669C12.7474 1.626 19.2218 -2.73925 26.4321 -5.78859C33.8968 -8.94615 41.8269 -10.5469 50 -10.5469C58.1731 -10.5469 66.1032 -8.94615 73.5679 -5.78859C80.7782 -2.73925 87.2526 1.626 92.8133 7.18669C98.373 12.7474 102.739 19.2218 105.789 26.4321C108.946 33.8968 110.547 41.8269 110.547 50C110.547 58.1731 108.946 66.1022 105.789 73.5679C102.739 80.7772 98.374 87.2526 92.8133 92.8133C87.2526 98.374 80.7782 102.739 73.5679 105.789C66.1032 108.946 58.1741 110.547 50 110.547ZM50 -8.63784C42.0831 -8.63784 34.4041 -7.08714 27.1764 -4.03065C20.1946 -1.07727 13.9234 3.15016 8.5373 8.53628C3.1522 13.9214 -1.07625 20.1926 -4.02963 27.1754C-7.08714 34.4041 -8.63683 42.0831 -8.63683 49.999C-8.63683 57.9148 -7.08612 65.5948 -4.02963 72.8226C-1.07625 79.8043 3.15118 86.0756 8.5373 91.4617C13.9234 96.8478 20.1937 101.075 27.1764 104.028C34.4041 107.086 42.0842 108.636 50 108.636C57.9158 108.636 65.5958 107.086 72.8236 104.028C79.8063 101.075 86.0766 96.8468 91.4627 91.4617C96.8488 86.0766 101.076 79.8054 104.029 72.8226C107.087 65.5938 108.637 57.9148 108.637 49.999C108.637 42.0831 107.087 34.4031 104.029 27.1754C101.076 20.1926 96.8478 13.9214 91.4627 8.53628C86.0776 3.15016 79.8063 -1.07727 72.8236 -4.03065C65.5958 -7.08816 57.9169 -8.63784 50 -8.63784Z\",fill:\"white\"})]}),/*#__PURE__*/_jsxs(\"g\",{opacity:\"0.2\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M50 1.93139C57.8995 1.93139 65.5602 3.2136 72.7685 5.74231C79.7176 8.18015 85.9541 11.6664 91.3055 16.1052C96.6365 20.5266 100.818 25.6687 103.735 31.3876C106.743 37.2852 108.269 43.5472 108.269 50.0001C108.269 56.4531 106.743 62.7141 103.735 68.6117C100.819 74.3316 96.6365 79.4738 91.3055 83.8941C85.9541 88.3328 79.7176 91.8192 72.7685 94.257C65.5602 96.7857 57.8995 98.0675 50 98.0675C42.1005 98.0675 34.4398 96.7857 27.2315 94.257C20.2824 91.8192 14.0459 88.3328 8.69451 83.8941C3.36353 79.4727 -0.817965 74.3306 -3.73561 68.6117C-6.74311 62.7141 -8.26828 56.4521 -8.26828 50.0001C-8.26828 43.5483 -6.74311 37.2862 -3.73561 31.3876C-0.818986 25.6677 3.36353 20.5266 8.69451 16.1052C14.0459 11.6664 20.2824 8.18015 27.2315 5.74231C34.4398 3.2136 42.1005 1.93139 50 1.93139ZM50 0.418457C16.984 0.418457 -9.78125 22.6173 -9.78125 50.0001C-9.78125 77.3829 16.984 99.5822 50 99.5822C83.016 99.5822 109.781 77.384 109.781 50.0001C109.781 22.6163 83.016 0.418457 50 0.418457Z\",fill:\"white\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M50 100.347C41.8433 100.347 33.9284 99.0216 26.4771 96.407C19.2728 93.8793 12.7994 90.2603 7.23976 85.648C1.66888 81.0275 -2.70658 75.6445 -5.76512 69.6468C-8.93798 63.4256 -10.5469 56.8155 -10.5469 50.0002C-10.5469 43.1848 -8.93798 36.5747 -5.76512 30.3525C-2.70658 24.3548 1.66888 18.9718 7.23976 14.3513C12.8005 9.74006 19.2728 6.12005 26.4771 3.59238C33.9284 0.977924 41.8433 -0.347168 50 -0.347168C58.1567 -0.347168 66.0716 0.977924 73.5229 3.59238C80.7272 6.12005 87.1995 9.73905 92.7603 14.3513C98.3311 18.9718 102.707 24.3559 105.765 30.3525C108.938 36.5737 110.547 43.1838 110.547 50.0002C110.547 56.8166 108.938 63.4256 105.765 69.6468C102.707 75.6445 98.3311 81.0275 92.7603 85.648C87.1995 90.2592 80.7272 93.8793 73.5229 96.407C66.0716 99.0216 58.1567 100.347 50 100.347ZM50 2.69707C42.1873 2.69707 34.6114 3.96499 27.4847 6.46511C20.6224 8.87232 14.4645 12.3136 9.18249 16.6942C3.93215 21.0493 -0.185028 26.1097 -3.05368 31.7358C-6.00604 37.5252 -7.50264 43.6698 -7.50264 50.0002C-7.50264 56.3306 -6.00604 62.4753 -3.05368 68.2646C-0.184008 73.8906 3.93215 78.951 9.18249 83.3061C14.4635 87.6867 20.6214 91.128 27.4847 93.5352C34.6114 96.0353 42.1873 97.3033 50 97.3033C57.8127 97.3033 65.3886 96.0353 72.5153 93.5352C79.3776 91.128 85.5355 87.6856 90.8175 83.3061C96.0679 78.9521 100.185 73.8906 103.054 68.2646C106.006 62.4753 107.503 56.3306 107.503 50.0002C107.503 43.6698 106.006 37.5252 103.054 31.7358C100.185 26.1097 96.0679 21.0493 90.8175 16.6942C85.5355 12.3136 79.3786 8.87232 72.5153 6.46511C65.3886 3.96499 57.8127 2.69707 50 2.69707Z\",fill:\"white\"})]}),/*#__PURE__*/_jsxs(\"g\",{opacity:\"0.5\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M50 16.9003C57.8853 16.9003 65.5285 17.813 72.7185 19.6117C79.6247 21.34 85.8143 23.8064 91.1156 26.9437C96.3322 30.0297 100.41 33.5997 103.236 37.5525C106.072 41.5206 107.511 45.7083 107.511 50C107.511 54.2918 106.072 58.4794 103.236 62.4475C100.41 66.4003 96.3322 69.9703 91.1156 73.0563C85.8143 76.1936 79.6236 78.66 72.7185 80.3883C65.5285 82.1881 57.8842 83.0997 50 83.0997C42.1158 83.0997 34.4715 82.1871 27.2815 80.3883C20.3753 78.66 14.1857 76.1936 8.88439 73.0563C3.66774 69.9703 -0.410637 66.4003 -3.23641 62.4475C-6.07341 58.4794 -7.5108 54.2918 -7.5108 50C-7.5108 45.7083 -6.07239 41.5206 -3.23641 37.5525C-0.410637 33.5997 3.66774 30.0297 8.88439 26.9437C14.1857 23.8064 20.3753 21.34 27.2815 19.6117C34.4715 17.8119 42.1158 16.9003 50 16.9003ZM50 14.6309C16.984 14.6309 -9.78125 30.4667 -9.78125 50C-9.78125 69.5334 16.984 85.3691 50 85.3691C83.016 85.3691 109.781 69.5344 109.781 50C109.781 30.4656 83.016 14.6309 50 14.6309Z\",fill:\"white\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M50 86.1338C33.8968 86.1338 18.746 82.4168 7.3388 75.6678C1.75667 72.3652 -2.63206 68.5105 -5.7059 64.2115C-8.91858 59.7197 -10.5469 54.938 -10.5469 50C-10.5469 45.062 -8.91858 40.2803 -5.7059 35.7874C-2.63308 31.4886 1.75667 27.6337 7.3388 24.3313C18.746 17.5822 33.8968 13.8652 50 13.8652C66.1032 13.8652 81.254 17.5822 92.6612 24.3313C98.2432 27.6337 102.632 31.4886 105.706 35.7874C108.918 40.2803 110.547 45.062 110.547 50C110.547 54.938 108.919 59.7197 105.706 64.2126C102.633 68.5114 98.2432 72.3663 92.6612 75.6689C81.254 82.4178 66.1032 86.1348 50 86.1348V86.1338ZM50 15.3966C17.4587 15.3966 -9.01557 30.9199 -9.01557 50C-9.01557 69.0801 17.4587 84.6034 50 84.6034C82.5413 84.6034 109.016 69.0812 109.016 50C109.016 30.9189 82.5413 15.3966 50 15.3966ZM50 83.8653C42.0525 83.8653 34.346 82.9456 27.0957 81.1305C20.1181 79.3848 13.8591 76.8898 8.49442 73.7149C3.18589 70.5736 -0.9711 66.9321 -3.85914 62.8916C-6.79007 58.7917 -8.27646 54.4541 -8.27646 49.999C-8.27646 45.5439 -6.79007 41.2063 -3.85914 37.1063C-0.9711 33.0658 3.18589 29.4243 8.49442 26.2831C13.8602 23.1092 20.1181 20.6143 27.0957 18.8675C34.346 17.0534 42.0525 16.1326 50 16.1326C57.9475 16.1326 65.654 17.0524 72.9043 18.8675C79.8819 20.6132 86.1399 23.1082 91.5056 26.2831C96.8141 29.4243 100.971 33.0658 103.859 37.1063C106.79 41.2063 108.276 45.5439 108.276 49.999C108.276 54.4541 106.79 58.7917 103.859 62.8916C100.971 66.9321 96.8141 70.5736 91.5056 73.7149C86.1399 76.8888 79.8819 79.3838 72.9043 81.1305C65.654 82.9445 57.9475 83.8653 50 83.8653ZM50 17.6659C42.1771 17.6659 34.5961 18.5704 27.4673 20.3549C20.6336 22.0648 14.5114 24.5037 9.27335 27.6031C4.14857 30.6351 0.148796 34.1326 -2.61471 37.9986C-5.35677 41.8341 -6.74617 45.8716 -6.74617 50.001C-6.74617 54.1305 -5.35574 58.168 -2.61471 62.0034C0.148796 65.8694 4.14857 69.367 9.27335 72.3989C14.5114 75.4983 20.6326 77.9361 27.4673 79.6472C34.5961 81.4316 42.1771 82.3361 50 82.3361C57.8229 82.3361 65.4039 81.4316 72.5327 79.6472C79.3674 77.9372 85.4886 75.4983 90.7267 72.3989C95.8515 69.367 99.8516 65.8694 102.614 62.0034C105.356 58.168 106.747 54.1305 106.747 50.001C106.747 45.8716 105.356 41.8341 102.614 37.9986C99.8516 34.1326 95.8515 30.6351 90.7267 27.6031C85.4886 24.5037 79.3674 22.0659 72.5337 20.3549C65.405 18.5704 57.8239 17.6659 50.001 17.6659H50Z\",fill:\"white\"})]})]})]})]}),/*#__PURE__*/_jsxs(\"defs\",{children:[/*#__PURE__*/_jsxs(\"linearGradient\",{id:\"paint0_linear_1074_969\",x1:\"90.8203\",y1:\"7.03126\",x2:\"2.97851\",y2:\"97.2168\",gradientUnits:\"userSpaceOnUse\",children:[/*#__PURE__*/_jsx(\"stop\",{\"stop-color\":\"#C2D425\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"0.528846\",\"stop-color\":\"#368C37\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"1\",\"stop-color\":\"#1C3627\"})]}),/*#__PURE__*/_jsx(\"clipPath\",{id:\"clip0_1074_969\",children:/*#__PURE__*/_jsx(\"rect\",{width:\"100\",height:\"100\",fill:\"white\"})})]})]});};\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"BackgroundCover\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BackgroundCover.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useState,useEffect,useRef,useMemo}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import WebGL2Renderer from\"https://framerusercontent.com/modules/ieMf3vTzSHyZw7WKWt7K/q4YGbSVE7aHiBjX2TkWc/WebGL2Renderer.js\";import BackgroundCover from\"https://framerusercontent.com/modules/nzujrEwVa3NDLifWxDuY/tg6yMi1cRpvXshHPiN7B/BackgroundCover.js\";/**\n * InteractiveDistortion - WebGL Interactive Distortion Effect with Video Support\n *\n * Based on original work by Yuriy Artyukh (Akella)\n * https://github.com/akella/DistortedPixels (MIT License)\n * Adapted for Framer by Fugu 4D\n *\n * © 2025 Fugu 4D Agency. All rights reserved.\n *\n * This component is provided for free use in Framer projects.\n * Please do not reuse, redistribute, or repurpose the source code\n * to create derivative components or for commercial use without permission.\n *\n * If you’re interested in licensing or collaboration, feel free to reach out.\n *\n * Have fun and build cool stuff.\n */// Presets originales para imágenes\nconst IMAGE_PRESETS={smoothDistortion:{grid:50,mouseInfluence:.25,strength:.11,relaxation:.9,distortionStrength:1},highDetail:{grid:607,mouseInfluence:.11,strength:.36,relaxation:.96,distortionStrength:1},pixelated:{grid:15,mouseInfluence:.13,strength:.15,relaxation:.9,distortionStrength:1}};// Presets optimizados para video (menor resolución de grid)\nconst VIDEO_PRESETS={smoothDistortion:{grid:30,mouseInfluence:.25,strength:.11,relaxation:.9,distortionStrength:1},highDetail:{grid:80,mouseInfluence:.11,strength:.36,relaxation:.96,distortionStrength:1},pixelated:{grid:12,mouseInfluence:.13,strength:.15,relaxation:.9,distortionStrength:1}};// Títulos para los presets en la UI\nconst PRESET_TITLES={smoothDistortion:\"Smooth Distortion\",highDetail:\"High Detail\",pixelated:\"Pixelated\",custom:\"Custom\"};// Vertex shader básico para WebGL2\nconst vertexShaderSource=`#version 300 es\n  in vec2 aPosition;\n  out vec2 vUv;\n  \n  void main() {\n    vUv = vec2((aPosition.x + 1.0) / 2.0, 1.0 - (aPosition.y + 1.0) / 2.0);\n    gl_Position = vec4(aPosition, 0.0, 1.0);\n  }\n`;// Fragment shader adaptado de Three.js para WebGL2\nconst fragmentShaderSource=`#version 300 es\n  precision highp float;\n  \n  in vec2 vUv;\n  out vec4 fragColor;\n  \n  uniform float uTime;\n  uniform sampler2D uTexture;\n  uniform sampler2D uDataTexture;\n  uniform vec4 uResolution; // width, height, imageAspectX, imageAspectY\n  uniform float uDistortionStrength;\n  \n  void main() {\n    // Ajustar UV para object-fit cover/contain (similar a Three.js resolution.zw)\n    vec2 newUV = (vUv - vec2(0.5)) * uResolution.zw + vec2(0.5);\n    \n    // Obtener el offset de distorsi\\xf3n de la data texture\n    vec4 offset = texture(uDataTexture, vUv);\n    \n    // Aplicar la distorsi\\xf3n desplazando las coordenadas UV\n    vec2 distortedUV = newUV - (uDistortionStrength * 0.02) * offset.rg;\n    \n    // Verificar l\\xedmites para evitar artefactos\n    if (distortedUV.x < 0.0 || distortedUV.x > 1.0 || distortedUV.y < 0.0 || distortedUV.y > 1.0) {\n      fragColor = vec4(0.0, 0.0, 0.0, 0.0);\n    } else {\n      fragColor = texture(uTexture, distortedUV);\n    }\n  }\n`;// Función clamp helper\nfunction clamp(number,min,max){return Math.max(min,Math.min(number,max));}// Monitor de rendimiento para ajuste automático\nclass PerformanceMonitor{update(){this.frameCount++;const now=performance.now();if(now-this.lastTime>=1e3){const currentFPS=this.frameCount;this.samples.push(currentFPS);if(this.samples.length>this.maxSamples){this.samples.shift();}// Calcular promedio de FPS\nthis.avgFPS=this.samples.reduce((a,b)=>a+b,0)/this.samples.length;this.frameCount=0;this.lastTime=now;}}shouldReduceQuality(){return this.avgFPS<25&&this.samples.length>=10;}shouldIncreaseQuality(){return this.avgFPS>50&&this.samples.length>=10;}constructor(){this.frameCount=0;this.lastTime=performance.now();this.avgFPS=60;this.samples=[];this.maxSamples=30;}}// Loading Spinner Component\nconst LoadingSpinner=({color=\"#ffffff\"})=>{return /*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",zIndex:20},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:\"40px\",height:\"40px\",border:`3px solid rgba(255, 255, 255, 0.2)`,borderTop:`3px solid ${color}`,borderRadius:\"50%\",animation:\"spin 1s linear infinite\"}}),/*#__PURE__*/_jsx(\"style\",{children:`\n                    @keyframes spin {\n                        0% { transform: rotate(0deg); }\n                        100% { transform: rotate(360deg); }\n                    }\n                `})]});};// Preset Inspector Component\nconst PresetInspector=({presetName,presetValues,mediaType})=>{if(!presetValues)return null;return /*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",bottom:\"10px\",left:\"10px\",backgroundColor:\"rgba(0, 0, 0, 0.7)\",padding:\"10px\",borderRadius:\"6px\",color:\"white\",fontSize:\"12px\",maxWidth:\"280px\",zIndex:10,fontFamily:\"Arial, sans-serif\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{marginBottom:\"8px\",borderBottom:\"1px solid rgba(255,255,255,0.3)\",paddingBottom:\"5px\"},children:/*#__PURE__*/_jsxs(\"strong\",{style:{color:\"#fff\"},children:[\"Preset values: \",presetName,\" (\",mediaType,\")\"]})}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"grid\",gridTemplateColumns:\"1fr 1fr\",gap:\"6px\",fontSize:\"11px\"},children:[/*#__PURE__*/_jsx(\"div\",{children:\"Grid:\"}),/*#__PURE__*/_jsx(\"div\",{children:presetValues.grid}),/*#__PURE__*/_jsx(\"div\",{children:\"Mouse Influence:\"}),/*#__PURE__*/_jsx(\"div\",{children:presetValues.mouseInfluence}),/*#__PURE__*/_jsx(\"div\",{children:\"Strength:\"}),/*#__PURE__*/_jsx(\"div\",{children:presetValues.strength}),/*#__PURE__*/_jsx(\"div\",{children:\"Relaxation:\"}),/*#__PURE__*/_jsx(\"div\",{children:presetValues.relaxation}),/*#__PURE__*/_jsx(\"div\",{children:\"Distortion Strength:\"}),/*#__PURE__*/_jsx(\"div\",{children:presetValues.distortionStrength})]})]});};/**\n * @framerDisableUnlink\n */export default function InteractiveDistortion(props){const isStaticRenderer=useIsStaticRenderer();const{preset=\"pixelated\",mediaType=\"video\",imageUrl,videoUrl,backgroundColor,objectFit=\"cover\",spinnerColor=\"#ffffff\",autoPlay=true,autoLoop=true,videoPerformanceMode=true,adaptiveQuality=true,grid=15,mouseInfluence=.12,strength=.15,relaxation=.9,distortionStrength=1,showPresetInfo=false,inspectPreset=\"pixelated\"}=props;// Estados para media\nconst[image,setImage]=useState(null);const[video,setVideo]=useState(null);const[isVideoPlaying,setIsVideoPlaying]=useState(false);const[imageDimensions,setImageDimensions]=useState({width:1,height:1});// Estados para loading\nconst[isLoading,setIsLoading]=useState(true);const[loadingError,setLoadingError]=useState(null);const[isWebGLReady,setIsWebGLReady]=useState(false);// Estados para contenedor\nconst containerRef=useRef(null);const[containerSize,setContainerSize]=useState({width:1,height:1});// Referencias para optimización\nconst videoRef=useRef(null);const performanceMonitorRef=useRef(new PerformanceMonitor);const videoUpdateCounterRef=useRef(0);const lastQualityAdjustmentRef=useRef(0);// Estado para la configuración efectiva basada en preset\nconst[effectiveConfig,setEffectiveConfig]=useState(()=>{if(preset!==\"custom\"){const presets=mediaType===\"video\"&&videoPerformanceMode?VIDEO_PRESETS:IMAGE_PRESETS;return presets[preset]||presets.pixelated;}return{grid,mouseInfluence,strength,relaxation,distortionStrength};});// Referencias para el mouse tracking\nconst mouseRef=useRef({x:0,y:0,prevX:0,prevY:0,vX:0,vY:0});// Actualizar configuración efectiva cuando cambian los props\nuseEffect(()=>{setIsWebGLReady(false)// Reset WebGL ready state when config changes\n;if(preset!==\"custom\"){const presets=mediaType===\"video\"&&videoPerformanceMode?VIDEO_PRESETS:IMAGE_PRESETS;setEffectiveConfig(presets[preset]||presets.pixelated);}else{// En modo custom usamos los valores de las props\nsetEffectiveConfig({grid,mouseInfluence,strength,relaxation,distortionStrength});}},[preset,mediaType,videoPerformanceMode,grid,mouseInfluence,strength,relaxation,distortionStrength]);// Observar el tamaño del contenedor\nuseEffect(()=>{if(!containerRef.current)return;const updateSize=()=>{const rect=containerRef.current.getBoundingClientRect();setContainerSize({width:rect.width,height:rect.height});};updateSize();const resizeObserver=new ResizeObserver(entries=>{if(entries.length>0){updateSize();}});resizeObserver.observe(containerRef.current);return()=>{resizeObserver.disconnect();};},[]);// Cargar imagen\nuseEffect(()=>{if(mediaType===\"image\"&&imageUrl){setIsLoading(true);setLoadingError(null);setIsWebGLReady(false);const img=new Image;img.crossOrigin=\"anonymous\";img.onload=()=>{setImage(img);setImageDimensions({width:img.width,height:img.height});setVideo(null)// Limpiar video anterior\n;// No establecer isLoading=false aquí, esperar a WebGL\n};img.onerror=err=>{console.error(\"Error cargando la imagen:\",err);setLoadingError(\"Failed to load image\");setIsLoading(false);setIsWebGLReady(false);};img.src=imageUrl;}else if(mediaType===\"image\"){setImage(null);setIsLoading(false);setIsWebGLReady(false);}},[imageUrl,mediaType]);// Cargar video\nuseEffect(()=>{if(mediaType===\"video\"&&videoUrl){setIsLoading(true);setLoadingError(null);setIsWebGLReady(false);const videoElement=document.createElement(\"video\");videoElement.crossOrigin=\"anonymous\";videoElement.muted=true;videoElement.loop=autoLoop;videoElement.playsInline=true;videoElement.preload=\"metadata\";videoElement.onloadedmetadata=()=>{setVideo(videoElement);setImageDimensions({width:videoElement.videoWidth,height:videoElement.videoHeight});setImage(null)// Limpiar imagen anterior\n;// No establecer isLoading=false aquí, esperar a WebGL\nif(autoPlay){videoElement.play().then(()=>{setIsVideoPlaying(true);}).catch(err=>{console.warn(\"Auto-play bloqueado:\",err);setIsVideoPlaying(false);});}};videoElement.onplay=()=>setIsVideoPlaying(true);videoElement.onpause=()=>setIsVideoPlaying(false);videoElement.onended=()=>{if(!autoLoop){setIsVideoPlaying(false);}};videoElement.onerror=err=>{console.error(\"Error cargando el video:\",err);setLoadingError(\"Failed to load video\");setIsLoading(false);setIsWebGLReady(false);};videoRef.current=videoElement;videoElement.src=videoUrl;}else if(mediaType===\"video\"){if(videoRef.current){videoRef.current.pause();videoRef.current=null;}setVideo(null);setIsVideoPlaying(false);setIsLoading(false);setIsWebGLReady(false);}// Cleanup\nreturn()=>{if(videoRef.current){videoRef.current.pause();videoRef.current=null;}};},[videoUrl,mediaType,autoPlay,autoLoop]);// Controlar loading: ocultar solo cuando tanto media como WebGL estén listos\nuseEffect(()=>{if(isWebGLReady&&(mediaType===\"image\"&&image||mediaType===\"video\"&&video||!imageUrl&&!videoUrl)){setIsLoading(false);}},[isWebGLReady,image,video,mediaType,imageUrl,videoUrl]);// Control de reproducción manual del video\nconst toggleVideoPlayback=()=>{if(video){if(isVideoPlaying){video.pause();}else{video.play().catch(console.error);}}};// Calcular aspect ratio para object-fit cover/contain\nconst imageAspectValues=useMemo(()=>{if(!image&&!video)return{a1:1,a2:1};const imageAspect=imageDimensions.width/imageDimensions.height;const containerAspect=containerSize.width/containerSize.height;let a1,a2;if(objectFit===\"contain\"){// Para contain: la imagen debe caber completamente dentro del contenedor\nif(containerAspect>imageAspect){a1=containerAspect/imageAspect;a2=1;}else{a1=1;a2=imageAspect/containerAspect;}}else{// Para cover: la imagen debe cubrir completamente el contenedor\nif(containerAspect>imageAspect){a1=1;a2=imageAspect/containerAspect;}else{a1=containerAspect/imageAspect;a2=1;}}return{a1,a2};},[image,video,imageDimensions,containerSize,objectFit]);// Generar data texture\nconst generateDataTexture=(gl,size)=>{const width=size;const height=size;const totalSize=width*height;const data=new Float32Array(3*totalSize);// Llenar con valores aleatorios iniciales\nfor(let i=0;i<totalSize;i++){const r=Math.random()*255-125;const r1=Math.random()*255-125;const stride=i*3;data[stride]=r;data[stride+1]=r1;data[stride+2]=r;}// Crear textura\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.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB32F,width,height,0,gl.RGB,gl.FLOAT,data);gl.bindTexture(gl.TEXTURE_2D,null);return{texture,data,width,height};};// Actualizar data texture\nconst updateDataTexture=(gl,dataTexture,mouseData,settings,containerSize)=>{const{data,width,height}=dataTexture;const{x,y,vX,vY}=mouseData;// Aplicar relajación\nfor(let i=0;i<data.length;i+=3){data[i]*=settings.relaxation;data[i+1]*=settings.relaxation;}// Calcular posición del mouse en la grilla\nconst gridMouseX=width*x;const gridMouseY=width*y;const maxDist=width*settings.mouseInfluence;const aspect=containerSize.height/containerSize.width;// Aplicar efecto del mouse\nfor(let i=0;i<width;i++){for(let j=0;j<height;j++){const distance=(gridMouseX-i)**2/aspect+(gridMouseY-j)**2;const maxDistSq=maxDist**2;if(distance<maxDistSq){const index=3*(i+width*j);let power=maxDist/Math.sqrt(distance);power=clamp(power,0,10);data[index]+=settings.strength*100*vX*power;data[index+1]-=settings.strength*100*vY*power;}}}// Actualizar textura\ngl.bindTexture(gl.TEXTURE_2D,dataTexture.texture);gl.texSubImage2D(gl.TEXTURE_2D,0,0,0,width,height,gl.RGB,gl.FLOAT,data);gl.bindTexture(gl.TEXTURE_2D,null);};// Convertir color hex a RGB\nconst hexToRgb=hex=>{if(!hex||hex===\"transparent\"||hex===\"none\"){return[0,0,0,0];}let formattedHex=hex.trim();if(formattedHex.startsWith(\"rgba\")||formattedHex.startsWith(\"rgb\")){const parts=formattedHex.replace(/rgba?\\(|\\)/g,\"\").split(\",\");if(parts.length>=3){return[parseInt(parts[0],10)/255,parseInt(parts[1],10)/255,parseInt(parts[2],10)/255,parts.length===4?parseFloat(parts[3]):1];}return[1,1,1,1];}if(!formattedHex.startsWith(\"#\")){formattedHex=\"#\"+formattedHex;}const shorthandRegex=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;formattedHex=formattedHex.replace(shorthandRegex,(m,r,g,b)=>r+r+g+g+b+b);const result=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(formattedHex);return result?[parseInt(result[1],16)/255,parseInt(result[2],16)/255,parseInt(result[3],16)/255,1]:[1,1,1,0];};// Setup mouse events\nuseEffect(()=>{if(!containerRef.current)return;const container=containerRef.current;const handleMouseMove=e=>{const rect=container.getBoundingClientRect();const x=(e.clientX-rect.left)/rect.width;const y=(e.clientY-rect.top)/rect.height;const mouse=mouseRef.current;mouse.vX=x-mouse.prevX;mouse.vY=y-mouse.prevY;mouse.x=x;mouse.y=y;mouse.prevX=x;mouse.prevY=y;};// Touch events para móviles\nconst handleTouchMove=e=>{e.preventDefault();const rect=container.getBoundingClientRect();const touch=e.touches[0];const x=(touch.clientX-rect.left)/rect.width;const y=(touch.clientY-rect.top)/rect.height;const mouse=mouseRef.current;mouse.vX=x-mouse.prevX;mouse.vY=y-mouse.prevY;mouse.x=x;mouse.y=y;mouse.prevX=x;mouse.prevY=y;};container.addEventListener(\"mousemove\",handleMouseMove);container.addEventListener(\"touchmove\",handleTouchMove,{passive:false});return()=>{container.removeEventListener(\"mousemove\",handleMouseMove);container.removeEventListener(\"touchmove\",handleTouchMove);};},[]);// Inicializar recursos WebGL\nconst handleInit=(gl,width,height,{resources,programs})=>{// Crear textura principal\nconst mainTexture=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,mainTexture);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);if(video&&mediaType===\"video\"){// Para video: crear textura vacía que se actualizará en render\ngl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,1,1,0,gl.RGBA,gl.UNSIGNED_BYTE,new Uint8Array([0,0,0,255]));resources.isVideo=true;resources.hasValidMedia=true;}else if(image&&mediaType===\"image\"){gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,image);resources.isVideo=false;resources.hasValidMedia=true;}else{// Crear textura de color sólido como fallback\nconst size=256;const data=new Uint8Array(size*size*4);const[r,g,b,a]=hexToRgb(backgroundColor);for(let i=0;i<size*size;i++){const idx=i*4;data[idx]=Math.floor(r*255);data[idx+1]=Math.floor(g*255);data[idx+2]=Math.floor(b*255);data[idx+3]=Math.floor(a*255);}gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,size,size,0,gl.RGBA,gl.UNSIGNED_BYTE,data);resources.isVideo=false;resources.hasValidMedia=false;}gl.bindTexture(gl.TEXTURE_2D,null);resources.mainTexture=mainTexture;// Generar data texture con la configuración efectiva\nconst config=effectiveConfig;resources.dataTexture=generateDataTexture(gl,config.grid);resources.originalGrid=config.grid;// Configurar uniforms\nconst program=programs.distortion;gl.useProgram(program);resources.uniforms={time:gl.getUniformLocation(program,\"uTime\"),texture:gl.getUniformLocation(program,\"uTexture\"),dataTexture:gl.getUniformLocation(program,\"uDataTexture\"),resolution:gl.getUniformLocation(program,\"uResolution\"),distortionStrength:gl.getUniformLocation(program,\"uDistortionStrength\")};// Configurar settings\nresources.settings={...config};resources.performanceMonitor=performanceMonitorRef.current;// Marcar WebGL como listo\nsetIsWebGLReady(true);};// Manejar renderizado\nconst handleRender=(gl,{programs,resources,vao,frame,width,height})=>{if(!programs.distortion||!resources.dataTexture)return;const program=programs.distortion;gl.useProgram(program);// Actualizar monitor de rendimiento\nif(adaptiveQuality&&resources.performanceMonitor){resources.performanceMonitor.update();}// Actualizar textura de video si es necesario\nif(resources.isVideo&&video&&isVideoPlaying&&!video.paused&&!video.ended){// Actualizar cada frame para video fluido, pero podemos optimizar si es necesario\nconst VIDEO_UPDATE_INTERVAL=resources.performanceMonitor?.avgFPS<30?2:1;videoUpdateCounterRef.current++;if(videoUpdateCounterRef.current>=VIDEO_UPDATE_INTERVAL){gl.bindTexture(gl.TEXTURE_2D,resources.mainTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,video);gl.bindTexture(gl.TEXTURE_2D,null);videoUpdateCounterRef.current=0;}}// Ajuste adaptativo de calidad (solo cada 2 segundos)\nif(adaptiveQuality&&resources.performanceMonitor&&frame-lastQualityAdjustmentRef.current>120&&// 2 segundos a 60fps\nresources.isVideo){const monitor=resources.performanceMonitor;let needsRegeneration=false;if(monitor.shouldReduceQuality()&&resources.settings.grid>10){resources.settings.grid=Math.max(10,Math.floor(resources.settings.grid*.8));needsRegeneration=true;console.log(`Calidad reducida: grid=${resources.settings.grid}, FPS=${monitor.avgFPS.toFixed(1)}`);}else if(monitor.shouldIncreaseQuality()&&resources.settings.grid<resources.originalGrid){resources.settings.grid=Math.min(resources.originalGrid,Math.floor(resources.settings.grid*1.2));needsRegeneration=true;console.log(`Calidad aumentada: grid=${resources.settings.grid}, FPS=${monitor.avgFPS.toFixed(1)}`);}if(needsRegeneration){// Regenerar data texture con nuevo grid\ngl.deleteTexture(resources.dataTexture.texture);resources.dataTexture=generateDataTexture(gl,resources.settings.grid);lastQualityAdjustmentRef.current=frame;}}// Limpiar canvas\nconst bgColor=hexToRgb(backgroundColor);gl.clearColor(bgColor[0],bgColor[1],bgColor[2],bgColor[3]);gl.clear(gl.COLOR_BUFFER_BIT);// Habilitar transparencia\ngl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);// Actualizar settings con la configuración efectiva (excepto si se ajustó adaptativamente)\nif(!adaptiveQuality||!resources.isVideo){const config=effectiveConfig;resources.settings={...config};}// Actualizar data texture\nconst mouse=mouseRef.current;updateDataTexture(gl,resources.dataTexture,mouse,resources.settings,{width,height});// Aplicar decay a la velocidad del mouse\nmouse.vX*=.9;mouse.vY*=.9;// Configurar uniforms\nconst{uniforms}=resources;gl.uniform1f(uniforms.time,frame*.01);gl.uniform4f(uniforms.resolution,width,height,imageAspectValues.a1,imageAspectValues.a2);gl.uniform1f(uniforms.distortionStrength,resources.settings.distortionStrength);// Bind texturas\ngl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,resources.mainTexture);gl.uniform1i(uniforms.texture,0);gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,resources.dataTexture.texture);gl.uniform1i(uniforms.dataTexture,1);// Dibujar\ngl.bindVertexArray(vao);gl.drawArrays(gl.TRIANGLE_STRIP,0,4);gl.bindVertexArray(null);gl.disable(gl.BLEND);};// Manejar resize\nconst handleResize=(gl,width,height,resources)=>{const config=effectiveConfig;// Regenerar data texture si cambió el grid y no estamos en modo adaptativo\nif(resources.dataTexture&&resources.settings.grid!==config.grid&&(!adaptiveQuality||!resources.isVideo)){gl.deleteTexture(resources.dataTexture.texture);resources.dataTexture=generateDataTexture(gl,config.grid);}// Actualizar textura principal si cambió la imagen\nif(image&&resources.mainTexture&&resources.lastImage!==image){gl.bindTexture(gl.TEXTURE_2D,resources.mainTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,image);gl.bindTexture(gl.TEXTURE_2D,null);resources.lastImage=image;resources.isVideo=false;resources.hasValidMedia=true;}// Actualizar para video si cambió\nif(video&&resources.mainTexture&&resources.lastVideo!==video){resources.lastVideo=video;resources.isVideo=true;resources.hasValidMedia=true;}};// Limpiar recursos\nconst handleCleanup=(gl,resources)=>{if(resources.mainTexture){gl.deleteTexture(resources.mainTexture);}if(resources.dataTexture?.texture){gl.deleteTexture(resources.dataTexture.texture);}};// Obtener preset values para el inspector\nconst getInspectPresetValues=()=>{if(inspectPreset===\"custom\"){return{grid,mouseInfluence,strength,relaxation,distortionStrength};}const presets=mediaType===\"video\"&&videoPerformanceMode?VIDEO_PRESETS:IMAGE_PRESETS;return presets[inspectPreset]||presets.pixelated;};return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",backgroundColor:backgroundColor},children:[!(isStaticRenderer&&!props.renderInStaticMode)&&/*#__PURE__*/_jsx(WebGL2Renderer,{fragmentShaders:[{id:\"distortion\",source:fragmentShaderSource}],vertexShaderSource:vertexShaderSource,onInit:handleInit,onRender:handleRender,onResize:handleResize,onCleanup:handleCleanup,bgColor:backgroundColor}),isStaticRenderer&&!props.renderInStaticMode&&/*#__PURE__*/_jsx(BackgroundCover,{}),isLoading&&/*#__PURE__*/_jsx(LoadingSpinner,{color:spinnerColor}),loadingError&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",backgroundColor:\"rgba(255, 0, 0, 0.8)\",color:\"white\",padding:\"12px 20px\",borderRadius:\"8px\",fontSize:\"14px\",zIndex:20},children:loadingError}),mediaType===\"video\"&&video&&!autoPlay&&!isLoading&&/*#__PURE__*/_jsx(\"button\",{onClick:toggleVideoPlayback,style:{position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",backgroundColor:\"rgba(0, 0, 0, 0.7)\",border:\"none\",borderRadius:\"50%\",width:\"60px\",height:\"60px\",color:\"white\",fontSize:\"20px\",cursor:\"pointer\",zIndex:10,display:isVideoPlaying?\"none\":\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:\"▶️\"}),preset===\"custom\"&&showPresetInfo&&!(isStaticRenderer&&!props.renderInStaticMode)&&/*#__PURE__*/_jsx(PresetInspector,{presetName:inspectPreset===\"custom\"?PRESET_TITLES.custom:PRESET_TITLES[inspectPreset]||inspectPreset,presetValues:getInspectPresetValues(),mediaType:mediaType})]});}// Propiedades por defecto\nInteractiveDistortion.defaultProps={preset:\"pixelated\",mediaType:\"video\",imageUrl:\"https://framer-plugins-assets.world-d8f.workers.dev/PixelWarpImage.jpg\",videoUrl:\"https://framer-plugins-assets.world-d8f.workers.dev/PixelWarpVideo.mp4\",backgroundColor:\"transparent\",objectFit:\"cover\",spinnerColor:\"#ffffff\",autoPlay:true,autoLoop:true,videoPerformanceMode:true,adaptiveQuality:true,grid:50,mouseInfluence:.25,strength:.11,relaxation:.9,distortionStrength:1,showPresetInfo:false,inspectPreset:\"pixelated\"};// Property controls para Framer\naddPropertyControls(InteractiveDistortion,{renderInStaticMode:{type:ControlType.Boolean,title:\"Render in Framer Static Mode\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Enable rendering in Canvas/Export mode (may affect Framer performance)\"},// ===== Sección: Media =====\nmediaType:{type:ControlType.Enum,title:\"Media Type\",defaultValue:\"video\",options:[\"image\",\"video\"],optionTitles:[\"Image\",\"Video\"],description:\"Choose between image or video input\",section:\"Media\"},imageUrl:{type:ControlType.Image,title:\"Image\",hidden:props=>props.mediaType!==\"image\",description:\"Source image to apply the interactive distortion effect\",section:\"Media\"},videoUrl:{type:ControlType.File,allowedFileTypes:[\"mp4\",\"webm\",\"mov\",\"avi\"],title:\"Video\",hidden:props=>props.mediaType!==\"video\",description:\"Source video to apply the interactive distortion effect\",section:\"Media\"},// ===== Sección: Video Settings =====\nautoPlay:{type:ControlType.Boolean,title:\"Auto Play\",defaultValue:true,hidden:props=>props.mediaType!==\"video\",description:\"Automatically start playing the video\",section:\"Video Settings\"},autoLoop:{type:ControlType.Boolean,title:\"Loop Video\",defaultValue:true,hidden:props=>props.mediaType!==\"video\",description:\"Loop the video when it reaches the end\",section:\"Video Settings\"},videoPerformanceMode:{type:ControlType.Boolean,title:\"Performance Mode\",defaultValue:true,hidden:props=>props.mediaType!==\"video\"||props.preset===\"custom\",description:\"Use optimized presets for better video performance (lower grid resolution)\",section:\"Video Settings\"},adaptiveQuality:{type:ControlType.Boolean,title:\"Adaptive Quality\",defaultValue:true,hidden:props=>props.mediaType!==\"video\",description:\"Automatically adjust quality based on performance (reduces grid when FPS drops)\",section:\"Video Settings\"},// ===== Sección: Appearance =====\nbackgroundColor:{type:ControlType.Color,title:\"Background Color\",defaultValue:\"transparent\",description:\"Background color of the container\",section:\"Appearance\"},objectFit:{type:ControlType.Enum,title:\"Object Fit\",defaultValue:\"cover\",options:[\"cover\",\"contain\"],optionTitles:[\"Cover\",\"Contain\"],description:\"How the media should fit within the container - Cover fills completely (may crop), Contain fits entirely (may show empty space)\",section:\"Appearance\"},spinnerColor:{type:ControlType.Color,title:\"Loading Spinner Color\",defaultValue:\"#ffffff\",description:\"Color of the loading spinner\",section:\"Appearance\"},// ===== Sección: Preset =====\npreset:{type:ControlType.Enum,title:\"Preset\",defaultValue:\"pixelated\",options:[\"smoothDistortion\",\"highDetail\",\"pixelated\",\"custom\"],optionTitles:[PRESET_TITLES.smoothDistortion,PRESET_TITLES.highDetail,PRESET_TITLES.pixelated,PRESET_TITLES.custom],description:\"Choose a predefined distortion style or select 'Custom' to create your own effect\",section:\"Preset\"},// Preset inspector (only visible in custom mode)\nshowPresetInfo:{type:ControlType.Boolean,title:\"Show Preset Values\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden:props=>props.preset!==\"custom\",description:\"Display a reference panel with preset values that you can manually copy to your custom settings\",section:\"Preset\"},inspectPreset:{type:ControlType.Enum,title:\"Reference Preset\",defaultValue:\"pixelated\",options:[\"smoothDistortion\",\"highDetail\",\"pixelated\",\"custom\"],optionTitles:[PRESET_TITLES.smoothDistortion,PRESET_TITLES.highDetail,PRESET_TITLES.pixelated,PRESET_TITLES.custom],hidden:props=>props.preset!==\"custom\"||!props.showPresetInfo,description:\"Choose which preset or custom values to view as reference\",section:\"Preset\"},// ===== Sección: Custom Settings (solo visibles cuando preset = \"custom\") =====\ngrid:{type:ControlType.Number,title:\"Grid Resolution\",defaultValue:50,min:2,max:1e3,step:1,description:\"Resolution of the distortion grid (higher = more detail, more performance cost)\",section:\"Custom Settings\",hidden:props=>props.preset!==\"custom\"},mouseInfluence:{type:ControlType.Number,title:\"Mouse Influence\",defaultValue:.25,min:0,max:1,step:.01,description:\"Radius of mouse influence (0.05 = small area, 1.0 = full canvas)\",section:\"Custom Settings\",hidden:props=>props.preset!==\"custom\"},strength:{type:ControlType.Number,title:\"Strength\",defaultValue:.11,min:0,max:1,step:.01,description:\"Intensity of the mouse interaction effect\",section:\"Custom Settings\",hidden:props=>props.preset!==\"custom\"},relaxation:{type:ControlType.Number,title:\"Relaxation\",defaultValue:.9,min:0,max:1,step:.01,description:\"How quickly the distortion fades (0.7 = fast fade, 0.99 = very slow fade)\",section:\"Custom Settings\",hidden:props=>props.preset!==\"custom\"},distortionStrength:{type:ControlType.Number,title:\"Distortion Strength\",defaultValue:1,min:.1,max:5,step:.1,description:\"Overall strength of the visual distortion effect\",section:\"Custom Settings\",hidden:props=>props.preset!==\"custom\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"InteractiveDistortion\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./InteractiveDistortion.map"],"mappings":"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"}