diff --git a/components/chat-message-display.tsx b/components/chat-message-display.tsx index 2ce33be..0f0f11f 100644 --- a/components/chat-message-display.tsx +++ b/components/chat-message-display.tsx @@ -216,9 +216,29 @@ export function ChatMessageDisplay({ setCopiedMessageId(messageId) setTimeout(() => setCopiedMessageId(null), 2000) } catch (err) { - console.error("Failed to copy message:", err) - setCopyFailedMessageId(messageId) - setTimeout(() => setCopyFailedMessageId(null), 2000) + // Fallback for non-secure contexts (HTTP) or permission denied + const textarea = document.createElement("textarea") + textarea.value = text + textarea.style.position = "fixed" + textarea.style.left = "-9999px" + textarea.style.opacity = "0" + document.body.appendChild(textarea) + + try { + textarea.select() + const success = document.execCommand("copy") + if (!success) { + throw new Error("Copy command failed") + } + setCopiedMessageId(messageId) + setTimeout(() => setCopiedMessageId(null), 2000) + } catch (fallbackErr) { + console.error("Failed to copy message:", fallbackErr) + setCopyFailedMessageId(messageId) + setTimeout(() => setCopyFailedMessageId(null), 2000) + } finally { + document.body.removeChild(textarea) + } } }