export async function copyToClipboard(text: string): Promise { if (!text) return false if (navigator.clipboard?.writeText) { try { await navigator.clipboard.writeText(text) return true } catch { // Fall through for non-secure HTTP origins where Clipboard API is blocked. } } const textarea = document.createElement('textarea') textarea.value = text textarea.setAttribute('readonly', '') textarea.style.position = 'fixed' textarea.style.top = '0' textarea.style.left = '0' textarea.style.width = '1px' textarea.style.height = '1px' textarea.style.opacity = '0' textarea.style.pointerEvents = 'none' const selection = document.getSelection() const selectedRange = selection?.rangeCount ? selection.getRangeAt(0) : null document.body.appendChild(textarea) textarea.focus({ preventScroll: true }) textarea.select() textarea.setSelectionRange(0, textarea.value.length) let copied = false try { copied = document.execCommand('copy') } finally { document.body.removeChild(textarea) if (selection && selectedRange) { selection.removeAllRanges() selection.addRange(selectedRange) } } return copied }