Files
Stephen Zhou a84c2d36a3 style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

38 lines
1.1 KiB
TypeScript

export async function writeTextToClipboard(text: string): Promise<void> {
if (window.isSecureContext && navigator.clipboard && navigator.clipboard.writeText) {
try {
await navigator.clipboard.writeText(text)
return
} catch {
// Fall through to the legacy path when browsers deny Clipboard API access.
}
}
return fallbackCopyTextToClipboard(text)
}
async function fallbackCopyTextToClipboard(text: string): Promise<void> {
const textArea = document.createElement('textarea')
textArea.value = text
textArea.style.position = 'fixed' // Avoid scrolling to bottom
document.body.appendChild(textArea)
textArea.focus()
textArea.select()
try {
const successful = document.execCommand('copy')
if (successful) return Promise.resolve()
return Promise.reject(new Error('document.execCommand failed'))
} catch (err) {
return Promise.reject(convertAnyToError(err))
} finally {
document.body.removeChild(textArea)
}
}
function convertAnyToError(err: unknown): Error {
if (err instanceof Error) return err
return new Error(`Caught: ${String(err)}`)
}