export default function copyTextToClipboard(text, {target = document.body} = {}) { if (typeof text !== 'string') { throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof text}\`.`); } const element = document.createElement('textarea'); const previouslyFocusedElement = document.activeElement; element.value = text; // Prevent keyboard from showing on mobile element.setAttribute('readonly', ''); element.style.contain = 'strict'; element.style.position = 'absolute'; element.style.left = '-9999px'; element.style.fontSize = '12pt'; // Prevent zooming on iOS const selection = document.getSelection(); const originalRange = selection.rangeCount > 0 && selection.getRangeAt(0); target.append(element); element.select(); // Explicit selection workaround for iOS element.selectionStart = 0; element.selectionEnd = text.length; let isSuccess = false; try { isSuccess = document.execCommand('copy'); } catch {} element.remove(); if (originalRange) { selection.removeAllRanges(); selection.addRange(originalRange); } // Get the focus back on the previously focused element, if any if (previouslyFocusedElement) { previouslyFocusedElement.focus(); } return isSuccess; }