const { useEffect, useMemo, useRef, useState } = React; export function DropdownField({ id, value, onChange, options, placeholder = "Выберите значение", disabled = false, className = "", ariaLabel = "", }) { const rootRef = useRef(null); const [open, setOpen] = useState(false); const normalizedOptions = useMemo( () => (Array.isArray(options) ? options : []).map((option) => ({ value: String(option?.value ?? ""), label: String(option?.label ?? option?.value ?? ""), disabled: Boolean(option?.disabled), })), [options] ); const currentValue = String(value ?? ""); const currentOption = normalizedOptions.find((option) => option.value === currentValue) || null; useEffect(() => { if (!open) return undefined; const handlePointerDown = (event) => { if (rootRef.current && !rootRef.current.contains(event.target)) setOpen(false); }; const handleKeyDown = (event) => { if (event.key === "Escape") setOpen(false); }; document.addEventListener("mousedown", handlePointerDown); document.addEventListener("keydown", handleKeyDown); return () => { document.removeEventListener("mousedown", handlePointerDown); document.removeEventListener("keydown", handleKeyDown); }; }, [open]); useEffect(() => { if (disabled && open) setOpen(false); }, [disabled, open]); return (