import { memo, useEffect, useRef, useState } from "react"; import { useStyletron } from "baseui"; import { LabelXSmall } from "baseui/typography"; import { History } from "lucide-react"; import { useFoundryTokens } from "../../app/theme"; import { Tooltip } from "./ui"; import { formatMessageTimestamp, type HistoryEvent } from "./view-model"; export const HistoryMinimap = memo(function HistoryMinimap({ events, onSelect }: { events: HistoryEvent[]; onSelect: (event: HistoryEvent) => void }) { const [css] = useStyletron(); const t = useFoundryTokens(); const [open, setOpen] = useState(false); const containerRef = useRef(null); useEffect(() => { if (!open) return; const handleClick = (e: MouseEvent) => { if (containerRef.current && !containerRef.current.contains(e.target as Node)) { setOpen(false); } }; document.addEventListener("mousedown", handleClick); return () => document.removeEventListener("mousedown", handleClick); }, [open]); if (events.length === 0) { return null; } return (
setOpen((prev) => !prev)} onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") setOpen((prev) => !prev); }} className={css({ width: "26px", height: "26px", borderRadius: "6px", display: "flex", alignItems: "center", justifyContent: "center", cursor: "pointer", color: open ? t.textSecondary : t.textTertiary, backgroundColor: open ? t.interactiveHover : "transparent", transition: "background 200ms ease, color 200ms ease", ":hover": { color: t.textSecondary, backgroundColor: t.interactiveHover }, })} >
{open ? (
Task events {events.length}
{events.map((event) => ( ))}
) : null}
); });