import { useEffect, useRef, useState } from 'react'; import { RailAction } from '../../ui/RailAction.js'; export function useDiagnosticsFeature() { const [isOpen, setIsOpen] = useState(false); const panelRef = useRef(null); const toggleRef = useRef(null); const closeRef = useRef(null); useEffect(() => { if (!isOpen) return undefined; const frame = requestAnimationFrame(() => closeRef.current?.focus()); const closeDiagnostics = (event: PointerEvent | KeyboardEvent) => { if (event.type === 'keydown' && (event as KeyboardEvent).key !== 'Escape') return; if (event.type !== 'keydown' && ( panelRef.current?.contains(event.target as Node) || toggleRef.current?.contains(event.target as Node) )) return; setIsOpen(false); }; document.addEventListener('pointerdown', closeDiagnostics); document.addEventListener('keydown', closeDiagnostics); return () => { cancelAnimationFrame(frame); document.removeEventListener('pointerdown', closeDiagnostics); document.removeEventListener('keydown', closeDiagnostics); requestAnimationFrame(() => { if (panelRef.current?.contains(document.activeElement)) toggleRef.current?.focus(); }); }; }, [isOpen]); return { isOpen, panelRef, toggleRef, closeRef, close: () => setIsOpen(false), toggle: () => setIsOpen((open) => !open), }; } export type DiagnosticsFeature = ReturnType; export function DiagnosticsToggle({ feature, open, onToggle, }: { feature: DiagnosticsFeature; open: boolean; onToggle: () => void; }) { return ; }