\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * First time when an item is loaded lightGallery adds some delay for showing the completed item\n * to show transition effect on item load\n * Respect the delay when you use this event\n */\n delay: number;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n * \n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n *
\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n\n /**\n * True for first slide\n */\n isFirstSlide: boolean;\n}\n","import { ZoomSettings, zoomSettings } from './lg-zoom-settings';\nimport { LgQuery, lgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { lGEvents } from '../../lg-events';\n\ninterface Coords {\n x: number;\n y: number;\n}\n\ninterface DragAllowedAxises {\n allowX: boolean;\n allowY: boolean;\n}\ninterface ZoomTouchEvent {\n pageX: number;\n targetTouches: { pageY: number; pageX: number }[];\n pageY: number;\n}\ninterface PossibleCords {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n}\nexport default class Zoom {\n private core: LightGallery;\n private settings: ZoomSettings;\n private $LG!: LgQuery;\n zoomableTimeout: any;\n positionChanged!: boolean;\n pageX!: number;\n pageY!: number;\n scale!: number;\n\n imageYSize!: number;\n imageXSize!: number;\n containerRect!: ClientRect;\n rotateValue!: number;\n modifierX!: number;\n modifierY!: number;\n dragAllowedAxises!: DragAllowedAxises;\n top!: number;\n left!: number;\n scrollTop!: number;\n constructor(instance: LightGallery, $LG: LgQuery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.$LG = $LG;\n\n this.settings = { ...zoomSettings, ...this.core.settings };\n\n return this;\n }\n\n // Append Zoom controls. Actual size, Zoom-in, Zoom-out\n buildTemplates(): void {\n let zoomIcons = this.settings.showZoomInOutIcons\n ? ``\n : '';\n\n if (this.settings.actualSize) {\n zoomIcons += ``;\n }\n\n this.core.outer.addClass('lg-use-transition-for-zoom');\n\n this.core.$toolbar.first().append(zoomIcons);\n }\n\n /**\n * @desc Enable zoom option only once the image is completely loaded\n * If zoomFromOrigin is true, Zoom is enabled once the dummy image has been inserted\n *\n * Zoom styles are defined under lg-zoomable CSS class.\n */\n enableZoom(event: CustomEvent): void {\n // delay will be 0 except first time\n let _speed = this.settings.enableZoomAfter + event.detail.delay;\n\n // set _speed value 0 if gallery opened from direct url and if it is first slide\n if (\n this.$LG('body').first().hasClass('lg-from-hash') &&\n event.detail.delay\n ) {\n // will execute only once\n _speed = 0;\n } else {\n // Remove lg-from-hash to enable starting animation.\n this.$LG('body').first().removeClass('lg-from-hash');\n }\n\n this.zoomableTimeout = setTimeout(() => {\n if (!this.isImageSlide()) {\n return;\n }\n this.core.getSlideItem(event.detail.index).addClass('lg-zoomable');\n if (event.detail.index === this.core.index) {\n this.setZoomEssentials();\n }\n }, _speed + 30);\n }\n\n enableZoomOnSlideItemLoad(): void {\n // Add zoomable class\n this.core.LGel.on(\n `${lGEvents.slideItemLoad}.zoom`,\n this.enableZoom.bind(this),\n );\n }\n\n getModifier(rotateValue: number, axis: string, el: HTMLElement): number {\n const originalRotate = rotateValue;\n rotateValue = Math.abs(rotateValue);\n const transformValues = this.getCurrentTransform(el);\n if (!transformValues) {\n return 1;\n }\n let modifier = 1;\n if (axis === 'X') {\n const flipHorizontalValue = Math.sign(\n parseFloat(transformValues[0]),\n );\n if (rotateValue === 0 || rotateValue === 180) {\n modifier = 1;\n } else if (rotateValue === 90) {\n if (\n (originalRotate === -90 && flipHorizontalValue === 1) ||\n (originalRotate === 90 && flipHorizontalValue === -1)\n ) {\n modifier = -1;\n } else {\n modifier = 1;\n }\n }\n modifier = modifier * flipHorizontalValue;\n } else {\n const flipVerticalValue = Math.sign(parseFloat(transformValues[3]));\n if (rotateValue === 0 || rotateValue === 180) {\n modifier = 1;\n } else if (rotateValue === 90) {\n const sinX = parseFloat(transformValues[1]);\n const sinMinusX = parseFloat(transformValues[2]);\n modifier = Math.sign(\n sinX * sinMinusX * originalRotate * flipVerticalValue,\n );\n }\n modifier = modifier * flipVerticalValue;\n }\n return modifier;\n }\n\n getImageSize(\n $image: HTMLImageElement,\n rotateValue: number,\n axis: string,\n ): number {\n const imageSizes: {\n [key: string]: string;\n } = {\n y: 'offsetHeight',\n x: 'offsetWidth',\n };\n if (Math.abs(rotateValue) === 90) {\n // Swap axis\n if (axis === 'x') {\n axis = 'y';\n } else {\n axis = 'x';\n }\n }\n return (($image as unknown) as any)[imageSizes[axis]];\n }\n\n getDragCords(e: MouseEvent, rotateValue: number): Coords {\n if (rotateValue === 90) {\n return {\n x: e.pageY,\n y: e.pageX,\n };\n } else {\n return {\n x: e.pageX,\n y: e.pageY,\n };\n }\n }\n getSwipeCords(e: TouchEvent, rotateValue: number): Coords {\n const x = e.targetTouches[0].pageX;\n const y = e.targetTouches[0].pageY;\n if (rotateValue === 90) {\n return {\n x: y,\n y: x,\n };\n } else {\n return {\n x: x,\n y: y,\n };\n }\n }\n\n getDragAllowedAxises(\n rotateValue: number,\n scale?: number,\n ): DragAllowedAxises {\n scale = scale || this.scale || 1;\n const allowY = this.imageYSize * scale > this.containerRect.height;\n const allowX = this.imageXSize * scale > this.containerRect.width;\n if (rotateValue === 90) {\n return {\n allowX: allowY,\n allowY: allowX,\n };\n } else {\n return {\n allowX: allowX,\n allowY: allowY,\n };\n }\n }\n\n /**\n *\n * @param {Element} el\n * @return matrix(cos(X), sin(X), -sin(X), cos(X), 0, 0);\n * Get the current transform value\n */\n getCurrentTransform(el: HTMLElement): string[] | undefined {\n if (!el) {\n return;\n }\n const st = window.getComputedStyle(el, null);\n const tm =\n st.getPropertyValue('-webkit-transform') ||\n st.getPropertyValue('-moz-transform') ||\n st.getPropertyValue('-ms-transform') ||\n st.getPropertyValue('-o-transform') ||\n st.getPropertyValue('transform') ||\n 'none';\n if (tm !== 'none') {\n return tm.split('(')[1].split(')')[0].split(',');\n }\n return;\n }\n\n getCurrentRotation(el: HTMLElement): number {\n if (!el) {\n return 0;\n }\n const values: string[] | undefined = this.getCurrentTransform(el);\n if (values) {\n return Math.round(\n Math.atan2(parseFloat(values[1]), parseFloat(values[0])) *\n (180 / Math.PI),\n );\n // If you want rotate in 360\n //return (angle < 0 ? angle + 360 : angle);\n }\n return 0;\n }\n\n setZoomEssentials(): void {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n\n const rotateEl = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-rotate')\n .first()\n .get();\n this.rotateValue = this.getCurrentRotation(rotateEl);\n\n this.imageYSize = this.getImageSize(\n $image.get() as HTMLImageElement,\n this.rotateValue,\n 'y',\n );\n this.imageXSize = this.getImageSize(\n $image.get() as HTMLImageElement,\n this.rotateValue,\n 'x',\n );\n this.containerRect = this.core.outer.get().getBoundingClientRect();\n\n this.modifierX = this.getModifier(this.rotateValue, 'X', rotateEl);\n this.modifierY = this.getModifier(this.rotateValue, 'Y', rotateEl);\n }\n\n /**\n * @desc Image zoom\n * Translate the wrap and scale the image to get better user experience\n *\n * @param {String} scale - Zoom decrement/increment value\n */\n zoomImage(scale: number): void {\n // Find offset manually to avoid issue after zoom\n const offsetX =\n (this.containerRect.width - this.imageXSize) / 2 +\n this.containerRect.left;\n\n const { top, bottom } = this.core.mediaContainerPosition;\n const topBottomSpacing = Math.abs(top - bottom) / 2;\n\n const offsetY =\n (this.containerRect.height -\n this.imageYSize -\n topBottomSpacing * this.modifierX) /\n 2 +\n this.scrollTop +\n this.containerRect.top;\n\n let originalX;\n let originalY;\n\n if (scale === 1) {\n this.positionChanged = false;\n }\n\n const dragAllowedAxises = this.getDragAllowedAxises(\n Math.abs(this.rotateValue),\n scale,\n );\n\n const { allowY, allowX } = dragAllowedAxises;\n if (this.positionChanged) {\n originalX = this.left / (this.scale - 1);\n originalY = this.top / (this.scale - 1);\n this.pageX = Math.abs(originalX) + offsetX;\n this.pageY = Math.abs(originalY) + offsetY;\n\n this.positionChanged = false;\n }\n\n const possibleSwipeCords = this.getPossibleSwipeDragCords(\n this.rotateValue,\n scale,\n );\n\n const _x = offsetX - this.pageX;\n const _y = offsetY - this.pageY;\n\n let x = (scale - 1) * _x;\n let y = (scale - 1) * _y;\n\n if (allowX) {\n if (this.isBeyondPossibleLeft(x, possibleSwipeCords.minX)) {\n x = possibleSwipeCords.minX;\n } else if (this.isBeyondPossibleRight(x, possibleSwipeCords.maxX)) {\n x = possibleSwipeCords.maxX;\n }\n } else {\n if (scale > 1) {\n if (x < possibleSwipeCords.minX) {\n x = possibleSwipeCords.minX;\n } else if (x > possibleSwipeCords.maxX) {\n x = possibleSwipeCords.maxX;\n }\n }\n }\n\n if (allowY) {\n if (this.isBeyondPossibleTop(y, possibleSwipeCords.minY)) {\n y = possibleSwipeCords.minY;\n } else if (\n this.isBeyondPossibleBottom(y, possibleSwipeCords.maxY)\n ) {\n y = possibleSwipeCords.maxY;\n }\n } else {\n // If the translate value based on index of beyond the viewport, utilize the available space to prevent image being cut out\n if (scale > 1) {\n //If image goes beyond viewport top, use the minim possible translate value\n if (y < possibleSwipeCords.minY) {\n y = possibleSwipeCords.minY;\n } else if (y > possibleSwipeCords.maxY) {\n y = possibleSwipeCords.maxY;\n }\n }\n }\n\n this.setZoomStyles({\n x: x,\n y: y,\n scale,\n });\n }\n\n /**\n * @desc apply scale3d to image and translate to image wrap\n * @param {style} X,Y and scale\n */\n setZoomStyles(style: { x: number; y: number; scale: number }): void {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n const $dummyImage = this.core.outer\n .find('.lg-current .lg-dummy-img')\n .first();\n const $imageWrap = $image.parent();\n this.scale = style.scale;\n $image.css(\n 'transform',\n 'scale3d(' + style.scale + ', ' + style.scale + ', 1)',\n );\n\n $dummyImage.css(\n 'transform',\n 'scale3d(' + style.scale + ', ' + style.scale + ', 1)',\n );\n\n const transform =\n 'translate3d(' + style.x + 'px, ' + style.y + 'px, 0)';\n $imageWrap.css('transform', transform);\n\n this.left = style.x;\n this.top = style.y;\n }\n\n /**\n * @param index - Index of the current slide\n * @param event - event will be available only if the function is called on clicking/taping the imags\n */\n setActualSize(index: number, event?: ZoomTouchEvent): void {\n // Allow zoom only on image\n if (\n !this.isImageSlide() ||\n this.core.outer.hasClass('lg-first-slide-loading')\n ) {\n return;\n }\n const scale = this.getCurrentImageActualSizeScale();\n if (this.core.outer.hasClass('lg-zoomed')) {\n this.scale = 1;\n } else {\n this.scale = this.getScale(scale);\n }\n this.setPageCords(event);\n\n this.beginZoom(this.scale);\n this.zoomImage(this.scale);\n\n setTimeout(() => {\n this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\n }, 10);\n }\n\n getNaturalWidth(index: number): number {\n const $image = this.core.getSlideItem(index).find('.lg-image').first();\n\n const naturalWidth = this.core.galleryItems[index].width;\n return naturalWidth\n ? parseFloat(naturalWidth)\n : undefined || ($image.get() as any).naturalWidth;\n }\n\n getActualSizeScale(naturalWidth: number, width: number): number {\n let _scale;\n let scale;\n if (naturalWidth > width) {\n _scale = naturalWidth / width;\n scale = _scale || 2;\n } else {\n scale = 1;\n }\n return scale;\n }\n\n getCurrentImageActualSizeScale(): number {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n const width = $image.get().offsetWidth;\n const naturalWidth = this.getNaturalWidth(this.core.index) || width;\n return this.getActualSizeScale(naturalWidth, width);\n }\n\n getPageCords(event?: ZoomTouchEvent): Coords {\n const cords: Coords = {} as Coords;\n if (event) {\n cords.x = event.pageX || event.targetTouches[0].pageX;\n cords.y = event.pageY || event.targetTouches[0].pageY;\n } else {\n const containerRect = this.core.outer.get().getBoundingClientRect();\n cords.x = containerRect.width / 2 + containerRect.left;\n cords.y =\n containerRect.height / 2 + this.scrollTop + containerRect.top;\n }\n return cords;\n }\n\n setPageCords(event?: ZoomTouchEvent): void {\n const pageCords = this.getPageCords(event);\n\n this.pageX = pageCords.x;\n this.pageY = pageCords.y;\n }\n\n // If true, zoomed - in else zoomed out\n beginZoom(scale: number): boolean {\n this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\n if (scale > 1) {\n this.core.outer.addClass('lg-zoomed');\n const $actualSize = this.core.getElementById('lg-actual-size');\n $actualSize\n .removeClass(this.settings.actualSizeIcons.zoomIn)\n .addClass(this.settings.actualSizeIcons.zoomOut);\n } else {\n this.resetZoom();\n }\n return scale > 1;\n }\n\n getScale(scale: number): number {\n const actualSizeScale = this.getCurrentImageActualSizeScale();\n if (scale < 1) {\n scale = 1;\n } else if (scale > actualSizeScale) {\n scale = actualSizeScale;\n }\n return scale;\n }\n\n init(): void {\n if (!this.settings.zoom) {\n return;\n }\n this.buildTemplates();\n this.enableZoomOnSlideItemLoad();\n\n let tapped: ReturnType | null = null;\n\n this.core.outer.on('dblclick.lg', (event) => {\n if (!this.$LG(event.target).hasClass('lg-image')) {\n return;\n }\n this.setActualSize(this.core.index, event);\n });\n\n this.core.outer.on('touchstart.lg', (event) => {\n const $target = this.$LG(event.target);\n if (\n event.targetTouches.length === 1 &&\n $target.hasClass('lg-image')\n ) {\n if (!tapped) {\n tapped = setTimeout(() => {\n tapped = null;\n }, 300);\n } else {\n clearTimeout(tapped);\n tapped = null;\n event.preventDefault();\n this.setActualSize(this.core.index, event);\n }\n }\n });\n\n // Update zoom on resize and orientationchange\n this.core.LGel.on(\n `${lGEvents.containerResize}.zoom ${lGEvents.rotateRight}.zoom ${lGEvents.rotateLeft}.zoom ${lGEvents.flipHorizontal}.zoom ${lGEvents.flipVertical}.zoom`,\n () => {\n if (!this.core.lgOpened || !this.isImageSlide()) return;\n this.setPageCords();\n this.setZoomEssentials();\n this.zoomImage(this.scale);\n },\n );\n // Update zoom on resize and orientationchange\n this.$LG(window).on(`scroll.lg.zoom.global${this.core.lgId}`, () => {\n if (!this.core.lgOpened) return;\n this.scrollTop = this.$LG(window).scrollTop();\n });\n\n this.core.getElementById('lg-zoom-out').on('click.lg', () => {\n if (this.core.outer.find('.lg-current .lg-image').get()) {\n this.scale -= this.settings.scale;\n\n this.scale = this.getScale(this.scale);\n this.beginZoom(this.scale);\n this.zoomImage(this.scale);\n }\n });\n\n this.core.getElementById('lg-zoom-in').on('click.lg', () => {\n this.zoomIn();\n });\n\n this.core.getElementById('lg-actual-size').on('click.lg', () => {\n this.setActualSize(this.core.index);\n });\n\n this.core.LGel.on(`${lGEvents.beforeOpen}.zoom`, () => {\n this.core.outer.find('.lg-item').removeClass('lg-zoomable');\n });\n this.core.LGel.on(`${lGEvents.afterOpen}.zoom`, () => {\n this.scrollTop = this.$LG(window).scrollTop();\n\n // Set the initial value center\n this.pageX = this.core.outer.width() / 2;\n this.pageY = this.core.outer.height() / 2 + this.scrollTop;\n\n this.scale = 1;\n });\n\n // Reset zoom on slide change\n this.core.LGel.on(\n `${lGEvents.afterSlide}.zoom`,\n (event: CustomEvent) => {\n const { prevIndex } = event.detail;\n this.scale = 1;\n this.positionChanged = false;\n this.resetZoom(prevIndex);\n if (this.isImageSlide()) {\n this.setZoomEssentials();\n }\n },\n );\n\n // Drag option after zoom\n this.zoomDrag();\n\n this.pinchZoom();\n\n this.zoomSwipe();\n\n // Store the zoomable timeout value just to clear it while closing\n this.zoomableTimeout = false;\n this.positionChanged = false;\n }\n\n zoomIn(scale?: number): void {\n // Allow zoom only on image\n if (!this.isImageSlide()) {\n return;\n }\n if (scale) {\n this.scale = scale;\n } else {\n this.scale += this.settings.scale;\n }\n\n this.scale = this.getScale(this.scale);\n this.beginZoom(this.scale);\n this.zoomImage(this.scale);\n }\n\n // Reset zoom effect\n resetZoom(index?: number): void {\n this.core.outer.removeClass('lg-zoomed lg-zoom-drag-transition');\n const $actualSize = this.core.getElementById('lg-actual-size');\n const $item = this.core.getSlideItem(\n index !== undefined ? index : this.core.index,\n );\n $actualSize\n .removeClass(this.settings.actualSizeIcons.zoomOut)\n .addClass(this.settings.actualSizeIcons.zoomIn);\n $item.find('.lg-img-wrap').first().removeAttr('style');\n $item.find('.lg-image').first().removeAttr('style');\n this.scale = 1;\n this.left = 0;\n this.top = 0;\n\n // Reset pagx pagy values to center\n this.setPageCords();\n }\n\n getTouchDistance(e: TouchEvent): number {\n return Math.sqrt(\n (e.targetTouches[0].pageX - e.targetTouches[1].pageX) *\n (e.targetTouches[0].pageX - e.targetTouches[1].pageX) +\n (e.targetTouches[0].pageY - e.targetTouches[1].pageY) *\n (e.targetTouches[0].pageY - e.targetTouches[1].pageY),\n );\n }\n\n pinchZoom(): void {\n let startDist = 0;\n let pinchStarted = false;\n let initScale = 1;\n\n let $item = this.core.getSlideItem(this.core.index);\n\n this.core.$inner.on('touchstart.lg', (e) => {\n $item = this.core.getSlideItem(this.core.index);\n if (!this.isImageSlide()) {\n return;\n }\n if (\n e.targetTouches.length === 2 &&\n !this.core.outer.hasClass('lg-first-slide-loading') &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n initScale = this.scale || 1;\n this.core.outer.removeClass(\n 'lg-zoom-drag-transition lg-zoom-dragging',\n );\n\n this.core.touchAction = 'pinch';\n\n startDist = this.getTouchDistance(e);\n }\n });\n\n this.core.$inner.on('touchmove.lg', (e) => {\n if (\n e.targetTouches.length === 2 &&\n this.core.touchAction === 'pinch' &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n e.preventDefault();\n const endDist = this.getTouchDistance(e);\n\n const distance = startDist - endDist;\n if (!pinchStarted && Math.abs(distance) > 5) {\n pinchStarted = true;\n }\n if (pinchStarted) {\n this.scale = Math.max(1, initScale + -distance * 0.008);\n\n this.zoomImage(this.scale);\n }\n }\n });\n\n this.core.$inner.on('touchend.lg', (e) => {\n if (\n this.core.touchAction === 'pinch' &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n pinchStarted = false;\n startDist = 0;\n if (this.scale <= 1) {\n this.resetZoom();\n } else {\n this.scale = this.getScale(this.scale);\n this.zoomImage(this.scale);\n\n this.core.outer.addClass('lg-zoomed');\n }\n this.core.touchAction = undefined;\n }\n });\n }\n\n touchendZoom(\n startCoords: Coords,\n endCoords: Coords,\n allowX: boolean,\n allowY: boolean,\n touchDuration: number,\n rotateValue: number,\n ): void {\n let distanceXnew = endCoords.x - startCoords.x;\n let distanceYnew = endCoords.y - startCoords.y;\n\n let speedX = Math.abs(distanceXnew) / touchDuration + 1;\n let speedY = Math.abs(distanceYnew) / touchDuration + 1;\n\n if (speedX > 2) {\n speedX += 1;\n }\n\n if (speedY > 2) {\n speedY += 1;\n }\n\n distanceXnew = distanceXnew * speedX;\n distanceYnew = distanceYnew * speedY;\n\n const _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n const distance: Coords = {} as Coords;\n\n distance.x = this.left + distanceXnew * this.modifierX;\n distance.y = this.top + distanceYnew * this.modifierY;\n\n const possibleSwipeCords = this.getPossibleSwipeDragCords(rotateValue);\n\n if (Math.abs(distanceXnew) > 15 || Math.abs(distanceYnew) > 15) {\n if (allowY) {\n if (\n this.isBeyondPossibleTop(\n distance.y,\n possibleSwipeCords.minY,\n )\n ) {\n distance.y = possibleSwipeCords.minY;\n } else if (\n this.isBeyondPossibleBottom(\n distance.y,\n possibleSwipeCords.maxY,\n )\n ) {\n distance.y = possibleSwipeCords.maxY;\n }\n }\n\n if (allowX) {\n if (\n this.isBeyondPossibleLeft(\n distance.x,\n possibleSwipeCords.minX,\n )\n ) {\n distance.x = possibleSwipeCords.minX;\n } else if (\n this.isBeyondPossibleRight(\n distance.x,\n possibleSwipeCords.maxX,\n )\n ) {\n distance.x = possibleSwipeCords.maxX;\n }\n }\n\n if (allowY) {\n this.top = distance.y;\n } else {\n distance.y = this.top;\n }\n\n if (allowX) {\n this.left = distance.x;\n } else {\n distance.x = this.left;\n }\n\n this.setZoomSwipeStyles(_LGel, distance);\n\n this.positionChanged = true;\n }\n }\n\n getZoomSwipeCords(\n startCoords: Coords,\n endCoords: Coords,\n allowX: boolean,\n allowY: boolean,\n possibleSwipeCords: PossibleCords,\n ): Coords {\n const distance: Coords = {} as Coords;\n if (allowY) {\n distance.y =\n this.top + (endCoords.y - startCoords.y) * this.modifierY;\n if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\n const diffMinY = possibleSwipeCords.minY - distance.y;\n distance.y = possibleSwipeCords.minY - diffMinY / 6;\n } else if (\n this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)\n ) {\n const diffMaxY = distance.y - possibleSwipeCords.maxY;\n distance.y = possibleSwipeCords.maxY + diffMaxY / 6;\n }\n } else {\n distance.y = this.top;\n }\n\n if (allowX) {\n distance.x =\n this.left + (endCoords.x - startCoords.x) * this.modifierX;\n if (\n this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)\n ) {\n const diffMinX = possibleSwipeCords.minX - distance.x;\n distance.x = possibleSwipeCords.minX - diffMinX / 6;\n } else if (\n this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)\n ) {\n const difMaxX = distance.x - possibleSwipeCords.maxX;\n distance.x = possibleSwipeCords.maxX + difMaxX / 6;\n }\n } else {\n distance.x = this.left;\n }\n\n return distance;\n }\n\n private isBeyondPossibleLeft(x: number, minX: number) {\n return x >= minX;\n }\n private isBeyondPossibleRight(x: number, maxX: number) {\n return x <= maxX;\n }\n private isBeyondPossibleTop(y: number, minY: number) {\n return y >= minY;\n }\n private isBeyondPossibleBottom(y: number, maxY: number) {\n return y <= maxY;\n }\n\n isImageSlide(): boolean {\n const currentItem = this.core.galleryItems[this.core.index];\n return this.core.getSlideType(currentItem) === 'image';\n }\n\n getPossibleSwipeDragCords(\n rotateValue: number,\n scale?: number,\n ): PossibleCords {\n const dataScale = scale || this.scale || 1;\n const elDataScale = Math.abs(dataScale);\n\n const { top, bottom } = this.core.mediaContainerPosition;\n\n const topBottomSpacing = Math.abs(top - bottom) / 2;\n\n const minY =\n (this.imageYSize - this.containerRect.height) / 2 +\n topBottomSpacing * this.modifierX;\n const maxY =\n this.containerRect.height - this.imageYSize * elDataScale + minY;\n\n const minX = (this.imageXSize - this.containerRect.width) / 2;\n\n const maxX =\n this.containerRect.width - this.imageXSize * elDataScale + minX;\n\n let possibleSwipeCords = {\n minY: minY,\n maxY: maxY,\n minX: minX,\n maxX: maxX,\n };\n\n if (Math.abs(rotateValue) === 90) {\n possibleSwipeCords = {\n minY: minX,\n maxY: maxX,\n minX: minY,\n maxX: maxY,\n };\n }\n\n return possibleSwipeCords;\n }\n\n setZoomSwipeStyles(\n LGel: lgQuery,\n distance: { x: number; y: number },\n ): void {\n LGel.css(\n 'transform',\n 'translate3d(' + distance.x + 'px, ' + distance.y + 'px, 0)',\n );\n }\n\n zoomSwipe(): void {\n let startCoords = {} as Coords;\n let endCoords = {} as Coords;\n let isMoved = false;\n\n // Allow x direction drag\n let allowX = false;\n\n // Allow Y direction drag\n let allowY = false;\n\n let startTime: Date = new Date();\n let endTime: Date = new Date();\n let possibleSwipeCords: PossibleCords;\n\n let _LGel: lgQuery;\n\n let $item = this.core.getSlideItem(this.core.index);\n\n this.core.$inner.on('touchstart.lg', (e) => {\n // Allow zoom only on image\n if (!this.isImageSlide()) {\n return;\n }\n $item = this.core.getSlideItem(this.core.index);\n if (\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)) &&\n e.targetTouches.length === 1 &&\n this.core.outer.hasClass('lg-zoomed')\n ) {\n e.preventDefault();\n startTime = new Date();\n this.core.touchAction = 'zoomSwipe';\n _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n\n const dragAllowedAxises = this.getDragAllowedAxises(\n Math.abs(this.rotateValue),\n );\n\n allowY = dragAllowedAxises.allowY;\n allowX = dragAllowedAxises.allowX;\n if (allowX || allowY) {\n startCoords = this.getSwipeCords(\n e,\n Math.abs(this.rotateValue),\n );\n }\n\n possibleSwipeCords = this.getPossibleSwipeDragCords(\n this.rotateValue,\n );\n\n // reset opacity and transition duration\n this.core.outer.addClass(\n 'lg-zoom-dragging lg-zoom-drag-transition',\n );\n }\n });\n\n this.core.$inner.on('touchmove.lg', (e) => {\n if (\n e.targetTouches.length === 1 &&\n this.core.touchAction === 'zoomSwipe' &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n e.preventDefault();\n this.core.touchAction = 'zoomSwipe';\n\n endCoords = this.getSwipeCords(e, Math.abs(this.rotateValue));\n\n const distance = this.getZoomSwipeCords(\n startCoords,\n endCoords,\n allowX,\n allowY,\n possibleSwipeCords,\n );\n\n if (\n Math.abs(endCoords.x - startCoords.x) > 15 ||\n Math.abs(endCoords.y - startCoords.y) > 15\n ) {\n isMoved = true;\n this.setZoomSwipeStyles(_LGel, distance);\n }\n }\n });\n\n this.core.$inner.on('touchend.lg', (e) => {\n if (\n this.core.touchAction === 'zoomSwipe' &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n this.core.touchAction = undefined;\n this.core.outer.removeClass('lg-zoom-dragging');\n if (!isMoved) {\n return;\n }\n isMoved = false;\n endTime = new Date();\n const touchDuration = endTime.valueOf() - startTime.valueOf();\n this.touchendZoom(\n startCoords,\n endCoords,\n allowX,\n allowY,\n touchDuration,\n this.rotateValue,\n );\n }\n });\n }\n\n zoomDrag(): void {\n let startCoords: Coords = {} as Coords;\n let endCoords: Coords = {} as Coords;\n let isDragging = false;\n let isMoved = false;\n\n // Allow x direction drag\n let allowX = false;\n\n // Allow Y direction drag\n let allowY = false;\n\n let startTime: number | Date;\n let endTime;\n\n let possibleSwipeCords: PossibleCords;\n\n let _LGel: lgQuery;\n\n this.core.outer.on('mousedown.lg.zoom', (e) => {\n // Allow zoom only on image\n if (!this.isImageSlide()) {\n return;\n }\n const $item = this.core.getSlideItem(this.core.index);\n if (\n this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)\n ) {\n startTime = new Date();\n _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n\n const dragAllowedAxises = this.getDragAllowedAxises(\n Math.abs(this.rotateValue),\n );\n\n allowY = dragAllowedAxises.allowY;\n allowX = dragAllowedAxises.allowX;\n\n if (this.core.outer.hasClass('lg-zoomed')) {\n if (\n this.$LG(e.target).hasClass('lg-object') &&\n (allowX || allowY)\n ) {\n e.preventDefault();\n startCoords = this.getDragCords(\n e,\n Math.abs(this.rotateValue),\n );\n\n possibleSwipeCords = this.getPossibleSwipeDragCords(\n this.rotateValue,\n );\n\n isDragging = true;\n\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\n this.core.outer.get().scrollLeft += 1;\n this.core.outer.get().scrollLeft -= 1;\n\n this.core.outer\n .removeClass('lg-grab')\n .addClass(\n 'lg-grabbing lg-zoom-drag-transition lg-zoom-dragging',\n );\n // reset opacity and transition duration\n }\n }\n }\n });\n\n this.$LG(window).on(\n `mousemove.lg.zoom.global${this.core.lgId}`,\n (e) => {\n if (isDragging) {\n isMoved = true;\n endCoords = this.getDragCords(\n e,\n Math.abs(this.rotateValue),\n );\n\n const distance = this.getZoomSwipeCords(\n startCoords,\n endCoords,\n allowX,\n allowY,\n possibleSwipeCords,\n );\n\n this.setZoomSwipeStyles(_LGel, distance);\n }\n },\n );\n\n this.$LG(window).on(`mouseup.lg.zoom.global${this.core.lgId}`, (e) => {\n if (isDragging) {\n endTime = new Date();\n isDragging = false;\n this.core.outer.removeClass('lg-zoom-dragging');\n\n // Fix for chrome mouse move on click\n if (\n isMoved &&\n (startCoords.x !== endCoords.x ||\n startCoords.y !== endCoords.y)\n ) {\n endCoords = this.getDragCords(\n e,\n Math.abs(this.rotateValue),\n );\n\n const touchDuration =\n endTime.valueOf() - startTime.valueOf();\n this.touchendZoom(\n startCoords,\n endCoords,\n allowX,\n allowY,\n touchDuration,\n this.rotateValue,\n );\n }\n\n isMoved = false;\n }\n\n this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\n });\n }\n\n closeGallery(): void {\n this.resetZoom();\n }\n\n destroy(): void {\n // Unbind all events added by lightGallery zoom plugin\n this.$LG(window).off(`.lg.zoom.global${this.core.lgId}`);\n this.core.LGel.off('.lg.zoom');\n this.core.LGel.off('.zoom');\n clearTimeout(this.zoomableTimeout);\n this.zoomableTimeout = false;\n }\n}\n"],"names":[],"mappings":"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"}