import { useReactFlow } from "@xyflow/react" import { AlertCircle, Loader2, Maximize2, Play, Plus, ZoomIn, ZoomOut, } from "lucide-react" import { motion } from "motion/react" import type { ValidationIssue } from "@/client" import { Button } from "@/components/ui/button" import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover" import { Separator } from "@/components/ui/separator" import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip" import { slideUp, transitions } from "@/lib/motion" /** * The action bar, floating bottom-centre. Run is the one brand-secondary * affordance on this view; everything else stays quiet. */ export function FlowDock({ issues, running, onAddNode, onRun, onFocusNode, }: { issues: ValidationIssue[] running: boolean onAddNode: () => void onRun: () => void onFocusNode: (nodeId: string) => void }) { const { zoomIn, zoomOut, fitView } = useReactFlow() return ( Add a node (⌘K) Fit to screen {issues.length > 0 ? ( <>

Needs attention

    {issues.map((issue) => (
  • ))}
) : null}
) }