403Webshell
Server IP : 14.225.204.176  /  Your IP : 216.73.216.252
Web Server : nginx/1.24.0
System : Linux nodejs-ybgk 6.8.0-40-generic #40-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 5 10:34:03 UTC 2024 x86_64
User : root ( 0)
PHP Version : 8.1.34
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/html/php/zinisoft.net-react/node_modules/photoswipe/dist/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/php/zinisoft.net-react/node_modules/photoswipe/dist/photoswipe.esm.js.map
{"version":3,"file":"photoswipe.esm.js","sources":["../../../src/js/util/util.js","../../../src/js/util/dom-events.js","../../../src/js/util/viewport-size.js","../../../src/js/slide/pan-bounds.js","../../../src/js/slide/zoom-level.js","../../../src/js/slide/slide.js","../../../src/js/gestures/drag-handler.js","../../../src/js/gestures/zoom-handler.js","../../../src/js/gestures/tap-handler.js","../../../src/js/gestures/gestures.js","../../../src/js/main-scroll.js","../../../src/js/keyboard.js","../../../src/js/util/css-animation.js","../../../src/js/util/spring-easer.js","../../../src/js/util/spring-animation.js","../../../src/js/util/animations.js","../../../src/js/scroll-wheel.js","../../../src/js/ui/ui-element.js","../../../src/js/ui/button-arrow.js","../../../src/js/ui/button-close.js","../../../src/js/ui/button-zoom.js","../../../src/js/ui/loading-indicator.js","../../../src/js/ui/counter-indicator.js","../../../src/js/ui/ui.js","../../../src/js/slide/get-thumb-bounds.js","../../../src/js/core/eventable.js","../../../src/js/slide/placeholder.js","../../../src/js/slide/content.js","../../../src/js/slide/loader.js","../../../src/js/core/base.js","../../../src/js/opener.js","../../../src/js/photoswipe.js"],"sourcesContent":["/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n/**\r\n * @template {keyof HTMLElementTagNameMap} T\r\n * @param {string} className\r\n * @param {T} tagName\r\n * @param {Node} [appendToEl]\r\n * @returns {HTMLElementTagNameMap[T]}\r\n */\r\nexport function createElement(className, tagName, appendToEl) {\r\n  const el = document.createElement(tagName);\r\n  if (className) {\r\n    el.className = className;\r\n  }\r\n  if (appendToEl) {\r\n    appendToEl.appendChild(el);\r\n  }\r\n  return el;\r\n}\r\n\r\n/**\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n * @returns {Point}\r\n */\r\nexport function equalizePoints(p1, p2) {\r\n  p1.x = p2.x;\r\n  p1.y = p2.y;\r\n  if (p2.id !== undefined) {\r\n    p1.id = p2.id;\r\n  }\r\n  return p1;\r\n}\r\n\r\n/**\r\n * @param {Point} p\r\n */\r\nexport function roundPoint(p) {\r\n  p.x = Math.round(p.x);\r\n  p.y = Math.round(p.y);\r\n}\r\n\r\n/**\r\n * Returns distance between two points.\r\n *\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n * @returns {number}\r\n */\r\nexport function getDistanceBetween(p1, p2) {\r\n  const x = Math.abs(p1.x - p2.x);\r\n  const y = Math.abs(p1.y - p2.y);\r\n  return Math.sqrt((x * x) + (y * y));\r\n}\r\n\r\n/**\r\n * Whether X and Y positions of points are equal\r\n *\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n * @returns {boolean}\r\n */\r\nexport function pointsEqual(p1, p2) {\r\n  return p1.x === p2.x && p1.y === p2.y;\r\n}\r\n\r\n/**\r\n * The float result between the min and max values.\r\n *\r\n * @param {number} val\r\n * @param {number} min\r\n * @param {number} max\r\n * @returns {number}\r\n */\r\nexport function clamp(val, min, max) {\r\n  return Math.min(Math.max(val, min), max);\r\n}\r\n\r\n/**\r\n * Get transform string\r\n *\r\n * @param {number} x\r\n * @param {number} [y]\r\n * @param {number} [scale]\r\n * @returns {string}\r\n */\r\nexport function toTransformString(x, y, scale) {\r\n  let propValue = `translate3d(${x}px,${y || 0}px,0)`;\r\n\r\n  if (scale !== undefined) {\r\n    propValue += ` scale3d(${scale},${scale},1)`;\r\n  }\r\n\r\n  return propValue;\r\n}\r\n\r\n/**\r\n * Apply transform:translate(x, y) scale(scale) to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {number} x\r\n * @param {number} [y]\r\n * @param {number} [scale]\r\n */\r\nexport function setTransform(el, x, y, scale) {\r\n  el.style.transform = toTransformString(x, y, scale);\r\n}\r\n\r\nconst defaultCSSEasing = 'cubic-bezier(.4,0,.22,1)';\r\n\r\n/**\r\n * Apply CSS transition to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string} [prop] CSS property to animate\r\n * @param {number} [duration] in ms\r\n * @param {string} [ease] CSS easing function\r\n */\r\nexport function setTransitionStyle(el, prop, duration, ease) {\r\n  // inOut: 'cubic-bezier(.4, 0, .22, 1)', // for \"toggle state\" transitions\r\n  // out: 'cubic-bezier(0, 0, .22, 1)', // for \"show\" transitions\r\n  // in: 'cubic-bezier(.4, 0, 1, 1)'// for \"hide\" transitions\r\n  el.style.transition = prop\r\n    ? `${prop} ${duration}ms ${ease || defaultCSSEasing}`\r\n    : 'none';\r\n}\r\n\r\n/**\r\n * Apply width and height CSS properties to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string | number} w\r\n * @param {string | number} h\r\n */\r\nexport function setWidthHeight(el, w, h) {\r\n  el.style.width = (typeof w === 'number') ? `${w}px` : w;\r\n  el.style.height = (typeof h === 'number') ? `${h}px` : h;\r\n}\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n */\r\nexport function removeTransitionStyle(el) {\r\n  setTransitionStyle(el);\r\n}\r\n\r\n/**\r\n * @param {HTMLImageElement} img\r\n * @returns {Promise<HTMLImageElement | void>}\r\n */\r\nexport function decodeImage(img) {\r\n  if ('decode' in img) {\r\n    return img.decode().catch(() => {});\r\n  }\r\n\r\n  if (img.complete) {\r\n    return Promise.resolve(img);\r\n  }\r\n\r\n  return new Promise((resolve, reject) => {\r\n    img.onload = () => resolve(img);\r\n    img.onerror = reject;\r\n  });\r\n}\r\n\r\n/** @typedef {LOAD_STATE[keyof LOAD_STATE]} LoadState */\r\n/** @type {{ IDLE: 'idle'; LOADING: 'loading'; LOADED: 'loaded'; ERROR: 'error' }} */\r\nexport const LOAD_STATE = {\r\n  IDLE: 'idle',\r\n  LOADING: 'loading',\r\n  LOADED: 'loaded',\r\n  ERROR: 'error',\r\n};\r\n\r\n\r\n/**\r\n * Check if click or keydown event was dispatched\r\n * with a special key or via mouse wheel.\r\n *\r\n * @param {MouseEvent | KeyboardEvent} e\r\n * @returns {boolean}\r\n */\r\nexport function specialKeyUsed(e) {\r\n  return ('button' in e && e.button === 1) || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey;\r\n}\r\n\r\n/**\r\n * Parse `gallery` or `children` options.\r\n *\r\n * @param {import('../photoswipe.js').ElementProvider} [option]\r\n * @param {string} [legacySelector]\r\n * @param {HTMLElement | Document} [parent]\r\n * @returns HTMLElement[]\r\n */\r\nexport function getElementsFromOption(option, legacySelector, parent = document) {\r\n  /** @type {HTMLElement[]} */\r\n  let elements = [];\r\n\r\n  if (option instanceof Element) {\r\n    elements = [option];\r\n  } else if (option instanceof NodeList || Array.isArray(option)) {\r\n    elements = Array.from(option);\r\n  } else {\r\n    const selector = typeof option === 'string' ? option : legacySelector;\r\n    if (selector) {\r\n      elements = Array.from(parent.querySelectorAll(selector));\r\n    }\r\n  }\r\n\r\n  return elements;\r\n}\r\n\r\n/**\r\n * Check if variable is PhotoSwipe class\r\n *\r\n * @param {any} fn\r\n * @returns {boolean}\r\n */\r\nexport function isPswpClass(fn) {\r\n  return typeof fn === 'function'\r\n    && fn.prototype\r\n    && fn.prototype.goTo;\r\n}\r\n\r\n/**\r\n * Check if browser is Safari\r\n *\r\n * @returns {boolean}\r\n */\r\nexport function isSafari() {\r\n  return !!(navigator.vendor && navigator.vendor.match(/apple/i));\r\n}\r\n\r\n","// Detect passive event listener support\r\nlet supportsPassive = false;\r\n/* eslint-disable */\r\ntry {\r\n  /* @ts-ignore */\r\n  window.addEventListener('test', null, Object.defineProperty({}, 'passive', {\r\n    get: () => {\r\n      supportsPassive = true;\r\n    }\r\n  }));\r\n} catch (e) {}\r\n/* eslint-enable */\r\n\r\n/**\r\n * @typedef {Object} PoolItem\r\n * @prop {HTMLElement | Window | Document | undefined | null} target\r\n * @prop {string} type\r\n * @prop {EventListenerOrEventListenerObject} listener\r\n * @prop {boolean} [passive]\r\n */\r\n\r\nclass DOMEvents {\r\n  constructor() {\r\n    /**\r\n     * @type {PoolItem[]}\r\n     * @private\r\n     */\r\n    this._pool = [];\r\n  }\r\n\r\n  /**\r\n   * Adds event listeners\r\n   *\r\n   * @param {PoolItem['target']} target\r\n   * @param {PoolItem['type']} type Can be multiple, separated by space.\r\n   * @param {PoolItem['listener']} listener\r\n   * @param {PoolItem['passive']} [passive]\r\n   */\r\n  add(target, type, listener, passive) {\r\n    this._toggleListener(target, type, listener, passive);\r\n  }\r\n\r\n  /**\r\n   * Removes event listeners\r\n   *\r\n   * @param {PoolItem['target']} target\r\n   * @param {PoolItem['type']} type\r\n   * @param {PoolItem['listener']} listener\r\n   * @param {PoolItem['passive']} [passive]\r\n   */\r\n  remove(target, type, listener, passive) {\r\n    this._toggleListener(target, type, listener, passive, true);\r\n  }\r\n\r\n  /**\r\n   * Removes all bound events\r\n   */\r\n  removeAll() {\r\n    this._pool.forEach((poolItem) => {\r\n      this._toggleListener(\r\n        poolItem.target,\r\n        poolItem.type,\r\n        poolItem.listener,\r\n        poolItem.passive,\r\n        true,\r\n        true\r\n      );\r\n    });\r\n    this._pool = [];\r\n  }\r\n\r\n  /**\r\n   * Adds or removes event\r\n   *\r\n   * @private\r\n   * @param {PoolItem['target']} target\r\n   * @param {PoolItem['type']} type\r\n   * @param {PoolItem['listener']} listener\r\n   * @param {PoolItem['passive']} [passive]\r\n   * @param {boolean} [unbind] Whether the event should be added or removed\r\n   * @param {boolean} [skipPool] Whether events pool should be skipped\r\n   */\r\n  _toggleListener(target, type, listener, passive, unbind, skipPool) {\r\n    if (!target) {\r\n      return;\r\n    }\r\n\r\n    const methodName = unbind ? 'removeEventListener' : 'addEventListener';\r\n    const types = type.split(' ');\r\n    types.forEach((eType) => {\r\n      if (eType) {\r\n        // Events pool is used to easily unbind all events when PhotoSwipe is closed,\r\n        // so developer doesn't need to do this manually\r\n        if (!skipPool) {\r\n          if (unbind) {\r\n            // Remove from the events pool\r\n            this._pool = this._pool.filter((poolItem) => {\r\n              return poolItem.type !== eType\r\n                || poolItem.listener !== listener\r\n                || poolItem.target !== target;\r\n            });\r\n          } else {\r\n            // Add to the events pool\r\n            this._pool.push({\r\n              target,\r\n              type: eType,\r\n              listener,\r\n              passive\r\n            });\r\n          }\r\n        }\r\n\r\n        // most PhotoSwipe events call preventDefault,\r\n        // and we do not need browser to scroll the page\r\n        const eventOptions = supportsPassive ? { passive: (passive || false) } : false;\r\n\r\n        target[methodName](\r\n          eType,\r\n          listener,\r\n          eventOptions\r\n        );\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nexport default DOMEvents;\r\n","/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n\r\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {PhotoSwipeBase} pswp\r\n * @returns {Point}\r\n */\r\nexport function getViewportSize(options, pswp) {\r\n  if (options.getViewportSizeFn) {\r\n    const newViewportSize = options.getViewportSizeFn(options, pswp);\r\n    if (newViewportSize) {\r\n      return newViewportSize;\r\n    }\r\n  }\r\n\r\n  return {\r\n    x: document.documentElement.clientWidth,\r\n\r\n    // TODO: height on mobile is very incosistent due to toolbar\r\n    // find a way to improve this\r\n    //\r\n    // document.documentElement.clientHeight - doesn't seem to work well\r\n    y: window.innerHeight\r\n  };\r\n}\r\n\r\n/**\r\n * Parses padding option.\r\n * Supported formats:\r\n *\r\n * // Object\r\n * padding: {\r\n *  top: 0,\r\n *  bottom: 0,\r\n *  left: 0,\r\n *  right: 0\r\n * }\r\n *\r\n * // A function that returns the object\r\n * paddingFn: (viewportSize, itemData, index) => {\r\n *  return {\r\n *    top: 0,\r\n *    bottom: 0,\r\n *    left: 0,\r\n *    right: 0\r\n *  };\r\n * }\r\n *\r\n * // Legacy variant\r\n * paddingLeft: 0,\r\n * paddingRight: 0,\r\n * paddingTop: 0,\r\n * paddingBottom: 0,\r\n *\r\n * @param {'left' | 'top' | 'bottom' | 'right'} prop\r\n * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n * @param {Point} viewportSize PhotoSwipe viewport size, for example: { x:800, y:600 }\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {number} index Slide index\r\n * @returns {number}\r\n */\r\nexport function parsePaddingOption(prop, options, viewportSize, itemData, index) {\r\n  let paddingValue = 0;\r\n\r\n  if (options.paddingFn) {\r\n    paddingValue = options.paddingFn(viewportSize, itemData, index)[prop];\r\n  } else if (options.padding) {\r\n    paddingValue = options.padding[prop];\r\n  } else {\r\n    const legacyPropName = 'padding' + prop[0].toUpperCase() + prop.slice(1);\r\n    // @ts-expect-error\r\n    if (options[legacyPropName]) {\r\n      // @ts-expect-error\r\n      paddingValue = options[legacyPropName];\r\n    }\r\n  }\r\n\r\n  return Number(paddingValue) || 0;\r\n}\r\n\r\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {Point} viewportSize\r\n * @param {SlideData} itemData\r\n * @param {number} index\r\n * @returns {Point}\r\n */\r\nexport function getPanAreaSize(options, viewportSize, itemData, index) {\r\n  return {\r\n    x: viewportSize.x\r\n      - parsePaddingOption('left', options, viewportSize, itemData, index)\r\n      - parsePaddingOption('right', options, viewportSize, itemData, index),\r\n    y: viewportSize.y\r\n      - parsePaddingOption('top', options, viewportSize, itemData, index)\r\n      - parsePaddingOption('bottom', options, viewportSize, itemData, index)\r\n  };\r\n}\r\n","import { clamp } from '../util/util.js';\r\nimport { parsePaddingOption } from '../util/viewport-size.js';\r\n\r\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {Record<Axis, number>} Point */\r\n/** @typedef {'x' | 'y'} Axis */\r\n\r\n/**\r\n * Calculates minimum, maximum and initial (center) bounds of a slide\r\n */\r\nclass PanBounds {\r\n  /**\r\n   * @param {Slide} slide\r\n   */\r\n  constructor(slide) {\r\n    this.slide = slide;\r\n    this.currZoomLevel = 1;\r\n    this.center = /** @type {Point} */ { x: 0, y: 0 };\r\n    this.max = /** @type {Point} */ { x: 0, y: 0 };\r\n    this.min = /** @type {Point} */ { x: 0, y: 0 };\r\n  }\r\n\r\n  /**\r\n   * _getItemBounds\r\n   *\r\n   * @param {number} currZoomLevel\r\n   */\r\n  update(currZoomLevel) {\r\n    this.currZoomLevel = currZoomLevel;\r\n\r\n    if (!this.slide.width) {\r\n      this.reset();\r\n    } else {\r\n      this._updateAxis('x');\r\n      this._updateAxis('y');\r\n      this.slide.pswp.dispatch('calcBounds', { slide: this.slide });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * _calculateItemBoundsForAxis\r\n   *\r\n   * @param {Axis} axis\r\n   */\r\n  _updateAxis(axis) {\r\n    const { pswp } = this.slide;\r\n    const elSize = this.slide[axis === 'x' ? 'width' : 'height'] * this.currZoomLevel;\r\n    const paddingProp = axis === 'x' ? 'left' : 'top';\r\n    const padding = parsePaddingOption(\r\n      paddingProp,\r\n      pswp.options,\r\n      pswp.viewportSize,\r\n      this.slide.data,\r\n      this.slide.index\r\n    );\r\n\r\n    const panAreaSize = this.slide.panAreaSize[axis];\r\n\r\n    // Default position of element.\r\n    // By default, it is center of viewport:\r\n    this.center[axis] = Math.round((panAreaSize - elSize) / 2) + padding;\r\n\r\n    // maximum pan position\r\n    this.max[axis] = (elSize > panAreaSize)\r\n      ? Math.round(panAreaSize - elSize) + padding\r\n      : this.center[axis];\r\n\r\n    // minimum pan position\r\n    this.min[axis] = (elSize > panAreaSize)\r\n      ? padding\r\n      : this.center[axis];\r\n  }\r\n\r\n  // _getZeroBounds\r\n  reset() {\r\n    this.center.x = 0;\r\n    this.center.y = 0;\r\n    this.max.x = 0;\r\n    this.max.y = 0;\r\n    this.min.x = 0;\r\n    this.min.y = 0;\r\n  }\r\n\r\n  /**\r\n   * Correct pan position if it's beyond the bounds\r\n   *\r\n   * @param {Axis} axis x or y\r\n   * @param {number} panOffset\r\n   * @returns {number}\r\n   */\r\n  correctPan(axis, panOffset) { // checkPanBounds\r\n    return clamp(panOffset, this.max[axis], this.min[axis]);\r\n  }\r\n}\r\n\r\nexport default PanBounds;\r\n","const MAX_IMAGE_WIDTH = 4000;\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n\r\n/** @typedef {'fit' | 'fill' | number | ((zoomLevelObject: ZoomLevel) => number)} ZoomLevelOption */\r\n\r\n/**\r\n * Calculates zoom levels for specific slide.\r\n * Depends on viewport size and image size.\r\n */\r\nclass ZoomLevel {\r\n  /**\r\n   * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n   * @param {SlideData} itemData Slide data\r\n   * @param {number} index Slide index\r\n   * @param {PhotoSwipe} [pswp] PhotoSwipe instance, can be undefined if not initialized yet\r\n   */\r\n  constructor(options, itemData, index, pswp) {\r\n    this.pswp = pswp;\r\n    this.options = options;\r\n    this.itemData = itemData;\r\n    this.index = index;\r\n    /** @type { Point | null } */\r\n    this.panAreaSize = null;\r\n    /** @type { Point | null } */\r\n    this.elementSize = null;\r\n    this.fit = 1;\r\n    this.fill = 1;\r\n    this.vFill = 1;\r\n    this.initial = 1;\r\n    this.secondary = 1;\r\n    this.max = 1;\r\n    this.min = 1;\r\n  }\r\n\r\n  /**\r\n   * Calculate initial, secondary and maximum zoom level for the specified slide.\r\n   *\r\n   * It should be called when either image or viewport size changes.\r\n   *\r\n   * @param {number} maxWidth\r\n   * @param {number} maxHeight\r\n   * @param {Point} panAreaSize\r\n   */\r\n  update(maxWidth, maxHeight, panAreaSize) {\r\n    /** @type {Point} */\r\n    const elementSize = { x: maxWidth, y: maxHeight };\r\n    this.elementSize = elementSize;\r\n    this.panAreaSize = panAreaSize;\r\n\r\n    const hRatio = panAreaSize.x / elementSize.x;\r\n    const vRatio = panAreaSize.y / elementSize.y;\r\n\r\n    this.fit = Math.min(1, hRatio < vRatio ? hRatio : vRatio);\r\n    this.fill = Math.min(1, hRatio > vRatio ? hRatio : vRatio);\r\n\r\n    // zoom.vFill defines zoom level of the image\r\n    // when it has 100% of viewport vertical space (height)\r\n    this.vFill = Math.min(1, vRatio);\r\n\r\n    this.initial = this._getInitial();\r\n    this.secondary = this._getSecondary();\r\n    this.max = Math.max(\r\n      this.initial,\r\n      this.secondary,\r\n      this._getMax()\r\n    );\r\n\r\n    this.min = Math.min(\r\n      this.fit,\r\n      this.initial,\r\n      this.secondary\r\n    );\r\n\r\n    if (this.pswp) {\r\n      this.pswp.dispatch('zoomLevelsUpdate', { zoomLevels: this, slideData: this.itemData });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Parses user-defined zoom option.\r\n   *\r\n   * @private\r\n   * @param {'initial' | 'secondary' | 'max'} optionPrefix Zoom level option prefix (initial, secondary, max)\r\n   * @returns { number | undefined }\r\n   */\r\n  _parseZoomLevelOption(optionPrefix) {\r\n    const optionName = /** @type {'initialZoomLevel' | 'secondaryZoomLevel' | 'maxZoomLevel'} */ (\r\n      optionPrefix + 'ZoomLevel'\r\n    );\r\n    const optionValue = this.options[optionName];\r\n\r\n    if (!optionValue) {\r\n      return;\r\n    }\r\n\r\n    if (typeof optionValue === 'function') {\r\n      return optionValue(this);\r\n    }\r\n\r\n    if (optionValue === 'fill') {\r\n      return this.fill;\r\n    }\r\n\r\n    if (optionValue === 'fit') {\r\n      return this.fit;\r\n    }\r\n\r\n    return Number(optionValue);\r\n  }\r\n\r\n  /**\r\n   * Get zoom level to which image will be zoomed after double-tap gesture,\r\n   * or when user clicks on zoom icon,\r\n   * or mouse-click on image itself.\r\n   * If you return 1 image will be zoomed to its original size.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getSecondary() {\r\n    let currZoomLevel = this._parseZoomLevelOption('secondary');\r\n\r\n    if (currZoomLevel) {\r\n      return currZoomLevel;\r\n    }\r\n\r\n    // 3x of \"fit\" state, but not larger than original\r\n    currZoomLevel = Math.min(1, this.fit * 3);\r\n\r\n    if (this.elementSize && currZoomLevel * this.elementSize.x > MAX_IMAGE_WIDTH) {\r\n      currZoomLevel = MAX_IMAGE_WIDTH / this.elementSize.x;\r\n    }\r\n\r\n    return currZoomLevel;\r\n  }\r\n\r\n  /**\r\n   * Get initial image zoom level.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getInitial() {\r\n    return this._parseZoomLevelOption('initial') || this.fit;\r\n  }\r\n\r\n  /**\r\n   * Maximum zoom level when user zooms\r\n   * via zoom/pinch gesture,\r\n   * via cmd/ctrl-wheel or via trackpad.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getMax() {\r\n    // max zoom level is x4 from \"fit state\",\r\n    // used for zoom gesture and ctrl/trackpad zoom\r\n    return this._parseZoomLevelOption('max') || Math.max(1, this.fit * 4);\r\n  }\r\n}\r\n\r\nexport default ZoomLevel;\r\n","/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n/**\r\n * @typedef {_SlideData & Record<string, any>} SlideData\r\n * @typedef {Object} _SlideData\r\n * @prop {HTMLElement} [element] thumbnail element\r\n * @prop {string} [src] image URL\r\n * @prop {string} [srcset] image srcset\r\n * @prop {number} [w] image width (deprecated)\r\n * @prop {number} [h] image height (deprecated)\r\n * @prop {number} [width] image width\r\n * @prop {number} [height] image height\r\n * @prop {string} [msrc] placeholder image URL that's displayed before large image is loaded\r\n * @prop {string} [alt] image alt text\r\n * @prop {boolean} [thumbCropped] whether thumbnail is cropped client-side or not\r\n * @prop {string} [html] html content of a slide\r\n * @prop {'image' | 'html' | string} [type] slide type\r\n */\r\n\r\nimport {\r\n  createElement,\r\n  setTransform,\r\n  equalizePoints,\r\n  roundPoint,\r\n  toTransformString,\r\n  clamp,\r\n} from '../util/util.js';\r\n\r\nimport PanBounds from './pan-bounds.js';\r\nimport ZoomLevel from './zoom-level.js';\r\nimport { getPanAreaSize } from '../util/viewport-size.js';\r\n\r\n/**\r\n * Renders and allows to control a single slide\r\n */\r\nclass Slide {\r\n  /**\r\n   * @param {SlideData} data\r\n   * @param {number} index\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(data, index, pswp) {\r\n    this.data = data;\r\n    this.index = index;\r\n    this.pswp = pswp;\r\n    this.isActive = (index === pswp.currIndex);\r\n    this.currentResolution = 0;\r\n    /** @type {Point} */\r\n    this.panAreaSize = { x: 0, y: 0 };\r\n    /** @type {Point} */\r\n    this.pan = { x: 0, y: 0 };\r\n\r\n    this.isFirstSlide = (this.isActive && !pswp.opener.isOpen);\r\n\r\n    this.zoomLevels = new ZoomLevel(pswp.options, data, index, pswp);\r\n\r\n    this.pswp.dispatch('gettingData', {\r\n      slide: this,\r\n      data: this.data,\r\n      index\r\n    });\r\n\r\n    this.content = this.pswp.contentLoader.getContentBySlide(this);\r\n    this.container = createElement('pswp__zoom-wrap', 'div');\r\n    /** @type {HTMLElement | null} */\r\n    this.holderElement = null;\r\n\r\n    this.currZoomLevel = 1;\r\n    /** @type {number} */\r\n    this.width = this.content.width;\r\n    /** @type {number} */\r\n    this.height = this.content.height;\r\n    this.heavyAppended = false;\r\n    this.bounds = new PanBounds(this);\r\n\r\n    this.prevDisplayedWidth = -1;\r\n    this.prevDisplayedHeight = -1;\r\n\r\n    this.pswp.dispatch('slideInit', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * If this slide is active/current/visible\r\n   *\r\n   * @param {boolean} isActive\r\n   */\r\n  setIsActive(isActive) {\r\n    if (isActive && !this.isActive) {\r\n      // slide just became active\r\n      this.activate();\r\n    } else if (!isActive && this.isActive) {\r\n      // slide just became non-active\r\n      this.deactivate();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Appends slide content to DOM\r\n   *\r\n   * @param {HTMLElement} holderElement\r\n   */\r\n  append(holderElement) {\r\n    this.holderElement = holderElement;\r\n\r\n    this.container.style.transformOrigin = '0 0';\r\n\r\n    // Slide appended to DOM\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    this.calculateSize();\r\n\r\n    this.load();\r\n    this.updateContentSize();\r\n    this.appendHeavy();\r\n\r\n    this.holderElement.appendChild(this.container);\r\n\r\n    this.zoomAndPanToInitial();\r\n\r\n    this.pswp.dispatch('firstZoomPan', { slide: this });\r\n\r\n    this.applyCurrentZoomPan();\r\n\r\n    this.pswp.dispatch('afterSetContent', { slide: this });\r\n\r\n    if (this.isActive) {\r\n      this.activate();\r\n    }\r\n  }\r\n\r\n  load() {\r\n    this.content.load(false);\r\n    this.pswp.dispatch('slideLoad', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * Append \"heavy\" DOM elements\r\n   *\r\n   * This may depend on a type of slide,\r\n   * but generally these are large images.\r\n   */\r\n  appendHeavy() {\r\n    const { pswp } = this;\r\n    const appendHeavyNearby = true; // todo\r\n\r\n    // Avoid appending heavy elements during animations\r\n    if (this.heavyAppended\r\n        || !pswp.opener.isOpen\r\n        || pswp.mainScroll.isShifted()\r\n        || (!this.isActive && !appendHeavyNearby)) {\r\n      return;\r\n    }\r\n\r\n    if (this.pswp.dispatch('appendHeavy', { slide: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    this.heavyAppended = true;\r\n\r\n    this.content.append();\r\n\r\n    this.pswp.dispatch('appendHeavyContent', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * Triggered when this slide is active (selected).\r\n   *\r\n   * If it's part of opening/closing transition -\r\n   * activate() will trigger after the transition is ended.\r\n   */\r\n  activate() {\r\n    this.isActive = true;\r\n    this.appendHeavy();\r\n    this.content.activate();\r\n    this.pswp.dispatch('slideActivate', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * Triggered when this slide becomes inactive.\r\n   *\r\n   * Slide can become inactive only after it was active.\r\n   */\r\n  deactivate() {\r\n    this.isActive = false;\r\n    this.content.deactivate();\r\n\r\n    if (this.currZoomLevel !== this.zoomLevels.initial) {\r\n      // allow filtering\r\n      this.calculateSize();\r\n    }\r\n\r\n    // reset zoom level\r\n    this.currentResolution = 0;\r\n    this.zoomAndPanToInitial();\r\n    this.applyCurrentZoomPan();\r\n    this.updateContentSize();\r\n\r\n    this.pswp.dispatch('slideDeactivate', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * The slide should destroy itself, it will never be used again.\r\n   * (unbind all events and destroy internal components)\r\n   */\r\n  destroy() {\r\n    this.content.hasSlide = false;\r\n    this.content.remove();\r\n    this.container.remove();\r\n    this.pswp.dispatch('slideDestroy', { slide: this });\r\n  }\r\n\r\n  resize() {\r\n    if (this.currZoomLevel === this.zoomLevels.initial || !this.isActive) {\r\n      // Keep initial zoom level if it was before the resize,\r\n      // as well as when this slide is not active\r\n\r\n      // Reset position and scale to original state\r\n      this.calculateSize();\r\n      this.currentResolution = 0;\r\n      this.zoomAndPanToInitial();\r\n      this.applyCurrentZoomPan();\r\n      this.updateContentSize();\r\n    } else {\r\n      // readjust pan position if it's beyond the bounds\r\n      this.calculateSize();\r\n      this.bounds.update(this.currZoomLevel);\r\n      this.panTo(this.pan.x, this.pan.y);\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * Apply size to current slide content,\r\n   * based on the current resolution and scale.\r\n   *\r\n   * @param {boolean} [force] if size should be updated even if dimensions weren't changed\r\n   */\r\n  updateContentSize(force) {\r\n    // Use initial zoom level\r\n    // if resolution is not defined (user didn't zoom yet)\r\n    const scaleMultiplier = this.currentResolution || this.zoomLevels.initial;\r\n\r\n    if (!scaleMultiplier) {\r\n      return;\r\n    }\r\n\r\n    const width = Math.round(this.width * scaleMultiplier) || this.pswp.viewportSize.x;\r\n    const height = Math.round(this.height * scaleMultiplier) || this.pswp.viewportSize.y;\r\n\r\n    if (!this.sizeChanged(width, height) && !force) {\r\n      return;\r\n    }\r\n    this.content.setDisplayedSize(width, height);\r\n  }\r\n\r\n  /**\r\n   * @param {number} width\r\n   * @param {number} height\r\n   */\r\n  sizeChanged(width, height) {\r\n    if (width !== this.prevDisplayedWidth\r\n        || height !== this.prevDisplayedHeight) {\r\n      this.prevDisplayedWidth = width;\r\n      this.prevDisplayedHeight = height;\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /** @returns {HTMLImageElement | HTMLDivElement | null | undefined} */\r\n  getPlaceholderElement() {\r\n    return this.content.placeholder?.element;\r\n  }\r\n\r\n  /**\r\n   * Zoom current slide image to...\r\n   *\r\n   * @param {number} destZoomLevel Destination zoom level.\r\n   * @param {Point} [centerPoint]\r\n   * Transform origin center point, or false if viewport center should be used.\r\n   * @param {number | false} [transitionDuration] Transition duration, may be set to 0.\r\n   * @param {boolean} [ignoreBounds] Minimum and maximum zoom levels will be ignored.\r\n   */\r\n  zoomTo(destZoomLevel, centerPoint, transitionDuration, ignoreBounds) {\r\n    const { pswp } = this;\r\n    if (!this.isZoomable()\r\n        || pswp.mainScroll.isShifted()) {\r\n      return;\r\n    }\r\n\r\n    pswp.dispatch('beforeZoomTo', {\r\n      destZoomLevel, centerPoint, transitionDuration\r\n    });\r\n\r\n    // stop all pan and zoom transitions\r\n    pswp.animations.stopAllPan();\r\n\r\n    // if (!centerPoint) {\r\n    //   centerPoint = pswp.getViewportCenterPoint();\r\n    // }\r\n\r\n    const prevZoomLevel = this.currZoomLevel;\r\n\r\n    if (!ignoreBounds) {\r\n      destZoomLevel = clamp(destZoomLevel, this.zoomLevels.min, this.zoomLevels.max);\r\n    }\r\n\r\n    // if (transitionDuration === undefined) {\r\n    //   transitionDuration = this.pswp.options.zoomAnimationDuration;\r\n    // }\r\n\r\n    this.setZoomLevel(destZoomLevel);\r\n    this.pan.x = this.calculateZoomToPanOffset('x', centerPoint, prevZoomLevel);\r\n    this.pan.y = this.calculateZoomToPanOffset('y', centerPoint, prevZoomLevel);\r\n    roundPoint(this.pan);\r\n\r\n    const finishTransition = () => {\r\n      this._setResolution(destZoomLevel);\r\n      this.applyCurrentZoomPan();\r\n    };\r\n\r\n    if (!transitionDuration) {\r\n      finishTransition();\r\n    } else {\r\n      pswp.animations.startTransition({\r\n        isPan: true,\r\n        name: 'zoomTo',\r\n        target: this.container,\r\n        transform: this.getCurrentTransform(),\r\n        onComplete: finishTransition,\r\n        duration: transitionDuration,\r\n        easing: pswp.options.easing\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Point} [centerPoint]\r\n   */\r\n  toggleZoom(centerPoint) {\r\n    this.zoomTo(\r\n      this.currZoomLevel === this.zoomLevels.initial\r\n        ? this.zoomLevels.secondary : this.zoomLevels.initial,\r\n      centerPoint,\r\n      this.pswp.options.zoomAnimationDuration\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Updates zoom level property and recalculates new pan bounds,\r\n   * unlike zoomTo it does not apply transform (use applyCurrentZoomPan)\r\n   *\r\n   * @param {number} currZoomLevel\r\n   */\r\n  setZoomLevel(currZoomLevel) {\r\n    this.currZoomLevel = currZoomLevel;\r\n    this.bounds.update(this.currZoomLevel);\r\n  }\r\n\r\n  /**\r\n   * Get pan position after zoom at a given `point`.\r\n   *\r\n   * Always call setZoomLevel(newZoomLevel) beforehand to recalculate\r\n   * pan bounds according to the new zoom level.\r\n   *\r\n   * @param {'x' | 'y'} axis\r\n   * @param {Point} [point]\r\n   * point based on which zoom is performed, usually refers to the current mouse position,\r\n   * if false - viewport center will be used.\r\n   * @param {number} [prevZoomLevel] Zoom level before new zoom was applied.\r\n   * @returns {number}\r\n   */\r\n  calculateZoomToPanOffset(axis, point, prevZoomLevel) {\r\n    const totalPanDistance = this.bounds.max[axis] - this.bounds.min[axis];\r\n    if (totalPanDistance === 0) {\r\n      return this.bounds.center[axis];\r\n    }\r\n\r\n    if (!point) {\r\n      point = this.pswp.getViewportCenterPoint();\r\n    }\r\n\r\n    if (!prevZoomLevel) {\r\n      prevZoomLevel = this.zoomLevels.initial;\r\n    }\r\n\r\n    const zoomFactor = this.currZoomLevel / prevZoomLevel;\r\n    return this.bounds.correctPan(\r\n      axis,\r\n      (this.pan[axis] - point[axis]) * zoomFactor + point[axis]\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Apply pan and keep it within bounds.\r\n   *\r\n   * @param {number} panX\r\n   * @param {number} panY\r\n   */\r\n  panTo(panX, panY) {\r\n    this.pan.x = this.bounds.correctPan('x', panX);\r\n    this.pan.y = this.bounds.correctPan('y', panY);\r\n    this.applyCurrentZoomPan();\r\n  }\r\n\r\n  /**\r\n   * If the slide in the current state can be panned by the user\r\n   * @returns {boolean}\r\n   */\r\n  isPannable() {\r\n    return Boolean(this.width) && (this.currZoomLevel > this.zoomLevels.fit);\r\n  }\r\n\r\n  /**\r\n   * If the slide can be zoomed\r\n   * @returns {boolean}\r\n   */\r\n  isZoomable() {\r\n    return Boolean(this.width) && this.content.isZoomable();\r\n  }\r\n\r\n  /**\r\n   * Apply transform and scale based on\r\n   * the current pan position (this.pan) and zoom level (this.currZoomLevel)\r\n   */\r\n  applyCurrentZoomPan() {\r\n    this._applyZoomTransform(this.pan.x, this.pan.y, this.currZoomLevel);\r\n    if (this === this.pswp.currSlide) {\r\n      this.pswp.dispatch('zoomPanUpdate', { slide: this });\r\n    }\r\n  }\r\n\r\n  zoomAndPanToInitial() {\r\n    this.currZoomLevel = this.zoomLevels.initial;\r\n\r\n    // pan according to the zoom level\r\n    this.bounds.update(this.currZoomLevel);\r\n    equalizePoints(this.pan, this.bounds.center);\r\n    this.pswp.dispatch('initialZoomPan', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * Set translate and scale based on current resolution\r\n   *\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @param {number} zoom\r\n   * @private\r\n   */\r\n  _applyZoomTransform(x, y, zoom) {\r\n    zoom /= this.currentResolution || this.zoomLevels.initial;\r\n    setTransform(this.container, x, y, zoom);\r\n  }\r\n\r\n  calculateSize() {\r\n    const { pswp } = this;\r\n\r\n    equalizePoints(\r\n      this.panAreaSize,\r\n      getPanAreaSize(pswp.options, pswp.viewportSize, this.data, this.index)\r\n    );\r\n\r\n    this.zoomLevels.update(this.width, this.height, this.panAreaSize);\r\n\r\n    pswp.dispatch('calcSlideSize', {\r\n      slide: this\r\n    });\r\n  }\r\n\r\n  /** @returns {string} */\r\n  getCurrentTransform() {\r\n    const scale = this.currZoomLevel / (this.currentResolution || this.zoomLevels.initial);\r\n    return toTransformString(this.pan.x, this.pan.y, scale);\r\n  }\r\n\r\n  /**\r\n   * Set resolution and re-render the image.\r\n   *\r\n   * For example, if the real image size is 2000x1500,\r\n   * and resolution is 0.5 - it will be rendered as 1000x750.\r\n   *\r\n   * Image with zoom level 2 and resolution 0.5 is\r\n   * the same as image with zoom level 1 and resolution 1.\r\n   *\r\n   * Used to optimize animations and make\r\n   * sure that browser renders image in the highest quality.\r\n   * Also used by responsive images to load the correct one.\r\n   *\r\n   * @param {number} newResolution\r\n   */\r\n  _setResolution(newResolution) {\r\n    if (newResolution === this.currentResolution) {\r\n      return;\r\n    }\r\n\r\n    this.currentResolution = newResolution;\r\n    this.updateContentSize();\r\n\r\n    this.pswp.dispatch('resolutionChanged');\r\n  }\r\n}\r\n\r\nexport default Slide;\r\n","import {\r\n  equalizePoints, roundPoint, clamp\r\n} from '../util/util.js';\r\n\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n/** @typedef {import('./gestures.js').default} Gestures */\r\n\r\nconst PAN_END_FRICTION = 0.35;\r\nconst VERTICAL_DRAG_FRICTION = 0.6;\r\n\r\n// 1 corresponds to the third of viewport height\r\nconst MIN_RATIO_TO_CLOSE = 0.4;\r\n\r\n// Minimum speed required to navigate\r\n// to next or previous slide\r\nconst MIN_NEXT_SLIDE_SPEED = 0.5;\r\n\r\n/**\r\n * @param {number} initialVelocity\r\n * @param {number} decelerationRate\r\n * @returns {number}\r\n */\r\nfunction project(initialVelocity, decelerationRate) {\r\n  return initialVelocity * decelerationRate / (1 - decelerationRate);\r\n}\r\n\r\n/**\r\n * Handles single pointer dragging\r\n */\r\nclass DragHandler {\r\n  /**\r\n   * @param {Gestures} gestures\r\n   */\r\n  constructor(gestures) {\r\n    this.gestures = gestures;\r\n    this.pswp = gestures.pswp;\r\n    /** @type {Point} */\r\n    this.startPan = { x: 0, y: 0 };\r\n  }\r\n\r\n  start() {\r\n    if (this.pswp.currSlide) {\r\n      equalizePoints(this.startPan, this.pswp.currSlide.pan);\r\n    }\r\n    this.pswp.animations.stopAll();\r\n  }\r\n\r\n  change() {\r\n    const { p1, prevP1, dragAxis } = this.gestures;\r\n    const { currSlide } = this.pswp;\r\n\r\n    if (dragAxis === 'y'\r\n        && this.pswp.options.closeOnVerticalDrag\r\n        && (currSlide && currSlide.currZoomLevel <= currSlide.zoomLevels.fit)\r\n        && !this.gestures.isMultitouch) {\r\n      // Handle vertical drag to close\r\n      const panY = currSlide.pan.y + (p1.y - prevP1.y);\r\n      if (!this.pswp.dispatch('verticalDrag', { panY }).defaultPrevented) {\r\n        this._setPanWithFriction('y', panY, VERTICAL_DRAG_FRICTION);\r\n        const bgOpacity = 1 - Math.abs(this._getVerticalDragRatio(currSlide.pan.y));\r\n        this.pswp.applyBgOpacity(bgOpacity);\r\n        currSlide.applyCurrentZoomPan();\r\n      }\r\n    } else {\r\n      const mainScrollChanged = this._panOrMoveMainScroll('x');\r\n      if (!mainScrollChanged) {\r\n        this._panOrMoveMainScroll('y');\r\n\r\n        if (currSlide) {\r\n          roundPoint(currSlide.pan);\r\n          currSlide.applyCurrentZoomPan();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  end() {\r\n    const { velocity } = this.gestures;\r\n    const { mainScroll, currSlide } = this.pswp;\r\n    let indexDiff = 0;\r\n\r\n    this.pswp.animations.stopAll();\r\n\r\n    // Handle main scroll if it's shifted\r\n    if (mainScroll.isShifted()) {\r\n      // Position of the main scroll relative to the viewport\r\n      const mainScrollShiftDiff = mainScroll.x - mainScroll.getCurrSlideX();\r\n\r\n      // Ratio between 0 and 1:\r\n      // 0 - slide is not visible at all,\r\n      // 0.5 - half of the slide is visible\r\n      // 1 - slide is fully visible\r\n      const currentSlideVisibilityRatio = (mainScrollShiftDiff / this.pswp.viewportSize.x);\r\n\r\n      // Go next slide.\r\n      //\r\n      // - if velocity and its direction is matched,\r\n      //   and we see at least tiny part of the next slide\r\n      //\r\n      // - or if we see less than 50% of the current slide\r\n      //   and velocity is close to 0\r\n      //\r\n      if ((velocity.x < -MIN_NEXT_SLIDE_SPEED && currentSlideVisibilityRatio < 0)\r\n          || (velocity.x < 0.1 && currentSlideVisibilityRatio < -0.5)) {\r\n        // Go to next slide\r\n        indexDiff = 1;\r\n        velocity.x = Math.min(velocity.x, 0);\r\n      } else if ((velocity.x > MIN_NEXT_SLIDE_SPEED && currentSlideVisibilityRatio > 0)\r\n          || (velocity.x > -0.1 && currentSlideVisibilityRatio > 0.5)) {\r\n        // Go to prev slide\r\n        indexDiff = -1;\r\n        velocity.x = Math.max(velocity.x, 0);\r\n      }\r\n\r\n      mainScroll.moveIndexBy(indexDiff, true, velocity.x);\r\n    }\r\n\r\n    // Restore zoom level\r\n    if ((currSlide && currSlide.currZoomLevel > currSlide.zoomLevels.max)\r\n        || this.gestures.isMultitouch) {\r\n      this.gestures.zoomLevels.correctZoomPan(true);\r\n    } else {\r\n      // we run two animations instead of one,\r\n      // as each axis has own pan boundaries and thus different spring function\r\n      // (correctZoomPan does not have this functionality,\r\n      //  it animates all properties with single timing function)\r\n      this._finishPanGestureForAxis('x');\r\n      this._finishPanGestureForAxis('y');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   */\r\n  _finishPanGestureForAxis(axis) {\r\n    const { velocity } = this.gestures;\r\n    const { currSlide } = this.pswp;\r\n\r\n    if (!currSlide) {\r\n      return;\r\n    }\r\n\r\n    const { pan, bounds } = currSlide;\r\n    const panPos = pan[axis];\r\n    const restoreBgOpacity = (this.pswp.bgOpacity < 1 && axis === 'y');\r\n\r\n    // 0.995 means - scroll view loses 0.5% of its velocity per millisecond\r\n    // Increasing this number will reduce travel distance\r\n    const decelerationRate = 0.995; // 0.99\r\n\r\n    // Pan position if there is no bounds\r\n    const projectedPosition = panPos + project(velocity[axis], decelerationRate);\r\n\r\n    if (restoreBgOpacity) {\r\n      const vDragRatio = this._getVerticalDragRatio(panPos);\r\n      const projectedVDragRatio = this._getVerticalDragRatio(projectedPosition);\r\n\r\n      // If we are above and moving upwards,\r\n      // or if we are below and moving downwards\r\n      if ((vDragRatio < 0 && projectedVDragRatio < -MIN_RATIO_TO_CLOSE)\r\n          || (vDragRatio > 0 && projectedVDragRatio > MIN_RATIO_TO_CLOSE)) {\r\n        this.pswp.close();\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Pan position with corrected bounds\r\n    const correctedPanPosition = bounds.correctPan(axis, projectedPosition);\r\n\r\n    // Exit if pan position should not be changed\r\n    // or if speed it too low\r\n    if (panPos === correctedPanPosition) {\r\n      return;\r\n    }\r\n\r\n    // Overshoot if the final position is out of pan bounds\r\n    const dampingRatio = (correctedPanPosition === projectedPosition) ? 1 : 0.82;\r\n\r\n    const initialBgOpacity = this.pswp.bgOpacity;\r\n    const totalPanDist = correctedPanPosition - panPos;\r\n\r\n    this.pswp.animations.startSpring({\r\n      name: 'panGesture' + axis,\r\n      isPan: true,\r\n      start: panPos,\r\n      end: correctedPanPosition,\r\n      velocity: velocity[axis],\r\n      dampingRatio,\r\n      onUpdate: (pos) => {\r\n        // Animate opacity of background relative to Y pan position of an image\r\n        if (restoreBgOpacity && this.pswp.bgOpacity < 1) {\r\n          // 0 - start of animation, 1 - end of animation\r\n          const animationProgressRatio = 1 - (correctedPanPosition - pos) / totalPanDist;\r\n\r\n          // We clamp opacity to keep it between 0 and 1.\r\n          // As progress ratio can be larger than 1 due to overshoot,\r\n          // and we do not want to bounce opacity.\r\n          this.pswp.applyBgOpacity(clamp(\r\n            initialBgOpacity + (1 - initialBgOpacity) * animationProgressRatio,\r\n            0,\r\n            1\r\n          ));\r\n        }\r\n\r\n        pan[axis] = Math.floor(pos);\r\n        currSlide.applyCurrentZoomPan();\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Update position of the main scroll,\r\n   * or/and update pan position of the current slide.\r\n   *\r\n   * Should return true if it changes (or can change) main scroll.\r\n   *\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   * @returns {boolean}\r\n   */\r\n  _panOrMoveMainScroll(axis) {\r\n    const { p1, dragAxis, prevP1, isMultitouch } = this.gestures;\r\n    const { currSlide, mainScroll } = this.pswp;\r\n    const delta = (p1[axis] - prevP1[axis]);\r\n    const newMainScrollX = mainScroll.x + delta;\r\n\r\n    if (!delta || !currSlide) {\r\n      return false;\r\n    }\r\n\r\n    // Always move main scroll if image can not be panned\r\n    if (axis === 'x' && !currSlide.isPannable() && !isMultitouch) {\r\n      mainScroll.moveTo(newMainScrollX, true);\r\n      return true; // changed main scroll\r\n    }\r\n\r\n    const { bounds } = currSlide;\r\n    const newPan = currSlide.pan[axis] + delta;\r\n\r\n    if (this.pswp.options.allowPanToNext\r\n        && dragAxis === 'x'\r\n        && axis === 'x'\r\n        && !isMultitouch) {\r\n      const currSlideMainScrollX = mainScroll.getCurrSlideX();\r\n\r\n      // Position of the main scroll relative to the viewport\r\n      const mainScrollShiftDiff = mainScroll.x - currSlideMainScrollX;\r\n\r\n      const isLeftToRight = delta > 0;\r\n      const isRightToLeft = !isLeftToRight;\r\n\r\n      if (newPan > bounds.min[axis] && isLeftToRight) {\r\n        // Panning from left to right, beyond the left edge\r\n\r\n        // Wether the image was at minimum pan position (or less)\r\n        // when this drag gesture started.\r\n        // Minimum pan position refers to the left edge of the image.\r\n        const wasAtMinPanPosition = (bounds.min[axis] <= this.startPan[axis]);\r\n\r\n        if (wasAtMinPanPosition) {\r\n          mainScroll.moveTo(newMainScrollX, true);\r\n          return true;\r\n        } else {\r\n          this._setPanWithFriction(axis, newPan);\r\n          //currSlide.pan[axis] = newPan;\r\n        }\r\n      } else if (newPan < bounds.max[axis] && isRightToLeft) {\r\n        // Paning from right to left, beyond the right edge\r\n\r\n        // Maximum pan position refers to the right edge of the image.\r\n        const wasAtMaxPanPosition = (this.startPan[axis] <= bounds.max[axis]);\r\n\r\n        if (wasAtMaxPanPosition) {\r\n          mainScroll.moveTo(newMainScrollX, true);\r\n          return true;\r\n        } else {\r\n          this._setPanWithFriction(axis, newPan);\r\n          //currSlide.pan[axis] = newPan;\r\n        }\r\n      } else {\r\n        // If main scroll is shifted\r\n        if (mainScrollShiftDiff !== 0) {\r\n          // If main scroll is shifted right\r\n          if (mainScrollShiftDiff > 0 /*&& isRightToLeft*/) {\r\n            mainScroll.moveTo(Math.max(newMainScrollX, currSlideMainScrollX), true);\r\n            return true;\r\n          } else if (mainScrollShiftDiff < 0 /*&& isLeftToRight*/) {\r\n            // Main scroll is shifted left (Position is less than 0 comparing to the viewport 0)\r\n            mainScroll.moveTo(Math.min(newMainScrollX, currSlideMainScrollX), true);\r\n            return true;\r\n          }\r\n        } else {\r\n          // We are within pan bounds, so just pan\r\n          this._setPanWithFriction(axis, newPan);\r\n        }\r\n      }\r\n    } else {\r\n      if (axis === 'y') {\r\n        // Do not pan vertically if main scroll is shifted o\r\n        if (!mainScroll.isShifted() && bounds.min.y !== bounds.max.y) {\r\n          this._setPanWithFriction(axis, newPan);\r\n        }\r\n      } else {\r\n        this._setPanWithFriction(axis, newPan);\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  // If we move above - the ratio is negative\r\n  // If we move below the ratio is positive\r\n\r\n  /**\r\n   * Relation between pan Y position and third of viewport height.\r\n   *\r\n   * When we are at initial position (center bounds) - the ratio is 0,\r\n   * if position is shifted upwards - the ratio is negative,\r\n   * if position is shifted downwards - the ratio is positive.\r\n   *\r\n   * @private\r\n   * @param {number} panY The current pan Y position.\r\n   * @returns {number}\r\n   */\r\n  _getVerticalDragRatio(panY) {\r\n    return (panY - (this.pswp.currSlide?.bounds.center.y ?? 0)) / (this.pswp.viewportSize.y / 3);\r\n  }\r\n\r\n  /**\r\n   * Set pan position of the current slide.\r\n   * Apply friction if the position is beyond the pan bounds,\r\n   * or if custom friction is defined.\r\n   *\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   * @param {number} potentialPan\r\n   * @param {number} [customFriction] (0.1 - 1)\r\n   */\r\n  _setPanWithFriction(axis, potentialPan, customFriction) {\r\n    const { currSlide } = this.pswp;\r\n\r\n    if (!currSlide) {\r\n      return;\r\n    }\r\n\r\n    const { pan, bounds } = currSlide;\r\n    const correctedPan = bounds.correctPan(axis, potentialPan);\r\n    // If we are out of pan bounds\r\n    if (correctedPan !== potentialPan || customFriction) {\r\n      const delta = Math.round(potentialPan - pan[axis]);\r\n      pan[axis] += delta * (customFriction || PAN_END_FRICTION);\r\n    } else {\r\n      pan[axis] = potentialPan;\r\n    }\r\n  }\r\n}\r\n\r\nexport default DragHandler;\r\n","import {\r\n  equalizePoints, getDistanceBetween, clamp, pointsEqual\r\n} from '../util/util.js';\r\n\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n/** @typedef {import('./gestures.js').default} Gestures */\r\n\r\nconst UPPER_ZOOM_FRICTION = 0.05;\r\nconst LOWER_ZOOM_FRICTION = 0.15;\r\n\r\n\r\n/**\r\n * Get center point between two points\r\n *\r\n * @param {Point} p\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n * @returns {Point}\r\n */\r\nfunction getZoomPointsCenter(p, p1, p2) {\r\n  p.x = (p1.x + p2.x) / 2;\r\n  p.y = (p1.y + p2.y) / 2;\r\n  return p;\r\n}\r\n\r\nclass ZoomHandler {\r\n  /**\r\n   * @param {Gestures} gestures\r\n   */\r\n  constructor(gestures) {\r\n    this.gestures = gestures;\r\n    /**\r\n     * @private\r\n     * @type {Point}\r\n     */\r\n    this._startPan = { x: 0, y: 0 };\r\n    /**\r\n     * @private\r\n     * @type {Point}\r\n     */\r\n    this._startZoomPoint = { x: 0, y: 0 };\r\n    /**\r\n     * @private\r\n     * @type {Point}\r\n     */\r\n    this._zoomPoint = { x: 0, y: 0 };\r\n    /** @private */\r\n    this._wasOverFitZoomLevel = false;\r\n    /** @private */\r\n    this._startZoomLevel = 1;\r\n  }\r\n\r\n  start() {\r\n    const { currSlide } = this.gestures.pswp;\r\n    if (currSlide) {\r\n      this._startZoomLevel = currSlide.currZoomLevel;\r\n      equalizePoints(this._startPan, currSlide.pan);\r\n    }\r\n\r\n    this.gestures.pswp.animations.stopAllPan();\r\n    this._wasOverFitZoomLevel = false;\r\n  }\r\n\r\n  change() {\r\n    const { p1, startP1, p2, startP2, pswp } = this.gestures;\r\n    const { currSlide } = pswp;\r\n\r\n    if (!currSlide) {\r\n      return;\r\n    }\r\n\r\n    const minZoomLevel = currSlide.zoomLevels.min;\r\n    const maxZoomLevel = currSlide.zoomLevels.max;\r\n\r\n    if (!currSlide.isZoomable() || pswp.mainScroll.isShifted()) {\r\n      return;\r\n    }\r\n\r\n    getZoomPointsCenter(this._startZoomPoint, startP1, startP2);\r\n    getZoomPointsCenter(this._zoomPoint, p1, p2);\r\n\r\n    let currZoomLevel = (1 / getDistanceBetween(startP1, startP2))\r\n                      * getDistanceBetween(p1, p2)\r\n                      * this._startZoomLevel;\r\n\r\n    // slightly over the zoom.fit\r\n    if (currZoomLevel > currSlide.zoomLevels.initial + (currSlide.zoomLevels.initial / 15)) {\r\n      this._wasOverFitZoomLevel = true;\r\n    }\r\n\r\n    if (currZoomLevel < minZoomLevel) {\r\n      if (pswp.options.pinchToClose\r\n          && !this._wasOverFitZoomLevel\r\n          && this._startZoomLevel <= currSlide.zoomLevels.initial) {\r\n        // fade out background if zooming out\r\n        const bgOpacity = 1 - ((minZoomLevel - currZoomLevel) / (minZoomLevel / 1.2));\r\n        if (!pswp.dispatch('pinchClose', { bgOpacity }).defaultPrevented) {\r\n          pswp.applyBgOpacity(bgOpacity);\r\n        }\r\n      } else {\r\n        // Apply the friction if zoom level is below the min\r\n        currZoomLevel = minZoomLevel - (minZoomLevel - currZoomLevel) * LOWER_ZOOM_FRICTION;\r\n      }\r\n    } else if (currZoomLevel > maxZoomLevel) {\r\n      // Apply the friction if zoom level is above the max\r\n      currZoomLevel = maxZoomLevel + (currZoomLevel - maxZoomLevel) * UPPER_ZOOM_FRICTION;\r\n    }\r\n\r\n    currSlide.pan.x = this._calculatePanForZoomLevel('x', currZoomLevel);\r\n    currSlide.pan.y = this._calculatePanForZoomLevel('y', currZoomLevel);\r\n\r\n    currSlide.setZoomLevel(currZoomLevel);\r\n    currSlide.applyCurrentZoomPan();\r\n  }\r\n\r\n  end() {\r\n    const { pswp } = this.gestures;\r\n    const { currSlide } = pswp;\r\n    if ((!currSlide || currSlide.currZoomLevel < currSlide.zoomLevels.initial)\r\n        && !this._wasOverFitZoomLevel\r\n        && pswp.options.pinchToClose) {\r\n      pswp.close();\r\n    } else {\r\n      this.correctZoomPan();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   * @param {number} currZoomLevel\r\n   * @returns {number}\r\n   */\r\n  _calculatePanForZoomLevel(axis, currZoomLevel) {\r\n    const zoomFactor = currZoomLevel / this._startZoomLevel;\r\n    return this._zoomPoint[axis]\r\n            - ((this._startZoomPoint[axis] - this._startPan[axis]) * zoomFactor);\r\n  }\r\n\r\n  /**\r\n   * Correct currZoomLevel and pan if they are\r\n   * beyond minimum or maximum values.\r\n   * With animation.\r\n   *\r\n   * @param {boolean} [ignoreGesture]\r\n   * Wether gesture coordinates should be ignored when calculating destination pan position.\r\n   */\r\n  correctZoomPan(ignoreGesture) {\r\n    const { pswp } = this.gestures;\r\n    const { currSlide } = pswp;\r\n\r\n    if (!currSlide?.isZoomable()) {\r\n      return;\r\n    }\r\n\r\n    if (this._zoomPoint.x === 0) {\r\n      ignoreGesture = true;\r\n    }\r\n\r\n    const prevZoomLevel = currSlide.currZoomLevel;\r\n\r\n    /** @type {number} */\r\n    let destinationZoomLevel;\r\n    let currZoomLevelNeedsChange = true;\r\n\r\n    if (prevZoomLevel < currSlide.zoomLevels.initial) {\r\n      destinationZoomLevel = currSlide.zoomLevels.initial;\r\n      // zoom to min\r\n    } else if (prevZoomLevel > currSlide.zoomLevels.max) {\r\n      destinationZoomLevel = currSlide.zoomLevels.max;\r\n      // zoom to max\r\n    } else {\r\n      currZoomLevelNeedsChange = false;\r\n      destinationZoomLevel = prevZoomLevel;\r\n    }\r\n\r\n    const initialBgOpacity = pswp.bgOpacity;\r\n    const restoreBgOpacity = pswp.bgOpacity < 1;\r\n\r\n    const initialPan = equalizePoints({ x: 0, y: 0 }, currSlide.pan);\r\n    let destinationPan = equalizePoints({ x: 0, y: 0 }, initialPan);\r\n\r\n    if (ignoreGesture) {\r\n      this._zoomPoint.x = 0;\r\n      this._zoomPoint.y = 0;\r\n      this._startZoomPoint.x = 0;\r\n      this._startZoomPoint.y = 0;\r\n      this._startZoomLevel = prevZoomLevel;\r\n      equalizePoints(this._startPan, initialPan);\r\n    }\r\n\r\n    if (currZoomLevelNeedsChange) {\r\n      destinationPan = {\r\n        x: this._calculatePanForZoomLevel('x', destinationZoomLevel),\r\n        y: this._calculatePanForZoomLevel('y', destinationZoomLevel)\r\n      };\r\n    }\r\n\r\n    // set zoom level, so pan bounds are updated according to it\r\n    currSlide.setZoomLevel(destinationZoomLevel);\r\n\r\n    destinationPan = {\r\n      x: currSlide.bounds.correctPan('x', destinationPan.x),\r\n      y: currSlide.bounds.correctPan('y', destinationPan.y)\r\n    };\r\n\r\n    // return zoom level and its bounds to initial\r\n    currSlide.setZoomLevel(prevZoomLevel);\r\n\r\n    const panNeedsChange = !pointsEqual(destinationPan, initialPan);\r\n\r\n    if (!panNeedsChange && !currZoomLevelNeedsChange && !restoreBgOpacity) {\r\n      // update resolution after gesture\r\n      currSlide._setResolution(destinationZoomLevel);\r\n      currSlide.applyCurrentZoomPan();\r\n\r\n      // nothing to animate\r\n      return;\r\n    }\r\n\r\n    pswp.animations.stopAllPan();\r\n\r\n    pswp.animations.startSpring({\r\n      isPan: true,\r\n      start: 0,\r\n      end: 1000,\r\n      velocity: 0,\r\n      dampingRatio: 1,\r\n      naturalFrequency: 40,\r\n      onUpdate: (now) => {\r\n        now /= 1000; // 0 - start, 1 - end\r\n\r\n        if (panNeedsChange || currZoomLevelNeedsChange) {\r\n          if (panNeedsChange) {\r\n            currSlide.pan.x = initialPan.x + (destinationPan.x - initialPan.x) * now;\r\n            currSlide.pan.y = initialPan.y + (destinationPan.y - initialPan.y) * now;\r\n          }\r\n\r\n          if (currZoomLevelNeedsChange) {\r\n            const newZoomLevel = prevZoomLevel\r\n                        + (destinationZoomLevel - prevZoomLevel) * now;\r\n            currSlide.setZoomLevel(newZoomLevel);\r\n          }\r\n\r\n          currSlide.applyCurrentZoomPan();\r\n        }\r\n\r\n        // Restore background opacity\r\n        if (restoreBgOpacity && pswp.bgOpacity < 1) {\r\n          // We clamp opacity to keep it between 0 and 1.\r\n          // As progress ratio can be larger than 1 due to overshoot,\r\n          // and we do not want to bounce opacity.\r\n          pswp.applyBgOpacity(clamp(\r\n            initialBgOpacity + (1 - initialBgOpacity) * now, 0, 1\r\n          ));\r\n        }\r\n      },\r\n      onComplete: () => {\r\n        // update resolution after transition ends\r\n        currSlide._setResolution(destinationZoomLevel);\r\n        currSlide.applyCurrentZoomPan();\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nexport default ZoomHandler;\r\n","/**\r\n * @template {string} T\r\n * @template {string} P\r\n * @typedef {import('../types.js').AddPostfix<T, P>} AddPostfix<T, P>\r\n */\r\n\r\n/** @typedef {import('./gestures.js').default} Gestures */\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n/** @typedef {'imageClick' | 'bgClick' | 'tap' | 'doubleTap'} Actions */\r\n\r\n/**\r\n * Whether the tap was performed on the main slide\r\n * (rather than controls or caption).\r\n *\r\n * @param {PointerEvent} event\r\n * @returns {boolean}\r\n */\r\nfunction didTapOnMainContent(event) {\r\n  return !!(/** @type {HTMLElement} */ (event.target).closest('.pswp__container'));\r\n}\r\n\r\n/**\r\n * Tap, double-tap handler.\r\n */\r\nclass TapHandler {\r\n  /**\r\n   * @param {Gestures} gestures\r\n   */\r\n  constructor(gestures) {\r\n    this.gestures = gestures;\r\n  }\r\n\r\n  /**\r\n   * @param {Point} point\r\n   * @param {PointerEvent} originalEvent\r\n   */\r\n  click(point, originalEvent) {\r\n    const targetClassList = /** @type {HTMLElement} */ (originalEvent.target).classList;\r\n    const isImageClick = targetClassList.contains('pswp__img');\r\n    const isBackgroundClick = targetClassList.contains('pswp__item')\r\n                              || targetClassList.contains('pswp__zoom-wrap');\r\n\r\n    if (isImageClick) {\r\n      this._doClickOrTapAction('imageClick', point, originalEvent);\r\n    } else if (isBackgroundClick) {\r\n      this._doClickOrTapAction('bgClick', point, originalEvent);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Point} point\r\n   * @param {PointerEvent} originalEvent\r\n   */\r\n  tap(point, originalEvent) {\r\n    if (didTapOnMainContent(originalEvent)) {\r\n      this._doClickOrTapAction('tap', point, originalEvent);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Point} point\r\n   * @param {PointerEvent} originalEvent\r\n   */\r\n  doubleTap(point, originalEvent) {\r\n    if (didTapOnMainContent(originalEvent)) {\r\n      this._doClickOrTapAction('doubleTap', point, originalEvent);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {Actions} actionName\r\n   * @param {Point} point\r\n   * @param {PointerEvent} originalEvent\r\n   */\r\n  _doClickOrTapAction(actionName, point, originalEvent) {\r\n    const { pswp } = this.gestures;\r\n    const { currSlide } = pswp;\r\n    const actionFullName = /** @type {AddPostfix<Actions, 'Action'>} */ (actionName + 'Action');\r\n    const optionValue = pswp.options[actionFullName];\r\n\r\n    if (pswp.dispatch(actionFullName, { point, originalEvent }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (typeof optionValue === 'function') {\r\n      optionValue.call(pswp, point, originalEvent);\r\n      return;\r\n    }\r\n\r\n    switch (optionValue) {\r\n      case 'close':\r\n      case 'next':\r\n        pswp[optionValue]();\r\n        break;\r\n      case 'zoom':\r\n        currSlide?.toggleZoom(point);\r\n        break;\r\n      case 'zoom-or-close':\r\n        // by default click zooms current image,\r\n        // if it can not be zoomed - gallery will be closed\r\n        if (currSlide?.isZoomable()\r\n            && currSlide.zoomLevels.secondary !== currSlide.zoomLevels.initial) {\r\n          currSlide.toggleZoom(point);\r\n        } else if (pswp.options.clickToCloseNonZoomable) {\r\n          pswp.close();\r\n        }\r\n        break;\r\n      case 'toggle-controls':\r\n        this.gestures.pswp.element?.classList.toggle('pswp--ui-visible');\r\n        // if (_controlsVisible) {\r\n        //   _ui.hideControls();\r\n        // } else {\r\n        //   _ui.showControls();\r\n        // }\r\n        break;\r\n    }\r\n  }\r\n}\r\n\r\nexport default TapHandler;\r\n","import {\r\n  equalizePoints, pointsEqual, getDistanceBetween\r\n} from '../util/util.js';\r\n\r\nimport DragHandler from './drag-handler.js';\r\nimport ZoomHandler from './zoom-handler.js';\r\nimport TapHandler from './tap-handler.js';\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n// How far should user should drag\r\n// until we can determine that the gesture is swipe and its direction\r\nconst AXIS_SWIPE_HYSTERISIS = 10;\r\n//const PAN_END_FRICTION = 0.35;\r\n\r\nconst DOUBLE_TAP_DELAY = 300; // ms\r\nconst MIN_TAP_DISTANCE = 25; // px\r\n\r\n/**\r\n * Gestures class bind touch, pointer or mouse events\r\n * and emits drag to drag-handler and zoom events zoom-handler.\r\n *\r\n * Drag and zoom events are emited in requestAnimationFrame,\r\n * and only when one of pointers was actually changed.\r\n */\r\nclass Gestures {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n\r\n    /** @type {'x' | 'y' | null} */\r\n    this.dragAxis = null;\r\n\r\n    // point objects are defined once and reused\r\n    // PhotoSwipe keeps track only of two pointers, others are ignored\r\n    /** @type {Point} */\r\n    this.p1 = { x: 0, y: 0 }; // the first pressed pointer\r\n    /** @type {Point} */\r\n    this.p2 = { x: 0, y: 0 }; // the second pressed pointer\r\n    /** @type {Point} */\r\n    this.prevP1 = { x: 0, y: 0 };\r\n    /** @type {Point} */\r\n    this.prevP2 = { x: 0, y: 0 };\r\n    /** @type {Point} */\r\n    this.startP1 = { x: 0, y: 0 };\r\n    /** @type {Point} */\r\n    this.startP2 = { x: 0, y: 0 };\r\n    /** @type {Point} */\r\n    this.velocity = { x: 0, y: 0 };\r\n\r\n    /** @type {Point}\r\n     * @private\r\n     */\r\n    this._lastStartP1 = { x: 0, y: 0 };\r\n    /** @type {Point}\r\n     * @private\r\n     */\r\n    this._intervalP1 = { x: 0, y: 0 };\r\n    /** @private */\r\n    this._numActivePoints = 0;\r\n    /** @type {Point[]}\r\n     * @private\r\n     */\r\n    this._ongoingPointers = [];\r\n    /** @private */\r\n    this._touchEventEnabled = 'ontouchstart' in window;\r\n    /** @private */\r\n    this._pointerEventEnabled = !!(window.PointerEvent);\r\n    this.supportsTouch = this._touchEventEnabled\r\n                          || (this._pointerEventEnabled && navigator.maxTouchPoints > 1);\r\n    /** @private */\r\n    this._numActivePoints = 0;\r\n    /** @private */\r\n    this._intervalTime = 0;\r\n    /** @private */\r\n    this._velocityCalculated = false;\r\n    this.isMultitouch = false;\r\n    this.isDragging = false;\r\n    this.isZooming = false;\r\n    /** @type {number | null} */\r\n    this.raf = null;\r\n    /** @type {NodeJS.Timeout | null}\r\n     * @private\r\n     */\r\n    this._tapTimer = null;\r\n\r\n    if (!this.supportsTouch) {\r\n      // disable pan to next slide for non-touch devices\r\n      pswp.options.allowPanToNext = false;\r\n    }\r\n\r\n    this.drag = new DragHandler(this);\r\n    this.zoomLevels = new ZoomHandler(this);\r\n    this.tapHandler = new TapHandler(this);\r\n\r\n    pswp.on('bindEvents', () => {\r\n      pswp.events.add(\r\n        pswp.scrollWrap,\r\n        'click',\r\n        /** @type EventListener */(this._onClick.bind(this))\r\n      );\r\n\r\n      if (this._pointerEventEnabled) {\r\n        this._bindEvents('pointer', 'down', 'up', 'cancel');\r\n      } else if (this._touchEventEnabled) {\r\n        this._bindEvents('touch', 'start', 'end', 'cancel');\r\n\r\n        // In previous versions we also bound mouse event here,\r\n        // in case device supports both touch and mouse events,\r\n        // but newer versions of browsers now support PointerEvent.\r\n\r\n        // on iOS10 if you bind touchmove/end after touchstart,\r\n        // and you don't preventDefault touchstart (which PhotoSwipe does),\r\n        // preventDefault will have no effect on touchmove and touchend.\r\n        // Unless you bind it previously.\r\n        if (pswp.scrollWrap) {\r\n          pswp.scrollWrap.ontouchmove = () => {};\r\n          pswp.scrollWrap.ontouchend = () => {};\r\n        }\r\n      } else {\r\n        this._bindEvents('mouse', 'down', 'up');\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {'mouse' | 'touch' | 'pointer'} pref\r\n   * @param {'down' | 'start'} down\r\n   * @param {'up' | 'end'} up\r\n   * @param {'cancel'} [cancel]\r\n   */\r\n  _bindEvents(pref, down, up, cancel) {\r\n    const { pswp } = this;\r\n    const { events } = pswp;\r\n\r\n    const cancelEvent = cancel ? pref + cancel : '';\r\n\r\n    events.add(\r\n      pswp.scrollWrap,\r\n      pref + down,\r\n      /** @type EventListener */(this.onPointerDown.bind(this))\r\n    );\r\n    events.add(window, pref + 'move', /** @type EventListener */(this.onPointerMove.bind(this)));\r\n    events.add(window, pref + up, /** @type EventListener */(this.onPointerUp.bind(this)));\r\n    if (cancelEvent) {\r\n      events.add(\r\n        pswp.scrollWrap,\r\n        cancelEvent,\r\n        /** @type EventListener */(this.onPointerUp.bind(this))\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {PointerEvent} e\r\n   */\r\n  onPointerDown(e) {\r\n    // We do not call preventDefault for touch events\r\n    // to allow browser to show native dialog on longpress\r\n    // (the one that allows to save image or open it in new tab).\r\n    //\r\n    // Desktop Safari allows to drag images when preventDefault isn't called on mousedown,\r\n    // even though preventDefault IS called on mousemove. That's why we preventDefault mousedown.\r\n    const isMousePointer = e.type === 'mousedown' || e.pointerType === 'mouse';\r\n\r\n    // Allow dragging only via left mouse button.\r\n    // http://www.quirksmode.org/js/events_properties.html\r\n    // https://developer.mozilla.org/en-US/docs/Web/API/event.button\r\n    if (isMousePointer && e.button > 0) {\r\n      return;\r\n    }\r\n\r\n    const { pswp } = this;\r\n\r\n    // if PhotoSwipe is opening or closing\r\n    if (!pswp.opener.isOpen) {\r\n      e.preventDefault();\r\n      return;\r\n    }\r\n\r\n    if (pswp.dispatch('pointerDown', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (isMousePointer) {\r\n      pswp.mouseDetected();\r\n\r\n      // preventDefault mouse event to prevent\r\n      // browser image drag feature\r\n      this._preventPointerEventBehaviour(e);\r\n    }\r\n\r\n    pswp.animations.stopAll();\r\n\r\n    this._updatePoints(e, 'down');\r\n\r\n    if (this._numActivePoints === 1) {\r\n      this.dragAxis = null;\r\n      // we need to store initial point to determine the main axis,\r\n      // drag is activated only after the axis is determined\r\n      equalizePoints(this.startP1, this.p1);\r\n    }\r\n\r\n    if (this._numActivePoints > 1) {\r\n      // Tap or double tap should not trigger if more than one pointer\r\n      this._clearTapTimer();\r\n      this.isMultitouch = true;\r\n    } else {\r\n      this.isMultitouch = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {PointerEvent} e\r\n   */\r\n  onPointerMove(e) {\r\n    e.preventDefault(); // always preventDefault move event\r\n\r\n    if (!this._numActivePoints) {\r\n      return;\r\n    }\r\n\r\n    this._updatePoints(e, 'move');\r\n\r\n    if (this.pswp.dispatch('pointerMove', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this._numActivePoints === 1 && !this.isDragging) {\r\n      if (!this.dragAxis) {\r\n        this._calculateDragDirection();\r\n      }\r\n\r\n      // Drag axis was detected, emit drag.start\r\n      if (this.dragAxis && !this.isDragging) {\r\n        if (this.isZooming) {\r\n          this.isZooming = false;\r\n          this.zoomLevels.end();\r\n        }\r\n\r\n        this.isDragging = true;\r\n        this._clearTapTimer(); // Tap can not trigger after drag\r\n\r\n        // Adjust starting point\r\n        this._updateStartPoints();\r\n        this._intervalTime = Date.now();\r\n        //this._startTime = this._intervalTime;\r\n        this._velocityCalculated = false;\r\n        equalizePoints(this._intervalP1, this.p1);\r\n        this.velocity.x = 0;\r\n        this.velocity.y = 0;\r\n        this.drag.start();\r\n\r\n        this._rafStopLoop();\r\n        this._rafRenderLoop();\r\n      }\r\n    } else if (this._numActivePoints > 1 && !this.isZooming) {\r\n      this._finishDrag();\r\n\r\n      this.isZooming = true;\r\n\r\n      // Adjust starting points\r\n      this._updateStartPoints();\r\n\r\n      this.zoomLevels.start();\r\n\r\n      this._rafStopLoop();\r\n      this._rafRenderLoop();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _finishDrag() {\r\n    if (this.isDragging) {\r\n      this.isDragging = false;\r\n\r\n      // Try to calculate velocity,\r\n      // if it wasn't calculated yet in drag.change\r\n      if (!this._velocityCalculated) {\r\n        this._updateVelocity(true);\r\n      }\r\n\r\n      this.drag.end();\r\n      this.dragAxis = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {PointerEvent} e\r\n   */\r\n  onPointerUp(e) {\r\n    if (!this._numActivePoints) {\r\n      return;\r\n    }\r\n\r\n    this._updatePoints(e, 'up');\r\n\r\n    if (this.pswp.dispatch('pointerUp', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this._numActivePoints === 0) {\r\n      this._rafStopLoop();\r\n\r\n      if (this.isDragging) {\r\n        this._finishDrag();\r\n      } else if (!this.isZooming && !this.isMultitouch) {\r\n        //this.zoomLevels.correctZoomPan();\r\n        this._finishTap(e);\r\n      }\r\n    }\r\n\r\n    if (this._numActivePoints < 2 && this.isZooming) {\r\n      this.isZooming = false;\r\n      this.zoomLevels.end();\r\n\r\n      if (this._numActivePoints === 1) {\r\n        // Since we have 1 point left, we need to reinitiate drag\r\n        this.dragAxis = null;\r\n        this._updateStartPoints();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _rafRenderLoop() {\r\n    if (this.isDragging || this.isZooming) {\r\n      this._updateVelocity();\r\n\r\n      if (this.isDragging) {\r\n        // make sure that pointer moved since the last update\r\n        if (!pointsEqual(this.p1, this.prevP1)) {\r\n          this.drag.change();\r\n        }\r\n      } else /* if (this.isZooming) */ {\r\n        if (!pointsEqual(this.p1, this.prevP1)\r\n            || !pointsEqual(this.p2, this.prevP2)) {\r\n          this.zoomLevels.change();\r\n        }\r\n      }\r\n\r\n      this._updatePrevPoints();\r\n      this.raf = requestAnimationFrame(this._rafRenderLoop.bind(this));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update velocity at 50ms interval\r\n   *\r\n   * @private\r\n   * @param {boolean} [force]\r\n   */\r\n  _updateVelocity(force) {\r\n    const time = Date.now();\r\n    const duration = time - this._intervalTime;\r\n\r\n    if (duration < 50 && !force) {\r\n      return;\r\n    }\r\n\r\n\r\n    this.velocity.x = this._getVelocity('x', duration);\r\n    this.velocity.y = this._getVelocity('y', duration);\r\n\r\n    this._intervalTime = time;\r\n    equalizePoints(this._intervalP1, this.p1);\r\n    this._velocityCalculated = true;\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {PointerEvent} e\r\n   */\r\n  _finishTap(e) {\r\n    const { mainScroll } = this.pswp;\r\n\r\n    // Do not trigger tap events if main scroll is shifted\r\n    if (mainScroll.isShifted()) {\r\n      // restore main scroll position\r\n      // (usually happens if stopped in the middle of animation)\r\n      mainScroll.moveIndexBy(0, true);\r\n      return;\r\n    }\r\n\r\n    // Do not trigger tap for touchcancel or pointercancel\r\n    if (e.type.indexOf('cancel') > 0) {\r\n      return;\r\n    }\r\n\r\n    // Trigger click instead of tap for mouse events\r\n    if (e.type === 'mouseup' || e.pointerType === 'mouse') {\r\n      this.tapHandler.click(this.startP1, e);\r\n      return;\r\n    }\r\n\r\n    // Disable delay if there is no doubleTapAction\r\n    const tapDelay = this.pswp.options.doubleTapAction ? DOUBLE_TAP_DELAY : 0;\r\n\r\n    // If tapTimer is defined - we tapped recently,\r\n    // check if the current tap is close to the previous one,\r\n    // if yes - trigger double tap\r\n    if (this._tapTimer) {\r\n      this._clearTapTimer();\r\n      // Check if two taps were more or less on the same place\r\n      if (getDistanceBetween(this._lastStartP1, this.startP1) < MIN_TAP_DISTANCE) {\r\n        this.tapHandler.doubleTap(this.startP1, e);\r\n      }\r\n    } else {\r\n      equalizePoints(this._lastStartP1, this.startP1);\r\n      this._tapTimer = setTimeout(() => {\r\n        this.tapHandler.tap(this.startP1, e);\r\n        this._clearTapTimer();\r\n      }, tapDelay);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _clearTapTimer() {\r\n    if (this._tapTimer) {\r\n      clearTimeout(this._tapTimer);\r\n      this._tapTimer = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get velocity for axis\r\n   *\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   * @param {number} duration\r\n   * @returns {number}\r\n   */\r\n  _getVelocity(axis, duration) {\r\n    // displacement is like distance, but can be negative.\r\n    const displacement = this.p1[axis] - this._intervalP1[axis];\r\n\r\n    if (Math.abs(displacement) > 1 && duration > 5) {\r\n      return displacement / duration;\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _rafStopLoop() {\r\n    if (this.raf) {\r\n      cancelAnimationFrame(this.raf);\r\n      this.raf = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {PointerEvent} e\r\n   */\r\n  _preventPointerEventBehaviour(e) {\r\n    // TODO find a way to disable e.preventDefault on some elements\r\n    //      via event or some class or something\r\n    e.preventDefault();\r\n  }\r\n\r\n  /**\r\n   * Parses and normalizes points from the touch, mouse or pointer event.\r\n   * Updates p1 and p2.\r\n   *\r\n   * @private\r\n   * @param {PointerEvent | TouchEvent} e\r\n   * @param {'up' | 'down' | 'move'} pointerType Normalized pointer type\r\n   */\r\n  _updatePoints(e, pointerType) {\r\n    if (this._pointerEventEnabled) {\r\n      const pointerEvent = /** @type {PointerEvent} */ (e);\r\n      // Try to find the current pointer in ongoing pointers by its ID\r\n      const pointerIndex = this._ongoingPointers.findIndex((ongoingPointer) => {\r\n        return ongoingPointer.id === pointerEvent.pointerId;\r\n      });\r\n\r\n      if (pointerType === 'up' && pointerIndex > -1) {\r\n        // release the pointer - remove it from ongoing\r\n        this._ongoingPointers.splice(pointerIndex, 1);\r\n      } else if (pointerType === 'down' && pointerIndex === -1) {\r\n        // add new pointer\r\n        this._ongoingPointers.push(this._convertEventPosToPoint(pointerEvent, { x: 0, y: 0 }));\r\n      } else if (pointerIndex > -1) {\r\n        // update existing pointer\r\n        this._convertEventPosToPoint(pointerEvent, this._ongoingPointers[pointerIndex]);\r\n      }\r\n\r\n      this._numActivePoints = this._ongoingPointers.length;\r\n\r\n      // update points that PhotoSwipe uses\r\n      // to calculate position and scale\r\n      if (this._numActivePoints > 0) {\r\n        equalizePoints(this.p1, this._ongoingPointers[0]);\r\n      }\r\n\r\n      if (this._numActivePoints > 1) {\r\n        equalizePoints(this.p2, this._ongoingPointers[1]);\r\n      }\r\n    } else {\r\n      const touchEvent = /** @type {TouchEvent} */ (e);\r\n\r\n      this._numActivePoints = 0;\r\n      if (touchEvent.type.indexOf('touch') > -1) {\r\n        // Touch Event\r\n        // https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent\r\n        if (touchEvent.touches && touchEvent.touches.length > 0) {\r\n          this._convertEventPosToPoint(touchEvent.touches[0], this.p1);\r\n          this._numActivePoints++;\r\n          if (touchEvent.touches.length > 1) {\r\n            this._convertEventPosToPoint(touchEvent.touches[1], this.p2);\r\n            this._numActivePoints++;\r\n          }\r\n        }\r\n      } else {\r\n        // Mouse Event\r\n        this._convertEventPosToPoint(/** @type {PointerEvent} */ (e), this.p1);\r\n        if (pointerType === 'up') {\r\n          // clear all points on mouseup\r\n          this._numActivePoints = 0;\r\n        } else {\r\n          this._numActivePoints++;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /** update points that were used during previous rAF tick\r\n   * @private\r\n   */\r\n  _updatePrevPoints() {\r\n    equalizePoints(this.prevP1, this.p1);\r\n    equalizePoints(this.prevP2, this.p2);\r\n  }\r\n\r\n  /** update points at the start of gesture\r\n   * @private\r\n   */\r\n  _updateStartPoints() {\r\n    equalizePoints(this.startP1, this.p1);\r\n    equalizePoints(this.startP2, this.p2);\r\n    this._updatePrevPoints();\r\n  }\r\n\r\n  /** @private */\r\n  _calculateDragDirection() {\r\n    if (this.pswp.mainScroll.isShifted()) {\r\n      // if main scroll position is shifted – direction is always horizontal\r\n      this.dragAxis = 'x';\r\n    } else {\r\n      // calculate delta of the last touchmove tick\r\n      const diff = Math.abs(this.p1.x - this.startP1.x) - Math.abs(this.p1.y - this.startP1.y);\r\n\r\n      if (diff !== 0) {\r\n        // check if pointer was shifted horizontally or vertically\r\n        const axisToCheck = diff > 0 ? 'x' : 'y';\r\n\r\n        if (Math.abs(this.p1[axisToCheck] - this.startP1[axisToCheck]) >= AXIS_SWIPE_HYSTERISIS) {\r\n          this.dragAxis = axisToCheck;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Converts touch, pointer or mouse event\r\n   * to PhotoSwipe point.\r\n   *\r\n   * @private\r\n   * @param {Touch | PointerEvent} e\r\n   * @param {Point} p\r\n   * @returns {Point}\r\n   */\r\n  _convertEventPosToPoint(e, p) {\r\n    p.x = e.pageX - this.pswp.offset.x;\r\n    p.y = e.pageY - this.pswp.offset.y;\r\n\r\n    if ('pointerId' in e) {\r\n      p.id = e.pointerId;\r\n    } else if (e.identifier !== undefined) {\r\n      p.id = e.identifier;\r\n    }\r\n\r\n    return p;\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {PointerEvent} e\r\n   */\r\n  _onClick(e) {\r\n    // Do not allow click event to pass through after drag\r\n    if (this.pswp.mainScroll.isShifted()) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n    }\r\n  }\r\n}\r\n\r\nexport default Gestures;\r\n","import {\r\n  setTransform,\r\n  createElement,\r\n} from './util/util.js';\r\n\r\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('./slide/slide.js').default} Slide */\r\n\r\n/** @typedef {{ el: HTMLDivElement; slide?: Slide }} ItemHolder */\r\n\r\nconst MAIN_SCROLL_END_FRICTION = 0.35;\r\n\r\n\r\n// const MIN_SWIPE_TRANSITION_DURATION = 250;\r\n// const MAX_SWIPE_TRABSITION_DURATION = 500;\r\n// const DEFAULT_SWIPE_TRANSITION_DURATION = 333;\r\n\r\n/**\r\n * Handles movement of the main scrolling container\r\n * (for example, it repositions when user swipes left or right).\r\n *\r\n * Also stores its state.\r\n */\r\nclass MainScroll {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    this.x = 0;\r\n    this.slideWidth = 0;\r\n    /** @private */\r\n    this._currPositionIndex = 0;\r\n    /** @private */\r\n    this._prevPositionIndex = 0;\r\n    /** @private */\r\n    this._containerShiftIndex = -1;\r\n\r\n    /** @type {ItemHolder[]} */\r\n    this.itemHolders = [];\r\n  }\r\n\r\n  /**\r\n   * Position the scroller and slide containers\r\n   * according to viewport size.\r\n   *\r\n   * @param {boolean} [resizeSlides] Whether slides content should resized\r\n   */\r\n  resize(resizeSlides) {\r\n    const { pswp } = this;\r\n    const newSlideWidth = Math.round(\r\n      pswp.viewportSize.x + pswp.viewportSize.x * pswp.options.spacing\r\n    );\r\n    // Mobile browsers might trigger a resize event during a gesture.\r\n    // (due to toolbar appearing or hiding).\r\n    // Avoid re-adjusting main scroll position if width wasn't changed\r\n    const slideWidthChanged = (newSlideWidth !== this.slideWidth);\r\n\r\n    if (slideWidthChanged) {\r\n      this.slideWidth = newSlideWidth;\r\n      this.moveTo(this.getCurrSlideX());\r\n    }\r\n\r\n    this.itemHolders.forEach((itemHolder, index) => {\r\n      if (slideWidthChanged) {\r\n        setTransform(itemHolder.el, (index + this._containerShiftIndex)\r\n                                    * this.slideWidth);\r\n      }\r\n\r\n      if (resizeSlides && itemHolder.slide) {\r\n        itemHolder.slide.resize();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Reset X position of the main scroller to zero\r\n   */\r\n  resetPosition() {\r\n    // Position on the main scroller (offset)\r\n    // it is independent from slide index\r\n    this._currPositionIndex = 0;\r\n    this._prevPositionIndex = 0;\r\n\r\n    // This will force recalculation of size on next resize()\r\n    this.slideWidth = 0;\r\n\r\n    // _containerShiftIndex*viewportSize will give you amount of transform of the current slide\r\n    this._containerShiftIndex = -1;\r\n  }\r\n\r\n  /**\r\n   * Create and append array of three items\r\n   * that hold data about slides in DOM\r\n   */\r\n  appendHolders() {\r\n    this.itemHolders = [];\r\n\r\n    // append our three slide holders -\r\n    // previous, current, and next\r\n    for (let i = 0; i < 3; i++) {\r\n      const el = createElement('pswp__item', 'div', this.pswp.container);\r\n      el.setAttribute('role', 'group');\r\n      el.setAttribute('aria-roledescription', 'slide');\r\n      el.setAttribute('aria-hidden', 'true');\r\n\r\n      // hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\r\n      el.style.display = (i === 1) ? 'block' : 'none';\r\n\r\n      this.itemHolders.push({\r\n        el,\r\n        //index: -1\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Whether the main scroll can be horizontally swiped to the next or previous slide.\r\n   * @returns {boolean}\r\n   */\r\n  canBeSwiped() {\r\n    return this.pswp.getNumItems() > 1;\r\n  }\r\n\r\n  /**\r\n   * Move main scroll by X amount of slides.\r\n   * For example:\r\n   *   `-1` will move to the previous slide,\r\n   *    `0` will reset the scroll position of the current slide,\r\n   *    `3` will move three slides forward\r\n   *\r\n   * If loop option is enabled - index will be automatically looped too,\r\n   * (for example `-1` will move to the last slide of the gallery).\r\n   *\r\n   * @param {number} diff\r\n   * @param {boolean} [animate]\r\n   * @param {number} [velocityX]\r\n   * @returns {boolean} whether index was changed or not\r\n   */\r\n  moveIndexBy(diff, animate, velocityX) {\r\n    const { pswp } = this;\r\n    let newIndex = pswp.potentialIndex + diff;\r\n    const numSlides = pswp.getNumItems();\r\n\r\n    if (pswp.canLoop()) {\r\n      newIndex = pswp.getLoopedIndex(newIndex);\r\n      const distance = (diff + numSlides) % numSlides;\r\n      if (distance <= numSlides / 2) {\r\n        // go forward\r\n        diff = distance;\r\n      } else {\r\n        // go backwards\r\n        diff = distance - numSlides;\r\n      }\r\n    } else {\r\n      if (newIndex < 0) {\r\n        newIndex = 0;\r\n      } else if (newIndex >= numSlides) {\r\n        newIndex = numSlides - 1;\r\n      }\r\n      diff = newIndex - pswp.potentialIndex;\r\n    }\r\n\r\n    pswp.potentialIndex = newIndex;\r\n    this._currPositionIndex -= diff;\r\n\r\n    pswp.animations.stopMainScroll();\r\n\r\n    const destinationX = this.getCurrSlideX();\r\n    if (!animate) {\r\n      this.moveTo(destinationX);\r\n      this.updateCurrItem();\r\n    } else {\r\n      pswp.animations.startSpring({\r\n        isMainScroll: true,\r\n        start: this.x,\r\n        end: destinationX,\r\n        velocity: velocityX || 0,\r\n        naturalFrequency: 30,\r\n        dampingRatio: 1, //0.7,\r\n        onUpdate: (x) => {\r\n          this.moveTo(x);\r\n        },\r\n        onComplete: () => {\r\n          this.updateCurrItem();\r\n          pswp.appendHeavy();\r\n        }\r\n      });\r\n\r\n      let currDiff = pswp.potentialIndex - pswp.currIndex;\r\n      if (pswp.canLoop()) {\r\n        const currDistance = (currDiff + numSlides) % numSlides;\r\n        if (currDistance <= numSlides / 2) {\r\n          // go forward\r\n          currDiff = currDistance;\r\n        } else {\r\n          // go backwards\r\n          currDiff = currDistance - numSlides;\r\n        }\r\n      }\r\n\r\n      // Force-append new slides during transition\r\n      // if difference between slides is more than 1\r\n      if (Math.abs(currDiff) > 1) {\r\n        this.updateCurrItem();\r\n      }\r\n    }\r\n\r\n    return Boolean(diff);\r\n  }\r\n\r\n  /**\r\n   * X position of the main scroll for the current slide\r\n   * (ignores position during dragging)\r\n   * @returns {number}\r\n   */\r\n  getCurrSlideX() {\r\n    return this.slideWidth * this._currPositionIndex;\r\n  }\r\n\r\n  /**\r\n   * Whether scroll position is shifted.\r\n   * For example, it will return true if the scroll is being dragged or animated.\r\n   * @returns {boolean}\r\n   */\r\n  isShifted() {\r\n    return this.x !== this.getCurrSlideX();\r\n  }\r\n\r\n  /**\r\n   * Update slides X positions and set their content\r\n   */\r\n  updateCurrItem() {\r\n    const { pswp } = this;\r\n    const positionDifference = this._prevPositionIndex - this._currPositionIndex;\r\n\r\n    if (!positionDifference) {\r\n      return;\r\n    }\r\n\r\n    this._prevPositionIndex = this._currPositionIndex;\r\n\r\n    pswp.currIndex = pswp.potentialIndex;\r\n\r\n    let diffAbs = Math.abs(positionDifference);\r\n    /** @type {ItemHolder | undefined} */\r\n    let tempHolder;\r\n\r\n    if (diffAbs >= 3) {\r\n      this._containerShiftIndex += positionDifference + (positionDifference > 0 ? -3 : 3);\r\n      diffAbs = 3;\r\n    }\r\n\r\n    for (let i = 0; i < diffAbs; i++) {\r\n      if (positionDifference > 0) {\r\n        tempHolder = this.itemHolders.shift();\r\n        if (tempHolder) {\r\n          this.itemHolders[2] = tempHolder; // move first to last\r\n\r\n          this._containerShiftIndex++;\r\n\r\n          setTransform(tempHolder.el, (this._containerShiftIndex + 2) * this.slideWidth);\r\n\r\n          pswp.setContent(tempHolder, (pswp.currIndex - diffAbs) + i + 2);\r\n        }\r\n      } else {\r\n        tempHolder = this.itemHolders.pop();\r\n        if (tempHolder) {\r\n          this.itemHolders.unshift(tempHolder); // move last to first\r\n\r\n          this._containerShiftIndex--;\r\n\r\n          setTransform(tempHolder.el, this._containerShiftIndex * this.slideWidth);\r\n\r\n          pswp.setContent(tempHolder, (pswp.currIndex + diffAbs) - i - 2);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Reset transfrom every 50ish navigations in one direction.\r\n    //\r\n    // Otherwise transform will keep growing indefinitely,\r\n    // which might cause issues as browsers have a maximum transform limit.\r\n    // I wasn't able to reach it, but just to be safe.\r\n    // This should not cause noticable lag.\r\n    if (Math.abs(this._containerShiftIndex) > 50 && !this.isShifted()) {\r\n      this.resetPosition();\r\n      this.resize();\r\n    }\r\n\r\n    // Pan transition might be running (and consntantly updating pan position)\r\n    pswp.animations.stopAllPan();\r\n\r\n    this.itemHolders.forEach((itemHolder, i) => {\r\n      if (itemHolder.slide) {\r\n        // Slide in the 2nd holder is always active\r\n        itemHolder.slide.setIsActive(i === 1);\r\n      }\r\n    });\r\n\r\n    pswp.currSlide = this.itemHolders[1]?.slide;\r\n    pswp.contentLoader.updateLazy(positionDifference);\r\n\r\n    if (pswp.currSlide) {\r\n      pswp.currSlide.applyCurrentZoomPan();\r\n    }\r\n\r\n    pswp.dispatch('change');\r\n  }\r\n\r\n  /**\r\n   * Move the X position of the main scroll container\r\n   *\r\n   * @param {number} x\r\n   * @param {boolean} [dragging]\r\n   */\r\n  moveTo(x, dragging) {\r\n    if (!this.pswp.canLoop() && dragging) {\r\n      // Apply friction\r\n      let newSlideIndexOffset = ((this.slideWidth * this._currPositionIndex) - x) / this.slideWidth;\r\n      newSlideIndexOffset += this.pswp.currIndex;\r\n      const delta = Math.round(x - this.x);\r\n\r\n      if ((newSlideIndexOffset < 0 && delta > 0)\r\n          || (newSlideIndexOffset >= this.pswp.getNumItems() - 1 && delta < 0)) {\r\n        x = this.x + (delta * MAIN_SCROLL_END_FRICTION);\r\n      }\r\n    }\r\n\r\n    this.x = x;\r\n\r\n    if (this.pswp.container) {\r\n      setTransform(this.pswp.container, x);\r\n    }\r\n\r\n    this.pswp.dispatch('moveMainScroll', { x, dragging: dragging ?? false });\r\n  }\r\n}\r\n\r\nexport default MainScroll;\r\n","import { specialKeyUsed } from './util/util.js';\r\n\r\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('./types.js').Methods<T>} Methods<T>\r\n */\r\n\r\nconst KeyboardKeyCodesMap = {\r\n  Escape: 27,\r\n  z: 90,\r\n  ArrowLeft: 37,\r\n  ArrowUp: 38,\r\n  ArrowRight: 39,\r\n  ArrowDown: 40,\r\n  Tab: 9,\r\n};\r\n\r\n/**\r\n * @template {keyof KeyboardKeyCodesMap} T\r\n * @param {T} key\r\n * @param {boolean} isKeySupported\r\n * @returns {T | number | undefined}\r\n */\r\nconst getKeyboardEventKey = (key, isKeySupported) => {\r\n  return isKeySupported ? key : KeyboardKeyCodesMap[key];\r\n};\r\n\r\n/**\r\n * - Manages keyboard shortcuts.\r\n * - Helps trap focus within photoswipe.\r\n */\r\nclass Keyboard {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    /** @private */\r\n    this._wasFocused = false;\r\n\r\n    pswp.on('bindEvents', () => {\r\n      // Dialog was likely opened by keyboard if initial point is not defined\r\n      if (!pswp.options.initialPointerPos) {\r\n        // focus causes layout,\r\n        // which causes lag during the animation,\r\n        // that's why we delay it until the opener transition ends\r\n        this._focusRoot();\r\n      }\r\n\r\n      pswp.events.add(document, 'focusin', /** @type EventListener */(this._onFocusIn.bind(this)));\r\n      pswp.events.add(document, 'keydown', /** @type EventListener */(this._onKeyDown.bind(this)));\r\n    });\r\n\r\n    const lastActiveElement = /** @type {HTMLElement} */ (document.activeElement);\r\n    pswp.on('destroy', () => {\r\n      if (pswp.options.returnFocus\r\n          && lastActiveElement\r\n          && this._wasFocused) {\r\n        lastActiveElement.focus();\r\n      }\r\n    });\r\n  }\r\n\r\n  /** @private */\r\n  _focusRoot() {\r\n    if (!this._wasFocused && this.pswp.element) {\r\n      this.pswp.element.focus();\r\n      this._wasFocused = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {KeyboardEvent} e\r\n   */\r\n  _onKeyDown(e) {\r\n    const { pswp } = this;\r\n\r\n    if (pswp.dispatch('keydown', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (specialKeyUsed(e)) {\r\n      // don't do anything if special key pressed\r\n      // to prevent from overriding default browser actions\r\n      // for example, in Chrome on Mac cmd+arrow-left returns to previous page\r\n      return;\r\n    }\r\n\r\n    /** @type {Methods<PhotoSwipe> | undefined} */\r\n    let keydownAction;\r\n    /** @type {'x' | 'y' | undefined} */\r\n    let axis;\r\n    let isForward = false;\r\n    const isKeySupported = 'key' in e;\r\n\r\n    switch (isKeySupported ? e.key : e.keyCode) {\r\n      case getKeyboardEventKey('Escape', isKeySupported):\r\n        if (pswp.options.escKey) {\r\n          keydownAction = 'close';\r\n        }\r\n        break;\r\n      case getKeyboardEventKey('z', isKeySupported):\r\n        keydownAction = 'toggleZoom';\r\n        break;\r\n      case getKeyboardEventKey('ArrowLeft', isKeySupported):\r\n        axis = 'x';\r\n        break;\r\n      case getKeyboardEventKey('ArrowUp', isKeySupported):\r\n        axis = 'y';\r\n        break;\r\n      case getKeyboardEventKey('ArrowRight', isKeySupported):\r\n        axis = 'x';\r\n        isForward = true;\r\n        break;\r\n      case getKeyboardEventKey('ArrowDown', isKeySupported):\r\n        isForward = true;\r\n        axis = 'y';\r\n        break;\r\n      case getKeyboardEventKey('Tab', isKeySupported):\r\n        this._focusRoot();\r\n        break;\r\n      default:\r\n    }\r\n\r\n    // if left/right/top/bottom key\r\n    if (axis) {\r\n      // prevent page scroll\r\n      e.preventDefault();\r\n\r\n      const { currSlide } = pswp;\r\n\r\n      if (pswp.options.arrowKeys\r\n          && axis === 'x'\r\n          && pswp.getNumItems() > 1) {\r\n        keydownAction = isForward ? 'next' : 'prev';\r\n      } else if (currSlide && currSlide.currZoomLevel > currSlide.zoomLevels.fit) {\r\n        // up/down arrow keys pan the image vertically\r\n        // left/right arrow keys pan horizontally.\r\n        // Unless there is only one image,\r\n        // or arrowKeys option is disabled\r\n        currSlide.pan[axis] += isForward ? -80 : 80;\r\n        currSlide.panTo(currSlide.pan.x, currSlide.pan.y);\r\n      }\r\n    }\r\n\r\n    if (keydownAction) {\r\n      e.preventDefault();\r\n      // @ts-ignore\r\n      pswp[keydownAction]();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Trap focus inside photoswipe\r\n   *\r\n   * @private\r\n   * @param {FocusEvent} e\r\n   */\r\n  _onFocusIn(e) {\r\n    const { template } = this.pswp;\r\n    if (template\r\n        && document !== e.target\r\n        && template !== e.target\r\n        && !template.contains(/** @type {Node} */ (e.target))) {\r\n      // focus root element\r\n      template.focus();\r\n    }\r\n  }\r\n}\r\n\r\nexport default Keyboard;\r\n","import { setTransitionStyle, removeTransitionStyle } from './util.js';\r\n\r\nconst DEFAULT_EASING = 'cubic-bezier(.4,0,.22,1)';\r\n\r\n/** @typedef {import('./animations.js').SharedAnimationProps} SharedAnimationProps */\r\n\r\n/** @typedef {Object} DefaultCssAnimationProps\r\n *\r\n * @prop {HTMLElement} target\r\n * @prop {number} [duration]\r\n * @prop {string} [easing]\r\n * @prop {string} [transform]\r\n * @prop {string} [opacity]\r\n * */\r\n\r\n/** @typedef {SharedAnimationProps & DefaultCssAnimationProps} CssAnimationProps */\r\n\r\n/**\r\n * Runs CSS transition.\r\n */\r\nclass CSSAnimation {\r\n  /**\r\n   * onComplete can be unpredictable, be careful about current state\r\n   *\r\n   * @param {CssAnimationProps} props\r\n   */\r\n  constructor(props) {\r\n    this.props = props;\r\n    const {\r\n      target,\r\n      onComplete,\r\n      transform,\r\n      onFinish = () => {},\r\n      duration = 333,\r\n      easing = DEFAULT_EASING,\r\n    } = props;\r\n\r\n    this.onFinish = onFinish;\r\n\r\n    // support only transform and opacity\r\n    const prop = transform ? 'transform' : 'opacity';\r\n    const propValue = props[prop] ?? '';\r\n\r\n    /** @private */\r\n    this._target = target;\r\n    /** @private */\r\n    this._onComplete = onComplete;\r\n    /** @private */\r\n    this._finished = false;\r\n\r\n    /** @private */\r\n    this._onTransitionEnd = this._onTransitionEnd.bind(this);\r\n\r\n    // Using timeout hack to make sure that animation\r\n    // starts even if the animated property was changed recently,\r\n    // otherwise transitionend might not fire or transition won't start.\r\n    // https://drafts.csswg.org/css-transitions/#starting\r\n    //\r\n    // ¯\\_(ツ)_/¯\r\n    /** @private */\r\n    this._helperTimeout = setTimeout(() => {\r\n      setTransitionStyle(target, prop, duration, easing);\r\n      this._helperTimeout = setTimeout(() => {\r\n        target.addEventListener('transitionend', this._onTransitionEnd, false);\r\n        target.addEventListener('transitioncancel', this._onTransitionEnd, false);\r\n\r\n        // Safari occasionally does not emit transitionend event\r\n        // if element property was modified during the transition,\r\n        // which may be caused by resize or third party component,\r\n        // using timeout as a safety fallback\r\n        this._helperTimeout = setTimeout(() => {\r\n          this._finalizeAnimation();\r\n        }, duration + 500);\r\n        target.style[prop] = propValue;\r\n      }, 30); // Do not reduce this number\r\n    }, 0);\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {TransitionEvent} e\r\n   */\r\n  _onTransitionEnd(e) {\r\n    if (e.target === this._target) {\r\n      this._finalizeAnimation();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _finalizeAnimation() {\r\n    if (!this._finished) {\r\n      this._finished = true;\r\n      this.onFinish();\r\n      if (this._onComplete) {\r\n        this._onComplete();\r\n      }\r\n    }\r\n  }\r\n\r\n  // Destroy is called automatically onFinish\r\n  destroy() {\r\n    if (this._helperTimeout) {\r\n      clearTimeout(this._helperTimeout);\r\n    }\r\n    removeTransitionStyle(this._target);\r\n    this._target.removeEventListener('transitionend', this._onTransitionEnd, false);\r\n    this._target.removeEventListener('transitioncancel', this._onTransitionEnd, false);\r\n    if (!this._finished) {\r\n      this._finalizeAnimation();\r\n    }\r\n  }\r\n}\r\n\r\nexport default CSSAnimation;\r\n","const DEFAULT_NATURAL_FREQUENCY = 12;\r\nconst DEFAULT_DAMPING_RATIO = 0.75;\r\n\r\n/**\r\n * Spring easing helper\r\n */\r\nclass SpringEaser {\r\n  /**\r\n   * @param {number} initialVelocity Initial velocity, px per ms.\r\n   *\r\n   * @param {number} [dampingRatio]\r\n   * Determines how bouncy animation will be.\r\n   * From 0 to 1, 0 - always overshoot, 1 - do not overshoot.\r\n   * \"overshoot\" refers to part of animation that\r\n   * goes beyond the final value.\r\n   *\r\n   * @param {number} [naturalFrequency]\r\n   * Determines how fast animation will slow down.\r\n   * The higher value - the stiffer the transition will be,\r\n   * and the faster it will slow down.\r\n   * Recommended value from 10 to 50\r\n   */\r\n  constructor(initialVelocity, dampingRatio, naturalFrequency) {\r\n    this.velocity = initialVelocity * 1000; // convert to \"pixels per second\"\r\n\r\n    // https://en.wikipedia.org/wiki/Damping_ratio\r\n    this._dampingRatio = dampingRatio || DEFAULT_DAMPING_RATIO;\r\n\r\n    // https://en.wikipedia.org/wiki/Natural_frequency\r\n    this._naturalFrequency = naturalFrequency || DEFAULT_NATURAL_FREQUENCY;\r\n\r\n    this._dampedFrequency = this._naturalFrequency;\r\n\r\n    if (this._dampingRatio < 1) {\r\n      this._dampedFrequency *= Math.sqrt(1 - this._dampingRatio * this._dampingRatio);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {number} deltaPosition Difference between current and end position of the animation\r\n   * @param {number} deltaTime Frame duration in milliseconds\r\n   *\r\n   * @returns {number} Displacement, relative to the end position.\r\n   */\r\n  easeFrame(deltaPosition, deltaTime) {\r\n    // Inspired by Apple Webkit and Android spring function implementation\r\n    // https://en.wikipedia.org/wiki/Oscillation\r\n    // https://en.wikipedia.org/wiki/Damping_ratio\r\n    // we ignore mass (assume that it's 1kg)\r\n\r\n    let displacement = 0;\r\n    let coeff;\r\n\r\n    deltaTime /= 1000;\r\n\r\n    const naturalDumpingPow = Math.E ** (-this._dampingRatio * this._naturalFrequency * deltaTime);\r\n\r\n    if (this._dampingRatio === 1) {\r\n      coeff = this.velocity + this._naturalFrequency * deltaPosition;\r\n\r\n      displacement = (deltaPosition + coeff * deltaTime) * naturalDumpingPow;\r\n\r\n      this.velocity = displacement\r\n                        * (-this._naturalFrequency) + coeff\r\n                        * naturalDumpingPow;\r\n    } else if (this._dampingRatio < 1) {\r\n      coeff = (1 / this._dampedFrequency)\r\n                * (this._dampingRatio * this._naturalFrequency * deltaPosition + this.velocity);\r\n\r\n      const dumpedFCos = Math.cos(this._dampedFrequency * deltaTime);\r\n      const dumpedFSin = Math.sin(this._dampedFrequency * deltaTime);\r\n\r\n      displacement = naturalDumpingPow\r\n                       * (deltaPosition * dumpedFCos + coeff * dumpedFSin);\r\n\r\n      this.velocity = displacement\r\n                        * (-this._naturalFrequency)\r\n                        * this._dampingRatio\r\n                        + naturalDumpingPow\r\n                        * (-this._dampedFrequency * deltaPosition * dumpedFSin\r\n                        + this._dampedFrequency * coeff * dumpedFCos);\r\n    }\r\n\r\n    // Overdamped (>1) damping ratio is not supported\r\n\r\n    return displacement;\r\n  }\r\n}\r\n\r\nexport default SpringEaser;\r\n","import SpringEaser from './spring-easer.js';\r\n\r\n/** @typedef {import('./animations.js').SharedAnimationProps} SharedAnimationProps */\r\n\r\n/**\r\n * @typedef {Object} DefaultSpringAnimationProps\r\n *\r\n * @prop {number} start\r\n * @prop {number} end\r\n * @prop {number} velocity\r\n * @prop {number} [dampingRatio]\r\n * @prop {number} [naturalFrequency]\r\n * @prop {(end: number) => void} onUpdate\r\n */\r\n\r\n/** @typedef {SharedAnimationProps & DefaultSpringAnimationProps} SpringAnimationProps */\r\n\r\nclass SpringAnimation {\r\n  /**\r\n   * @param {SpringAnimationProps} props\r\n   */\r\n  constructor(props) {\r\n    this.props = props;\r\n    this._raf = 0;\r\n\r\n    const {\r\n      start,\r\n      end,\r\n      velocity,\r\n      onUpdate,\r\n      onComplete,\r\n      onFinish = () => {},\r\n      dampingRatio,\r\n      naturalFrequency\r\n    } = props;\r\n\r\n    this.onFinish = onFinish;\r\n\r\n    const easer = new SpringEaser(velocity, dampingRatio, naturalFrequency);\r\n    let prevTime = Date.now();\r\n    let deltaPosition = start - end;\r\n\r\n    const animationLoop = () => {\r\n      if (this._raf) {\r\n        deltaPosition = easer.easeFrame(deltaPosition, Date.now() - prevTime);\r\n\r\n        // Stop the animation if velocity is low and position is close to end\r\n        if (Math.abs(deltaPosition) < 1 && Math.abs(easer.velocity) < 50) {\r\n          // Finalize the animation\r\n          onUpdate(end);\r\n          if (onComplete) {\r\n            onComplete();\r\n          }\r\n          this.onFinish();\r\n        } else {\r\n          prevTime = Date.now();\r\n          onUpdate(deltaPosition + end);\r\n          this._raf = requestAnimationFrame(animationLoop);\r\n        }\r\n      }\r\n    };\r\n\r\n    this._raf = requestAnimationFrame(animationLoop);\r\n  }\r\n\r\n  // Destroy is called automatically onFinish\r\n  destroy() {\r\n    if (this._raf >= 0) {\r\n      cancelAnimationFrame(this._raf);\r\n    }\r\n    this._raf = 0;\r\n  }\r\n}\r\n\r\nexport default SpringAnimation;\r\n","import CSSAnimation from './css-animation.js';\r\nimport SpringAnimation from './spring-animation.js';\r\n\r\n/** @typedef {import('./css-animation.js').CssAnimationProps} CssAnimationProps */\r\n/** @typedef {import('./spring-animation.js').SpringAnimationProps} SpringAnimationProps */\r\n\r\n/** @typedef {Object} SharedAnimationProps\r\n * @prop {string} [name]\r\n * @prop {boolean} [isPan]\r\n * @prop {boolean} [isMainScroll]\r\n * @prop {VoidFunction} [onComplete]\r\n * @prop {VoidFunction} [onFinish]\r\n */\r\n\r\n/** @typedef {SpringAnimation | CSSAnimation} Animation */\r\n/** @typedef {SpringAnimationProps | CssAnimationProps} AnimationProps */\r\n\r\n/**\r\n * Manages animations\r\n */\r\nclass Animations {\r\n  constructor() {\r\n    /** @type {Animation[]} */\r\n    this.activeAnimations = [];\r\n  }\r\n\r\n  /**\r\n   * @param {SpringAnimationProps} props\r\n   */\r\n  startSpring(props) {\r\n    this._start(props, true);\r\n  }\r\n\r\n  /**\r\n   * @param {CssAnimationProps} props\r\n   */\r\n  startTransition(props) {\r\n    this._start(props);\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {AnimationProps} props\r\n   * @param {boolean} [isSpring]\r\n   * @returns {Animation}\r\n   */\r\n  _start(props, isSpring) {\r\n    const animation = isSpring\r\n      ? new SpringAnimation(/** @type SpringAnimationProps */ (props))\r\n      : new CSSAnimation(/** @type CssAnimationProps */ (props));\r\n\r\n    this.activeAnimations.push(animation);\r\n    animation.onFinish = () => this.stop(animation);\r\n\r\n    return animation;\r\n  }\r\n\r\n  /**\r\n   * @param {Animation} animation\r\n   */\r\n  stop(animation) {\r\n    animation.destroy();\r\n    const index = this.activeAnimations.indexOf(animation);\r\n    if (index > -1) {\r\n      this.activeAnimations.splice(index, 1);\r\n    }\r\n  }\r\n\r\n  stopAll() { // _stopAllAnimations\r\n    this.activeAnimations.forEach((animation) => {\r\n      animation.destroy();\r\n    });\r\n    this.activeAnimations = [];\r\n  }\r\n\r\n  /**\r\n   * Stop all pan or zoom transitions\r\n   */\r\n  stopAllPan() {\r\n    this.activeAnimations = this.activeAnimations.filter((animation) => {\r\n      if (animation.props.isPan) {\r\n        animation.destroy();\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    });\r\n  }\r\n\r\n  stopMainScroll() {\r\n    this.activeAnimations = this.activeAnimations.filter((animation) => {\r\n      if (animation.props.isMainScroll) {\r\n        animation.destroy();\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Returns true if main scroll transition is running\r\n   */\r\n  // isMainScrollRunning() {\r\n  //   return this.activeAnimations.some((animation) => {\r\n  //     return animation.props.isMainScroll;\r\n  //   });\r\n  // }\r\n\r\n  /**\r\n   * Returns true if any pan or zoom transition is running\r\n   */\r\n  isPanRunning() {\r\n    return this.activeAnimations.some((animation) => {\r\n      return animation.props.isPan;\r\n    });\r\n  }\r\n}\r\n\r\nexport default Animations;\r\n","/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\r\n\r\n/**\r\n * Handles scroll wheel.\r\n * Can pan and zoom current slide image.\r\n */\r\nclass ScrollWheel {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    pswp.events.add(pswp.element, 'wheel', /** @type EventListener */(this._onWheel.bind(this)));\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {WheelEvent} e\r\n   */\r\n  _onWheel(e) {\r\n    e.preventDefault();\r\n    const { currSlide } = this.pswp;\r\n    let { deltaX, deltaY } = e;\r\n\r\n    if (!currSlide) {\r\n      return;\r\n    }\r\n\r\n    if (this.pswp.dispatch('wheel', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (e.ctrlKey || this.pswp.options.wheelToZoom) {\r\n      // zoom\r\n      if (currSlide.isZoomable()) {\r\n        let zoomFactor = -deltaY;\r\n        if (e.deltaMode === 1 /* DOM_DELTA_LINE */) {\r\n          zoomFactor *= 0.05;\r\n        } else {\r\n          zoomFactor *= e.deltaMode ? 1 : 0.002;\r\n        }\r\n        zoomFactor = 2 ** zoomFactor;\r\n\r\n        const destZoomLevel = currSlide.currZoomLevel * zoomFactor;\r\n        currSlide.zoomTo(destZoomLevel, {\r\n          x: e.clientX,\r\n          y: e.clientY\r\n        });\r\n      }\r\n    } else {\r\n      // pan\r\n      if (currSlide.isPannable()) {\r\n        if (e.deltaMode === 1 /* DOM_DELTA_LINE */) {\r\n          // 18 - average line height\r\n          deltaX *= 18;\r\n          deltaY *= 18;\r\n        }\r\n\r\n        currSlide.panTo(\r\n          currSlide.pan.x - deltaX,\r\n          currSlide.pan.y - deltaY\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport default ScrollWheel;\r\n","import { createElement } from '../util/util.js';\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('../types.js').Methods<T>} Methods<T>\r\n */\r\n\r\n/**\r\n * @typedef {Object} UIElementMarkupProps\r\n * @prop {boolean} [isCustomSVG]\r\n * @prop {string} inner\r\n * @prop {string} [outlineID]\r\n * @prop {number | string} [size]\r\n */\r\n\r\n/**\r\n * @typedef {Object} UIElementData\r\n * @prop {DefaultUIElements | string} [name]\r\n * @prop {string} [className]\r\n * @prop {UIElementMarkup} [html]\r\n * @prop {boolean} [isButton]\r\n * @prop {keyof HTMLElementTagNameMap} [tagName]\r\n * @prop {string} [title]\r\n * @prop {string} [ariaLabel]\r\n * @prop {(element: HTMLElement, pswp: PhotoSwipe) => void} [onInit]\r\n * @prop {Methods<PhotoSwipe> | ((e: MouseEvent, element: HTMLElement, pswp: PhotoSwipe) => void)} [onClick]\r\n * @prop {'bar' | 'wrapper' | 'root'} [appendTo]\r\n * @prop {number} [order]\r\n */\r\n\r\n/** @typedef {'arrowPrev' | 'arrowNext' | 'close' | 'zoom' | 'counter'} DefaultUIElements */\r\n\r\n/** @typedef {string | UIElementMarkupProps} UIElementMarkup */\r\n\r\n/**\r\n * @param {UIElementMarkup} [htmlData]\r\n * @returns {string}\r\n */\r\nfunction addElementHTML(htmlData) {\r\n  if (typeof htmlData === 'string') {\r\n    // Allow developers to provide full svg,\r\n    // For example:\r\n    // <svg viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" aria-hidden=\"true\" class=\"pswp__icn\">\r\n    //   <path d=\"...\" />\r\n    //   <circle ... />\r\n    // </svg>\r\n    // Can also be any HTML string.\r\n    return htmlData;\r\n  }\r\n\r\n  if (!htmlData || !htmlData.isCustomSVG) {\r\n    return '';\r\n  }\r\n\r\n  const svgData = htmlData;\r\n  let out = '<svg aria-hidden=\"true\" class=\"pswp__icn\" viewBox=\"0 0 %d %d\" width=\"%d\" height=\"%d\">';\r\n  // replace all %d with size\r\n  out = out.split('%d').join(/** @type {string} */ (svgData.size || 32));\r\n\r\n  // Icons may contain outline/shadow,\r\n  // to make it we \"clone\" base icon shape and add border to it.\r\n  // Icon itself and border are styled via CSS.\r\n  //\r\n  // Property shadowID defines ID of element that should be cloned.\r\n  if (svgData.outlineID) {\r\n    out += '<use class=\"pswp__icn-shadow\" xlink:href=\"#' + svgData.outlineID + '\"/>';\r\n  }\r\n\r\n  out += svgData.inner;\r\n\r\n  out += '</svg>';\r\n\r\n  return out;\r\n}\r\n\r\nclass UIElement {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   * @param {UIElementData} data\r\n   */\r\n  constructor(pswp, data) {\r\n    const name = data.name || data.className;\r\n    let elementHTML = data.html;\r\n\r\n    // @ts-expect-error lookup only by `data.name` maybe?\r\n    if (pswp.options[name] === false) {\r\n      // exit if element is disabled from options\r\n      return;\r\n    }\r\n\r\n    // Allow to override SVG icons from options\r\n    // @ts-expect-error lookup only by `data.name` maybe?\r\n    if (typeof pswp.options[name + 'SVG'] === 'string') {\r\n      // arrowPrevSVG\r\n      // arrowNextSVG\r\n      // closeSVG\r\n      // zoomSVG\r\n      // @ts-expect-error lookup only by `data.name` maybe?\r\n      elementHTML = pswp.options[name + 'SVG'];\r\n    }\r\n\r\n    pswp.dispatch('uiElementCreate', { data });\r\n\r\n    let className = '';\r\n    if (data.isButton) {\r\n      className += 'pswp__button ';\r\n      className += (data.className || `pswp__button--${data.name}`);\r\n    } else {\r\n      className += (data.className || `pswp__${data.name}`);\r\n    }\r\n\r\n    let tagName = data.isButton ? (data.tagName || 'button') : (data.tagName || 'div');\r\n    tagName = /** @type {keyof HTMLElementTagNameMap} */ (tagName.toLowerCase());\r\n    /** @type {HTMLElement} */\r\n    const element = createElement(className, tagName);\r\n\r\n    if (data.isButton) {\r\n      if (tagName === 'button') {\r\n        /** @type {HTMLButtonElement} */ (element).type = 'button';\r\n      }\r\n\r\n      let { title } = data;\r\n      const { ariaLabel } = data;\r\n\r\n      // @ts-expect-error lookup only by `data.name` maybe?\r\n      if (typeof pswp.options[name + 'Title'] === 'string') {\r\n        // @ts-expect-error lookup only by `data.name` maybe?\r\n        title = pswp.options[name + 'Title'];\r\n      }\r\n\r\n      if (title) {\r\n        element.title = title;\r\n      }\r\n\r\n      const ariaText = ariaLabel || title;\r\n      if (ariaText) {\r\n        element.setAttribute('aria-label', ariaText);\r\n      }\r\n    }\r\n\r\n    element.innerHTML = addElementHTML(elementHTML);\r\n\r\n    if (data.onInit) {\r\n      data.onInit(element, pswp);\r\n    }\r\n\r\n    if (data.onClick) {\r\n      element.onclick = (e) => {\r\n        if (typeof data.onClick === 'string') {\r\n          // @ts-ignore\r\n          pswp[data.onClick]();\r\n        } else if (typeof data.onClick === 'function') {\r\n          data.onClick(e, element, pswp);\r\n        }\r\n      };\r\n    }\r\n\r\n    // Top bar is default position\r\n    const appendTo = data.appendTo || 'bar';\r\n    /** @type {HTMLElement | undefined} root element by default */\r\n    let container = pswp.element;\r\n    if (appendTo === 'bar') {\r\n      if (!pswp.topBar) {\r\n        pswp.topBar = createElement('pswp__top-bar pswp__hide-on-close', 'div', pswp.scrollWrap);\r\n      }\r\n      container = pswp.topBar;\r\n    } else {\r\n      // element outside of top bar gets a secondary class\r\n      // that makes element fade out on close\r\n      element.classList.add('pswp__hide-on-close');\r\n\r\n      if (appendTo === 'wrapper') {\r\n        container = pswp.scrollWrap;\r\n      }\r\n    }\r\n\r\n    container?.appendChild(pswp.applyFilters('uiElement', element, data));\r\n  }\r\n}\r\n\r\nexport default UIElement;\r\n","/*\r\n  Backward and forward arrow buttons\r\n */\r\n\r\n/** @typedef {import('./ui-element.js').UIElementData} UIElementData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n\r\n/**\r\n *\r\n * @param {HTMLElement} element\r\n * @param {PhotoSwipe} pswp\r\n * @param {boolean} [isNextButton]\r\n */\r\nfunction initArrowButton(element, pswp, isNextButton) {\r\n  element.classList.add('pswp__button--arrow');\r\n  // TODO: this should point to a unique id for this instance\r\n  element.setAttribute('aria-controls', 'pswp__items');\r\n  pswp.on('change', () => {\r\n    if (!pswp.options.loop) {\r\n      if (isNextButton) {\r\n        /** @type {HTMLButtonElement} */\r\n        (element).disabled = !(pswp.currIndex < pswp.getNumItems() - 1);\r\n      } else {\r\n        /** @type {HTMLButtonElement} */\r\n        (element).disabled = !(pswp.currIndex > 0);\r\n      }\r\n    }\r\n  });\r\n}\r\n\r\n/** @type {UIElementData} */\r\nexport const arrowPrev = {\r\n  name: 'arrowPrev',\r\n  className: 'pswp__button--arrow--prev',\r\n  title: 'Previous',\r\n  order: 10,\r\n  isButton: true,\r\n  appendTo: 'wrapper',\r\n  html: {\r\n    isCustomSVG: true,\r\n    size: 60,\r\n    inner: '<path d=\"M29 43l-3 3-16-16 16-16 3 3-13 13 13 13z\" id=\"pswp__icn-arrow\"/>',\r\n    outlineID: 'pswp__icn-arrow'\r\n  },\r\n  onClick: 'prev',\r\n  onInit: initArrowButton\r\n};\r\n\r\n/** @type {UIElementData} */\r\nexport const arrowNext = {\r\n  name: 'arrowNext',\r\n  className: 'pswp__button--arrow--next',\r\n  title: 'Next',\r\n  order: 11,\r\n  isButton: true,\r\n  appendTo: 'wrapper',\r\n  html: {\r\n    isCustomSVG: true,\r\n    size: 60,\r\n    inner: '<use xlink:href=\"#pswp__icn-arrow\"/>',\r\n    outlineID: 'pswp__icn-arrow'\r\n  },\r\n  onClick: 'next',\r\n  onInit: (el, pswp) => {\r\n    initArrowButton(el, pswp, true);\r\n  }\r\n};\r\n","/** @type {import('./ui-element.js').UIElementData} UIElementData */\r\nconst closeButton = {\r\n  name: 'close',\r\n  title: 'Close',\r\n  order: 20,\r\n  isButton: true,\r\n  html: {\r\n    isCustomSVG: true,\r\n    inner: '<path d=\"M24 10l-2-2-6 6-6-6-2 2 6 6-6 6 2 2 6-6 6 6 2-2-6-6z\" id=\"pswp__icn-close\"/>',\r\n    outlineID: 'pswp__icn-close'\r\n  },\r\n  onClick: 'close'\r\n};\r\n\r\nexport default closeButton;\r\n","/** @type {import('./ui-element.js').UIElementData} UIElementData */\r\nconst zoomButton = {\r\n  name: 'zoom',\r\n  title: 'Zoom',\r\n  order: 10,\r\n  isButton: true,\r\n  html: {\r\n    isCustomSVG: true,\r\n    // eslint-disable-next-line max-len\r\n    inner: '<path d=\"M17.426 19.926a6 6 0 1 1 1.5-1.5L23 22.5 21.5 24l-4.074-4.074z\" id=\"pswp__icn-zoom\"/>'\r\n          + '<path fill=\"currentColor\" class=\"pswp__zoom-icn-bar-h\" d=\"M11 16v-2h6v2z\"/>'\r\n          + '<path fill=\"currentColor\" class=\"pswp__zoom-icn-bar-v\" d=\"M13 12h2v6h-2z\"/>',\r\n    outlineID: 'pswp__icn-zoom'\r\n  },\r\n  onClick: 'toggleZoom'\r\n};\r\n\r\nexport default zoomButton;\r\n","/** @type {import('./ui-element.js').UIElementData} UIElementData */\r\nexport const loadingIndicator = {\r\n  name: 'preloader',\r\n  appendTo: 'bar',\r\n  order: 7,\r\n  html: {\r\n    isCustomSVG: true,\r\n    // eslint-disable-next-line max-len\r\n    inner: '<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M21.2 16a5.2 5.2 0 1 1-5.2-5.2V8a8 8 0 1 0 8 8h-2.8Z\" id=\"pswp__icn-loading\"/>',\r\n    outlineID: 'pswp__icn-loading'\r\n  },\r\n  onInit: (indicatorElement, pswp) => {\r\n    /** @type {boolean | undefined} */\r\n    let isVisible;\r\n    /** @type {NodeJS.Timeout | null} */\r\n    let delayTimeout = null;\r\n\r\n    /**\r\n     * @param {string} className\r\n     * @param {boolean} add\r\n     */\r\n    const toggleIndicatorClass = (className, add) => {\r\n      indicatorElement.classList.toggle('pswp__preloader--' + className, add);\r\n    };\r\n\r\n    /**\r\n     * @param {boolean} visible\r\n     */\r\n    const setIndicatorVisibility = (visible) => {\r\n      if (isVisible !== visible) {\r\n        isVisible = visible;\r\n        toggleIndicatorClass('active', visible);\r\n      }\r\n    };\r\n\r\n    const updatePreloaderVisibility = () => {\r\n      if (!pswp.currSlide?.content.isLoading()) {\r\n        setIndicatorVisibility(false);\r\n        if (delayTimeout) {\r\n          clearTimeout(delayTimeout);\r\n          delayTimeout = null;\r\n        }\r\n        return;\r\n      }\r\n\r\n      if (!delayTimeout) {\r\n        // display loading indicator with delay\r\n        delayTimeout = setTimeout(() => {\r\n          setIndicatorVisibility(Boolean(pswp.currSlide?.content.isLoading()));\r\n          delayTimeout = null;\r\n        }, pswp.options.preloaderDelay);\r\n      }\r\n    };\r\n\r\n    pswp.on('change', updatePreloaderVisibility);\r\n\r\n    pswp.on('loadComplete', (e) => {\r\n      if (pswp.currSlide === e.slide) {\r\n        updatePreloaderVisibility();\r\n      }\r\n    });\r\n\r\n    // expose the method\r\n    if (pswp.ui) {\r\n      pswp.ui.updatePreloaderVisibility = updatePreloaderVisibility;\r\n    }\r\n  }\r\n};\r\n","/** @type {import('./ui-element.js').UIElementData} UIElementData */\r\nexport const counterIndicator = {\r\n  name: 'counter',\r\n  order: 5,\r\n  onInit: (counterElement, pswp) => {\r\n    pswp.on('change', () => {\r\n      counterElement.innerText = (pswp.currIndex + 1)\r\n                                  + pswp.options.indexIndicatorSep\r\n                                  + pswp.getNumItems();\r\n    });\r\n  }\r\n};\r\n","import UIElement from './ui-element.js';\r\nimport { arrowPrev, arrowNext } from './button-arrow.js';\r\nimport closeButton from './button-close.js';\r\nimport zoomButton from './button-zoom.js';\r\nimport { loadingIndicator } from './loading-indicator.js';\r\nimport { counterIndicator } from './counter-indicator.js';\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('./ui-element.js').UIElementData} UIElementData */\r\n\r\n/**\r\n * Set special class on element when image is zoomed.\r\n *\r\n * By default, it is used to adjust\r\n * zoom icon and zoom cursor via CSS.\r\n *\r\n * @param {HTMLElement} el\r\n * @param {boolean} isZoomedIn\r\n */\r\nfunction setZoomedIn(el, isZoomedIn) {\r\n  el.classList.toggle('pswp--zoomed-in', isZoomedIn);\r\n}\r\n\r\nclass UI {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    this.isRegistered = false;\r\n    /** @type {UIElementData[]} */\r\n    this.uiElementsData = [];\r\n    /** @type {(UIElement | UIElementData)[]} */\r\n    this.items = [];\r\n    /** @type {() => void} */\r\n    this.updatePreloaderVisibility = () => {};\r\n\r\n    /**\r\n     * @private\r\n     * @type {number | undefined}\r\n     */\r\n    this._lastUpdatedZoomLevel = undefined;\r\n  }\r\n\r\n  init() {\r\n    const { pswp } = this;\r\n    this.isRegistered = false;\r\n    this.uiElementsData = [\r\n      closeButton,\r\n      arrowPrev,\r\n      arrowNext,\r\n      zoomButton,\r\n      loadingIndicator,\r\n      counterIndicator\r\n    ];\r\n\r\n    pswp.dispatch('uiRegister');\r\n\r\n    // sort by order\r\n    this.uiElementsData.sort((a, b) => {\r\n      // default order is 0\r\n      return (a.order || 0) - (b.order || 0);\r\n    });\r\n\r\n    this.items = [];\r\n\r\n    this.isRegistered = true;\r\n    this.uiElementsData.forEach((uiElementData) => {\r\n      this.registerElement(uiElementData);\r\n    });\r\n\r\n    pswp.on('change', () => {\r\n      pswp.element?.classList.toggle('pswp--one-slide', pswp.getNumItems() === 1);\r\n    });\r\n\r\n    pswp.on('zoomPanUpdate', () => this._onZoomPanUpdate());\r\n  }\r\n\r\n  /**\r\n   * @param {UIElementData} elementData\r\n   */\r\n  registerElement(elementData) {\r\n    if (this.isRegistered) {\r\n      this.items.push(\r\n        new UIElement(this.pswp, elementData)\r\n      );\r\n    } else {\r\n      this.uiElementsData.push(elementData);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fired each time zoom or pan position is changed.\r\n   * Update classes that control visibility of zoom button and cursor icon.\r\n   *\r\n   * @private\r\n   */\r\n  _onZoomPanUpdate() {\r\n    const { template, currSlide, options } = this.pswp;\r\n\r\n    if (this.pswp.opener.isClosing || !template || !currSlide) {\r\n      return;\r\n    }\r\n\r\n    let { currZoomLevel } = currSlide;\r\n\r\n    // if not open yet - check against initial zoom level\r\n    if (!this.pswp.opener.isOpen) {\r\n      currZoomLevel = currSlide.zoomLevels.initial;\r\n    }\r\n\r\n    if (currZoomLevel === this._lastUpdatedZoomLevel) {\r\n      return;\r\n    }\r\n    this._lastUpdatedZoomLevel = currZoomLevel;\r\n\r\n    const currZoomLevelDiff = currSlide.zoomLevels.initial - currSlide.zoomLevels.secondary;\r\n\r\n    // Initial and secondary zoom levels are almost equal\r\n    if (Math.abs(currZoomLevelDiff) < 0.01 || !currSlide.isZoomable()) {\r\n      // disable zoom\r\n      setZoomedIn(template, false);\r\n      template.classList.remove('pswp--zoom-allowed');\r\n      return;\r\n    }\r\n\r\n    template.classList.add('pswp--zoom-allowed');\r\n\r\n    const potentialZoomLevel = currZoomLevel === currSlide.zoomLevels.initial\r\n      ? currSlide.zoomLevels.secondary : currSlide.zoomLevels.initial;\r\n\r\n    setZoomedIn(template, potentialZoomLevel <= currZoomLevel);\r\n\r\n    if (options.imageClickAction === 'zoom'\r\n        || options.imageClickAction === 'zoom-or-close') {\r\n      template.classList.add('pswp--click-to-zoom');\r\n    }\r\n  }\r\n}\r\n\r\nexport default UI;\r\n","/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n\r\n/** @typedef {{ x: number; y: number; w: number; innerRect?: { w: number; h: number; x: number; y: number } }} Bounds */\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n * @returns Bounds\r\n */\r\nfunction getBoundsByElement(el) {\r\n  const thumbAreaRect = el.getBoundingClientRect();\r\n  return {\r\n    x: thumbAreaRect.left,\r\n    y: thumbAreaRect.top,\r\n    w: thumbAreaRect.width\r\n  };\r\n}\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n * @param {number} imageWidth\r\n * @param {number} imageHeight\r\n * @returns Bounds\r\n */\r\nfunction getCroppedBoundsByElement(el, imageWidth, imageHeight) {\r\n  const thumbAreaRect = el.getBoundingClientRect();\r\n\r\n  // fill image into the area\r\n  // (do they same as object-fit:cover does to retrieve coordinates)\r\n  const hRatio = thumbAreaRect.width / imageWidth;\r\n  const vRatio = thumbAreaRect.height / imageHeight;\r\n  const fillZoomLevel = hRatio > vRatio ? hRatio : vRatio;\r\n\r\n  const offsetX = (thumbAreaRect.width - imageWidth * fillZoomLevel) / 2;\r\n  const offsetY = (thumbAreaRect.height - imageHeight * fillZoomLevel) / 2;\r\n\r\n  /**\r\n   * Coordinates of the image,\r\n   * as if it was not cropped,\r\n   * height is calculated automatically\r\n   *\r\n   * @type {Bounds}\r\n   */\r\n  const bounds = {\r\n    x: thumbAreaRect.left + offsetX,\r\n    y: thumbAreaRect.top + offsetY,\r\n    w: imageWidth * fillZoomLevel\r\n  };\r\n\r\n  // Coordinates of inner crop area\r\n  // relative to the image\r\n  bounds.innerRect = {\r\n    w: thumbAreaRect.width,\r\n    h: thumbAreaRect.height,\r\n    x: offsetX,\r\n    y: offsetY\r\n  };\r\n\r\n  return bounds;\r\n}\r\n\r\n/**\r\n * Get dimensions of thumbnail image\r\n * (click on which opens photoswipe or closes photoswipe to)\r\n *\r\n * @param {number} index\r\n * @param {SlideData} itemData\r\n * @param {PhotoSwipe} instance PhotoSwipe instance\r\n * @returns {Bounds | undefined}\r\n */\r\nexport function getThumbBounds(index, itemData, instance) {\r\n  // legacy event, before filters were introduced\r\n  const event = instance.dispatch('thumbBounds', {\r\n    index,\r\n    itemData,\r\n    instance\r\n  });\r\n  // @ts-expect-error\r\n  if (event.thumbBounds) {\r\n    // @ts-expect-error\r\n    return event.thumbBounds;\r\n  }\r\n\r\n  const { element } = itemData;\r\n  /** @type {Bounds | undefined} */\r\n  let thumbBounds;\r\n  /** @type {HTMLElement | null | undefined} */\r\n  let thumbnail;\r\n\r\n  if (element && instance.options.thumbSelector !== false) {\r\n    const thumbSelector = instance.options.thumbSelector || 'img';\r\n    thumbnail = element.matches(thumbSelector)\r\n      ? element : /** @type {HTMLElement | null} */ (element.querySelector(thumbSelector));\r\n  }\r\n\r\n  thumbnail = instance.applyFilters('thumbEl', thumbnail, itemData, index);\r\n\r\n  if (thumbnail) {\r\n    if (!itemData.thumbCropped) {\r\n      thumbBounds = getBoundsByElement(thumbnail);\r\n    } else {\r\n      thumbBounds = getCroppedBoundsByElement(\r\n        thumbnail,\r\n        itemData.width || itemData.w || 0,\r\n        itemData.height || itemData.h || 0\r\n      );\r\n    }\r\n  }\r\n\r\n  return instance.applyFilters('thumbBounds', thumbBounds, itemData, index);\r\n}\r\n","/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\r\n/** @typedef {import('../ui/ui-element.js').UIElementData} UIElementData */\r\n/** @typedef {import('../slide/content.js').default} ContentDefault */\r\n/** @typedef {import('../slide/slide.js').default} Slide */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n/** @typedef {import('../slide/zoom-level.js').default} ZoomLevel */\r\n/** @typedef {import('../slide/get-thumb-bounds.js').Bounds} Bounds */\r\n\r\n/**\r\n * Allow adding an arbitrary props to the Content\r\n * https://photoswipe.com/custom-content/#using-webp-image-format\r\n * @typedef {ContentDefault & Record<string, any>} Content\r\n */\r\n/** @typedef {{ x?: number; y?: number }} Point */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeEventsMap https://photoswipe.com/events/\r\n *\r\n *\r\n * https://photoswipe.com/adding-ui-elements/\r\n *\r\n * @prop {undefined} uiRegister\r\n * @prop {{ data: UIElementData }} uiElementCreate\r\n *\r\n *\r\n * https://photoswipe.com/events/#initialization-events\r\n *\r\n * @prop {undefined} beforeOpen\r\n * @prop {undefined} firstUpdate\r\n * @prop {undefined} initialLayout\r\n * @prop {undefined} change\r\n * @prop {undefined} afterInit\r\n * @prop {undefined} bindEvents\r\n *\r\n *\r\n * https://photoswipe.com/events/#opening-or-closing-transition-events\r\n *\r\n * @prop {undefined} openingAnimationStart\r\n * @prop {undefined} openingAnimationEnd\r\n * @prop {undefined} closingAnimationStart\r\n * @prop {undefined} closingAnimationEnd\r\n *\r\n *\r\n * https://photoswipe.com/events/#closing-events\r\n *\r\n * @prop {undefined} close\r\n * @prop {undefined} destroy\r\n *\r\n *\r\n * https://photoswipe.com/events/#pointer-and-gesture-events\r\n *\r\n * @prop {{ originalEvent: PointerEvent }} pointerDown\r\n * @prop {{ originalEvent: PointerEvent }} pointerMove\r\n * @prop {{ originalEvent: PointerEvent }} pointerUp\r\n * @prop {{ bgOpacity: number }} pinchClose can be default prevented\r\n * @prop {{ panY: number }} verticalDrag can be default prevented\r\n *\r\n *\r\n * https://photoswipe.com/events/#slide-content-events\r\n *\r\n * @prop {{ content: Content }} contentInit\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoad can be default prevented\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoadImage can be default prevented\r\n * @prop {{ content: Content; slide: Slide; isError?: boolean }} loadComplete\r\n * @prop {{ content: Content; slide: Slide }} loadError\r\n * @prop {{ content: Content; width: number; height: number }} contentResize can be default prevented\r\n * @prop {{ content: Content; width: number; height: number; slide: Slide }} imageSizeChange\r\n * @prop {{ content: Content }} contentLazyLoad can be default prevented\r\n * @prop {{ content: Content }} contentAppend can be default prevented\r\n * @prop {{ content: Content }} contentActivate can be default prevented\r\n * @prop {{ content: Content }} contentDeactivate can be default prevented\r\n * @prop {{ content: Content }} contentRemove can be default prevented\r\n * @prop {{ content: Content }} contentDestroy can be default prevented\r\n *\r\n *\r\n * undocumented\r\n *\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} imageClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} bgClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} tapAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} doubleTapAction can be default prevented\r\n *\r\n * @prop {{ originalEvent: KeyboardEvent }} keydown can be default prevented\r\n * @prop {{ x: number; dragging: boolean }} moveMainScroll\r\n * @prop {{ slide: Slide }} firstZoomPan\r\n * @prop {{ slide: Slide | undefined, data: SlideData, index: number }} gettingData\r\n * @prop {undefined} beforeResize\r\n * @prop {undefined} resize\r\n * @prop {undefined} viewportSize\r\n * @prop {undefined} updateScrollOffset\r\n * @prop {{ slide: Slide }} slideInit\r\n * @prop {{ slide: Slide }} afterSetContent\r\n * @prop {{ slide: Slide }} slideLoad\r\n * @prop {{ slide: Slide }} appendHeavy can be default prevented\r\n * @prop {{ slide: Slide }} appendHeavyContent\r\n * @prop {{ slide: Slide }} slideActivate\r\n * @prop {{ slide: Slide }} slideDeactivate\r\n * @prop {{ slide: Slide }} slideDestroy\r\n * @prop {{ destZoomLevel: number, centerPoint: Point | undefined, transitionDuration: number | false | undefined }} beforeZoomTo\r\n * @prop {{ slide: Slide }} zoomPanUpdate\r\n * @prop {{ slide: Slide }} initialZoomPan\r\n * @prop {{ slide: Slide }} calcSlideSize\r\n * @prop {undefined} resolutionChanged\r\n * @prop {{ originalEvent: WheelEvent }} wheel can be default prevented\r\n * @prop {{ content: Content }} contentAppendImage can be default prevented\r\n * @prop {{ index: number; itemData: SlideData }} lazyLoadSlide can be default prevented\r\n * @prop {undefined} lazyLoad\r\n * @prop {{ slide: Slide }} calcBounds\r\n * @prop {{ zoomLevels: ZoomLevel, slideData: SlideData }} zoomLevelsUpdate\r\n *\r\n *\r\n * legacy\r\n *\r\n * @prop {undefined} init\r\n * @prop {undefined} initialZoomIn\r\n * @prop {undefined} initialZoomOut\r\n * @prop {undefined} initialZoomInEnd\r\n * @prop {undefined} initialZoomOutEnd\r\n * @prop {{ dataSource: DataSource | undefined, numItems: number }} numItems\r\n * @prop {{ itemData: SlideData; index: number }} itemData\r\n * @prop {{ index: number, itemData: SlideData, instance: PhotoSwipe }} thumbBounds\r\n */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeFiltersMap https://photoswipe.com/filters/\r\n *\r\n * @prop {(numItems: number, dataSource: DataSource | undefined) => number} numItems\r\n * Modify the total amount of slides. Example on Data sources page.\r\n * https://photoswipe.com/filters/#numitems\r\n *\r\n * @prop {(itemData: SlideData, index: number) => SlideData} itemData\r\n * Modify slide item data. Example on Data sources page.\r\n * https://photoswipe.com/filters/#itemdata\r\n *\r\n * @prop {(itemData: SlideData, element: HTMLElement, linkEl: HTMLAnchorElement) => SlideData} domItemData\r\n * Modify item data when it's parsed from DOM element. Example on Data sources page.\r\n * https://photoswipe.com/filters/#domitemdata\r\n *\r\n * @prop {(clickedIndex: number, e: MouseEvent, instance: PhotoSwipeLightbox) => number} clickedIndex\r\n * Modify clicked gallery item index.\r\n * https://photoswipe.com/filters/#clickedindex\r\n *\r\n * @prop {(placeholderSrc: string | false, content: Content) => string | false} placeholderSrc\r\n * Modify placeholder image source.\r\n * https://photoswipe.com/filters/#placeholdersrc\r\n *\r\n * @prop {(isContentLoading: boolean, content: Content) => boolean} isContentLoading\r\n * Modify if the content is currently loading.\r\n * https://photoswipe.com/filters/#iscontentloading\r\n *\r\n * @prop {(isContentZoomable: boolean, content: Content) => boolean} isContentZoomable\r\n * Modify if the content can be zoomed.\r\n * https://photoswipe.com/filters/#iscontentzoomable\r\n *\r\n * @prop {(useContentPlaceholder: boolean, content: Content) => boolean} useContentPlaceholder\r\n * Modify if the placeholder should be used for the content.\r\n * https://photoswipe.com/filters/#usecontentplaceholder\r\n *\r\n * @prop {(isKeepingPlaceholder: boolean, content: Content) => boolean} isKeepingPlaceholder\r\n * Modify if the placeholder should be kept after the content is loaded.\r\n * https://photoswipe.com/filters/#iskeepingplaceholder\r\n *\r\n *\r\n * @prop {(contentErrorElement: HTMLElement, content: Content) => HTMLElement} contentErrorElement\r\n * Modify an element when the content has error state (for example, if image cannot be loaded).\r\n * https://photoswipe.com/filters/#contenterrorelement\r\n *\r\n * @prop {(element: HTMLElement, data: UIElementData) => HTMLElement} uiElement\r\n * Modify a UI element that's being created.\r\n * https://photoswipe.com/filters/#uielement\r\n *\r\n * @prop {(thumbnail: HTMLElement | null | undefined, itemData: SlideData, index: number) => HTMLElement} thumbEl\r\n * Modify the thubmnail element from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbel\r\n *\r\n * @prop {(thumbBounds: Bounds | undefined, itemData: SlideData, index: number) => Bounds} thumbBounds\r\n * Modify the thubmnail bounds from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbbounds\r\n *\r\n * @prop {(srcsetSizesWidth: number, content: Content) => number} srcsetSizesWidth\r\n *\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @typedef {{ fn: PhotoSwipeFiltersMap[T], priority: number }} Filter\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {PhotoSwipeEventsMap[T] extends undefined ? PhotoSwipeEvent<T> : PhotoSwipeEvent<T> & PhotoSwipeEventsMap[T]} AugmentedEvent\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {(event: AugmentedEvent<T>) => void} EventCallback\r\n */\r\n\r\n/**\r\n * Base PhotoSwipe event object\r\n *\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n */\r\nclass PhotoSwipeEvent {\r\n  /**\r\n   * @param {T} type\r\n   * @param {PhotoSwipeEventsMap[T]} [details]\r\n   */\r\n  constructor(type, details) {\r\n    this.type = type;\r\n    this.defaultPrevented = false;\r\n    if (details) {\r\n      Object.assign(this, details);\r\n    }\r\n  }\r\n\r\n  preventDefault() {\r\n    this.defaultPrevented = true;\r\n  }\r\n}\r\n\r\n/**\r\n * PhotoSwipe base class that can listen and dispatch for events.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox, extended by base.js\r\n */\r\nclass Eventable {\r\n  constructor() {\r\n    /**\r\n     * @type {{ [T in keyof PhotoSwipeEventsMap]?: ((event: AugmentedEvent<T>) => void)[] }}\r\n     */\r\n    this._listeners = {};\r\n\r\n    /**\r\n     * @type {{ [T in keyof PhotoSwipeFiltersMap]?: Filter<T>[] }}\r\n     */\r\n    this._filters = {};\r\n\r\n    /** @type {PhotoSwipe | undefined} */\r\n    this.pswp = undefined;\r\n\r\n    /** @type {PhotoSwipeOptions | undefined} */\r\n    this.options = undefined;\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeFiltersMap[T]} fn\r\n   * @param {number} priority\r\n   */\r\n  addFilter(name, fn, priority = 100) {\r\n    if (!this._filters[name]) {\r\n      this._filters[name] = [];\r\n    }\r\n\r\n    this._filters[name]?.push({ fn, priority });\r\n    this._filters[name]?.sort((f1, f2) => f1.priority - f2.priority);\r\n\r\n    this.pswp?.addFilter(name, fn, priority);\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeFiltersMap[T]} fn\r\n   */\r\n  removeFilter(name, fn) {\r\n    if (this._filters[name]) {\r\n      // @ts-expect-error\r\n      this._filters[name] = this._filters[name].filter(filter => (filter.fn !== fn));\r\n    }\r\n\r\n    if (this.pswp) {\r\n      this.pswp.removeFilter(name, fn);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {Parameters<PhotoSwipeFiltersMap[T]>} args\r\n   * @returns {Parameters<PhotoSwipeFiltersMap[T]>[0]}\r\n   */\r\n  applyFilters(name, ...args) {\r\n    this._filters[name]?.forEach((filter) => {\r\n      // @ts-expect-error\r\n      args[0] = filter.fn.apply(this, args);\r\n    });\r\n    return args[0];\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {EventCallback<T>} fn\r\n   */\r\n  on(name, fn) {\r\n    if (!this._listeners[name]) {\r\n      this._listeners[name] = [];\r\n    }\r\n    this._listeners[name]?.push(fn);\r\n\r\n    // When binding events to lightbox,\r\n    // also bind events to PhotoSwipe Core,\r\n    // if it's open.\r\n    this.pswp?.on(name, fn);\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {EventCallback<T>} fn\r\n   */\r\n  off(name, fn) {\r\n    if (this._listeners[name]) {\r\n      // @ts-expect-error\r\n      this._listeners[name] = this._listeners[name].filter(listener => (fn !== listener));\r\n    }\r\n\r\n    this.pswp?.off(name, fn);\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeEventsMap[T]} [details]\r\n   * @returns {AugmentedEvent<T>}\r\n   */\r\n  dispatch(name, details) {\r\n    if (this.pswp) {\r\n      return this.pswp.dispatch(name, details);\r\n    }\r\n\r\n    const event = /** @type {AugmentedEvent<T>} */ (new PhotoSwipeEvent(name, details));\r\n\r\n    this._listeners[name]?.forEach((listener) => {\r\n      listener.call(this, event);\r\n    });\r\n\r\n    return event;\r\n  }\r\n}\r\n\r\nexport default Eventable;\r\n","import { createElement, setWidthHeight, toTransformString } from '../util/util.js';\r\n\r\nclass Placeholder {\r\n  /**\r\n   * @param {string | false} imageSrc\r\n   * @param {HTMLElement} container\r\n   */\r\n  constructor(imageSrc, container) {\r\n    // Create placeholder\r\n    // (stretched thumbnail or simple div behind the main image)\r\n    /** @type {HTMLImageElement | HTMLDivElement | null} */\r\n    this.element = createElement(\r\n      'pswp__img pswp__img--placeholder',\r\n      imageSrc ? 'img' : 'div',\r\n      container\r\n    );\r\n\r\n    if (imageSrc) {\r\n      const imgEl = /** @type {HTMLImageElement} */ (this.element);\r\n      imgEl.decoding = 'async';\r\n      imgEl.alt = '';\r\n      imgEl.src = imageSrc;\r\n      imgEl.setAttribute('role', 'presentation');\r\n    }\r\n\r\n    this.element.setAttribute('aria-hidden', 'true');\r\n  }\r\n\r\n  /**\r\n   * @param {number} width\r\n   * @param {number} height\r\n   */\r\n  setDisplayedSize(width, height) {\r\n    if (!this.element) {\r\n      return;\r\n    }\r\n\r\n    if (this.element.tagName === 'IMG') {\r\n      // Use transform scale() to modify img placeholder size\r\n      // (instead of changing width/height directly).\r\n      // This helps with performance, specifically in iOS15 Safari.\r\n      setWidthHeight(this.element, 250, 'auto');\r\n      this.element.style.transformOrigin = '0 0';\r\n      this.element.style.transform = toTransformString(0, 0, width / 250);\r\n    } else {\r\n      setWidthHeight(this.element, width, height);\r\n    }\r\n  }\r\n\r\n  destroy() {\r\n    if (this.element?.parentNode) {\r\n      this.element.remove();\r\n    }\r\n    this.element = null;\r\n  }\r\n}\r\n\r\nexport default Placeholder;\r\n","import { createElement, isSafari, LOAD_STATE, setWidthHeight } from '../util/util.js';\r\nimport Placeholder from './placeholder.js';\r\n\r\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\r\n/** @typedef {import('../util/util.js').LoadState} LoadState */\r\n\r\nclass Content {\r\n  /**\r\n   * @param {SlideData} itemData Slide data\r\n   * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n   * @param {number} index\r\n   */\r\n  constructor(itemData, instance, index) {\r\n    this.instance = instance;\r\n    this.data = itemData;\r\n    this.index = index;\r\n\r\n    /** @type {HTMLImageElement | HTMLDivElement | undefined} */\r\n    this.element = undefined;\r\n    /** @type {Placeholder | undefined} */\r\n    this.placeholder = undefined;\r\n    /** @type {Slide | undefined} */\r\n    this.slide = undefined;\r\n\r\n    this.displayedImageWidth = 0;\r\n    this.displayedImageHeight = 0;\r\n\r\n    this.width = Number(this.data.w) || Number(this.data.width) || 0;\r\n    this.height = Number(this.data.h) || Number(this.data.height) || 0;\r\n\r\n    this.isAttached = false;\r\n    this.hasSlide = false;\r\n    this.isDecoding = false;\r\n    /** @type {LoadState} */\r\n    this.state = LOAD_STATE.IDLE;\r\n\r\n    if (this.data.type) {\r\n      this.type = this.data.type;\r\n    } else if (this.data.src) {\r\n      this.type = 'image';\r\n    } else {\r\n      this.type = 'html';\r\n    }\r\n\r\n    this.instance.dispatch('contentInit', { content: this });\r\n  }\r\n\r\n  removePlaceholder() {\r\n    if (this.placeholder && !this.keepPlaceholder()) {\r\n      // With delay, as image might be loaded, but not rendered\r\n      setTimeout(() => {\r\n        if (this.placeholder) {\r\n          this.placeholder.destroy();\r\n          this.placeholder = undefined;\r\n        }\r\n      }, 1000);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Preload content\r\n   *\r\n   * @param {boolean} isLazy\r\n   * @param {boolean} [reload]\r\n   */\r\n  load(isLazy, reload) {\r\n    if (this.slide && this.usePlaceholder()) {\r\n      if (!this.placeholder) {\r\n        const placeholderSrc = this.instance.applyFilters(\r\n          'placeholderSrc',\r\n          // use  image-based placeholder only for the first slide,\r\n          // as rendering (even small stretched thumbnail) is an expensive operation\r\n          (this.data.msrc && this.slide.isFirstSlide) ? this.data.msrc : false,\r\n          this\r\n        );\r\n        this.placeholder = new Placeholder(\r\n          placeholderSrc,\r\n          this.slide.container\r\n        );\r\n      } else {\r\n        const placeholderEl = this.placeholder.element;\r\n        // Add placeholder to DOM if it was already created\r\n        if (placeholderEl && !placeholderEl.parentElement) {\r\n          this.slide.container.prepend(placeholderEl);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.element && !reload) {\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentLoad', { content: this, isLazy }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.isImageContent()) {\r\n      this.element = createElement('pswp__img', 'img');\r\n      // Start loading only after width is defined, as sizes might depend on it.\r\n      // Due to Safari feature, we must define sizes before srcset.\r\n      if (this.displayedImageWidth) {\r\n        this.loadImage(isLazy);\r\n      }\r\n    } else {\r\n      this.element = createElement('pswp__content', 'div');\r\n      this.element.innerHTML = this.data.html || '';\r\n    }\r\n\r\n    if (reload && this.slide) {\r\n      this.slide.updateContentSize(true);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Preload image\r\n   *\r\n   * @param {boolean} isLazy\r\n   */\r\n  loadImage(isLazy) {\r\n    if (!this.isImageContent()\r\n      || !this.element\r\n      || this.instance.dispatch('contentLoadImage', { content: this, isLazy }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    const imageElement = /** @type HTMLImageElement */ (this.element);\r\n\r\n    this.updateSrcsetSizes();\r\n\r\n    if (this.data.srcset) {\r\n      imageElement.srcset = this.data.srcset;\r\n    }\r\n\r\n    imageElement.src = this.data.src ?? '';\r\n    imageElement.alt = this.data.alt ?? '';\r\n\r\n    this.state = LOAD_STATE.LOADING;\r\n\r\n    if (imageElement.complete) {\r\n      this.onLoaded();\r\n    } else {\r\n      imageElement.onload = () => {\r\n        this.onLoaded();\r\n      };\r\n\r\n      imageElement.onerror = () => {\r\n        this.onError();\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Assign slide to content\r\n   *\r\n   * @param {Slide} slide\r\n   */\r\n  setSlide(slide) {\r\n    this.slide = slide;\r\n    this.hasSlide = true;\r\n    this.instance = slide.pswp;\r\n\r\n    // todo: do we need to unset slide?\r\n  }\r\n\r\n  /**\r\n   * Content load success handler\r\n   */\r\n  onLoaded() {\r\n    this.state = LOAD_STATE.LOADED;\r\n\r\n    if (this.slide && this.element) {\r\n      this.instance.dispatch('loadComplete', { slide: this.slide, content: this });\r\n\r\n      // if content is reloaded\r\n      if (this.slide.isActive\r\n          && this.slide.heavyAppended\r\n          && !this.element.parentNode) {\r\n        this.append();\r\n        this.slide.updateContentSize(true);\r\n      }\r\n\r\n      if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\r\n        this.removePlaceholder();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Content load error handler\r\n   */\r\n  onError() {\r\n    this.state = LOAD_STATE.ERROR;\r\n\r\n    if (this.slide) {\r\n      this.displayError();\r\n      this.instance.dispatch('loadComplete', { slide: this.slide, isError: true, content: this });\r\n      this.instance.dispatch('loadError', { slide: this.slide, content: this });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @returns {Boolean} If the content is currently loading\r\n   */\r\n  isLoading() {\r\n    return this.instance.applyFilters(\r\n      'isContentLoading',\r\n      this.state === LOAD_STATE.LOADING,\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * @returns {Boolean} If the content is in error state\r\n   */\r\n  isError() {\r\n    return this.state === LOAD_STATE.ERROR;\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If the content is image\r\n   */\r\n  isImageContent() {\r\n    return this.type === 'image';\r\n  }\r\n\r\n  /**\r\n   * Update content size\r\n   *\r\n   * @param {Number} width\r\n   * @param {Number} height\r\n   */\r\n  setDisplayedSize(width, height) {\r\n    if (!this.element) {\r\n      return;\r\n    }\r\n\r\n    if (this.placeholder) {\r\n      this.placeholder.setDisplayedSize(width, height);\r\n    }\r\n\r\n    if (this.instance.dispatch(\r\n      'contentResize',\r\n      { content: this, width, height }).defaultPrevented\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    setWidthHeight(this.element, width, height);\r\n\r\n    if (this.isImageContent() && !this.isError()) {\r\n      const isInitialSizeUpdate = (!this.displayedImageWidth && width);\r\n\r\n      this.displayedImageWidth = width;\r\n      this.displayedImageHeight = height;\r\n\r\n      if (isInitialSizeUpdate) {\r\n        this.loadImage(false);\r\n      } else {\r\n        this.updateSrcsetSizes();\r\n      }\r\n\r\n      if (this.slide) {\r\n        this.instance.dispatch(\r\n          'imageSizeChange',\r\n          { slide: this.slide, width, height, content: this }\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If the content can be zoomed\r\n   */\r\n  isZoomable() {\r\n    return this.instance.applyFilters(\r\n      'isContentZoomable',\r\n      this.isImageContent() && (this.state !== LOAD_STATE.ERROR),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Update image srcset sizes attribute based on width and height\r\n   */\r\n  updateSrcsetSizes() {\r\n    // Handle srcset sizes attribute.\r\n    //\r\n    // Never lower quality, if it was increased previously.\r\n    // Chrome does this automatically, Firefox and Safari do not,\r\n    // so we store largest used size in dataset.\r\n    if (!this.isImageContent() || !this.element || !this.data.srcset) {\r\n      return;\r\n    }\r\n\r\n    const image = /** @type HTMLImageElement */ (this.element);\r\n    const sizesWidth = this.instance.applyFilters(\r\n      'srcsetSizesWidth',\r\n      this.displayedImageWidth,\r\n      this\r\n    );\r\n\r\n    if (\r\n      !image.dataset.largestUsedSize\r\n      || sizesWidth > parseInt(image.dataset.largestUsedSize, 10)\r\n    ) {\r\n      image.sizes = sizesWidth + 'px';\r\n      image.dataset.largestUsedSize = String(sizesWidth);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If content should use a placeholder (from msrc by default)\r\n   */\r\n  usePlaceholder() {\r\n    return this.instance.applyFilters(\r\n      'useContentPlaceholder',\r\n      this.isImageContent(),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Preload content with lazy-loading param\r\n   */\r\n  lazyLoad() {\r\n    if (this.instance.dispatch('contentLazyLoad', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    this.load(true);\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If placeholder should be kept after content is loaded\r\n   */\r\n  keepPlaceholder() {\r\n    return this.instance.applyFilters(\r\n      'isKeepingPlaceholder',\r\n      this.isLoading(),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Destroy the content\r\n   */\r\n  destroy() {\r\n    this.hasSlide = false;\r\n    this.slide = undefined;\r\n\r\n    if (this.instance.dispatch('contentDestroy', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    this.remove();\r\n\r\n    if (this.placeholder) {\r\n      this.placeholder.destroy();\r\n      this.placeholder = undefined;\r\n    }\r\n\r\n    if (this.isImageContent() && this.element) {\r\n      this.element.onload = null;\r\n      this.element.onerror = null;\r\n      this.element = undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Display error message\r\n   */\r\n  displayError() {\r\n    if (this.slide) {\r\n      let errorMsgEl = createElement('pswp__error-msg', 'div');\r\n      errorMsgEl.innerText = this.instance.options?.errorMsg ?? '';\r\n      errorMsgEl = /** @type {HTMLDivElement} */ (this.instance.applyFilters(\r\n        'contentErrorElement',\r\n        errorMsgEl,\r\n        this\r\n      ));\r\n      this.element = createElement('pswp__content pswp__error-msg-container', 'div');\r\n      this.element.appendChild(errorMsgEl);\r\n      this.slide.container.innerText = '';\r\n      this.slide.container.appendChild(this.element);\r\n      this.slide.updateContentSize(true);\r\n      this.removePlaceholder();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Append the content\r\n   */\r\n  append() {\r\n    if (this.isAttached || !this.element) {\r\n      return;\r\n    }\r\n\r\n    this.isAttached = true;\r\n\r\n    if (this.state === LOAD_STATE.ERROR) {\r\n      this.displayError();\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentAppend', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    const supportsDecode = ('decode' in this.element);\r\n\r\n    if (this.isImageContent()) {\r\n      // Use decode() on nearby slides\r\n      //\r\n      // Nearby slide images are in DOM and not hidden via display:none.\r\n      // However, they are placed offscreen (to the left and right side).\r\n      //\r\n      // Some browsers do not composite the image until it's actually visible,\r\n      // using decode() helps.\r\n      //\r\n      // You might ask \"why dont you just decode() and then append all images\",\r\n      // that's because I want to show image before it's fully loaded,\r\n      // as browser can render parts of image while it is loading.\r\n      // We do not do this in Safari due to partial loading bug.\r\n      if (supportsDecode && this.slide && (!this.slide.isActive || isSafari())) {\r\n        this.isDecoding = true;\r\n        // purposefully using finally instead of then,\r\n        // as if srcset sizes changes dynamically - it may cause decode error\r\n        /** @type {HTMLImageElement} */\r\n        (this.element).decode().catch(() => {}).finally(() => {\r\n          this.isDecoding = false;\r\n          this.appendImage();\r\n        });\r\n      } else {\r\n        this.appendImage();\r\n      }\r\n    } else if (this.slide && !this.element.parentNode) {\r\n      this.slide.container.appendChild(this.element);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Activate the slide,\r\n   * active slide is generally the current one,\r\n   * meaning the user can see it.\r\n   */\r\n  activate() {\r\n    if (this.instance.dispatch('contentActivate', { content: this }).defaultPrevented\r\n      || !this.slide) {\r\n      return;\r\n    }\r\n\r\n    if (this.isImageContent() && this.isDecoding && !isSafari()) {\r\n      // add image to slide when it becomes active,\r\n      // even if it's not finished decoding\r\n      this.appendImage();\r\n    } else if (this.isError()) {\r\n      this.load(false, true); // try to reload\r\n    }\r\n\r\n    if (this.slide.holderElement) {\r\n      this.slide.holderElement.setAttribute('aria-hidden', 'false');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Deactivate the content\r\n   */\r\n  deactivate() {\r\n    this.instance.dispatch('contentDeactivate', { content: this });\r\n    if (this.slide && this.slide.holderElement) {\r\n      this.slide.holderElement.setAttribute('aria-hidden', 'true');\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * Remove the content from DOM\r\n   */\r\n  remove() {\r\n    this.isAttached = false;\r\n\r\n    if (this.instance.dispatch('contentRemove', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.element && this.element.parentNode) {\r\n      this.element.remove();\r\n    }\r\n\r\n    if (this.placeholder && this.placeholder.element) {\r\n      this.placeholder.element.remove();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Append the image content to slide container\r\n   */\r\n  appendImage() {\r\n    if (!this.isAttached) {\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentAppendImage', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    // ensure that element exists and is not already appended\r\n    if (this.slide && this.element && !this.element.parentNode) {\r\n      this.slide.container.appendChild(this.element);\r\n    }\r\n\r\n    if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\r\n      this.removePlaceholder();\r\n    }\r\n  }\r\n}\r\n\r\nexport default Content;\r\n","import { getViewportSize, getPanAreaSize } from '../util/viewport-size.js';\r\nimport ZoomLevel from './zoom-level.js';\r\n\r\n/** @typedef {import('./content.js').default} Content */\r\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n\r\nconst MIN_SLIDES_TO_CACHE = 5;\r\n\r\n/**\r\n * Lazy-load an image\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n * @param {number} index\r\n * @returns {Content} Image that is being decoded or false.\r\n */\r\nexport function lazyLoadData(itemData, instance, index) {\r\n  const content = instance.createContentFromData(itemData, index);\r\n  /** @type {ZoomLevel | undefined} */\r\n  let zoomLevel;\r\n\r\n  const { options } = instance;\r\n\r\n  // We need to know dimensions of the image to preload it,\r\n  // as it might use srcset, and we need to define sizes\r\n  if (options) {\r\n    zoomLevel = new ZoomLevel(options, itemData, -1);\r\n\r\n    let viewportSize;\r\n    if (instance.pswp) {\r\n      viewportSize = instance.pswp.viewportSize;\r\n    } else {\r\n      viewportSize = getViewportSize(options, instance);\r\n    }\r\n\r\n    const panAreaSize = getPanAreaSize(options, viewportSize, itemData, index);\r\n    zoomLevel.update(content.width, content.height, panAreaSize);\r\n  }\r\n\r\n  content.lazyLoad();\r\n\r\n  if (zoomLevel) {\r\n    content.setDisplayedSize(\r\n      Math.ceil(content.width * zoomLevel.initial),\r\n      Math.ceil(content.height * zoomLevel.initial)\r\n    );\r\n  }\r\n\r\n  return content;\r\n}\r\n\r\n\r\n/**\r\n * Lazy-loads specific slide.\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * By default, it loads image based on viewport size and initial zoom level.\r\n *\r\n * @param {number} index Slide index\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox eventable instance\r\n * @returns {Content | undefined}\r\n */\r\nexport function lazyLoadSlide(index, instance) {\r\n  const itemData = instance.getItemData(index);\r\n\r\n  if (instance.dispatch('lazyLoadSlide', { index, itemData }).defaultPrevented) {\r\n    return;\r\n  }\r\n\r\n  return lazyLoadData(itemData, instance, index);\r\n}\r\n\r\nclass ContentLoader {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    // Total amount of cached images\r\n    this.limit = Math.max(\r\n      pswp.options.preload[0] + pswp.options.preload[1] + 1,\r\n      MIN_SLIDES_TO_CACHE\r\n    );\r\n    /** @type {Content[]} */\r\n    this._cachedItems = [];\r\n  }\r\n\r\n  /**\r\n   * Lazy load nearby slides based on `preload` option.\r\n   *\r\n   * @param {number} [diff] Difference between slide indexes that was changed recently, or 0.\r\n   */\r\n  updateLazy(diff) {\r\n    const { pswp } = this;\r\n\r\n    if (pswp.dispatch('lazyLoad').defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    const { preload } = pswp.options;\r\n    const isForward = diff === undefined ? true : (diff >= 0);\r\n    let i;\r\n\r\n    // preload[1] - num items to preload in forward direction\r\n    for (i = 0; i <= preload[1]; i++) {\r\n      this.loadSlideByIndex(pswp.currIndex + (isForward ? i : (-i)));\r\n    }\r\n\r\n    // preload[0] - num items to preload in backward direction\r\n    for (i = 1; i <= preload[0]; i++) {\r\n      this.loadSlideByIndex(pswp.currIndex + (isForward ? (-i) : i));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {number} initialIndex\r\n   */\r\n  loadSlideByIndex(initialIndex) {\r\n    const index = this.pswp.getLoopedIndex(initialIndex);\r\n    // try to get cached content\r\n    let content = this.getContentByIndex(index);\r\n    if (!content) {\r\n      // no cached content, so try to load from scratch:\r\n      content = lazyLoadSlide(index, this.pswp);\r\n      // if content can be loaded, add it to cache:\r\n      if (content) {\r\n        this.addToCache(content);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Slide} slide\r\n   * @returns {Content}\r\n   */\r\n  getContentBySlide(slide) {\r\n    let content = this.getContentByIndex(slide.index);\r\n    if (!content) {\r\n      // create content if not found in cache\r\n      content = this.pswp.createContentFromData(slide.data, slide.index);\r\n      this.addToCache(content);\r\n    }\r\n\r\n    // assign slide to content\r\n    content.setSlide(slide);\r\n\r\n    return content;\r\n  }\r\n\r\n  /**\r\n   * @param {Content} content\r\n   */\r\n  addToCache(content) {\r\n    // move to the end of array\r\n    this.removeByIndex(content.index);\r\n    this._cachedItems.push(content);\r\n\r\n    if (this._cachedItems.length > this.limit) {\r\n      // Destroy the first content that's not attached\r\n      const indexToRemove = this._cachedItems.findIndex((item) => {\r\n        return !item.isAttached && !item.hasSlide;\r\n      });\r\n      if (indexToRemove !== -1) {\r\n        const removedItem = this._cachedItems.splice(indexToRemove, 1)[0];\r\n        removedItem.destroy();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes an image from cache, does not destroy() it, just removes.\r\n   *\r\n   * @param {number} index\r\n   */\r\n  removeByIndex(index) {\r\n    const indexToRemove = this._cachedItems.findIndex(item => item.index === index);\r\n    if (indexToRemove !== -1) {\r\n      this._cachedItems.splice(indexToRemove, 1);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {number} index\r\n   * @returns {Content | undefined}\r\n   */\r\n  getContentByIndex(index) {\r\n    return this._cachedItems.find(content => content.index === index);\r\n  }\r\n\r\n  destroy() {\r\n    this._cachedItems.forEach(content => content.destroy());\r\n    this._cachedItems = [];\r\n  }\r\n}\r\n\r\nexport default ContentLoader;\r\n","import Eventable from './eventable.js';\r\nimport { getElementsFromOption } from '../util/util.js';\r\nimport Content from '../slide/content.js';\r\nimport { lazyLoadData } from '../slide/loader.js';\r\n\r\n/** @typedef {import(\"../photoswipe.js\").default} PhotoSwipe */\r\n/** @typedef {import(\"../slide/slide.js\").SlideData} SlideData */\r\n\r\n/**\r\n * PhotoSwipe base class that can retrieve data about every slide.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox\r\n */\r\nclass PhotoSwipeBase extends Eventable {\r\n  /**\r\n   * Get total number of slides\r\n   *\r\n   * @returns {number}\r\n   */\r\n  getNumItems() {\r\n    let numItems = 0;\r\n    const dataSource = this.options?.dataSource;\r\n\r\n    if (dataSource && 'length' in dataSource) {\r\n      // may be an array or just object with length property\r\n      numItems = dataSource.length;\r\n    } else if (dataSource && 'gallery' in dataSource) {\r\n      // query DOM elements\r\n      if (!dataSource.items) {\r\n        dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n      }\r\n\r\n      if (dataSource.items) {\r\n        numItems = dataSource.items.length;\r\n      }\r\n    }\r\n\r\n    // legacy event, before filters were introduced\r\n    const event = this.dispatch('numItems', {\r\n      dataSource,\r\n      numItems\r\n    });\r\n    return this.applyFilters('numItems', event.numItems, dataSource);\r\n  }\r\n\r\n  /**\r\n   * @param {SlideData} slideData\r\n   * @param {number} index\r\n   * @returns {Content}\r\n   */\r\n  createContentFromData(slideData, index) {\r\n    return new Content(slideData, this, index);\r\n  }\r\n\r\n  /**\r\n   * Get item data by index.\r\n   *\r\n   * \"item data\" should contain normalized information that PhotoSwipe needs to generate a slide.\r\n   * For example, it may contain properties like\r\n   * `src`, `srcset`, `w`, `h`, which will be used to generate a slide with image.\r\n   *\r\n   * @param {number} index\r\n   * @returns {SlideData}\r\n   */\r\n  getItemData(index) {\r\n    const dataSource = this.options?.dataSource;\r\n    /** @type {SlideData | HTMLElement} */\r\n    let dataSourceItem = {};\r\n    if (Array.isArray(dataSource)) {\r\n      // Datasource is an array of elements\r\n      dataSourceItem = dataSource[index];\r\n    } else if (dataSource && 'gallery' in dataSource) {\r\n      // dataSource has gallery property,\r\n      // thus it was created by Lightbox, based on\r\n      // gallery and children options\r\n\r\n      // query DOM elements\r\n      if (!dataSource.items) {\r\n        dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n      }\r\n\r\n      dataSourceItem = dataSource.items[index];\r\n    }\r\n\r\n    let itemData = dataSourceItem;\r\n\r\n    if (itemData instanceof Element) {\r\n      itemData = this._domElementToItemData(itemData);\r\n    }\r\n\r\n    // Dispatching the itemData event,\r\n    // it's a legacy verion before filters were introduced\r\n    const event = this.dispatch('itemData', {\r\n      itemData: itemData || {},\r\n      index\r\n    });\r\n\r\n    return this.applyFilters('itemData', event.itemData, index);\r\n  }\r\n\r\n  /**\r\n   * Get array of gallery DOM elements,\r\n   * based on childSelector and gallery element.\r\n   *\r\n   * @param {HTMLElement} galleryElement\r\n   * @returns {HTMLElement[]}\r\n   */\r\n  _getGalleryDOMElements(galleryElement) {\r\n    if (this.options?.children || this.options?.childSelector) {\r\n      return getElementsFromOption(\r\n        this.options.children,\r\n        this.options.childSelector,\r\n        galleryElement\r\n      ) || [];\r\n    }\r\n\r\n    return [galleryElement];\r\n  }\r\n\r\n  /**\r\n   * Converts DOM element to item data object.\r\n   *\r\n   * @param {HTMLElement} element DOM element\r\n   * @returns {SlideData}\r\n   */\r\n  _domElementToItemData(element) {\r\n    /** @type {SlideData} */\r\n    const itemData = {\r\n      element\r\n    };\r\n\r\n    const linkEl = /** @type {HTMLAnchorElement} */ (\r\n      element.tagName === 'A'\r\n        ? element\r\n        : element.querySelector('a')\r\n    );\r\n\r\n    if (linkEl) {\r\n      // src comes from data-pswp-src attribute,\r\n      // if it's empty link href is used\r\n      itemData.src = linkEl.dataset.pswpSrc || linkEl.href;\r\n\r\n      if (linkEl.dataset.pswpSrcset) {\r\n        itemData.srcset = linkEl.dataset.pswpSrcset;\r\n      }\r\n\r\n      itemData.width = linkEl.dataset.pswpWidth ? parseInt(linkEl.dataset.pswpWidth, 10) : 0;\r\n      itemData.height = linkEl.dataset.pswpHeight ? parseInt(linkEl.dataset.pswpHeight, 10) : 0;\r\n\r\n      // support legacy w & h properties\r\n      itemData.w = itemData.width;\r\n      itemData.h = itemData.height;\r\n\r\n      if (linkEl.dataset.pswpType) {\r\n        itemData.type = linkEl.dataset.pswpType;\r\n      }\r\n\r\n      const thumbnailEl = element.querySelector('img');\r\n\r\n      if (thumbnailEl) {\r\n        // msrc is URL to placeholder image that's displayed before large image is loaded\r\n        // by default it's displayed only for the first slide\r\n        itemData.msrc = thumbnailEl.currentSrc || thumbnailEl.src;\r\n        itemData.alt = thumbnailEl.getAttribute('alt') ?? '';\r\n      }\r\n\r\n      if (linkEl.dataset.pswpCropped || linkEl.dataset.cropped) {\r\n        itemData.thumbCropped = true;\r\n      }\r\n    }\r\n\r\n    return this.applyFilters('domItemData', itemData, element, linkEl);\r\n  }\r\n\r\n  /**\r\n   * Lazy-load by slide data\r\n   *\r\n   * @param {SlideData} itemData Data about the slide\r\n   * @param {number} index\r\n   * @returns {Content} Image that is being decoded or false.\r\n   */\r\n  lazyLoadData(itemData, index) {\r\n    return lazyLoadData(itemData, this, index);\r\n  }\r\n}\r\n\r\nexport default PhotoSwipeBase;\r\n","import {\r\n  setTransform,\r\n  equalizePoints,\r\n  decodeImage,\r\n  toTransformString\r\n} from './util/util.js';\r\n\r\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('./slide/get-thumb-bounds.js').Bounds} Bounds */\r\n/** @typedef {import('./util/animations.js').AnimationProps} AnimationProps */\r\n\r\n// some browsers do not paint\r\n// elements which opacity is set to 0,\r\n// since we need to pre-render elements for the animation -\r\n// we set it to the minimum amount\r\nconst MIN_OPACITY = 0.003;\r\n\r\n/**\r\n * Manages opening and closing transitions of the PhotoSwipe.\r\n *\r\n * It can perform zoom, fade or no transition.\r\n */\r\nclass Opener {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    this.isClosed = true;\r\n    this.isOpen = false;\r\n    this.isClosing = false;\r\n    this.isOpening = false;\r\n    /**\r\n     * @private\r\n     * @type {number | false | undefined}\r\n     */\r\n    this._duration = undefined;\r\n    /** @private */\r\n    this._useAnimation = false;\r\n    /** @private */\r\n    this._croppedZoom = false;\r\n    /** @private */\r\n    this._animateRootOpacity = false;\r\n    /** @private */\r\n    this._animateBgOpacity = false;\r\n    /**\r\n     * @private\r\n     * @type { HTMLDivElement | HTMLImageElement | null | undefined }\r\n     */\r\n    this._placeholder = undefined;\r\n    /**\r\n     * @private\r\n     * @type { HTMLDivElement | undefined }\r\n     */\r\n    this._opacityElement = undefined;\r\n    /**\r\n     * @private\r\n     * @type { HTMLDivElement | undefined }\r\n     */\r\n    this._cropContainer1 = undefined;\r\n    /**\r\n     * @private\r\n     * @type { HTMLElement | null | undefined }\r\n     */\r\n    this._cropContainer2 = undefined;\r\n\r\n    /**\r\n     * @private\r\n     * @type {Bounds | undefined}\r\n     */\r\n    this._thumbBounds = undefined;\r\n\r\n\r\n    this._prepareOpen = this._prepareOpen.bind(this);\r\n\r\n    // Override initial zoom and pan position\r\n    pswp.on('firstZoomPan', this._prepareOpen);\r\n  }\r\n\r\n  open() {\r\n    this._prepareOpen();\r\n    this._start();\r\n  }\r\n\r\n  close() {\r\n    if (this.isClosed || this.isClosing || this.isOpening) {\r\n      // if we close during opening animation\r\n      // for now do nothing,\r\n      // browsers aren't good at changing the direction of the CSS transition\r\n      return;\r\n    }\r\n\r\n    const slide = this.pswp.currSlide;\r\n\r\n    this.isOpen = false;\r\n    this.isOpening = false;\r\n    this.isClosing = true;\r\n    this._duration = this.pswp.options.hideAnimationDuration;\r\n\r\n    if (slide && slide.currZoomLevel * slide.width >= this.pswp.options.maxWidthToAnimate) {\r\n      this._duration = 0;\r\n    }\r\n\r\n    this._applyStartProps();\r\n    setTimeout(() => {\r\n      this._start();\r\n    }, this._croppedZoom ? 30 : 0);\r\n  }\r\n\r\n  /** @private */\r\n  _prepareOpen() {\r\n    this.pswp.off('firstZoomPan', this._prepareOpen);\r\n    if (!this.isOpening) {\r\n      const slide = this.pswp.currSlide;\r\n      this.isOpening = true;\r\n      this.isClosing = false;\r\n      this._duration = this.pswp.options.showAnimationDuration;\r\n      if (slide && slide.zoomLevels.initial * slide.width >= this.pswp.options.maxWidthToAnimate) {\r\n        this._duration = 0;\r\n      }\r\n      this._applyStartProps();\r\n    }\r\n  }\r\n\r\n  /** @private */\r\n  _applyStartProps() {\r\n    const { pswp } = this;\r\n    const slide = this.pswp.currSlide;\r\n    const { options } = pswp;\r\n\r\n    if (options.showHideAnimationType === 'fade') {\r\n      options.showHideOpacity = true;\r\n      this._thumbBounds = undefined;\r\n    } else if (options.showHideAnimationType === 'none') {\r\n      options.showHideOpacity = false;\r\n      this._duration = 0;\r\n      this._thumbBounds = undefined;\r\n    } else if (this.isOpening && pswp._initialThumbBounds) {\r\n      // Use initial bounds if defined\r\n      this._thumbBounds = pswp._initialThumbBounds;\r\n    } else {\r\n      this._thumbBounds = this.pswp.getThumbBounds();\r\n    }\r\n\r\n    this._placeholder = slide?.getPlaceholderElement();\r\n\r\n    pswp.animations.stopAll();\r\n\r\n    // Discard animations when duration is less than 50ms\r\n    this._useAnimation = Boolean(this._duration && this._duration > 50);\r\n    this._animateZoom = Boolean(this._thumbBounds)\r\n                        && slide?.content.usePlaceholder()\r\n                        && (!this.isClosing || !pswp.mainScroll.isShifted());\r\n    if (!this._animateZoom) {\r\n      this._animateRootOpacity = true;\r\n\r\n      if (this.isOpening && slide) {\r\n        slide.zoomAndPanToInitial();\r\n        slide.applyCurrentZoomPan();\r\n      }\r\n    } else {\r\n      this._animateRootOpacity = options.showHideOpacity ?? false;\r\n    }\r\n    this._animateBgOpacity = !this._animateRootOpacity && this.pswp.options.bgOpacity > MIN_OPACITY;\r\n    this._opacityElement = this._animateRootOpacity ? pswp.element : pswp.bg;\r\n\r\n    if (!this._useAnimation) {\r\n      this._duration = 0;\r\n      this._animateZoom = false;\r\n      this._animateBgOpacity = false;\r\n      this._animateRootOpacity = true;\r\n      if (this.isOpening) {\r\n        if (pswp.element) {\r\n          pswp.element.style.opacity = String(MIN_OPACITY);\r\n        }\r\n        pswp.applyBgOpacity(1);\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (this._animateZoom && this._thumbBounds && this._thumbBounds.innerRect) {\r\n      // Properties are used when animation from cropped thumbnail\r\n      this._croppedZoom = true;\r\n      this._cropContainer1 = this.pswp.container;\r\n      this._cropContainer2 = this.pswp.currSlide?.holderElement;\r\n\r\n      if (pswp.container) {\r\n        pswp.container.style.overflow = 'hidden';\r\n        pswp.container.style.width = pswp.viewportSize.x + 'px';\r\n      }\r\n    } else {\r\n      this._croppedZoom = false;\r\n    }\r\n\r\n    if (this.isOpening) {\r\n      // Apply styles before opening transition\r\n      if (this._animateRootOpacity) {\r\n        if (pswp.element) {\r\n          pswp.element.style.opacity = String(MIN_OPACITY);\r\n        }\r\n        pswp.applyBgOpacity(1);\r\n      } else {\r\n        if (this._animateBgOpacity && pswp.bg) {\r\n          pswp.bg.style.opacity = String(MIN_OPACITY);\r\n        }\r\n        if (pswp.element) {\r\n          pswp.element.style.opacity = '1';\r\n        }\r\n      }\r\n\r\n      if (this._animateZoom) {\r\n        this._setClosedStateZoomPan();\r\n        if (this._placeholder) {\r\n          // tell browser that we plan to animate the placeholder\r\n          this._placeholder.style.willChange = 'transform';\r\n\r\n          // hide placeholder to allow hiding of\r\n          // elements that overlap it (such as icons over the thumbnail)\r\n          this._placeholder.style.opacity = String(MIN_OPACITY);\r\n        }\r\n      }\r\n    } else if (this.isClosing) {\r\n      // hide nearby slides to make sure that\r\n      // they are not painted during the transition\r\n      if (pswp.mainScroll.itemHolders[0]) {\r\n        pswp.mainScroll.itemHolders[0].el.style.display = 'none';\r\n      }\r\n      if (pswp.mainScroll.itemHolders[2]) {\r\n        pswp.mainScroll.itemHolders[2].el.style.display = 'none';\r\n      }\r\n\r\n      if (this._croppedZoom) {\r\n        if (pswp.mainScroll.x !== 0) {\r\n          // shift the main scroller to zero position\r\n          pswp.mainScroll.resetPosition();\r\n          pswp.mainScroll.resize();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /** @private */\r\n  _start() {\r\n    if (this.isOpening\r\n        && this._useAnimation\r\n        && this._placeholder\r\n        && this._placeholder.tagName === 'IMG') {\r\n      // To ensure smooth animation\r\n      // we wait till the current slide image placeholder is decoded,\r\n      // but no longer than 250ms,\r\n      // and no shorter than 50ms\r\n      // (just using requestanimationframe is not enough in Firefox,\r\n      // for some reason)\r\n      new Promise((resolve) => {\r\n        let decoded = false;\r\n        let isDelaying = true;\r\n        decodeImage(/** @type {HTMLImageElement} */ (this._placeholder)).finally(() => {\r\n          decoded = true;\r\n          if (!isDelaying) {\r\n            resolve(true);\r\n          }\r\n        });\r\n        setTimeout(() => {\r\n          isDelaying = false;\r\n          if (decoded) {\r\n            resolve(true);\r\n          }\r\n        }, 50);\r\n        setTimeout(resolve, 250);\r\n      }).finally(() => this._initiate());\r\n    } else {\r\n      this._initiate();\r\n    }\r\n  }\r\n\r\n  /** @private */\r\n  _initiate() {\r\n    this.pswp.element?.style.setProperty('--pswp-transition-duration', this._duration + 'ms');\r\n\r\n    this.pswp.dispatch(\r\n      this.isOpening ? 'openingAnimationStart' : 'closingAnimationStart'\r\n    );\r\n\r\n    // legacy event\r\n    this.pswp.dispatch(\r\n      /** @type {'initialZoomIn' | 'initialZoomOut'} */\r\n      ('initialZoom' + (this.isOpening ? 'In' : 'Out'))\r\n    );\r\n\r\n    this.pswp.element?.classList.toggle('pswp--ui-visible', this.isOpening);\r\n\r\n    if (this.isOpening) {\r\n      if (this._placeholder) {\r\n        // unhide the placeholder\r\n        this._placeholder.style.opacity = '1';\r\n      }\r\n      this._animateToOpenState();\r\n    } else if (this.isClosing) {\r\n      this._animateToClosedState();\r\n    }\r\n\r\n    if (!this._useAnimation) {\r\n      this._onAnimationComplete();\r\n    }\r\n  }\r\n\r\n  /** @private */\r\n  _onAnimationComplete() {\r\n    const { pswp } = this;\r\n    this.isOpen = this.isOpening;\r\n    this.isClosed = this.isClosing;\r\n    this.isOpening = false;\r\n    this.isClosing = false;\r\n\r\n    pswp.dispatch(\r\n      this.isOpen ? 'openingAnimationEnd' : 'closingAnimationEnd'\r\n    );\r\n\r\n    // legacy event\r\n    pswp.dispatch(\r\n      /** @type {'initialZoomInEnd' | 'initialZoomOutEnd'} */\r\n      ('initialZoom' + (this.isOpen ? 'InEnd' : 'OutEnd'))\r\n    );\r\n\r\n    if (this.isClosed) {\r\n      pswp.destroy();\r\n    } else if (this.isOpen) {\r\n      if (this._animateZoom && pswp.container) {\r\n        pswp.container.style.overflow = 'visible';\r\n        pswp.container.style.width = '100%';\r\n      }\r\n      pswp.currSlide?.applyCurrentZoomPan();\r\n    }\r\n  }\r\n\r\n  /** @private */\r\n  _animateToOpenState() {\r\n    const { pswp } = this;\r\n    if (this._animateZoom) {\r\n      if (this._croppedZoom && this._cropContainer1 && this._cropContainer2) {\r\n        this._animateTo(this._cropContainer1, 'transform', 'translate3d(0,0,0)');\r\n        this._animateTo(this._cropContainer2, 'transform', 'none');\r\n      }\r\n\r\n      if (pswp.currSlide) {\r\n        pswp.currSlide.zoomAndPanToInitial();\r\n        this._animateTo(\r\n          pswp.currSlide.container,\r\n          'transform',\r\n          pswp.currSlide.getCurrentTransform()\r\n        );\r\n      }\r\n    }\r\n\r\n    if (this._animateBgOpacity && pswp.bg) {\r\n      this._animateTo(pswp.bg, 'opacity', String(pswp.options.bgOpacity));\r\n    }\r\n\r\n    if (this._animateRootOpacity && pswp.element) {\r\n      this._animateTo(pswp.element, 'opacity', '1');\r\n    }\r\n  }\r\n\r\n  /** @private */\r\n  _animateToClosedState() {\r\n    const { pswp } = this;\r\n\r\n    if (this._animateZoom) {\r\n      this._setClosedStateZoomPan(true);\r\n    }\r\n\r\n    // do not animate opacity if it's already at 0\r\n    if (this._animateBgOpacity && pswp.bgOpacity > 0.01 && pswp.bg) {\r\n      this._animateTo(pswp.bg, 'opacity', '0');\r\n    }\r\n\r\n    if (this._animateRootOpacity && pswp.element) {\r\n      this._animateTo(pswp.element, 'opacity', '0');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {boolean} [animate]\r\n   */\r\n  _setClosedStateZoomPan(animate) {\r\n    if (!this._thumbBounds) return;\r\n\r\n    const { pswp } = this;\r\n    const { innerRect } = this._thumbBounds;\r\n    const { currSlide, viewportSize } = pswp;\r\n\r\n    if (this._croppedZoom && innerRect && this._cropContainer1 && this._cropContainer2) {\r\n      const containerOnePanX = -viewportSize.x + (this._thumbBounds.x - innerRect.x) + innerRect.w;\r\n      const containerOnePanY = -viewportSize.y + (this._thumbBounds.y - innerRect.y) + innerRect.h;\r\n      const containerTwoPanX = viewportSize.x - innerRect.w;\r\n      const containerTwoPanY = viewportSize.y - innerRect.h;\r\n\r\n\r\n      if (animate) {\r\n        this._animateTo(\r\n          this._cropContainer1,\r\n          'transform',\r\n          toTransformString(containerOnePanX, containerOnePanY)\r\n        );\r\n\r\n        this._animateTo(\r\n          this._cropContainer2,\r\n          'transform',\r\n          toTransformString(containerTwoPanX, containerTwoPanY)\r\n        );\r\n      } else {\r\n        setTransform(this._cropContainer1, containerOnePanX, containerOnePanY);\r\n        setTransform(this._cropContainer2, containerTwoPanX, containerTwoPanY);\r\n      }\r\n    }\r\n\r\n    if (currSlide) {\r\n      equalizePoints(currSlide.pan, innerRect || this._thumbBounds);\r\n      currSlide.currZoomLevel = this._thumbBounds.w / currSlide.width;\r\n      if (animate) {\r\n        this._animateTo(currSlide.container, 'transform', currSlide.getCurrentTransform());\r\n      } else {\r\n        currSlide.applyCurrentZoomPan();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {HTMLElement} target\r\n   * @param {'transform' | 'opacity'} prop\r\n   * @param {string} propValue\r\n   */\r\n  _animateTo(target, prop, propValue) {\r\n    if (!this._duration) {\r\n      target.style[prop] = propValue;\r\n      return;\r\n    }\r\n\r\n    const { animations } = this.pswp;\r\n    /** @type {AnimationProps} */\r\n    const animProps = {\r\n      duration: this._duration,\r\n      easing: this.pswp.options.easing,\r\n      onComplete: () => {\r\n        if (!animations.activeAnimations.length) {\r\n          this._onAnimationComplete();\r\n        }\r\n      },\r\n      target,\r\n    };\r\n    animProps[prop] = propValue;\r\n    animations.startTransition(animProps);\r\n  }\r\n}\r\n\r\nexport default Opener;\r\n","import {\r\n  createElement,\r\n  equalizePoints,\r\n  pointsEqual,\r\n  clamp,\r\n} from './util/util.js';\r\n\r\nimport DOMEvents from './util/dom-events.js';\r\nimport Slide from './slide/slide.js';\r\nimport Gestures from './gestures/gestures.js';\r\nimport MainScroll from './main-scroll.js';\r\n\r\nimport Keyboard from './keyboard.js';\r\nimport Animations from './util/animations.js';\r\nimport ScrollWheel from './scroll-wheel.js';\r\nimport UI from './ui/ui.js';\r\nimport { getViewportSize } from './util/viewport-size.js';\r\nimport { getThumbBounds } from './slide/get-thumb-bounds.js';\r\nimport PhotoSwipeBase from './core/base.js';\r\nimport Opener from './opener.js';\r\nimport ContentLoader from './slide/loader.js';\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('./types.js').Type<T>} Type<T>\r\n */\r\n\r\n/** @typedef {import('./slide/slide.js').SlideData} SlideData */\r\n/** @typedef {import('./slide/zoom-level.js').ZoomLevelOption} ZoomLevelOption */\r\n/** @typedef {import('./ui/ui-element.js').UIElementData} UIElementData */\r\n/** @typedef {import('./main-scroll.js').ItemHolder} ItemHolder */\r\n/** @typedef {import('./core/eventable.js').PhotoSwipeEventsMap} PhotoSwipeEventsMap */\r\n/** @typedef {import('./core/eventable.js').PhotoSwipeFiltersMap} PhotoSwipeFiltersMap */\r\n/** @typedef {import('./slide/get-thumb-bounds').Bounds} Bounds */\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {import('./core/eventable.js').EventCallback<T>} EventCallback<T>\r\n */\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {import('./core/eventable.js').AugmentedEvent<T>} AugmentedEvent<T>\r\n */\r\n\r\n/** @typedef {{ x: number; y: number; id?: string | number }} Point */\r\n/** @typedef {{ top: number; bottom: number; left: number; right: number }} Padding */\r\n/** @typedef {SlideData[]} DataSourceArray */\r\n/** @typedef {{ gallery: HTMLElement; items?: HTMLElement[] }} DataSourceObject */\r\n/** @typedef {DataSourceArray | DataSourceObject} DataSource */\r\n/** @typedef {(point: Point, originalEvent: PointerEvent) => void} ActionFn */\r\n/** @typedef {'close' | 'next' | 'zoom' | 'zoom-or-close' | 'toggle-controls'} ActionType */\r\n/** @typedef {Type<PhotoSwipe> | { default: Type<PhotoSwipe> }} PhotoSwipeModule */\r\n/** @typedef {PhotoSwipeModule | Promise<PhotoSwipeModule> | (() => Promise<PhotoSwipeModule>)} PhotoSwipeModuleOption */\r\n\r\n/**\r\n * @typedef {string | NodeListOf<HTMLElement> | HTMLElement[] | HTMLElement} ElementProvider\r\n */\r\n\r\n/** @typedef {Partial<PreparedPhotoSwipeOptions>} PhotoSwipeOptions https://photoswipe.com/options/ */\r\n/**\r\n * @typedef {Object} PreparedPhotoSwipeOptions\r\n *\r\n * @prop {DataSource} [dataSource]\r\n * Pass an array of any items via dataSource option. Its length will determine amount of slides\r\n * (which may be modified further from numItems event).\r\n *\r\n * Each item should contain data that you need to generate slide\r\n * (for image slide it would be src (image URL), width (image width), height, srcset, alt).\r\n *\r\n * If these properties are not present in your initial array, you may \"pre-parse\" each item from itemData filter.\r\n *\r\n * @prop {number} bgOpacity\r\n * Background backdrop opacity, always define it via this option and not via CSS rgba color.\r\n *\r\n * @prop {number} spacing\r\n * Spacing between slides. Defined as ratio relative to the viewport width (0.1 = 10% of viewport).\r\n *\r\n * @prop {boolean} allowPanToNext\r\n * Allow swipe navigation to the next slide when the current slide is zoomed. Does not apply to mouse events.\r\n *\r\n * @prop {boolean} loop\r\n * If set to true you'll be able to swipe from the last to the first image.\r\n * Option is always false when there are less than 3 slides.\r\n *\r\n * @prop {boolean} [wheelToZoom]\r\n * By default PhotoSwipe zooms image with ctrl-wheel, if you enable this option - image will zoom just via wheel.\r\n *\r\n * @prop {boolean} pinchToClose\r\n * Pinch touch gesture to close the gallery.\r\n *\r\n * @prop {boolean} closeOnVerticalDrag\r\n * Vertical drag gesture to close the PhotoSwipe.\r\n *\r\n * @prop {Padding} [padding]\r\n * Slide area padding (in pixels).\r\n *\r\n * @prop {(viewportSize: Point, itemData: SlideData, index: number) => Padding} [paddingFn]\r\n * The option is checked frequently, so make sure it's performant. Overrides padding option if defined. For example:\r\n *\r\n * @prop {number | false} hideAnimationDuration\r\n * Transition duration in milliseconds, can be 0.\r\n *\r\n * @prop {number | false} showAnimationDuration\r\n * Transition duration in milliseconds, can be 0.\r\n *\r\n * @prop {number | false} zoomAnimationDuration\r\n * Transition duration in milliseconds, can be 0.\r\n *\r\n * @prop {string} easing\r\n * String, 'cubic-bezier(.4,0,.22,1)'. CSS easing function for open/close/zoom transitions.\r\n *\r\n * @prop {boolean} escKey\r\n * Esc key to close.\r\n *\r\n * @prop {boolean} arrowKeys\r\n * Left/right arrow keys for navigation.\r\n *\r\n * @prop {boolean} returnFocus\r\n * Restore focus the last active element after PhotoSwipe is closed.\r\n *\r\n * @prop {boolean} clickToCloseNonZoomable\r\n * If image is not zoomable (for example, smaller than viewport) it can be closed by clicking on it.\r\n *\r\n * @prop {ActionType | ActionFn | false} imageClickAction\r\n * Refer to click and tap actions page.\r\n *\r\n * @prop {ActionType | ActionFn | false} bgClickAction\r\n * Refer to click and tap actions page.\r\n *\r\n * @prop {ActionType | ActionFn | false} tapAction\r\n * Refer to click and tap actions page.\r\n *\r\n * @prop {ActionType | ActionFn | false} doubleTapAction\r\n * Refer to click and tap actions page.\r\n *\r\n * @prop {number} preloaderDelay\r\n * Delay before the loading indicator will be displayed,\r\n * if image is loaded during it - the indicator will not be displayed at all. Can be zero.\r\n *\r\n * @prop {string} indexIndicatorSep\r\n * Used for slide count indicator (\"1 of 10 \").\r\n *\r\n * @prop {(options: PhotoSwipeOptions, pswp: PhotoSwipeBase) => Point} [getViewportSizeFn]\r\n * A function that should return slide viewport width and height, in format {x: 100, y: 100}.\r\n *\r\n * @prop {string} errorMsg\r\n * Message to display when the image wasn't able to load. If you need to display HTML - use contentErrorElement filter.\r\n *\r\n * @prop {[number, number]} preload\r\n * Lazy loading of nearby slides based on direction of movement. Should be an array with two integers,\r\n * first one - number of items to preload before the current image, second one - after the current image.\r\n * Two nearby images are always loaded.\r\n *\r\n * @prop {string} [mainClass]\r\n * Class that will be added to the root element of PhotoSwipe, may contain multiple separated by space.\r\n * Example on Styling page.\r\n *\r\n * @prop {HTMLElement} [appendToEl]\r\n * Element to which PhotoSwipe dialog will be appended when it opens.\r\n *\r\n * @prop {number} maxWidthToAnimate\r\n * Maximum width of image to animate, if initial rendered image width\r\n * is larger than this value - the opening/closing transition will be automatically disabled.\r\n *\r\n * @prop {string} [closeTitle]\r\n * Translating\r\n *\r\n * @prop {string} [zoomTitle]\r\n * Translating\r\n *\r\n * @prop {string} [arrowPrevTitle]\r\n * Translating\r\n *\r\n * @prop {string} [arrowNextTitle]\r\n * Translating\r\n *\r\n * @prop {'zoom' | 'fade' | 'none'} [showHideAnimationType]\r\n * To adjust opening or closing transition type use lightbox option `showHideAnimationType` (`String`).\r\n * It supports three values - `zoom` (default), `fade` (default if there is no thumbnail) and `none`.\r\n *\r\n * Animations are automatically disabled if user `(prefers-reduced-motion: reduce)`.\r\n *\r\n * @prop {number} index\r\n * Defines start slide index.\r\n *\r\n * @prop {(e: MouseEvent) => number} [getClickedIndexFn]\r\n *\r\n * @prop {boolean} [arrowPrev]\r\n * @prop {boolean} [arrowNext]\r\n * @prop {boolean} [zoom]\r\n * @prop {boolean} [close]\r\n * @prop {boolean} [counter]\r\n *\r\n * @prop {string} [arrowPrevSVG]\r\n * @prop {string} [arrowNextSVG]\r\n * @prop {string} [zoomSVG]\r\n * @prop {string} [closeSVG]\r\n * @prop {string} [counterSVG]\r\n *\r\n * @prop {string} [arrowPrevTitle]\r\n * @prop {string} [arrowNextTitle]\r\n * @prop {string} [zoomTitle]\r\n * @prop {string} [closeTitle]\r\n * @prop {string} [counterTitle]\r\n *\r\n * @prop {ZoomLevelOption} [initialZoomLevel]\r\n * @prop {ZoomLevelOption} [secondaryZoomLevel]\r\n * @prop {ZoomLevelOption} [maxZoomLevel]\r\n *\r\n * @prop {boolean} [mouseMovePan]\r\n * @prop {Point | null} [initialPointerPos]\r\n * @prop {boolean} [showHideOpacity]\r\n *\r\n * @prop {PhotoSwipeModuleOption} [pswpModule]\r\n * @prop {() => Promise<any>} [openPromise]\r\n * @prop {boolean} [preloadFirstSlide]\r\n * @prop {ElementProvider} [gallery]\r\n * @prop {string} [gallerySelector]\r\n * @prop {ElementProvider} [children]\r\n * @prop {string} [childSelector]\r\n * @prop {string | false} [thumbSelector]\r\n */\r\n\r\n/** @type {PreparedPhotoSwipeOptions} */\r\nconst defaultOptions = {\r\n  allowPanToNext: true,\r\n  spacing: 0.1,\r\n  loop: true,\r\n  pinchToClose: true,\r\n  closeOnVerticalDrag: true,\r\n  hideAnimationDuration: 333,\r\n  showAnimationDuration: 333,\r\n  zoomAnimationDuration: 333,\r\n  escKey: true,\r\n  arrowKeys: true,\r\n  returnFocus: true,\r\n  maxWidthToAnimate: 4000,\r\n  clickToCloseNonZoomable: true,\r\n  imageClickAction: 'zoom-or-close',\r\n  bgClickAction: 'close',\r\n  tapAction: 'toggle-controls',\r\n  doubleTapAction: 'zoom',\r\n  indexIndicatorSep: ' / ',\r\n  preloaderDelay: 2000,\r\n  bgOpacity: 0.8,\r\n\r\n  index: 0,\r\n  errorMsg: 'The image cannot be loaded',\r\n  preload: [1, 2],\r\n  easing: 'cubic-bezier(.4,0,.22,1)'\r\n};\r\n\r\n/**\r\n * PhotoSwipe Core\r\n */\r\nclass PhotoSwipe extends PhotoSwipeBase {\r\n  /**\r\n   * @param {PhotoSwipeOptions} [options]\r\n   */\r\n  constructor(options) {\r\n    super();\r\n\r\n    this.options = this._prepareOptions(options || {});\r\n\r\n    /**\r\n     * offset of viewport relative to document\r\n     *\r\n     * @type {Point}\r\n     */\r\n    this.offset = { x: 0, y: 0 };\r\n\r\n    /**\r\n     * @type {Point}\r\n     * @private\r\n     */\r\n    this._prevViewportSize = { x: 0, y: 0 };\r\n\r\n    /**\r\n     * Size of scrollable PhotoSwipe viewport\r\n     *\r\n     * @type {Point}\r\n     */\r\n    this.viewportSize = { x: 0, y: 0 };\r\n\r\n    /**\r\n     * background (backdrop) opacity\r\n     */\r\n    this.bgOpacity = 1;\r\n    this.currIndex = 0;\r\n    this.potentialIndex = 0;\r\n    this.isOpen = false;\r\n    this.isDestroying = false;\r\n    this.hasMouse = false;\r\n\r\n    /**\r\n     * @private\r\n     * @type {SlideData}\r\n     */\r\n    this._initialItemData = {};\r\n    /** @type {Bounds | undefined} */\r\n    this._initialThumbBounds = undefined;\r\n\r\n    /** @type {HTMLDivElement | undefined} */\r\n    this.topBar = undefined;\r\n    /** @type {HTMLDivElement | undefined} */\r\n    this.element = undefined;\r\n    /** @type {HTMLDivElement | undefined} */\r\n    this.template = undefined;\r\n    /** @type {HTMLDivElement | undefined} */\r\n    this.container = undefined;\r\n    /** @type {HTMLElement | undefined} */\r\n    this.scrollWrap = undefined;\r\n    /** @type {Slide | undefined} */\r\n    this.currSlide = undefined;\r\n\r\n    this.events = new DOMEvents();\r\n    this.animations = new Animations();\r\n    this.mainScroll = new MainScroll(this);\r\n    this.gestures = new Gestures(this);\r\n    this.opener = new Opener(this);\r\n    this.keyboard = new Keyboard(this);\r\n    this.contentLoader = new ContentLoader(this);\r\n  }\r\n\r\n  /** @returns {boolean} */\r\n  init() {\r\n    if (this.isOpen || this.isDestroying) {\r\n      return false;\r\n    }\r\n\r\n    this.isOpen = true;\r\n    this.dispatch('init'); // legacy\r\n    this.dispatch('beforeOpen');\r\n\r\n    this._createMainStructure();\r\n\r\n    // add classes to the root element of PhotoSwipe\r\n    let rootClasses = 'pswp--open';\r\n    if (this.gestures.supportsTouch) {\r\n      rootClasses += ' pswp--touch';\r\n    }\r\n    if (this.options.mainClass) {\r\n      rootClasses += ' ' + this.options.mainClass;\r\n    }\r\n    if (this.element) {\r\n      this.element.className += ' ' + rootClasses;\r\n    }\r\n\r\n    this.currIndex = this.options.index || 0;\r\n    this.potentialIndex = this.currIndex;\r\n    this.dispatch('firstUpdate'); // starting index can be modified here\r\n\r\n    // initialize scroll wheel handler to block the scroll\r\n    this.scrollWheel = new ScrollWheel(this);\r\n\r\n    // sanitize index\r\n    if (Number.isNaN(this.currIndex)\r\n        || this.currIndex < 0\r\n        || this.currIndex >= this.getNumItems()) {\r\n      this.currIndex = 0;\r\n    }\r\n\r\n    if (!this.gestures.supportsTouch) {\r\n      // enable mouse features if no touch support detected\r\n      this.mouseDetected();\r\n    }\r\n\r\n    // causes forced synchronous layout\r\n    this.updateSize();\r\n\r\n    this.offset.y = window.pageYOffset;\r\n\r\n    this._initialItemData = this.getItemData(this.currIndex);\r\n    this.dispatch('gettingData', {\r\n      index: this.currIndex,\r\n      data: this._initialItemData,\r\n      slide: undefined\r\n    });\r\n\r\n    // *Layout* - calculate size and position of elements here\r\n    this._initialThumbBounds = this.getThumbBounds();\r\n    this.dispatch('initialLayout');\r\n\r\n    this.on('openingAnimationEnd', () => {\r\n      const { itemHolders } = this.mainScroll;\r\n\r\n      // Add content to the previous and next slide\r\n      if (itemHolders[0]) {\r\n        itemHolders[0].el.style.display = 'block';\r\n        this.setContent(itemHolders[0], this.currIndex - 1);\r\n      }\r\n      if (itemHolders[2]) {\r\n        itemHolders[2].el.style.display = 'block';\r\n        this.setContent(itemHolders[2], this.currIndex + 1);\r\n      }\r\n\r\n      this.appendHeavy();\r\n\r\n      this.contentLoader.updateLazy();\r\n\r\n      this.events.add(window, 'resize', this._handlePageResize.bind(this));\r\n      this.events.add(window, 'scroll', this._updatePageScrollOffset.bind(this));\r\n      this.dispatch('bindEvents');\r\n    });\r\n\r\n    // set content for center slide (first time)\r\n    if (this.mainScroll.itemHolders[1]) {\r\n      this.setContent(this.mainScroll.itemHolders[1], this.currIndex);\r\n    }\r\n    this.dispatch('change');\r\n\r\n    this.opener.open();\r\n\r\n    this.dispatch('afterInit');\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Get looped slide index\r\n   * (for example, -1 will return the last slide)\r\n   *\r\n   * @param {number} index\r\n   * @returns {number}\r\n   */\r\n  getLoopedIndex(index) {\r\n    const numSlides = this.getNumItems();\r\n\r\n    if (this.options.loop) {\r\n      if (index > numSlides - 1) {\r\n        index -= numSlides;\r\n      }\r\n\r\n      if (index < 0) {\r\n        index += numSlides;\r\n      }\r\n    }\r\n\r\n    return clamp(index, 0, numSlides - 1);\r\n  }\r\n\r\n  appendHeavy() {\r\n    this.mainScroll.itemHolders.forEach((itemHolder) => {\r\n      itemHolder.slide?.appendHeavy();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Change the slide\r\n   * @param {number} index New index\r\n   */\r\n  goTo(index) {\r\n    this.mainScroll.moveIndexBy(\r\n      this.getLoopedIndex(index) - this.potentialIndex\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Go to the next slide.\r\n   */\r\n  next() {\r\n    this.goTo(this.potentialIndex + 1);\r\n  }\r\n\r\n  /**\r\n   * Go to the previous slide.\r\n   */\r\n  prev() {\r\n    this.goTo(this.potentialIndex - 1);\r\n  }\r\n\r\n  /**\r\n   * @see slide/slide.js zoomTo\r\n   *\r\n   * @param {Parameters<Slide['zoomTo']>} args\r\n   */\r\n  zoomTo(...args) {\r\n    this.currSlide?.zoomTo(...args);\r\n  }\r\n\r\n  /**\r\n   * @see slide/slide.js toggleZoom\r\n   */\r\n  toggleZoom() {\r\n    this.currSlide?.toggleZoom();\r\n  }\r\n\r\n  /**\r\n   * Close the gallery.\r\n   * After closing transition ends - destroy it\r\n   */\r\n  close() {\r\n    if (!this.opener.isOpen || this.isDestroying) {\r\n      return;\r\n    }\r\n\r\n    this.isDestroying = true;\r\n\r\n    this.dispatch('close');\r\n\r\n    this.events.removeAll();\r\n    this.opener.close();\r\n  }\r\n\r\n  /**\r\n   * Destroys the gallery:\r\n   * - instantly closes the gallery\r\n   * - unbinds events,\r\n   * - cleans intervals and timeouts\r\n   * - removes elements from DOM\r\n   */\r\n  destroy() {\r\n    if (!this.isDestroying) {\r\n      this.options.showHideAnimationType = 'none';\r\n      this.close();\r\n      return;\r\n    }\r\n\r\n    this.dispatch('destroy');\r\n\r\n    this._listeners = {};\r\n\r\n    if (this.scrollWrap) {\r\n      this.scrollWrap.ontouchmove = null;\r\n      this.scrollWrap.ontouchend = null;\r\n    }\r\n\r\n    this.element?.remove();\r\n\r\n    this.mainScroll.itemHolders.forEach((itemHolder) => {\r\n      itemHolder.slide?.destroy();\r\n    });\r\n\r\n    this.contentLoader.destroy();\r\n    this.events.removeAll();\r\n  }\r\n\r\n  /**\r\n   * Refresh/reload content of a slide by its index\r\n   *\r\n   * @param {number} slideIndex\r\n   */\r\n  refreshSlideContent(slideIndex) {\r\n    this.contentLoader.removeByIndex(slideIndex);\r\n    this.mainScroll.itemHolders.forEach((itemHolder, i) => {\r\n      let potentialHolderIndex = (this.currSlide?.index ?? 0) - 1 + i;\r\n      if (this.canLoop()) {\r\n        potentialHolderIndex = this.getLoopedIndex(potentialHolderIndex);\r\n      }\r\n      if (potentialHolderIndex === slideIndex) {\r\n        // set the new slide content\r\n        this.setContent(itemHolder, slideIndex, true);\r\n\r\n        // activate the new slide if it's current\r\n        if (i === 1) {\r\n          this.currSlide = itemHolder.slide;\r\n          itemHolder.slide?.setIsActive(true);\r\n        }\r\n      }\r\n    });\r\n\r\n    this.dispatch('change');\r\n  }\r\n\r\n\r\n  /**\r\n   * Set slide content\r\n   *\r\n   * @param {ItemHolder} holder mainScroll.itemHolders array item\r\n   * @param {number} index Slide index\r\n   * @param {boolean} [force] If content should be set even if index wasn't changed\r\n   */\r\n  setContent(holder, index, force) {\r\n    if (this.canLoop()) {\r\n      index = this.getLoopedIndex(index);\r\n    }\r\n\r\n    if (holder.slide) {\r\n      if (holder.slide.index === index && !force) {\r\n        // exit if holder already contains this slide\r\n        // this could be common when just three slides are used\r\n        return;\r\n      }\r\n\r\n      // destroy previous slide\r\n      holder.slide.destroy();\r\n      holder.slide = undefined;\r\n    }\r\n\r\n    // exit if no loop and index is out of bounds\r\n    if (!this.canLoop() && (index < 0 || index >= this.getNumItems())) {\r\n      return;\r\n    }\r\n\r\n    const itemData = this.getItemData(index);\r\n    holder.slide = new Slide(itemData, index, this);\r\n\r\n    // set current slide\r\n    if (index === this.currIndex) {\r\n      this.currSlide = holder.slide;\r\n    }\r\n\r\n    holder.slide.append(holder.el);\r\n  }\r\n\r\n  /** @returns {Point} */\r\n  getViewportCenterPoint() {\r\n    return {\r\n      x: this.viewportSize.x / 2,\r\n      y: this.viewportSize.y / 2\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Update size of all elements.\r\n   * Executed on init and on page resize.\r\n   *\r\n   * @param {boolean} [force] Update size even if size of viewport was not changed.\r\n   */\r\n  updateSize(force) {\r\n    // let item;\r\n    // let itemIndex;\r\n\r\n    if (this.isDestroying) {\r\n      // exit if PhotoSwipe is closed or closing\r\n      // (to avoid errors, as resize event might be delayed)\r\n      return;\r\n    }\r\n\r\n    //const newWidth = this.scrollWrap.clientWidth;\r\n    //const newHeight = this.scrollWrap.clientHeight;\r\n\r\n    const newViewportSize = getViewportSize(this.options, this);\r\n\r\n    if (!force && pointsEqual(newViewportSize, this._prevViewportSize)) {\r\n      // Exit if dimensions were not changed\r\n      return;\r\n    }\r\n\r\n    //this._prevViewportSize.x = newWidth;\r\n    //this._prevViewportSize.y = newHeight;\r\n    equalizePoints(this._prevViewportSize, newViewportSize);\r\n\r\n    this.dispatch('beforeResize');\r\n\r\n    equalizePoints(this.viewportSize, this._prevViewportSize);\r\n\r\n    this._updatePageScrollOffset();\r\n\r\n    this.dispatch('viewportSize');\r\n\r\n    // Resize slides only after opener animation is finished\r\n    // and don't re-calculate size on inital size update\r\n    this.mainScroll.resize(this.opener.isOpen);\r\n\r\n    if (!this.hasMouse && window.matchMedia('(any-hover: hover)').matches) {\r\n      this.mouseDetected();\r\n    }\r\n\r\n    this.dispatch('resize');\r\n  }\r\n\r\n  /**\r\n   * @param {number} opacity\r\n   */\r\n  applyBgOpacity(opacity) {\r\n    this.bgOpacity = Math.max(opacity, 0);\r\n    if (this.bg) {\r\n      this.bg.style.opacity = String(this.bgOpacity * this.options.bgOpacity);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Whether mouse is detected\r\n   */\r\n  mouseDetected() {\r\n    if (!this.hasMouse) {\r\n      this.hasMouse = true;\r\n      this.element?.classList.add('pswp--has_mouse');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Page resize event handler\r\n   *\r\n   * @private\r\n   */\r\n  _handlePageResize() {\r\n    this.updateSize();\r\n\r\n    // In iOS webview, if element size depends on document size,\r\n    // it'll be measured incorrectly in resize event\r\n    //\r\n    // https://bugs.webkit.org/show_bug.cgi?id=170595\r\n    // https://hackernoon.com/onresize-event-broken-in-mobile-safari-d8469027bf4d\r\n    if (/iPhone|iPad|iPod/i.test(window.navigator.userAgent)) {\r\n      setTimeout(() => {\r\n        this.updateSize();\r\n      }, 500);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Page scroll offset is used\r\n   * to get correct coordinates\r\n   * relative to PhotoSwipe viewport.\r\n   *\r\n   * @private\r\n   */\r\n  _updatePageScrollOffset() {\r\n    this.setScrollOffset(0, window.pageYOffset);\r\n  }\r\n\r\n  /**\r\n   * @param {number} x\r\n   * @param {number} y\r\n   */\r\n  setScrollOffset(x, y) {\r\n    this.offset.x = x;\r\n    this.offset.y = y;\r\n    this.dispatch('updateScrollOffset');\r\n  }\r\n\r\n  /**\r\n   * Create main HTML structure of PhotoSwipe,\r\n   * and add it to DOM\r\n   *\r\n   * @private\r\n   */\r\n  _createMainStructure() {\r\n    // root DOM element of PhotoSwipe (.pswp)\r\n    this.element = createElement('pswp', 'div');\r\n    this.element.setAttribute('tabindex', '-1');\r\n    this.element.setAttribute('role', 'dialog');\r\n\r\n    // template is legacy prop\r\n    this.template = this.element;\r\n\r\n    // Background is added as a separate element,\r\n    // as animating opacity is faster than animating rgba()\r\n    this.bg = createElement('pswp__bg', 'div', this.element);\r\n    this.scrollWrap = createElement('pswp__scroll-wrap', 'section', this.element);\r\n    this.container = createElement('pswp__container', 'div', this.scrollWrap);\r\n\r\n    // aria pattern: carousel\r\n    this.scrollWrap.setAttribute('aria-roledescription', 'carousel');\r\n    this.container.setAttribute('aria-live', 'off');\r\n    this.container.setAttribute('id', 'pswp__items');\r\n\r\n    this.mainScroll.appendHolders();\r\n\r\n    this.ui = new UI(this);\r\n    this.ui.init();\r\n\r\n    // append to DOM\r\n    (this.options.appendToEl || document.body).appendChild(this.element);\r\n  }\r\n\r\n\r\n  /**\r\n   * Get position and dimensions of small thumbnail\r\n   *   {x:,y:,w:}\r\n   *\r\n   * Height is optional (calculated based on the large image)\r\n   *\r\n   * @returns {Bounds | undefined}\r\n   */\r\n  getThumbBounds() {\r\n    return getThumbBounds(\r\n      this.currIndex,\r\n      this.currSlide ? this.currSlide.data : this._initialItemData,\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * If the PhotoSwipe can have continuous loop\r\n   * @returns Boolean\r\n   */\r\n  canLoop() {\r\n    return (this.options.loop && this.getNumItems() > 2);\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {PhotoSwipeOptions} options\r\n   * @returns {PreparedPhotoSwipeOptions}\r\n   */\r\n  _prepareOptions(options) {\r\n    if (window.matchMedia('(prefers-reduced-motion), (update: slow)').matches) {\r\n      options.showHideAnimationType = 'none';\r\n      options.zoomAnimationDuration = 0;\r\n    }\r\n\r\n    /** @type {PreparedPhotoSwipeOptions} */\r\n    return {\r\n      ...defaultOptions,\r\n      ...options\r\n    };\r\n  }\r\n}\r\n\r\nexport default PhotoSwipe;\r\n"],"names":[],"mappings":"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;AAC3F,GAAG;AACH;AACA,EAAE,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3E;AACA,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;AAChC,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAClD,KAAK,MAAM;AACX,MAAM,WAAW,GAAG,yBAAyB;AAC7C,QAAQ,SAAS;AACjB,QAAQ,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,IAAI,CAAC;AACzC,QAAQ,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,IAAI,CAAC;AAC1C,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC5E;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe,CAAC;AACtB;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE;AAC7B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAClC,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,KAAK;AACL,GAAG;AACH;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACjC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,MAAM,SAAS,CAAC;AAChB,EAAE,WAAW,GAAG;AAChB;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvB;AACA;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAC1B;AACA;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,GAAG,GAAG,EAAE;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC9B,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAA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,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACzB,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AACrC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;AACrC;AACA,IAAI,MAAM,SAAS,GAAG;AACtB,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS;AAC9B,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;AACtC,MAAM,UAAU,EAAE,MAAM;AACxB,QAAQ,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE;AACjD,UAAU,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACtC,SAAS;AACT,OAAO;AACP,MAAM,MAAM;AACZ,KAAK,CAAC;AACN,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAChC,IAAI,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AAC1C,GAAG;AACH;;ACjbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG;AACvB,EAAE,cAAc,EAAE,IAAI;AACtB,EAAE,OAAO,EAAE,GAAG;AACd,EAAE,IAAI,EAAE,IAAI;AACZ,EAAE,YAAY,EAAE,IAAI;AACpB,EAAE,mBAAmB,EAAE,IAAI;AAC3B,EAAE,qBAAqB,EAAE,GAAG;AAC5B,EAAE,qBAAqB,EAAE,GAAG;AAC5B,EAAE,qBAAqB,EAAE,GAAG;AAC5B,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,SAAS,EAAE,IAAI;AACjB,EAAE,WAAW,EAAE,IAAI;AACnB,EAAE,iBAAiB,EAAE,IAAI;AACzB,EAAE,uBAAuB,EAAE,IAAI;AAC/B,EAAE,gBAAgB,EAAE,eAAe;AACnC,EAAE,aAAa,EAAE,OAAO;AACxB,EAAE,SAAS,EAAE,iBAAiB;AAC9B,EAAE,eAAe,EAAE,MAAM;AACzB,EAAE,iBAAiB,EAAE,KAAK;AAC1B,EAAE,cAAc,EAAE,IAAI;AACtB,EAAE,SAAS,EAAE,GAAG;AAChB;AACA,EAAE,KAAK,EAAE,CAAC;AACV,EAAE,QAAQ,EAAE,4BAA4B;AACxC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,EAAE,MAAM,EAAE,0BAA0B;AACpC,CAAC,CAA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"}

Youez - 2016 - github.com/yon3zu
LinuXploit