From df164431c7302800e637b5d9be1490d2eedea26c Mon Sep 17 00:00:00 2001 From: Taylor Ho Date: Mon, 27 Jul 2026 00:10:01 -0700 Subject: [PATCH] fix(desktop): align thread composer activity row with the full-width composer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The thread footer's activity/typing row was centered into an mx-auto max-w-4xl column while the thread composer above it spans the full pane width, so in a wide thread pane the typing indicator floated toward the pane's center instead of hugging the composer's left gutter. - MessageThreadPanel.tsx: drop the mx-auto/max-w-4xl wrapper so the row spans the same width as the composer above it - Remove flex-1 from the toolbarExtraActions (agent pill strip) wrapper — it previously ate half the row and pushed the typing group to the midpoint whenever it mounted; the strip now sizes to its content, mirroring ChannelComposerActivityRow - Make the typing indicator's leading padding conditional like the channel row: composer-edge padding only when the typing group leads the row, pl-0 when it follows pills so the flex gap is the whole spacing Co-authored-by: Taylor Ho Signed-off-by: Taylor Ho --- .../messages/ui/MessageThreadPanel.tsx | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/desktop/src/features/messages/ui/MessageThreadPanel.tsx b/desktop/src/features/messages/ui/MessageThreadPanel.tsx index fb01783bf..8b57b354f 100644 --- a/desktop/src/features/messages/ui/MessageThreadPanel.tsx +++ b/desktop/src/features/messages/ui/MessageThreadPanel.tsx @@ -913,16 +913,30 @@ export function MessageThreadPanel({ className={THREAD_PANEL_COMPOSER_GUTTER_CLASS} visible={hasComposerBottomActivity} > -
+ {/* No mx-auto/max-w column here: the composer above spans the + full pane width, so the activity row must too or the typing + group floats toward the pane's center. Mirrors + ChannelComposerActivityRow: the pill strip sizes to its + content and the typing group takes the remainder, instead of + splitting the row 50/50. */} +
{activityAccessoryVisible && activityAccessoryContent ? ( -
+
{activityAccessoryContent}
) : null} {threadTypingPubkeys.length > 0 ? (