"use client"; import React, { useRef, useState } from "react"; import { motion } from "motion/react"; export const MagneticButton = ({ children, strength = 0.8, maxDistance = 100, }: { children: React.ReactNode; strength?: number; maxDistance?: number; }) => { const ref = useRef(null); const [position, setPosition] = useState({ x: 0, y: 0 }); const handleMouseMove = (e: React.MouseEvent) => { if (!ref.current) return; const { width, height, left, top } = ref.current.getBoundingClientRect(); const { clientX, clientY } = e; let x = (clientX - (left + width / 2)) * strength; let y = (clientY - (top + height / 2)) * strength; const distance = Math.hypot(x, y); if (distance > maxDistance) { const scale = maxDistance / distance; x *= scale; y *= scale; } setPosition({ x, y }); }; const handleMouseLeave = () => { setPosition({ x: 0, y: 0 }); }; const hasMoved = position.x !== 0 || position.y !== 0; return (
{children}
); };