UNPKG

reactbits-mcp-server

Version:

MCP Server for React Bits - Access 99+ React components with animations, backgrounds, and UI elements

56 lines (47 loc) 1.53 kB
import { useRef, useState } from "react"; const SpotlightCard = ({ children, className = "", spotlightColor = "rgba(255, 255, 255, 0.25)" }) => { const divRef = useRef(null); const [isFocused, setIsFocused] = useState(false); const [position, setPosition] = useState({ x: 0, y: 0 }); const [opacity, setOpacity] = useState(0); const handleMouseMove = (e) => { if (!divRef.current || isFocused) return; const rect = divRef.current.getBoundingClientRect(); setPosition({ x: e.clientX - rect.left, y: e.clientY - rect.top }); }; const handleFocus = () => { setIsFocused(true); setOpacity(0.6); }; const handleBlur = () => { setIsFocused(false); setOpacity(0); }; const handleMouseEnter = () => { setOpacity(0.6); }; const handleMouseLeave = () => { setOpacity(0); }; return ( <div ref={divRef} onMouseMove={handleMouseMove} onFocus={handleFocus} onBlur={handleBlur} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} className={`relative rounded-3xl border border-neutral-800 bg-neutral-900 overflow-hidden p-8 ${className}`} > <div className="pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-500 ease-in-out" style={{ opacity, background: `radial-gradient(circle at ${position.x}px ${position.y}px, ${spotlightColor}, transparent 80%)`, }} /> {children} </div> ); }; export default SpotlightCard;