import { motion } from "framer-motion"; import { useState, Dispatch, SetStateAction } from "react"; export type OptionProps = { Icon: any; title: string; selected?: string; setSelected?: Dispatch>; open: boolean; notifs?: number; active?: boolean; }; const Option = ({ Icon, title, selected, setSelected, open, notifs, active }: OptionProps) => { const [hovered, setHovered] = useState(false); const isActive = active ?? selected === title; return ( setSelected?.(title)} onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)} className={`relative flex h-12 w-full px-3 items-center rounded-xl transition-all duration-200 cursor-pointer group ${ isActive ? "bg-gradient-to-r from-emerald-500 to-green-500 text-white shadow-lg shadow-emerald-500/25" : "text-slate-600 hover:bg-gradient-to-r hover:from-slate-100 hover:to-slate-200/50 hover:text-slate-800" }`} whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} > {/* Active indicator */} {isActive && ( )}
{open && ( {title} )} {/* Tooltip for collapsed state */} {!open && hovered && (
{title} {/* Tooltip arrow */}
)} {/* Notification badge */} {notifs && open && ( {notifs} )} {/* Hover effect overlay */} {hovered && !isActive && ( )}
); }; export default Option;