{"version":3,"file":"jarallax.cjs","sources":["../src/defaults.ts","../src/utils/global.ts","../src/utils/css.ts","../src/utils/extend.ts","../src/utils/getParents.ts","../src/utils/ready.ts","../src/utils/isMobile.ts","../src/utils/getWindowSize.ts","../src/utils/observer.ts","../src/utils/prefersReducedMotion.ts","../src/core.ts","../src/deprecated/ext-element.ts","../node_modules/video-worker/dist/video-worker.esm.js","../src/ext-video.ts","../src/core.esm.ts"],"sourcesContent":["import type { JarallaxOptions } from './types';\n\nconst defaults: JarallaxOptions = {\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  onScroll: null,\n  onInit: null,\n  onDestroy: null,\n  onCoverImage: null,\n  videoClass: 'jarallax-video',\n  videoSrc: null,\n  videoStartTime: 0,\n  videoEndTime: 0,\n  videoVolume: 0,\n\n  // Empty means \"whatever video-worker defaults to\", so the host is not pinned in two places.\n  videoYoutubeHost: '',\n  videoVimeoHost: '',\n  videoLoop: true,\n  videoPlayOnlyVisible: true,\n  videoLazyLoading: true,\n  disableVideo: false,\n  onVideoInsert: null,\n  onVideoWorkerInit: null,\n};\n\nexport default defaults;\n","import type { GlobalLike } from '../types';\n\nlet win: GlobalLike;\n\nif (typeof window !== 'undefined') {\n  win = window as GlobalLike;\n} else if (typeof global !== 'undefined') {\n  win = global as unknown as GlobalLike;\n} else if (typeof self !== 'undefined') {\n  win = self as GlobalLike;\n} else {\n  win = {} as GlobalLike;\n}\n\nexport default win;\n","import global from './global';\n\n/**\n * Add styles to element or read a computed CSS property.\n */\nfunction css(el: HTMLElement, styles: string): string;\nfunction css(el: HTMLElement, styles: Record<string, string | number>): HTMLElement;\nfunction css(\n  el: HTMLElement,\n  styles: string | Record<string, string | number>\n): string | HTMLElement {\n  if (typeof styles === 'string') {\n    return global.getComputedStyle(el).getPropertyValue(styles);\n  }\n\n  Object.keys(styles).forEach((key) => {\n    (el.style as CSSStyleDeclaration & Record<string, string | number | null>)[key] = styles[key];\n  });\n\n  return el;\n}\n\nexport default css;\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<T extends Record<string, unknown>>(\n  out: T,\n  ...args: Array<Record<string, unknown> | null | undefined>\n): T {\n  const result = out || ({} as T);\n\n  Object.keys(args).forEach((index) => {\n    const source = args[Number(index)];\n\n    if (!source) {\n      return;\n    }\n\n    Object.keys(source).forEach((key) => {\n      result[key as keyof T] = source[key] as T[keyof T];\n    });\n  });\n\n  return result;\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: Element): HTMLElement[] {\n  const parents: HTMLElement[] = [];\n  let currentElement: Element | null = elem;\n\n  while (currentElement.parentElement !== null) {\n    currentElement = currentElement.parentElement;\n\n    if (currentElement.nodeType === 1) {\n      parents.push(currentElement as HTMLElement);\n    }\n  }\n\n  return parents;\n}\n","/**\n * Document ready callback.\n * @param {Function} callback - callback will be fired once Document ready.\n */\nexport default function ready(callback: () => void): void {\n  if (typeof document === 'undefined') {\n    return;\n  }\n\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","import global from './global';\n\nconst mobileAgent = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n  global.navigator?.userAgent ?? ''\n);\n\nexport default function isMobile(): boolean {\n  return mobileAgent;\n}\n","import global from './global';\nimport domReady from './ready';\nimport isMobile from './isMobile';\n\nlet wndW = 0;\nlet wndH = 0;\nlet deviceHelper: HTMLDivElement | null = null;\n\nfunction hasDocument(): boolean {\n  return typeof document !== 'undefined' && typeof document.documentElement !== 'undefined';\n}\n\n// Mobile browsers often change the reported viewport height while scrolling.\n// Measuring a hidden 100vh helper keeps the parallax geometry stable.\nfunction getDeviceHeight(): number {\n  if (!hasDocument()) {\n    return global.innerHeight || 0;\n  }\n\n  if (!deviceHelper && document.body) {\n    deviceHelper = document.createElement('div');\n    deviceHelper.style.cssText = '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(): void {\n  if (!hasDocument()) {\n    wndW = global.innerWidth || 0;\n    wndH = global.innerHeight || 0;\n    return;\n  }\n\n  wndW = global.innerWidth || document.documentElement.clientWidth;\n  wndH = isMobile()\n    ? getDeviceHeight()\n    : global.innerHeight || document.documentElement.clientHeight;\n}\n\n// Prime the cached viewport size once and then keep it in sync through global events.\nupdateWindowHeight();\nglobal.addEventListener?.('resize', updateWindowHeight);\nglobal.addEventListener?.('orientationchange', updateWindowHeight);\nglobal.addEventListener?.('load', updateWindowHeight);\ndomReady(() => {\n  updateWindowHeight();\n});\n\nexport default function getWindowSize(): { width: number; height: number } {\n  return {\n    width: wndW,\n    height: wndH,\n  };\n}\n","import global from './global';\nimport getWindowSize from './getWindowSize';\nimport type { JarallaxInstance } from '../types';\n\ninterface ObserverData {\n  instance: JarallaxInstance;\n  oldData?: {\n    width: number;\n    height: number;\n    top: number;\n    bottom: number;\n    wndW: number;\n    wndH: number;\n  };\n}\n\n// All active instances share a single animation-frame loop so scroll/resize work stays centralized.\nconst jarallaxList: ObserverData[] = [];\n\nfunction updateParallax(): void {\n  if (!jarallaxList.length) {\n    return;\n  }\n\n  const { width: wndW, height: wndH } = getWindowSize();\n\n  jarallaxList.forEach((data, index) => {\n    const { instance, oldData } = data;\n\n    if (!instance.isVisible()) {\n      return;\n    }\n\n    const clientRect = instance.$item.getBoundingClientRect();\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[index].oldData = newData;\n\n    if (isResized) {\n      instance.onResize();\n    }\n\n    if (isScrolled) {\n      instance.onScroll();\n    }\n  });\n\n  global.requestAnimationFrame(updateParallax);\n}\n\nconst visibilityObserver =\n  global.IntersectionObserver &&\n  new global.IntersectionObserver(\n    (entries) => {\n      entries.forEach((entry) => {\n        const target = entry.target as HTMLElement & { jarallax?: JarallaxInstance };\n\n        if (target.jarallax) {\n          // Mark viewport visibility ahead of time so init/onScroll can cheaply skip offscreen work.\n          target.jarallax.isElementInViewport = entry.isIntersecting;\n        }\n      });\n    },\n    {\n      // Start work slightly before the block enters the viewport to reduce visible jumps.\n      rootMargin: '50px',\n    }\n  );\n\nexport function addObserver(instance: JarallaxInstance): void {\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: JarallaxInstance): void {\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","import global from './global';\n\nlet query: MediaQueryList | null | undefined;\n\n// `matches` stays live on the MediaQueryList, so the object is resolved once and read on demand.\n// Resolving lazily keeps the module import-safe in SSR and in environments without matchMedia.\nexport default function prefersReducedMotion(): boolean {\n  if (typeof query === 'undefined') {\n    query =\n      typeof global.matchMedia === 'function'\n        ? global.matchMedia('(prefers-reduced-motion: reduce)')\n        : null;\n  }\n\n  return query?.matches ?? false;\n}\n","import 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';\nimport prefersReducedMotion from './utils/prefersReducedMotion';\nimport type {\n  DisableOption,\n  JarallaxCoverImageData,\n  JarallaxImageData,\n  JarallaxItem,\n  JarallaxItems,\n  JarallaxOptions,\n  JarallaxResolvedOptions,\n  JarallaxStatic,\n  JarallaxWindowData,\n} from './types';\n\nconst globalNavigator = global.navigator ?? ({ userAgent: '' } as Navigator);\nconst canUseDOM =\n  typeof document !== 'undefined' &&\n  typeof Element !== 'undefined' &&\n  typeof HTMLElement !== 'undefined';\n\nlet instanceID = 0;\n\n// Historical options accept booleans, regexes, strings and callbacks.\n// Normalize everything to a callable check so the rest of the runtime only deals with one shape.\nfunction resolveDisableOption(value: DisableOption | undefined): () => boolean {\n  if (typeof value === 'string') {\n    const regexpMatch = value.match(/^\\/(.*)\\/([dgimsuvy]*)$/);\n\n    value = regexpMatch ? new RegExp(regexpMatch[1], regexpMatch[2]) : new RegExp(value);\n  }\n\n  if (value instanceof RegExp) {\n    const regexp = value;\n\n    return () => regexp.test(globalNavigator.userAgent);\n  }\n\n  if (typeof value !== 'function') {\n    return () => value === true;\n  }\n\n  return value;\n}\n\nclass Jarallax {\n  [key: string]: unknown;\n\n  instanceID: number;\n\n  $item: JarallaxItem;\n\n  defaults: JarallaxResolvedOptions;\n\n  options: JarallaxResolvedOptions;\n\n  pureOptions: Record<string, unknown>;\n\n  image: JarallaxImageData;\n\n  parallaxScrollDistance = 0;\n\n  isElementInViewport = false;\n\n  constructor(item: JarallaxItem, userOptions?: JarallaxOptions) {\n    this.instanceID = instanceID;\n    instanceID += 1;\n\n    this.$item = item;\n    this.defaults = { ...defaults } as JarallaxResolvedOptions;\n\n    const dataOptions = this.$item.dataset || {};\n    const pureDataOptions: Record<string, unknown> = {};\n\n    // Keep supporting data-* overrides because they are part of the public API.\n    Object.keys(dataOptions).forEach((key) => {\n      const lowerCaseOption = key.slice(0, 1).toLowerCase() + key.slice(1);\n\n      if (\n        lowerCaseOption &&\n        typeof this.defaults[lowerCaseOption as keyof JarallaxResolvedOptions] !== 'undefined'\n      ) {\n        pureDataOptions[lowerCaseOption] = dataOptions[key];\n      }\n    });\n\n    this.options = this.extend(\n      {},\n      this.defaults as unknown as Record<string, unknown>,\n      pureDataOptions,\n      (userOptions || {}) as Record<string, unknown>\n    ) as JarallaxResolvedOptions;\n    this.pureOptions = this.extend({}, this.options as unknown as Record<string, unknown>);\n\n    // Legacy HTML usage passes booleans as strings through data attributes.\n    Object.keys(this.options).forEach((key) => {\n      const optionKey = key as keyof JarallaxResolvedOptions;\n      const value = this.options[optionKey];\n\n      if (value === 'true') {\n        (this.options as unknown as Record<string, unknown>)[key] = true;\n      } else if (value === 'false') {\n        (this.options as unknown as Record<string, unknown>)[key] = false;\n      }\n    });\n\n    this.options.speed = Math.min(2, Math.max(-1, parseFloat(`${this.options.speed}`)));\n\n    // Readers who ask for reduced motion get the same treatment as `disableParallax: true`:\n    // the image is still covered and positioned, it just never moves with the scroll.\n    const disableParallax = resolveDisableOption(\n      userOptions?.disableParallax ?? this.options.disableParallax\n    );\n    this.options.disableParallax = () => prefersReducedMotion() || disableParallax();\n\n    // Reduced motion stops background video too, but what to show instead depends on the\n    // provider, so that decision lives in the video extension and this option keeps meaning\n    // only what the author asked for.\n    this.options.disableVideo = resolveDisableOption(\n      userOptions?.disableVideo ?? this.options.disableVideo\n    );\n\n    // `elementInViewport` historically accepts a DOM node or a jQuery-like collection.\n    let elementInVP = this.options.elementInViewport;\n\n    if (\n      elementInVP &&\n      typeof elementInVP === 'object' &&\n      'length' in elementInVP &&\n      !(elementInVP instanceof Element)\n    ) {\n      [elementInVP] = Array.from(elementInVP);\n    }\n\n    if (!(elementInVP instanceof Element)) {\n      elementInVP = null;\n    }\n\n    this.options.elementInViewport = elementInVP;\n    this.image = {\n      src: this.options.imgSrc || null,\n      $container: null,\n      useImgTag: false,\n      // Fixed positioning remains the default because it matches the historical rendering behavior best.\n      position: 'fixed',\n    };\n\n    if (this.initImg() && this.canInitParallax()) {\n      this.init();\n    }\n  }\n\n  css(el: HTMLElement, styles: string): string;\n  css(el: HTMLElement, styles: Record<string, string | number>): HTMLElement;\n  css(el: HTMLElement, styles: string | Record<string, string | number>): string | HTMLElement {\n    return css(el, styles as never);\n  }\n\n  extend<T extends Record<string, unknown>>(\n    out: T,\n    ...args: Array<Record<string, unknown> | null | undefined>\n  ): T {\n    return extend(out, ...args);\n  }\n\n  getWindowData(): JarallaxWindowData {\n    const { width, height } = getWindowSize();\n\n    return {\n      width,\n      height,\n      y: canUseDOM ? document.documentElement.scrollTop : 0,\n    };\n  }\n\n  initImg(): boolean {\n    let imageElement = this.options.imgElement;\n\n    // Support selector-based img lookup for existing markup contracts.\n    if (imageElement && typeof imageElement === 'string') {\n      imageElement = this.$item.querySelector(imageElement);\n    }\n\n    if (!(imageElement instanceof Element)) {\n      if (this.options.imgSrc) {\n        // When only an imgSrc is provided, create a synthetic image so downstream logic stays unified.\n        const image = new Image();\n        image.src = this.options.imgSrc;\n        imageElement = image;\n      } else {\n        imageElement = null;\n      }\n    }\n\n    if (imageElement) {\n      if (this.options.keepImg) {\n        this.image.$item = imageElement.cloneNode(true) as HTMLElement;\n      } else {\n        this.image.$item = imageElement as HTMLElement;\n        this.image.$itemParent = imageElement.parentNode;\n      }\n      this.image.useImgTag = true;\n    }\n\n    if (this.image.$item) {\n      return true;\n    }\n\n    if (this.image.src === null) {\n      // Background mode uses a transparent pixel as a placeholder and keeps the original CSS background separately.\n      this.image.src =\n        'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n      this.image.bgImage = this.css(this.$item, 'background-image');\n    }\n\n    return Boolean(this.image.bgImage && this.image.bgImage !== 'none');\n  }\n\n  canInitParallax(): boolean {\n    return !this.options.disableParallax();\n  }\n\n  init(): void {\n    const containerStyles: Record<string, string | number> = {\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      width: '100%',\n      height: '100%',\n      overflow: 'hidden',\n    };\n    let imageStyles: Record<string, string | number> = {\n      pointerEvents: 'none',\n      transformStyle: 'preserve-3d',\n      backfaceVisibility: 'hidden',\n    };\n\n    if (!this.options.keepImg) {\n      // Save author styles so destroy() can restore the DOM back to its pre-init state.\n      const itemStyle = this.$item.getAttribute('style');\n\n      if (itemStyle) {\n        this.$item.setAttribute('data-jarallax-original-styles', itemStyle);\n      }\n\n      if (this.image.useImgTag && this.image.$item) {\n        const imageStyle = this.image.$item.getAttribute('style');\n\n        if (imageStyle) {\n          this.image.$item.setAttribute('data-jarallax-original-styles', imageStyle);\n        }\n      }\n    }\n\n    if (this.css(this.$item, 'position') === 'static') {\n      this.css(this.$item, {\n        position: 'relative',\n      });\n    }\n\n    if (this.css(this.$item, 'z-index') === 'auto') {\n      this.css(this.$item, {\n        zIndex: 0,\n      });\n    }\n\n    this.image.$container = document.createElement('div');\n    this.css(this.image.$container, containerStyles);\n    this.css(this.image.$container, {\n      zIndex: this.options.zIndex,\n    });\n\n    if (this.image.position === 'fixed') {\n      // Clip-path avoids visible overflow artifacts for fixed-position images inside absolute containers.\n      this.css(this.image.$container, {\n        WebkitClipPath: 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n        clipPath: 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n      });\n    }\n\n    this.image.$container.setAttribute('id', `jarallax-container-${this.instanceID}`);\n\n    if (this.options.containerClass) {\n      this.image.$container.setAttribute('class', this.options.containerClass);\n    }\n\n    this.$item.appendChild(this.image.$container);\n\n    if (this.image.useImgTag && this.image.$item) {\n      // Img-tag mode mirrors the old runtime: promote the source img into the parallax container.\n      imageStyles = this.extend(\n        {\n          objectFit: this.options.imgSize,\n          objectPosition: this.options.imgPosition,\n          maxWidth: 'none',\n        },\n        containerStyles,\n        imageStyles\n      );\n    } else {\n      // Background mode keeps using a generated div so CSS background behavior stays intact.\n      this.image.$item = document.createElement('div');\n\n      if (this.image.src) {\n        imageStyles = this.extend(\n          {\n            backgroundPosition: this.options.imgPosition,\n            backgroundSize: this.options.imgSize,\n            backgroundRepeat: this.options.imgRepeat,\n            backgroundImage: this.image.bgImage || `url(\"${this.image.src}\")`,\n          },\n          containerStyles,\n          imageStyles\n        );\n      }\n    }\n\n    if (\n      this.options.type === 'opacity' ||\n      this.options.type === 'scale' ||\n      this.options.type === 'scale-opacity' ||\n      this.options.speed === 1\n    ) {\n      // Non-scroll effects never relied on fixed positioning, so keep them absolute.\n      this.image.position = 'absolute';\n    }\n\n    // Fixed positioning breaks when an ancestor creates a transformed or scrollable containing block.\n    if (this.image.position === 'fixed') {\n      const parents = getParents(this.$item).filter((el) => {\n        const styles = global.getComputedStyle(el);\n        const parentTransform =\n          styles.getPropertyValue('-webkit-transform') ||\n          styles.getPropertyValue('-moz-transform') ||\n          styles.transform;\n        const overflowRegex = /(auto|scroll)/;\n\n        return (\n          (parentTransform && parentTransform !== 'none') ||\n          overflowRegex.test(styles.overflow + styles.overflowY + styles.overflowX)\n        );\n      });\n\n      this.image.position = parents.length ? 'absolute' : 'fixed';\n    }\n\n    imageStyles.position = this.image.position;\n    this.css(this.image.$item!, imageStyles);\n    this.image.$container.appendChild(this.image.$item!);\n\n    // The first resize/scroll pass establishes geometry before observers start driving updates.\n    this.onResize();\n    this.onScroll(true);\n\n    this.options.onInit?.call(this);\n\n    if (this.css(this.$item, 'background-image') !== 'none') {\n      this.css(this.$item, {\n        backgroundImage: 'none',\n      });\n    }\n\n    addObserver(this);\n  }\n\n  destroy(): void {\n    removeObserver(this);\n\n    // Restore author styles first so the DOM goes back to its original contract before removing helpers.\n    const originalStylesTag = this.$item.getAttribute('data-jarallax-original-styles');\n    this.$item.removeAttribute('data-jarallax-original-styles');\n\n    if (!originalStylesTag) {\n      this.$item.removeAttribute('style');\n    } else {\n      this.$item.setAttribute('style', originalStylesTag);\n    }\n\n    if (this.image.useImgTag && this.image.$item) {\n      // Img mode temporarily moves the source element into the parallax container, so it must be restored too.\n      const originalStylesImgTag = this.image.$item.getAttribute('data-jarallax-original-styles');\n      this.image.$item.removeAttribute('data-jarallax-original-styles');\n\n      if (!originalStylesImgTag) {\n        this.image.$item.removeAttribute('style');\n      } else {\n        this.image.$item.setAttribute('style', originalStylesImgTag);\n      }\n\n      this.image.$itemParent?.appendChild(this.image.$item);\n    }\n\n    if (this.image.$container?.parentNode) {\n      this.image.$container.parentNode.removeChild(this.image.$container);\n    }\n\n    this.options.onDestroy?.call(this);\n    delete this.$item.jarallax;\n  }\n\n  coverImage(): JarallaxCoverImageData {\n    const { height: wndH } = getWindowSize();\n    const rect = this.image.$container!.getBoundingClientRect();\n    const contH = rect.height;\n    const { speed } = this.options;\n    const isScroll = this.options.type === 'scroll' || this.options.type === 'scroll-opacity';\n    let scrollDist = 0;\n    let resultH = contH;\n\n    if (isScroll) {\n      // Scroll mode stretches the image so there is enough overscan during viewport movement.\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      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    this.parallaxScrollDistance = scrollDist;\n    const resultMT = (isScroll ? wndH - resultH : contH - resultH) / 2;\n\n    this.css(this.image.$item!, {\n      height: `${resultH}px`,\n      marginTop: `${resultMT}px`,\n      left: this.image.position === 'fixed' ? `${rect.left}px` : '0',\n      width: `${rect.width}px`,\n    });\n\n    this.options.onCoverImage?.call(this);\n\n    return {\n      image: {\n        height: resultH,\n        marginTop: resultMT,\n      },\n      container: rect,\n    };\n  }\n\n  isVisible(): boolean {\n    return this.isElementInViewport || false;\n  }\n\n  onScroll(force?: boolean): void {\n    // Observer-driven updates skip offscreen work unless the first init pass explicitly forces it.\n    if (!force && !this.isVisible()) {\n      return;\n    }\n\n    const { height: wndH } = getWindowSize();\n    const rect = this.$item.getBoundingClientRect();\n    const contT = rect.top;\n    const contH = rect.height;\n    const styles: Record<string, string | number> = {};\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    let visiblePercent = 1;\n\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 and scale modes share the same visibility calculations but apply different transforms.\n    if (\n      this.options.type === 'opacity' ||\n      this.options.type === 'scale-opacity' ||\n      this.options.type === 'scroll-opacity'\n    ) {\n      styles.transform = 'translate3d(0,0,0)';\n      styles.opacity = visiblePercent;\n    }\n\n    if (this.options.type === 'scale' || this.options.type === 'scale-opacity') {\n      let scale = 1;\n\n      if (this.options.speed < 0) {\n        scale -= this.options.speed * visiblePercent;\n      } else {\n        scale += this.options.speed * (1 - visiblePercent);\n      }\n\n      styles.transform = `scale(${scale}) translate3d(0,0,0)`;\n    }\n\n    if (this.options.type === 'scroll' || this.options.type === 'scroll-opacity') {\n      let positionY = this.parallaxScrollDistance * fromViewportCenter;\n\n      // Absolute-position fallback uses document coordinates, so compensate for the container offset.\n      if (this.image.position === 'absolute') {\n        positionY -= contT;\n      }\n\n      styles.transform = `translate3d(0,${positionY}px,0)`;\n    }\n\n    this.css(this.image.$item!, styles);\n    this.options.onScroll?.call(this, {\n      section: rect,\n      beforeTop,\n      beforeTopEnd,\n      afterTop,\n      beforeBottom,\n      beforeBottomEnd,\n      afterBottom,\n      visiblePercent,\n      fromViewportCenter,\n    });\n  }\n\n  onResize(): void {\n    this.coverImage();\n  }\n}\n\nconst jarallax: JarallaxStatic = function jarallax(\n  items: JarallaxItems,\n  options?: JarallaxOptions | string,\n  ...args: unknown[]\n): JarallaxItems | unknown {\n  let normalizedItems: ArrayLike<JarallaxItem> = items as ArrayLike<JarallaxItem>;\n\n  if (!items) {\n    return items;\n  }\n\n  // Keep the public entrypoint flexible: single node, array-like collections and jQuery sets all work.\n  if (\n    typeof HTMLElement === 'object'\n      ? items instanceof HTMLElement\n      : items &&\n        typeof items === 'object' &&\n        (items as Node).nodeType === 1 &&\n        typeof (items as Node).nodeName === 'string'\n  ) {\n    normalizedItems = [items as JarallaxItem];\n  }\n\n  if (\n    !normalizedItems ||\n    typeof normalizedItems !== 'object' ||\n    typeof (normalizedItems as { length?: unknown }).length !== 'number'\n  ) {\n    return normalizedItems;\n  }\n\n  if (!canUseDOM) {\n    return typeof options === 'string' ? undefined : normalizedItems;\n  }\n\n  let ret: unknown;\n\n  for (let index = 0; index < normalizedItems.length; index += 1) {\n    const item = normalizedItems[index];\n\n    if (typeof options === 'object' || typeof options === 'undefined') {\n      if (!item.jarallax) {\n        item.jarallax = new Jarallax(item, options);\n      }\n    } else if (item.jarallax) {\n      ret = (item.jarallax[options] as (...methodArgs: unknown[]) => unknown).apply(\n        item.jarallax,\n        args\n      );\n    }\n\n    if (typeof ret !== 'undefined') {\n      return ret;\n    }\n  }\n\n  return normalizedItems;\n} as JarallaxStatic;\n\njarallax.constructor = Jarallax;\n\nexport default jarallax;\n","import global from '../utils/global';\nimport type { JarallaxInstance, JarallaxStatic } from '../types';\n\nfunction jarallaxElement(jarallax: JarallaxStatic | undefined = global.jarallax): void {\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  // The deprecated element extension historically worked by patching core instance methods in place.\n  (\n    [\n      'initImg',\n      'canInitParallax',\n      'init',\n      'destroy',\n      'coverImage',\n      'isVisible',\n      'onScroll',\n      'onResize',\n    ] as const\n  ).forEach((key) => {\n    const def = Jarallax.prototype[key] as (...args: unknown[]) => unknown;\n\n    (Jarallax.prototype as Record<string, unknown>)[key] = function overrideElementMode(\n      this: JarallaxInstance,\n      ...args: unknown[]\n    ): unknown {\n      // `data-jarallax-element` is the legacy opt-in that flips an instance into element mode.\n      if (key === 'initImg' && this.$item.getAttribute('data-jarallax-element') !== null) {\n        this.options.type = 'element';\n        this.pureOptions.speed = this.$item.getAttribute('data-jarallax-element') || '100';\n      }\n\n      if (this.options.type !== 'element') {\n        return def.apply(this, args);\n      }\n\n      this.pureOptions.threshold = this.$item.getAttribute('data-threshold') || '';\n\n      switch (key) {\n        case 'init': {\n          // Element mode encodes X/Y speeds in a single space-separated attribute for backward compatibility.\n          const speedArr = `${this.pureOptions.speed}`.split(' ');\n\n          this.options.speed = Number(this.pureOptions.speed || 0);\n          this.options.speedY = speedArr[0] ? parseFloat(speedArr[0]) : 0;\n          this.options.speedX = speedArr[1] ? parseFloat(speedArr[1]) : 0;\n\n          const thresholdArr = `${this.pureOptions.threshold || ''}`.split(' ');\n          this.options.thresholdY = thresholdArr[0] ? parseFloat(thresholdArr[0]) : null;\n          this.options.thresholdX = thresholdArr[1] ? parseFloat(thresholdArr[1]) : null;\n\n          def.apply(this, args);\n\n          const originalStylesTag = this.$item.getAttribute('data-jarallax-original-styles');\n\n          if (originalStylesTag) {\n            this.$item.setAttribute('style', originalStylesTag);\n          }\n\n          return true;\n        }\n        case 'onResize': {\n          // Remove the current transform temporarily so geometry is measured from the unshifted element.\n          const defTransform = this.css(this.$item, 'transform');\n\n          this.css(this.$item, { transform: '' });\n\n          const rect = this.$item.getBoundingClientRect();\n          const windowData = this.getWindowData();\n\n          this.itemData = {\n            width: rect.width,\n            height: rect.height,\n            y: rect.top + windowData.y,\n            x: rect.left,\n          };\n\n          this.css(this.$item, { transform: defTransform });\n          break;\n        }\n        case 'onScroll': {\n          // Element mode translates the element itself instead of moving a background/image layer.\n          const wnd = this.getWindowData();\n          const centerPercent =\n            (wnd.y + wnd.height / 2 - (this.itemData?.y || 0) - (this.itemData?.height || 0) / 2) /\n            (wnd.height / 2);\n          const moveY = centerPercent * (this.options.speedY || 0);\n          const moveX = centerPercent * (this.options.speedX || 0);\n          let my = moveY;\n          let mx = moveX;\n\n          if (\n            this.options.thresholdY !== null &&\n            typeof this.options.thresholdY !== 'undefined' &&\n            moveY > this.options.thresholdY\n          ) {\n            my = 0;\n          }\n\n          if (\n            this.options.thresholdX !== null &&\n            typeof this.options.thresholdX !== 'undefined' &&\n            moveX > this.options.thresholdX\n          ) {\n            mx = 0;\n          }\n\n          this.css(this.$item, { transform: `translate3d(${mx}px,${my}px,0)` });\n          break;\n        }\n        case 'initImg':\n        case 'isVisible':\n        case 'coverImage':\n          // These methods are effectively no-ops in element mode but must still report success to core.\n          return true;\n        default:\n          break;\n      }\n\n      return def.apply(this, args);\n    };\n  });\n}\n\nexport default jarallaxElement;\n","/*!\n * Video Worker v3.1.0 (https://github.com/nk-o/video-worker)\n * Copyright 2026 nK <https://nkdev.info>\n * Licensed under MIT (https://github.com/nk-o/video-worker/blob/master/LICENSE)\n */\n\nconst defaults = {\n  autoplay: false,\n  loop: false,\n  mute: false,\n  volume: 100,\n  showControls: true,\n  accessibilityHidden: false,\n  // Origin the player embed is loaded from. Override to use youtube-nocookie.com or a proxy.\n  youtubeHost: \"https://www.youtube.com\",\n  vimeoHost: \"https://player.vimeo.com\",\n  // start / end video time in seconds\n  startTime: 0,\n  endTime: 0\n};\n\nfunction extend(out, ...args) {\n  const target = out || {};\n  Object.keys(args).forEach((index) => {\n    const source = args[Number(index)];\n    if (!source) {\n      return;\n    }\n    Object.keys(source).forEach((key) => {\n      const typedKey = key;\n      const value = source[typedKey];\n      if (typeof value !== \"undefined\") {\n        target[typedKey] = value;\n      }\n    });\n  });\n  return target;\n}\n\nlet ID = 0;\nclass VideoWorkerBase {\n  constructor(url, options) {\n    this.type = \"none\";\n    this.destroyed = false;\n    this.url = url;\n    this.options_default = { ...defaults };\n    this.options = extend({ ...this.options_default }, options);\n    this.videoID = this.constructor.parseURL(url);\n    if (this.videoID) {\n      this.init();\n    }\n  }\n  isValid() {\n    return !!this.videoID;\n  }\n  init() {\n    this.ID = ID;\n    ID += 1;\n    this.playerID = `VideoWorker-${this.ID}`;\n  }\n  // events\n  on(name, callback) {\n    this.userEventsList = this.userEventsList || {};\n    if (!this.userEventsList[name]) {\n      this.userEventsList[name] = [];\n    }\n    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      return;\n    }\n    this.userEventsList[name].forEach((value, key) => {\n      var _a;\n      if (value === callback) {\n        const eventList = (_a = this.userEventsList) == null ? void 0 : _a[name];\n        if (eventList) {\n          eventList[key] = false;\n        }\n      }\n    });\n  }\n  fire(name, ...args) {\n    if (this.userEventsList && typeof this.userEventsList[name] !== \"undefined\") {\n      this.userEventsList[name].forEach((value) => {\n        if (value) {\n          value.apply(this, args);\n        }\n      });\n    }\n  }\n  /**\n   * Methods used in providers.\n   */\n  static parseURL(_url) {\n    return false;\n  }\n  play(_start) {\n  }\n  pause() {\n  }\n  mute() {\n  }\n  unmute() {\n  }\n  setVolume(_volume = false) {\n  }\n  getVolume(_callback) {\n  }\n  getMuted(_callback) {\n  }\n  setCurrentTime(_currentTime = false) {\n  }\n  getCurrentTime(_callback) {\n  }\n  getImageURL(_callback) {\n  }\n  getVideo(_callback) {\n  }\n  destroy() {\n    var _a, _b;\n    this.destroyed = true;\n    this.userEventsList = void 0;\n    if ((_a = this.$video) == null ? void 0 : _a.parentNode) {\n      this.$video.parentNode.removeChild(this.$video);\n    }\n    if ((_b = this.hiddenContainer) == null ? void 0 : _b.parentNode) {\n      this.hiddenContainer.parentNode.removeChild(this.hiddenContainer);\n    }\n    this.player = void 0;\n    this.$video = void 0;\n    this.hiddenContainer = void 0;\n  }\n}\n\nclass VideoWorkerLocal extends VideoWorkerBase {\n  constructor() {\n    super(...arguments);\n    this.type = \"local\";\n  }\n  static parseURL(url) {\n    const videoFormats = url.split(/,(?=mp4:|webm:|ogv:|ogg:)/);\n    const result = {};\n    let ready = 0;\n    videoFormats.forEach((value) => {\n      const match = value.match(/^(mp4|webm|ogv|ogg):(.*)/);\n      if ((match == null ? void 0 : match[1]) && match[2]) {\n        const key = match[1] === \"ogv\" ? \"ogg\" : match[1];\n        result[key] = match[2];\n        ready = 1;\n      }\n    });\n    return ready ? result : false;\n  }\n  play(start) {\n    if (!this.player) {\n      return;\n    }\n    if (typeof start !== \"undefined\") {\n      this.player.currentTime = start;\n    }\n    if (this.player.paused) {\n      if (this.options.endTime && !this.options.loop) {\n        this.getCurrentTime((seconds) => {\n          var _a;\n          if (seconds < this.options.endTime) {\n            void ((_a = this.player) == null ? void 0 : _a.play());\n          }\n        });\n      } else {\n        void this.player.play();\n      }\n    }\n  }\n  pause() {\n    if (!this.player || this.player.paused) {\n      return;\n    }\n    this.player.pause();\n  }\n  mute() {\n    if (!this.player || !this.$video) {\n      return;\n    }\n    this.$video.muted = true;\n  }\n  unmute() {\n    if (!this.player || !this.$video) {\n      return;\n    }\n    this.$video.muted = false;\n  }\n  setVolume(volume = false) {\n    if (!this.player || !this.$video || typeof volume !== \"number\") {\n      return;\n    }\n    this.$video.volume = volume / 100;\n  }\n  getVolume(callback) {\n    if (!this.player || !this.$video) {\n      callback(false);\n      return;\n    }\n    callback(this.$video.volume * 100);\n  }\n  getMuted(callback) {\n    if (!this.player || !this.$video) {\n      callback(null);\n      return;\n    }\n    callback(this.$video.muted);\n  }\n  setCurrentTime(currentTime = false) {\n    if (!this.player || !this.$video || typeof currentTime !== \"number\") {\n      return;\n    }\n    this.$video.currentTime = currentTime;\n  }\n  getCurrentTime(callback) {\n    if (!this.player) {\n      return;\n    }\n    callback(this.player.currentTime);\n  }\n  getImageURL(callback) {\n    if (this.videoImage) {\n      callback(this.videoImage);\n    }\n  }\n  getVideo(callback) {\n    if (this.destroyed) {\n      return;\n    }\n    if (this.$video) {\n      callback(this.$video);\n      return;\n    }\n    let hiddenDiv;\n    if (!this.$video) {\n      hiddenDiv = document.createElement(\"div\");\n      hiddenDiv.style.display = \"none\";\n    }\n    function addSourceElement(element, src, type) {\n      const source = document.createElement(\"source\");\n      source.src = src;\n      source.type = type;\n      element.appendChild(source);\n    }\n    if (!this.$video && hiddenDiv) {\n      this.$video = document.createElement(\"video\");\n      this.player = this.$video;\n      this.hiddenContainer = hiddenDiv;\n      if (this.options.showControls) {\n        this.$video.controls = true;\n      }\n      if (typeof this.options.volume === \"number\") {\n        this.setVolume(this.options.volume);\n      }\n      if (this.options.mute) {\n        this.mute();\n      }\n      if (this.options.loop) {\n        this.$video.loop = true;\n      }\n      this.$video.setAttribute(\"playsinline\", \"\");\n      this.$video.setAttribute(\"webkit-playsinline\", \"\");\n      if (this.options.accessibilityHidden) {\n        this.$video.setAttribute(\"tabindex\", \"-1\");\n        this.$video.setAttribute(\"aria-hidden\", \"true\");\n      }\n      this.$video.setAttribute(\"id\", this.playerID);\n      hiddenDiv.appendChild(this.$video);\n      document.body.appendChild(hiddenDiv);\n      Object.keys(this.videoID).forEach((key) => {\n        const sourceValue = this.videoID[key];\n        if (sourceValue) {\n          addSourceElement(this.$video, sourceValue, `video/${key}`);\n        }\n      });\n      const player = this.player;\n      let localStarted = false;\n      this.eventHandlers = {\n        playing: (event) => {\n          if (!localStarted) {\n            this.fire(\"started\", event);\n          }\n          localStarted = true;\n        },\n        timeupdate: (event) => {\n          this.fire(\"timeupdate\", event);\n          if (this.options.endTime && this.player && this.player.currentTime >= this.options.endTime) {\n            if (this.options.loop) {\n              this.play(this.options.startTime);\n            } else {\n              this.pause();\n            }\n          }\n        },\n        play: (event) => {\n          this.fire(\"play\", event);\n        },\n        pause: (event) => {\n          this.fire(\"pause\", event);\n        },\n        ended: (event) => {\n          this.fire(\"ended\", event);\n        },\n        loadedmetadata: (event) => {\n          if (!this.player) {\n            return;\n          }\n          this.videoWidth = this.player.videoWidth || 1280;\n          this.videoHeight = this.player.videoHeight || 720;\n          this.fire(\"ready\", event);\n          if (this.options.autoplay) {\n            this.play(this.options.startTime);\n          }\n        },\n        volumechange: (event) => {\n          this.getVolume((volume) => {\n            if (typeof volume === \"number\") {\n              this.options.volume = volume;\n            }\n          });\n          this.fire(\"volumechange\", event);\n        },\n        error: (event) => {\n          this.fire(\"error\", event);\n        }\n      };\n      player.addEventListener(\"playing\", this.eventHandlers.playing);\n      player.addEventListener(\"timeupdate\", this.eventHandlers.timeupdate);\n      player.addEventListener(\"play\", this.eventHandlers.play);\n      player.addEventListener(\"pause\", this.eventHandlers.pause);\n      player.addEventListener(\"ended\", this.eventHandlers.ended);\n      player.addEventListener(\"loadedmetadata\", this.eventHandlers.loadedmetadata);\n      player.addEventListener(\"volumechange\", this.eventHandlers.volumechange);\n      player.addEventListener(\"error\", this.eventHandlers.error);\n    }\n    callback(this.$video);\n  }\n  destroy() {\n    if (this.player && this.eventHandlers) {\n      this.player.removeEventListener(\"playing\", this.eventHandlers.playing);\n      this.player.removeEventListener(\"timeupdate\", this.eventHandlers.timeupdate);\n      this.player.removeEventListener(\"play\", this.eventHandlers.play);\n      this.player.removeEventListener(\"pause\", this.eventHandlers.pause);\n      this.player.removeEventListener(\"ended\", this.eventHandlers.ended);\n      this.player.removeEventListener(\"loadedmetadata\", this.eventHandlers.loadedmetadata);\n      this.player.removeEventListener(\"volumechange\", this.eventHandlers.volumechange);\n      this.player.removeEventListener(\"error\", this.eventHandlers.error);\n    }\n    this.eventHandlers = void 0;\n    super.destroy();\n  }\n}\n\nclass Deferred {\n  constructor() {\n    this.doneCallbacks = [];\n    this.failCallbacks = [];\n  }\n  execute(list, args) {\n    let index = list.length;\n    while (index) {\n      index -= 1;\n      list[index](...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\nlet win;\nif (typeof window !== \"undefined\") {\n  win = window;\n} else if (typeof self !== \"undefined\") {\n  win = self;\n} else {\n  win = globalThis;\n}\nvar global = win;\n\nfunction trimTrailingSlash(url) {\n  return url.replace(/\\/+$/, \"\");\n}\n\nconst VIMEO_IFRAME_ALLOW = \"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\";\nlet VimeoAPIadded = 0;\nlet loadingVimeoPlayer = 0;\nconst loadingVimeoDefer = new Deferred();\nconst videoGlobal$1 = global;\nfunction loadAPI$1() {\n  if (VimeoAPIadded) {\n    return;\n  }\n  VimeoAPIadded = 1;\n  if (typeof videoGlobal$1.Vimeo !== \"undefined\") {\n    return;\n  }\n  const src = \"https://player.vimeo.com/api/player.js\";\n  let tag = document.createElement(\"script\");\n  let head = document.getElementsByTagName(\"head\")[0] || null;\n  if (!head || !tag) {\n    return;\n  }\n  tag.src = src;\n  head.appendChild(tag);\n  head = null;\n  tag = null;\n}\nfunction onAPIready$1(callback) {\n  if (typeof videoGlobal$1.Vimeo === \"undefined\" && !loadingVimeoPlayer) {\n    loadingVimeoPlayer = 1;\n    const vimeoInterval = setInterval(() => {\n      if (typeof videoGlobal$1.Vimeo !== \"undefined\") {\n        clearInterval(vimeoInterval);\n        loadingVimeoDefer.resolve(\"done\");\n        callback();\n      }\n    }, 20);\n  } else if (typeof videoGlobal$1.Vimeo !== \"undefined\") {\n    callback();\n  } else {\n    loadingVimeoDefer.done(() => {\n      callback();\n    });\n  }\n}\nclass VideoWorkerVimeo extends VideoWorkerBase {\n  constructor() {\n    super(...arguments);\n    this.type = \"vimeo\";\n  }\n  static parseURL(url) {\n    const regExp = /https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/;\n    const match = url.match(regExp);\n    return (match == null ? void 0 : match[3]) ? match[3] : false;\n  }\n  // Try to extract a hash for private videos from the URL.\n  // Thanks to https://github.com/sampotts/plyr\n  static parseURLHash(url) {\n    const regex = /^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*&*h=|\\/)+([\\d,a-f]+)/;\n    const found = url.match(regex);\n    return found && found.length === 5 ? found[4] : null;\n  }\n  init() {\n    super.init();\n    loadAPI$1();\n  }\n  play(start) {\n    if (!this.player) {\n      return;\n    }\n    if (typeof start !== \"undefined\") {\n      void this.player.setCurrentTime(start);\n    }\n    this.player.getPaused().then((paused) => {\n      var _a;\n      if (paused) {\n        if (this.options.endTime && !this.options.loop) {\n          this.getCurrentTime((seconds) => {\n            var _a2;\n            if (seconds < this.options.endTime) {\n              void ((_a2 = this.player) == null ? void 0 : _a2.play());\n            }\n          });\n        } else {\n          void ((_a = this.player) == null ? void 0 : _a.play());\n        }\n      }\n    });\n  }\n  pause() {\n    if (!this.player) {\n      return;\n    }\n    this.player.getPaused().then((paused) => {\n      var _a;\n      if (!paused) {\n        void ((_a = this.player) == null ? void 0 : _a.pause());\n      }\n    });\n  }\n  mute() {\n    if (!this.player || !this.player.setVolume) {\n      return;\n    }\n    this.setVolume(0);\n  }\n  unmute() {\n    if (!this.player || !this.player.setVolume) {\n      return;\n    }\n    this.setVolume(this.options.volume || 100);\n  }\n  setVolume(volume = false) {\n    if (!this.player || typeof volume !== \"number\" || !this.player.setVolume) {\n      return;\n    }\n    void this.player.setVolume(volume / 100);\n  }\n  getVolume(callback) {\n    if (!this.player) {\n      callback(false);\n      return;\n    }\n    if (this.player.getVolume) {\n      this.player.getVolume().then((volume) => {\n        callback(volume * 100);\n      });\n    }\n  }\n  getMuted(callback) {\n    if (!this.player) {\n      callback(null);\n      return;\n    }\n    if (this.player.getVolume) {\n      this.player.getVolume().then((volume) => {\n        callback(volume === 0);\n      });\n    }\n  }\n  setCurrentTime(currentTime = false) {\n    if (!this.player || typeof currentTime !== \"number\" || !this.player.setCurrentTime) {\n      return;\n    }\n    void this.player.setCurrentTime(currentTime);\n  }\n  getCurrentTime(callback) {\n    if (!this.player || !this.player.getCurrentTime) {\n      return;\n    }\n    this.player.getCurrentTime().then((currentTime) => {\n      callback(currentTime);\n    });\n  }\n  getImageURL(callback) {\n    if (this.destroyed) {\n      return;\n    }\n    if (this.videoImage) {\n      callback(this.videoImage);\n      return;\n    }\n    let width = global.innerWidth || 1920;\n    if (global.devicePixelRatio) {\n      width *= global.devicePixelRatio;\n    }\n    width = Math.min(width, 1920);\n    const request = new XMLHttpRequest();\n    this.imageRequest = request;\n    request.open(\"GET\", `https://vimeo.com/api/oembed.json?url=${this.url}&width=${width}`, true);\n    request.onreadystatechange = () => {\n      if (request.readyState !== 4) {\n        return;\n      }\n      if (request.status >= 200 && request.status < 400) {\n        const response = JSON.parse(request.responseText);\n        if (response.thumbnail_url) {\n          this.videoImage = response.thumbnail_url;\n          callback(this.videoImage);\n        }\n      }\n      this.imageRequest = void 0;\n    };\n    request.send();\n  }\n  getVideo(callback) {\n    if (this.destroyed) {\n      return;\n    }\n    if (this.$video) {\n      callback(this.$video);\n      return;\n    }\n    onAPIready$1(() => {\n      if (this.destroyed) {\n        return;\n      }\n      let hiddenDiv;\n      if (!this.$video) {\n        hiddenDiv = document.createElement(\"div\");\n        hiddenDiv.style.display = \"none\";\n      }\n      this.playerOptions = {\n        // GDPR Compliance.\n        dnt: 1,\n        id: String(this.videoID),\n        autopause: 0,\n        transparent: 0,\n        autoplay: this.options.autoplay ? 1 : 0,\n        loop: this.options.loop ? 1 : 0,\n        muted: this.options.mute || this.options.volume === 0 ? 1 : 0\n      };\n      const urlHash = this.constructor.parseURLHash(this.url);\n      if (urlHash) {\n        this.playerOptions.h = urlHash;\n      }\n      if (!this.options.showControls) {\n        this.playerOptions.controls = 0;\n      }\n      if (!this.options.showControls && this.options.loop && this.options.autoplay) {\n        this.playerOptions.background = 1;\n      }\n      if (!this.$video && hiddenDiv) {\n        this.hiddenContainer = hiddenDiv;\n        let playerOptionsString = \"\";\n        Object.keys(this.playerOptions).forEach((key) => {\n          var _a;\n          const optionKey = key;\n          const value = (_a = this.playerOptions) == null ? void 0 : _a[optionKey];\n          if (typeof value === \"undefined\") {\n            return;\n          }\n          if (playerOptionsString !== \"\") {\n            playerOptionsString += \"&\";\n          }\n          playerOptionsString += `${key}=${encodeURIComponent(String(value))}`;\n        });\n        this.$video = document.createElement(\"iframe\");\n        this.$video.setAttribute(\"id\", this.playerID);\n        this.$video.setAttribute(\n          \"src\",\n          `${trimTrailingSlash(this.options.vimeoHost)}/video/${String(this.videoID)}?${playerOptionsString}`\n        );\n        this.$video.setAttribute(\"frameborder\", \"0\");\n        this.$video.setAttribute(\"mozallowfullscreen\", \"\");\n        this.$video.setAttribute(\"allowfullscreen\", \"\");\n        this.$video.setAttribute(\"allow\", VIMEO_IFRAME_ALLOW);\n        this.$video.setAttribute(\"title\", \"Vimeo video player\");\n        if (this.options.accessibilityHidden) {\n          this.$video.setAttribute(\"tabindex\", \"-1\");\n          this.$video.setAttribute(\"aria-hidden\", \"true\");\n        }\n        hiddenDiv.appendChild(this.$video);\n        document.body.appendChild(hiddenDiv);\n      }\n      this.player = this.player || new videoGlobal$1.Vimeo.Player(\n        this.$video,\n        this.playerOptions\n      );\n      if (!this.options.mute && typeof this.options.volume === \"number\") {\n        this.setVolume(this.options.volume);\n      }\n      if (this.options.startTime && this.options.autoplay) {\n        void this.player.setCurrentTime(this.options.startTime);\n      }\n      this.player.getVideoWidth().then((widthValue) => {\n        this.videoWidth = widthValue || 1280;\n      });\n      this.player.getVideoHeight().then((heightValue) => {\n        this.videoHeight = heightValue || 720;\n      });\n      let vmStarted = false;\n      this.player.on(\"timeupdate\", (event) => {\n        if (!vmStarted) {\n          this.fire(\"started\", event);\n          vmStarted = true;\n        }\n        this.fire(\"timeupdate\", event);\n        if (this.options.endTime && event.seconds >= this.options.endTime) {\n          if (this.options.loop) {\n            this.play(this.options.startTime);\n          } else {\n            this.pause();\n          }\n        }\n      });\n      this.player.on(\"play\", (event) => {\n        this.fire(\"play\", event);\n        if (this.options.startTime && event.seconds === 0) {\n          this.play(this.options.startTime);\n        }\n      });\n      this.player.on(\"pause\", (event) => {\n        this.fire(\"pause\", event);\n      });\n      this.player.on(\"ended\", (event) => {\n        this.fire(\"ended\", event);\n      });\n      this.player.on(\"loaded\", (event) => {\n        this.fire(\"ready\", event);\n      });\n      this.player.on(\"volumechange\", (event) => {\n        this.getVolume((volume) => {\n          if (typeof volume === \"number\") {\n            this.options.volume = volume;\n          }\n        });\n        this.fire(\"volumechange\", event);\n      });\n      this.player.on(\"error\", (event) => {\n        this.fire(\"error\", event);\n      });\n      callback(this.$video);\n    });\n  }\n  destroy() {\n    var _a;\n    if (this.imageRequest) {\n      this.imageRequest.abort();\n      this.imageRequest = void 0;\n    }\n    if ((_a = this.player) == null ? void 0 : _a.destroy) {\n      void this.player.destroy();\n    }\n    super.destroy();\n  }\n}\n\nlet YoutubeAPIadded = 0;\nlet loadingYoutubePlayer = 0;\nconst loadingYoutubeDefer = new Deferred();\nconst videoGlobal = global;\nfunction loadAPI() {\n  if (YoutubeAPIadded) {\n    return;\n  }\n  YoutubeAPIadded = 1;\n  const src = \"https://www.youtube.com/iframe_api\";\n  let tag = document.createElement(\"script\");\n  let head = document.getElementsByTagName(\"head\")[0] || null;\n  if (!head || !tag) {\n    return;\n  }\n  tag.src = src;\n  head.appendChild(tag);\n  head = null;\n  tag = null;\n}\nfunction onAPIready(callback) {\n  if ((typeof videoGlobal.YT === \"undefined\" || videoGlobal.YT.loaded === 0) && !loadingYoutubePlayer) {\n    loadingYoutubePlayer = 1;\n    videoGlobal.onYouTubeIframeAPIReady = () => {\n      videoGlobal.onYouTubeIframeAPIReady = null;\n      loadingYoutubeDefer.resolve(\"done\");\n      callback();\n    };\n  } else if (typeof videoGlobal.YT === \"object\" && videoGlobal.YT.loaded === 1) {\n    callback();\n  } else {\n    loadingYoutubeDefer.done(() => {\n      callback();\n    });\n  }\n}\nclass VideoWorkerYoutube extends VideoWorkerBase {\n  constructor() {\n    super(...arguments);\n    this.type = \"youtube\";\n  }\n  static parseURL(url) {\n    const regExp = /.*(?:youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|shorts\\/|watch\\?v=)([^#&?]*).*/;\n    const match = url.match(regExp);\n    return match && match[1].length === 11 ? match[1] : false;\n  }\n  init() {\n    super.init();\n    loadAPI();\n  }\n  play(start) {\n    if (!this.player || !this.player.playVideo || !videoGlobal.YT) {\n      return;\n    }\n    if (typeof start !== \"undefined\") {\n      this.player.seekTo(start || 0);\n    }\n    if (videoGlobal.YT.PlayerState.PLAYING !== this.player.getPlayerState()) {\n      if (this.options.endTime && !this.options.loop) {\n        this.getCurrentTime((seconds) => {\n          var _a;\n          if (seconds < this.options.endTime) {\n            (_a = this.player) == null ? void 0 : _a.playVideo();\n          }\n        });\n      } else {\n        this.player.playVideo();\n      }\n    }\n  }\n  pause() {\n    if (!this.player || !this.player.pauseVideo || !videoGlobal.YT) {\n      return;\n    }\n    if (videoGlobal.YT.PlayerState.PLAYING === this.player.getPlayerState()) {\n      this.player.pauseVideo();\n    }\n  }\n  mute() {\n    if (!this.player || !this.player.mute) {\n      return;\n    }\n    this.player.mute();\n  }\n  unmute() {\n    if (!this.player || !this.player.unMute) {\n      return;\n    }\n    this.player.unMute();\n  }\n  setVolume(volume = false) {\n    if (!this.player || typeof volume !== \"number\" || !this.player.setVolume) {\n      return;\n    }\n    this.player.setVolume(volume);\n  }\n  getVolume(callback) {\n    if (!this.player) {\n      callback(false);\n      return;\n    }\n    if (this.player.getVolume) {\n      callback(this.player.getVolume());\n    }\n  }\n  getMuted(callback) {\n    if (!this.player) {\n      callback(null);\n      return;\n    }\n    if (this.player.isMuted) {\n      callback(this.player.isMuted());\n    }\n  }\n  setCurrentTime(currentTime = false) {\n    if (!this.player || typeof currentTime !== \"number\" || !this.player.seekTo) {\n      return;\n    }\n    this.player.seekTo(currentTime);\n  }\n  getCurrentTime(callback) {\n    if (!this.player || !this.player.getCurrentTime) {\n      return;\n    }\n    callback(this.player.getCurrentTime());\n  }\n  // Time the progress check stops the video at. A looped video restarts right before its\n  // natural end, so the player never switches to the ENDED state and never shows its own UI\n  // over the video. getDuration() alone is not enough for that: it returns 0 until the video\n  // metadata is loaded and is sometimes rounded up to the next second.\n  // https://github.com/nk-o/video-worker/issues/2\n  getEndTime() {\n    var _a;\n    if (this.options.endTime || !this.options.loop) {\n      return this.options.endTime;\n    }\n    const duration = this.observedDuration || ((_a = this.player) == null ? void 0 : _a.getDuration()) || 0;\n    return duration > 0.3 ? duration - 0.3 : 0;\n  }\n  getImageURL(callback) {\n    if (this.videoImage) {\n      callback(this.videoImage);\n      return;\n    }\n    const availableSizes = [\"maxresdefault\", \"sddefault\", \"hqdefault\", \"0\"];\n    let step = 0;\n    const tempImg = new Image();\n    tempImg.onload = () => {\n      if ((tempImg.naturalWidth || tempImg.width) !== 120 || step === availableSizes.length - 1) {\n        this.videoImage = `https://img.youtube.com/vi/${String(this.videoID)}/${availableSizes[step]}.jpg`;\n        callback(this.videoImage);\n      } else {\n        step += 1;\n        tempImg.src = `https://img.youtube.com/vi/${String(this.videoID)}/${availableSizes[step]}.jpg`;\n      }\n    };\n    tempImg.src = `https://img.youtube.com/vi/${String(this.videoID)}/${availableSizes[step]}.jpg`;\n  }\n  getVideo(callback) {\n    if (this.destroyed) {\n      return;\n    }\n    if (this.$video) {\n      callback(this.$video);\n      return;\n    }\n    onAPIready(() => {\n      if (this.destroyed) {\n        return;\n      }\n      let hiddenDiv;\n      if (!this.$video) {\n        hiddenDiv = document.createElement(\"div\");\n        hiddenDiv.style.display = \"none\";\n      }\n      this.playerOptions = {\n        host: trimTrailingSlash(this.options.youtubeHost),\n        videoId: String(this.videoID),\n        playerVars: {\n          autohide: 1,\n          rel: 0,\n          autoplay: 0,\n          // autoplay enable on mobile devices\n          playsinline: 1\n        },\n        events: {\n          onReady: (event) => {\n            if (this.options.mute) {\n              event.target.mute();\n            } else if (typeof this.options.volume === \"number\") {\n              event.target.setVolume(this.options.volume);\n            }\n            if (this.options.autoplay) {\n              this.play(this.options.startTime);\n            }\n            this.fire(\"ready\", event);\n            if (this.volumeChangeInterval) {\n              clearInterval(this.volumeChangeInterval);\n            }\n            this.volumeChangeInterval = setInterval(() => {\n              this.getVolume((volume) => {\n                if (typeof volume === \"number\" && this.options.volume !== volume) {\n                  this.options.volume = volume;\n                  this.fire(\"volumechange\", event);\n                }\n              });\n            }, 150);\n          },\n          onStateChange: () => {\n          },\n          onError: (event) => {\n            this.fire(\"error\", event);\n          }\n        }\n      };\n      if (!this.options.showControls) {\n        this.playerOptions.playerVars.iv_load_policy = 3;\n        this.playerOptions.playerVars.modestbranding = 1;\n        this.playerOptions.playerVars.controls = 0;\n        this.playerOptions.playerVars.showinfo = 0;\n        this.playerOptions.playerVars.disablekb = 1;\n      }\n      let ytStarted = false;\n      this.playerOptions.events.onStateChange = (event) => {\n        if (!videoGlobal.YT || !this.player) {\n          return;\n        }\n        if (event.data === videoGlobal.YT.PlayerState.ENDED) {\n          this.observedDuration = this.player.getCurrentTime();\n          if (this.options.loop) {\n            this.play(this.options.startTime);\n          }\n        }\n        if (!ytStarted && event.data === videoGlobal.YT.PlayerState.PLAYING) {\n          ytStarted = true;\n          this.fire(\"started\", event);\n        }\n        if (event.data === videoGlobal.YT.PlayerState.PLAYING) {\n          this.fire(\"play\", event);\n        }\n        if (event.data === videoGlobal.YT.PlayerState.PAUSED) {\n          this.fire(\"pause\", event);\n        }\n        if (event.data === videoGlobal.YT.PlayerState.ENDED) {\n          this.fire(\"ended\", event);\n        }\n        if (event.data === videoGlobal.YT.PlayerState.PLAYING) {\n          if (this.progressInterval) {\n            clearInterval(this.progressInterval);\n          }\n          this.progressInterval = setInterval(() => {\n            if (!this.player) {\n              return;\n            }\n            this.fire(\"timeupdate\", event);\n            const endTime = this.getEndTime();\n            if (endTime && this.player.getCurrentTime() >= endTime) {\n              if (this.options.loop) {\n                this.play(this.options.startTime);\n              } else {\n                this.pause();\n              }\n            }\n          }, 150);\n        } else if (this.progressInterval) {\n          clearInterval(this.progressInterval);\n          this.progressInterval = void 0;\n        }\n      };\n      const firstInit = !this.$video;\n      if (firstInit && hiddenDiv) {\n        this.hiddenContainer = hiddenDiv;\n        const div = document.createElement(\"div\");\n        div.setAttribute(\"id\", this.playerID);\n        hiddenDiv.appendChild(div);\n        document.body.appendChild(hiddenDiv);\n      }\n      this.player = this.player || new videoGlobal.YT.Player(this.playerID, this.playerOptions);\n      if (firstInit) {\n        this.$video = document.getElementById(this.playerID);\n        if (this.$video && this.options.accessibilityHidden) {\n          this.$video.setAttribute(\"tabindex\", \"-1\");\n          this.$video.setAttribute(\"aria-hidden\", \"true\");\n        }\n        if (this.$video) {\n          this.videoWidth = parseInt(this.$video.getAttribute(\"width\") || \"1280\", 10) || 1280;\n          this.videoHeight = parseInt(this.$video.getAttribute(\"height\") || \"720\", 10) || 720;\n        }\n      }\n      callback(this.$video);\n    });\n  }\n  destroy() {\n    var _a;\n    if (this.progressInterval) {\n      clearInterval(this.progressInterval);\n      this.progressInterval = void 0;\n    }\n    if (this.volumeChangeInterval) {\n      clearInterval(this.volumeChangeInterval);\n      this.volumeChangeInterval = void 0;\n    }\n    if ((_a = this.player) == null ? void 0 : _a.destroy) {\n      this.player.destroy();\n    }\n    super.destroy();\n  }\n}\n\nconst VideoWorker = function(url, options) {\n  let result = false;\n  Object.keys(VideoWorker.providers).forEach((key) => {\n    if (!result && VideoWorker.providers[key].parseURL(url)) {\n      result = new VideoWorker.providers[key](url, options);\n    }\n  });\n  return result || new VideoWorkerBase(url, options);\n};\nVideoWorker.BaseClass = VideoWorkerBase;\nVideoWorker.providers = {\n  Youtube: VideoWorkerYoutube,\n  Vimeo: VideoWorkerVimeo,\n  Local: VideoWorkerLocal\n};\n\nexport { VideoWorker as default };\n//# sourceMappingURL=video-worker.esm.js.map\n","import VideoWorker from 'video-worker';\n\nimport type { JarallaxCoverImageData, JarallaxInstance, JarallaxStatic } from './types';\nimport global from './utils/global';\nimport prefersReducedMotion from './utils/prefersReducedMotion';\n\n// Under reduced motion a provider iframe buys nothing — its thumbnail is already painted as the\n// background — but a self-hosted video with no fallback image is the only thing that element has\n// to show, so it is inserted paused and the browser paints its first frame.\nfunction isPosterOnlyVideo(instance: JarallaxInstance): boolean {\n  return (\n    prefersReducedMotion() && instance.video?.type === 'local' && !instance.defaultInitImgResult\n  );\n}\n\nfunction jarallaxVideo(jarallax: JarallaxStatic | undefined = global.jarallax): void {\n  if (typeof jarallax === 'undefined') {\n    return;\n  }\n\n  const Jarallax = jarallax.constructor;\n  const defOnScroll = Jarallax.prototype.onScroll;\n\n  // Video DOM is inserted lazily once the instance becomes eligible, which preserves the old lazy-loading behavior.\n  Jarallax.prototype.onScroll = function onScrollWithVideo(this: JarallaxInstance): void {\n    defOnScroll.apply(this);\n\n    const posterOnly = isPosterOnlyVideo(this);\n    const isReady =\n      !this.isVideoInserted &&\n      this.video &&\n      (!this.options.videoLazyLoading || this.isElementInViewport) &&\n      !this.options.disableVideo() &&\n      (!prefersReducedMotion() || posterOnly);\n\n    if (!isReady) {\n      return;\n    }\n\n    this.isVideoInserted = true;\n    this.video?.getVideo((video: HTMLElement) => {\n      const insertedVideo = video as HTMLIFrameElement | HTMLVideoElement;\n      const parent = insertedVideo.parentNode as HTMLElement | null;\n\n      this.css(insertedVideo, {\n        position: this.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      this.$video = insertedVideo;\n\n      // Self-hosted video should keep using the image as a poster, just like the legacy extension did.\n      // In the poster-only case that image is the transparent placeholder, and setting it would\n      // cover the very frame this element was inserted to show, so it is left off and the video\n      // is stretched to cover by itself — `started` never fires to hand it to coverImage().\n      if (this.video?.type === 'local') {\n        if (posterOnly) {\n          this.css(insertedVideo, { objectFit: 'cover' });\n        } else if (this.image.src) {\n          insertedVideo.setAttribute('poster', this.image.src);\n        } else if (this.image.$item?.tagName === 'IMG') {\n          insertedVideo.setAttribute('poster', (this.image.$item as HTMLImageElement).src);\n        }\n      }\n\n      if (this.options.videoClass) {\n        insertedVideo.setAttribute(\n          'class',\n          `${this.options.videoClass} ${this.options.videoClass}-${this.video?.type}`\n        );\n      }\n\n      this.image.$container?.appendChild(insertedVideo);\n      parent?.parentNode?.removeChild(parent);\n      this.options.onVideoInsert?.call(this);\n    });\n  };\n\n  const defCoverImage = Jarallax.prototype.coverImage;\n\n  // Reuse the core cover logic, then resize the actual video element to match the computed image box.\n  Jarallax.prototype.coverImage = function coverVideo(\n    this: JarallaxInstance\n  ): JarallaxCoverImageData | true | undefined {\n    const imageData = defCoverImage.apply(this) as JarallaxCoverImageData | true | undefined;\n    const node = this.image.$item?.nodeName;\n\n    if (\n      !imageData ||\n      imageData === true ||\n      !this.video ||\n      !node ||\n      (node !== 'IFRAME' && node !== 'VIDEO') ||\n      !this.$video\n    ) {\n      return imageData;\n    }\n\n    let h = imageData.image.height;\n    let w = (h * (this.image.width || 0)) / (this.image.height || 1);\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 * (this.image.height || 0)) / (this.image.width || 1);\n      ml = 0;\n      mt += (imageData.image.height - h) / 2;\n    }\n\n    // Iframes need extra vertical overscan to hide native player controls outside the visible crop.\n    if (node === 'IFRAME') {\n      h += 400;\n      mt -= 200;\n    }\n\n    this.css(this.$video, {\n      width: `${w}px`,\n      marginLeft: `${ml}px`,\n      height: `${h}px`,\n      marginTop: `${mt}px`,\n    });\n\n    return imageData;\n  };\n\n  const defInitImg = Jarallax.prototype.initImg;\n\n  // The video extension can bootstrap from `data-jarallax-video` even when no option object was passed in.\n  Jarallax.prototype.initImg = function initVideoImage(this: JarallaxInstance): boolean {\n    const defaultResult = defInitImg.apply(this) as boolean;\n\n    if (!this.options.videoSrc) {\n      this.options.videoSrc = this.$item.getAttribute('data-jarallax-video') || null;\n    }\n\n    if (this.options.videoSrc) {\n      this.defaultInitImgResult = defaultResult;\n      return true;\n    }\n\n    return defaultResult;\n  };\n\n  const defCanInitParallax = Jarallax.prototype.canInitParallax;\n\n  // Video setup happens inside canInitParallax() so the extension can decide between real parallax and static fallback.\n  Jarallax.prototype.canInitParallax = function canInitVideoParallax(\n    this: JarallaxInstance\n  ): boolean {\n    let defaultResult = defCanInitParallax.apply(this) as boolean;\n\n    if (!this.options.videoSrc) {\n      return defaultResult;\n    }\n\n    const video = new VideoWorker(this.options.videoSrc, {\n      // Self-hosted players autoplay themselves once metadata lands, so this is what keeps a\n      // poster-only video paused.\n      autoplay: !prefersReducedMotion(),\n      loop: this.options.videoLoop,\n      showControls: false,\n      accessibilityHidden: true,\n      startTime: Number(this.options.videoStartTime || 0),\n      endTime: Number(this.options.videoEndTime || 0),\n      // `data-video-volume` reaches us as a string, and \"0\" is truthy. Compare the number.\n      mute: !Number(this.options.videoVolume),\n      volume: Number(this.options.videoVolume || 0),\n      // video-worker ignores undefined, so an unset host keeps its own default.\n      youtubeHost: this.options.videoYoutubeHost || undefined,\n      vimeoHost: this.options.videoVimeoHost || undefined,\n    });\n\n    this.options.onVideoWorkerInit?.call(this, video);\n\n    const resetDefaultImage = () => {\n      // Errors or completed non-looping videos fall back to the original image element.\n      if (this.image.$default_item) {\n        this.image.$item = this.image.$default_item;\n        this.image.$item.style.display = 'block';\n        this.coverImage();\n        this.onScroll();\n      }\n    };\n\n    if (!video.isValid()) {\n      return defaultResult;\n    }\n\n    // Video support must still work even when parallax is disabled on mobile/user-agent checks.\n    if (this.options.disableParallax()) {\n      defaultResult = true;\n      this.image.position = 'absolute';\n      this.options.type = 'scroll';\n      this.options.speed = 1;\n    }\n\n    if (!defaultResult) {\n      // If the instance cannot initialize parallax, keep the historical behavior of swapping in a thumbnail background.\n      if (!this.defaultInitImgResult) {\n        video.getImageURL((url) => {\n          const currentStyle = this.$item.getAttribute('style');\n\n          if (currentStyle) {\n            this.$item.setAttribute('data-jarallax-original-styles', currentStyle);\n          }\n\n          this.css(this.$item, {\n            backgroundImage: `url(\"${url}\")`,\n            backgroundPosition: 'center',\n            backgroundSize: 'cover',\n          });\n        });\n      }\n\n      return defaultResult;\n    }\n\n    video.on('ready', () => {\n      // Nothing starts on its own under reduced motion, so the visibility hook is never installed.\n      if (prefersReducedMotion()) {\n        return;\n      }\n\n      // Visibility-driven play/pause is applied by wrapping the existing onScroll implementation.\n      if (this.options.videoPlayOnlyVisible) {\n        const oldOnScroll = this.onScroll;\n\n        this.onScroll = function onScrollPlayVideo(this: JarallaxInstance): void {\n          oldOnScroll.apply(this);\n\n          if (\n            !this.videoError &&\n            (this.options.videoLoop || (!this.options.videoLoop && !this.videoEnded))\n          ) {\n            if (this.isVisible()) {\n              video.play();\n            } else {\n              video.pause();\n            }\n          }\n        };\n      } else {\n        video.play();\n      }\n    });\n\n    video.on('started', () => {\n      // Once the real video starts, it becomes the active visual source used by core sizing logic.\n      this.image.$default_item = this.image.$item;\n      this.image.$item = this.$video as HTMLElement;\n      this.image.width = this.video?.videoWidth || 1280;\n      this.image.height = this.video?.videoHeight || 720;\n      this.coverImage();\n      this.onScroll();\n\n      if (this.image.$default_item) {\n        this.image.$default_item.style.display = 'none';\n      }\n    });\n\n    video.on('ended', () => {\n      this.videoEnded = true;\n\n      if (!this.options.videoLoop) {\n        resetDefaultImage();\n      }\n    });\n\n    video.on('error', () => {\n      this.videoError = true;\n      resetDefaultImage();\n    });\n\n    this.video = video;\n\n    if (!this.defaultInitImgResult) {\n      // Remote providers need an async thumbnail first; local videos can initialize immediately.\n      this.image.src =\n        'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n      if (video.type !== 'local') {\n        video.getImageURL((url) => {\n          this.image.bgImage = `url(\"${url}\")`;\n          this.init();\n        });\n\n        return false;\n      }\n    }\n\n    return defaultResult;\n  };\n\n  const defDestroy = Jarallax.prototype.destroy;\n\n  // Restore the original image reference before core destroy() tears down the DOM.\n  Jarallax.prototype.destroy = function destroyVideo(this: JarallaxInstance): void {\n    if (this.image.$default_item) {\n      this.image.$item = this.image.$default_item;\n      delete this.image.$default_item;\n    }\n\n    defDestroy.apply(this);\n  };\n}\n\nexport default jarallaxVideo;\n","import jarallaxLib from './core';\nimport jarallaxElementExt from './deprecated/ext-element';\nimport jarallaxVideoExt from './ext-video';\n\nexport const jarallax = jarallaxLib;\n\nexport const jarallaxVideo = function jarallaxVideo(): void {\n  jarallaxVideoExt(jarallax);\n};\n\nexport const jarallaxElement = function jarallaxElement(): void {\n  jarallaxElementExt(jarallax);\n};\n"],"names":["defaults","win","global","extend","domReady","jarallax","jarallaxElement","jarallaxVideo","jarallaxLib","jarallaxVideoExt","jarallaxElementExt"],"mappings":"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","x_google_ignoreList":[12]}