"use client";
// Adapted from Magic UI (MIT). See THIRD_PARTY_NOTICES.md.
import { type ComponentProps } from "react";
export function MagicCard({
className = "",
children,
onPointerMove,
onPointerLeave,
...props
}: ComponentProps<"div">) {
return (
{
onPointerMove?.(event);
if (
event.defaultPrevented ||
event.pointerType === "touch" ||
matchMedia("(prefers-reduced-motion: reduce)").matches
)
return;
const rect = event.currentTarget.getBoundingClientRect();
event.currentTarget.style.setProperty(
"--magic-card-x",
`${event.clientX - rect.left}px`,
);
event.currentTarget.style.setProperty(
"--magic-card-y",
`${event.clientY - rect.top}px`,
);
}}
onPointerLeave={(event) => {
onPointerLeave?.(event);
if (!event.defaultPrevented) {
event.currentTarget.style.removeProperty("--magic-card-x");
event.currentTarget.style.removeProperty("--magic-card-y");
}
}}
>
{children}
);
}