From 86d16af6059378211615d8a9c2ab0c212ea93b23 Mon Sep 17 00:00:00 2001 From: David Hill Date: Fri, 13 Mar 2026 15:14:42 +0000 Subject: [PATCH 1/2] tui: reorganize prompt input controls Move auto-accept permissions into the footer dock and return file attach to the input edge so prompt actions are grouped more intuitively. Add extra input bottom spacing to keep placeholder text clear of the action buttons. --- packages/app/src/components/prompt-input.tsx | 115 +++++++++---------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 3b78e80334ab..44475316be66 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -121,7 +121,7 @@ export const PromptInput: Component = (props) => { let slashPopoverRef!: HTMLDivElement const mirror = { input: false } - const inset = 52 + const inset = 56 const space = `${inset}px` const scrollCursorIntoView = () => { @@ -1031,6 +1031,17 @@ export const PromptInput: Component = (props) => { if (!id) return permission.isAutoAcceptingDirectory(sdk.directory) return permission.isAutoAccepting(id, sdk.directory) }) + const acceptLabel = createMemo(() => + language.t(accepting() ? "command.permissions.autoaccept.disable" : "command.permissions.autoaccept.enable"), + ) + const toggleAccept = () => { + if (!params.id) { + permission.toggleAutoAcceptDirectory(sdk.directory) + return + } + + permission.toggleAutoAccept(params.id, sdk.directory) + } const { abort, handleSubmit } = createPromptSubmit({ info, @@ -1337,33 +1348,7 @@ export const PromptInput: Component = (props) => { }} /> -
0.5 ? "auto" : "none", - }} - > - - - - +
= (props) => {
-
+
0.5 ? "auto" : "none", + }} + >
@@ -1553,6 +1526,32 @@ export const PromptInput: Component = (props) => { variant="ghost" /> + + +
From fd6c931a439bbf3fc044314faa66513748d66fe5 Mon Sep 17 00:00:00 2001 From: David Hill Date: Fri, 13 Mar 2026 15:17:00 +0000 Subject: [PATCH 2/2] tui: polish footer dock controls Use base text color for the footer dock select controls so they read consistently with the rest of the composer. Replace the auto-accept permissions glyph with a shared shield icon to better match the action's meaning. --- packages/app/src/components/prompt-input.tsx | 18 +++++++----------- packages/ui/src/components/icon.tsx | 1 + 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 44475316be66..fd54de9a0644 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1441,8 +1441,8 @@ export const PromptInput: Component = (props) => { options={agentNames()} current={local.agent.current()?.name ?? ""} onSelect={local.agent.set} - class="capitalize max-w-[160px]" - valueClass="truncate text-13-regular" + class="capitalize max-w-[160px] text-text-base" + valueClass="truncate text-13-regular text-text-base" triggerStyle={control()} variant="ghost" /> @@ -1460,7 +1460,7 @@ export const PromptInput: Component = (props) => { as="div" variant="ghost" size="normal" - class="min-w-0 max-w-[320px] text-13-regular group" + class="min-w-0 max-w-[320px] text-13-regular text-text-base group" style={control()} onClick={() => dialog.show(() => )} > @@ -1491,7 +1491,7 @@ export const PromptInput: Component = (props) => { variant: "ghost", size: "normal", style: control(), - class: "min-w-0 max-w-[320px] text-13-regular group", + class: "min-w-0 max-w-[320px] text-13-regular text-text-base group", }} > @@ -1520,8 +1520,8 @@ export const PromptInput: Component = (props) => { current={local.model.variant.current() ?? "default"} label={(x) => (x === "default" ? language.t("common.default") : x)} onSelect={(x) => local.model.variant.set(x === "default" ? undefined : x)} - class="capitalize max-w-[160px]" - valueClass="truncate text-13-regular" + class="capitalize max-w-[160px] text-text-base" + valueClass="truncate text-13-regular text-text-base" triggerStyle={control()} variant="ghost" /> @@ -1545,11 +1545,7 @@ export const PromptInput: Component = (props) => { aria-label={acceptLabel()} aria-pressed={accepting()} > - + diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx index aacfa476b58a..e2eaf107a675 100644 --- a/packages/ui/src/components/icon.tsx +++ b/packages/ui/src/components/icon.tsx @@ -82,6 +82,7 @@ const icons = { check: ``, photo: ``, share: ``, + shield: ``, download: ``, menu: ``, server: ``,