From e7aa72744823aa075e0df077faef5f71417478de Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Thu, 16 Jul 2026 15:41:39 +0800 Subject: [PATCH] unify placeholders --- packages/app/src/components/prompt-input-v2.tsx | 12 +++++++++++- packages/app/src/components/prompt-input.tsx | 7 ++----- .../app/src/components/prompt-input/placeholder.ts | 5 +++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/app/src/components/prompt-input-v2.tsx b/packages/app/src/components/prompt-input-v2.tsx index 7cf0cabb028..4797218fdf8 100644 --- a/packages/app/src/components/prompt-input-v2.tsx +++ b/packages/app/src/components/prompt-input-v2.tsx @@ -12,6 +12,7 @@ import { DialogSelectModelUnpaidV2 } from "@/components/dialog-select-model-unpa import type { PromptInputProps } from "@/components/prompt-input/contracts" import { normalizePromptHistoryEntry, promptLength, type PromptHistoryComment } from "@/components/prompt-input/history" import { createPersistedPromptInputHistory } from "@/components/prompt-input/history-store" +import { promptDesignPlaceholder, promptPlaceholder } from "@/components/prompt-input/placeholder" import { createPromptSubmit } from "@/components/prompt-input/submit" import { selectionFromLines, type SelectedLineRange, useFile } from "@/context/file" import { useComments } from "@/context/comments" @@ -194,7 +195,16 @@ export function usePromptInputV2Controller(props: PromptInputV2ControllerProps): return text.trim().length === 0 && attachments().length === 0 && commentCount() === 0 }) const stopping = createMemo(() => working() && blank()) - const designPlaceholder = () => (mode() === "shell" ? "git status" : "Ask anything, / for commands, @ for context...") + const placeholder = createMemo(() => + promptPlaceholder({ + mode: mode(), + commentCount: commentCount(), + example: mode() === "shell" ? "git status" : "", + suggest: false, + t: (key, params) => language.t(key as Parameters[0], params as never), + }), + ) + const designPlaceholder = () => promptDesignPlaceholder(mode(), placeholder()) const historyComments = () => { const byID = new Map(comments.all().map((item) => [`${item.file}\n${item.id}`, item] as const)) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 30fc5f6c8e4..f2eb2ad100d 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -78,7 +78,7 @@ import { PromptPopover, type AtOption, type SlashCommand } from "./prompt-input/ import { PromptContextItems } from "./prompt-input/context-items" import { PromptImageAttachments } from "./prompt-input/image-attachments" import { PromptDragOverlay } from "./prompt-input/drag-overlay" -import { promptPlaceholder } from "./prompt-input/placeholder" +import { promptDesignPlaceholder, promptPlaceholder } from "./prompt-input/placeholder" import { createPromptInputTransientState } from "./prompt-input/transient-state" import { showToast } from "@/utils/toast" import { ImagePreview } from "@opencode-ai/ui/image-preview" @@ -1450,10 +1450,7 @@ export const PromptInput: Component = (props) => { (p) => p, ) - const designPlaceholder = () => { - if (store.mode === "shell") return placeholder() - return "Ask anything, / for commands, @ for context..." - } + const designPlaceholder = () => promptDesignPlaceholder(store.mode, placeholder()) const modelControlState = createMemo(() => ({ loading: providersLoading(), diff --git a/packages/app/src/components/prompt-input/placeholder.ts b/packages/app/src/components/prompt-input/placeholder.ts index 6669f136147..cbb4c45b7e3 100644 --- a/packages/app/src/components/prompt-input/placeholder.ts +++ b/packages/app/src/components/prompt-input/placeholder.ts @@ -13,3 +13,8 @@ export function promptPlaceholder(input: PromptPlaceholderInput) { if (!input.suggest) return input.t("prompt.placeholder.simple") return input.t("prompt.placeholder.normal", { example: input.example }) } + +export function promptDesignPlaceholder(mode: PromptPlaceholderInput["mode"], placeholder: string) { + if (mode === "shell") return placeholder + return "Ask anything, / for commands, @ for context..." +}