{"version":3,"file":"copy-to-clipboard.mjs","sources":["../../../../components/typography/utils/copy-to-clipboard.ts"],"sourcesContent":["interface Options {\n  message?: string;\n  format?: string; // MIME type\n  onCopy?: (clipboardData: object) => void;\n}\n\nconst defaultMessage = 'Copy to clipboard: #{key}, Enter';\n\nconst format = (message: string) => {\n  const copyKey = (/mac os x/i.test(navigator.userAgent) ? '⌘' : 'Ctrl') + '+C';\n  return message.replace(/#{\\s*key\\s*}/g, copyKey);\n};\n\n// inspired by https://github.com/sudodoki/toggle-selection, refactor to esm\nconst deselectCurrent = () => {\n  const selection = document.getSelection();\n  if (!selection.rangeCount) {\n    return function () {};\n  }\n  let active = document.activeElement as any;\n\n  const ranges: Range[] = [];\n  for (let i = 0; i < selection.rangeCount; i++) {\n    ranges.push(selection.getRangeAt(i));\n  }\n\n  const tagName = active.tagName.toUpperCase(); // toUpperCase handles XHTML\n  switch (tagName) {\n    case 'INPUT':\n    case 'TEXTAREA':\n      active.blur();\n      break;\n\n    default:\n      active = null;\n      break;\n  }\n\n  selection.removeAllRanges();\n  return function () {\n    selection.type === 'Caret' && selection.removeAllRanges();\n\n    if (!selection.rangeCount) {\n      ranges.forEach(function (range) {\n        selection.addRange(range);\n      });\n    }\n\n    active && active.focus();\n  };\n};\n\nconst copy = (text: string, options?: Options) => {\n  let message,\n    reselectPrevious,\n    range,\n    selection,\n    mark,\n    success = false;\n  if (!options) {\n    options = {};\n  }\n  try {\n    reselectPrevious = deselectCurrent();\n\n    range = document.createRange();\n    selection = document.getSelection();\n\n    mark = document.createElement('span');\n    mark.textContent = text;\n    // reset user styles for span element\n    mark.style.all = 'unset';\n    // prevents scrolling to the end of the page\n    mark.style.position = 'fixed';\n    mark.style.top = '0';\n    mark.style.clip = 'rect(0, 0, 0, 0)';\n    // used to preserve spaces and line breaks\n    mark.style.whiteSpace = 'pre';\n    // do not inherit user-select (it may be `none`)\n    mark.style.webkitUserSelect = 'text';\n    mark.style.userSelect = 'text';\n    mark.addEventListener('copy', function (e) {\n      e.stopPropagation();\n      if (options.format) {\n        e.preventDefault();\n        e.clipboardData.clearData();\n        e.clipboardData.setData(options.format, text);\n      }\n      if (options.onCopy) {\n        e.preventDefault();\n        options.onCopy(e.clipboardData);\n      }\n    });\n\n    document.body.appendChild(mark);\n\n    range.selectNodeContents(mark);\n    selection.addRange(range);\n\n    const successful = document.execCommand('copy');\n    if (!successful) {\n      throw new Error('copy command was unsuccessful');\n    }\n    success = true;\n  } catch (err) {\n    try {\n      (window as any).clipboardData.setData(options.format || 'text', text);\n      options.onCopy && options.onCopy((window as any).clipboardData);\n      success = true;\n    } catch (err) {\n      message = format('message' in options ? options.message : defaultMessage);\n      window.prompt(message, text);\n    }\n  } finally {\n    if (selection) {\n      if (typeof selection.removeRange == 'function') {\n        selection.removeRange(range);\n      } else {\n        selection.removeAllRanges();\n      }\n    }\n\n    if (mark) {\n      document.body.removeChild(mark);\n    }\n    reselectPrevious();\n  }\n\n  return success;\n};\n\nexport default copy;\n"],"names":["defaultMessage","format","message","copyKey","test","navigator","userAgent","replace","deselectCurrent","selection","document","getSelection","rangeCount","active","activeElement","ranges","i","push","getRangeAt","tagName","toUpperCase","blur","removeAllRanges","type","forEach","range","addRange","focus","copy","text","options","reselectPrevious","mark","success","createRange","createElement","textContent","style","all","position","top","clip","whiteSpace","webkitUserSelect","userSelect","addEventListener","e","stopPropagation","preventDefault","clipboardData","clearData","setData","onCopy","body","appendChild","selectNodeContents","successful","execCommand","Error","err","window","prompt","removeRange","removeChild"],"mappings":"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"}