Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
3439e3c
feat: Add placeholderText theme color for input placeholders
ariane-emory Dec 5, 2025
6fcea5f
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 6, 2025
a02ebc7
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 6, 2025
ec57d82
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 7, 2025
bb103b2
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 7, 2025
86cc178
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 7, 2025
e1876bc
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 7, 2025
319f6fd
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 8, 2025
e62a847
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 8, 2025
09a4a09
Fix TypeScript error: remove cacheKey from FileContents interface usage
ariane-emory Dec 8, 2025
1ac2ac7
Merge upstream/dev into fix/placeholder-color-5088
ariane-emory Dec 9, 2025
36dd035
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 9, 2025
2d3f1c5
tweak: use placeholderColor here as per bOo's request.
ariane-emory Dec 9, 2025
a2e9fe8
Merge branch 'fix/placeholder-color-5088' of github.com:ariane-emory/…
ariane-emory Dec 9, 2025
d3d50fb
chore: resync this file
ariane-emory Dec 9, 2025
5e9e093
Add placeholderColor prop to OpenTUI Textarea component
ariane-emory Dec 9, 2025
9c16374
Update OpenCode to use placeholderColor prop from opentui
ariane-emory Dec 9, 2025
70fe2aa
Merge branch 'fix/placeholder-color-5088' of github.com:ariane-emory/…
ariane-emory Dec 9, 2025
9c0a31c
Merge branch 'dev' into fix/placeholder-color-5088
ariane-emory Dec 9, 2025
19bb3e0
Merge branch 'dev' into fix/placeholder-color-5088
ariane-emory Dec 10, 2025
9d2587f
Merge branch 'dev' into fix/placeholder-color-5088
ariane-emory Dec 10, 2025
24b760d
Merge branch 'dev' into fix/placeholder-color-5088
ariane-emory Dec 10, 2025
f1780a9
Merge remote-tracking branch 'upstream/dev' into fix/placeholder-colo…
ariane-emory Dec 10, 2025
7183ae3
Fix TypeScript error: remove placeholderColor property
ariane-emory Dec 10, 2025
b5a9e66
Merge branch 'dev' into fix/placeholder-color-5088
ariane-emory Dec 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/console/app/public/theme.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"info": { "$ref": "#/definitions/colorValue" },
"text": { "$ref": "#/definitions/colorValue" },
"textMuted": { "$ref": "#/definitions/colorValue" },
"placeholderText": { "$ref": "#/definitions/colorValue" },
"background": { "$ref": "#/definitions/colorValue" },
"backgroundPanel": { "$ref": "#/definitions/colorValue" },
"backgroundElement": { "$ref": "#/definitions/colorValue" },
Expand Down
3 changes: 2 additions & 1 deletion packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BoxRenderable, TextareaRenderable, MouseEvent, PasteEvent, t, dim, fg, type KeyBinding } from "@opentui/core"
import { BoxRenderable, TextareaRenderable, MouseEvent, PasteEvent, type KeyBinding } from "@opentui/core"
import { createEffect, createMemo, type JSX, onMount, createSignal, onCleanup, Show, Switch, Match } from "solid-js"
import "opentui-spinner/solid"
import { useLocal } from "@tui/context/local"
Expand Down Expand Up @@ -657,6 +657,7 @@ export function Prompt(props: PromptProps) {
>
<textarea
placeholder={props.sessionID ? undefined : `Ask anything... "${PLACEHOLDERS[store.placeholder]}"`}

textColor={theme.text}
focusedTextColor={theme.text}
minHeight={1}
Expand Down
14 changes: 12 additions & 2 deletions packages/opencode/src/cli/cmd/tui/context/theme.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type ThemeColors = {
info: RGBA
text: RGBA
textMuted: RGBA
placeholderText: RGBA
selectedListItemText: RGBA
background: RGBA
backgroundPanel: RGBA
Expand Down Expand Up @@ -124,9 +125,10 @@ type ColorValue = HexColor | RefName | Variant | RGBA
type ThemeJson = {
$schema?: string
defs?: Record<string, HexColor | RefName>
theme: Omit<Record<keyof ThemeColors, ColorValue>, "selectedListItemText" | "backgroundMenu"> & {
theme: Omit<Record<keyof ThemeColors, ColorValue>, "selectedListItemText" | "backgroundMenu" | "placeholderText"> & {
selectedListItemText?: ColorValue
backgroundMenu?: ColorValue
placeholderText?: ColorValue
thinkingOpacity?: number
}
}
Expand Down Expand Up @@ -187,7 +189,7 @@ function resolveTheme(theme: ThemeJson, mode: "dark" | "light") {

const resolved = Object.fromEntries(
Object.entries(theme.theme)
.filter(([key]) => key !== "selectedListItemText" && key !== "backgroundMenu" && key !== "thinkingOpacity")
.filter(([key]) => key !== "selectedListItemText" && key !== "backgroundMenu" && key !== "placeholderText" && key !== "thinkingOpacity")
.map(([key, value]) => {
return [key, resolveColor(value as ColorValue)]
}),
Expand All @@ -210,6 +212,13 @@ function resolveTheme(theme: ThemeJson, mode: "dark" | "light") {
resolved.backgroundMenu = resolved.backgroundElement
}

// Handle placeholderText - optional with fallback to textMuted
if (theme.theme.placeholderText !== undefined) {
resolved.placeholderText = resolveColor(theme.theme.placeholderText)
} else {
resolved.placeholderText = resolved.textMuted
}

// Handle thinkingOpacity - optional with default of 0.6
const thinkingOpacity = theme.theme.thinkingOpacity ?? 0.6

Expand Down Expand Up @@ -402,6 +411,7 @@ function generateSystem(colors: TerminalColors, mode: "dark" | "light"): ThemeJs
// Text colors
text: fg,
textMuted,
placeholderText: textMuted,
selectedListItemText: bg,

// Background colors
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/ui/dialog-prompt.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export function DialogPrompt(props: DialogPromptProps) {
ref={(val: TextareaRenderable) => (textarea = val)}
initialValue={props.value}
placeholder={props.placeholder ?? "Enter text"}

textColor={theme.text}
focusedTextColor={theme.text}
cursorColor={theme.text}
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
focusedBackgroundColor={theme.backgroundPanel}
cursorColor={theme.primary}
focusedTextColor={theme.textMuted}
placeholderColor={theme.placeholderText}
ref={(r) => {
input = r
setTimeout(() => input.focus(), 1)
Expand Down
1 change: 1 addition & 0 deletions packages/web/public/theme.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"info": { "$ref": "#/definitions/colorValue" },
"text": { "$ref": "#/definitions/colorValue" },
"textMuted": { "$ref": "#/definitions/colorValue" },
"placeholderText": { "$ref": "#/definitions/colorValue" },
"selectedListItemText": { "$ref": "#/definitions/colorValue" },
"background": { "$ref": "#/definitions/colorValue" },
"backgroundPanel": { "$ref": "#/definitions/colorValue" },
Expand Down
Loading