{"version":3,"file":"copy-to-clipboard.mjs","sources":["../../src/_util/copy-to-clipboard.ts"],"sourcesContent":["interface Options {\n  message?: string;\n  format?: string; // MIME type\n  onCopy?: (clipboardData: object) => void;\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\nexport const copy = (text: string, options?: Options) => {\n  let message;\n  let reselectPrevious;\n  let range;\n  let selection;\n  let mark;\n  let 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      // 移动端不使用 prompt 兜底，静默失败\n      console.warn('Copy to clipboard failed', err);\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"],"names":["deselectCurrent","selection","document","getSelection","rangeCount","active","activeElement","ranges","i","push","getRangeAt","tagName","toUpperCase","blur","removeAllRanges","type","forEach","range","addRange","focus","copy","text","options","message","reselectPrevious","mark","success","createRange","createElement","textContent","style","all","position","top","clip","whiteSpace","webkitUserSelect","userSelect","addEventListener","e","stopPropagation","format","preventDefault","clipboardData","clearData","setData","onCopy","body","appendChild","selectNodeContents","successful","execCommand","Error","err","window","console","warn","removeRange","removeChild"],"mappings":"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"}