{"version":3,"file":"Magnet_button.CfCXK7IM.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/zR1v0IUyayONPgOfNlYu/8IOVSeGJpU3AKLg1orjv/Magnet_button.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect,useRef}from\"react\";import{motion,useMotionValue,useSpring}from\"framer-motion\";/**\n * 민감한 마그네틱 효과를 적용하는 HOC\n * @param Component - 마그네틱 효과를 적용할 컴포넌트\n */export function withMagnetResponsive(Component){return({style,xRangeFactor=.4,yRangeFactor=1.2,...restProps})=>{const[isHovered,setIsHovered]=useState(false);const ref=useRef(null);const x=useMotionValue(0);const y=useMotionValue(0);// 민감한 스프링 설정 (빠르게 반응)\nconst springX=useSpring(x,{damping:200,stiffness:600});const springY=useSpring(y,{damping:200,stiffness:600});useEffect(()=>{const handleMouseMove=e=>{if(!ref.current)return;const rect=ref.current.getBoundingClientRect();const centerX=rect.left+rect.width/2;const centerY=rect.top+rect.height/2;const distanceX=e.clientX-centerX;const distanceY=e.clientY-centerY;if(isHovered){x.set(distanceX*xRangeFactor)// x축에 대한 범위 확장 적용\n;y.set(distanceY*yRangeFactor)// y축에 대한 범위 확장 적용\n;}else{x.set(0);y.set(0);}};window.addEventListener(\"mousemove\",handleMouseMove);return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);};},[isHovered,x,y,xRangeFactor,yRangeFactor]);return /*#__PURE__*/_jsx(motion.div,{ref:ref,onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),style:{...style,x:springX,y:springY,position:\"relative\",zIndex:10,willChange:\"transform\",clipPath:\"inset(0%)\"},children:/*#__PURE__*/_jsx(Component,{...restProps})});};}/**\n * 부드러운 마그네틱 효과를 적용하는 HOC\n * @param Component - 마그네틱 효과를 적용할 컴포넌트\n */export function withMagnetGentle(Component){return({style,xRangeFactor=.1,yRangeFactor=.4,...restProps})=>{const[isHovered,setIsHovered]=useState(false);const ref=useRef(null);const x=useMotionValue(0);const y=useMotionValue(0);// 부드러운 스프링 설정 (느리게 반응)\nconst springX=useSpring(x,{damping:20,stiffness:20});const springY=useSpring(y,{damping:20,stiffness:20});useEffect(()=>{const handleMouseMove=e=>{if(!ref.current)return;const rect=ref.current.getBoundingClientRect();const centerX=rect.left+rect.width/2;const centerY=rect.top+rect.height/2;const distanceX=e.clientX-centerX;const distanceY=e.clientY-centerY;if(isHovered){x.set(distanceX*xRangeFactor)// x축에 대한 범위 확장 적용\n;y.set(distanceY*yRangeFactor)// y축에 대한 범위 확장 적용\n;}else{x.set(0);y.set(0);}};window.addEventListener(\"mousemove\",handleMouseMove);return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);};},[isHovered,x,y,xRangeFactor,yRangeFactor]);return /*#__PURE__*/_jsx(motion.div,{ref:ref,onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),style:{...style,x:springX,y:springY,position:\"relative\",zIndex:10,willChange:\"transform\",clipPath:\"inset(0%)\"},children:/*#__PURE__*/_jsx(Component,{...restProps})});};}export function MagnetOverride(Component){return props=>{const[isHovered,setIsHovered]=useState(false);const elementRef=useRef(null);const requestRef=useRef(null);const mousePos=useRef({x:0,y:0});const currentPos=useRef({x:0,y:0});// 커스터마이징 가능한 설정값\nconst xRangeFactor=props.xRangeFactor||.3;const yRangeFactor=props.yRangeFactor||.3;const smoothness=props.smoothness||.1;useEffect(()=>{const handleMouseMove=e=>{if(!elementRef.current||!isHovered)return;const rect=elementRef.current.getBoundingClientRect();const centerX=rect.left+rect.width/2;const centerY=rect.top+rect.height/2;mousePos.current={x:(e.clientX-centerX)*xRangeFactor,y:(e.clientY-centerY)*yRangeFactor};};const animate=()=>{if(!elementRef.current)return;// Lerp animation\ncurrentPos.current.x+=(mousePos.current.x-currentPos.current.x)*smoothness;currentPos.current.y+=(mousePos.current.y-currentPos.current.y)*smoothness;if(!isHovered){mousePos.current={x:0,y:0};currentPos.current.x+=(0-currentPos.current.x)*smoothness;currentPos.current.y+=(0-currentPos.current.y)*smoothness;}elementRef.current.style.transform=`translate(${currentPos.current.x}px, ${currentPos.current.y}px)`;requestRef.current=requestAnimationFrame(animate);};if(isHovered||Math.abs(currentPos.current.x)>.1||Math.abs(currentPos.current.y)>.1){window.addEventListener(\"mousemove\",handleMouseMove);requestRef.current=requestAnimationFrame(animate);}return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);if(requestRef.current){cancelAnimationFrame(requestRef.current);}};},[isHovered,xRangeFactor,yRangeFactor,smoothness]);return /*#__PURE__*/_jsx(\"div\",{ref:elementRef,onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),style:{display:\"inline-block\",width:\"100%\",height:\"100%\"},children:/*#__PURE__*/_jsx(Component,{...props})});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withMagnetGentle\":{\"type\":\"reactHoc\",\"name\":\"withMagnetGentle\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withMagnetResponsive\":{\"type\":\"reactHoc\",\"name\":\"withMagnetResponsive\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"MagnetOverride\":{\"type\":\"reactComponent\",\"name\":\"MagnetOverride\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Magnet_button.map"],"mappings":"6MAGG,SAAgB,EAAqB,EAAU,CAAC,OAAO,CAAC,QAAM,eAAa,GAAG,eAAa,IAAI,GAAG,KAAa,CAAC,GAAK,CAAC,EAAU,GAAcA,EAAS,GAAM,CAAO,EAAIC,EAAO,KAAK,CAAO,EAAE,EAAe,EAAE,CAAO,EAAE,EAAe,EAAE,CACrO,EAAQ,EAAU,EAAE,CAAC,QAAQ,IAAI,UAAU,IAAI,CAAC,CAAO,EAAQ,EAAU,EAAE,CAAC,QAAQ,IAAI,UAAU,IAAI,CAAC,CAEsF,OAFrF,MAAc,CAAC,IAAM,EAAgB,GAAG,CAAC,GAAG,CAAC,EAAI,QAAQ,OAAO,IAAM,EAAK,EAAI,QAAQ,uBAAuB,CAAO,EAAQ,EAAK,KAAK,EAAK,MAAM,EAAQ,EAAQ,EAAK,IAAI,EAAK,OAAO,EAAQ,EAAU,EAAE,QAAQ,EAAc,EAAU,EAAE,QAAQ,EAAW,GAAW,EAAE,IAAI,EAAU,EAAa,CACrZ,EAAE,IAAI,EAAU,EAAa,GACvB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAyD,OAArD,EAAO,iBAAiB,YAAY,EAAgB,KAAW,CAAC,EAAO,oBAAoB,YAAY,EAAgB,GAAK,CAAC,EAAU,EAAE,EAAE,EAAa,EAAa,CAAC,CAAqB,EAAK,EAAO,IAAI,CAAK,MAAI,iBAAiB,EAAa,GAAK,CAAC,iBAAiB,EAAa,GAAM,CAAC,MAAM,CAAC,GAAG,EAAM,EAAE,EAAU,EAAQ,SAAS,WAAW,OAAO,GAAG,WAAW,YAAY,SAAS,YAAY,CAAC,SAAsB,EAAK,EAAU,CAAC,GAAG,EAAU,CAAC,CAAC,CAAC,EAG3d,SAAgB,EAAiB,EAAU,CAAC,OAAO,CAAC,QAAM,eAAa,GAAG,eAAa,GAAG,GAAG,KAAa,CAAC,GAAK,CAAC,EAAU,GAAcD,EAAS,GAAM,CAAO,EAAIC,EAAO,KAAK,CAAO,EAAE,EAAe,EAAE,CAAO,EAAE,EAAe,EAAE,CAChO,EAAQ,EAAU,EAAE,CAAC,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAO,EAAQ,EAAU,EAAE,CAAC,QAAQ,GAAG,UAAU,GAAG,CAAC,CAE0F,OAFzF,MAAc,CAAC,IAAM,EAAgB,GAAG,CAAC,GAAG,CAAC,EAAI,QAAQ,OAAO,IAAM,EAAK,EAAI,QAAQ,uBAAuB,CAAO,EAAQ,EAAK,KAAK,EAAK,MAAM,EAAQ,EAAQ,EAAK,IAAI,EAAK,OAAO,EAAQ,EAAU,EAAE,QAAQ,EAAc,EAAU,EAAE,QAAQ,EAAW,GAAW,EAAE,IAAI,EAAU,EAAa,CACjZ,EAAE,IAAI,EAAU,EAAa,GACvB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAyD,OAArD,EAAO,iBAAiB,YAAY,EAAgB,KAAW,CAAC,EAAO,oBAAoB,YAAY,EAAgB,GAAK,CAAC,EAAU,EAAE,EAAE,EAAa,EAAa,CAAC,CAAqB,EAAK,EAAO,IAAI,CAAK,MAAI,iBAAiB,EAAa,GAAK,CAAC,iBAAiB,EAAa,GAAM,CAAC,MAAM,CAAC,GAAG,EAAM,EAAE,EAAU,EAAQ,SAAS,WAAW,OAAO,GAAG,WAAW,YAAY,SAAS,YAAY,CAAC,SAAsB,EAAK,EAAU,CAAC,GAAG,EAAU,CAAC,CAAC,CAAC,uBAZnb,IAA6C,IAA2D"}