summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorDavid Hill <[email protected]>2026-02-17 15:13:48 +0000
committerDavid Hill <[email protected]>2026-02-17 15:16:07 +0000
commit1d78100f63e81b7c945c8eda2ce0e42a9986fad2 (patch)
tree653d3f3826cf0dec01054195a5798b5d930939e9 /packages
parent57a5d5fd342b6451384d7549b00189b6891116bf (diff)
downloadopencode-1d78100f63e81b7c945c8eda2ce0e42a9986fad2.tar.gz
opencode-1d78100f63e81b7c945c8eda2ce0e42a9986fad2.zip
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.
Diffstat (limited to 'packages')
-rw-r--r--packages/ui/src/components/message-part.css22
-rw-r--r--packages/ui/src/components/message-part.tsx47
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
</div>
</Show>
<Show when={text()}>
- <div data-slot="user-message-body">
- <div data-slot="user-message-text">
- <HighlightedText text={text()} references={inlineFiles()} agents={agents()} />
+ <>
+ <div data-slot="user-message-body">
+ <div data-slot="user-message-text">
+ <HighlightedText text={text()} references={inlineFiles()} agents={agents()} />
+ </div>
</div>
<div data-slot="user-message-copy-wrapper" data-interrupted={props.interrupted ? "" : undefined}>
- <Show when={meta()}>
- <span data-slot="user-message-meta" class="text-12-regular text-text-weak cursor-default">
- {meta()}
+ <Show when={metaHead() || metaTail()}>
+ <span data-slot="user-message-meta-wrap">
+ <Show when={metaHead()}>
+ <span data-slot="user-message-meta" class="text-12-regular text-text-weak cursor-default">
+ {metaHead()}
+ </span>
+ </Show>
+ <Show when={metaHead() && metaTail()}>
+ <span data-slot="user-message-meta-sep" class="text-12-regular text-text-weak cursor-default">
+ {"\u00A0\u00B7\u00A0"}
+ </span>
+ </Show>
+ <Show when={metaTail()}>
+ <span data-slot="user-message-meta-tail" class="text-12-regular text-text-weak cursor-default">
+ {metaTail()}
+ </span>
+ </Show>
</span>
</Show>
<Tooltip
@@ -647,7 +662,7 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp
/>
</Tooltip>
</div>
- </div>
+ </>
</Show>
</div>
)