import React, { useEffect, useRef, useState } from 'react'; interface InfoTooltipProps { text: string; } /** * Small "i" badge that toggles a tooltip on click. Closes on outside click * or Escape. * * @param {InfoTooltipProps} props * @return {React.ReactElement} */ export default function InfoTooltip({ text }: InfoTooltipProps) { const [open, setOpen] = useState(false); const popoverRef = useRef(null); useEffect(() => { if (!open) return; const handleOutside = (event: MouseEvent): void => { if ( popoverRef.current && event.target instanceof Node && !popoverRef.current.contains(event.target) ) { setOpen(false); } }; const handleEscape = (event: KeyboardEvent): void => { if (event.key === 'Escape') setOpen(false); }; document.addEventListener('mousedown', handleOutside); document.addEventListener('keydown', handleEscape); return () => { document.removeEventListener('mousedown', handleOutside); document.removeEventListener('keydown', handleEscape); }; }, [open]); return ( {open && (
{text}
)}
); }