YOUSEF2434's picture
Upload 96 files
a566fb0 verified
import React, { useState } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
export default function KeyTermBadge({ term, definition, color = "cyan" }) {
const [showDefinition, setShowDefinition] = useState(false);
const colors = {
cyan: "bg-cyan-500/20 text-cyan-300 border-cyan-500/30 hover:bg-cyan-500/30",
purple: "bg-purple-500/20 text-purple-300 border-purple-500/30 hover:bg-purple-500/30",
pink: "bg-pink-500/20 text-pink-300 border-pink-500/30 hover:bg-pink-500/30",
green: "bg-emerald-500/20 text-emerald-300 border-emerald-500/30 hover:bg-emerald-500/30",
yellow: "bg-yellow-500/20 text-yellow-300 border-yellow-500/30 hover:bg-yellow-500/30"
};
return (
<span className="relative inline-block">
<motion.button
className={`px-3 py-1 rounded-lg border ${colors[color]} font-semibold text-sm transition-colors cursor-pointer`}
onClick={() => setShowDefinition(!showDefinition)}
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
>
{term}
</motion.button>
<AnimatePresence>
{showDefinition && (
<motion.div
initial={{ opacity: 0, y: 10, scale: 0.9 }}
animate={{ opacity: 1, y: 0, scale: 1 }}
exit={{ opacity: 0, y: 10, scale: 0.9 }}
className="absolute z-50 left-0 top-full mt-2 p-3 rounded-xl bg-slate-800 border border-white/20 shadow-xl min-w-[200px] max-w-[300px]"
>
<p className="text-white/90 text-sm">{definition}</p>
<div className="absolute -top-2 left-4 w-4 h-4 bg-slate-800 border-l border-t border-white/20 transform rotate-45" />
</motion.div>
)}
</AnimatePresence>
</span>
);
}