{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/FJ6Tdhm43j9BNWb0QHUP/HROIR0neEhhanzpkDWlQ/ParallaxFloating_Prod.js"],
  "sourcesContent": ["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useRef,useMemo}from\"react\";import{useMotionValue,useSpring}from\"framer-motion\";/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n *\n * @framerDisableUnlink\n */export default function ParallaxFloating(props){const{distance,direction,smoothing,enabled}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const id=generateInstanceId();const transition={damping:100,stiffness:mapRange(smoothing,0,100,2e3,50)};const offset=distance*(direction===\"away\"?-1:1);const mouseX=useMotionValue(0);const mouseY=useMotionValue(0);const x=useMotionValue(0);const y=useMotionValue(0);const springX=useSpring(x,transition);const springY=useSpring(y,transition);const ref=useRef(null);const parentRef=useRef(null);const transformRef=useRef(null);const styleRef=useRef(null);const hasSpringRef=useRef(smoothing!==0);const previousXRef=useRef(null);const previousYRef=useRef(null);useEffect(()=>{const unsubscribeX=mouseX.onChange(v=>x.set(enabled?v:0));const unsubscribeY=mouseY.onChange(v=>y.set(enabled?v:0));return()=>{unsubscribeX();unsubscribeY();};},[enabled,mouseX,mouseY,x,y]);useEffect(()=>{x.set(enabled?mouseX.get():0);y.set(enabled?mouseY.get():0);},[enabled]);useEffect(()=>{hasSpringRef.current=smoothing!==0;},[smoothing]);useEffect(()=>{let animationFrameId;const updateTransform=()=>{if(isCanvas){return;}animationFrameId=requestAnimationFrame(updateTransform);if(!parentRef.current||!styleRef.current){return;}const xValue=hasSpringRef.current?springX.get():x.get();const yValue=hasSpringRef.current?springY.get():y.get();// Get computed styles to capture all existing transforms\nconst computedStyle=window.getComputedStyle(parentRef.current);const existingTransform=computedStyle.transform;// Subtract previous values from current values for a single transform\nconst finalX=xValue-(previousXRef.current||0);const finalY=yValue-(previousYRef.current||0);const translateTransform=`translate(${finalX.toFixed(3)}px, ${finalY.toFixed(3)}px)`;// Combine with existing transforms\nconst newTransform=existingTransform&&existingTransform!==\"none\"?`${translateTransform} ${existingTransform}`:translateTransform;transformRef.current=newTransform;styleRef.current.textContent=`\n\t\t\t\tdiv[data-parallaxfloating=\"${id}\"] { transform: ${newTransform} !important }\n\t\t\t`;previousXRef.current=xValue;previousYRef.current=yValue;};if(ref.current){const container=ref.current.parentElement;if(container){const parent=container.parentElement;if(parent){parentRef.current=parent;parent.setAttribute(\"data-parallaxfloating\",id);}}}// Start the animation loop\nupdateTransform();// Cleanup function\nreturn()=>{if(animationFrameId){cancelAnimationFrame(animationFrameId);}};},[]);useEffect(()=>{const handleMouseMove=event=>{const mouseXPos=event.clientX;const mouseYPos=event.clientY;const centerX=window.innerWidth/2;const centerY=window.innerHeight/2;const normalizedX=(mouseXPos-centerX)/centerX*offset;const normalizedY=(mouseYPos-centerY)/centerY*offset;mouseX.set(normalizedX);mouseY.set(normalizedY);};window.addEventListener(\"mousemove\",handleMouseMove);return()=>window.removeEventListener(\"mousemove\",handleMouseMove);},[offset,smoothing,enabled]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...props.style},children:/*#__PURE__*/_jsx(\"style\",{ref:styleRef})});}ParallaxFloating.displayName=\"Parallax Floating\";addPropertyControls(ParallaxFloating,{enabled:{type:ControlType.Boolean,defaultValue:true},direction:{type:ControlType.Enum,defaultValue:\"away\",options:[\"toward\",\"away\"],optionTitles:[\"Toward\",\"Away\"],displaySegmentedControl:true},distance:{type:ControlType.Number,title:\"Speed\",defaultValue:25,min:0,step:1,hidden:props=>!props.enabled},smoothing:{type:ControlType.Number,defaultValue:50,min:0,max:100,step:1,description:\"More components at [Framer University](https://frameruni.link/cc).\"}});const CHARACTERS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";const generateInstanceId=()=>{const id=useMemo(()=>{let result=\"\";for(let i=0;i<13;i++){result+=CHARACTERS.charAt(Math.floor(Math.random()*CHARACTERS.length));}return result;},[]);return id;};function mapRange(value,fromLow,fromHigh,toLow,toHigh){if(fromLow===fromHigh){return toLow;}const percentage=(value-fromLow)/(fromHigh-fromLow);return toLow+percentage*(toHigh-toLow);}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ParallaxFloating\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ParallaxFloating_Prod.map"],
  "mappings": "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",
  "names": ["ParallaxFloating", "props", "distance", "direction", "smoothing", "enabled", "isCanvas", "RenderTarget", "id", "generateInstanceId", "transition", "mapRange", "offset", "mouseX", "useMotionValue", "mouseY", "x", "y", "springX", "useSpring", "springY", "ref", "pe", "parentRef", "transformRef", "styleRef", "hasSpringRef", "previousXRef", "previousYRef", "ue", "unsubscribeX", "v", "unsubscribeY", "animationFrameId", "updateTransform", "xValue", "yValue", "existingTransform", "window", "finalX", "finalY", "translateTransform", "newTransform", "container", "parent", "handleMouseMove", "event", "mouseXPos", "mouseYPos", "centerX", "centerY", "normalizedX", "normalizedY", "p", "addPropertyControls", "ControlType", "CHARACTERS", "se", "result", "i", "value", "fromLow", "fromHigh", "toLow", "toHigh", "percentage"]
}
