"use client"; import { useEffect, useRef, useState } from "react"; function RefreshIcon() { return ; } function ShareIcon() { return ; } type ReportActionsProps = { loading: boolean; onReinspect: () => void; onInspectAnother: () => void; onShare: () => void; onExportJson: () => void; onExportMarkdown: () => void; }; export function ReportActions({ loading, onReinspect, onInspectAnother, onShare, onExportJson, onExportMarkdown }: ReportActionsProps) { const [mobileOpen, setMobileOpen] = useState(false); const [desktopExportOpen, setDesktopExportOpen] = useState(false); const [mobileExportOpen, setMobileExportOpen] = useState(false); const desktopRef = useRef(null); const mobileRef = useRef(null); const close = () => { setMobileOpen(false); setDesktopExportOpen(false); setMobileExportOpen(false); }; useEffect(() => { if (!mobileOpen && !desktopExportOpen && !mobileExportOpen) return; const onKeyDown = (event: KeyboardEvent) => { if (event.key === "Escape") close(); }; const onPointerDown = (event: PointerEvent) => { if (![desktopRef.current, mobileRef.current].some((element) => element?.contains(event.target as Node))) close(); }; document.addEventListener("keydown", onKeyDown); document.addEventListener("pointerdown", onPointerDown); return () => { document.removeEventListener("keydown", onKeyDown); document.removeEventListener("pointerdown", onPointerDown); }; }, [mobileOpen, desktopExportOpen, mobileExportOpen]); const controls = (variant: "desktop" | "mobile") => { const exportOpen = variant === "desktop" ? desktopExportOpen : mobileExportOpen; const setExportOpen = variant === "desktop" ? setDesktopExportOpen : setMobileExportOpen; const exportId = variant + "-export-options"; return <> { close(); onReinspect(); }} disabled={loading}>{loading ? "Inspecting…" : "Re-inspect"} { close(); onInspectAnother(); }}>Inspect another host { close(); onShare(); }}>Share setExportOpen((open) => !open)}>Export ⌄{exportOpen && { onExportJson(); close(); }}>JSON { onExportMarkdown(); close(); }}>Markdown} >; }; return <>{controls("desktop")} setMobileOpen((open) => !open)}>Actions ⌄{mobileOpen && {controls("mobile")}}>; }