From 0c0ee849a630f125a8f08c10ee71dfdbc6b7c7ce Mon Sep 17 00:00:00 2001 From: schererleander Date: Fri, 27 Jun 2025 00:42:58 +0200 Subject: chore --- src/components/Card.tsx | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/components/Card.tsx (limited to 'src/components/Card.tsx') diff --git a/src/components/Card.tsx b/src/components/Card.tsx new file mode 100644 index 0000000..e71cf33 --- /dev/null +++ b/src/components/Card.tsx @@ -0,0 +1,82 @@ +import { useRef, useState } from "react"; + +function Icon() { + return ; +} + +interface Props { + title: string; + body: string; + href?: string; + imgSrc?: string; +} + +export default function CardLink({ title, body, href, imgSrc }: Props) { + const divRef = useRef(null); + const [position, setPosition] = useState({ x: 0, y: 0 }); + const [opacity, setOpacity] = useState(0); + + const handleMouseMove: React.MouseEventHandler = (e) => { + if (!divRef.current) return; + const rect = divRef.current.getBoundingClientRect(); + setPosition({ x: e.clientX - rect.left, y: e.clientY - rect.top }); + }; + + const handleMouseEnter = () => setOpacity(0.6); + const handleMouseLeave = () => setOpacity(0); + + return ( +
window.open(href, "_blank", "noopener,noreferrer"), + role: "link", + tabIndex: 0, + })} + > + {/* Spotlight overlay - light */} +
+ + {/* Spotlight overlay - dark mode */} +
+ + {/* Content */} + {imgSrc && ( + {title} + )} +
+

{title}

+

{body}

+
+ {href && } +
+ ); +} -- cgit v1.3.1