From 8ae16bae761d0b39c3483771106379c9a6a9ae97 Mon Sep 17 00:00:00 2001
From: sturlan
Date: Fri, 27 Mar 2026 12:54:00 +0100
Subject: [PATCH 1/6] feat(thread): show per-message To/Cc/Bcc recipients in
thread view
Closes #11305, #9311, #4258. Recipients (To, Cc, Bcc) are already
returned by the API for every message in a thread but were never
displayed in ThreadEnvelope. Add RecipientBubble components in the
expanded message header for each recipient list, following the same
pattern used for per-message subject-change display.
AI-assisted: Claude Code (claude-sonnet-4-6)
Signed-off-by: Darko Sturlan
---
src/components/ThreadEnvelope.vue | 43 +++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/src/components/ThreadEnvelope.vue b/src/components/ThreadEnvelope.vue
index 3078e2e0be..5dd83c8bff 100644
--- a/src/components/ThreadEnvelope.vue
+++ b/src/components/ThreadEnvelope.vue
@@ -68,6 +68,32 @@
{{ envelope.from && envelope.from[0] ? envelope.from[0].email : '' }}
+
+
+ {{ t('mail', 'To:') }}
+
+
+
+ {{ t('mail', 'Cc:') }}
+
+
+
+ {{ t('mail', 'Bcc:') }}
+
+
+
{{ cleanSubject }}
@@ -341,6 +367,7 @@ import IconFavorite from 'vue-material-design-icons/Star.vue'
import StarOutline from 'vue-material-design-icons/StarOutline.vue'
import DeleteIcon from 'vue-material-design-icons/TrashCanOutline.vue'
import Avatar from './Avatar.vue'
+import RecipientBubble from './RecipientBubble.vue'
import ConfirmModal from './ConfirmationModal.vue'
import Error from './Error.vue'
import EventModal from './EventModal.vue'
@@ -389,6 +416,7 @@ export default {
TranslationModal,
ConfirmModal,
Avatar,
+ RecipientBubble,
NcActionButton,
NcButton,
Error,
@@ -1314,6 +1342,21 @@ export default {
white-space: nowrap;
}
+ .recipients {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 4px;
+ margin-block: 2px;
+ margin-inline-start: 8px;
+
+ &__label {
+ color: var(--color-text-maxcontrast);
+ font-weight: bold;
+ white-space: nowrap;
+ }
+ }
+
&--expanded {
min-height: 350px;
}
From 240e40d1f814fbdff3be64d35b817e61b06a399c Mon Sep 17 00:00:00 2001
From: sturlan
Date: Fri, 27 Mar 2026 13:02:41 +0100
Subject: [PATCH 2/6] fix(thread): move recipient bubbles outside router-link
to fix click handling
RecipientBubble uses NcUserBubble which renders as an anchor tag.
Placing it inside the router-link's click handler caused navigation on
click instead of opening the contact popover. Move the recipients
section outside the router-link into its own envelope__recipients div.
AI-assisted: Claude Code (claude-sonnet-4-6)
Signed-off-by: Darko Sturlan
---
src/components/ThreadEnvelope.vue | 92 +++++++++++++++++--------------
1 file changed, 50 insertions(+), 42 deletions(-)
diff --git a/src/components/ThreadEnvelope.vue b/src/components/ThreadEnvelope.vue
index 5dd83c8bff..2dfcd74354 100644
--- a/src/components/ThreadEnvelope.vue
+++ b/src/components/ThreadEnvelope.vue
@@ -68,33 +68,7 @@
{{ envelope.from && envelope.from[0] ? envelope.from[0].email : '' }}
-
-
- {{ t('mail', 'To:') }}
-
-
-
- {{ t('mail', 'Cc:') }}
-
-
-
- {{ t('mail', 'Bcc:') }}
-
-
-
-
+
{{ cleanSubject }}
@@ -297,7 +271,33 @@
-
+
+
+ {{ t('mail', 'To:') }}
+
+
+
+ {{ t('mail', 'Cc:') }}
+
+
+
+ {{ t('mail', 'Bcc:') }}
+
+
+
+
Date: Fri, 27 Mar 2026 13:05:49 +0100
Subject: [PATCH 3/6] feat(thread): match design spec from #4258
Per ChristophWurst's Sept 2023 design spec:
- Hide sender email address in collapsed message state
- Apply --color-text-maxcontrast to sender name when expanded
- Remove thread-level participant bubble header from Thread.vue
along with all associated dead code (participantsToDisplay,
moreParticipantsString, updateParticipantsToDisplay, resize
listener, RecipientBubble/NcPopover imports)
AI-assisted: Claude Code (claude-sonnet-4-6)
Signed-off-by: Darko Sturlan
---
src/components/Thread.vue | 95 +------------------------------
src/components/ThreadEnvelope.vue | 12 ++--
2 files changed, 10 insertions(+), 97 deletions(-)
diff --git a/src/components/Thread.vue b/src/components/Thread.vue
index 2a7aa1d160..3d7d72cf55 100644
--- a/src/components/Thread.vue
+++ b/src/components/Thread.vue
@@ -16,39 +16,7 @@
{{ threadSubject }}
-
+
@@ -73,13 +41,10 @@