"use client"; import { GitBranchIcon, ReloadIcon } from "@/ui/icons"; import { Input, Button } from "@/ui"; import type { GitAction, GitRef, GitState } from "@/features/agent/contracts"; import { gitDiffHeaderTitle } from "@/features/agent/ui/git-diff-panel-model"; export function GitPanelHeader({ cwd, loading, payload, onReload, }: { cwd: string | null; loading: boolean; payload: Partial | null; onReload: () => Promise; }) { return (
{gitDiffHeaderTitle(payload, cwd)}
); } export function GitWorkflowBar({ payload, loading, draftBranch, commitMessage, onDraftBranch, onCommitMessage, onRun, }: { payload: (Partial & { error?: string }) | null; loading: boolean; draftBranch: string; commitMessage: string; onDraftBranch: (value: string) => void; onCommitMessage: (value: string) => void; onRun: (action: GitAction) => Promise; }) { if (!payload?.isRepo) return null; const dirty = (payload.status?.length ?? 0) > 0; return (
onDraftBranch(event.target.value)} placeholder="new branch" className="h-7 min-w-0 flex-1 rounded-md border border-(--border)/80 bg-(--color-input) px-2 text-(--fg) outline-none focus:border-(--border-hover)" /> {payload.prUrl ? ( PR ) : null}
onCommitMessage(event.target.value)} placeholder={dirty ? "commit message" : "working tree clean"} disabled={!dirty} className="h-7 min-w-0 flex-1 rounded-md border border-(--border)/80 bg-(--color-input) px-2 text-(--fg) outline-none disabled:opacity-45 focus:border-(--border-hover)" /> +{payload.additions ?? 0}{" "} -{payload.deletions ?? 0}{" "} {payload.status?.length ?? 0} files
); } function RefSelect({ refs, branch, loading, onRun, }: { refs: GitRef[]; branch?: string | null; loading: boolean; onRun: (action: GitAction) => Promise; }) { return ( ); }