import { useEffect, useRef, useState } from 'react'; import { LOCALE_LABEL, LOCALES, useI18n, type Locale } from '../i18n'; import { Icon } from './Icon'; /** * Compact language switcher rendered as a foot-pill in the entry view's * lower-left corner. Mirrors the "Local CLI ยท agent" pill so it doesn't * fight for visual weight, but remains discoverable for first-time users * who'd rather not dig into the settings dialog just to swap languages. */ export function LanguageMenu() { const { locale, setLocale } = useI18n(); const [open, setOpen] = useState(false); const wrapRef = useRef(null); useEffect(() => { if (!open) return; function onDown(e: MouseEvent) { if (!wrapRef.current) return; if (wrapRef.current.contains(e.target as Node)) return; setOpen(false); } function onKey(e: KeyboardEvent) { if (e.key === 'Escape') setOpen(false); } document.addEventListener('mousedown', onDown); document.addEventListener('keydown', onKey); return () => { document.removeEventListener('mousedown', onDown); document.removeEventListener('keydown', onKey); }; }, [open]); return (
{open ? (
{LOCALES.map((code) => { const active = locale === code; return ( ); })}
) : null}
); }