Skip to content

Commit 5a3e0ef

Browse files
committed
tweak(ui): show user message meta on hover
Adds a hover-only metadata line under user messages showing agent, provider, model, and timestamp for quicker context.
1 parent 7ed4499 commit 5a3e0ef

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

packages/ui/src/components/message-part.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
display: flex;
120120
align-items: center;
121121
justify-content: flex-end;
122+
gap: 10px;
122123
opacity: 0;
123124
pointer-events: none;
124125
transition: opacity 0.15s ease;
@@ -130,6 +131,11 @@
130131
}
131132
}
132133

134+
[data-slot="user-message-meta"] {
135+
user-select: none;
136+
text-align: right;
137+
}
138+
133139
[data-slot="user-message-copy-wrapper"][data-interrupted] {
134140
gap: 12px;
135141
}

packages/ui/src/components/message-part.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,27 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp
534534

535535
const agents = createMemo(() => (props.parts?.filter((p) => p.type === "agent") as AgentPart[]) ?? [])
536536

537+
const stamp = createMemo(() => {
538+
const created = props.message.time?.created
539+
if (typeof created !== "number") return ""
540+
const date = new Date(created)
541+
const hours = date.getHours()
542+
const hour12 = hours % 12 || 12
543+
const minute = String(date.getMinutes()).padStart(2, "0")
544+
return `${hour12}:${minute} ${hours < 12 ? "AM" : "PM"}`
545+
})
546+
547+
const meta = createMemo(() => {
548+
const agent = props.message.agent
549+
const items = [
550+
agent ? agent[0]?.toUpperCase() + agent.slice(1) : "",
551+
props.message.model?.providerID,
552+
props.message.model?.modelID,
553+
stamp(),
554+
]
555+
return items.filter((x) => !!x).join(" \u00B7 ")
556+
})
557+
537558
const openImagePreview = (url: string, alt?: string) => {
538559
dialog.show(() => <ImagePreview src={url} alt={alt} />)
539560
}
@@ -591,6 +612,11 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp
591612
{i18n.t("ui.message.interrupted")}
592613
</span>
593614
</Show>
615+
<Show when={meta()}>
616+
<span data-slot="user-message-meta" class="text-12-regular text-text-weak cursor-default">
617+
{meta()}
618+
</span>
619+
</Show>
594620
<Tooltip
595621
value={copied() ? i18n.t("ui.message.copied") : i18n.t("ui.message.copy")}
596622
placement="top"

0 commit comments

Comments
 (0)