import React, { useState, useEffect, useRef } from "react" export const TokenChip = ({ token, logprob, threshold, replacements, onReplace }: { token: string, logprob: number, threshold: number, replacements: string[], onReplace: (newToken: string) => void }) => { const [isExpanded, setIsExpanded] = useState(false); const dropdownRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsExpanded(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, []); const handleClick = () => { if (logprob < threshold && replacements.length > 0) { setIsExpanded(true); } } const handleReplacement = (event: React.ChangeEvent) => { const newToken = event.target.value if (newToken !== token) { onReplace(newToken) } setIsExpanded(false); } return ( {token} {isExpanded && ( )} ) }