From 6e78f2a09ef65e6b23b2386348581dad2b4b8e4e Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Tue, 17 Mar 2026 00:56:34 +0100 Subject: [PATCH] feat: add 'Always Light Mode' setting for email display --- components/email/email-viewer.tsx | 3 ++- components/email/thread-conversation-view.tsx | 8 +++++--- components/settings/email-settings.tsx | 9 +++++++++ locales/de/common.json | 4 ++++ locales/en/common.json | 4 ++++ locales/es/common.json | 4 ++++ locales/fr/common.json | 4 ++++ locales/it/common.json | 4 ++++ locales/ja/common.json | 4 ++++ locales/nl/common.json | 4 ++++ locales/pt/common.json | 4 ++++ stores/settings-store.ts | 2 ++ 12 files changed, 50 insertions(+), 4 deletions(-) diff --git a/components/email/email-viewer.tsx b/components/email/email-viewer.tsx index 6fcb74ca..0bd76be0 100644 --- a/components/email/email-viewer.tsx +++ b/components/email/email-viewer.tsx @@ -1036,8 +1036,9 @@ export function EmailViewer({ return /prefers-color-scheme\s*:\s*dark/i.test(emailContent.html); }, [emailContent.html, emailContent.isHtml]); + const emailAlwaysLightMode = useSettingsStore((state) => state.emailAlwaysLightMode); const [emailViewDarkOverride, setEmailViewDarkOverride] = useState(null); - const isDark = emailViewDarkOverride !== null ? emailViewDarkOverride : resolvedTheme === 'dark'; + const isDark = emailAlwaysLightMode ? false : (emailViewDarkOverride !== null ? emailViewDarkOverride : resolvedTheme === 'dark'); const emailIframeSrcDoc = useMemo(() => { if (!emailContent.isHtml) return ''; diff --git a/components/email/thread-conversation-view.tsx b/components/email/thread-conversation-view.tsx index ada54a30..c35f72c7 100644 --- a/components/email/thread-conversation-view.tsx +++ b/components/email/thread-conversation-view.tsx @@ -225,6 +225,7 @@ function EmailCard({ const resolvedTheme = useThemeStore((state) => state.resolvedTheme); const density = useSettingsStore((state) => state.density); const mailAttachmentAction = useSettingsStore((state) => state.mailAttachmentAction); + const emailAlwaysLightMode = useSettingsStore((state) => state.emailAlwaysLightMode); const sender = email.from?.[0]; const isUnread = !email.keywords?.$seen; const isStarred = email.keywords?.$flagged; @@ -363,7 +364,7 @@ function EmailCard({ node.setAttribute('rel', 'noopener noreferrer'); } - if (resolvedTheme === 'dark') { + if (resolvedTheme === 'dark' && !emailAlwaysLightMode) { if (htmlNode.style) { const originalStyles = htmlNode.style.cssText; const transformedStyles = transformInlineStyles(originalStyles, 'dark'); @@ -415,7 +416,7 @@ function EmailCard({ } return { html: "", isHtml: false }; - }, [email, allowExternal, resolvedTheme, cidBlobUrls]); + }, [email, allowExternal, resolvedTheme, emailAlwaysLightMode, cidBlobUrls]); return (
+ {/* Always Light Mode for Emails */} + + updateSetting('emailAlwaysLightMode', checked)} + /> + + {/* External Content */}