{"version":3,"file":"index.cjs","sources":["../../../../../../../packages/components/typography/src/copy/index.ts"],"sourcesContent":["import deselectCurrent from './toggle-selection';\n\ninterface Options {\n  debug?: boolean\n  message?: string\n  format?: string // MIME type\n  onCopy?: (clipboardData: object) => void\n}\n\nconst clipboardToIE11Formatting = {\n  'text/plain': 'Text',\n  'text/html': 'Url',\n  'default': 'Text',\n};\n\nconst defaultMessage = 'Copy to clipboard: #{key}, Enter';\n\nfunction 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\nfunction copy(text: string, options?: Options): boolean {\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  const debug = options.debug || false;\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.MozUserSelect = 'text';\n    mark.style.msUserSelect = 'text';\n    mark.style.userSelect = 'text';\n    mark.addEventListener('copy', (e) => {\n      e.stopPropagation();\n      if (options.format) {\n        e.preventDefault();\n        if (typeof e.clipboardData === 'undefined') {\n          // IE 11\n          debug && console.warn('unable to use e.clipboardData');\n          debug && console.warn('trying IE specific stuff');\n          (window as any).clipboardData.clearData();\n          const format\n            = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting.default;\n          (window as any).clipboardData.setData(format, text);\n        } else {\n          // all other browsers\n          e.clipboardData.clearData();\n          e.clipboardData.setData(options.format, text);\n        }\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    debug && console.error('unable to copy using execCommand: ', err);\n    debug && console.warn('trying IE specific stuff');\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      debug && console.error('unable to copy using clipboardData: ', err);\n      debug && console.error('falling back to prompt');\n      message = format('message' in options ? options.message : defaultMessage);\n      // eslint-disable-next-line no-alert\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    if (mark)\n      document.body.removeChild(mark);\n\n    reselectPrevious();\n  }\n\n  return success;\n}\n\nexport default copy;\n"],"names":["deselectCurrent","format","err"],"mappings":"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"}