1234567891011121314151617181920212223242526272829303132333435 |
- 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)}`)
- }
|