{"version":3,"file":"jarallax.cjs","sources":["../src/defaults.js","../src/utils/global.js","../src/utils/css.js","../src/utils/extend.js","../src/utils/getParents.js","../src/utils/ready.js","../src/utils/isMobile.js","../src/utils/getWindowSize.js","../src/utils/observer.js","../src/core.js","../node_modules/video-worker/dist/video-worker.esm.js","../src/ext-video.js","../src/deprecated/ext-element.js","../src/core.esm.js"],"sourcesContent":["export default {\n  // Base parallax options.\n  type: 'scroll',\n  speed: 0.5,\n  containerClass: 'jarallax-container',\n  imgSrc: null,\n  imgElement: '.jarallax-img',\n  imgSize: 'cover',\n  imgPosition: '50% 50%',\n  imgRepeat: 'no-repeat',\n  keepImg: false,\n  elementInViewport: null,\n  zIndex: -100,\n  disableParallax: false,\n\n  // Callbacks.\n  onScroll: null,\n  onInit: null,\n  onDestroy: null,\n  onCoverImage: null,\n\n  // Video options.\n  videoClass: 'jarallax-video',\n  videoSrc: null,\n  videoStartTime: 0,\n  videoEndTime: 0,\n  videoVolume: 0,\n  videoLoop: true,\n  videoPlayOnlyVisible: true,\n  videoLazyLoading: true,\n  disableVideo: false,\n\n  // Video callbacks.\n  onVideoInsert: null,\n  onVideoWorkerInit: null,\n};\n","/* eslint-disable import/no-mutable-exports */\n/* eslint-disable no-restricted-globals */\nlet win;\n\nif (typeof window !== 'undefined') {\n  win = window;\n} else if (typeof global !== 'undefined') {\n  win = global;\n} else if (typeof self !== 'undefined') {\n  win = self;\n} else {\n  win = {};\n}\n\nexport default win;\n","import global from './global';\n\n/**\n * Add styles to element.\n *\n * @param {Element} el - element.\n * @param {String|Object} styles - styles list.\n *\n * @returns {Element}\n */\nexport default function css(el, styles) {\n  if (typeof styles === 'string') {\n    return global.getComputedStyle(el).getPropertyValue(styles);\n  }\n\n  Object.keys(styles).forEach((key) => {\n    el.style[key] = styles[key];\n  });\n  return el;\n}\n","/**\n * Extend like jQuery.extend\n *\n * @param {Object} out - output object.\n * @param {...any} args - additional objects to extend.\n *\n * @returns {Object}\n */\nexport default function extend(out, ...args) {\n  out = out || {};\n\n  Object.keys(args).forEach((i) => {\n    if (!args[i]) {\n      return;\n    }\n    Object.keys(args[i]).forEach((key) => {\n      out[key] = args[i][key];\n    });\n  });\n\n  return out;\n}\n","/**\n * Get all parents of the element.\n *\n * @param {Element} elem - DOM element.\n *\n * @returns {Array}\n */\nexport default function getParents(elem) {\n  const parents = [];\n\n  while (elem.parentElement !== null) {\n    elem = elem.parentElement;\n\n    if (elem.nodeType === 1) {\n      parents.push(elem);\n    }\n  }\n\n  return parents;\n}\n","/**\n * Document ready callback.\n * @param {Function} callback - callback will be fired once Document ready.\n */\nfunction ready(callback) {\n  if (document.readyState === 'complete' || document.readyState === 'interactive') {\n    // Already ready or interactive, execute callback\n    callback();\n  } else {\n    document.addEventListener('DOMContentLoaded', callback, {\n      capture: true,\n      once: true,\n      passive: true,\n    });\n  }\n}\n\nexport default ready;\n","import global from './global';\n\nconst { navigator } = global;\n\nconst mobileAgent = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n  navigator.userAgent\n);\n\nexport default function isMobile() {\n  return mobileAgent;\n}\n","import global from './global';\nimport domReady from './ready';\nimport isMobile from './isMobile';\n\nlet wndW;\nlet wndH;\nlet $deviceHelper;\n\n/**\n * The most popular mobile browsers changes height after page scroll and this generates image jumping.\n * We can fix it using this workaround with vh units.\n */\nfunction getDeviceHeight() {\n  if (!$deviceHelper && document.body) {\n    $deviceHelper = document.createElement('div');\n    $deviceHelper.style.cssText =\n      'position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;';\n    document.body.appendChild($deviceHelper);\n  }\n\n  return (\n    ($deviceHelper ? $deviceHelper.clientHeight : 0) ||\n    global.innerHeight ||\n    document.documentElement.clientHeight\n  );\n}\n\nfunction updateWindowHeight() {\n  wndW = global.innerWidth || document.documentElement.clientWidth;\n\n  if (isMobile()) {\n    wndH = getDeviceHeight();\n  } else {\n    wndH = global.innerHeight || document.documentElement.clientHeight;\n  }\n}\n\nupdateWindowHeight();\nglobal.addEventListener('resize', updateWindowHeight);\nglobal.addEventListener('orientationchange', updateWindowHeight);\nglobal.addEventListener('load', updateWindowHeight);\ndomReady(() => {\n  updateWindowHeight({\n    type: 'dom-loaded',\n  });\n});\n\nexport default function getWindowSize() {\n  return {\n    width: wndW,\n    height: wndH,\n  };\n}\n","import global from './global';\nimport getWindowSize from './getWindowSize';\n\n// List with all jarallax instances\n// need to render all in one scroll/resize event.\nconst jarallaxList = [];\n\nfunction updateParallax() {\n  if (!jarallaxList.length) {\n    return;\n  }\n\n  const { width: wndW, height: wndH } = getWindowSize();\n\n  jarallaxList.forEach((data, k) => {\n    const { instance, oldData } = data;\n\n    if (!instance.isVisible()) {\n      return;\n    }\n\n    const clientRect = instance.$item.getBoundingClientRect();\n\n    const newData = {\n      width: clientRect.width,\n      height: clientRect.height,\n      top: clientRect.top,\n      bottom: clientRect.bottom,\n      wndW,\n      wndH,\n    };\n\n    const isResized =\n      !oldData ||\n      oldData.wndW !== newData.wndW ||\n      oldData.wndH !== newData.wndH ||\n      oldData.width !== newData.width ||\n      oldData.height !== newData.height;\n    const isScrolled =\n      isResized || !oldData || oldData.top !== newData.top || oldData.bottom !== newData.bottom;\n\n    jarallaxList[k].oldData = newData;\n\n    if (isResized) {\n      instance.onResize();\n    }\n    if (isScrolled) {\n      instance.onScroll();\n    }\n  });\n\n  global.requestAnimationFrame(updateParallax);\n}\n\nconst visibilityObserver = new global.IntersectionObserver(\n  (entries) => {\n    entries.forEach((entry) => {\n      entry.target.jarallax.isElementInViewport = entry.isIntersecting;\n    });\n  },\n  {\n    // We have to start parallax calculation before the block is in view\n    // to prevent possible parallax jumping.\n    rootMargin: '50px',\n  }\n);\n\nexport function addObserver(instance) {\n  jarallaxList.push({\n    instance,\n  });\n\n  if (jarallaxList.length === 1) {\n    global.requestAnimationFrame(updateParallax);\n  }\n\n  visibilityObserver.observe(instance.options.elementInViewport || instance.$item);\n}\n\nexport function removeObserver(instance) {\n  jarallaxList.forEach((data, key) => {\n    if (data.instance.instanceID === instance.instanceID) {\n      jarallaxList.splice(key, 1);\n    }\n  });\n\n  visibilityObserver.unobserve(instance.options.elementInViewport || instance.$item);\n}\n","/* eslint-disable class-methods-use-this */\nimport defaults from './defaults';\nimport global from './utils/global';\nimport css from './utils/css';\nimport extend from './utils/extend';\nimport getParents from './utils/getParents';\nimport getWindowSize from './utils/getWindowSize';\nimport { addObserver, removeObserver } from './utils/observer';\n\nconst { navigator } = global;\n\nlet instanceID = 0;\n\n// Jarallax class\nclass Jarallax {\n  constructor(item, userOptions) {\n    const self = this;\n\n    self.instanceID = instanceID;\n    instanceID += 1;\n\n    self.$item = item;\n\n    self.defaults = { ...defaults };\n\n    // prepare data-options\n    const dataOptions = self.$item.dataset || {};\n    const pureDataOptions = {};\n    Object.keys(dataOptions).forEach((key) => {\n      const lowerCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1);\n      if (lowerCaseOption && typeof self.defaults[lowerCaseOption] !== 'undefined') {\n        pureDataOptions[lowerCaseOption] = dataOptions[key];\n      }\n    });\n\n    self.options = self.extend({}, self.defaults, pureDataOptions, userOptions);\n    self.pureOptions = self.extend({}, self.options);\n\n    // prepare 'true' and 'false' strings to boolean\n    Object.keys(self.options).forEach((key) => {\n      if (self.options[key] === 'true') {\n        self.options[key] = true;\n      } else if (self.options[key] === 'false') {\n        self.options[key] = false;\n      }\n    });\n\n    // fix speed option [-1.0, 2.0]\n    self.options.speed = Math.min(2, Math.max(-1, parseFloat(self.options.speed)));\n\n    // prepare disableParallax callback\n    if (typeof self.options.disableParallax === 'string') {\n      self.options.disableParallax = new RegExp(self.options.disableParallax);\n    }\n    if (self.options.disableParallax instanceof RegExp) {\n      const disableParallaxRegexp = self.options.disableParallax;\n      self.options.disableParallax = () => disableParallaxRegexp.test(navigator.userAgent);\n    }\n    if (typeof self.options.disableParallax !== 'function') {\n      self.options.disableParallax = () => false;\n    }\n\n    // prepare disableVideo callback\n    if (typeof self.options.disableVideo === 'string') {\n      self.options.disableVideo = new RegExp(self.options.disableVideo);\n    }\n    if (self.options.disableVideo instanceof RegExp) {\n      const disableVideoRegexp = self.options.disableVideo;\n      self.options.disableVideo = () => disableVideoRegexp.test(navigator.userAgent);\n    }\n    if (typeof self.options.disableVideo !== 'function') {\n      self.options.disableVideo = () => false;\n    }\n\n    // custom element to check if parallax in viewport\n    let elementInVP = self.options.elementInViewport;\n    // get first item from array\n    if (\n      elementInVP &&\n      typeof elementInVP === 'object' &&\n      typeof elementInVP.length !== 'undefined'\n    ) {\n      [elementInVP] = elementInVP;\n    }\n    // check if dom element\n    if (!(elementInVP instanceof Element)) {\n      elementInVP = null;\n    }\n    self.options.elementInViewport = elementInVP;\n\n    self.image = {\n      src: self.options.imgSrc || null,\n      $container: null,\n      useImgTag: false,\n\n      // 1. Position fixed is needed for the most of browsers because absolute position have glitches\n      // 2. On MacOS with smooth scroll there is a huge lags with absolute position - https://github.com/nk-o/jarallax/issues/75\n      // 3. Previously used 'absolute' for mobile devices. But we re-tested on iPhone 12 and 'fixed' position is working better, then 'absolute', so for now position is always 'fixed'\n      position: 'fixed',\n    };\n\n    if (self.initImg() && self.canInitParallax()) {\n      self.init();\n    }\n  }\n\n  css(el, styles) {\n    return css(el, styles);\n  }\n\n  extend(out, ...args) {\n    return extend(out, ...args);\n  }\n\n  // get window size and scroll position. Useful for extensions\n  getWindowData() {\n    const { width, height } = getWindowSize();\n\n    return {\n      width,\n      height,\n      y: document.documentElement.scrollTop,\n    };\n  }\n\n  // Jarallax functions\n  initImg() {\n    const self = this;\n\n    // find image element\n    let $imgElement = self.options.imgElement;\n    if ($imgElement && typeof $imgElement === 'string') {\n      $imgElement = self.$item.querySelector($imgElement);\n    }\n\n    // check if dom element\n    if (!($imgElement instanceof Element)) {\n      if (self.options.imgSrc) {\n        $imgElement = new Image();\n        $imgElement.src = self.options.imgSrc;\n      } else {\n        $imgElement = null;\n      }\n    }\n\n    if ($imgElement) {\n      if (self.options.keepImg) {\n        self.image.$item = $imgElement.cloneNode(true);\n      } else {\n        self.image.$item = $imgElement;\n        self.image.$itemParent = $imgElement.parentNode;\n      }\n      self.image.useImgTag = true;\n    }\n\n    // true if there is img tag\n    if (self.image.$item) {\n      return true;\n    }\n\n    // get image src\n    if (self.image.src === null) {\n      self.image.src =\n        'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n      self.image.bgImage = self.css(self.$item, 'background-image');\n    }\n    return !(!self.image.bgImage || self.image.bgImage === 'none');\n  }\n\n  canInitParallax() {\n    return !this.options.disableParallax();\n  }\n\n  init() {\n    const self = this;\n    const containerStyles = {\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      width: '100%',\n      height: '100%',\n      overflow: 'hidden',\n    };\n    let imageStyles = {\n      pointerEvents: 'none',\n      transformStyle: 'preserve-3d',\n      backfaceVisibility: 'hidden',\n    };\n\n    if (!self.options.keepImg) {\n      // save default user styles\n      const curStyle = self.$item.getAttribute('style');\n      if (curStyle) {\n        self.$item.setAttribute('data-jarallax-original-styles', curStyle);\n      }\n      if (self.image.useImgTag) {\n        const curImgStyle = self.image.$item.getAttribute('style');\n        if (curImgStyle) {\n          self.image.$item.setAttribute('data-jarallax-original-styles', curImgStyle);\n        }\n      }\n    }\n\n    // set relative position and z-index to the parent\n    if (self.css(self.$item, 'position') === 'static') {\n      self.css(self.$item, {\n        position: 'relative',\n      });\n    }\n    if (self.css(self.$item, 'z-index') === 'auto') {\n      self.css(self.$item, {\n        zIndex: 0,\n      });\n    }\n\n    // container for parallax image\n    self.image.$container = document.createElement('div');\n    self.css(self.image.$container, containerStyles);\n    self.css(self.image.$container, {\n      'z-index': self.options.zIndex,\n    });\n\n    // it will remove some image overlapping\n    // overlapping occur due to an image position fixed inside absolute position element\n    // needed only when background in fixed position\n    if (this.image.position === 'fixed') {\n      self.css(self.image.$container, {\n        '-webkit-clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n        'clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n      });\n    }\n\n    // Add container unique ID.\n    self.image.$container.setAttribute('id', `jarallax-container-${self.instanceID}`);\n\n    // Add container class.\n    if (self.options.containerClass) {\n      self.image.$container.setAttribute('class', self.options.containerClass);\n    }\n\n    self.$item.appendChild(self.image.$container);\n\n    // use img tag\n    if (self.image.useImgTag) {\n      imageStyles = self.extend(\n        {\n          'object-fit': self.options.imgSize,\n          'object-position': self.options.imgPosition,\n          'max-width': 'none',\n        },\n        containerStyles,\n        imageStyles\n      );\n\n      // use div with background image\n    } else {\n      self.image.$item = document.createElement('div');\n      if (self.image.src) {\n        imageStyles = self.extend(\n          {\n            'background-position': self.options.imgPosition,\n            'background-size': self.options.imgSize,\n            'background-repeat': self.options.imgRepeat,\n            'background-image': self.image.bgImage || `url(\"${self.image.src}\")`,\n          },\n          containerStyles,\n          imageStyles\n        );\n      }\n    }\n\n    if (\n      self.options.type === 'opacity' ||\n      self.options.type === 'scale' ||\n      self.options.type === 'scale-opacity' ||\n      self.options.speed === 1\n    ) {\n      self.image.position = 'absolute';\n    }\n\n    // 1. Check if one of parents have transform style (without this check, scroll transform will be inverted if used parallax with position fixed)\n    //    discussion - https://github.com/nk-o/jarallax/issues/9\n    // 2. Check if parents have overflow scroll\n    if (self.image.position === 'fixed') {\n      const $parents = getParents(self.$item).filter((el) => {\n        const styles = global.getComputedStyle(el);\n        const parentTransform =\n          styles['-webkit-transform'] || styles['-moz-transform'] || styles.transform;\n        const overflowRegex = /(auto|scroll)/;\n\n        return (\n          (parentTransform && parentTransform !== 'none') ||\n          overflowRegex.test(styles.overflow + styles['overflow-y'] + styles['overflow-x'])\n        );\n      });\n\n      self.image.position = $parents.length ? 'absolute' : 'fixed';\n    }\n\n    // add position to parallax block\n    imageStyles.position = self.image.position;\n\n    // insert parallax image\n    self.css(self.image.$item, imageStyles);\n    self.image.$container.appendChild(self.image.$item);\n\n    // set initial position and size\n    self.onResize();\n    self.onScroll(true);\n\n    // call onInit event\n    if (self.options.onInit) {\n      self.options.onInit.call(self);\n    }\n\n    // remove default user background\n    if (self.css(self.$item, 'background-image') !== 'none') {\n      self.css(self.$item, {\n        'background-image': 'none',\n      });\n    }\n\n    addObserver(self);\n  }\n\n  destroy() {\n    const self = this;\n\n    removeObserver(self);\n\n    // return styles on container as before jarallax init\n    const originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');\n    self.$item.removeAttribute('data-jarallax-original-styles');\n    // null occurs if there is no style tag before jarallax init\n    if (!originalStylesTag) {\n      self.$item.removeAttribute('style');\n    } else {\n      self.$item.setAttribute('style', originalStylesTag);\n    }\n\n    if (self.image.useImgTag) {\n      // return styles on img tag as before jarallax init\n      const originalStylesImgTag = self.image.$item.getAttribute('data-jarallax-original-styles');\n      self.image.$item.removeAttribute('data-jarallax-original-styles');\n      // null occurs if there is no style tag before jarallax init\n      if (!originalStylesImgTag) {\n        self.image.$item.removeAttribute('style');\n      } else {\n        self.image.$item.setAttribute('style', originalStylesTag);\n      }\n\n      // move img tag to its default position\n      if (self.image.$itemParent) {\n        self.image.$itemParent.appendChild(self.image.$item);\n      }\n    }\n\n    // remove additional dom elements\n    if (self.image.$container) {\n      self.image.$container.parentNode.removeChild(self.image.$container);\n    }\n\n    // call onDestroy event\n    if (self.options.onDestroy) {\n      self.options.onDestroy.call(self);\n    }\n\n    // delete jarallax from item\n    delete self.$item.jarallax;\n  }\n\n  coverImage() {\n    const self = this;\n\n    const { height: wndH } = getWindowSize();\n    const rect = self.image.$container.getBoundingClientRect();\n    const contH = rect.height;\n    const { speed } = self.options;\n    const isScroll = self.options.type === 'scroll' || self.options.type === 'scroll-opacity';\n    let scrollDist = 0;\n    let resultH = contH;\n    let resultMT = 0;\n\n    // scroll parallax\n    if (isScroll) {\n      // scroll distance and height for image\n      if (speed < 0) {\n        scrollDist = speed * Math.max(contH, wndH);\n\n        if (wndH < contH) {\n          scrollDist -= speed * (contH - wndH);\n        }\n      } else {\n        scrollDist = speed * (contH + wndH);\n      }\n\n      // size for scroll parallax\n      if (speed > 1) {\n        resultH = Math.abs(scrollDist - wndH);\n      } else if (speed < 0) {\n        resultH = scrollDist / speed + Math.abs(scrollDist);\n      } else {\n        resultH += (wndH - contH) * (1 - speed);\n      }\n\n      scrollDist /= 2;\n    }\n\n    // store scroll distance\n    self.parallaxScrollDistance = scrollDist;\n\n    // vertical center\n    if (isScroll) {\n      resultMT = (wndH - resultH) / 2;\n    } else {\n      resultMT = (contH - resultH) / 2;\n    }\n\n    // apply result to item\n    self.css(self.image.$item, {\n      height: `${resultH}px`,\n      marginTop: `${resultMT}px`,\n      left: self.image.position === 'fixed' ? `${rect.left}px` : '0',\n      width: `${rect.width}px`,\n    });\n\n    // call onCoverImage event\n    if (self.options.onCoverImage) {\n      self.options.onCoverImage.call(self);\n    }\n\n    // return some useful data. Used in the video cover function\n    return {\n      image: {\n        height: resultH,\n        marginTop: resultMT,\n      },\n      container: rect,\n    };\n  }\n\n  isVisible() {\n    return this.isElementInViewport || false;\n  }\n\n  onScroll(force) {\n    const self = this;\n\n    // stop calculations if item is not in viewport\n    if (!force && !self.isVisible()) {\n      return;\n    }\n\n    const { height: wndH } = getWindowSize();\n    const rect = self.$item.getBoundingClientRect();\n    const contT = rect.top;\n    const contH = rect.height;\n    const styles = {};\n\n    // calculate parallax helping variables\n    const beforeTop = Math.max(0, contT);\n    const beforeTopEnd = Math.max(0, contH + contT);\n    const afterTop = Math.max(0, -contT);\n    const beforeBottom = Math.max(0, contT + contH - wndH);\n    const beforeBottomEnd = Math.max(0, contH - (contT + contH - wndH));\n    const afterBottom = Math.max(0, -contT + wndH - contH);\n    const fromViewportCenter = 1 - 2 * ((wndH - contT) / (wndH + contH));\n\n    // calculate on how percent of section is visible\n    let visiblePercent = 1;\n    if (contH < wndH) {\n      visiblePercent = 1 - (afterTop || beforeBottom) / contH;\n    } else if (beforeTopEnd <= wndH) {\n      visiblePercent = beforeTopEnd / wndH;\n    } else if (beforeBottomEnd <= wndH) {\n      visiblePercent = beforeBottomEnd / wndH;\n    }\n\n    // opacity\n    if (\n      self.options.type === 'opacity' ||\n      self.options.type === 'scale-opacity' ||\n      self.options.type === 'scroll-opacity'\n    ) {\n      styles.transform = 'translate3d(0,0,0)';\n      styles.opacity = visiblePercent;\n    }\n\n    // scale\n    if (self.options.type === 'scale' || self.options.type === 'scale-opacity') {\n      let scale = 1;\n      if (self.options.speed < 0) {\n        scale -= self.options.speed * visiblePercent;\n      } else {\n        scale += self.options.speed * (1 - visiblePercent);\n      }\n      styles.transform = `scale(${scale}) translate3d(0,0,0)`;\n    }\n\n    // scroll\n    if (self.options.type === 'scroll' || self.options.type === 'scroll-opacity') {\n      let positionY = self.parallaxScrollDistance * fromViewportCenter;\n\n      // fix if parallax block in absolute position\n      if (self.image.position === 'absolute') {\n        positionY -= contT;\n      }\n\n      styles.transform = `translate3d(0,${positionY}px,0)`;\n    }\n\n    self.css(self.image.$item, styles);\n\n    // call onScroll event\n    if (self.options.onScroll) {\n      self.options.onScroll.call(self, {\n        section: rect,\n\n        beforeTop,\n        beforeTopEnd,\n        afterTop,\n        beforeBottom,\n        beforeBottomEnd,\n        afterBottom,\n\n        visiblePercent,\n        fromViewportCenter,\n      });\n    }\n  }\n\n  onResize() {\n    this.coverImage();\n  }\n}\n\n// global definition\nconst jarallax = function (items, options, ...args) {\n  // check for dom element\n  // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n  if (\n    typeof HTMLElement === 'object'\n      ? items instanceof HTMLElement\n      : items &&\n        typeof items === 'object' &&\n        items !== null &&\n        items.nodeType === 1 &&\n        typeof items.nodeName === 'string'\n  ) {\n    items = [items];\n  }\n\n  const len = items.length;\n  let k = 0;\n  let ret;\n\n  for (k; k < len; k += 1) {\n    if (typeof options === 'object' || typeof options === 'undefined') {\n      if (!items[k].jarallax) {\n        items[k].jarallax = new Jarallax(items[k], options);\n      }\n    } else if (items[k].jarallax) {\n      // eslint-disable-next-line prefer-spread\n      ret = items[k].jarallax[options].apply(items[k].jarallax, args);\n    }\n    if (typeof ret !== 'undefined') {\n      return ret;\n    }\n  }\n\n  return items;\n};\njarallax.constructor = Jarallax;\n\nexport default jarallax;\n","/*!\n * Video Worker v2.1.5 (https://github.com/nk-o/video-worker)\n * Copyright 2022 nK <https://nkdev.info>\n * Licensed under MIT (https://github.com/nk-o/video-worker/blob/master/LICENSE)\n */\n\n/* eslint-disable import/no-mutable-exports */\n/* eslint-disable no-restricted-globals */\nlet win;\nif (typeof window !== 'undefined') {\n  win = window;\n} else if (typeof global !== 'undefined') {\n  win = global;\n} else if (typeof self !== 'undefined') {\n  win = self;\n} else {\n  win = {};\n}\nvar global$1 = win;\n\n// Deferred\n// thanks http://stackoverflow.com/questions/18096715/implement-deferred-object-without-using-jquery\nfunction Deferred() {\n  this.doneCallbacks = [];\n  this.failCallbacks = [];\n}\nDeferred.prototype = {\n  execute(list, args) {\n    let i = list.length;\n    // eslint-disable-next-line no-param-reassign\n    args = Array.prototype.slice.call(args);\n    while (i) {\n      i -= 1;\n      list[i].apply(null, args);\n    }\n  },\n  resolve(...args) {\n    this.execute(this.doneCallbacks, args);\n  },\n  reject(...args) {\n    this.execute(this.failCallbacks, args);\n  },\n  done(callback) {\n    this.doneCallbacks.push(callback);\n  },\n  fail(callback) {\n    this.failCallbacks.push(callback);\n  }\n};\n\nvar defaults = {\n  autoplay: false,\n  loop: false,\n  mute: false,\n  volume: 100,\n  showControls: true,\n  accessibilityHidden: false,\n  // start / end video time in seconds\n  startTime: 0,\n  endTime: 0\n};\n\n/**\n * Extend like jQuery.extend\n *\n * @param {Object} out - output object.\n * @param {...any} args - additional objects to extend.\n *\n * @returns {Object}\n */\nfunction extend(out, ...args) {\n  out = out || {};\n  Object.keys(args).forEach(i => {\n    if (!args[i]) {\n      return;\n    }\n    Object.keys(args[i]).forEach(key => {\n      out[key] = args[i][key];\n    });\n  });\n  return out;\n}\n\nlet ID = 0;\nlet YoutubeAPIadded = 0;\nlet VimeoAPIadded = 0;\nlet loadingYoutubePlayer = 0;\nlet loadingVimeoPlayer = 0;\nconst loadingYoutubeDefer = /*#__PURE__*/new Deferred();\nconst loadingVimeoDefer = /*#__PURE__*/new Deferred();\nclass VideoWorker {\n  constructor(url, options) {\n    const self = this;\n    self.url = url;\n    self.options_default = {\n      ...defaults\n    };\n    self.options = extend({}, self.options_default, options);\n\n    // check URL\n    self.videoID = self.parseURL(url);\n\n    // init\n    if (self.videoID) {\n      self.ID = ID;\n      ID += 1;\n      self.loadAPI();\n      self.init();\n    }\n  }\n  parseURL(url) {\n    // parse youtube ID\n    function getYoutubeID(ytUrl) {\n      // eslint-disable-next-line no-useless-escape\n      const regExp = /.*(?:youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|shorts\\/|watch\\?v=)([^#\\&\\?]*).*/;\n      const match = ytUrl.match(regExp);\n      return match && match[1].length === 11 ? match[1] : false;\n    }\n\n    // parse vimeo ID\n    function getVimeoID(vmUrl) {\n      // eslint-disable-next-line no-useless-escape\n      const regExp = /https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/;\n      const match = vmUrl.match(regExp);\n      return match && match[3] ? match[3] : false;\n    }\n\n    // parse local string\n    function getLocalVideos(locUrl) {\n      // eslint-disable-next-line no-useless-escape\n      const videoFormats = locUrl.split(/,(?=mp4\\:|webm\\:|ogv\\:|ogg\\:)/);\n      const result = {};\n      let ready = 0;\n      videoFormats.forEach(val => {\n        // eslint-disable-next-line no-useless-escape\n        const match = val.match(/^(mp4|webm|ogv|ogg)\\:(.*)/);\n        if (match && match[1] && match[2]) {\n          // eslint-disable-next-line prefer-destructuring\n          result[match[1] === 'ogv' ? 'ogg' : match[1]] = match[2];\n          ready = 1;\n        }\n      });\n      return ready ? result : false;\n    }\n    const Youtube = getYoutubeID(url);\n    const Vimeo = getVimeoID(url);\n    const Local = getLocalVideos(url);\n    if (Youtube) {\n      this.type = 'youtube';\n      return Youtube;\n    }\n    if (Vimeo) {\n      this.type = 'vimeo';\n      return Vimeo;\n    }\n    if (Local) {\n      this.type = 'local';\n      return Local;\n    }\n    return false;\n  }\n  isValid() {\n    return !!this.videoID;\n  }\n\n  // events\n  on(name, callback) {\n    this.userEventsList = this.userEventsList || [];\n\n    // add new callback in events list\n    (this.userEventsList[name] || (this.userEventsList[name] = [])).push(callback);\n  }\n  off(name, callback) {\n    if (!this.userEventsList || !this.userEventsList[name]) {\n      return;\n    }\n    if (!callback) {\n      delete this.userEventsList[name];\n    } else {\n      this.userEventsList[name].forEach((val, key) => {\n        if (val === callback) {\n          this.userEventsList[name][key] = false;\n        }\n      });\n    }\n  }\n  fire(name, ...args) {\n    if (this.userEventsList && typeof this.userEventsList[name] !== 'undefined') {\n      this.userEventsList[name].forEach(val => {\n        // call with all arguments\n        if (val) {\n          val.apply(this, args);\n        }\n      });\n    }\n  }\n  play(start) {\n    const self = this;\n    if (!self.player) {\n      return;\n    }\n    if (self.type === 'youtube' && self.player.playVideo) {\n      if (typeof start !== 'undefined') {\n        self.player.seekTo(start || 0);\n      }\n      if (global$1.YT.PlayerState.PLAYING !== self.player.getPlayerState()) {\n        self.player.playVideo();\n      }\n    }\n    if (self.type === 'vimeo') {\n      if (typeof start !== 'undefined') {\n        self.player.setCurrentTime(start);\n      }\n      self.player.getPaused().then(paused => {\n        if (paused) {\n          self.player.play();\n        }\n      });\n    }\n    if (self.type === 'local') {\n      if (typeof start !== 'undefined') {\n        self.player.currentTime = start;\n      }\n      if (self.player.paused) {\n        self.player.play();\n      }\n    }\n  }\n  pause() {\n    const self = this;\n    if (!self.player) {\n      return;\n    }\n    if (self.type === 'youtube' && self.player.pauseVideo) {\n      if (global$1.YT.PlayerState.PLAYING === self.player.getPlayerState()) {\n        self.player.pauseVideo();\n      }\n    }\n    if (self.type === 'vimeo') {\n      self.player.getPaused().then(paused => {\n        if (!paused) {\n          self.player.pause();\n        }\n      });\n    }\n    if (self.type === 'local') {\n      if (!self.player.paused) {\n        self.player.pause();\n      }\n    }\n  }\n  mute() {\n    const self = this;\n    if (!self.player) {\n      return;\n    }\n    if (self.type === 'youtube' && self.player.mute) {\n      self.player.mute();\n    }\n    if (self.type === 'vimeo' && self.player.setVolume) {\n      self.setVolume(0);\n    }\n    if (self.type === 'local') {\n      self.$video.muted = true;\n    }\n  }\n  unmute() {\n    const self = this;\n    if (!self.player) {\n      return;\n    }\n    if (self.type === 'youtube' && self.player.mute) {\n      self.player.unMute();\n    }\n    if (self.type === 'vimeo' && self.player.setVolume) {\n      // In case the default volume is 0, we have to set 100 when unmute.\n      self.setVolume(self.options.volume || 100);\n    }\n    if (self.type === 'local') {\n      self.$video.muted = false;\n    }\n  }\n  setVolume(volume = false) {\n    const self = this;\n    if (!self.player || typeof volume !== 'number') {\n      return;\n    }\n    if (self.type === 'youtube' && self.player.setVolume) {\n      self.player.setVolume(volume);\n    }\n    if (self.type === 'vimeo' && self.player.setVolume) {\n      self.player.setVolume(volume / 100);\n    }\n    if (self.type === 'local') {\n      self.$video.volume = volume / 100;\n    }\n  }\n  getVolume(callback) {\n    const self = this;\n    if (!self.player) {\n      callback(false);\n      return;\n    }\n    if (self.type === 'youtube' && self.player.getVolume) {\n      callback(self.player.getVolume());\n    }\n    if (self.type === 'vimeo' && self.player.getVolume) {\n      self.player.getVolume().then(volume => {\n        callback(volume * 100);\n      });\n    }\n    if (self.type === 'local') {\n      callback(self.$video.volume * 100);\n    }\n  }\n  getMuted(callback) {\n    const self = this;\n    if (!self.player) {\n      callback(null);\n      return;\n    }\n    if (self.type === 'youtube' && self.player.isMuted) {\n      callback(self.player.isMuted());\n    }\n    if (self.type === 'vimeo' && self.player.getVolume) {\n      self.player.getVolume().then(volume => {\n        callback(!!volume);\n      });\n    }\n    if (self.type === 'local') {\n      callback(self.$video.muted);\n    }\n  }\n  getImageURL(callback) {\n    const self = this;\n    if (self.videoImage) {\n      callback(self.videoImage);\n      return;\n    }\n    if (self.type === 'youtube') {\n      const availableSizes = ['maxresdefault', 'sddefault', 'hqdefault', '0'];\n      let step = 0;\n      const tempImg = new Image();\n      tempImg.onload = function () {\n        // if no thumbnail, youtube add their own image with width = 120px\n        if ((this.naturalWidth || this.width) !== 120 || step === availableSizes.length - 1) {\n          // ok\n          self.videoImage = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n          callback(self.videoImage);\n        } else {\n          // try another size\n          step += 1;\n          this.src = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n        }\n      };\n      tempImg.src = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n    }\n    if (self.type === 'vimeo') {\n      // We should provide width to get HQ thumbnail URL.\n      let width = global$1.innerWidth || 1920;\n      if (global$1.devicePixelRatio) {\n        width *= global$1.devicePixelRatio;\n      }\n      width = Math.min(width, 1920);\n      let request = new XMLHttpRequest();\n      // https://vimeo.com/api/oembed.json?url=https://vimeo.com/235212527\n      request.open('GET', `https://vimeo.com/api/oembed.json?url=${self.url}&width=${width}`, true);\n      request.onreadystatechange = function () {\n        if (this.readyState === 4) {\n          if (this.status >= 200 && this.status < 400) {\n            // Success!\n            const response = JSON.parse(this.responseText);\n            if (response.thumbnail_url) {\n              self.videoImage = response.thumbnail_url;\n              callback(self.videoImage);\n            }\n          }\n        }\n      };\n      request.send();\n      request = null;\n    }\n  }\n\n  // fallback to the old version.\n  getIframe(callback) {\n    this.getVideo(callback);\n  }\n  getVideo(callback) {\n    const self = this;\n\n    // return generated video block\n    if (self.$video) {\n      callback(self.$video);\n      return;\n    }\n\n    // generate new video block\n    self.onAPIready(() => {\n      let hiddenDiv;\n      if (!self.$video) {\n        hiddenDiv = document.createElement('div');\n        hiddenDiv.style.display = 'none';\n      }\n\n      // Youtube\n      if (self.type === 'youtube') {\n        self.playerOptions = {\n          // GDPR Compliance.\n          host: 'https://www.youtube-nocookie.com',\n          videoId: self.videoID,\n          playerVars: {\n            autohide: 1,\n            rel: 0,\n            autoplay: 0,\n            // autoplay enable on mobile devices\n            playsinline: 1\n          }\n        };\n\n        // hide controls\n        if (!self.options.showControls) {\n          self.playerOptions.playerVars.iv_load_policy = 3;\n          self.playerOptions.playerVars.modestbranding = 1;\n          self.playerOptions.playerVars.controls = 0;\n          self.playerOptions.playerVars.showinfo = 0;\n          self.playerOptions.playerVars.disablekb = 1;\n        }\n\n        // events\n        let ytStarted;\n        let ytProgressInterval;\n        self.playerOptions.events = {\n          onReady(e) {\n            // mute\n            if (self.options.mute) {\n              e.target.mute();\n            } else if (typeof self.options.volume === 'number') {\n              e.target.setVolume(self.options.volume);\n            }\n\n            // autoplay\n            if (self.options.autoplay) {\n              self.play(self.options.startTime);\n            }\n            self.fire('ready', e);\n\n            // For seamless loops, set the endTime to 0.1 seconds less than the video's duration\n            // https://github.com/nk-o/video-worker/issues/2\n            if (self.options.loop && !self.options.endTime) {\n              const secondsOffset = 0.1;\n              self.options.endTime = self.player.getDuration() - secondsOffset;\n            }\n\n            // volumechange\n            setInterval(() => {\n              self.getVolume(volume => {\n                if (self.options.volume !== volume) {\n                  self.options.volume = volume;\n                  self.fire('volumechange', e);\n                }\n              });\n            }, 150);\n          },\n          onStateChange(e) {\n            // loop\n            if (self.options.loop && e.data === global$1.YT.PlayerState.ENDED) {\n              self.play(self.options.startTime);\n            }\n            if (!ytStarted && e.data === global$1.YT.PlayerState.PLAYING) {\n              ytStarted = 1;\n              self.fire('started', e);\n            }\n            if (e.data === global$1.YT.PlayerState.PLAYING) {\n              self.fire('play', e);\n            }\n            if (e.data === global$1.YT.PlayerState.PAUSED) {\n              self.fire('pause', e);\n            }\n            if (e.data === global$1.YT.PlayerState.ENDED) {\n              self.fire('ended', e);\n            }\n\n            // progress check\n            if (e.data === global$1.YT.PlayerState.PLAYING) {\n              ytProgressInterval = setInterval(() => {\n                self.fire('timeupdate', e);\n\n                // check for end of video and play again or stop\n                if (self.options.endTime && self.player.getCurrentTime() >= self.options.endTime) {\n                  if (self.options.loop) {\n                    self.play(self.options.startTime);\n                  } else {\n                    self.pause();\n                  }\n                }\n              }, 150);\n            } else {\n              clearInterval(ytProgressInterval);\n            }\n          },\n          onError(e) {\n            self.fire('error', e);\n          }\n        };\n        const firstInit = !self.$video;\n        if (firstInit) {\n          const div = document.createElement('div');\n          div.setAttribute('id', self.playerID);\n          hiddenDiv.appendChild(div);\n          document.body.appendChild(hiddenDiv);\n        }\n        self.player = self.player || new global$1.YT.Player(self.playerID, self.playerOptions);\n        if (firstInit) {\n          self.$video = document.getElementById(self.playerID);\n\n          // add accessibility attributes\n          if (self.options.accessibilityHidden) {\n            self.$video.setAttribute('tabindex', '-1');\n            self.$video.setAttribute('aria-hidden', 'true');\n          }\n\n          // get video width and height\n          self.videoWidth = parseInt(self.$video.getAttribute('width'), 10) || 1280;\n          self.videoHeight = parseInt(self.$video.getAttribute('height'), 10) || 720;\n        }\n      }\n\n      // Vimeo\n      if (self.type === 'vimeo') {\n        self.playerOptions = {\n          // GDPR Compliance.\n          dnt: 1,\n          id: self.videoID,\n          autopause: 0,\n          transparent: 0,\n          autoplay: self.options.autoplay ? 1 : 0,\n          loop: self.options.loop ? 1 : 0,\n          muted: self.options.mute || self.options.volume === 0 ? 1 : 0\n        };\n\n        // hide controls\n        if (!self.options.showControls) {\n          self.playerOptions.controls = 0;\n        }\n\n        // enable background option\n        if (!self.options.showControls && self.options.loop && self.options.autoplay) {\n          self.playerOptions.background = 1;\n        }\n        if (!self.$video) {\n          let playerOptionsString = '';\n          Object.keys(self.playerOptions).forEach(key => {\n            if (playerOptionsString !== '') {\n              playerOptionsString += '&';\n            }\n            playerOptionsString += `${key}=${encodeURIComponent(self.playerOptions[key])}`;\n          });\n\n          // we need to create iframe manually because when we create it using API\n          // js events won't triggers after iframe moved to another place\n          self.$video = document.createElement('iframe');\n          self.$video.setAttribute('id', self.playerID);\n          self.$video.setAttribute('src', `https://player.vimeo.com/video/${self.videoID}?${playerOptionsString}`);\n          self.$video.setAttribute('frameborder', '0');\n          self.$video.setAttribute('mozallowfullscreen', '');\n          self.$video.setAttribute('allowfullscreen', '');\n          self.$video.setAttribute('title', 'Vimeo video player');\n\n          // add accessibility attributes\n          if (self.options.accessibilityHidden) {\n            self.$video.setAttribute('tabindex', '-1');\n            self.$video.setAttribute('aria-hidden', 'true');\n          }\n          hiddenDiv.appendChild(self.$video);\n          document.body.appendChild(hiddenDiv);\n        }\n        self.player = self.player || new global$1.Vimeo.Player(self.$video, self.playerOptions);\n\n        // Since Vimeo removed the `volume` parameter, we have to set it manually.\n        if (!self.options.mute && typeof self.options.volume === 'number') {\n          self.setVolume(self.options.volume);\n        }\n\n        // set current time for autoplay\n        if (self.options.startTime && self.options.autoplay) {\n          self.player.setCurrentTime(self.options.startTime);\n        }\n\n        // get video width and height\n        self.player.getVideoWidth().then(width => {\n          self.videoWidth = width || 1280;\n        });\n        self.player.getVideoHeight().then(height => {\n          self.videoHeight = height || 720;\n        });\n\n        // events\n        let vmStarted;\n        self.player.on('timeupdate', e => {\n          if (!vmStarted) {\n            self.fire('started', e);\n            vmStarted = 1;\n          }\n          self.fire('timeupdate', e);\n\n          // check for end of video and play again or stop\n          if (self.options.endTime) {\n            if (self.options.endTime && e.seconds >= self.options.endTime) {\n              if (self.options.loop) {\n                self.play(self.options.startTime);\n              } else {\n                self.pause();\n              }\n            }\n          }\n        });\n        self.player.on('play', e => {\n          self.fire('play', e);\n\n          // check for the start time and start with it\n          if (self.options.startTime && e.seconds === 0) {\n            self.play(self.options.startTime);\n          }\n        });\n        self.player.on('pause', e => {\n          self.fire('pause', e);\n        });\n        self.player.on('ended', e => {\n          self.fire('ended', e);\n        });\n        self.player.on('loaded', e => {\n          self.fire('ready', e);\n        });\n        self.player.on('volumechange', e => {\n          self.getVolume(volume => {\n            self.options.volume = volume;\n          });\n          self.fire('volumechange', e);\n        });\n        self.player.on('error', e => {\n          self.fire('error', e);\n        });\n      }\n\n      // Local\n      function addSourceToLocal(element, src, type) {\n        const source = document.createElement('source');\n        source.src = src;\n        source.type = type;\n        element.appendChild(source);\n      }\n      if (self.type === 'local') {\n        if (!self.$video) {\n          self.$video = document.createElement('video');\n          self.player = self.$video;\n\n          // show controls\n          if (self.options.showControls) {\n            self.$video.controls = true;\n          }\n\n          // set volume\n          if (typeof self.options.volume === 'number') {\n            self.setVolume(self.options.volume);\n          }\n\n          // mute (it is required to mute after the volume set)\n          if (self.options.mute) {\n            self.mute();\n          }\n\n          // loop\n          if (self.options.loop) {\n            self.$video.loop = true;\n          }\n\n          // autoplay enable on mobile devices\n          self.$video.setAttribute('playsinline', '');\n          self.$video.setAttribute('webkit-playsinline', '');\n\n          // add accessibility attributes\n          if (self.options.accessibilityHidden) {\n            self.$video.setAttribute('tabindex', '-1');\n            self.$video.setAttribute('aria-hidden', 'true');\n          }\n          self.$video.setAttribute('id', self.playerID);\n          hiddenDiv.appendChild(self.$video);\n          document.body.appendChild(hiddenDiv);\n          Object.keys(self.videoID).forEach(key => {\n            addSourceToLocal(self.$video, self.videoID[key], `video/${key}`);\n          });\n        }\n        let locStarted;\n        self.player.addEventListener('playing', e => {\n          if (!locStarted) {\n            self.fire('started', e);\n          }\n          locStarted = 1;\n        });\n        self.player.addEventListener('timeupdate', function (e) {\n          self.fire('timeupdate', e);\n\n          // check for end of video and play again or stop\n          if (self.options.endTime) {\n            if (self.options.endTime && this.currentTime >= self.options.endTime) {\n              if (self.options.loop) {\n                self.play(self.options.startTime);\n              } else {\n                self.pause();\n              }\n            }\n          }\n        });\n        self.player.addEventListener('play', e => {\n          self.fire('play', e);\n        });\n        self.player.addEventListener('pause', e => {\n          self.fire('pause', e);\n        });\n        self.player.addEventListener('ended', e => {\n          self.fire('ended', e);\n        });\n        self.player.addEventListener('loadedmetadata', function () {\n          // get video width and height\n          self.videoWidth = this.videoWidth || 1280;\n          self.videoHeight = this.videoHeight || 720;\n          self.fire('ready');\n\n          // autoplay\n          if (self.options.autoplay) {\n            self.play(self.options.startTime);\n          }\n        });\n        self.player.addEventListener('volumechange', e => {\n          self.getVolume(volume => {\n            self.options.volume = volume;\n          });\n          self.fire('volumechange', e);\n        });\n        self.player.addEventListener('error', e => {\n          self.fire('error', e);\n        });\n      }\n      callback(self.$video);\n    });\n  }\n  init() {\n    const self = this;\n    self.playerID = `VideoWorker-${self.ID}`;\n  }\n  loadAPI() {\n    const self = this;\n    if (YoutubeAPIadded && VimeoAPIadded) {\n      return;\n    }\n    let src = '';\n\n    // load Youtube API\n    if (self.type === 'youtube' && !YoutubeAPIadded) {\n      YoutubeAPIadded = 1;\n      src = 'https://www.youtube.com/iframe_api';\n    }\n\n    // load Vimeo API\n    if (self.type === 'vimeo' && !VimeoAPIadded) {\n      VimeoAPIadded = 1;\n\n      // Useful when Vimeo API added using RequireJS https://github.com/nk-o/video-worker/pull/7\n      if (typeof global$1.Vimeo !== 'undefined') {\n        return;\n      }\n      src = 'https://player.vimeo.com/api/player.js';\n    }\n    if (!src) {\n      return;\n    }\n\n    // add script in head section\n    let tag = document.createElement('script');\n    let head = document.getElementsByTagName('head')[0];\n    tag.src = src;\n    head.appendChild(tag);\n    head = null;\n    tag = null;\n  }\n  onAPIready(callback) {\n    const self = this;\n\n    // Youtube\n    if (self.type === 'youtube') {\n      // Listen for global YT player callback\n      if ((typeof global$1.YT === 'undefined' || global$1.YT.loaded === 0) && !loadingYoutubePlayer) {\n        // Prevents Ready event from being called twice\n        loadingYoutubePlayer = 1;\n\n        // Creates deferred so, other players know when to wait.\n        global$1.onYouTubeIframeAPIReady = function () {\n          global$1.onYouTubeIframeAPIReady = null;\n          loadingYoutubeDefer.resolve('done');\n          callback();\n        };\n      } else if (typeof global$1.YT === 'object' && global$1.YT.loaded === 1) {\n        callback();\n      } else {\n        loadingYoutubeDefer.done(() => {\n          callback();\n        });\n      }\n    }\n\n    // Vimeo\n    if (self.type === 'vimeo') {\n      if (typeof global$1.Vimeo === 'undefined' && !loadingVimeoPlayer) {\n        loadingVimeoPlayer = 1;\n        const vimeoInterval = setInterval(() => {\n          if (typeof global$1.Vimeo !== 'undefined') {\n            clearInterval(vimeoInterval);\n            loadingVimeoDefer.resolve('done');\n            callback();\n          }\n        }, 20);\n      } else if (typeof global$1.Vimeo !== 'undefined') {\n        callback();\n      } else {\n        loadingVimeoDefer.done(() => {\n          callback();\n        });\n      }\n    }\n\n    // Local\n    if (self.type === 'local') {\n      callback();\n    }\n  }\n}\n\nexport { VideoWorker as default };\n//# sourceMappingURL=video-worker.esm.js.map\n","import VideoWorker from 'video-worker';\n\nimport global from './utils/global';\n\nfunction jarallaxVideo(jarallax = global.jarallax) {\n  if (typeof jarallax === 'undefined') {\n    return;\n  }\n\n  const Jarallax = jarallax.constructor;\n\n  // append video after when block will be visible.\n  const defOnScroll = Jarallax.prototype.onScroll;\n  Jarallax.prototype.onScroll = function () {\n    const self = this;\n\n    defOnScroll.apply(self);\n\n    const isReady =\n      !self.isVideoInserted &&\n      self.video &&\n      (!self.options.videoLazyLoading || self.isElementInViewport) &&\n      !self.options.disableVideo();\n\n    if (isReady) {\n      self.isVideoInserted = true;\n\n      self.video.getVideo((video) => {\n        const $parent = video.parentNode;\n        self.css(video, {\n          position: self.image.position,\n          top: '0px',\n          left: '0px',\n          right: '0px',\n          bottom: '0px',\n          width: '100%',\n          height: '100%',\n          maxWidth: 'none',\n          maxHeight: 'none',\n          pointerEvents: 'none',\n          transformStyle: 'preserve-3d',\n          backfaceVisibility: 'hidden',\n          margin: 0,\n          zIndex: -1,\n        });\n        self.$video = video;\n\n        // add Poster attribute to self-hosted video\n        if (self.video.type === 'local') {\n          if (self.image.src) {\n            self.$video.setAttribute('poster', self.image.src);\n          } else if (\n            self.image.$item &&\n            self.image.$item.tagName === 'IMG' &&\n            self.image.$item.src\n          ) {\n            self.$video.setAttribute('poster', self.image.$item.src);\n          }\n        }\n\n        // add classname to video element\n        if (self.options.videoClass) {\n          self.$video.setAttribute(\n            'class',\n            `${self.options.videoClass} ${self.options.videoClass}-${self.video.type}`\n          );\n        }\n\n        // insert video tag\n        self.image.$container.appendChild(video);\n\n        // remove parent video element (created by VideoWorker)\n        $parent.parentNode.removeChild($parent);\n\n        // call onVideoInsert event\n        if (self.options.onVideoInsert) {\n          self.options.onVideoInsert.call(self);\n        }\n      });\n    }\n  };\n\n  // cover video\n  const defCoverImage = Jarallax.prototype.coverImage;\n  Jarallax.prototype.coverImage = function () {\n    const self = this;\n    const imageData = defCoverImage.apply(self);\n    const node = self.image.$item ? self.image.$item.nodeName : false;\n\n    if (imageData && self.video && node && (node === 'IFRAME' || node === 'VIDEO')) {\n      let h = imageData.image.height;\n      let w = (h * self.image.width) / self.image.height;\n      let ml = (imageData.container.width - w) / 2;\n      let mt = imageData.image.marginTop;\n\n      if (imageData.container.width > w) {\n        w = imageData.container.width;\n        h = (w * self.image.height) / self.image.width;\n        ml = 0;\n        mt += (imageData.image.height - h) / 2;\n      }\n\n      // add video height over than need to hide controls\n      if (node === 'IFRAME') {\n        h += 400;\n        mt -= 200;\n      }\n\n      self.css(self.$video, {\n        width: `${w}px`,\n        marginLeft: `${ml}px`,\n        height: `${h}px`,\n        marginTop: `${mt}px`,\n      });\n    }\n\n    return imageData;\n  };\n\n  // init video\n  const defInitImg = Jarallax.prototype.initImg;\n  Jarallax.prototype.initImg = function () {\n    const self = this;\n    const defaultResult = defInitImg.apply(self);\n\n    if (!self.options.videoSrc) {\n      self.options.videoSrc = self.$item.getAttribute('data-jarallax-video') || null;\n    }\n\n    if (self.options.videoSrc) {\n      self.defaultInitImgResult = defaultResult;\n      return true;\n    }\n\n    return defaultResult;\n  };\n\n  const defCanInitParallax = Jarallax.prototype.canInitParallax;\n  Jarallax.prototype.canInitParallax = function () {\n    const self = this;\n    let defaultResult = defCanInitParallax.apply(self);\n\n    if (!self.options.videoSrc) {\n      return defaultResult;\n    }\n\n    // Init video api\n    const video = new VideoWorker(self.options.videoSrc, {\n      autoplay: true,\n      loop: self.options.videoLoop,\n      showControls: false,\n      accessibilityHidden: true,\n      startTime: self.options.videoStartTime || 0,\n      endTime: self.options.videoEndTime || 0,\n      mute: !self.options.videoVolume,\n      volume: self.options.videoVolume || 0,\n    });\n\n    // call onVideoWorkerInit event\n    if (self.options.onVideoWorkerInit) {\n      self.options.onVideoWorkerInit.call(self, video);\n    }\n\n    function resetDefaultImage() {\n      if (self.image.$default_item) {\n        self.image.$item = self.image.$default_item;\n        self.image.$item.style.display = 'block';\n\n        // set image width and height\n        self.coverImage();\n        self.onScroll();\n      }\n    }\n\n    if (video.isValid()) {\n      // Force enable parallax.\n      // When the parallax disabled on mobile devices, we still need to display videos.\n      // https://github.com/nk-o/jarallax/issues/159\n      if (this.options.disableParallax()) {\n        defaultResult = true;\n        self.image.position = 'absolute';\n        self.options.type = 'scroll';\n        self.options.speed = 1;\n      }\n\n      // if parallax will not be inited, we can add thumbnail on background.\n      if (!defaultResult) {\n        if (!self.defaultInitImgResult) {\n          video.getImageURL((url) => {\n            // save default user styles\n            const curStyle = self.$item.getAttribute('style');\n            if (curStyle) {\n              self.$item.setAttribute('data-jarallax-original-styles', curStyle);\n            }\n\n            // set new background\n            self.css(self.$item, {\n              'background-image': `url(\"${url}\")`,\n              'background-position': 'center',\n              'background-size': 'cover',\n            });\n          });\n        }\n\n        // init video\n      } else {\n        video.on('ready', () => {\n          if (self.options.videoPlayOnlyVisible) {\n            const oldOnScroll = self.onScroll;\n            self.onScroll = function () {\n              oldOnScroll.apply(self);\n              if (\n                !self.videoError &&\n                (self.options.videoLoop || (!self.options.videoLoop && !self.videoEnded))\n              ) {\n                if (self.isVisible()) {\n                  video.play();\n                } else {\n                  video.pause();\n                }\n              }\n            };\n          } else {\n            video.play();\n          }\n        });\n        video.on('started', () => {\n          self.image.$default_item = self.image.$item;\n          self.image.$item = self.$video;\n\n          // set video width and height\n          self.image.width = self.video.videoWidth || 1280;\n          self.image.height = self.video.videoHeight || 720;\n          self.coverImage();\n          self.onScroll();\n\n          // hide image\n          if (self.image.$default_item) {\n            self.image.$default_item.style.display = 'none';\n          }\n        });\n\n        video.on('ended', () => {\n          self.videoEnded = true;\n\n          if (!self.options.videoLoop) {\n            // show default image if Loop disabled.\n            resetDefaultImage();\n          }\n        });\n        video.on('error', () => {\n          self.videoError = true;\n\n          // show default image if video loading error.\n          resetDefaultImage();\n        });\n\n        self.video = video;\n\n        // set image if not exists\n        if (!self.defaultInitImgResult) {\n          // set empty image on self-hosted video if not defined\n          self.image.src =\n            'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n          if (video.type !== 'local') {\n            video.getImageURL((url) => {\n              self.image.bgImage = `url(\"${url}\")`;\n              self.init();\n            });\n\n            return false;\n          }\n        }\n      }\n    }\n\n    return defaultResult;\n  };\n\n  // Destroy video parallax\n  const defDestroy = Jarallax.prototype.destroy;\n  Jarallax.prototype.destroy = function () {\n    const self = this;\n\n    if (self.image.$default_item) {\n      self.image.$item = self.image.$default_item;\n      delete self.image.$default_item;\n    }\n\n    defDestroy.apply(self);\n  };\n}\n\nexport default jarallaxVideo;\n","import global from '../utils/global';\n\nfunction jarallaxElement(jarallax = global.jarallax) {\n  // eslint-disable-next-line no-console\n  console.warn(\n    \"Jarallax Element extension is DEPRECATED, please, avoid using it. We recommend you look at something like `lax.js` library <https://github.com/alexfoxy/lax.js>. It is much more powerful and has a less code (in cases when you don't want to add parallax backgrounds).\"\n  );\n\n  if (typeof jarallax === 'undefined') {\n    return;\n  }\n\n  const Jarallax = jarallax.constructor;\n\n  // redefine default methods\n  [\n    'initImg',\n    'canInitParallax',\n    'init',\n    'destroy',\n    'coverImage',\n    'isVisible',\n    'onScroll',\n    'onResize',\n  ].forEach((key) => {\n    const def = Jarallax.prototype[key];\n    Jarallax.prototype[key] = function (...args) {\n      const self = this;\n\n      if (key === 'initImg' && self.$item.getAttribute('data-jarallax-element') !== null) {\n        self.options.type = 'element';\n        self.pureOptions.speed = self.$item.getAttribute('data-jarallax-element') || '100';\n      }\n      if (self.options.type !== 'element') {\n        return def.apply(self, args);\n      }\n\n      self.pureOptions.threshold = self.$item.getAttribute('data-threshold') || '';\n\n      switch (key) {\n        case 'init': {\n          const speedArr = `${self.pureOptions.speed}`.split(' ');\n          self.options.speed = self.pureOptions.speed || 0;\n          self.options.speedY = speedArr[0] ? parseFloat(speedArr[0]) : 0;\n          self.options.speedX = speedArr[1] ? parseFloat(speedArr[1]) : 0;\n\n          const thresholdArr = self.pureOptions.threshold.split(' ');\n          self.options.thresholdY = thresholdArr[0] ? parseFloat(thresholdArr[0]) : null;\n          self.options.thresholdX = thresholdArr[1] ? parseFloat(thresholdArr[1]) : null;\n\n          def.apply(self, args);\n\n          // restore background image if available.\n          const originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');\n          if (originalStylesTag) {\n            self.$item.setAttribute('style', originalStylesTag);\n          }\n\n          return true;\n        }\n        case 'onResize': {\n          const defTransform = self.css(self.$item, 'transform');\n          self.css(self.$item, { transform: '' });\n          const rect = self.$item.getBoundingClientRect();\n          self.itemData = {\n            width: rect.width,\n            height: rect.height,\n            y: rect.top + self.getWindowData().y,\n            x: rect.left,\n          };\n          self.css(self.$item, { transform: defTransform });\n          break;\n        }\n        case 'onScroll': {\n          const wnd = self.getWindowData();\n          const centerPercent =\n            (wnd.y + wnd.height / 2 - self.itemData.y - self.itemData.height / 2) /\n            (wnd.height / 2);\n          const moveY = centerPercent * self.options.speedY;\n          const moveX = centerPercent * self.options.speedX;\n          let my = moveY;\n          let mx = moveX;\n          if (self.options.thresholdY !== null && moveY > self.options.thresholdY) my = 0;\n          if (self.options.thresholdX !== null && moveX > self.options.thresholdX) mx = 0;\n          self.css(self.$item, { transform: `translate3d(${mx}px,${my}px,0)` });\n          break;\n        }\n        case 'initImg':\n        case 'isVisible':\n        case 'coverImage':\n          return true;\n        // no default\n      }\n      return def.apply(self, args);\n    };\n  });\n}\n\nexport default jarallaxElement;\n","import jarallaxLib from './core';\nimport jarallaxVideoExt from './ext-video';\nimport jarallaxElementExt from './deprecated/ext-element';\n\nexport const jarallax = jarallaxLib;\n\nexport const jarallaxVideo = function jarallaxVideo() {\n  return jarallaxVideoExt(jarallax);\n};\n\nexport const jarallaxElement = function jarallaxElement() {\n  return jarallaxElementExt(jarallax);\n};\n"],"names":["type","speed","containerClass","imgSrc","imgElement","imgSize","imgPosition","imgRepeat","keepImg","elementInViewport","zIndex","disableParallax","onScroll","onInit","onDestroy","onCoverImage","videoClass","videoSrc","videoStartTime","videoEndTime","videoVolume","videoLoop","videoPlayOnlyVisible","videoLazyLoading","disableVideo","onVideoInsert","onVideoWorkerInit","win","window","global","self","css","el","styles","getComputedStyle","getPropertyValue","Object","keys","forEach","key","style","extend","out","args","i","getParents","elem","parents","parentElement","nodeType","push","ready","callback","document","readyState","addEventListener","capture","once","passive","navigator","mobileAgent","test","userAgent","isMobile","wndW","wndH","$deviceHelper","getDeviceHeight","body","createElement","cssText","appendChild","clientHeight","innerHeight","documentElement","updateWindowHeight","innerWidth","clientWidth","domReady","getWindowSize","width","height","jarallaxList","updateParallax","length","data","k","instance","oldData","isVisible","clientRect","$item","getBoundingClientRect","newData","top","bottom","isResized","isScrolled","onResize","requestAnimationFrame","visibilityObserver","IntersectionObserver","entries","entry","target","jarallax","isElementInViewport","isIntersecting","rootMargin","addObserver","observe","options","removeObserver","instanceID","splice","unobserve","Jarallax","constructor","item","userOptions","defaults","dataOptions","dataset","pureDataOptions","lowerCaseOption","substr","toLowerCase","pureOptions","Math","min","max","parseFloat","RegExp","disableParallaxRegexp","disableVideoRegexp","elementInVP","Element","image","src","$container","useImgTag","position","initImg","canInitParallax","init","getWindowData","y","scrollTop","$imgElement","querySelector","Image","cloneNode","$itemParent","parentNode","bgImage","containerStyles","left","overflow","imageStyles","pointerEvents","transformStyle","backfaceVisibility","curStyle","getAttribute","setAttribute","curImgStyle","$parents","filter","parentTransform","transform","overflowRegex","call","destroy","originalStylesTag","removeAttribute","originalStylesImgTag","removeChild","coverImage","rect","contH","isScroll","scrollDist","resultH","resultMT","abs","parallaxScrollDistance","marginTop","container","force","contT","beforeTop","beforeTopEnd","afterTop","beforeBottom","beforeBottomEnd","afterBottom","fromViewportCenter","visiblePercent","opacity","scale","positionY","section","items","HTMLElement","nodeName","len","ret","apply","jarallaxVideo","defOnScroll","prototype","isReady","isVideoInserted","video","getVideo","$parent","right","maxWidth","maxHeight","margin","$video","tagName","defCoverImage","imageData","node","h","w","ml","mt","marginLeft","defInitImg","defaultResult","defaultInitImgResult","defCanInitParallax","VideoWorker","autoplay","loop","showControls","accessibilityHidden","startTime","endTime","mute","volume","resetDefaultImage","$default_item","display","isValid","getImageURL","url","on","oldOnScroll","videoError","videoEnded","play","pause","videoWidth","videoHeight","defDestroy","jarallaxElement","console","warn","def","threshold","speedArr","split","speedY","speedX","thresholdArr","thresholdY","thresholdX","defTransform","itemData","x","wnd","centerPercent","moveY","moveX","my","mx","jarallaxLib","jarallaxVideoExt","jarallaxElementExt"],"mappings":"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","x_google_ignoreList":[10]}