summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYoussef Achy <[email protected]>2025-11-25 13:53:01 -0600
committerGitHub <[email protected]>2025-11-25 13:53:01 -0600
commit3366a71155b3613a8332219d4898e135753b94d7 (patch)
tree8e79fc08c93cb5edf462a1d8954afc9b8cd6e788
parentcd678044129ef8a183773e3544f2265696645675 (diff)
downloadopencode-3366a71155b3613a8332219d4898e135753b94d7.tar.gz
opencode-3366a71155b3613a8332219d4898e135753b94d7.zip
Theme selector UX (current theme indicator and easier selection) (#4623)
Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Aiden Cline <[email protected]>
-rw-r--r--packages/opencode/src/cli/cmd/tui/component/dialog-theme-list.tsx5
-rw-r--r--packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx18
2 files changed, 18 insertions, 5 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-theme-list.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-theme-list.tsx
index 5240603f8..c6d22be7b 100644
--- a/packages/opencode/src/cli/cmd/tui/component/dialog-theme-list.tsx
+++ b/packages/opencode/src/cli/cmd/tui/component/dialog-theme-list.tsx
@@ -14,10 +14,6 @@ export function DialogThemeList() {
let ref: DialogSelectRef<string>
const initial = theme.selected
- onMount(() => {
- theme.set(Object.keys(theme.all())[0])
- })
-
onCleanup(() => {
if (!confirmed) theme.set(initial)
})
@@ -26,6 +22,7 @@ export function DialogThemeList() {
<DialogSelect
title="Themes"
options={options}
+ current={initial}
onMove={(opt) => {
theme.set(opt.value)
}}
diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx
index 987bbd0b9..ca4ec322e 100644
--- a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx
+++ b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx
@@ -50,6 +50,15 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
filter: "",
})
+ createEffect(() => {
+ if (props.current) {
+ const currentIndex = flat().findIndex((opt) => isDeepEqual(opt.value, props.current))
+ if (currentIndex >= 0) {
+ setStore("selected", currentIndex)
+ }
+ }
+ })
+
let input: InputRenderable
const filtered = createMemo(() => {
@@ -88,7 +97,14 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
createEffect(() => {
store.filter
- setStore("selected", 0)
+ if (store.filter.length > 0) {
+ setStore("selected", 0)
+ } else if (props.current) {
+ const currentIndex = flat().findIndex((opt) => isDeepEqual(opt.value, props.current))
+ if (currentIndex >= 0) {
+ setStore("selected", currentIndex)
+ }
+ }
scroll.scrollTo(0)
})