From 1d78100f63e81b7c945c8eda2ce0e42a9986fad2 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 17 Feb 2026 15:13:48 +0000 Subject: [PATCH] tweak(ui): allow full-width user message meta Moves the user message meta row out of the bubble width constraints and truncates long metadata while keeping the timestamp visible with consistent middot spacing. --- packages/ui/src/components/message-part.css | 22 ++++++++++ packages/ui/src/components/message-part.tsx | 47 ++++++++++++++------- 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index 5b0a3cc17..ede7f5c90 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -120,6 +120,7 @@ align-items: center; justify-content: flex-end; gap: 10px; + width: 100%; opacity: 0; pointer-events: none; transition: opacity 0.15s ease; @@ -134,6 +135,27 @@ [data-slot="user-message-meta"] { user-select: none; text-align: right; + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + [data-slot="user-message-meta-wrap"] { + flex: 1 1 auto; + min-width: 0; + display: flex; + align-items: center; + justify-content: flex-end; + overflow: hidden; + } + + [data-slot="user-message-meta-tail"] { + user-select: none; + flex: 0 0 auto; + white-space: nowrap; + text-align: right; } [data-slot="user-message-copy-wrapper"][data-interrupted] { diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 8e74b14ba..cd0d8c779 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -560,16 +560,15 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp return `${hour12}:${minute} ${hours < 12 ? "AM" : "PM"}` }) - const meta = createMemo(() => { + const metaHead = createMemo(() => { const agent = props.message.agent - const items = [ - agent ? agent[0]?.toUpperCase() + agent.slice(1) : "", - provider(), - model(), - stamp(), - props.interrupted ? i18n.t("ui.message.interrupted") : "", - ] - return items.filter((x) => !!x).join(" \u00B7 ") + const items = [agent ? agent[0]?.toUpperCase() + agent.slice(1) : "", provider(), model()] + return items.filter((x) => !!x).join("\u00A0\u00B7\u00A0") + }) + + const metaTail = createMemo(() => { + const items = [stamp(), props.interrupted ? i18n.t("ui.message.interrupted") : ""] + return items.filter((x) => !!x).join("\u00A0\u00B7\u00A0") }) const openImagePreview = (url: string, alt?: string) => { @@ -619,14 +618,30 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp -
-
- + <> +
+
+ +
- - - {meta()} + + + + + {metaHead()} + + + + + {"\u00A0\u00B7\u00A0"} + + + + + {metaTail()} + +
-
+
)