{"version":3,"file":"lg-zoom.umd.js","sources":["../../../src/plugins/zoom/lg-zoom-settings.ts","../../../src/lg-events.ts","../../../src/plugins/zoom/lg-zoom.ts"],"sourcesContent":["export interface ZoomSettings {\n /**\n * Value of zoom should be incremented/decremented\n */\n scale: number;\n\n /**\n * Enable/Disable zoom option\n */\n zoom: boolean;\n\n /**\n * Enable actual size icon.\n */\n actualSize: boolean;\n\n /**\n * Once the slide transition is completed, how much time should take zoom plugin to activate\n * @description Some css styles will be added to the images if zoom is enabled.\n * So it might conflict if you add any custom styles to the images such as the initial transition while opening the gallery.\n * So you can delay adding zoom related styles to the images by changing the value of enableZoomAfter.\n */\n enableZoomAfter: number;\n\n /**\n * Show zoom in, zoom out icons\n */\n showZoomInOutIcons: boolean;\n\n /**\n * Actual size icons\n */\n actualSizeIcons: {\n zoomIn: 'lg-zoom-in' | 'lg-actual-size';\n zoomOut: 'lg-zoom-out' | 'lg-actual-size';\n };\n}\n\nexport const zoomSettings: ZoomSettings = {\n scale: 1,\n zoom: true,\n actualSize: true,\n showZoomInOutIcons: false,\n actualSizeIcons: {\n zoomIn: 'lg-zoom-in',\n zoomOut: 'lg-zoom-out',\n },\n enableZoomAfter: 300,\n};\n","import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n};\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see Methods\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 sub-html content (ex : title/ description) has been appended into the slide.\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}\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 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 if (this.settings.zoom) {\n this.init();\n\n // Store the zoomable timeout value just to clear it while closing\n this.zoomableTimeout = false;\n this.positionChanged = false;\n\n // Set the initial value center\n this.pageX = this.core.outer.width() / 2;\n this.pageY =\n this.core.outer.height() / 2 + this.$LG(window).scrollTop();\n\n this.scale = 1;\n }\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 this.core.getSlideItem(event.detail.index).addClass('lg-zoomable');\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) {\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($image: HTMLImageElement, rotateValue: number, axis: string) {\n const imageSizes: {\n [key: string]: string;\n } = {\n y: 'offsetHeight',\n x: 'offsetWidth',\n };\n if (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($image: lgQuery, rotateValue: number) {\n const $lg = this.core.$lgContent.get();\n const scale = parseFloat($image.attr('data-scale') as string) || 1;\n const imgEl = $image.get() as HTMLImageElement;\n const allowY =\n this.getImageSize(imgEl, rotateValue, 'y') * scale >\n $lg.clientHeight;\n const allowX =\n this.getImageSize(imgEl, rotateValue, 'x') * scale >\n $lg.clientWidth;\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 /**\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 const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n const imageNode = $image.get();\n if (!imageNode) return;\n\n const containerRect = this.core.outer.get().getBoundingClientRect();\n // Find offset manually to avoid issue after zoom\n const offsetX =\n (containerRect.width - imageNode.offsetWidth) / 2 +\n containerRect.left;\n const offsetY =\n (containerRect.height - imageNode.offsetHeight) / 2 +\n this.$LG(window).scrollTop() +\n containerRect.top;\n let originalX;\n let originalY;\n\n if (scale === 1) {\n this.positionChanged = false;\n }\n\n if (this.positionChanged) {\n originalX =\n parseFloat($image.parent().attr('data-x')) /\n (parseFloat($image.attr('data-scale')) - 1);\n originalY =\n parseFloat($image.parent().attr('data-y')) /\n (parseFloat($image.attr('data-scale')) - 1);\n\n this.pageX = originalX + offsetX;\n this.pageY = originalY + offsetY;\n\n this.positionChanged = false;\n }\n\n const _x = this.pageX - offsetX;\n const _y = this.pageY - offsetY;\n\n const x = (scale - 1) * _x;\n const y = (scale - 1) * _y;\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\n $image\n .attr('data-scale', style.scale + '')\n .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 $imageWrap.attr('data-x', style.x).attr('data-y', 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 const currentItem = this.core.galleryItems[this.core.index];\n // Allow zoom only on image\n if (\n !currentItem.src ||\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 +\n this.$LG(window).scrollTop() +\n 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 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 this.setActualSize(this.core.index, event);\n }\n\n event.preventDefault();\n }\n });\n\n // Update zoom on resize and orientationchange\n this.core.LGel.on(`${lGEvents.containerResize}.zoom`, () => {\n if (!this.core.lgOpened) return;\n this.setPageCords();\n this.zoomImage(this.scale);\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\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.resetZoom(prevIndex);\n },\n );\n\n // Drag option after zoom\n this.zoomDrag();\n\n this.pinchZoom();\n\n this.zoomSwipe();\n }\n\n zoomIn(scale?: number): void {\n const currentItem = this.core.galleryItems[this.core.index];\n // Allow zoom only on image\n if (!currentItem.src) {\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 data-x data-y');\n $item.find('.lg-image').first().removeAttr('style data-scale');\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 e.preventDefault();\n if (\n e.targetTouches.length === 2 &&\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 e.preventDefault();\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 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 const rotateEl = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-rotate')\n .first()\n .get();\n\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 $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-object')\n .first();\n const dataX = parseFloat(_LGel.attr('data-x')) || 0;\n const dataY = parseFloat(_LGel.attr('data-y')) || 0;\n const distance: Coords = {} as Coords;\n\n distance.x =\n -Math.abs(dataX) +\n distanceXnew * this.getModifier(rotateValue, 'X', rotateEl);\n distance.y =\n -Math.abs(dataY) +\n distanceYnew * this.getModifier(rotateValue, 'Y', rotateEl);\n\n const possibleSwipeCords = this.getPossibleSwipeDragCords(\n $image,\n rotateValue,\n );\n\n if (Math.abs(distanceXnew) > 15 || Math.abs(distanceYnew) > 15) {\n if (allowY) {\n if (distance.y <= -possibleSwipeCords.maxY) {\n distance.y = -possibleSwipeCords.maxY;\n } else if (distance.y >= -possibleSwipeCords.minY) {\n distance.y = -possibleSwipeCords.minY;\n }\n }\n\n if (allowX) {\n if (distance.x <= -possibleSwipeCords.maxX) {\n distance.x = -possibleSwipeCords.maxX;\n } else if (distance.x >= -possibleSwipeCords.minX) {\n distance.x = -possibleSwipeCords.minX;\n }\n }\n\n if (allowY) {\n _LGel.attr('data-y', Math.abs(distance.y));\n } else {\n const dataY = parseFloat(_LGel.attr('data-y')) || 0;\n\n distance.y = -Math.abs(dataY);\n }\n\n if (allowX) {\n _LGel.attr('data-x', Math.abs(distance.x));\n } else {\n const dataX = parseFloat(_LGel.attr('data-x')) || 0;\n distance.x = -Math.abs(dataX);\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: any,\n allowY: any,\n possibleSwipeCords: PossibleCords,\n dataY: number,\n dataX: number,\n rotateValue: number,\n rotateEl: HTMLElement,\n ): Coords {\n const distance: Coords = {} as Coords;\n if (allowY) {\n distance.y =\n -Math.abs(dataY) +\n (endCoords.y - startCoords.y) *\n this.getModifier(rotateValue, 'Y', rotateEl);\n\n if (distance.y <= -possibleSwipeCords.maxY) {\n const diffMaxY = -possibleSwipeCords.maxY - distance.y;\n distance.y = -possibleSwipeCords.maxY - diffMaxY / 6;\n } else if (distance.y >= -possibleSwipeCords.minY) {\n const diffMinY = distance.y - -possibleSwipeCords.minY;\n distance.y = -possibleSwipeCords.minY + diffMinY / 6;\n }\n } else {\n distance.y = -Math.abs(dataY);\n }\n\n if (allowX) {\n distance.x =\n -Math.abs(dataX) +\n (endCoords.x - startCoords.x) *\n this.getModifier(rotateValue, 'X', rotateEl);\n\n if (distance.x <= -possibleSwipeCords.maxX) {\n const diffMaxX = -possibleSwipeCords.maxX - distance.x;\n distance.x = -possibleSwipeCords.maxX - diffMaxX / 6;\n } else if (distance.x >= -possibleSwipeCords.minX) {\n const diffMinX = distance.x - -possibleSwipeCords.minX;\n distance.x = -possibleSwipeCords.minX + diffMinX / 6;\n }\n } else {\n distance.x = -Math.abs(dataX);\n }\n\n return distance;\n }\n\n getPossibleSwipeDragCords(\n $image: lgQuery,\n rotateValue: number,\n ): PossibleCords {\n const $cont = this.core.$lgContent;\n\n const contHeight = $cont.height();\n const contWidth = $cont.width();\n\n const imageYSize = this.getImageSize(\n $image.get() as HTMLImageElement,\n rotateValue,\n 'y',\n );\n const imageXSize = this.getImageSize(\n $image.get() as HTMLImageElement,\n rotateValue,\n 'x',\n );\n const dataY = parseFloat($image.attr('data-scale')) || 1;\n const elDataScale = Math.abs(dataY);\n\n const minY = (contHeight - imageYSize) / 2;\n const maxY = Math.abs(imageYSize * elDataScale - contHeight + minY);\n\n const minX = (contWidth - imageXSize) / 2;\n\n const maxX = Math.abs(imageXSize * elDataScale - contWidth + minX);\n\n if (rotateValue === 90) {\n return {\n minY: minX,\n maxY: maxX,\n minX: minY,\n maxX: maxY,\n };\n } else {\n return {\n minY: minY,\n maxY: maxY,\n minX: minX,\n maxX: maxX,\n };\n }\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\n let dataX = 0;\n let dataY = 0;\n let possibleSwipeCords: PossibleCords;\n\n let _LGel: lgQuery;\n\n let rotateEl = (null as unknown) as HTMLElement;\n let rotateValue = 0;\n\n let $item = this.core.getSlideItem(this.core.index);\n\n this.core.$inner.on('touchstart.lg', (e) => {\n e.preventDefault();\n const currentItem = this.core.galleryItems[this.core.index];\n // Allow zoom only on image\n if (!currentItem.src) {\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 startTime = new Date();\n this.core.touchAction = 'zoomSwipe';\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-object')\n .first();\n\n _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n\n rotateEl = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-rotate')\n .first()\n .get();\n rotateValue = this.getCurrentRotation(rotateEl);\n\n const dragAllowedAxises = this.getDragAllowedAxises(\n $image,\n Math.abs(rotateValue),\n );\n\n allowY = dragAllowedAxises.allowY;\n allowX = dragAllowedAxises.allowX;\n if (allowX || allowY) {\n startCoords = this.getSwipeCords(e, Math.abs(rotateValue));\n }\n\n dataY = parseFloat(_LGel.attr('data-y'));\n dataX = parseFloat(_LGel.attr('data-x'));\n\n possibleSwipeCords = this.getPossibleSwipeDragCords(\n $image,\n 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 e.preventDefault();\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 this.core.touchAction = 'zoomSwipe';\n\n endCoords = this.getSwipeCords(e, Math.abs(rotateValue));\n\n const distance = this.getZoomSwipeCords(\n startCoords,\n endCoords,\n allowX,\n allowY,\n possibleSwipeCords,\n dataY,\n dataX,\n rotateValue,\n rotateEl,\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 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 let rotateEl = (null as unknown) as HTMLElement;\n let rotateValue = 0;\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 dataY: number;\n let dataX: number;\n let _LGel: lgQuery;\n\n this.core.outer.on('mousedown.lg.zoom', (e) => {\n const currentItem = this.core.galleryItems[this.core.index];\n // Allow zoom only on image\n if (!currentItem.src) {\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\n // execute only on .lg-object\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-object')\n .first();\n _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n rotateEl = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-rotate')\n .get();\n rotateValue = this.getCurrentRotation(rotateEl);\n\n const dragAllowedAxises = this.getDragAllowedAxises(\n $image,\n Math.abs(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(rotateValue),\n );\n\n possibleSwipeCords = this.getPossibleSwipeDragCords(\n $image,\n rotateValue,\n );\n\n isDragging = true;\n\n dataY = parseFloat(_LGel.attr('data-y'));\n dataX = parseFloat(_LGel.attr('data-x'));\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(e, Math.abs(rotateValue));\n\n const distance = this.getZoomSwipeCords(\n startCoords,\n endCoords,\n allowX,\n allowY,\n possibleSwipeCords,\n dataY,\n dataX,\n rotateValue,\n rotateEl,\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(e, Math.abs(rotateValue));\n\n const touchDuration =\n endTime.valueOf() - startTime.valueOf();\n this.touchendZoom(\n startCoords,\n endCoords,\n allowX,\n allowY,\n touchDuration,\n 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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"}