@@ -5,15 +5,19 @@ import { Icon } from "@opencode-ai/ui/icon"
55import { useLanguage } from "@/context/language"
66import { usePlatform } from "@/context/platform"
77import { SettingsGeneralV2 } from "./general"
8+ import { SettingsAppearanceV2 } from "./appearance"
89import { SettingsKeybinds } from "../settings-keybinds"
10+ import { SettingsNotificationsV2 } from "./notifications"
911import { SettingsProvidersV2 } from "./providers"
1012import { SettingsModelsV2 } from "./models"
11- import "./settings-v2.css"
1213import { SettingsServersV2 } from "./servers"
1314import { SettingsWorkspacesV2 } from "./workspaces"
15+ import { SettingsProjectsV2 } from "./projects"
16+ import { SettingsExtensionsV2 } from "./extensions"
1417import { useDialog } from "@opencode-ai/ui/context/dialog"
1518import { useTabs } from "@/context/tabs"
1619import { useServerSync } from "@/context/server-sync"
20+ import "./settings-v2.css"
1721
1822export const DialogSettings : Component < {
1923 sessionID ?: string
@@ -50,54 +54,76 @@ export const DialogSettings: Component<{
5054 >
5155 < TabsV2 . List >
5256 < div class = "flex flex-col justify-between h-full w-full" >
53- < div class = "flex flex-col gap-3 w-full" >
54- < div class = "flex flex-col gap-3" >
55- < div class = "flex flex-col gap-1.5" >
56- < TabsV2 . SectionTitle > { language . t ( "settings.section.desktop" ) } </ TabsV2 . SectionTitle >
57- < div class = "flex flex-col gap-1.5 w-full" >
58- < TabsV2 . Trigger value = "general" >
59- < Icon name = "sliders" size = "small" />
60- { language . t ( "settings.tab.general" ) }
61- </ TabsV2 . Trigger >
62- < TabsV2 . Trigger value = "shortcuts" >
63- < Icon name = "keyboard" size = "small" />
64- { language . t ( "settings.tab.shortcuts" ) }
65- </ TabsV2 . Trigger >
66- </ div >
67- </ div >
57+ < div class = "flex flex-col gap-4 w-full" >
58+ { /* Group 1: Preferences */ }
59+ < div class = "flex flex-col gap-1 w-full" >
60+ < TabsV2 . Trigger value = "general" >
61+ < Icon name = "sliders" />
62+ { language . t ( "settings.tab.preferences" ) }
63+ </ TabsV2 . Trigger >
64+ < TabsV2 . Trigger value = "appearance" >
65+ < Icon name = "appearance" />
66+ { language . t ( "settings.general.section.appearance" ) }
67+ </ TabsV2 . Trigger >
68+ < TabsV2 . Trigger value = "notifications" >
69+ < Icon name = "notifications" />
70+ { language . t ( "settings.tab.notifications" ) }
71+ </ TabsV2 . Trigger >
72+ < TabsV2 . Trigger value = "shortcuts" >
73+ < Icon name = "keyboard" />
74+ { language . t ( "settings.tab.shortcuts" ) }
75+ </ TabsV2 . Trigger >
76+ </ div >
6877
69- < div class = "flex flex-col gap-1.5" >
70- < TabsV2 . SectionTitle > { language . t ( "settings.section.server" ) } </ TabsV2 . SectionTitle >
71- < div class = "flex flex-col gap-1.5 w-full" >
72- < TabsV2 . Trigger value = "workspaces" >
73- < Icon name = "workspace-isolated" size = "small" />
74- { language . t ( "settings.tab.workspaces" ) }
75- </ TabsV2 . Trigger >
76- < TabsV2 . Trigger value = "servers" >
77- < Icon name = "server" size = "small" />
78- { language . t ( "status.popover.tab.servers" ) }
79- </ TabsV2 . Trigger >
80- < TabsV2 . Trigger value = "providers" >
81- < Icon name = "providers" size = "small" />
82- { language . t ( "settings.providers.title" ) }
83- </ TabsV2 . Trigger >
84- < TabsV2 . Trigger value = "models" >
85- < Icon name = "models" size = "small" />
86- { language . t ( "settings.models.title" ) }
87- </ TabsV2 . Trigger >
88- </ div >
89- </ div >
78+ { /* Group 2: Environment & Workspaces */ }
79+ < div class = "flex flex-col gap-1 w-full" >
80+ < TabsV2 . Trigger value = "workspaces" >
81+ < Icon name = "workspace-isolated" />
82+ { language . t ( "settings.tab.workspaces" ) }
83+ </ TabsV2 . Trigger >
84+ < TabsV2 . Trigger value = "servers" >
85+ < Icon name = "server" />
86+ { language . t ( "status.popover.tab.servers" ) }
87+ </ TabsV2 . Trigger >
88+ < TabsV2 . Trigger value = "projects" >
89+ < Icon name = "folder" />
90+ { language . t ( "settings.tab.projects" ) }
91+ </ TabsV2 . Trigger >
92+ </ div >
93+
94+ { /* Group 3: Capabilities & Extensions */ }
95+ < div class = "flex flex-col gap-1 w-full" >
96+ < TabsV2 . Trigger value = "providers" >
97+ < Icon name = "providers" />
98+ { language . t ( "settings.providers.title" ) }
99+ </ TabsV2 . Trigger >
100+ < TabsV2 . Trigger value = "models" >
101+ < Icon name = "models" />
102+ { language . t ( "settings.models.title" ) }
103+ </ TabsV2 . Trigger >
104+ < TabsV2 . Trigger value = "extensions" >
105+ < Icon name = "extensions" />
106+ { language . t ( "settings.tab.extensions" ) }
107+ </ TabsV2 . Trigger >
90108 </ div >
91109 </ div >
110+
92111 < div class = "settings-v2-nav-footer" >
93112 < span > { language . t ( "app.name.desktop" ) } </ span >
94113 < span > v{ platform . version } </ span >
95114 </ div >
96115 </ div >
97116 </ TabsV2 . List >
117+
98118 < TabsV2 . Content value = "general" class = "settings-v2-panel" >
99119 < SettingsGeneralV2 sessionID = { props . sessionID } />
100120 </ TabsV2 . Content >
121+ < TabsV2 . Content value = "appearance" class = "settings-v2-panel" >
122+ < SettingsAppearanceV2 />
123+ </ TabsV2 . Content >
124+ < TabsV2 . Content value = "notifications" class = "settings-v2-panel" >
125+ < SettingsNotificationsV2 />
126+ </ TabsV2 . Content >
101127 < TabsV2 . Content value = "shortcuts" class = "settings-v2-panel" >
102128 < SettingsKeybinds v2 />
103129 </ TabsV2 . Content >
@@ -107,12 +133,18 @@ export const DialogSettings: Component<{
107133 < TabsV2 . Content value = "servers" class = "settings-v2-panel" >
108134 < SettingsServersV2 />
109135 </ TabsV2 . Content >
136+ < TabsV2 . Content value = "projects" class = "settings-v2-panel" >
137+ < SettingsProjectsV2 />
138+ </ TabsV2 . Content >
110139 < TabsV2 . Content value = "providers" class = "settings-v2-panel" >
111140 < SettingsProvidersV2 directory = { directory } onBack = { showProviders } />
112141 </ TabsV2 . Content >
113142 < TabsV2 . Content value = "models" class = "settings-v2-panel" >
114143 < SettingsModelsV2 />
115144 </ TabsV2 . Content >
145+ < TabsV2 . Content value = "extensions" class = "settings-v2-panel" >
146+ < SettingsExtensionsV2 />
147+ </ TabsV2 . Content >
116148 </ TabsV2 >
117149 </ Dialog >
118150 )
0 commit comments