"use client";
import { useEffect, useRef } from "react";
/**
* A faint glow that follows the pointer across a card.
*
* Drop it as the last child of any positioned element carrying Tailwind's
* `group` class — it finds its own parent, so the card itself can stay a
* server component and needs no props threaded through it:
*
*
* …
*
*
*
* The paint lives in `.spotlight` (globals.css); this only writes the pointer
* position. Nothing runs until the pointer is actually over the card, and the
* effect is disabled on touch screens, where `:hover` would keep it lit.
*/
export function Spotlight() {
const ref = useRef(null);
useEffect(() => {
const card = ref.current?.parentElement;
if (!card || !window.matchMedia("(hover: hover)").matches) return;
const onMove = (event: PointerEvent) => {
const rect = card.getBoundingClientRect();
card.style.setProperty("--spot-x", `${event.clientX - rect.left}px`);
card.style.setProperty("--spot-y", `${event.clientY - rect.top}px`);
};
card.addEventListener("pointermove", onMove);
return () => card.removeEventListener("pointermove", onMove);
}, []);
return ;
}