text: /* istanbul ignore file */
  import * as dom from './dom/index.js'
  import { swalClasses } from '../utils/classes.js'
  
  // Fix iOS scrolling http://stackoverflow.com/q/39626302
  
  export const iOSfix = () => {
    const iOS =
      // @ts-ignore
      (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) ||
      (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)
    if (iOS && !dom.hasClass(document.body, swalClasses.iosfix)) {
      const offset = document.body.scrollTop
      document.body.style.top = `${offset * -1}px`
      dom.addClass(document.body, swalClasses.iosfix)
      lockBodyScroll()
      addBottomPaddingForTallPopups()
    }
  }
  
  /**
   * https://github.com/sweetalert2/sweetalert2/issues/1948
   */
  const addBottomPaddingForTallPopups = () => {
    const ua = navigator.userAgent
    const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i)
    const webkit = !!ua.match(/WebKit/i)
    const iOSSafari = iOS && webkit && !ua.match(/CriOS/i)
    if (iOSSafari) {
      const bottomPanelHeight = 44
      if (dom.getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) {
        dom.getContainer().style.paddingBottom = `${bottomPanelHeight}px`
      }
    }
  }
  
  /**
   * https://github.com/sweetalert2/sweetalert2/issues/1246
   */
  const lockBodyScroll = () => {
    const container = dom.getContainer()
    let preventTouchMove
    container.ontouchstart = (e) => {
      preventTouchMove = shouldPreventTouchMove(e)
    }
    container.ontouchmove = (e) => {
      if (preventTouchMove) {
        e.preventDefault()
        e.stopPropagation()
      }
    }
  }
  
  const shouldPreventTouchMove = (event) => {
    const target = event.target
    const container = dom.getContainer()
    if (isStylus(event) || isZoom(event)) {
      return false
    }
    if (target === container) {
      return true
    }
    if (
      !dom.isScrollable(container) &&
      target.tagName !== 'INPUT' && // #1603
      target.tagName !== 'TEXTAREA' && // #2266
      !(
        dom.isScrollable(dom.getHtmlContainer()) && // #1944
        dom.getHtmlContainer().contains(target)
      )
    ) {
      return true
    }
    return false
  }
  
  /**
   * https://github.com/sweetalert2/sweetalert2/issues/1786
   *
   * @param {*} event
   * @returns {boolean}
   */
  const isStylus = (event) => {
    return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'
  }
  
  /**
   * https://github.com/sweetalert2/sweetalert2/issues/1891
   *
   * @param {TouchEvent} event
   * @returns {boolean}
   */
  const isZoom = (event) => {
    return event.touches && event.touches.length > 1
  }
  
  export const undoIOSfix = () => {
    if (dom.hasClass(document.body, swalClasses.iosfix)) {
      const offset = parseInt(document.body.style.top, 10)
      dom.removeClass(document.body, swalClasses.iosfix)
      document.body.style.top = ''
      document.body.scrollTop = offset * -1
    }
  }
  