|
|
|
@@ -0,0 +1,35 @@ |
|
|
|
export async function writeTextToClipboard(text: string): Promise<void> { |
|
|
|
if (navigator.clipboard && navigator.clipboard.writeText) |
|
|
|
return navigator.clipboard.writeText(text) |
|
|
|
|
|
|
|
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: any): Error { |
|
|
|
if (err instanceof Error) |
|
|
|
return err |
|
|
|
|
|
|
|
return new Error(`Caught: ${String(err)}`) |
|
|
|
} |