From 0740d55dde1db0b956affd60709d23b57b3c331f Mon Sep 17 00:00:00 2001 From: togotago <88701594+togotago@users.noreply.github.com> Date: Wed, 18 Feb 2026 23:00:50 +0100 Subject: [PATCH] feat: make system event messages collapsible (#9) System events now render as compact pills (label + chevron + timestamp) that expand on click to reveal the full message content. - Collapsed (default): rounded-full pill with Zap icon, label, ChevronDown, and timestamp. Clean single-line appearance. - Expanded (on click): rounded-xl container with full message text shown below in whitespace-pre-wrap. Chevron rotates 180deg. - Added cursor-pointer and hover:bg-pc-elevated/50 for discoverability. - Removed always-visible truncated text from collapsed state for a cleaner default appearance. Co-authored-by: togotago --- src/components/ChatMessage.tsx | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/components/ChatMessage.tsx b/src/components/ChatMessage.tsx index 543fd84..1b840f4 100644 --- a/src/components/ChatMessage.tsx +++ b/src/components/ChatMessage.tsx @@ -418,6 +418,7 @@ function getPlainText(message: ChatMessageType): string { /** System event displayed as a subtle inline notification */ function SystemEventMessage({ message }: { message: ChatMessageType }) { + const [expanded, setExpanded] = useState(false); const text = message.content || getTextBlocks(message.blocks).map(b => (b as Extract).text).join(' '); // Trim leading brackets like [cron:xxx] or [EVENT] for cleaner display const display = text.replace(/^\[.*?\]\s*/, '').trim() || text.trim(); @@ -425,12 +426,22 @@ function SystemEventMessage({ message }: { message: ChatMessageType }) { return (
-
- - {label} - {display} - {message.timestamp && ( - +
setExpanded(v => !v)} + > +
+ + {label} + + {message.timestamp && ( + + )} +
+ {expanded && ( +
+

{display}

+
)}