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 : '' }}

+
{{ 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 : '' }}

- -
+
{{ 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 @@