From 4269d0589ca7d0713907a8823045f363b0b7ffb0 Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Fri, 22 May 2026 12:19:34 +0200 Subject: [PATCH] feat: collapse empty viewer pane and hide placeholder in Pro mode --- app/(main)/[locale]/page.tsx | 2 +- components/email/email-viewer.tsx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/(main)/[locale]/page.tsx b/app/(main)/[locale]/page.tsx index c6d7fff1..c09a63ea 100644 --- a/app/(main)/[locale]/page.tsx +++ b/app/(main)/[locale]/page.tsx @@ -1973,7 +1973,7 @@ export default function Home() { const isHorizontalMailLayout = mailLayout === 'horizontal' && !isMobile && !isTablet; const hasViewerContent = showComposer || Boolean(conversationThread) || Boolean(selectedEmail); const shouldCollapseListPane = (isTablet && !tabletListVisible) || (!isMobile && isFocusedMailLayout && hasViewerContent); - const shouldHideViewerPane = !isMobile && !hasViewerContent; + const shouldHideViewerPane = !isMobile && !hasViewerContent && (isEmbedded || isFocusedMailLayout); const shouldHideHorizontalViewerPane = isHorizontalMailLayout && !hasViewerContent; // Handle email selection with mobile view switching diff --git a/components/email/email-viewer.tsx b/components/email/email-viewer.tsx index 1ad137fb..9d6444a3 100644 --- a/components/email/email-viewer.tsx +++ b/components/email/email-viewer.tsx @@ -79,6 +79,7 @@ import { EmailIdentityBadge } from "./email-identity-badge"; import { UnsubscribeBanner } from "./unsubscribe-banner"; import { CalendarInvitationBanner } from "./calendar-invitation-banner"; import { useTour } from "@/components/tour/tour-provider"; +import { useIsEmbedded } from "@/hooks/use-is-embedded"; import { SmimePassphraseDialog } from "@/components/settings/smime-passphrase-dialog"; import { findCalendarAttachment, isCalendarMimeType } from "@/lib/calendar-invitation"; import { RecipientPopover } from "./recipient-popover"; @@ -922,6 +923,7 @@ export function EmailViewer({ const { identities, client, isDemoMode, activeAccountId } = useAuthStore(); const resolvedTheme = useThemeStore((state) => state.resolvedTheme); const { startTour } = useTour(); + const isEmbedded = useIsEmbedded(); const [showFullHeaders, setShowFullHeaders] = useState(false); const [showAllBesideAttachments, setShowAllBesideAttachments] = useState(false); const [showAllMobileAttachments, setShowAllMobileAttachments] = useState(false); @@ -3252,7 +3254,23 @@ export function EmailViewer({ ); } return ( -
+
+ {!isEmbedded && ( +
+
+ +
+

{t('no_conversation_selected')}

+

{t('no_conversation_description')}

+ {onCompose && ( + + )} +
+ )} +
); }