{"version":3,"file":"MagneticHover_Prod.C2VaneZx.mjs","names":[],"sources":["https:/framerusercontent.com/modules/P3S2M04Yg53AO5F51mO2/eaBsANlQJkmWtjCGnTqd/MagneticHover_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,motion}from\"framer-motion\";/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n *\n * @framerDisableUnlink\n */export default function MagneticHover(props){const{distance,smoothing,hoverArea,enabled}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const id=generateInstanceId();const transition={damping:100,stiffness:mapRange(smoothing,0,100,2e3,50)};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 scale=useMotionValue(1);const springScale=useSpring(scale,transition);const ref=useRef(null);const containerRef=useRef(null);const parentRef=useRef(null);const isHoveringRef=useRef(false);const transformRef=useRef(null);const motionTransformRef=useRef(null);const styleRef=useRef(null);const hasSpringRef=useRef(smoothing!==0);const previousXRef=useRef(null);const previousYRef=useRef(null);const previousChildrenXRef=useRef(null);const previousChildrenYRef=useRef(null);const previousChildrenScaleRef=useRef(null);const previousStyleTransformRef=useRef(null);const previousChildrenStyleTransformsRef=useRef({});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);if(!enabled){scale.set(1);}else if(isHoveringRef.current&&props.children){scale.set(props.children.scale);}},[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();const computedStyle=window.getComputedStyle(parentRef.current);const parentTransform=calculateTransform(parentRef.current,computedStyle,xValue,yValue,1,previousXRef.current,previousYRef.current,1,previousStyleTransformRef.current);// Store parent's style transform\npreviousStyleTransformRef.current=parentRef.current.style.transform;// Handle children transforms\nlet childrenStyles=\"\";if(props.children){const children=parentRef.current.children;const scaleValue=hasSpringRef.current?springScale.get():scale.get();const childrenXValue=xValue*props.children.distance/distance;const childrenYValue=yValue*props.children.distance/distance;for(let i=0;i<children.length;i++){const child=children[i];if(child===containerRef.current){continue;}const childComputedStyle=window.getComputedStyle(child);const childTransform=calculateTransform(child,childComputedStyle,childrenXValue,childrenYValue,scaleValue,previousChildrenXRef.current,previousChildrenYRef.current,previousChildrenScaleRef.current,previousChildrenStyleTransformsRef.current[i]);// Store child's style transform\npreviousChildrenStyleTransformsRef.current[i]=child.style.transform;childrenStyles+=`\n\t\t\t\t\t\t[data-magnetichover=\"${id}\"] > :nth-child(${i+1}) { \n\t\t\t\t\t\t\ttransform: ${childTransform} !important \n\t\t\t\t\t\t}\n\t\t\t\t\t`;}previousChildrenXRef.current=childrenXValue;previousChildrenYRef.current=childrenYValue;previousChildrenScaleRef.current=scaleValue;}transformRef.current=parentTransform;styleRef.current.textContent=`\n\t\t\t\t[data-magnetichover=\"${id}\"] { transform: ${parentTransform} !important }\n\t\t\t\t${childrenStyles}\n\t\t\t`;previousXRef.current=xValue;previousYRef.current=yValue;};if(ref.current){const container=ref.current.parentElement;if(container){containerRef.current=container;const parent=container.parentElement;if(parent){parentRef.current=parent;parent.setAttribute(\"data-magnetichover\",id);motionTransformRef.current=motion(parent,\"transform\");}}}// Start the animation loop\nupdateTransform();// Cleanup function\nreturn()=>{if(animationFrameId){cancelAnimationFrame(animationFrameId);}};},[props.children]);useEffect(()=>{const handleMouseMove=event=>{if(!parentRef.current){return;}const element=parentRef.current;const rect=element.getBoundingClientRect();const mouseXPos=event.clientX;const mouseYPos=event.clientY;const isHovering=mouseXPos>=rect.left-hoverArea&&mouseXPos<=rect.right+hoverArea&&mouseYPos>=rect.top-hoverArea&&mouseYPos<=rect.bottom+hoverArea;isHoveringRef.current=isHovering;if(isHovering){const displacementX=mouseXPos-(rect.left+rect.width/2);const displacementY=mouseYPos-(rect.top+rect.height/2);const normalizedX=displacementX/(rect.width/2)*distance;const normalizedY=displacementY/(rect.height/2)*distance;mouseX.set(normalizedX);mouseY.set(normalizedY);scale.set(enabled&&props.children?props.children.scale:1);}else{mouseX.set(0);mouseY.set(0);scale.set(1);}};window.addEventListener(\"mousemove\",handleMouseMove);return()=>window.removeEventListener(\"mousemove\",handleMouseMove);},[distance,x,y,transition,enabled,props.children]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...props.style},children:/*#__PURE__*/_jsx(\"style\",{ref:styleRef})});}MagneticHover.displayName=\"Magnetic Hover\";addPropertyControls(MagneticHover,{enabled:{type:ControlType.Boolean,defaultValue:true},distance:{type:ControlType.Number,defaultValue:10,min:0,step:1,hidden:props=>!props.enabled},hoverArea:{type:ControlType.Number,defaultValue:10,min:0,step:1,hidden:props=>!props.enabled},children:{type:ControlType.Object,optional:true,controls:{distance:{type:ControlType.Number,defaultValue:10,min:0,step:1},scale:{type:ControlType.Number,defaultValue:1,min:0,step:.01}},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\";function 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);}function calculateTransform(element,computedStyle,xValue,yValue,scale=1,previousX,previousY,previousScale,previousStyleTransform){xValue=xValue||0;yValue=yValue||0;previousX=previousX||0;previousY=previousY||0;scale=scale||1;previousScale=previousScale||1;// Get transform\nconst computedTransform=computedStyle.transform;const styleTransform=element.style.transform;// Subtract previous values from current values for a single transform\nconst finalX=xValue-previousX;const finalY=yValue-previousY;const finalScale=scale/(previousScale||1)// Prevent division by zero\n;const translateTransform=`translate(${finalX.toFixed(3)}px, ${finalY.toFixed(3)}px)`;const transformWithScale=scale!==1?`${translateTransform} scale(${finalScale})`:translateTransform;let transform=transformWithScale;if(styleTransform&&styleTransform!==\"none\"){if(previousStyleTransform&&previousStyleTransform!==\"none\"){transform=`${transformWithScale} ${invertTransform(previousStyleTransform)} ${styleTransform}`;}else{transform=`${transformWithScale} ${styleTransform}`;}}return computedTransform&&computedTransform!==\"none\"?`${transform} ${computedTransform}`:transform;}function invertTransform(transformString){const transforms=transformString.match(/\\w+\\([^)]+\\)/g)||[];const invertedTransforms=transforms.reverse().map(transform=>{const[func,valuesString]=transform.match(/(\\w+)\\(([^)]+)\\)/).slice(1);const values=valuesString.split(\",\").map(v=>v.trim());const invertNumber=v=>{const[_,sign,num,unit]=v.match(/^(-?)(\\d*\\.?\\d+)(\\D*)$/);return`${sign?\"\":\"-\"}${num}${unit}`;};switch(func.toLowerCase()){case\"translate\":case\"translate3d\":case\"translatex\":case\"translatey\":case\"translatez\":return`${func}(${values.map(invertNumber).join(\", \")})`;case\"scale\":case\"scale3d\":return`${func}(${values.map(v=>1/parseFloat(v)).join(\", \")})`;case\"scalex\":case\"scaley\":case\"scalez\":return`${func}(${1/parseFloat(values[0])})`;case\"rotate\":case\"rotatex\":case\"rotatey\":case\"rotatez\":return`${func}(${invertNumber(values[0])})`;case\"rotate3d\":const rotateValues=values.map(parseFloat);return`${func}(${rotateValues[0]}, ${rotateValues[1]}, ${rotateValues[2]}, ${invertNumber(values[3])})`;case\"skew\":case\"skewx\":case\"skewy\":return`${func}(${values.map(invertNumber).join(\", \")})`;case\"matrix\":case\"matrix3d\":console.warn(`Inverting ${func} is not supported. Returning original.`);return transform;default:console.warn(`Unknown transform function: ${func}. Returning original.`);return transform;}});return invertedTransforms.join(\" \");}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MagneticHover\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MagneticHover_Prod.map"],"mappings":"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"}