export async function copyTextToClipboard(text: string): Promise { try { if (navigator.clipboard?.writeText) { await navigator.clipboard.writeText(text); return true; } } catch { // Fall through to the legacy path for browsers/WebViews where the // Clipboard API exists but rejects outside a secure context. } return copyTextWithTextarea(text); } function copyTextWithTextarea(text: string): boolean { if (typeof document.execCommand !== "function") { return false; } const textarea = document.createElement("textarea"); textarea.value = text; textarea.setAttribute("readonly", ""); textarea.style.position = "fixed"; textarea.style.top = "-9999px"; textarea.style.left = "-9999px"; textarea.style.opacity = "0"; document.body.appendChild(textarea); textarea.focus(); textarea.select(); textarea.setSelectionRange(0, textarea.value.length); try { return document.execCommand("copy"); } catch { return false; } finally { document.body.removeChild(textarea); } }