{"version":3,"file":"LiquidGridFX.C9685QkC.mjs","names":["React.useMemo","React.useRef","THREE.Scene","THREE.WebGLRenderer","THREE.OrthographicCamera","THREE.DataTexture","THREE.RGBAFormat","THREE.FloatType","THREE.PlaneGeometry","THREE.ShaderMaterial","THREE.Mesh","THREE.VideoTexture","THREE.LinearFilter","THREE.Texture"],"sources":["https:/framerusercontent.com/modules/5WH523ED86iSkCEFk10O/mr8KXlUMJAQmAxpktTql/LiquidGridFX.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import*as THREE from\"three\";import{addPropertyControls,ControlType,useIsStaticRenderer,RenderTarget}from\"framer\";// =========================================\n// Helpers\n// =========================================\nconst getOptimizedSrc=(src,containerWidth)=>{if(!src)return\"\";if(src.startsWith(\"blob:\")||src.startsWith(\"data:\"))return src;if(src.includes(\".gif\"))return src;if(src.includes(\"framerusercontent\")||src.includes(\"unsplash\")){const w=Math.ceil(containerWidth*(window.devicePixelRatio||1)/100)*100;const sep=src.includes(\"?\")?\"&\":\"?\";return`${src}${sep}w=${Math.min(w,2400)}&q=85&fit=max&auto=format`;}return src;};// =========================================\n// Shaders\n// =========================================\nconst VERT=`\nvarying vec2 vUv;\nvoid main() {\n    vUv = uv;\n    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n`;const FRAG=`\nuniform sampler2D uTexture;\nuniform sampler2D uDataTexture;\nuniform float uAberration;\nvarying vec2 vUv;\n\nvoid main() {\n    vec2 offset = texture2D(uDataTexture, vUv).rg * 0.02;\n    vec2 uvR = vUv - offset * (1.0 + uAberration);\n    vec2 uvG = vUv - offset;\n    vec2 uvB = vUv - offset * (1.0 - uAberration);\n    float r = texture2D(uTexture, uvR).r;\n    float g = texture2D(uTexture, uvG).g;\n    float b = texture2D(uTexture, uvB).b;\n    gl_FragColor = vec4(r, g, b, 1.0);\n}\n`;// =========================================\n// Empty State\n// =========================================\nconst EmptyState=({style})=>/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",background:\"rgba(153, 102, 255, 0.05)\",border:\"1px dashed rgba(153, 102, 255, 0.3)\",borderRadius:8,...style},children:/*#__PURE__*/_jsxs(\"div\",{style:{textAlign:\"center\",padding:24,pointerEvents:\"none\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{fontSize:32,marginBottom:12},children:\"💧\"}),/*#__PURE__*/_jsx(\"h3\",{style:{margin:\"0 0 8px 0\",color:\"#9966FF\",fontFamily:\"Inter, sans-serif\",fontSize:16,fontWeight:600},children:\"LiquidGridFX\"}),/*#__PURE__*/_jsxs(\"p\",{style:{margin:0,color:\"#888\",fontFamily:\"Inter, sans-serif\",fontSize:12,lineHeight:1.5,maxWidth:260},children:[\"Add an image or video in the properties panel, then press\",\" \",/*#__PURE__*/_jsx(\"strong\",{style:{color:\"#bbb\"},children:\"Play\"}),\" to preview the liquid distortion effect.\"]})]})});// =========================================\n// Component\n// =========================================\n/**\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 800\n * @framerIntrinsicHeight 450\n */export default function LiquidGridFX(props){const{mediaType=\"image\",image={src:\"\"},videoSource=\"file\",videoFile=\"\",videoUrl=\"\",videoSettings={poster:\"\",autoPlay:true,loop:true,muted:true},enableEffect=true,effectSettings={grid:30,radius:24,strength:24,hardness:48,tail:8,fluidity:25,dissipation:24,aberration:100,momentum:50,hoverMultiplier:2,dprCap:1.5},style}=props;const{grid=30,radius=24,strength=24,hardness=48,tail=8,fluidity=25,dissipation=24,aberration=100,momentum=50,hoverMultiplier=2,dprCap=1.5}=effectSettings;// ─── Environment ───\nconst isStatic=useIsStaticRenderer();const isCanvas=RenderTarget.current()===RenderTarget.canvas;// ─── Derived sources ───\nconst rawImageSrc=image?.src||\"\";const videoSrc=React.useMemo(()=>{if(mediaType!==\"video\")return\"\";return videoSource===\"url\"?videoUrl:videoFile;},[mediaType,videoSource,videoUrl,videoFile]);// ─── Physics config (memoized, synced to ref — no re-mount on slider drag) ───\nconst physicsConfig=React.useMemo(()=>({radius:radius/100*.5,strength:strength/100,hardness:hardness/100,tail:tail/100,fluidity:fluidity/100,relaxation:.99-dissipation/100*.4,aberration:aberration/100*2,momentum:momentum/100}),[radius,strength,hardness,tail,fluidity,dissipation,aberration,momentum]);// ─── Refs ───\nconst wrapRef=React.useRef(null);// physicsRef + hoverMultRef: read inside rAF, intentionally outside dep array\nconst physicsRef=React.useRef(physicsConfig);const hoverMultRef=React.useRef(hoverMultiplier);const mouseState=React.useRef({x:.5,y:.5,vX:0,vY:0,prevX:.5,prevY:.5,justEntered:false});const isHoveredRef=React.useRef(false);const isVisibleRef=React.useRef(false);const simState=React.useRef({active:true,energy:100});React.useLayoutEffect(()=>{physicsRef.current=physicsConfig;hoverMultRef.current=hoverMultiplier;simState.current.active=true;},[physicsConfig,hoverMultiplier]);// ─── WebGL Effect ───\nReact.useEffect(()=>{if(isStatic||isCanvas||!enableEffect)return;const container=wrapRef.current;if(!container)return;let destroyed=false;// ── Renderer ──\nconst scene=new THREE.Scene;const renderer=new THREE.WebGLRenderer({antialias:false,alpha:true,powerPreference:\"high-performance\",precision:\"mediump\",depth:false,stencil:false});renderer.setClearColor(0,0);renderer.setPixelRatio(Math.min(window.devicePixelRatio,dprCap));const canvas=renderer.domElement;canvas.style.cssText=\"position:absolute;top:0;left:0;width:100%;height:100%;display:block;\";container.appendChild(canvas);// ── Camera ──\nconst camera=new THREE.OrthographicCamera(-1,1,1,-1,.1,10);camera.position.z=1;// ── Physics grid ──\nconst gridSize=Math.max(4,Math.floor(grid));const gridData=new Float32Array(4*gridSize*gridSize);const dataTexture=new THREE.DataTexture(gridData,gridSize,gridSize,THREE.RGBAFormat,THREE.FloatType);dataTexture.needsUpdate=true;// ── Shader ──\nconst uniforms={uTexture:{value:null},uDataTexture:{value:dataTexture},uAberration:{value:physicsRef.current.aberration}};const geometry=new THREE.PlaneGeometry(1,1,gridSize-1,gridSize-1);const material=new THREE.ShaderMaterial({uniforms,vertexShader:VERT,fragmentShader:FRAG,transparent:true,depthWrite:false,depthTest:false});const plane=new THREE.Mesh(geometry,material);scene.add(plane);// Mutable layout state\nlet containerAspect=1;let planeScale={width:1,height:1};let imageAspect=16/9;let mediaReady=false;let textureObj=null;// ── Resize ──\nconst handleResize=(width,height)=>{if(width<1||height<1)return;renderer.setSize(width,height,true);containerAspect=width/height;// Cover: scale plane to fill container preserving image aspect ratio\nconst fW=containerAspect;const fH=1;let pW,pH;if(containerAspect>imageAspect){pW=fW;pH=fW/imageAspect;}else{pH=fH;pW=fH*imageAspect;}camera.left=-fW/2;camera.right=fW/2;camera.top=fH/2;camera.bottom=-fH/2;camera.updateProjectionMatrix();plane.scale.set(pW,pH,1);planeScale={width:pW,height:pH};if(mediaReady)renderer.render(scene,camera);};// ── Media loading ──\nconst loadMedia=()=>{if(mediaType===\"video\"&&videoSrc){const v=document.createElement(\"video\");v.src=videoSrc;v.autoplay=videoSettings.autoPlay;v.loop=videoSettings.loop;v.muted=videoSettings.muted;v.playsInline=true;v.crossOrigin=\"anonymous\";if(videoSettings.poster)v.poster=videoSettings.poster;v.onloadedmetadata=()=>{if(destroyed)return;imageAspect=(v.videoWidth||16)/(v.videoHeight||9);const vTex=new THREE.VideoTexture(v);vTex.minFilter=THREE.LinearFilter;vTex.magFilter=THREE.LinearFilter;uniforms.uTexture.value=vTex;textureObj=vTex;mediaReady=true;const rect=container.getBoundingClientRect();handleResize(Math.round(rect.width),Math.round(rect.height));if(videoSettings.autoPlay)v.play().catch(()=>{});};v.onerror=()=>{if(!destroyed)mediaReady=true;};v.load();}else if(mediaType===\"image\"&&rawImageSrc){const containerW=container.offsetWidth||800;const src=getOptimizedSrc(rawImageSrc,containerW);const img=new Image;img.crossOrigin=\"anonymous\";img.onload=()=>{if(destroyed)return;imageAspect=(img.naturalWidth||1)/(img.naturalHeight||1);const tex=new THREE.Texture(img);tex.minFilter=THREE.LinearFilter;tex.magFilter=THREE.LinearFilter;tex.generateMipmaps=false;tex.needsUpdate=true;uniforms.uTexture.value=tex;textureObj=tex;mediaReady=true;const rect=container.getBoundingClientRect();handleResize(Math.round(rect.width),Math.round(rect.height));renderer.render(scene,camera);};img.onerror=()=>{if(!destroyed)mediaReady=true;};img.src=src;}};loadMedia();// ── Observers ──\nconst resizeObserver=new ResizeObserver(entries=>{const{width,height}=entries[0].contentRect;handleResize(Math.round(width),Math.round(height));});resizeObserver.observe(container);const intersectionObserver=new IntersectionObserver(([entry])=>{isVisibleRef.current=entry.isIntersecting;if(entry.isIntersecting)simState.current.active=true;if(!textureObj)return;const isVid=textureObj.isVideoTexture;if(isVid&&videoSettings.autoPlay){const v=textureObj.image;entry.isIntersecting?v?.play().catch(()=>{}):v?.pause();}},{threshold:0});intersectionObserver.observe(container);// ── Pointer / Touch events ──\n// FIX: shared enter/leave logic used by both mouse and touch.\n// Centralising here ensures isHoveredRef is always true when\n// handleInteraction is called from touchmove.\nconst onEnter=()=>{isHoveredRef.current=true;simState.current.active=true;mouseState.current.justEntered=true;};const onLeave=()=>{isHoveredRef.current=false;mouseState.current.vX=0;mouseState.current.vY=0;};const handleInteraction=(clientX,clientY)=>{// FIX: ensure the simulation is always awake and hovered when\n// receiving coordinates — critical for touch where enter/move\n// can fire in the same tick or be separated by a frame.\nsimState.current.active=true;isHoveredRef.current=true;const rect=container.getBoundingClientRect();const mx=(clientX-rect.left)/rect.width;const my=(clientY-rect.top)/rect.height;const fx=(mx-.5)*containerAspect;const fy=(.5-my)*1;const x=Math.max(0,Math.min(1,(fx+planeScale.width/2)/planeScale.width));const y=Math.max(0,Math.min(1,(fy+planeScale.height/2)/planeScale.height));// justEntered guard: zero delta on first frame to prevent velocity spike\nif(mouseState.current.justEntered){mouseState.current.prevX=x;mouseState.current.prevY=y;mouseState.current.justEntered=false;}mouseState.current.vX=x-mouseState.current.prevX;mouseState.current.vY=y-mouseState.current.prevY;mouseState.current.prevX=x;mouseState.current.prevY=y;mouseState.current.x=x;mouseState.current.y=y;};const onMouseMove=e=>handleInteraction(e.clientX,e.clientY);// FIX: touchmove now calls handleInteraction for all active touches,\n// supporting multi-touch (uses first touch point).\nconst onTouchMove=e=>{if(e.touches.length>0){handleInteraction(e.touches[0].clientX,e.touches[0].clientY);}};// FIX: touchstart fires onEnter AND seeds the initial position from the\n// touch point so the first touchmove delta is always near-zero.\nconst onTouchStart=e=>{onEnter();if(e.touches.length>0){// Pre-seed position — prevents a velocity spike on the first move\nconst rect=container.getBoundingClientRect();const mx=(e.touches[0].clientX-rect.left)/rect.width;const my=(e.touches[0].clientY-rect.top)/rect.height;const fx=(mx-.5)*containerAspect;const fy=(.5-my)*1;const x=Math.max(0,Math.min(1,(fx+planeScale.width/2)/planeScale.width));const y=Math.max(0,Math.min(1,(fy+planeScale.height/2)/planeScale.height));mouseState.current.prevX=x;mouseState.current.prevY=y;mouseState.current.x=x;mouseState.current.y=y;// justEntered is already true from onEnter(); let handleInteraction\n// process the first real move normally via the guard.\n}};container.addEventListener(\"mouseenter\",onEnter);container.addEventListener(\"mouseleave\",onLeave);container.addEventListener(\"mousemove\",onMouseMove,{passive:true});container.addEventListener(\"touchstart\",onTouchStart,{passive:true});container.addEventListener(\"touchend\",onLeave,{passive:true});container.addEventListener(\"touchcancel\",onLeave,{passive:true});container.addEventListener(\"touchmove\",onTouchMove,{passive:true});// ── Animation loop ──\nlet rafId=0;const animate=()=>{rafId=requestAnimationFrame(animate);if(!isVisibleRef.current||!mediaReady)return;const isVid=textureObj&&textureObj.isVideoTexture;// Energy-based sleep — skip physics when idle; video always renders\nif(!simState.current.active&&simState.current.energy<.001&&!isHoveredRef.current&&!isVid)return;uniforms.uAberration.value=physicsRef.current.aberration;if(isVid)textureObj.needsUpdate=true;const{relaxation,tail:t,hardness:h,radius:r,strength:s,fluidity:fl,momentum:mom}=physicsRef.current;const hm=hoverMultRef.current;const dt=gridData;const count=gridSize*gridSize;// Momentum controls the relaxation ceiling — higher = heavier, more elastic\nconst maxRelax=.99+mom*.009;const relax=Math.min(relaxation+(maxRelax-relaxation)*t,.999);const mult=s*50*hm;const maxD=gridSize*r;const maxDSq=maxD*maxD;const hardPow=1+h*15;let energy=0;// Step 1 — relax all cells\nfor(let i=0;i<count;i++){const idx=i*4;dt[idx]*=relax;dt[idx+1]*=relax;energy+=Math.abs(dt[idx])+Math.abs(dt[idx+1]);}// Step 2 — apply force field with fluidity swirl\nif(isHoveredRef.current){const gx=gridSize*mouseState.current.x;const gy=gridSize*mouseState.current.y;const vX=mouseState.current.vX;const vY=mouseState.current.vY;if(Math.abs(vX)>1e-4||Math.abs(vY)>1e-4){const speed=Math.sqrt(vX*vX+vY*vY);const swirlIntensity=fl*3;for(let i=0;i<gridSize;i++){for(let j=0;j<gridSize;j++){const dx=gx-i;const dy=gy-j;const dSq=dx*dx+dy*dy;if(dSq<maxDSq){const d=Math.sqrt(dSq);const power=Math.pow(1-d/maxD,hardPow);// Tangential component — creates vortex/swirl feel\nconst ntx=d>0?-dy/d:0;const nty=d>0?dx/d:0;const fluidVx=vX+ntx*speed*swirlIntensity;const fluidVy=vY+nty*speed*swirlIntensity;const idx=4*(i+gridSize*j);dt[idx]+=mult*fluidVx*power;dt[idx+1]-=mult*fluidVy*power;}}}energy+=Math.abs(vX)+Math.abs(vY);}}simState.current.energy=energy;if(energy<.001)simState.current.active=false;dataTexture.needsUpdate=true;renderer.render(scene,camera);};animate();// ── Cleanup ──\nreturn()=>{destroyed=true;cancelAnimationFrame(rafId);container.removeEventListener(\"mouseenter\",onEnter);container.removeEventListener(\"mouseleave\",onLeave);container.removeEventListener(\"mousemove\",onMouseMove);container.removeEventListener(\"touchstart\",onTouchStart);container.removeEventListener(\"touchend\",onLeave);container.removeEventListener(\"touchcancel\",onLeave);container.removeEventListener(\"touchmove\",onTouchMove);resizeObserver.disconnect();intersectionObserver.disconnect();geometry.dispose();material.dispose();dataTexture.dispose();if(textureObj)textureObj.dispose();renderer.dispose();if(canvas.parentNode)canvas.parentNode.removeChild(canvas);};// physicsConfig + hoverMultiplier intentionally omitted — handled via refs\n},[grid,dprCap,mediaType,rawImageSrc,videoSrc,enableEffect,isStatic,isCanvas]);// =========================================\n// Render paths\n// =========================================\n// ─── Static / thumbnail ───\nif(isStatic){const src=mediaType===\"image\"?rawImageSrc:videoSettings.poster||\"\";if(!src)return /*#__PURE__*/_jsx(EmptyState,{style:style});return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",overflow:\"hidden\",...style},children:/*#__PURE__*/_jsx(\"img\",{src:src,alt:image?.alt||\"\",style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\"}})});}// ─── Canvas Preview (Framer Editor) ───\nif(isCanvas){return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",background:\"rgba(153, 102, 255, 0.05)\",border:\"1px dashed rgba(153, 102, 255, 0.3)\",borderRadius:8,...style},children:/*#__PURE__*/_jsxs(\"div\",{style:{textAlign:\"center\",padding:24,pointerEvents:\"none\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{fontSize:32,marginBottom:12},children:\"💧\"}),/*#__PURE__*/_jsx(\"h3\",{style:{margin:\"0 0 8px 0\",color:\"#9966FF\",fontFamily:\"Inter, sans-serif\",fontSize:16,fontWeight:600},children:\"LiquidGridFX\"}),/*#__PURE__*/_jsxs(\"p\",{style:{margin:0,color:\"#888\",fontFamily:\"Inter, sans-serif\",fontSize:12,lineHeight:1.5,maxWidth:260},children:[\"Mouse-reactive liquid distortion over image or video.\",\" \",\"Press \",/*#__PURE__*/_jsx(\"strong\",{style:{color:\"#bbb\"},children:\"Play\"}),\" to preview the effect.\"]})]})});}// ─── Effect disabled ───\nif(!enableEffect){const src=mediaType===\"image\"?rawImageSrc:videoSrc;if(!src)return /*#__PURE__*/_jsx(EmptyState,{style:style});if(mediaType===\"video\"){return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",overflow:\"hidden\",position:\"relative\",...style},children:/*#__PURE__*/_jsx(\"video\",{src:src,poster:videoSettings.poster||undefined,autoPlay:videoSettings.autoPlay,loop:videoSettings.loop,muted:videoSettings.muted,playsInline:true,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\"}})});}return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",overflow:\"hidden\",...style},children:/*#__PURE__*/_jsx(\"img\",{src:src,alt:image?.alt||\"\",style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\"}})});}// ─── No media configured ───\nconst hasMedia=mediaType===\"image\"&&!!rawImageSrc||mediaType===\"video\"&&!!videoSrc;if(!hasMedia)return /*#__PURE__*/_jsx(EmptyState,{style:style});// ─── Live (WebGL) ───\nconst underlaySrc=mediaType===\"image\"?rawImageSrc:videoSettings.poster||\"\";return /*#__PURE__*/_jsx(\"div\",{ref:wrapRef,style:{width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\",...style},children:underlaySrc&&/*#__PURE__*/_jsx(\"img\",{src:underlaySrc,alt:\"\",\"aria-hidden\":\"true\",style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\",pointerEvents:\"none\",userSelect:\"none\"}})});}// =========================================\n// Property Controls\n// =========================================\naddPropertyControls(LiquidGridFX,{mediaType:{type:ControlType.SegmentedEnum,title:\"Media\",options:[\"image\",\"video\"],defaultValue:\"image\",description:\"Choose between a static image or a looping video.\"},image:{type:ControlType.ResponsiveImage,title:\"Image\",hidden:props=>props.mediaType!==\"image\",description:\"Upload an image to apply the distortion effect.\"},videoSource:{type:ControlType.SegmentedEnum,title:\"Video Source\",options:[\"file\",\"url\"],defaultValue:\"file\",hidden:props=>props.mediaType!==\"video\",description:\"Choose between uploading a file or using a URL.\"},videoFile:{type:ControlType.File,title:\"Video File\",allowedFileTypes:[\"mp4\",\"webm\",\"mov\"],hidden:props=>props.mediaType!==\"video\"||props.videoSource!==\"file\",description:\"Upload a video file (MP4, WebM, MOV).\"},videoUrl:{type:ControlType.String,title:\"Video URL\",placeholder:\"https://example.com/video.mp4\",hidden:props=>props.mediaType!==\"video\"||props.videoSource!==\"url\",description:\"Enter a direct link to a video file.\"},videoSettings:{type:ControlType.Object,title:\"Video Settings\",hidden:props=>props.mediaType!==\"video\",controls:{poster:{type:ControlType.Image,title:\"Poster\",description:\"Cover image shown while loading or if autoplay is off.\"},autoPlay:{type:ControlType.Boolean,title:\"Autoplay\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},muted:{type:ControlType.Boolean,title:\"Muted\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"}}},enableEffect:{type:ControlType.Boolean,title:\"Enable Effect\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Toggle the liquid distortion. Disable to save performance.\"},effectSettings:{type:ControlType.Object,title:\"Physics Effects\",hidden:props=>!props.enableEffect,controls:{grid:{type:ControlType.Number,title:\"Grid Detail\",min:10,max:100,step:1,defaultValue:30,displayStepper:true,description:\"Resolution of the distortion grid. Higher = smoother trails.\"},radius:{type:ControlType.Number,title:\"Trail Scale\",min:0,max:100,unit:\"%\",step:1,defaultValue:24,displayStepper:true,description:\"Radius of the distortion brush that follows the cursor.\"},strength:{type:ControlType.Number,title:\"Strength\",min:0,max:100,unit:\"%\",step:1,defaultValue:24,displayStepper:true,description:\"How hard the cursor pushes the liquid. Higher = more intense distortion.\"},hardness:{type:ControlType.Number,title:\"Hardness\",min:0,max:100,unit:\"%\",step:1,defaultValue:48,displayStepper:true,description:\"Edge sharpness of the distortion brush. Low = soft wave, High = tight punch.\"},tail:{type:ControlType.Number,title:\"Tail\",min:0,max:100,unit:\"%\",step:1,defaultValue:8,displayStepper:true,description:\"How long the distortion lingers after the cursor slows down.\"},fluidity:{type:ControlType.Number,title:\"Fluidity\",min:0,max:100,unit:\"%\",step:1,defaultValue:25,displayStepper:true,description:\"Amount of swirling motion around the cursor path. Higher = more turbulent, flowing character.\"},dissipation:{type:ControlType.Number,title:\"Dissipation\",min:0,max:100,unit:\"%\",step:1,defaultValue:24,displayStepper:true,description:\"How quickly distortion fades after the cursor leaves. Higher = settles faster.\"},aberration:{type:ControlType.Number,title:\"Chromatic\",min:0,max:100,unit:\"%\",step:1,defaultValue:100,displayStepper:true,description:\"RGB color separation intensity during movement.\"},momentum:{type:ControlType.Number,title:\"Momentum\",min:0,max:100,unit:\"%\",step:1,defaultValue:50,displayStepper:true,description:\"How much the liquid carries its velocity forward. High = heavy elastic feel, Low = snappy.\"},hoverMultiplier:{type:ControlType.Number,title:\"Force Boost\",min:1,max:5,step:.1,defaultValue:2,displayStepper:true,description:\"Multiplies distortion force while the cursor is inside the component.\"},dprCap:{type:ControlType.Number,title:\"Max DPR\",min:1,max:3,step:.5,defaultValue:1.5,displayStepper:true,description:\"Device Pixel Ratio cap. Lower = better performance on high-DPI displays.\"}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LiquidGridFX\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"450\",\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth any\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"800\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LiquidGridFX.map"],"mappings":"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"}