diff --git a/apps/desktop/src/app/settings/appearance-settings.tsx b/apps/desktop/src/app/settings/appearance-settings.tsx
index 8bf208b5ad9..86cbf718c73 100644
--- a/apps/desktop/src/app/settings/appearance-settings.tsx
+++ b/apps/desktop/src/app/settings/appearance-settings.tsx
@@ -2,7 +2,7 @@ import { useStore } from '@nanostores/react'
import type { ReactNode } from 'react'
import { triggerHaptic } from '@/lib/haptics'
-import { Check } from '@/lib/icons'
+import { Check, type IconComponent } from '@/lib/icons'
import { cn } from '@/lib/utils'
import { $toolViewMode, setToolViewMode } from '@/store/tool-view'
import { useTheme } from '@/themes/context'
@@ -66,6 +66,40 @@ function SectionHead({ title, description, pill }: { title: string; description:
)
}
+function OptionRow({
+ icon: Icon,
+ label,
+ description,
+ active,
+ onClick
+}: {
+ icon?: IconComponent
+ label: string
+ description: string
+ active: boolean
+ onClick: () => void
+}) {
+ return (
+
+ )
+}
+
export function AppearanceSettings() {
const { themeName, mode, availableThemes, setTheme, setMode } = useTheme()
const toolViewMode = useStore($toolViewMode)
@@ -85,40 +119,20 @@ export function AppearanceSettings() {
pill={{prettyName(mode)}}
title="Color Mode"
/>
-
- {MODE_OPTIONS.map(({ id, label, description, icon: Icon }) => {
- const active = mode === id
-
- return (
-
- )
- })}
+
+ {MODE_OPTIONS.map(({ id, label, description, icon }) => (
+ {
+ triggerHaptic('crisp')
+ setMode(id)
+ }}
+ />
+ ))}
@@ -128,7 +142,7 @@ export function AppearanceSettings() {
pill={
{toolViewMode === 'technical' ? 'Technical' : 'Product'}}
title="Tool Call Display"
/>
-
+
{(
[
{
@@ -142,36 +156,18 @@ export function AppearanceSettings() {
description: 'Include raw tool args/results and low-level details.'
}
] as const
- ).map(option => {
- const active = toolViewMode === option.id
-
- return (
-
- )
- })}
+ ).map(option => (
+
{
+ triggerHaptic('selection')
+ setToolViewMode(option.id)
+ }}
+ />
+ ))}
@@ -181,16 +177,13 @@ export function AppearanceSettings() {
pill={activeTheme ?
{activeTheme.label} : undefined}
title="Theme"
/>
-
+
{availableThemes.map(theme => {
const active = themeName === theme.name
return (