From f1b1d1f1c2877ecd91d543e0c5d2be689afce6d4 Mon Sep 17 00:00:00 2001 From: Christopher Tso Date: Sun, 5 Jul 2026 05:37:37 +0200 Subject: [PATCH] fix(dashboard): contain transcript detail on mobile --- apps/dashboard/src/components/EvalDetail.tsx | 14 ++--- apps/dashboard/src/components/ResultTable.tsx | 8 +-- .../src/components/TranscriptTimeline.tsx | 54 +++++++++---------- .../components/transcript-timeline.test.tsx | 18 +++++++ 4 files changed, 57 insertions(+), 37 deletions(-) diff --git a/apps/dashboard/src/components/EvalDetail.tsx b/apps/dashboard/src/components/EvalDetail.tsx index 9154c7563..be3346edd 100644 --- a/apps/dashboard/src/components/EvalDetail.tsx +++ b/apps/dashboard/src/components/EvalDetail.tsx @@ -171,10 +171,10 @@ export function EvalDetail({ }; return ( -
+
{/* Tab navigation — at the top so Files tab editor fills maximum height */} -
-
+
+
{tabs.map((tab) => (
-
+
+
{label}
-
+      
         {formatUnknown(value)}
       
@@ -529,7 +529,7 @@ function JsonBlock({ function MetadataPill({ children }: { children: ReactNode }) { return ( - + {children} ); @@ -586,7 +586,7 @@ function ToolCallDetails({ return (
- + {expanded ? '-' : '+'} Tool call @@ -605,7 +605,7 @@ function ToolCallDetails({ {duration && {duration}} -
+
{callId && id: {callId}} {duration && duration: {duration}} @@ -624,12 +624,12 @@ function ToolResultDetails({ line }: { line: TranscriptJsonLine }) { const duration = formatDurationMs(line.duration_ms); const tokenUsage = formatTokenUsage(line.token_usage); return ( -
+
{line.name ? `Tool result · ${line.name}` : 'Tool result'} {duration && {duration}} -
+
{line.name && name: {line.name}} {duration && duration: {duration}} @@ -660,7 +660,7 @@ function TranscriptMessageCard({ return (
- +
{expanded ? '-' : '+'} @@ -707,7 +707,7 @@ function TranscriptMessageCard({ {line.role === 'tool' || line.role === 'function' ? ( ) : content.trim().length > 0 ? ( -
+          
             {content}
           
) : ( @@ -728,7 +728,7 @@ function TranscriptMessageCard({ )} {line.metadata && line.role !== 'tool' && line.role !== 'function' && ( -
+
Message metadata @@ -757,7 +757,7 @@ function TranscriptSummary({ const toolCounts = summarizeToolCounts(messages); return ( -
+
{messages.length} messages {Array.from(roleCounts.entries()).map(([role, count]) => ( @@ -905,37 +905,37 @@ export function TranscriptTimeline({ } return ( -
+
{hasCanonicalAnswer && ( -
-
-
+
+
+

Final answer

Highlighted from canonical outputs/answer.md; transcript context stays below.

-
+
Open answer.md in Files Open answer.md
-
+          
             {finalAnswer && finalAnswer.trim().length > 0 ? finalAnswer : 'answer.md is empty.'}
           
)} -
-
-
+
+
+

Transcript timeline

-
+
Open transcript.json in Files @@ -947,9 +947,9 @@ export function TranscriptTimeline({
-
-
-
+
+
+
{allToolIds.length > 0 && ( -
+