From 219aef046afabf361b78e1c5c22430ce37f0e5ec Mon Sep 17 00:00:00 2001
From: Linus Rath <139418639+rathlinus@users.noreply.github.com>
Date: Sat, 31 Oct 2026 04:42:37 +0100
Subject: [PATCH] fix: drop a leading style sheet and padding from message
previews (bulwarkmail/webmail#1136)
---
src/components/email/ThreadMessageCard.tsx | 3 +-
src/lib/__tests__/preview-text.test.ts | 88 ++++++++++++++++++++++
src/lib/preview-text.ts | 88 ++++++++++++++++++++++
src/screens/EmailListScreen.tsx | 3 +-
src/screens/UnifiedInboxScreen.tsx | 3 +-
5 files changed, 182 insertions(+), 3 deletions(-)
create mode 100644 src/lib/__tests__/preview-text.test.ts
create mode 100644 src/lib/preview-text.ts
diff --git a/src/components/email/ThreadMessageCard.tsx b/src/components/email/ThreadMessageCard.tsx
index 6fd10d7e..51c822ac 100644
--- a/src/components/email/ThreadMessageCard.tsx
+++ b/src/components/email/ThreadMessageCard.tsx
@@ -10,6 +10,7 @@ import SenderAvatar from '../SenderAvatar';
import { MessageContent, type MessageContentProps } from './MessageContent';
import { emailDisplayDate, formatHeaderDate, formatHeaderTime } from '../../lib/email-date';
import { singleLine } from '../../lib/single-line';
+import { cleanPreview } from '../../lib/preview-text';
import { useSenderWarning } from './use-sender-warning';
interface Props extends MessageContentProps {
@@ -58,7 +59,7 @@ export function ThreadMessageCard({
{email.hasAttachment && }
{formatHeaderDate(date, locale)} {formatHeaderTime(date, timeFormat, locale)}
- {singleLine(email.preview)}
+ {singleLine(cleanPreview(email.preview))}
{starred && }
diff --git a/src/lib/__tests__/preview-text.test.ts b/src/lib/__tests__/preview-text.test.ts
new file mode 100644
index 00000000..2acc9fda
--- /dev/null
+++ b/src/lib/__tests__/preview-text.test.ts
@@ -0,0 +1,88 @@
+import { describe, expect, it } from 'vitest';
+import fs from 'node:fs';
+import path from 'node:path';
+import { cleanPreview, stripEmphasisMarkers, stripLeadingCss } from '../preview-text';
+
+// Copied from the webmail (lib/__tests__/preview-leading-css.test.ts), plus
+// the check that the list rows use it (#1136).
+
+// Some servers build a message preview from its HTML without skipping the
+//