From 497006f10a850c7fa6dadb41e7b5bbcccecf8fca Mon Sep 17 00:00:00 2001 From: Thomas Petersen Date: Tue, 14 Apr 2026 14:01:18 -0400 Subject: [PATCH] chore(desktop): polish reply design surfaces Align the header, timeline, thread panel, composer, and sidebar shells so the reply design branch reads as one consistent visual system. Made-with: Cursor --- .../src/features/channels/ui/ChannelPane.tsx | 61 ++++--- .../features/channels/ui/ChannelScreen.tsx | 172 +++++++++--------- desktop/src/features/chat/ui/ChatHeader.tsx | 11 +- .../features/messages/ui/MessageComposer.tsx | 8 +- .../messages/ui/MessageComposerToolbar.tsx | 18 +- .../src/features/messages/ui/MessageRow.tsx | 128 +++++++------ .../messages/ui/MessageThreadPanel.tsx | 79 ++++---- .../messages/ui/MessageThreadSummaryRow.tsx | 2 +- .../features/messages/ui/MessageTimeline.tsx | 20 +- .../messages/ui/TypingIndicatorRow.tsx | 10 +- .../src/features/sidebar/ui/AppSidebar.tsx | 5 - desktop/src/shared/ui/sidebar.tsx | 10 +- 12 files changed, 265 insertions(+), 259 deletions(-) diff --git a/desktop/src/features/channels/ui/ChannelPane.tsx b/desktop/src/features/channels/ui/ChannelPane.tsx index 3a43091de..51eb05da5 100644 --- a/desktop/src/features/channels/ui/ChannelPane.tsx +++ b/desktop/src/features/channels/ui/ChannelPane.tsx @@ -107,8 +107,8 @@ export const ChannelPane = React.memo(function ChannelPane({ isSending; return ( -
-
+
+
- - +
+ + +
{threadHeadMessage ? ( diff --git a/desktop/src/features/channels/ui/ChannelScreen.tsx b/desktop/src/features/channels/ui/ChannelScreen.tsx index 52366919e..bef9cea66 100644 --- a/desktop/src/features/channels/ui/ChannelScreen.tsx +++ b/desktop/src/features/channels/ui/ChannelScreen.tsx @@ -364,91 +364,97 @@ export function ChannelScreen({ return ( <> - setIsMembersSidebarOpen((prev) => !prev)} - /> - ) : null - } - channelType={activeChannel?.channelType} - visibility={activeChannel?.visibility} - description={channelDescription} - statusBadge={headerStatusBadge} - title={activeChannelTitle} - /> +
+
+ + setIsMembersSidebarOpen((prev) => !prev) + } + /> + ) : null + } + channelType={activeChannel?.channelType} + visibility={activeChannel?.visibility} + description={channelDescription} + statusBadge={headerStatusBadge} + title={activeChannelTitle} + /> +
-
- {activeChannel ? ( - activeChannel.channelType === "forum" ? ( - }> - - +
+ {activeChannel ? ( + activeChannel.channelType === "forum" ? ( + }> + + + ) : ( + }> + 1} + openThreadHeadId={openThreadHeadId} + personaLookup={personaLookup} + profiles={messageProfiles} + targetMessageId={targetMessageId} + threadHeadMessage={openThreadHeadMessage} + threadMessages={threadMessages} + threadTypingPubkeys={threadTypingPubkeys} + threadTotalReplyCount={threadTotalReplyCount} + threadReplyTargetId={threadReplyTargetId} + threadReplyTargetMessage={threadReplyTargetMessage} + typingPubkeys={mainTypingPubkeys} + /> + + ) ) : ( - }> - 1} - openThreadHeadId={openThreadHeadId} - personaLookup={personaLookup} - profiles={messageProfiles} - targetMessageId={targetMessageId} - threadHeadMessage={openThreadHeadMessage} - threadMessages={threadMessages} - threadTypingPubkeys={threadTypingPubkeys} - threadTotalReplyCount={threadTotalReplyCount} - threadReplyTargetId={threadReplyTargetId} - threadReplyTargetMessage={threadReplyTargetMessage} - typingPubkeys={mainTypingPubkeys} - /> - - ) - ) : ( -
-

- Select a channel to view messages. -

-
- )} +
+

+ Select a channel to view messages. +

+
+ )} +
@@ -87,6 +89,7 @@ export function ChatHeader({

{title}

@@ -96,12 +99,6 @@ export function ChatHeader({
) : null}
-

- {description} -

{actions ?
{actions}
: null} diff --git a/desktop/src/features/messages/ui/MessageComposer.tsx b/desktop/src/features/messages/ui/MessageComposer.tsx index 7747b3cec..c0cb9daa2 100644 --- a/desktop/src/features/messages/ui/MessageComposer.tsx +++ b/desktop/src/features/messages/ui/MessageComposer.tsx @@ -508,13 +508,13 @@ export function MessageComposer({ return (
-
+
{ diff --git a/desktop/src/features/messages/ui/MessageComposerToolbar.tsx b/desktop/src/features/messages/ui/MessageComposerToolbar.tsx index ef7758dc9..5de173617 100644 --- a/desktop/src/features/messages/ui/MessageComposerToolbar.tsx +++ b/desktop/src/features/messages/ui/MessageComposerToolbar.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { AtSign, Paperclip, SendHorizontal } from "lucide-react"; +import { ArrowUp, AtSign, Paperclip } from "lucide-react"; import { Button } from "@/shared/ui/button"; import { ComposerEmojiPicker } from "./ComposerEmojiPicker"; @@ -67,14 +67,22 @@ export const MessageComposerToolbar = React.memo(
); diff --git a/desktop/src/features/messages/ui/MessageRow.tsx b/desktop/src/features/messages/ui/MessageRow.tsx index 880dcb3e4..edd218776 100644 --- a/desktop/src/features/messages/ui/MessageRow.tsx +++ b/desktop/src/features/messages/ui/MessageRow.tsx @@ -161,7 +161,7 @@ export const MessageRow = React.memo(
@@ -191,81 +191,79 @@ export const MessageRow = React.memo( )}
-
-
- {message.pubkey ? ( - - + + ) : ( +

{message.author} - - - ) : ( -

- {message.author} -

- )} - {message.personaDisplayName && - message.personaDisplayName !== message.author ? ( - - {message.personaDisplayName} - - ) : message.role ? ( -

- {message.role} -

- ) : null} -
-
-
- -
-
- {message.pending ? ( -

- Sending + + )} + {message.personaDisplayName && + message.personaDisplayName !== message.author ? ( + + {message.personaDisplayName} + + ) : message.role ? ( +

+ {message.role}

) : null} - {message.edited ? ( -

- (edited) -

- ) : null} -
- {renderBody()} +
+ + {message.pending ? ( +

+ Sending +

+ ) : null} + {message.edited ? ( +

+ (edited) +

+ ) : null} + +
+
{renderBody()}
-
- {canGoBack ? ( - - ) : null} -
-

Thread

+
+
+ {canGoBack ? ( + + ) : null} +
+

Thread

+