feat(app): redesign non-modal settings - #40845
Conversation
There was a problem hiding this comment.
Pull request overview
This PR redesigns the app’s non-modal settings experience by reorganizing navigation into dedicated pages (e.g., Appearance, Notifications, Projects, Extensions) and adding new UI structure, icons, styling, and localization keys to support the new layout and multi-server workflows.
Changes:
- Reworked Settings V2 navigation and split settings into new dedicated pages (Appearance, Notifications, Projects, Extensions).
- Added inline server selection UI across several settings pages and adjusted server ordering/default behaviors.
- Expanded icon set, styling, and i18n dictionaries to support the new settings UI copy and sections.
Reviewed changes
Copilot reviewed 43 out of 43 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/ui/src/components/icon.tsx | Adds new icons used by the redesigned settings navigation and Extensions view. |
| packages/app/src/wsl/settings.tsx | Updates WSL server context menu default-server behavior. |
| packages/app/src/i18n/en.ts | Updates English settings labels and adds many new Settings V2 copy keys. |
| packages/app/src/i18n/ar.ts | Adds new Settings V2 keys for Arabic locale (currently English strings). |
| packages/app/src/i18n/az.ts | Adds new Settings V2 keys for Azerbaijani locale (currently English strings). |
| packages/app/src/i18n/br.ts | Adds new Settings V2 keys for Portuguese (Brazil) locale (currently English strings). |
| packages/app/src/i18n/bs.ts | Adds new Settings V2 keys for Bosnian locale (currently English strings). |
| packages/app/src/i18n/da.ts | Adds new Settings V2 keys for Danish locale (currently English strings). |
| packages/app/src/i18n/de.ts | Adds new Settings V2 keys for German locale (currently English strings). |
| packages/app/src/i18n/es.ts | Adds new Settings V2 keys for Spanish locale (currently English strings). |
| packages/app/src/i18n/fi.ts | Adds new Settings V2 keys for Finnish locale (currently English strings). |
| packages/app/src/i18n/fr.ts | Adds new Settings V2 keys for French locale (currently English strings). |
| packages/app/src/i18n/hi.ts | Adds new Settings V2 keys for Hindi locale (currently English strings). |
| packages/app/src/i18n/id.ts | Adds new Settings V2 keys for Indonesian locale (currently English strings). |
| packages/app/src/i18n/it.ts | Adds new Settings V2 keys for Italian locale (currently English strings). |
| packages/app/src/i18n/ja.ts | Adds new Settings V2 keys for Japanese locale (currently English strings). |
| packages/app/src/i18n/ko.ts | Adds new Settings V2 keys for Korean locale (currently English strings). |
| packages/app/src/i18n/nl.ts | Adds new Settings V2 keys for Dutch locale (currently English strings). |
| packages/app/src/i18n/no.ts | Adds new Settings V2 keys for Norwegian locale (currently English strings). |
| packages/app/src/i18n/pa.ts | Adds new Settings V2 keys for Punjabi locale (currently English strings). |
| packages/app/src/i18n/pl.ts | Adds new Settings V2 keys for Polish locale (currently English strings). |
| packages/app/src/i18n/ru.ts | Adds new Settings V2 keys for Russian locale (currently English strings). |
| packages/app/src/i18n/sv.ts | Adds new Settings V2 keys for Swedish locale (currently English strings). |
| packages/app/src/i18n/th.ts | Adds new Settings V2 keys for Thai locale (currently English strings). |
| packages/app/src/i18n/tr.ts | Adds new Settings V2 keys for Turkish locale (currently English strings). |
| packages/app/src/i18n/uk.ts | Adds new Settings V2 keys for Ukrainian locale (currently English strings). |
| packages/app/src/i18n/ur.ts | Adds new Settings V2 keys for Urdu locale (currently English strings). |
| packages/app/src/i18n/vi.ts | Adds new Settings V2 keys for Vietnamese locale (currently English strings). |
| packages/app/src/i18n/zh.ts | Adds new Settings V2 keys for Simplified Chinese locale (currently English strings). |
| packages/app/src/i18n/zht.ts | Adds new Settings V2 keys for Traditional Chinese locale (currently English strings). |
| packages/app/src/components/settings-v2/settings-v2.css | Adds layout styling for Settings V2 header rows and Extensions sub-tabs. |
| packages/app/src/components/settings-v2/servers.tsx | Adjusts server list ordering and default-server labeling logic in Settings V2. |
| packages/app/src/components/settings-v2/providers.tsx | Adds inline server selection to Providers settings header. |
| packages/app/src/components/settings-v2/models.tsx | Adds inline server selection to Models settings header. |
| packages/app/src/components/settings-v2/projects.tsx | Introduces Projects settings page and adds inline server selection. |
| packages/app/src/components/settings-v2/parts/server-select.tsx | Adds reusable inline server selector component. |
| packages/app/src/components/settings-v2/notifications.tsx | Introduces Notifications settings page with toggles and new select controls. |
| packages/app/src/components/settings-v2/index.tsx | Exports newly added Settings V2 pages. |
| packages/app/src/components/settings-v2/general.tsx | Refactors General settings page and adds restore-defaults/reset affordances. |
| packages/app/src/components/settings-v2/extensions.tsx | Introduces Extensions settings page (MCPs/Plugins/Skills) and sub-tab UI. |
| packages/app/src/components/settings-v2/dialog-settings-v2.tsx | Updates the settings dialog navigation to the new multi-page structure. |
| packages/app/src/components/settings-v2/appearance.tsx | Introduces Appearance settings page (scheme/theme/fonts/density, display). |
| packages/app/src/components/server/server-row-menu.tsx | Updates server row menu default-server action to a disabled “Set default” item when already default. |
Suppressed comments (2)
packages/app/src/components/settings-v2/servers.tsx:23
const server = useServer()is declared but not used.
const server = useServer()
const controller = useServerManagementController()
packages/app/src/components/settings-v2/general.tsx:268
- This row is labeled "Reset all settings" but the handler only restores a subset of general preferences. The copy should match the actual behavior (or the handler should actually reset everything).
</SettingsListV2>
</div>
)
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| import { ServerHealthIndicator } from "@/components/server/server-row" | ||
| import { useLanguage } from "@/context/language" | ||
| import { ServerConnection, serverName } from "@/context/server" | ||
| import { ServerConnection, serverName, useServer } from "@/context/server" |
| const isDefaultServer = (key: ServerConnection.Key, item: ServerConnection.Any) => { | ||
| const def = controller.defaultKey() | ||
| if (!def) return isLocal(item) | ||
| return def === key | ||
| } |
| <InlineServerSelect | ||
| value={selectedServer()} | ||
| onChange={setSelectedServer} | ||
| includeAll | ||
| /> |
| <InlineServerSelect | ||
| value={selectedServer()} | ||
| onChange={setSelectedServer} | ||
| includeAll | ||
| /> |
| <InlineServerSelect | ||
| value={selectedServer()} | ||
| onChange={setSelectedServer} | ||
| includeAll | ||
| /> |
| <h2 class="settings-v2-tab-title">{language.t("settings.tab.extensions")}</h2> | ||
| <span class="text-11-regular text-v2-text-text-muted">{language.t("settings.mcps.description")}</span> | ||
| </div> | ||
| <InlineServerSelect value={selectedServer()} onChange={setSelectedServer} includeAll /> |
| const [density, setDensity] = createSignal<"compact" | "default" | "comfortable">("default") | ||
|
|
| const [unreadBadge, setUnreadBadge] = createSignal<"count" | "dot" | "none">("count") | ||
| const [focusMode, setFocusMode] = createSignal<"auto" | "always" | "never">("auto") | ||
|
|
dd76e8f to
a2c3aef
Compare
|
This PR cannot be merged into the beta branch due to: Merge conflicts with dev branch Please resolve this issue to include this PR in the next beta release. |
|
This PR cannot be merged into the beta branch due to: Merge conflicts with dev branch Please resolve this issue to include this PR in the next beta release. |
|
This PR cannot be merged into the beta branch due to: Merge conflicts with dev branch Please resolve this issue to include this PR in the next beta release. |
|
This PR cannot be merged into the beta branch due to: Merge conflicts with dev branch Please resolve this issue to include this PR in the next beta release. |
|
This PR cannot be merged into the beta branch due to: Merge conflicts with dev branch Please resolve this issue to include this PR in the next beta release. |
|
This PR cannot be merged into the beta branch due to: Merge conflicts with dev branch Please resolve this issue to include this PR in the next beta release. |
Summary
Test plan