Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 3 additions & 2 deletions apps/desktop-tauri/src/i18n/keys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@

export const ALL_LOCALE_KEYS = [
"TabGeneral",
"TabProviders",
"TabDisplay",
"TabNotifications",
"TabMenuBar",
"TabMenu",
"TabApiKeys",
"TabCookies",
"TabAdvanced",
Expand Down
58 changes: 34 additions & 24 deletions apps/desktop-tauri/src/surfaces/Settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,20 +52,26 @@ const TabIcons: Record<SettingsTab, ReactElement> = {
<path d="M8 1.5v2M8 12.5v2M1.5 8h2M12.5 8h2M3.4 3.4l1.4 1.4M11.2 11.2l1.4 1.4M3.4 12.6l1.4-1.4M11.2 4.8l1.4-1.4" />
</Svg>
),
providers: (
notifications: (
<Svg>
<rect x="2" y="2" width="5" height="5" rx="1" />
<rect x="9" y="2" width="5" height="5" rx="1" />
<rect x="2" y="9" width="5" height="5" rx="1" />
<rect x="9" y="9" width="5" height="5" rx="1" />
<path d="M3.5 11.5h9l-1.2-1.8V7a3.3 3.3 0 0 0-6.6 0v2.7Z" />
<path d="M6.5 13a1.7 1.7 0 0 0 3 0" />
</Svg>
),
display: (
menuBar: (
<Svg>
<path d="M1.5 8c1.6-3 4-4.5 6.5-4.5S13 5 14.5 8c-1.5 3-4 4.5-6.5 4.5S3.1 11 1.5 8Z" />
<circle cx="8" cy="8" r="2" />
</Svg>
),
menu: (
<Svg>
<rect x="2" y="2" width="5" height="5" rx="1" />
<rect x="9" y="2" width="5" height="5" rx="1" />
<rect x="2" y="9" width="5" height="5" rx="1" />
<rect x="9" y="9" width="5" height="5" rx="1" />
</Svg>
),
advanced: (
<Svg>
<path d="M2 4h8M2 8h5M2 12h10" />
Expand All @@ -83,13 +89,11 @@ const TabIcons: Record<SettingsTab, ReactElement> = {
),
};

// Tab order mirrors upstream PreferencesView (General, Providers, Display,
// Advanced, About). Per-provider credential management (API keys, cookies,
// token accounts) is handled inside the Providers tab.
const TAB_META: { id: SettingsTab; labelKey: LocaleKey }[] = [
{ id: "general", labelKey: "TabGeneral" },
{ id: "providers", labelKey: "TabProviders" },
{ id: "display", labelKey: "TabDisplay" },
{ id: "notifications", labelKey: "TabNotifications" },
{ id: "menuBar", labelKey: "TabMenuBar" },
{ id: "menu", labelKey: "TabMenu" },
{ id: "advanced", labelKey: "TabAdvanced" },
{ id: "about", labelKey: "TabAbout" },
];
Expand All @@ -104,7 +108,7 @@ const SETTINGS_WINDOW_PROVIDERS_WIDTH = 600;

async function applySettingsWindowSize(tab: SettingsTab) {
const requestedWidth =
tab === "providers"
tab === "general"
? SETTINGS_WINDOW_PROVIDERS_WIDTH
: SETTINGS_WINDOW_DEFAULT_WIDTH;
const workArea = await getWorkAreaRect().catch(() => null);
Expand Down Expand Up @@ -193,7 +197,7 @@ export default function Settings({ state, initialTab: propTab }: { state: Bootst

return (
<div
className={`settings${activeTab === "providers" ? " settings--providers-active" : ""}`}
className={`settings${activeTab === "general" ? " settings--providers-active" : ""}`}
>
{/* custom title bar (decorations disabled for guaranteed dark theme) */}
<div className="settings-titlebar" data-tauri-drag-region>
Expand Down Expand Up @@ -244,20 +248,26 @@ export default function Settings({ state, initialTab: propTab }: { state: Bootst
)}

{/* tab panels */}
<div className={`settings-body${activeTab === "providers" ? " settings-body--providers" : ""}`}>
<div className={`settings-body${activeTab === "general" ? " settings-body--providers" : ""}`}>
{activeTab === "general" && (
<GeneralTab settings={settings} set={set} saving={saving} />
<>
<GeneralTab mode="general" settings={settings} set={set} saving={saving} />
<ProvidersTab
settings={settings}
providers={state.providers}
set={set}
saving={saving}
/>
</>
)}
{activeTab === "providers" && (
<ProvidersTab
settings={settings}
providers={state.providers}
set={set}
saving={saving}
/>
{activeTab === "notifications" && (
<GeneralTab mode="notifications" settings={settings} set={set} saving={saving} />
)}
{activeTab === "menuBar" && (
<DisplayTab mode="menuBar" settings={settings} set={set} saving={saving} />
)}
{activeTab === "display" && (
<DisplayTab settings={settings} set={set} saving={saving} />
{activeTab === "menu" && (
<DisplayTab mode="menu" settings={settings} set={set} saving={saving} />
)}
{activeTab === "advanced" && (
<AdvancedTab settings={settings} set={set} saving={saving} />
Expand Down
19 changes: 13 additions & 6 deletions apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@ function clampWindowScalePercent(value: number): number {
return Math.min(250, Math.max(100, Number.isFinite(value) ? value : 100));
}

export default function DisplayTab({ settings, set, saving }: TabProps) {
export default function DisplayTab({
mode = "menu",
settings,
set,
saving,
}: TabProps & { mode?: "menuBar" | "menu" }) {
const { t } = useLocale();
const [windowScaleDraft, setWindowScaleDraft] = useState(() =>
clampWindowScalePercent(settings.windowScalePercent),
Expand All @@ -28,7 +33,7 @@ export default function DisplayTab({ settings, set, saving }: TabProps) {
return (
<>
{/* ── Menu bar ─────────────────────────────────────────────── */}
<section className="settings-section">
{mode === "menuBar" && <section className="settings-section">
<h3 className="settings-section__title">{t("MenuBar")}</h3>
<div className="settings-section__group">
<Field
Expand Down Expand Up @@ -96,10 +101,10 @@ export default function DisplayTab({ settings, set, saving }: TabProps) {
/>
</Field>
</div>
</section>
</section>}

{/* ── Menu content ─────────────────────────────────────────── */}
<section className="settings-section">
{mode === "menu" && <section className="settings-section">
<h3 className="settings-section__title">Menu Content</h3>
<div className="settings-section__group">
<Field
Expand Down Expand Up @@ -171,9 +176,11 @@ export default function DisplayTab({ settings, set, saving }: TabProps) {
/>
</Field>
</div>
</section>
</section>}

<FloatBarSettingsSection settings={settings} saving={saving} set={set} />
{mode === "menu" && (
<FloatBarSettingsSection settings={settings} saving={saving} set={set} />
)}
</>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,14 @@ describe("GeneralTab language picker", () => {

it("updates the predictive pace warning preference", () => {
const set = vi.fn();
render(<GeneralTab settings={settings} set={set} saving={false} />);
render(
<GeneralTab
mode="notifications"
settings={settings}
set={set}
saving={false}
/>,
);

fireEvent.click(screen.getByRole("checkbox", { name: "PredictivePaceWarnings" }));

Expand Down
27 changes: 16 additions & 11 deletions apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@ const REFRESH_CADENCE_OPTIONS: { value: string; label: string }[] = [
{ value: "3600", label: "1 hour" },
];

export default function GeneralTab({ settings, set, saving }: TabProps) {
export default function GeneralTab({
mode = "general",
settings,
set,
saving,
}: TabProps & { mode?: "general" | "notifications" }) {
const { t } = useLocale();
const [playingSound, setPlayingSound] = useState(false);
const [languageOptions, setLanguageOptions] = useState<LanguageOption[]>(
Expand All @@ -45,7 +50,7 @@ export default function GeneralTab({ settings, set, saving }: TabProps) {

return (
<>
<section className="settings-section">
{mode === "general" && <section className="settings-section">
<h3 className="settings-section__title">{t("SectionLanguage")}</h3>
<div className="settings-section__group">
<Field label={t("InterfaceLanguage")}>
Expand All @@ -60,9 +65,9 @@ export default function GeneralTab({ settings, set, saving }: TabProps) {
/>
</Field>
</div>
</section>
</section>}

<section className="settings-section">
{mode === "general" && <section className="settings-section">
<h3 className="settings-section__title">{t("StartupSettings")}</h3>
<div className="settings-section__group">
<Field label={t("StartAtLogin")} description={t("StartAtLoginHelper")} leading>
Expand All @@ -84,9 +89,9 @@ export default function GeneralTab({ settings, set, saving }: TabProps) {
/>
</Field>
</div>
</section>
</section>}

<section className="settings-section">
{mode === "notifications" && <section className="settings-section">
<h3 className="settings-section__title">
{t("SectionNotifications")}
</h3>
Expand Down Expand Up @@ -146,9 +151,9 @@ export default function GeneralTab({ settings, set, saving }: TabProps) {
</Field>
)}
</div>
</section>
</section>}

<section className="settings-section">
{mode === "notifications" && <section className="settings-section">
<h3 className="settings-section__title">
{t("SectionUsageThresholds")}
</h3>
Expand Down Expand Up @@ -180,10 +185,10 @@ export default function GeneralTab({ settings, set, saving }: TabProps) {
/>
</Field>
</div>
</section>
</section>}

{/* ── Automation ───────────────────────────────────────────── */}
<section className="settings-section">
{mode === "general" && <section className="settings-section">
<h3 className="settings-section__title">{t("SectionRefresh")}</h3>
<div className="settings-section__group">
<Field
Expand All @@ -209,7 +214,7 @@ export default function GeneralTab({ settings, set, saving }: TabProps) {
/>
</Field>
</div>
</section>
</section>}
</>
);
}
5 changes: 3 additions & 2 deletions apps/desktop-tauri/src/types/bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ export type SurfaceMode = "hidden" | "trayPanel" | "popOut" | "settings";
export type VisibleSurfaceMode = Exclude<SurfaceMode, "hidden">;
export type SettingsTabId =
| "general"
| "providers"
| "display"
| "notifications"
| "menuBar"
| "menu"
| "advanced"
| "about";

Expand Down
5 changes: 3 additions & 2 deletions rust/src/locale.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,9 @@ locale_keys! {

// Tab names (Preferences)
TabGeneral,
TabProviders,
TabDisplay,
TabNotifications,
TabMenuBar,
TabMenu,
TabApiKeys,
TabCookies,
TabAdvanced,
Expand Down
5 changes: 3 additions & 2 deletions rust/src/locale/en-US.ftl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
TabGeneral = General
TabProviders = Providers
TabDisplay = Display
TabNotifications = Notifications
TabMenuBar = Menu Bar
TabMenu = Menu
TabApiKeys = API Keys
TabCookies = Cookies
TabAdvanced = Advanced
Expand Down
5 changes: 3 additions & 2 deletions rust/src/locale/es-MX.ftl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
TabGeneral = General
TabProviders = Proveedores
TabDisplay = Pantalla
TabNotifications = Notifications
TabMenuBar = Menu Bar
TabMenu = Menu
TabApiKeys = Claves API
TabCookies = Cookies
TabAdvanced = Avanzado
Expand Down
5 changes: 3 additions & 2 deletions rust/src/locale/ja-JP.ftl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
TabGeneral = 一般
TabProviders = プロバイダー
TabDisplay = 表示
TabNotifications = Notifications
TabMenuBar = Menu Bar
TabMenu = Menu
TabApiKeys = API Keys
TabCookies = Cookies
TabAdvanced = 詳細
Expand Down
5 changes: 3 additions & 2 deletions rust/src/locale/ko-KR.ftl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
TabGeneral = 일반
TabProviders = 제공업체
TabDisplay = 디스플레이
TabNotifications = Notifications
TabMenuBar = Menu Bar
TabMenu = Menu
TabApiKeys = API 키
TabCookies = 쿠키
TabAdvanced = 고급
Expand Down
5 changes: 3 additions & 2 deletions rust/src/locale/zh-CN.ftl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
TabGeneral = 通用
TabProviders = 服务商
TabDisplay = 显示
TabNotifications = Notifications
TabMenuBar = Menu Bar
TabMenu = Menu
TabApiKeys = API 密钥
TabCookies = Cookie
TabAdvanced = 高级
Expand Down
5 changes: 3 additions & 2 deletions rust/src/locale/zh-TW.ftl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
TabGeneral = 一般
TabProviders = 提供者
TabDisplay = 顯示
TabNotifications = Notifications
TabMenuBar = Menu Bar
TabMenu = Menu
TabApiKeys = API 金鑰
TabCookies = Cookie
TabAdvanced = 高階
Expand Down
Loading