66} from "@t3tools/contracts" ;
77import { memo } from "react" ;
88import GitActionsControl from "../GitActionsControl" ;
9- import { DiffIcon } from "lucide-react" ;
9+ import { DiffIcon , TerminalSquareIcon } from "lucide-react" ;
1010import { Badge } from "../ui/badge" ;
1111import { Tooltip , TooltipPopup , TooltipTrigger } from "../ui/tooltip" ;
1212import ProjectScriptsControl , { type NewProjectScriptInput } from "../ProjectScriptsControl" ;
@@ -24,13 +24,17 @@ interface ChatHeaderProps {
2424 preferredScriptId : string | null ;
2525 keybindings : ResolvedKeybindingsConfig ;
2626 availableEditors : ReadonlyArray < EditorId > ;
27+ terminalAvailable : boolean ;
28+ terminalOpen : boolean ;
29+ terminalToggleShortcutLabel : string | null ;
2730 diffToggleShortcutLabel : string | null ;
2831 gitCwd : string | null ;
2932 diffOpen : boolean ;
3033 onRunProjectScript : ( script : ProjectScript ) => void ;
3134 onAddProjectScript : ( input : NewProjectScriptInput ) => Promise < void > ;
3235 onUpdateProjectScript : ( scriptId : string , input : NewProjectScriptInput ) => Promise < void > ;
3336 onDeleteProjectScript : ( scriptId : string ) => Promise < void > ;
37+ onToggleTerminal : ( ) => void ;
3438 onToggleDiff : ( ) => void ;
3539}
3640
@@ -44,13 +48,17 @@ export const ChatHeader = memo(function ChatHeader({
4448 preferredScriptId,
4549 keybindings,
4650 availableEditors,
51+ terminalAvailable,
52+ terminalOpen,
53+ terminalToggleShortcutLabel,
4754 diffToggleShortcutLabel,
4855 gitCwd,
4956 diffOpen,
5057 onRunProjectScript,
5158 onAddProjectScript,
5259 onUpdateProjectScript,
5360 onDeleteProjectScript,
61+ onToggleTerminal,
5462 onToggleDiff,
5563} : ChatHeaderProps ) {
5664 return (
@@ -94,6 +102,30 @@ export const ChatHeader = memo(function ChatHeader({
94102 />
95103 ) }
96104 { activeProjectName && < GitActionsControl gitCwd = { gitCwd } activeThreadId = { activeThreadId } /> }
105+ < Tooltip >
106+ < TooltipTrigger
107+ render = {
108+ < Toggle
109+ className = "shrink-0"
110+ pressed = { terminalOpen }
111+ onPressedChange = { onToggleTerminal }
112+ aria-label = "Toggle terminal drawer"
113+ variant = "outline"
114+ size = "xs"
115+ disabled = { ! terminalAvailable }
116+ >
117+ < TerminalSquareIcon className = "size-3" />
118+ </ Toggle >
119+ }
120+ />
121+ < TooltipPopup side = "bottom" >
122+ { ! terminalAvailable
123+ ? "Terminal is unavailable until this thread has an active project."
124+ : terminalToggleShortcutLabel
125+ ? `Toggle terminal drawer (${ terminalToggleShortcutLabel } )`
126+ : "Toggle terminal drawer" }
127+ </ TooltipPopup >
128+ </ Tooltip >
97129 < Tooltip >
98130 < TooltipTrigger
99131 render = {
0 commit comments