import { Check, Moon, Settings, Sun, Trash2 } from "lucide-react"; import { useEffect, useRef } from "react"; import { formatBytes } from "../lib/format"; interface SettingsMenuProps { open: boolean; dark: boolean; addSpecialTokens: boolean; cacheCleared: boolean; cacheSizeBytes: number | null; onOpenChange: (open: boolean) => void; onDarkChange: (dark: boolean) => void; onAddSpecialTokensChange: (value: boolean) => void; onClearCache: () => void; } export function SettingsMenu({ open, dark, addSpecialTokens, cacheCleared, cacheSizeBytes, onOpenChange, onDarkChange, onAddSpecialTokensChange, onClearCache, }: SettingsMenuProps) { const containerRef = useRef(null); useEffect(() => { if (!open) return; const closeOnOutsideClick = (event: PointerEvent) => { if (!containerRef.current?.contains(event.target as Node)) onOpenChange(false); }; const closeOnEscape = (event: KeyboardEvent) => { if (event.key === "Escape") onOpenChange(false); }; document.addEventListener("pointerdown", closeOnOutsideClick); document.addEventListener("keydown", closeOnEscape); return () => { document.removeEventListener("pointerdown", closeOnOutsideClick); document.removeEventListener("keydown", closeOnEscape); }; }, [open, onOpenChange]); return (
{open ? (

显示与编码

) : null}
); }