From b4a4a3e5f0ff5a309a46d978b74b0f068b2888f7 Mon Sep 17 00:00:00 2001 From: Subramaniyajothi6 Date: Tue, 23 Jun 2026 23:59:49 +0530 Subject: [PATCH 1/2] feat: add copy-trace action to Task Details error banner (#830) --- frontend/src/components/CopyToClipboard.tsx | 18 +++++++--- frontend/src/pages/TaskDetails.tsx | 13 +++++-- .../unit/components/CopyToClipboard.test.tsx | 35 +++++++++++++++++++ 3 files changed, 59 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/CopyToClipboard.tsx b/frontend/src/components/CopyToClipboard.tsx index cbeec3dc2..ddb012425 100644 --- a/frontend/src/components/CopyToClipboard.tsx +++ b/frontend/src/components/CopyToClipboard.tsx @@ -3,10 +3,19 @@ import { AlertTriangle, Check, Copy } from 'lucide-react'; interface CopyToClipboardProps { textToCopy: string; + /** Idle-state button label. Defaults to "Copy Output". */ + label?: string; + /** Native tooltip / accessible title. Defaults to "Copy to clipboard". */ + title?: string; } -const CopyToClipboard: React.FC = ({ textToCopy }) => { +const CopyToClipboard: React.FC = ({ + textToCopy, + label = 'Copy Output', + title = 'Copy to clipboard', +}) => { const [copyState, setCopyState] = useState<'idle' | 'copied' | 'error'>('idle'); + const hasText = Boolean(textToCopy); const handleCopy = async (): Promise => { if (!textToCopy) return; @@ -27,7 +36,7 @@ const CopyToClipboard: React.FC = ({ textToCopy }) => { }[copyState]; const buttonContent = { - idle: { icon: