import {error} from '@/message' import {useI18n} from 'vue-i18n' export function useCopyToClipboard() { const {t} = useI18n({useScope: 'global'}) function fallbackCopyTextToClipboard(text: string) { const textArea = document.createElement('textarea') textArea.value = text // Avoid scrolling to bottom textArea.style.top = '0' textArea.style.left = '0' textArea.style.position = 'fixed' document.body.appendChild(textArea) textArea.focus() textArea.select() try { // NOTE: the execCommand is deprecated but as of 2022_09 // widely supported and works without https const successful = document.execCommand('copy') if (!successful) { throw new Error() } } catch (err) { error(t('misc.copyError')) } document.body.removeChild(textArea) } return async (text: string) => { if (!navigator.clipboard) { fallbackCopyTextToClipboard(text) return } try { await navigator.clipboard.writeText(text) } catch(e) { error(t('misc.copyError')) } } }