{"version":3,"file":"Trailing_Cursor.DqlODDFc.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/fzUj7jAasX2lou1iig5Q/vy1KHk7Zy54inEaEh96v/Trailing_Cursor.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef}from\"react\";/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export default function FluidTrailCursor(props){const{trailColor,trailLength,trailWidth,smoothness,damping,fadeOnLeave}=props;const canvasRef=useRef(null);const animationRef=useRef(null);const stateRef=useRef({mouseX:0,mouseY:0,cursorX:0,cursorY:0,velocityX:0,velocityY:0,trailPoints:[],cursorOpacity:1,targetOpacity:1});useEffect(()=>{const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");const state=stateRef.current;const resizeCanvas=()=>{canvas.width=window.innerWidth;canvas.height=window.innerHeight;};resizeCanvas();state.cursorX=window.innerWidth/2;state.cursorY=window.innerHeight/2;state.mouseX=state.cursorX;state.mouseY=state.cursorY;const handleMouseMove=e=>{state.mouseX=e.clientX;state.mouseY=e.clientY;};const handleMouseEnter=()=>{if(fadeOnLeave)state.targetOpacity=1;};const handleMouseLeave=()=>{if(fadeOnLeave)state.targetOpacity=0;};function hexToRgba(hex,alpha){const r=parseInt(hex.slice(1,3),16);const g=parseInt(hex.slice(3,5),16);const b=parseInt(hex.slice(5,7),16);return`rgba(${r}, ${g}, ${b}, ${alpha})`;}const animate=()=>{const deltaX=(state.mouseX-state.cursorX)*smoothness;const deltaY=(state.mouseY-state.cursorY)*smoothness;state.velocityX=damping*state.velocityX+deltaX;state.velocityY=damping*state.velocityY+deltaY;state.cursorX+=state.velocityX;state.cursorY+=state.velocityY;state.trailPoints.push({x:state.cursorX,y:state.cursorY});if(state.trailPoints.length>trailLength){state.trailPoints.shift();}state.cursorOpacity+=(state.targetOpacity-state.cursorOpacity)*.1;ctx.clearRect(0,0,canvas.width,canvas.height);for(let i=0;i<state.trailPoints.length-1;i++){const point1=state.trailPoints[i];const point2=state.trailPoints[i+1];const progress=(i+1)/state.trailPoints.length;const opacity=progress*state.cursorOpacity;const color=trailColor.startsWith(\"#\")?hexToRgba(trailColor,opacity):`rgba(${trailColor.match(/\\d+/g)?.slice(0,3).join(\",\")||\"255,97,78\"}, ${opacity})`;ctx.strokeStyle=color;ctx.lineWidth=trailWidth*progress;ctx.lineCap=\"round\";ctx.beginPath();ctx.moveTo(point1.x,point1.y);ctx.lineTo(point2.x,point2.y);ctx.stroke();}animationRef.current=requestAnimationFrame(animate);};document.addEventListener(\"mousemove\",handleMouseMove);document.addEventListener(\"mouseenter\",handleMouseEnter);document.addEventListener(\"mouseleave\",handleMouseLeave);window.addEventListener(\"resize\",resizeCanvas);animate();return()=>{document.removeEventListener(\"mousemove\",handleMouseMove);document.removeEventListener(\"mouseenter\",handleMouseEnter);document.removeEventListener(\"mouseleave\",handleMouseLeave);window.removeEventListener(\"resize\",resizeCanvas);if(animationRef.current){cancelAnimationFrame(animationRef.current);}};},[trailColor,trailLength,trailWidth,smoothness,damping,fadeOnLeave]);return /*#__PURE__*/_jsx(\"div\",{style:{position:\"fixed\",top:0,left:0,width:\"100vw\",height:\"100vh\",pointerEvents:\"none\",zIndex:9999},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"fixed\",top:0,left:0,width:\"100vw\",height:\"100vh\",pointerEvents:\"none\"}})});}FluidTrailCursor.defaultProps={trailColor:\"#0FEC9F\",trailLength:30,trailWidth:6,smoothness:.1,damping:.7,fadeOnLeave:true};addPropertyControls(FluidTrailCursor,{trailColor:{type:ControlType.Color,title:\"Trail Color\",defaultValue:\"#0FEC9F\",description:\"Color of the cursor trail\"},trailLength:{type:ControlType.Number,title:\"Trail Length\",defaultValue:30,min:5,max:100,step:1,displayStepper:true,description:\"Number of points in the trail\"},trailWidth:{type:ControlType.Number,title:\"Trail Width\",defaultValue:6,min:1,max:20,step:.5,displayStepper:true,description:\"Maximum width of the trail\"},smoothness:{type:ControlType.Number,title:\"Smoothness\",defaultValue:.1,min:.01,max:.5,step:.01,displayStepper:true,description:\"How quickly cursor follows mouse (lower = smoother)\"},damping:{type:ControlType.Number,title:\"Damping\",defaultValue:.7,min:.1,max:.99,step:.01,displayStepper:true,description:\"Velocity damping (higher = more momentum)\"},fadeOnLeave:{type:ControlType.Boolean,title:\"Fade on Leave\",defaultValue:true,description:\"Fade out when mouse leaves window\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FluidTrailCursor\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerSupportedLayoutHeight\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Trailing_Cursor.map"],"mappings":"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"}