// Command palette v2 — scenarios, steps, tour, scenes, recents. import { useEffect, useMemo } from "react"; import { Command } from "cmdk"; import { useApp, scenarioById } from "../state/store"; import { Play, Branch, Bot, Check, Sparkles, Home, History as HistoryIcon, Layers, Search, Refresh } from "./icons"; export default function CommandBar() { const open = useApp((s) => s.cmdOpen); const setOpen = useApp((s) => s.setCmdOpen); const setScenarioId = useApp((s) => s.setScenarioId); const setSelectedStepId = useApp((s) => s.setSelectedStepId); const startTour = useApp((s) => s.startTour); const setScene = useApp((s) => s.setScene); const recents = useApp((s) => s.recents); const scenarioId = useApp((s) => s.scenarioId); const pushRecent = useApp((s) => s.pushRecent); const scenarios = useApp((s) => s.scenarios); const mode = useApp((s) => s.mode); const setMode = useApp((s) => s.setMode); const pushToast = useApp((s) => s.pushToast); const sc = scenarioById(scenarioId); const previewAction = (label: string) => { pushToast("info", `${label} is preview-only in this demo. Wire to /api/runtime/transactions to make it real.`); }; useEffect(() => { const onKey = (e: KeyboardEvent) => { if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { e.preventDefault(); setOpen(!open); } if (e.key === "Escape" && open) setOpen(false); }; document.addEventListener("keydown", onKey); return () => document.removeEventListener("keydown", onKey); }, [open, setOpen]); const stepItems = useMemo(() => sc?.steps ?? [], [sc]); if (!open) return null; const close = () => setOpen(false); return (