{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/classPrivateFieldGet.js","webpack:///./node_modules/@babel/runtime/helpers/classPrivateFieldSet.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/lodash/uniqueId.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/lodash/snakeCase.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack:///./node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js","webpack:///./node_modules/dialog-polyfill/dist/dialog-polyfill.esm.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/svg4everybody/dist/svg4everybody.js","webpack:///../src/lg-events.ts","webpack:///../src/lg-settings.ts","webpack:///../src/lgQuery.ts","webpack:///../src/lg-utils.ts","webpack:///../src/lightgallery.ts","webpack:///../src/index.ts","webpack:///../../../src/plugins/thumbnail/lg-thumbnail-settings.ts","webpack:///../../../src/lg-events.ts","webpack:///../../../src/plugins/thumbnail/lg-thumbnail.ts","webpack:///../../../src/plugins/zoom/lg-zoom-settings.ts","webpack:///../../../src/plugins/zoom/lg-zoom.ts","webpack:///../../../src/plugins/video/lg-video-settings.ts","webpack:///../../../src/plugins/video/lg-video-utils.ts","webpack:///../../../src/plugins/video/lg-video.ts","webpack:///../src/index.js","webpack:///../index.js","webpack:///./node_modules/requestidlecallback-polyfill/index.js","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///./node_modules/intersection-observer/intersection-observer.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/@babel/runtime/helpers/toPrimitive.js","webpack:///./node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js","webpack:///./node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js","webpack:///./node_modules/@babel/runtime/helpers/regeneratorRuntime.js","webpack:///./node_modules/lodash/_createCompounder.js","webpack:///./node_modules/lodash/_arrayReduce.js","webpack:///./node_modules/lodash/deburr.js","webpack:///./node_modules/lodash/_deburrLetter.js","webpack:///./node_modules/lodash/_basePropertyOf.js","webpack:///./node_modules/lodash/words.js","webpack:///./node_modules/lodash/_asciiWords.js","webpack:///./node_modules/lodash/_hasUnicodeWord.js","webpack:///./node_modules/lodash/_unicodeWords.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js"],"names":["classApplyDescriptorGet","require","classExtractFieldDescriptor","module","exports","receiver","privateMap","descriptor","__esModule","classApplyDescriptorSet","value","runtime","regeneratorRuntime","accidentalStrictMode","globalThis","Function","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","error","done","Promise","then","fn","self","this","args","arguments","apply","err","undefined","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","arr","i","instance","Constructor","TypeError","toPropertyKey","_defineProperties","target","props","length","enumerable","configurable","writable","Object","defineProperty","protoProps","staticProps","prototype","obj","toString","idCounter","prefix","id","_typeof","Symbol","iterator","constructor","snakeCase","createCompounder","result","word","index","toLowerCase","baseToString","arrayLikeToArray","o","minLen","n","call","slice","name","Array","from","test","len","arr2","toPrimitive","String","action","has","get","supportCustomEvent","window","CustomEvent","safeDispatchEvent","event","check","type","dispatchEvent","findNearestDialog","el","localName","parentElement","parentNode","host","safeBlur","shadowRoot","activeElement","blur","document","body","inNodeList","nodeList","node","isFormMethodDialog","hasAttribute","getAttribute","isConnected","element","contains","findFormSubmitter","submitter","form","HTMLFormElement","dialogPolyfill","formSubmitter","getRootNode","maybeHandleSubmit","defaultPrevented","imagemapUseValue","dialog","preventDefault","close","dialogPolyfillInfo","dialog_","replacedStyleTop_","openAsModal_","setAttribute","show","bind","showModal","addEventListener","returnValue","MutationObserver","maybeHideModal","observe","attributes","attributeFilter","timeout","removed","cb","downgradeModal","delayModel","ev","cand","substr","clearTimeout","setTimeout","forEach","set","setOpen","backdrop_","createElement","className","backdropMouseEvent_","x","createEvent","initCustomEvent","bubbles","cancelable","detail","Event","style","zIndex","top","removeChild","dm","removeDialog","removeAttribute","e","focus","fake","insertBefore","firstChild","tabIndex","redirectedEvent","initMouseEvent","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","stopPropagation","focus_","querySelector","findFocusableElementWithin","hostElement","query","map","push","join","Element","elems","querySelectorAll","tagName","updateZIndex","dialogZ","backdropZ","Error","open","pushDialog","s","getComputedStyle","invalid","k","ok","opacity","position","webkitOverflowScrolling","createsStackingContext","console","warn","needsCentering","reposition","nextSibling","opt_returnValue","closeEvent","scrollTop","documentElement","topValue","innerHeight","offsetHeight","Math","max","styleSheets","styleSheet","cssRules","j","rule","selectedNodes","selectorText","cssTop","getPropertyValue","cssBottom","bottom","isInlinePositionSetByStylesheet","HTMLDialogElement","forceRegisterDialog","pendingDialogStack","checkDOM","checkDOM_","overlay","forwardTab_","handleKey_","handleFocus_","zIndexLow_","zIndexHigh_","mo_","records","rec","c","removedNodes","concat","DialogManager","blockDocument","childList","subtree","unblockDocument","removeEventListener","disconnect","updateStacking","dpi","last","appendChild","containedByTopDialog_","candidate","composedPath","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","keyCode","cancelEvent","indexOf","allowed","unshift","splice","testForm","method","methodDescriptor","getOwnPropertyDescriptor","realGet","realSet","v","shift","offsetX","offsetY","nativeFormSubmit","submit","objectWithoutPropertiesLoose","source","excluded","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","arrayWithoutHoles","iterableToArray","nonIterableSpread","root","svg4everybody","embed","parent","svg","fragment","createDocumentFragment","viewBox","clone","cloneNode","childNodes","loadreadystatechange","xhr","onreadystatechange","readyState","cachedDocument","_cachedDocument","implementation","createHTMLDocument","innerHTML","responseText","_cachedTarget","_embeds","item","getElementById","getSVGAncestor","nodeName","rawopts","polyfill","opts","inIframe","navigator","userAgent","match","requests","requestAnimationFrame","uses","getElementsByTagName","numberOfSvgUseElementsToBypass","oninterval","use","src","attributeName","validate","srcSplit","split","url","XMLHttpRequest","send","factory","lGEvents","lightGalleryCoreSettings","mode","easing","speed","licenseKey","height","width","addClass","startClass","backdropDuration","container","startAnimationDuration","zoomFromOrigin","hideBarsDelay","showBarsAfter","slideDelay","supportLegacyBrowser","allowMediaOverlap","videoMaxSize","loadYouTubePoster","defaultCaptionHeight","ariaLabelledby","ariaDescribedby","resetScrollPosition","hideScrollbar","closable","swipeToClose","closeOnTap","showCloseIcon","showMaximizeIcon","loop","escKey","keyPress","trapFocus","controls","slideEndAnimation","hideControlOnEnd","mousewheel","getCaptionFromTitleOrAlt","appendSubHtmlTo","subHtmlSelectorRelative","preload","numberOfSlideItemsInDom","selector","selectWithin","nextHtml","prevHtml","iframeWidth","iframeHeight","iframeMaxWidth","iframeMaxHeight","download","counter","appendCounterTo","swipeThreshold","enableSwipe","enableDrag","dynamic","dynamicEl","extraProps","exThumbImage","isMobile","mobileSettings","plugins","strings","closeGallery","toggleMaximize","previousSlide","nextSlide","playVideo","cssVenderPrefixes","_getSelector","firstElement","_getFirstEl","lgQuery","replace","r","random","context","substring","func","cssProperty","property","group1","toUpperCase","charAt","eventName","eventNamespace","filter","every","attr","_each","$LG","attrs","wrapper","classNames","classList","add","remove","attribute","hasClass","removeClass","_this","_setCssVendorPrefix","events","listener","isArray","eventListeners","on","off","keys","isEventMatched","customEvent","fetch","res","text","html","insertAdjacentHTML","pageYOffset","scrollLeft","pageXOffset","left","rect","getBoundingClientRect","bodyMarginLeft","marginLeft","parseFloat","currentStyle","clientWidth","paddingLeft","paddingRight","clientHeight","paddingTop","paddingBottom","params","evt","matches","msMatchesSelector","webkitMatchesSelector","defaultDynamicOptions","convertToData","g","utils","spacing","defaultLgSize","lgSize","isResponsiveSizes","wWidth","innerWidth","size_1","parseInt","size","cWidth","cHeight","maxWidth","min","maxHeight","ratio","imageSize","LGel","find","first","containerRect","wHeight","elWidth","elHeight","elStyle","offset","borderLeft","y","borderTop","iframeTitle","altAttr","srcset","sizes","sources","imgMarkup","sourceTag","JSON","parse","srcItms","rsWidth","rsSrc","_src","img","complete","naturalWidth","_poster","dummyImg","videoContStyle","playVideoString","_isVideo","youtube","vimeo","elements","display","visibility","items","dynamicElements","availableDynamicOptions","specified","dynamicAttr","label","currentItem","alt","title","thumb","subHtml","isHTML5VIdeo","html5","wistia","lgId","options","lgOpened","lGalleryOn","lgBusy","currentItemsInDom","prevScrollTop","bodyPaddingRight","isDummyImageRemoved","dragOrSwipeEnabled","mediaContainerPosition","generateSettings","buildModules","settings","galleryItems","getItems","normalizeSettings","init","validateLicense","LightGallery","__assign","addSlideVideoInfo","buildStructure","trigger","triggerPosterClick","arrow","openGalleryOnItemClick","this_1","$element","uuid","generateUUID","currentItemIndex","openGallery","plugin","getSlideItemId","getIdName","outer","$container","subHtmlCont","addClasses","containerClassName","closeIcon","maximizeIcon","template","append","css","$lgComponents","$backdrop","$inner","$content","$toolbar","outerClassNames","manageSingleSlideClassName","refreshOnResize","hideBars","manageCloseGallery","initModules","__slideVideoInfo","getMediaContainerPosition","top_1","currentImageSize","resizeVideoSlide","imgStyle","getDummyImgStyles","lgVideoStyle","getVideoContStyle","getSlideItem","currentSrc","updateControls","empty","_index","some","galleryItem","itemIndex","organizeSlideItems","loadContent","updateCurrentCounter","children","shouldHideScrollbar","bodyRect","scrollbarWidth","itemsToBeInsertedToDom","getItemsToBeInsertedToDom","addHtml","transform","setMediaContainerPosition","currentSlide_1","slide","captionHeight","thumbContainer","hideBarTimeout","$img","picturefill","counterHtml","subHtmlUrl","fL","eq","load","currentSlide","$currentSlide","$currentItem","_dummyImgSrc","dummyImgContent","currentGalleryItem","isFirstSlideWithZoomAnimation","getDummyImageContent","prepend","$slide","isHTML5VideoWithoutPoster","onLoad","onError","mediaObject","delay","isFirstSlide","onSlideObjectLoad","triggerSlideItemLoad","_speed","getSlideType","poster","video","_html5Video","responsive","srcDyItms","videoInfo","iframe","top_2","videoSize","markup","setImgMarkup","initPictureFill","html5Video","hasPoster","removeAttr","onLgObjectLoad","loadContentOnFirstSlideLoad","prevIndex","numberOfItems","possibleNumberOfItems","prevIndexItem","_element","idx","numberOfExistingItems","currentItemId","downloadUrl","$download","direction","currentSlideItem","previousSlideItem","fromTouch","fromThumb","getPreviousSlideIndex","numberOfGalleryItems","previousSlideItem_1","setDownloadValue","top_3","arrowDisable","touchPrev","touchNext","makeSlideAnimation","startCoords","endCoords","distanceX","pageX","distanceY","pageY","allowSwipe","swipeDirection","abs","setTranslate","offsetWidth","gutter","scale","distance","triggerClick","distanceAbs","goToNextSlide","goToPrevSlide","isPosterElement","isMoved","isSwiping","$item","touches","touchAction","manageSwipeClass","touchMove","touchEnd","isDraging","_touchNext","_touchPrev","_loop","$prev","$next","$el","xValue","yValue","scaleX","scaleY","lastCall","deltaY","now","Date","getTime","playButton","toggleClass","preventScroll","focusableEls","firstFocusableEl","lastFocusableEl","mousedown","isSlideElement","force","top_4","destroyModules","removeTimeout","resetScrollBar","destroy","invalidateItems","updateCounterTotal","closeTimeout","destroyGallery","thumbnailsSettings","thumbnail","animateThumb","currentPagerPosition","alignThumbnails","thumbWidth","thumbHeight","thumbMargin","appendThumbnailsTo","toggleThumb","enableThumbDrag","enableThumbSwipe","thumbnailSwipeThreshold","loadYouTubeThumbnail","youTubeThumbSize","thumbnailPluginStrings","toggleThumbnails","thumbOuterWidth","thumbTotalWidth","translateX","thumbClickable","core","Thumbnail","setAnimateThumbStyles","build","toggleThumbBar","thumbKeyPress","setThumbMarkup","manageActiveClassOnSlideChange","$lgThumb","$target","rebuildThumbnails","thumbOuterClassNames","$thumbOuter","setThumbItemHtml","thumbDragUtils","cords","startX","endX","newTranslateX","startTime","endTime","touchMoveTime","isDragging","onThumbTouchMove","onThumbTouchEnd","targetTouches","valueOf","getPossibleTransformX","touchDuration","distanceXnew","speedX","thumbImg","slideVideoInfo","thumbList","getThumbHtml","getThumbItemHtml","$thumb","zoomSettings","zoom","actualSize","showZoomInOutIcons","actualSizeIcons","zoomIn","zoomOut","enableZoomAfter","zoomPluginStrings","viewActualSize","Zoom","zoomIcons","zoomableTimeout","isImageSlide","setZoomEssentials","enableZoom","scaleDiff","$image","allowY","allowX","resetToMax","originalX","originalY","positionChanged","dragAllowedAxises","getDragAllowedAxises","possibleSwipeCords","getPossibleSwipeDragCords","_x","_y","scaleVal","isBeyondPossibleLeft","minX","isBeyondPossibleRight","maxX","isBeyondPossibleTop","minY","isBeyondPossibleBottom","maxY","setZoomStyles","setZoomImageSize","imageReset","actualSizeScale","getCurrentImageActualSizeScale","naturalHeight","ZOOM_TRANSITION_DURATION","$imageWrap","$dummyImage","resetImageTranslate","prevScale","getScale","setPageCords","beginZoom","zoomImage","getNaturalWidth","getActualSizeScale","pageCords","getPageCords","manageActualPixelClassNames","resetZoom","buildTemplates","enableZoomOnSlideItemLoad","tapped","setActualSize","_LGel","setZoomSwipeStyles","zoomDrag","pinchZoom","zoomSwipe","$actualSize","sqrt","startDist","pinchStarted","initScale","getTouchDistance","endDist","_scale","round","Number","EPSILON","diff","distanceYnew","speedY","diffMinY","diffMaxY","diffMinX","difMaxX","imgRect","imageHeight","imageWidth","getSwipeCords","getZoomSwipeCords","touchendZoom","getDragCords","videoSettings","autoplayFirstVideo","youTubePlayerParams","vimeoPlayerParams","wistiaPlayerParams","gotoNextSlideOnVideoEnd","autoplayVideoOnSlide","videojs","videojsTheme","videojsOptions","param","encodeURIComponent","getYouTubeParams","youTubePlayerParamsSettings","slideUrlParams","p","reduce","pair","decodeURIComponent","playerParamsSettings","wmode","autoplay","mute","enablejsapi","Video","onHasVideo","loadVideoOnPosterClick","onSlideItemLoad","onBeforeSlide","onAfterSlide","loadAndPlayVideo","appendVideos","pauseVideo","controlVideo","videoTitle","commonIframeProps","videoId","youTubeParams","includes","playerParams","defaultParams","urlParams","defaultPlayerParams","hash","pop","isPrivate","getVimeoURLParams","wistiaId","html5VideoMarkup","tracks","trackAttributes","track","html5VideoAttrs_1","videoAttributes_1","videoParams","videoHtml","getVideoHtml","$videoElement","_a","Vimeo","Player","_wq","onReady","contentWindow","postMessage","forcePlay","_html","videoJsPlayer_1","$tempImg","ready","onVideoLoadAfterPosterClick","candidateSelectors","candidateSelector","NoElement","ownerDocument","getCandidates","includeContainer","candidates","getCandidatesIteratively","elementsToCheck","assigned","assignedElements","nestedCandidates","flatten","scope","getShadowRoot","validShadowRoot","shadowRootFilter","getTabindex","isScope","isContentEditable","isNaN","sortOrderedTabbables","a","b","documentOrder","isInput","isNonTabbableRadio","isRadio","radioSet","radioScope","queryRadios","CSS","escape","message","checked","nodes","getCheckedRadio","isTabbableRadio","isZeroArea","isNodeMatchingSelectorFocusable","disabled","isHiddenInput","_ref","displayCheck","nodeUnderDetails","nodeRootHost","nodeIsAttached","originalNode","rootNode","assignedSlot","getClientRects","isHidden","child","isDetailsWithSummary","isDisabledFromFieldset","isNodeMatchingSelectorTabbable","isValidShadowRootTabbable","shadowHostNode","tabbable","sortByOrder","regularTabbables","orderedTabbables","candidateTabindex","content","sort","acc","sortable","isTabbable","focusableCandidateSelector","isFocusable","trapQueue","activeFocusTraps","activateTrap","trap","activeTrap","pause","trapIndex","deactivateTrap","unpause","findIndex","valueOrHandler","getActualTarget","createFocusTrap","userOptions","doc","config","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","state","containers","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","active","paused","delayInitialFocusTimer","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","tabbableNodes","getNodeForOption","optionValue","getInitialFocusNode","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","tabbableOptions","focusableNodes","lastTabbableNode","nextTabbableNode","forward","nodeIdx","reverse","group","tryFocus","select","isSelectableInput","getReturnFocusNode","previousActiveElement","checkPointerDown","clickOutsideDeactivates","deactivate","returnFocus","allowOutsideClick","checkFocusIn","targetContained","Document","stopImmediatePropagation","checkKey","isEscapeEvent","isTabEvent","destinationNode","containerIndex","containerGroup","startOfGroupIndex","destinationGroupIndex","lastOfGroupIndex","checkTab","checkClick","addListeners","capture","passive","removeListeners","activate","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","updateContainerElements","containerElements","elementsAsArray","Boolean","requestIdleCallback","start","didTimeout","timeRemaining","cancelIdleCallback","global","support","Blob","viewClasses","isArrayBufferView","ArrayBuffer","isView","normalizeName","normalizeValue","iteratorFor","next","Headers","headers","header","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","reader","onload","onerror","readBlobAsArrayBuffer","blob","FileReader","promise","readAsArrayBuffer","bufferClone","buf","view","Uint8Array","byteLength","buffer","Body","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","FormData","_bodyFormData","URLSearchParams","DataView","_bodyArrayBuffer","rejected","arrayBuffer","isConsumed","byteOffset","readAsText","chars","fromCharCode","readArrayBufferAsText","formData","decode","json","oldValue","hasOwnProperty","callback","thisArg","values","entries","methods","Request","input","upcased","credentials","signal","referrer","cache","reParamSearch","trim","bytes","Response","bodyInit","status","statusText","response","redirectStatuses","redirect","RangeError","location","DOMException","stack","create","request","aborted","abortXhr","abort","rawHeaders","getAllResponseHeaders","line","parts","responseURL","ontimeout","onabort","href","fixUrl","withCredentials","responseType","setRequestHeader","IntersectionObserverEntry","intersectionRatio","startDoc","frame","getFrameElement","registry","crossOriginUpdater","crossOriginRect","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","_setupCrossOriginUpdater","boundingClientRect","intersectionRect","convertFromParentRect","right","observer","_checkForIntersections","_resetCrossOriginUpdater","_observationTargets","nodeType","_registerInstance","entry","_monitorIntersections","unobserve","_unmonitorIntersections","_unregisterInstance","_unmonitorAllIntersections","takeRecords","_queuedEntries","_initThresholds","opt_threshold","threshold","t","_parseRootMargin","opt_rootMargin","margins","margin","exec","unit","win","defaultView","_monitoringDocuments","monitoringInterval","domObserver","setInterval","addEvent","characterData","_monitoringUnsubscribes","clearInterval","removeEvent","rootDoc","itemDoc","unsubscribe","unsubscribes","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","targetRect","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","rootBounds","newEntry","time","performance","_hasCrossedThreshold","isIntersecting","_callback","rect1","rect2","getParentNode","atRoot","parentRect","parentComputedStyle","frameRect","frameIntersect","overflow","isDoc","_expandRectByRootMargin","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","frameElement","ensureDOMRect","targetArea","intersectionArea","toFixed","opt_options","timer","rootMargin","opt_useCapture","attachEvent","detatchEvent","parentBoundingRect","parentIntersectionRect","_i","_s","_e","_r","_arr","_n","_d","arrayMap","isSymbol","symbolProto","symbolToString","freeGlobal","freeSelf","array","iteratee","baseGetTag","isObjectLike","getRawTag","objectToString","symToStringTag","toStringTag","objectProto","nativeObjectToString","isOwn","tag","unmasked","hint","prim","_regeneratorRuntime","Op","hasOwn","desc","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","tryCatch","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","record","__await","unwrapped","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","val","object","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","arrayReduce","deburr","words","reApos","RegExp","string","accumulator","initAccum","deburrLetter","reLatin","reComboMark","basePropertyOf","asciiWords","hasUnicodeWord","unicodeWords","pattern","guard","reAsciiWord","reHasUnicodeWord","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsModifier","rsSeq","rsEmoji","reUnicodeWord","sourceKeys"],"mappings":"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","file":"scripts/vendors.d35394d6eb9b4dff783e.js","sourcesContent":["var classApplyDescriptorGet = require(\"./classApplyDescriptorGet.js\");\nvar classExtractFieldDescriptor = require(\"./classExtractFieldDescriptor.js\");\nfunction _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"get\");\n return classApplyDescriptorGet(receiver, descriptor);\n}\nmodule.exports = _classPrivateFieldGet, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var classApplyDescriptorSet = require(\"./classApplyDescriptorSet.js\");\nvar classExtractFieldDescriptor = require(\"./classExtractFieldDescriptor.js\");\nfunction _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"set\");\n classApplyDescriptorSet(receiver, descriptor, value);\n return value;\n}\nmodule.exports = _classPrivateFieldSet, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toString = require('./toString');\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nmodule.exports = uniqueId;\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n }\n return privateMap.get(receiver);\n}\nmodule.exports = _classExtractFieldDescriptor, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// nb. This is for IE10 and lower _only_.\nvar supportCustomEvent = window.CustomEvent;\nif (!supportCustomEvent || typeof supportCustomEvent === 'object') {\n supportCustomEvent = function CustomEvent(event, x) {\n x = x || {};\n var ev = document.createEvent('CustomEvent');\n ev.initCustomEvent(event, !!x.bubbles, !!x.cancelable, x.detail || null);\n return ev;\n };\n supportCustomEvent.prototype = window.Event.prototype;\n}\n\n/**\n * Dispatches the passed event to both an \"on\" handler as well as via the\n * normal dispatch operation. Does not bubble.\n *\n * @param {!EventTarget} target\n * @param {!Event} event\n * @return {boolean}\n */\nfunction safeDispatchEvent(target, event) {\n var check = 'on' + event.type.toLowerCase();\n if (typeof target[check] === 'function') {\n target[check](event);\n }\n return target.dispatchEvent(event);\n}\n\n/**\n * @param {Element} el to check for stacking context\n * @return {boolean} whether this el or its parents creates a stacking context\n */\nfunction createsStackingContext(el) {\n while (el && el !== document.body) {\n var s = window.getComputedStyle(el);\n var invalid = function(k, ok) {\n return !(s[k] === undefined || s[k] === ok);\n };\n\n if (s.opacity < 1 ||\n invalid('zIndex', 'auto') ||\n invalid('transform', 'none') ||\n invalid('mixBlendMode', 'normal') ||\n invalid('filter', 'none') ||\n invalid('perspective', 'none') ||\n s['isolation'] === 'isolate' ||\n s.position === 'fixed' ||\n s.webkitOverflowScrolling === 'touch') {\n return true;\n }\n el = el.parentElement;\n }\n return false;\n}\n\n/**\n * Finds the nearest from the passed element.\n *\n * @param {Element} el to search from\n * @return {HTMLDialogElement} dialog found\n */\nfunction findNearestDialog(el) {\n while (el) {\n if (el.localName === 'dialog') {\n return /** @type {HTMLDialogElement} */ (el);\n }\n if (el.parentElement) {\n el = el.parentElement;\n } else if (el.parentNode) {\n el = el.parentNode.host;\n } else {\n el = null;\n }\n }\n return null;\n}\n\n/**\n * Blur the specified element, as long as it's not the HTML body element.\n * This works around an IE9/10 bug - blurring the body causes Windows to\n * blur the whole application.\n *\n * @param {Element} el to blur\n */\nfunction safeBlur(el) {\n // Find the actual focused element when the active element is inside a shadow root\n while (el && el.shadowRoot && el.shadowRoot.activeElement) {\n el = el.shadowRoot.activeElement;\n }\n\n if (el && el.blur && el !== document.body) {\n el.blur();\n }\n}\n\n/**\n * @param {!NodeList} nodeList to search\n * @param {Node} node to find\n * @return {boolean} whether node is inside nodeList\n */\nfunction inNodeList(nodeList, node) {\n for (var i = 0; i < nodeList.length; ++i) {\n if (nodeList[i] === node) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * @param {HTMLFormElement} el to check\n * @return {boolean} whether this form has method=\"dialog\"\n */\nfunction isFormMethodDialog(el) {\n if (!el || !el.hasAttribute('method')) {\n return false;\n }\n return el.getAttribute('method').toLowerCase() === 'dialog';\n}\n\n/**\n * @param {!DocumentFragment|!Element} hostElement\n * @return {?Element}\n */\nfunction findFocusableElementWithin(hostElement) {\n // Note that this is 'any focusable area'. This list is probably not exhaustive, but the\n // alternative involves stepping through and trying to focus everything.\n var opts = ['button', 'input', 'keygen', 'select', 'textarea'];\n var query = opts.map(function(el) {\n return el + ':not([disabled])';\n });\n // TODO(samthor): tabindex values that are not numeric are not focusable.\n query.push('[tabindex]:not([disabled]):not([tabindex=\"\"])'); // tabindex != \"\", not disabled\n var target = hostElement.querySelector(query.join(', '));\n\n if (!target && 'attachShadow' in Element.prototype) {\n // If we haven't found a focusable target, see if the host element contains an element\n // which has a shadowRoot.\n // Recursively search for the first focusable item in shadow roots.\n var elems = hostElement.querySelectorAll('*');\n for (var i = 0; i < elems.length; i++) {\n if (elems[i].tagName && elems[i].shadowRoot) {\n target = findFocusableElementWithin(elems[i].shadowRoot);\n if (target) {\n break;\n }\n }\n }\n }\n return target;\n}\n\n/**\n * Determines if an element is attached to the DOM.\n * @param {Element} element to check\n * @return {boolean} whether the element is in DOM\n */\nfunction isConnected(element) {\n return element.isConnected || document.body.contains(element);\n}\n\n/**\n * @param {!Event} event\n * @return {?Element}\n */\nfunction findFormSubmitter(event) {\n if (event.submitter) {\n return event.submitter;\n }\n\n var form = event.target;\n if (!(form instanceof HTMLFormElement)) {\n return null;\n }\n\n var submitter = dialogPolyfill.formSubmitter;\n if (!submitter) {\n var target = event.target;\n var root = ('getRootNode' in target && target.getRootNode() || document);\n submitter = root.activeElement;\n }\n\n if (!submitter || submitter.form !== form) {\n return null;\n }\n return submitter;\n}\n\n/**\n * @param {!Event} event\n */\nfunction maybeHandleSubmit(event) {\n if (event.defaultPrevented) {\n return;\n }\n var form = /** @type {!HTMLFormElement} */ (event.target);\n\n // We'd have a value if we clicked on an imagemap.\n var value = dialogPolyfill.imagemapUseValue;\n var submitter = findFormSubmitter(event);\n if (value === null && submitter) {\n value = submitter.value;\n }\n\n // There should always be a dialog as this handler is added specifically on them, but check just\n // in case.\n var dialog = findNearestDialog(form);\n if (!dialog) {\n return;\n }\n\n // Prefer formmethod on the button.\n var formmethod = submitter && submitter.getAttribute('formmethod') || form.getAttribute('method');\n if (formmethod !== 'dialog') {\n return;\n }\n event.preventDefault();\n\n if (value != null) {\n // nb. we explicitly check against null/undefined\n dialog.close(value);\n } else {\n dialog.close();\n }\n}\n\n/**\n * @param {!HTMLDialogElement} dialog to upgrade\n * @constructor\n */\nfunction dialogPolyfillInfo(dialog) {\n this.dialog_ = dialog;\n this.replacedStyleTop_ = false;\n this.openAsModal_ = false;\n\n // Set a11y role. Browsers that support dialog implicitly know this already.\n if (!dialog.hasAttribute('role')) {\n dialog.setAttribute('role', 'dialog');\n }\n\n dialog.show = this.show.bind(this);\n dialog.showModal = this.showModal.bind(this);\n dialog.close = this.close.bind(this);\n\n dialog.addEventListener('submit', maybeHandleSubmit, false);\n\n if (!('returnValue' in dialog)) {\n dialog.returnValue = '';\n }\n\n if ('MutationObserver' in window) {\n var mo = new MutationObserver(this.maybeHideModal.bind(this));\n mo.observe(dialog, {attributes: true, attributeFilter: ['open']});\n } else {\n // IE10 and below support. Note that DOMNodeRemoved etc fire _before_ removal. They also\n // seem to fire even if the element was removed as part of a parent removal. Use the removed\n // events to force downgrade (useful if removed/immediately added).\n var removed = false;\n var cb = function() {\n removed ? this.downgradeModal() : this.maybeHideModal();\n removed = false;\n }.bind(this);\n var timeout;\n var delayModel = function(ev) {\n if (ev.target !== dialog) { return; } // not for a child element\n var cand = 'DOMNodeRemoved';\n removed |= (ev.type.substr(0, cand.length) === cand);\n window.clearTimeout(timeout);\n timeout = window.setTimeout(cb, 0);\n };\n ['DOMAttrModified', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument'].forEach(function(name) {\n dialog.addEventListener(name, delayModel);\n });\n }\n // Note that the DOM is observed inside DialogManager while any dialog\n // is being displayed as a modal, to catch modal removal from the DOM.\n\n Object.defineProperty(dialog, 'open', {\n set: this.setOpen.bind(this),\n get: dialog.hasAttribute.bind(dialog, 'open')\n });\n\n this.backdrop_ = document.createElement('div');\n this.backdrop_.className = 'backdrop';\n this.backdrop_.addEventListener('mouseup' , this.backdropMouseEvent_.bind(this));\n this.backdrop_.addEventListener('mousedown', this.backdropMouseEvent_.bind(this));\n this.backdrop_.addEventListener('click' , this.backdropMouseEvent_.bind(this));\n}\n\ndialogPolyfillInfo.prototype = /** @type {HTMLDialogElement.prototype} */ ({\n\n get dialog() {\n return this.dialog_;\n },\n\n /**\n * Maybe remove this dialog from the modal top layer. This is called when\n * a modal dialog may no longer be tenable, e.g., when the dialog is no\n * longer open or is no longer part of the DOM.\n */\n maybeHideModal: function() {\n if (this.dialog_.hasAttribute('open') && isConnected(this.dialog_)) { return; }\n this.downgradeModal();\n },\n\n /**\n * Remove this dialog from the modal top layer, leaving it as a non-modal.\n */\n downgradeModal: function() {\n if (!this.openAsModal_) { return; }\n this.openAsModal_ = false;\n this.dialog_.style.zIndex = '';\n\n // This won't match the native exactly because if the user set top on a centered\n // polyfill dialog, that top gets thrown away when the dialog is closed. Not sure it's\n // possible to polyfill this perfectly.\n if (this.replacedStyleTop_) {\n this.dialog_.style.top = '';\n this.replacedStyleTop_ = false;\n }\n\n // Clear the backdrop and remove from the manager.\n this.backdrop_.parentNode && this.backdrop_.parentNode.removeChild(this.backdrop_);\n dialogPolyfill.dm.removeDialog(this);\n },\n\n /**\n * @param {boolean} value whether to open or close this dialog\n */\n setOpen: function(value) {\n if (value) {\n this.dialog_.hasAttribute('open') || this.dialog_.setAttribute('open', '');\n } else {\n this.dialog_.removeAttribute('open');\n this.maybeHideModal(); // nb. redundant with MutationObserver\n }\n },\n\n /**\n * Handles mouse events ('mouseup', 'mousedown', 'click') on the fake .backdrop element, redirecting them as if\n * they were on the dialog itself.\n *\n * @param {!Event} e to redirect\n */\n backdropMouseEvent_: function(e) {\n if (!this.dialog_.hasAttribute('tabindex')) {\n // Clicking on the backdrop should move the implicit cursor, even if dialog cannot be\n // focused. Create a fake thing to focus on. If the backdrop was _before_ the dialog, this\n // would not be needed - clicks would move the implicit cursor there.\n var fake = document.createElement('div');\n this.dialog_.insertBefore(fake, this.dialog_.firstChild);\n fake.tabIndex = -1;\n fake.focus();\n this.dialog_.removeChild(fake);\n } else {\n this.dialog_.focus();\n }\n\n var redirectedEvent = document.createEvent('MouseEvents');\n redirectedEvent.initMouseEvent(e.type, e.bubbles, e.cancelable, window,\n e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey,\n e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);\n this.dialog_.dispatchEvent(redirectedEvent);\n e.stopPropagation();\n },\n\n /**\n * Focuses on the first focusable element within the dialog. This will always blur the current\n * focus, even if nothing within the dialog is found.\n */\n focus_: function() {\n // Find element with `autofocus` attribute, or fall back to the first form/tabindex control.\n var target = this.dialog_.querySelector('[autofocus]:not([disabled])');\n if (!target && this.dialog_.tabIndex >= 0) {\n target = this.dialog_;\n }\n if (!target) {\n target = findFocusableElementWithin(this.dialog_);\n }\n safeBlur(document.activeElement);\n target && target.focus();\n },\n\n /**\n * Sets the zIndex for the backdrop and dialog.\n *\n * @param {number} dialogZ\n * @param {number} backdropZ\n */\n updateZIndex: function(dialogZ, backdropZ) {\n if (dialogZ < backdropZ) {\n throw new Error('dialogZ should never be < backdropZ');\n }\n this.dialog_.style.zIndex = dialogZ;\n this.backdrop_.style.zIndex = backdropZ;\n },\n\n /**\n * Shows the dialog. If the dialog is already open, this does nothing.\n */\n show: function() {\n if (!this.dialog_.open) {\n this.setOpen(true);\n this.focus_();\n }\n },\n\n /**\n * Show this dialog modally.\n */\n showModal: function() {\n if (this.dialog_.hasAttribute('open')) {\n throw new Error('Failed to execute \\'showModal\\' on dialog: The element is already open, and therefore cannot be opened modally.');\n }\n if (!isConnected(this.dialog_)) {\n throw new Error('Failed to execute \\'showModal\\' on dialog: The element is not in a Document.');\n }\n if (!dialogPolyfill.dm.pushDialog(this)) {\n throw new Error('Failed to execute \\'showModal\\' on dialog: There are too many open modal dialogs.');\n }\n\n if (createsStackingContext(this.dialog_.parentElement)) {\n console.warn('A dialog is being shown inside a stacking context. ' +\n 'This may cause it to be unusable. For more information, see this link: ' +\n 'https://github.com/GoogleChrome/dialog-polyfill/#stacking-context');\n }\n\n this.setOpen(true);\n this.openAsModal_ = true;\n\n // Optionally center vertically, relative to the current viewport.\n if (dialogPolyfill.needsCentering(this.dialog_)) {\n dialogPolyfill.reposition(this.dialog_);\n this.replacedStyleTop_ = true;\n } else {\n this.replacedStyleTop_ = false;\n }\n\n // Insert backdrop.\n this.dialog_.parentNode.insertBefore(this.backdrop_, this.dialog_.nextSibling);\n\n // Focus on whatever inside the dialog.\n this.focus_();\n },\n\n /**\n * Closes this HTMLDialogElement. This is optional vs clearing the open\n * attribute, however this fires a 'close' event.\n *\n * @param {string=} opt_returnValue to use as the returnValue\n */\n close: function(opt_returnValue) {\n if (!this.dialog_.hasAttribute('open')) {\n throw new Error('Failed to execute \\'close\\' on dialog: The element does not have an \\'open\\' attribute, and therefore cannot be closed.');\n }\n this.setOpen(false);\n\n // Leave returnValue untouched in case it was set directly on the element\n if (opt_returnValue !== undefined) {\n this.dialog_.returnValue = opt_returnValue;\n }\n\n // Triggering \"close\" event for any attached listeners on the .\n var closeEvent = new supportCustomEvent('close', {\n bubbles: false,\n cancelable: false\n });\n safeDispatchEvent(this.dialog_, closeEvent);\n }\n\n});\n\nvar dialogPolyfill = {};\n\ndialogPolyfill.reposition = function(element) {\n var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n var topValue = scrollTop + (window.innerHeight - element.offsetHeight) / 2;\n element.style.top = Math.max(scrollTop, topValue) + 'px';\n};\n\ndialogPolyfill.isInlinePositionSetByStylesheet = function(element) {\n for (var i = 0; i < document.styleSheets.length; ++i) {\n var styleSheet = document.styleSheets[i];\n var cssRules = null;\n // Some browsers throw on cssRules.\n try {\n cssRules = styleSheet.cssRules;\n } catch (e) {}\n if (!cssRules) { continue; }\n for (var j = 0; j < cssRules.length; ++j) {\n var rule = cssRules[j];\n var selectedNodes = null;\n // Ignore errors on invalid selector texts.\n try {\n selectedNodes = document.querySelectorAll(rule.selectorText);\n } catch(e) {}\n if (!selectedNodes || !inNodeList(selectedNodes, element)) {\n continue;\n }\n var cssTop = rule.style.getPropertyValue('top');\n var cssBottom = rule.style.getPropertyValue('bottom');\n if ((cssTop && cssTop !== 'auto') || (cssBottom && cssBottom !== 'auto')) {\n return true;\n }\n }\n }\n return false;\n};\n\ndialogPolyfill.needsCentering = function(dialog) {\n var computedStyle = window.getComputedStyle(dialog);\n if (computedStyle.position !== 'absolute') {\n return false;\n }\n\n // We must determine whether the top/bottom specified value is non-auto. In\n // WebKit/Blink, checking computedStyle.top == 'auto' is sufficient, but\n // Firefox returns the used value. So we do this crazy thing instead: check\n // the inline style and then go through CSS rules.\n if ((dialog.style.top !== 'auto' && dialog.style.top !== '') ||\n (dialog.style.bottom !== 'auto' && dialog.style.bottom !== '')) {\n return false;\n }\n return !dialogPolyfill.isInlinePositionSetByStylesheet(dialog);\n};\n\n/**\n * @param {!Element} element to force upgrade\n */\ndialogPolyfill.forceRegisterDialog = function(element) {\n if (window.HTMLDialogElement || element.showModal) {\n console.warn('This browser already supports , the polyfill ' +\n 'may not work correctly', element);\n }\n if (element.localName !== 'dialog') {\n throw new Error('Failed to register dialog: The element is not a dialog.');\n }\n new dialogPolyfillInfo(/** @type {!HTMLDialogElement} */ (element));\n};\n\n/**\n * @param {!Element} element to upgrade, if necessary\n */\ndialogPolyfill.registerDialog = function(element) {\n if (!element.showModal) {\n dialogPolyfill.forceRegisterDialog(element);\n }\n};\n\n/**\n * @constructor\n */\ndialogPolyfill.DialogManager = function() {\n /** @type {!Array} */\n this.pendingDialogStack = [];\n\n var checkDOM = this.checkDOM_.bind(this);\n\n // The overlay is used to simulate how a modal dialog blocks the document.\n // The blocking dialog is positioned on top of the overlay, and the rest of\n // the dialogs on the pending dialog stack are positioned below it. In the\n // actual implementation, the modal dialog stacking is controlled by the\n // top layer, where z-index has no effect.\n this.overlay = document.createElement('div');\n this.overlay.className = '_dialog_overlay';\n this.overlay.addEventListener('click', function(e) {\n this.forwardTab_ = undefined;\n e.stopPropagation();\n checkDOM([]); // sanity-check DOM\n }.bind(this));\n\n this.handleKey_ = this.handleKey_.bind(this);\n this.handleFocus_ = this.handleFocus_.bind(this);\n\n this.zIndexLow_ = 100000;\n this.zIndexHigh_ = 100000 + 150;\n\n this.forwardTab_ = undefined;\n\n if ('MutationObserver' in window) {\n this.mo_ = new MutationObserver(function(records) {\n var removed = [];\n records.forEach(function(rec) {\n for (var i = 0, c; c = rec.removedNodes[i]; ++i) {\n if (!(c instanceof Element)) {\n continue;\n } else if (c.localName === 'dialog') {\n removed.push(c);\n }\n removed = removed.concat(c.querySelectorAll('dialog'));\n }\n });\n removed.length && checkDOM(removed);\n });\n }\n};\n\n/**\n * Called on the first modal dialog being shown. Adds the overlay and related\n * handlers.\n */\ndialogPolyfill.DialogManager.prototype.blockDocument = function() {\n document.documentElement.addEventListener('focus', this.handleFocus_, true);\n document.addEventListener('keydown', this.handleKey_);\n this.mo_ && this.mo_.observe(document, {childList: true, subtree: true});\n};\n\n/**\n * Called on the first modal dialog being removed, i.e., when no more modal\n * dialogs are visible.\n */\ndialogPolyfill.DialogManager.prototype.unblockDocument = function() {\n document.documentElement.removeEventListener('focus', this.handleFocus_, true);\n document.removeEventListener('keydown', this.handleKey_);\n this.mo_ && this.mo_.disconnect();\n};\n\n/**\n * Updates the stacking of all known dialogs.\n */\ndialogPolyfill.DialogManager.prototype.updateStacking = function() {\n var zIndex = this.zIndexHigh_;\n\n for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) {\n dpi.updateZIndex(--zIndex, --zIndex);\n if (i === 0) {\n this.overlay.style.zIndex = --zIndex;\n }\n }\n\n // Make the overlay a sibling of the dialog itself.\n var last = this.pendingDialogStack[0];\n if (last) {\n var p = last.dialog.parentNode || document.body;\n p.appendChild(this.overlay);\n } else if (this.overlay.parentNode) {\n this.overlay.parentNode.removeChild(this.overlay);\n }\n};\n\n/**\n * @param {Element} candidate to check if contained or is the top-most modal dialog\n * @return {boolean} whether candidate is contained in top dialog\n */\ndialogPolyfill.DialogManager.prototype.containedByTopDialog_ = function(candidate) {\n while (candidate = findNearestDialog(candidate)) {\n for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) {\n if (dpi.dialog === candidate) {\n return i === 0; // only valid if top-most\n }\n }\n candidate = candidate.parentElement;\n }\n return false;\n};\n\ndialogPolyfill.DialogManager.prototype.handleFocus_ = function(event) {\n var target = event.composedPath ? event.composedPath()[0] : event.target;\n\n if (this.containedByTopDialog_(target)) { return; }\n\n if (document.activeElement === document.documentElement) { return; }\n\n event.preventDefault();\n event.stopPropagation();\n safeBlur(/** @type {Element} */ (target));\n\n if (this.forwardTab_ === undefined) { return; } // move focus only from a tab key\n\n var dpi = this.pendingDialogStack[0];\n var dialog = dpi.dialog;\n var position = dialog.compareDocumentPosition(target);\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n if (this.forwardTab_) {\n // forward\n dpi.focus_();\n } else if (target !== document.documentElement) {\n // backwards if we're not already focused on \n document.documentElement.focus();\n }\n }\n\n return false;\n};\n\ndialogPolyfill.DialogManager.prototype.handleKey_ = function(event) {\n this.forwardTab_ = undefined;\n if (event.keyCode === 27) {\n event.preventDefault();\n event.stopPropagation();\n var cancelEvent = new supportCustomEvent('cancel', {\n bubbles: false,\n cancelable: true\n });\n var dpi = this.pendingDialogStack[0];\n if (dpi && safeDispatchEvent(dpi.dialog, cancelEvent)) {\n dpi.dialog.close();\n }\n } else if (event.keyCode === 9) {\n this.forwardTab_ = !event.shiftKey;\n }\n};\n\n/**\n * Finds and downgrades any known modal dialogs that are no longer displayed. Dialogs that are\n * removed and immediately readded don't stay modal, they become normal.\n *\n * @param {!Array} removed that have definitely been removed\n */\ndialogPolyfill.DialogManager.prototype.checkDOM_ = function(removed) {\n // This operates on a clone because it may cause it to change. Each change also calls\n // updateStacking, which only actually needs to happen once. But who removes many modal dialogs\n // at a time?!\n var clone = this.pendingDialogStack.slice();\n clone.forEach(function(dpi) {\n if (removed.indexOf(dpi.dialog) !== -1) {\n dpi.downgradeModal();\n } else {\n dpi.maybeHideModal();\n }\n });\n};\n\n/**\n * @param {!dialogPolyfillInfo} dpi\n * @return {boolean} whether the dialog was allowed\n */\ndialogPolyfill.DialogManager.prototype.pushDialog = function(dpi) {\n var allowed = (this.zIndexHigh_ - this.zIndexLow_) / 2 - 1;\n if (this.pendingDialogStack.length >= allowed) {\n return false;\n }\n if (this.pendingDialogStack.unshift(dpi) === 1) {\n this.blockDocument();\n }\n this.updateStacking();\n return true;\n};\n\n/**\n * @param {!dialogPolyfillInfo} dpi\n */\ndialogPolyfill.DialogManager.prototype.removeDialog = function(dpi) {\n var index = this.pendingDialogStack.indexOf(dpi);\n if (index === -1) { return; }\n\n this.pendingDialogStack.splice(index, 1);\n if (this.pendingDialogStack.length === 0) {\n this.unblockDocument();\n }\n this.updateStacking();\n};\n\ndialogPolyfill.dm = new dialogPolyfill.DialogManager();\ndialogPolyfill.formSubmitter = null;\ndialogPolyfill.imagemapUseValue = null;\n\n/**\n * Installs global handlers, such as click listers and native method overrides. These are needed\n * even if a no dialog is registered, as they deal with
.\n */\nif (window.HTMLDialogElement === undefined) {\n\n /**\n * If HTMLFormElement translates method=\"DIALOG\" into 'get', then replace the descriptor with\n * one that returns the correct value.\n */\n var testForm = document.createElement('form');\n testForm.setAttribute('method', 'dialog');\n if (testForm.method !== 'dialog') {\n var methodDescriptor = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, 'method');\n if (methodDescriptor) {\n // nb. Some older iOS and older PhantomJS fail to return the descriptor. Don't do anything\n // and don't bother to update the element.\n var realGet = methodDescriptor.get;\n methodDescriptor.get = function() {\n if (isFormMethodDialog(this)) {\n return 'dialog';\n }\n return realGet.call(this);\n };\n var realSet = methodDescriptor.set;\n /** @this {HTMLElement} */\n methodDescriptor.set = function(v) {\n if (typeof v === 'string' && v.toLowerCase() === 'dialog') {\n return this.setAttribute('method', v);\n }\n return realSet.call(this, v);\n };\n Object.defineProperty(HTMLFormElement.prototype, 'method', methodDescriptor);\n }\n }\n\n /**\n * Global 'click' handler, to capture the or \n `;\n }\n\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n subHtmlCont =\n '
';\n }\n\n let addClasses = '';\n\n if (this.settings.allowMediaOverlap) {\n // Do not remove space before last single quote\n addClasses += 'lg-media-overlap ';\n }\n\n const ariaLabelledby = this.settings.ariaLabelledby\n ? 'aria-labelledby=\"' + this.settings.ariaLabelledby + '\"'\n : '';\n const ariaDescribedby = this.settings.ariaDescribedby\n ? 'aria-describedby=\"' + this.settings.ariaDescribedby + '\"'\n : '';\n\n const containerClassName = `lg-container ${this.settings.addClass} ${\n document.body !== this.settings.container ? 'lg-inline' : ''\n }`;\n const closeIcon =\n this.settings.closable && this.settings.showCloseIcon\n ? ``\n : '';\n const maximizeIcon = this.settings.showMaximizeIcon\n ? ``\n : '';\n const template = `\n
\n
\n\n
\n\n
\n
\n
\n ${controls}\n
\n
\n ${maximizeIcon}\n ${closeIcon}\n
\n ${\n this.settings.appendSubHtmlTo === '.lg-outer'\n ? subHtmlCont\n : ''\n }\n
\n ${\n this.settings.appendSubHtmlTo === '.lg-sub-html'\n ? subHtmlCont\n : ''\n }\n
\n
\n
\n `;\n\n $LG(this.settings.container).append(template);\n\n if (document.body !== this.settings.container) {\n $LG(this.settings.container).css('position', 'relative');\n }\n\n this.outer = this.getElementById('lg-outer');\n this.$lgComponents = this.getElementById('lg-components');\n this.$backdrop = this.getElementById('lg-backdrop');\n this.$container = this.getElementById('lg-container');\n this.$inner = this.getElementById('lg-inner');\n this.$content = this.getElementById('lg-content');\n this.$toolbar = this.getElementById('lg-toolbar');\n\n this.$backdrop.css(\n 'transition-duration',\n this.settings.backdropDuration + 'ms',\n );\n\n let outerClassNames = `${this.settings.mode} `;\n\n this.manageSingleSlideClassName();\n\n if (this.settings.enableDrag) {\n outerClassNames += 'lg-grab ';\n }\n\n this.outer.addClass(outerClassNames);\n\n this.$inner.css('transition-timing-function', this.settings.easing);\n this.$inner.css('transition-duration', this.settings.speed + 'ms');\n\n if (this.settings.download) {\n this.$toolbar.append(\n ``,\n );\n }\n\n this.counter();\n\n $LG(window).on(\n `resize.lg.global${this.lgId} orientationchange.lg.global${this.lgId}`,\n () => {\n this.refreshOnResize();\n },\n );\n\n this.hideBars();\n\n this.manageCloseGallery();\n this.toggleMaximize();\n\n this.initModules();\n }\n\n refreshOnResize(): void {\n if (this.lgOpened) {\n const currentGalleryItem = this.galleryItems[this.index];\n const { __slideVideoInfo } = currentGalleryItem;\n\n this.mediaContainerPosition = this.getMediaContainerPosition();\n const { top, bottom } = this.mediaContainerPosition;\n this.currentImageSize = utils.getSize(\n this.items[this.index],\n this.outer,\n top + bottom,\n __slideVideoInfo && this.settings.videoMaxSize,\n );\n if (__slideVideoInfo) {\n this.resizeVideoSlide(this.index, this.currentImageSize);\n }\n if (this.zoomFromOrigin && !this.isDummyImageRemoved) {\n const imgStyle = this.getDummyImgStyles(this.currentImageSize);\n this.outer\n .find('.lg-current .lg-dummy-img')\n .first()\n .attr('style', imgStyle);\n }\n this.LGel.trigger(lGEvents.containerResize);\n }\n }\n\n resizeVideoSlide(index: number, imageSize?: ImageSize): void {\n const lgVideoStyle = this.getVideoContStyle(imageSize);\n const currentSlide = this.getSlideItem(index);\n currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle);\n }\n\n /**\n * Update slides dynamically.\n * Add, edit or delete slides dynamically when lightGallery is opened.\n * Modify the current gallery items and pass it via updateSlides method\n * @note\n * - Do not mutate existing lightGallery items directly.\n * - Always pass new list of gallery items\n * - You need to take care of thumbnails outside the gallery if any\n * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method.\n * @param items Gallery items\n * @param index After the update operation, which slide gallery should navigate to\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n *\n * // Adding slides dynamically\n * let galleryItems = [\n * // Access existing lightGallery items\n * // galleryItems are automatically generated internally from the gallery HTML markup\n * // or directly from galleryItems when dynamic gallery is used\n * ...plugin.galleryItems,\n * ...[\n * {\n * src: 'img/img-1.png',\n * thumb: 'img/thumb1.png',\n * },\n * ],\n * ];\n * plugin.updateSlides(\n * galleryItems,\n * plugin.index,\n * );\n *\n *\n * // Remove slides dynamically\n * galleryItems = JSON.parse(\n * JSON.stringify(updateSlideInstance.galleryItems),\n * );\n * galleryItems.shift();\n * updateSlideInstance.updateSlides(galleryItems, 1);\n * @see Demo\n */\n updateSlides(items: GalleryItem[], index: number): void {\n if (this.index > items.length - 1) {\n this.index = items.length - 1;\n }\n if (items.length === 1) {\n this.index = 0;\n }\n if (!items.length) {\n this.closeGallery();\n return;\n }\n const currentSrc = this.galleryItems[index].src;\n this.galleryItems = items;\n this.updateControls();\n this.$inner.empty();\n this.currentItemsInDom = [];\n\n let _index = 0;\n // Find the current index based on source value of the slide\n this.galleryItems.some((galleryItem, itemIndex) => {\n if (galleryItem.src === currentSrc) {\n _index = itemIndex;\n return true;\n }\n return false;\n });\n\n this.currentItemsInDom = this.organizeSlideItems(_index, -1);\n this.loadContent(_index, true);\n this.getSlideItem(_index).addClass('lg-current');\n\n this.index = _index;\n this.updateCurrentCounter(_index);\n this.LGel.trigger(lGEvents.updateSlides);\n }\n\n // Get gallery items based on multiple conditions\n getItems(): GalleryItem[] {\n // Gallery items\n this.items = [];\n if (!this.settings.dynamic) {\n if (this.settings.selector === 'this') {\n this.items.push(this.el);\n } else if (this.settings.selector) {\n if (typeof this.settings.selector === 'string') {\n if (this.settings.selectWithin) {\n const selectWithin = $LG(this.settings.selectWithin);\n this.items = selectWithin\n .find(this.settings.selector)\n .get();\n } else {\n this.items = this.el.querySelectorAll(\n this.settings.selector,\n );\n }\n } else {\n this.items = this.settings.selector;\n }\n } else {\n this.items = this.el.children;\n }\n return utils.getDynamicOptions(\n this.items,\n this.settings.extraProps,\n this.settings.getCaptionFromTitleOrAlt,\n this.settings.exThumbImage,\n );\n } else {\n return this.settings.dynamicEl || [];\n }\n }\n\n shouldHideScrollbar(): boolean {\n return (\n this.settings.hideScrollbar &&\n document.body === this.settings.container\n );\n }\n\n hideScrollbar(): void {\n if (!this.shouldHideScrollbar()) {\n return;\n }\n this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);\n const bodyRect = document.documentElement.getBoundingClientRect();\n const scrollbarWidth = window.innerWidth - bodyRect.width;\n\n $LG(document.body).css(\n 'padding-right',\n scrollbarWidth + this.bodyPaddingRight + 'px',\n );\n $LG(document.body).addClass('lg-overlay-open');\n }\n\n resetScrollBar(): void {\n if (!this.shouldHideScrollbar()) {\n return;\n }\n $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');\n $LG(document.body).removeClass('lg-overlay-open');\n }\n\n /**\n * Open lightGallery.\n * Open gallery with specific slide by passing index of the slide as parameter.\n * @category lGPublicMethods\n * @param {Number} index - index of the slide\n * @param {HTMLElement} element - Which image lightGallery should zoom from\n *\n * @example\n * const $dynamicGallery = document.getElementById('dynamic-gallery-demo');\n * const dynamicGallery = lightGallery($dynamicGallery, {\n * dynamic: true,\n * dynamicEl: [\n * {\n * src: 'img/1.jpg',\n * thumb: 'img/thumb-1.jpg',\n * subHtml: '

Image 1 title

Image 1 descriptions.

',\n * },\n * ...\n * ],\n * });\n * $dynamicGallery.addEventListener('click', function () {\n * // Starts with third item.(Optional).\n * // This is useful if you want use dynamic mode with\n * // custom thumbnails (thumbnails outside gallery),\n * dynamicGallery.openGallery(2);\n * });\n *\n */\n openGallery(index = this.settings.index, element?: HTMLElement): void {\n // prevent accidental double execution\n if (this.lgOpened) return;\n this.lgOpened = true;\n this.outer.removeClass('lg-hide-items');\n\n this.hideScrollbar();\n\n // Add display block, but still has opacity 0\n this.$container.addClass('lg-show');\n\n const itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(\n index,\n index,\n );\n this.currentItemsInDom = itemsToBeInsertedToDom;\n\n let items = '';\n itemsToBeInsertedToDom.forEach((item) => {\n items = items + `
`;\n });\n\n this.$inner.append(items);\n this.addHtml(index);\n let transform: string | undefined = '';\n this.mediaContainerPosition = this.getMediaContainerPosition();\n const { top, bottom } = this.mediaContainerPosition;\n if (!this.settings.allowMediaOverlap) {\n this.setMediaContainerPosition(top, bottom);\n }\n const { __slideVideoInfo } = this.galleryItems[index];\n if (this.zoomFromOrigin && element) {\n this.currentImageSize = utils.getSize(\n element,\n this.outer,\n top + bottom,\n __slideVideoInfo && this.settings.videoMaxSize,\n );\n transform = utils.getTransform(\n element,\n this.outer,\n top,\n bottom,\n this.currentImageSize,\n );\n }\n if (!this.zoomFromOrigin || !transform) {\n this.outer.addClass(this.settings.startClass);\n this.getSlideItem(index).removeClass('lg-complete');\n }\n const timeout = this.settings.zoomFromOrigin\n ? 100\n : this.settings.backdropDuration;\n setTimeout(() => {\n this.outer.addClass('lg-components-open');\n }, timeout);\n this.index = index;\n this.LGel.trigger(lGEvents.beforeOpen);\n\n // add class lg-current to remove initial transition\n this.getSlideItem(index).addClass('lg-current');\n\n this.lGalleryOn = false;\n // Store the current scroll top value to scroll back after closing the gallery..\n this.prevScrollTop = $LG(window).scrollTop();\n\n setTimeout(() => {\n // Need to check both zoomFromOrigin and transform values as we need to set set the\n // default opening animation if user missed to add the lg-size attribute\n\n if (this.zoomFromOrigin && transform) {\n const currentSlide = this.getSlideItem(index);\n currentSlide.css('transform', transform);\n setTimeout(() => {\n currentSlide\n .addClass('lg-start-progress lg-start-end-progress')\n .css(\n 'transition-duration',\n this.settings.startAnimationDuration + 'ms',\n );\n this.outer.addClass('lg-zoom-from-image');\n });\n setTimeout(() => {\n currentSlide.css('transform', 'translate3d(0, 0, 0)');\n }, 100);\n }\n\n setTimeout(() => {\n this.$backdrop.addClass('in');\n this.$container.addClass('lg-show-in');\n }, 10);\n\n setTimeout(() => {\n if (\n this.settings.trapFocus &&\n document.body === this.settings.container\n ) {\n this.trapFocus();\n }\n }, this.settings.backdropDuration + 50);\n\n // lg-visible class resets gallery opacity to 1\n if (!this.zoomFromOrigin || !transform) {\n setTimeout(() => {\n this.outer.addClass('lg-visible');\n }, this.settings.backdropDuration);\n }\n\n // initiate slide function\n this.slide(index, false, false, false);\n\n this.LGel.trigger(lGEvents.afterOpen);\n });\n\n if (document.body === this.settings.container) {\n $LG('html').addClass('lg-on');\n }\n }\n\n /**\n * Note - Changing the position of the media on every slide transition creates a flickering effect.\n * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption.\n * if you have dynamic captions for each media,\n * you can provide an appropriate height for the captions via allowMediaOverlap option\n */\n public getMediaContainerPosition(): MediaContainerPosition {\n if (this.settings.allowMediaOverlap) {\n return {\n top: 0,\n bottom: 0,\n };\n }\n const top = this.$toolbar.get().clientHeight || 0;\n const subHtml = this.outer.find('.lg-components .lg-sub-html').get();\n const captionHeight =\n this.settings.defaultCaptionHeight ||\n (subHtml && subHtml.clientHeight) ||\n 0;\n const thumbContainer = this.outer.find('.lg-thumb-outer').get();\n const thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0;\n const bottom = thumbHeight + captionHeight;\n return {\n top,\n bottom,\n };\n }\n\n private setMediaContainerPosition(top = 0, bottom = 0): void {\n this.$content.css('top', top + 'px').css('bottom', bottom + 'px');\n }\n\n hideBars(): void {\n // Hide controllers if mouse doesn't move for some period\n setTimeout(() => {\n this.outer.removeClass('lg-hide-items');\n if (this.settings.hideBarsDelay > 0) {\n this.outer.on('mousemove.lg click.lg touchstart.lg', () => {\n this.outer.removeClass('lg-hide-items');\n\n clearTimeout(this.hideBarTimeout);\n\n // Timeout will be cleared on each slide movement also\n this.hideBarTimeout = setTimeout(() => {\n this.outer.addClass('lg-hide-items');\n }, this.settings.hideBarsDelay);\n });\n this.outer.trigger('mousemove.lg');\n }\n }, this.settings.showBarsAfter);\n }\n\n initPictureFill($img: lgQuery): void {\n if (this.settings.supportLegacyBrowser) {\n try {\n picturefill({\n elements: [$img.get()],\n });\n } catch (e) {\n console.warn(\n 'lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.',\n );\n }\n }\n }\n\n /**\n * @desc Create image counter\n * Ex: 1/10\n */\n counter(): void {\n if (this.settings.counter) {\n const counterHtml = `
\n ${this.index + 1} /\n ${\n this.galleryItems.length\n }
`;\n this.outer.find(this.settings.appendCounterTo).append(counterHtml);\n }\n }\n\n /**\n * @desc add sub-html into the slide\n * @param {Number} index - index of the slide\n */\n addHtml(index: number): void {\n let subHtml;\n let subHtmlUrl;\n if (this.galleryItems[index].subHtmlUrl) {\n subHtmlUrl = this.galleryItems[index].subHtmlUrl;\n } else {\n subHtml = this.galleryItems[index].subHtml;\n }\n\n if (!subHtmlUrl) {\n if (subHtml) {\n // get first letter of sub-html\n // if first letter starts with . or # get the html form the jQuery object\n const fL = subHtml.substring(0, 1);\n if (fL === '.' || fL === '#') {\n if (\n this.settings.subHtmlSelectorRelative &&\n !this.settings.dynamic\n ) {\n subHtml = $LG(this.items)\n .eq(index)\n .find(subHtml)\n .first()\n .html();\n } else {\n subHtml = $LG(subHtml).first().html();\n }\n }\n } else {\n subHtml = '';\n }\n }\n\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n if (subHtmlUrl) {\n this.outer.find('.lg-sub-html').load(subHtmlUrl);\n } else {\n this.outer.find('.lg-sub-html').html(subHtml as string);\n }\n } else {\n const currentSlide = $LG(this.getSlideItemId(index));\n if (subHtmlUrl) {\n currentSlide.load(subHtmlUrl);\n } else {\n currentSlide.append(\n `
${subHtml}
`,\n );\n }\n }\n\n // Add lg-empty-html class if title doesn't exist\n if (typeof subHtml !== 'undefined' && subHtml !== null) {\n if (subHtml === '') {\n this.outer\n .find(this.settings.appendSubHtmlTo)\n .addClass('lg-empty-html');\n } else {\n this.outer\n .find(this.settings.appendSubHtmlTo)\n .removeClass('lg-empty-html');\n }\n }\n\n this.LGel.trigger(\n lGEvents.afterAppendSubHtml,\n {\n index,\n },\n );\n }\n\n /**\n * @desc Preload slides\n * @param {Number} index - index of the slide\n * @todo preload not working for the first slide, Also, should work for the first and last slide as well\n */\n preload(index: number): void {\n for (let i = 1; i <= this.settings.preload; i++) {\n if (i >= this.galleryItems.length - index) {\n break;\n }\n\n this.loadContent(index + i, false);\n }\n\n for (let j = 1; j <= this.settings.preload; j++) {\n if (index - j < 0) {\n break;\n }\n\n this.loadContent(index - j, false);\n }\n }\n\n getDummyImgStyles(imageSize?: ImageSize): string {\n if (!imageSize) return '';\n return `width:${imageSize.width}px;\n margin-left: -${imageSize.width / 2}px;\n margin-top: -${imageSize.height / 2}px;\n height:${imageSize.height}px`;\n }\n getVideoContStyle(imageSize?: ImageSize): string {\n if (!imageSize) return '';\n return `width:${imageSize.width}px;\n height:${imageSize.height}px`;\n }\n\n getDummyImageContent(\n $currentSlide: lgQuery,\n index: number,\n alt: string,\n ): string {\n let $currentItem;\n if (!this.settings.dynamic) {\n $currentItem = $LG(this.items).eq(index);\n }\n if ($currentItem) {\n let _dummyImgSrc;\n if (!this.settings.exThumbImage) {\n _dummyImgSrc = $currentItem.find('img').first().attr('src');\n } else {\n _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage);\n }\n if (!_dummyImgSrc) return '';\n const imgStyle = this.getDummyImgStyles(this.currentImageSize);\n const dummyImgContent = ``;\n\n $currentSlide.addClass('lg-first-slide');\n this.outer.addClass('lg-first-slide-loading');\n\n return dummyImgContent;\n }\n return '';\n }\n\n setImgMarkup(src: string, $currentSlide: lgQuery, index: number): void {\n const currentGalleryItem = this.galleryItems[index];\n const { alt, srcset, sizes, sources } = currentGalleryItem;\n\n // Use the thumbnail as dummy image which will be resized to actual image size and\n // displayed on top of actual image\n let imgContent = '';\n const altAttr = alt ? 'alt=\"' + alt + '\"' : '';\n\n if (this.isFirstSlideWithZoomAnimation()) {\n imgContent = this.getDummyImageContent(\n $currentSlide,\n index,\n altAttr,\n );\n } else {\n imgContent = utils.getImgMarkup(\n index,\n src,\n altAttr,\n srcset,\n sizes,\n sources,\n );\n }\n const imgMarkup = ` ${imgContent}`;\n $currentSlide.prepend(imgMarkup);\n }\n\n onSlideObjectLoad(\n $slide: lgQuery,\n isHTML5VideoWithoutPoster: boolean,\n onLoad: () => void,\n onError: () => void,\n ): void {\n const mediaObject = $slide.find('.lg-object').first();\n if (\n utils.isImageLoaded(mediaObject.get() as HTMLImageElement) ||\n isHTML5VideoWithoutPoster\n ) {\n onLoad();\n } else {\n mediaObject.on('load.lg error.lg', () => {\n onLoad && onLoad();\n });\n mediaObject.on('error.lg', () => {\n onError && onError();\n });\n }\n }\n\n /**\n *\n * @param $el Current slide item\n * @param index\n * @param delay Delay is 0 except first time\n * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin\n * @param isFirstSlide\n */\n onLgObjectLoad(\n currentSlide: lgQuery,\n index: number,\n delay: number,\n speed: number,\n isFirstSlide: boolean,\n isHTML5VideoWithoutPoster: boolean,\n ): void {\n this.onSlideObjectLoad(\n currentSlide,\n isHTML5VideoWithoutPoster,\n () => {\n this.triggerSlideItemLoad(\n currentSlide,\n index,\n delay,\n speed,\n isFirstSlide,\n );\n },\n () => {\n currentSlide.addClass('lg-complete lg-complete_');\n currentSlide.html(\n 'Oops... Failed to load content...',\n );\n },\n );\n }\n\n triggerSlideItemLoad(\n $currentSlide: lgQuery,\n index: number,\n delay: number,\n speed: number,\n isFirstSlide: boolean,\n ): void {\n const currentGalleryItem = this.galleryItems[index];\n\n // Adding delay for video slides without poster for better performance and user experience\n // Videos should start playing once once the gallery is completely loaded\n const _speed =\n isFirstSlide &&\n this.getSlideType(currentGalleryItem) === 'video' &&\n !currentGalleryItem.poster\n ? speed\n : 0;\n setTimeout(() => {\n $currentSlide.addClass('lg-complete lg-complete_');\n this.LGel.trigger(lGEvents.slideItemLoad, {\n index,\n delay: delay || 0,\n isFirstSlide,\n });\n }, _speed);\n }\n\n isFirstSlideWithZoomAnimation(): boolean {\n return !!(\n !this.lGalleryOn &&\n this.zoomFromOrigin &&\n this.currentImageSize\n );\n }\n\n // Add video slideInfo\n addSlideVideoInfo(items: GalleryItem[]): void {\n items.forEach((element, index) => {\n element.__slideVideoInfo = utils.isVideo(\n element.src as string,\n !!element.video,\n index,\n );\n if (\n element.__slideVideoInfo &&\n this.settings.loadYouTubePoster &&\n !element.poster &&\n element.__slideVideoInfo.youtube\n ) {\n element.poster = `//img.youtube.com/vi/${element.__slideVideoInfo.youtube[1]}/maxresdefault.jpg`;\n }\n });\n }\n\n /**\n * Load slide content into slide.\n * This is used to load content into slides that is not visible too\n * @param {Number} index - index of the slide.\n * @param {Boolean} rec - if true call loadcontent() function again.\n */\n loadContent(index: number, rec: boolean): void {\n const currentGalleryItem = this.galleryItems[index];\n const $currentSlide = $LG(this.getSlideItemId(index));\n\n const { poster, srcset, sizes, sources } = currentGalleryItem;\n let { src } = currentGalleryItem;\n\n const video = currentGalleryItem.video;\n\n const _html5Video =\n video && typeof video === 'string' ? JSON.parse(video) : video;\n\n if (currentGalleryItem.responsive) {\n const srcDyItms = currentGalleryItem.responsive.split(',');\n src = utils.getResponsiveSrc(srcDyItms) || src;\n }\n\n const videoInfo = currentGalleryItem.__slideVideoInfo;\n let lgVideoStyle = '';\n\n const iframe = !!currentGalleryItem.iframe;\n\n const isFirstSlide = !this.lGalleryOn;\n\n // delay for adding complete class. it is 0 except first time.\n let delay = 0;\n if (isFirstSlide) {\n if (this.zoomFromOrigin && this.currentImageSize) {\n delay = this.settings.startAnimationDuration + 10;\n } else {\n delay = this.settings.backdropDuration + 10;\n }\n }\n\n if (!$currentSlide.hasClass('lg-loaded')) {\n if (videoInfo) {\n const { top, bottom } = this.mediaContainerPosition;\n const videoSize = utils.getSize(\n this.items[index],\n this.outer,\n top + bottom,\n videoInfo && this.settings.videoMaxSize,\n );\n lgVideoStyle = this.getVideoContStyle(videoSize);\n }\n if (iframe) {\n const markup = utils.getIframeMarkup(\n this.settings.iframeWidth,\n this.settings.iframeHeight,\n this.settings.iframeMaxWidth,\n this.settings.iframeMaxHeight,\n src,\n currentGalleryItem.iframeTitle,\n );\n $currentSlide.prepend(markup);\n } else if (poster) {\n let dummyImg = '';\n const hasStartAnimation =\n isFirstSlide &&\n this.zoomFromOrigin &&\n this.currentImageSize;\n if (hasStartAnimation) {\n dummyImg = this.getDummyImageContent(\n $currentSlide,\n index,\n '',\n );\n }\n\n const markup = utils.getVideoPosterMarkup(\n poster,\n dummyImg || '',\n lgVideoStyle,\n this.settings.strings['playVideo'],\n videoInfo,\n );\n $currentSlide.prepend(markup);\n } else if (videoInfo) {\n const markup = `
`;\n $currentSlide.prepend(markup);\n } else {\n this.setImgMarkup(src as string, $currentSlide, index);\n if (srcset || sources) {\n const $img = $currentSlide.find('.lg-object');\n this.initPictureFill($img);\n }\n }\n if (poster || videoInfo) {\n this.LGel.trigger(lGEvents.hasVideo, {\n index,\n src: src,\n html5Video: _html5Video,\n hasPoster: !!poster,\n });\n }\n\n this.LGel.trigger(\n lGEvents.afterAppendSlide,\n { index },\n );\n\n if (\n this.lGalleryOn &&\n this.settings.appendSubHtmlTo === '.lg-item'\n ) {\n this.addHtml(index);\n }\n }\n\n // For first time add some delay for displaying the start animation.\n let _speed = 0;\n\n // Do not change the delay value because it is required for zoom plugin.\n // If gallery opened from direct url (hash) speed value should be 0\n if (delay && !$LG(document.body).hasClass('lg-from-hash')) {\n _speed = delay;\n }\n\n // Only for first slide and zoomFromOrigin is enabled\n if (this.isFirstSlideWithZoomAnimation()) {\n setTimeout(() => {\n $currentSlide\n .removeClass('lg-start-end-progress lg-start-progress')\n .removeAttr('style');\n }, this.settings.startAnimationDuration + 100);\n if (!$currentSlide.hasClass('lg-loaded')) {\n setTimeout(() => {\n if (this.getSlideType(currentGalleryItem) === 'image') {\n const { alt } = currentGalleryItem;\n const altAttr = alt ? 'alt=\"' + alt + '\"' : '';\n\n $currentSlide\n .find('.lg-img-wrap')\n .append(\n utils.getImgMarkup(\n index,\n src as string,\n altAttr,\n srcset,\n sizes,\n currentGalleryItem.sources,\n ),\n );\n if (srcset || sources) {\n const $img = $currentSlide.find('.lg-object');\n this.initPictureFill($img);\n }\n }\n if (\n this.getSlideType(currentGalleryItem) === 'image' ||\n (this.getSlideType(currentGalleryItem) === 'video' &&\n poster)\n ) {\n this.onLgObjectLoad(\n $currentSlide,\n index,\n delay,\n _speed,\n true,\n false,\n );\n\n // load remaining slides once the slide is completely loaded\n this.onSlideObjectLoad(\n $currentSlide,\n !!(videoInfo && videoInfo.html5 && !poster),\n () => {\n this.loadContentOnFirstSlideLoad(\n index,\n $currentSlide,\n _speed,\n );\n },\n () => {\n this.loadContentOnFirstSlideLoad(\n index,\n $currentSlide,\n _speed,\n );\n },\n );\n }\n }, this.settings.startAnimationDuration + 100);\n }\n }\n\n // SLide content has been added to dom\n $currentSlide.addClass('lg-loaded');\n\n if (\n !this.isFirstSlideWithZoomAnimation() ||\n (this.getSlideType(currentGalleryItem) === 'video' && !poster)\n ) {\n this.onLgObjectLoad(\n $currentSlide,\n index,\n delay,\n _speed,\n isFirstSlide,\n !!(videoInfo && videoInfo.html5 && !poster),\n );\n }\n\n // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling\n if (\n (!this.zoomFromOrigin || !this.currentImageSize) &&\n $currentSlide.hasClass('lg-complete_') &&\n !this.lGalleryOn\n ) {\n setTimeout(() => {\n $currentSlide.addClass('lg-complete');\n }, this.settings.backdropDuration);\n }\n\n // Content loaded\n // Need to set lGalleryOn before calling preload function\n this.lGalleryOn = true;\n\n if (rec === true) {\n if (!$currentSlide.hasClass('lg-complete_')) {\n $currentSlide\n .find('.lg-object')\n .first()\n .on('load.lg error.lg', () => {\n this.preload(index);\n });\n } else {\n this.preload(index);\n }\n }\n }\n\n /**\n * @desc Remove dummy image content and load next slides\n * Called only for the first time if zoomFromOrigin animation is enabled\n * @param index\n * @param $currentSlide\n * @param speed\n */\n loadContentOnFirstSlideLoad(\n index: number,\n $currentSlide: lgQuery,\n speed: number,\n ): void {\n setTimeout(() => {\n $currentSlide.find('.lg-dummy-img').remove();\n $currentSlide.removeClass('lg-first-slide');\n this.outer.removeClass('lg-first-slide-loading');\n this.isDummyImageRemoved = true;\n this.preload(index);\n }, speed + 300);\n }\n\n getItemsToBeInsertedToDom(\n index: number,\n prevIndex: number,\n numberOfItems = 0,\n ): string[] {\n const itemsToBeInsertedToDom: string[] = [];\n // Minimum 2 items should be there\n let possibleNumberOfItems = Math.max(numberOfItems, 3);\n possibleNumberOfItems = Math.min(\n possibleNumberOfItems,\n this.galleryItems.length,\n );\n const prevIndexItem = `lg-item-${this.lgId}-${prevIndex}`;\n if (this.galleryItems.length <= 3) {\n this.galleryItems.forEach((_element, index) => {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${index}`);\n });\n return itemsToBeInsertedToDom;\n }\n\n if (index < (this.galleryItems.length - 1) / 2) {\n for (\n let idx = index;\n idx > index - possibleNumberOfItems / 2 && idx >= 0;\n idx--\n ) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${idx}`);\n }\n const numberOfExistingItems = itemsToBeInsertedToDom.length;\n for (\n let idx = 0;\n idx < possibleNumberOfItems - numberOfExistingItems;\n idx++\n ) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${index + idx + 1}`,\n );\n }\n } else {\n for (\n let idx = index;\n idx <= this.galleryItems.length - 1 &&\n idx < index + possibleNumberOfItems / 2;\n idx++\n ) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${idx}`);\n }\n const numberOfExistingItems = itemsToBeInsertedToDom.length;\n for (\n let idx = 0;\n idx < possibleNumberOfItems - numberOfExistingItems;\n idx++\n ) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${index - idx - 1}`,\n );\n }\n }\n if (this.settings.loop) {\n if (index === this.galleryItems.length - 1) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${0}`);\n } else if (index === 0) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${this.galleryItems.length - 1}`,\n );\n }\n }\n if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${prevIndex}`);\n }\n\n return itemsToBeInsertedToDom;\n }\n\n organizeSlideItems(index: number, prevIndex: number): string[] {\n const itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(\n index,\n prevIndex,\n this.settings.numberOfSlideItemsInDom,\n );\n\n itemsToBeInsertedToDom.forEach((item) => {\n if (this.currentItemsInDom.indexOf(item) === -1) {\n this.$inner.append(`
`);\n }\n });\n\n this.currentItemsInDom.forEach((item) => {\n if (itemsToBeInsertedToDom.indexOf(item) === -1) {\n $LG(`#${item}`).remove();\n }\n });\n return itemsToBeInsertedToDom;\n }\n\n /**\n * Get previous index of the slide\n */\n getPreviousSlideIndex(): number {\n let prevIndex = 0;\n try {\n const currentItemId = this.outer\n .find('.lg-current')\n .first()\n .attr('id');\n prevIndex = parseInt(currentItemId.split('-')[3]) || 0;\n } catch (error) {\n prevIndex = 0;\n }\n return prevIndex;\n }\n\n setDownloadValue(index: number): void {\n if (this.settings.download) {\n const currentGalleryItem = this.galleryItems[index];\n const hideDownloadBtn =\n currentGalleryItem.downloadUrl === false ||\n currentGalleryItem.downloadUrl === 'false';\n if (hideDownloadBtn) {\n this.outer.addClass('lg-hide-download');\n } else {\n const $download = this.getElementById('lg-download');\n this.outer.removeClass('lg-hide-download');\n $download.attr(\n 'href',\n currentGalleryItem.downloadUrl ||\n (currentGalleryItem.src as string),\n );\n if (currentGalleryItem.download) {\n $download.attr('download', currentGalleryItem.download);\n }\n }\n }\n }\n\n makeSlideAnimation(\n direction: 'next' | 'prev',\n currentSlideItem: lgQuery,\n previousSlideItem: lgQuery,\n ): void {\n if (this.lGalleryOn) {\n previousSlideItem.addClass('lg-slide-progress');\n }\n setTimeout(\n () => {\n // remove all transitions\n this.outer.addClass('lg-no-trans');\n\n this.outer\n .find('.lg-item')\n .removeClass('lg-prev-slide lg-next-slide');\n\n if (direction === 'prev') {\n //prevslide\n currentSlideItem.addClass('lg-prev-slide');\n previousSlideItem.addClass('lg-next-slide');\n } else {\n // next slide\n currentSlideItem.addClass('lg-next-slide');\n previousSlideItem.addClass('lg-prev-slide');\n }\n\n // give 50 ms for browser to add/remove class\n setTimeout(() => {\n this.outer.find('.lg-item').removeClass('lg-current');\n\n currentSlideItem.addClass('lg-current');\n\n // reset all transitions\n this.outer.removeClass('lg-no-trans');\n }, 50);\n },\n this.lGalleryOn ? this.settings.slideDelay : 0,\n );\n }\n\n /**\n * Goto a specific slide.\n * @param {Number} index - index of the slide\n * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag\n * @param {Boolean} fromThumb - true if slide function called via thumbnail click\n * @param {String} direction - Direction of the slide(next/prev)\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * // to go to 3rd slide\n * plugin.slide(2);\n *\n */\n slide(\n index: number,\n fromTouch?: boolean,\n fromThumb?: boolean,\n direction?: SlideDirection | false,\n ): void {\n const prevIndex = this.getPreviousSlideIndex();\n this.currentItemsInDom = this.organizeSlideItems(index, prevIndex);\n\n // Prevent multiple call, Required for hsh plugin\n if (this.lGalleryOn && prevIndex === index) {\n return;\n }\n\n const numberOfGalleryItems = this.galleryItems.length;\n\n if (!this.lgBusy) {\n if (this.settings.counter) {\n this.updateCurrentCounter(index);\n }\n\n const currentSlideItem = this.getSlideItem(index);\n const previousSlideItem = this.getSlideItem(prevIndex);\n\n const currentGalleryItem = this.galleryItems[index];\n const videoInfo = currentGalleryItem.__slideVideoInfo;\n\n this.outer.attr(\n 'data-lg-slide-type',\n this.getSlideType(currentGalleryItem),\n );\n this.setDownloadValue(index);\n\n if (videoInfo) {\n const { top, bottom } = this.mediaContainerPosition;\n const videoSize = utils.getSize(\n this.items[index],\n this.outer,\n top + bottom,\n videoInfo && this.settings.videoMaxSize,\n );\n this.resizeVideoSlide(index, videoSize);\n }\n\n this.LGel.trigger(lGEvents.beforeSlide, {\n prevIndex,\n index,\n fromTouch: !!fromTouch,\n fromThumb: !!fromThumb,\n });\n\n this.lgBusy = true;\n\n clearTimeout(this.hideBarTimeout);\n\n this.arrowDisable(index);\n\n if (!direction) {\n if (index < prevIndex) {\n direction = 'prev';\n } else if (index > prevIndex) {\n direction = 'next';\n }\n }\n\n if (!fromTouch) {\n this.makeSlideAnimation(\n direction as SlideDirection,\n currentSlideItem,\n previousSlideItem,\n );\n } else {\n this.outer\n .find('.lg-item')\n .removeClass('lg-prev-slide lg-current lg-next-slide');\n let touchPrev;\n let touchNext;\n if (numberOfGalleryItems > 2) {\n touchPrev = index - 1;\n touchNext = index + 1;\n\n if (index === 0 && prevIndex === numberOfGalleryItems - 1) {\n // next slide\n touchNext = 0;\n touchPrev = numberOfGalleryItems - 1;\n } else if (\n index === numberOfGalleryItems - 1 &&\n prevIndex === 0\n ) {\n // prev slide\n touchNext = 0;\n touchPrev = numberOfGalleryItems - 1;\n }\n } else {\n touchPrev = 0;\n touchNext = 1;\n }\n\n if (direction === 'prev') {\n this.getSlideItem(touchNext).addClass('lg-next-slide');\n } else {\n this.getSlideItem(touchPrev).addClass('lg-prev-slide');\n }\n\n currentSlideItem.addClass('lg-current');\n }\n\n // Do not put load content in set timeout as it needs to load immediately when the gallery is opened\n if (!this.lGalleryOn) {\n this.loadContent(index, true);\n } else {\n setTimeout(() => {\n this.loadContent(index, true);\n // Add title if this.settings.appendSubHtmlTo === lg-sub-html\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n this.addHtml(index);\n }\n }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay));\n }\n\n setTimeout(() => {\n this.lgBusy = false;\n previousSlideItem.removeClass('lg-slide-progress');\n this.LGel.trigger(lGEvents.afterSlide, {\n prevIndex: prevIndex,\n index,\n fromTouch,\n fromThumb,\n });\n }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay));\n }\n\n this.index = index;\n }\n\n updateCurrentCounter(index: number): void {\n this.getElementById('lg-counter-current').html(index + 1 + '');\n }\n\n updateCounterTotal(): void {\n this.getElementById('lg-counter-all').html(\n this.galleryItems.length + '',\n );\n }\n\n getSlideType(item: GalleryItem): 'video' | 'iframe' | 'image' {\n if (item.__slideVideoInfo) {\n return 'video';\n } else if (item.iframe) {\n return 'iframe';\n } else {\n return 'image';\n }\n }\n\n touchMove(startCoords: Coords, endCoords: Coords, e?: TouchEvent): void {\n const distanceX = endCoords.pageX - startCoords.pageX;\n const distanceY = endCoords.pageY - startCoords.pageY;\n let allowSwipe = false;\n\n if (this.swipeDirection) {\n allowSwipe = true;\n } else {\n if (Math.abs(distanceX) > 15) {\n this.swipeDirection = 'horizontal';\n allowSwipe = true;\n } else if (Math.abs(distanceY) > 15) {\n this.swipeDirection = 'vertical';\n allowSwipe = true;\n }\n }\n\n if (!allowSwipe) {\n return;\n }\n\n const $currentSlide = this.getSlideItem(this.index);\n\n if (this.swipeDirection === 'horizontal') {\n e?.preventDefault();\n // reset opacity and transition duration\n this.outer.addClass('lg-dragging');\n\n // move current slide\n this.setTranslate($currentSlide, distanceX, 0);\n\n // move next and prev slide with current slide\n const width = $currentSlide.get().offsetWidth;\n const slideWidthAmount = (width * 15) / 100;\n const gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100);\n this.setTranslate(\n this.outer.find('.lg-prev-slide').first(),\n -width + distanceX - gutter,\n 0,\n );\n\n this.setTranslate(\n this.outer.find('.lg-next-slide').first(),\n width + distanceX + gutter,\n 0,\n );\n } else if (this.swipeDirection === 'vertical') {\n if (this.settings.swipeToClose) {\n e?.preventDefault();\n this.$container.addClass('lg-dragging-vertical');\n\n const opacity = 1 - Math.abs(distanceY) / window.innerHeight;\n this.$backdrop.css('opacity', opacity);\n\n const scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2);\n this.setTranslate($currentSlide, 0, distanceY, scale, scale);\n if (Math.abs(distanceY) > 100) {\n this.outer\n .addClass('lg-hide-items')\n .removeClass('lg-components-open');\n }\n }\n }\n }\n\n touchEnd(endCoords: Coords, startCoords: Coords, event: TouchEvent): void {\n let distance;\n\n // keep slide animation for any mode while dragg/swipe\n if (this.settings.mode !== 'lg-slide') {\n this.outer.addClass('lg-slide');\n }\n\n // set transition duration\n setTimeout(() => {\n this.$container.removeClass('lg-dragging-vertical');\n this.outer\n .removeClass('lg-dragging lg-hide-items')\n .addClass('lg-components-open');\n\n let triggerClick = true;\n\n if (this.swipeDirection === 'horizontal') {\n distance = endCoords.pageX - startCoords.pageX;\n const distanceAbs = Math.abs(\n endCoords.pageX - startCoords.pageX,\n );\n if (\n distance < 0 &&\n distanceAbs > this.settings.swipeThreshold\n ) {\n this.goToNextSlide(true);\n triggerClick = false;\n } else if (\n distance > 0 &&\n distanceAbs > this.settings.swipeThreshold\n ) {\n this.goToPrevSlide(true);\n triggerClick = false;\n }\n } else if (this.swipeDirection === 'vertical') {\n distance = Math.abs(endCoords.pageY - startCoords.pageY);\n if (\n this.settings.closable &&\n this.settings.swipeToClose &&\n distance > 100\n ) {\n this.closeGallery();\n return;\n } else {\n this.$backdrop.css('opacity', 1);\n }\n }\n this.outer.find('.lg-item').removeAttr('style');\n\n if (\n triggerClick &&\n Math.abs(endCoords.pageX - startCoords.pageX) < 5\n ) {\n // Trigger click if distance is less than 5 pix\n const target = $LG(event.target);\n if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n }\n\n this.swipeDirection = undefined;\n });\n\n // remove slide class once drag/swipe is completed if mode is not slide\n setTimeout(() => {\n if (\n !this.outer.hasClass('lg-dragging') &&\n this.settings.mode !== 'lg-slide'\n ) {\n this.outer.removeClass('lg-slide');\n }\n }, this.settings.speed + 100);\n }\n\n enableSwipe(): void {\n let startCoords: Coords = {} as Coords;\n let endCoords: Coords = {} as Coords;\n let isMoved = false;\n let isSwiping = false;\n\n if (this.settings.enableSwipe) {\n this.$inner.on('touchstart.lg', (e) => {\n this.dragOrSwipeEnabled = true;\n const $item = this.getSlideItem(this.index);\n if (\n ($LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)) &&\n !this.outer.hasClass('lg-zoomed') &&\n !this.lgBusy &&\n e.touches.length === 1\n ) {\n isSwiping = true;\n this.touchAction = 'swipe';\n this.manageSwipeClass();\n startCoords = {\n pageX: e.touches[0].pageX,\n pageY: e.touches[0].pageY,\n };\n }\n });\n\n this.$inner.on('touchmove.lg', (e) => {\n if (\n isSwiping &&\n this.touchAction === 'swipe' &&\n e.touches.length === 1\n ) {\n endCoords = {\n pageX: e.touches[0].pageX,\n pageY: e.touches[0].pageY,\n };\n this.touchMove(startCoords, endCoords, e);\n isMoved = true;\n }\n });\n\n this.$inner.on('touchend.lg', (event: TouchEvent) => {\n if (this.touchAction === 'swipe') {\n if (isMoved) {\n isMoved = false;\n this.touchEnd(endCoords, startCoords, event);\n } else if (isSwiping) {\n const target = $LG(event.target);\n if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n }\n this.touchAction = undefined;\n isSwiping = false;\n }\n });\n }\n }\n\n enableDrag(): void {\n let startCoords: Coords = {} as Coords;\n let endCoords: Coords = {} as Coords;\n let isDraging = false;\n let isMoved = false;\n if (this.settings.enableDrag) {\n this.outer.on('mousedown.lg', (e) => {\n this.dragOrSwipeEnabled = true;\n const $item = this.getSlideItem(this.index);\n if (\n $LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)\n ) {\n if (!this.outer.hasClass('lg-zoomed') && !this.lgBusy) {\n e.preventDefault();\n if (!this.lgBusy) {\n this.manageSwipeClass();\n startCoords = {\n pageX: e.pageX,\n pageY: e.pageY,\n };\n isDraging = true;\n\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\n this.outer.get().scrollLeft += 1;\n this.outer.get().scrollLeft -= 1;\n\n // *\n\n this.outer\n .removeClass('lg-grab')\n .addClass('lg-grabbing');\n\n this.LGel.trigger(lGEvents.dragStart);\n }\n }\n }\n });\n\n $LG(window).on(`mousemove.lg.global${this.lgId}`, (e) => {\n if (isDraging && this.lgOpened) {\n isMoved = true;\n endCoords = {\n pageX: e.pageX,\n pageY: e.pageY,\n };\n this.touchMove(startCoords, endCoords);\n this.LGel.trigger(lGEvents.dragMove);\n }\n });\n\n $LG(window).on(`mouseup.lg.global${this.lgId}`, (event) => {\n if (!this.lgOpened) {\n return;\n }\n const target = $LG(event.target);\n if (isMoved) {\n isMoved = false;\n this.touchEnd(endCoords, startCoords, event);\n this.LGel.trigger(lGEvents.dragEnd);\n } else if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n\n // Prevent execution on click\n if (isDraging) {\n isDraging = false;\n this.outer.removeClass('lg-grabbing').addClass('lg-grab');\n }\n });\n }\n }\n\n triggerPosterClick(): void {\n this.$inner.on('click.lg', (event) => {\n if (\n !this.dragOrSwipeEnabled &&\n this.isPosterElement($LG(event.target))\n ) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n });\n }\n\n manageSwipeClass(): void {\n let _touchNext = this.index + 1;\n let _touchPrev = this.index - 1;\n if (this.settings.loop && this.galleryItems.length > 2) {\n if (this.index === 0) {\n _touchPrev = this.galleryItems.length - 1;\n } else if (this.index === this.galleryItems.length - 1) {\n _touchNext = 0;\n }\n }\n\n this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide');\n if (_touchPrev > -1) {\n this.getSlideItem(_touchPrev).addClass('lg-prev-slide');\n }\n\n this.getSlideItem(_touchNext).addClass('lg-next-slide');\n }\n\n /**\n * Go to next slide\n * @param {Boolean} fromTouch - true if slide function called via touch event\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.goToNextSlide();\n * @see Demo\n */\n goToNextSlide(fromTouch?: boolean): void {\n let _loop = this.settings.loop;\n if (fromTouch && this.galleryItems.length < 3) {\n _loop = false;\n }\n\n if (!this.lgBusy) {\n if (this.index + 1 < this.galleryItems.length) {\n this.index++;\n this.LGel.trigger(lGEvents.beforeNextSlide, {\n index: this.index,\n });\n this.slide(this.index, !!fromTouch, false, 'next');\n } else {\n if (_loop) {\n this.index = 0;\n this.LGel.trigger(lGEvents.beforeNextSlide, {\n index: this.index,\n });\n this.slide(this.index, !!fromTouch, false, 'next');\n } else if (this.settings.slideEndAnimation && !fromTouch) {\n this.outer.addClass('lg-right-end');\n setTimeout(() => {\n this.outer.removeClass('lg-right-end');\n }, 400);\n }\n }\n }\n }\n\n /**\n * Go to previous slides\n * @param {Boolean} fromTouch - true if slide function called via touch event\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery({});\n * plugin.goToPrevSlide();\n * @see Demo\n *\n */\n goToPrevSlide(fromTouch?: boolean): void {\n let _loop = this.settings.loop;\n if (fromTouch && this.galleryItems.length < 3) {\n _loop = false;\n }\n\n if (!this.lgBusy) {\n if (this.index > 0) {\n this.index--;\n this.LGel.trigger(lGEvents.beforePrevSlide, {\n index: this.index,\n fromTouch,\n });\n this.slide(this.index, !!fromTouch, false, 'prev');\n } else {\n if (_loop) {\n this.index = this.galleryItems.length - 1;\n this.LGel.trigger(lGEvents.beforePrevSlide, {\n index: this.index,\n fromTouch,\n });\n this.slide(this.index, !!fromTouch, false, 'prev');\n } else if (this.settings.slideEndAnimation && !fromTouch) {\n this.outer.addClass('lg-left-end');\n setTimeout(() => {\n this.outer.removeClass('lg-left-end');\n }, 400);\n }\n }\n }\n }\n\n keyPress(): void {\n $LG(window).on(`keydown.lg.global${this.lgId}`, (e) => {\n if (\n this.lgOpened &&\n this.settings.escKey === true &&\n e.keyCode === 27\n ) {\n e.preventDefault();\n if (\n this.settings.allowMediaOverlap &&\n this.outer.hasClass('lg-can-toggle') &&\n this.outer.hasClass('lg-components-open')\n ) {\n this.outer.removeClass('lg-components-open');\n } else {\n this.closeGallery();\n }\n }\n if (this.lgOpened && this.galleryItems.length > 1) {\n if (e.keyCode === 37) {\n e.preventDefault();\n this.goToPrevSlide();\n }\n\n if (e.keyCode === 39) {\n e.preventDefault();\n this.goToNextSlide();\n }\n }\n });\n }\n\n arrow(): void {\n this.getElementById('lg-prev').on('click.lg', () => {\n this.goToPrevSlide();\n });\n this.getElementById('lg-next').on('click.lg', () => {\n this.goToNextSlide();\n });\n }\n\n arrowDisable(index: number): void {\n // Disable arrows if settings.hideControlOnEnd is true\n if (!this.settings.loop && this.settings.hideControlOnEnd) {\n const $prev = this.getElementById('lg-prev');\n const $next = this.getElementById('lg-next');\n if (index + 1 === this.galleryItems.length) {\n $next.attr('disabled', 'disabled').addClass('disabled');\n } else {\n $next.removeAttr('disabled').removeClass('disabled');\n }\n\n if (index === 0) {\n $prev.attr('disabled', 'disabled').addClass('disabled');\n } else {\n $prev.removeAttr('disabled').removeClass('disabled');\n }\n }\n }\n\n setTranslate(\n $el: lgQuery,\n xValue: number,\n yValue: number,\n scaleX = 1,\n scaleY = 1,\n ): void {\n $el.css(\n 'transform',\n 'translate3d(' +\n xValue +\n 'px, ' +\n yValue +\n 'px, 0px) scale3d(' +\n scaleX +\n ', ' +\n scaleY +\n ', 1)',\n );\n }\n\n mousewheel(): void {\n let lastCall = 0;\n this.outer.on('wheel.lg', (e) => {\n if (!e.deltaY || this.galleryItems.length < 2) {\n return;\n }\n e.preventDefault();\n const now = new Date().getTime();\n if (now - lastCall < 1000) {\n return;\n }\n lastCall = now;\n if (e.deltaY > 0) {\n this.goToNextSlide();\n } else if (e.deltaY < 0) {\n this.goToPrevSlide();\n }\n });\n }\n\n isSlideElement(target: lgQuery): boolean {\n return (\n target.hasClass('lg-outer') ||\n target.hasClass('lg-item') ||\n target.hasClass('lg-img-wrap')\n );\n }\n\n isPosterElement(target: lgQuery): boolean {\n const playButton = this.getSlideItem(this.index)\n .find('.lg-video-play-button')\n .get();\n return (\n target.hasClass('lg-video-poster') ||\n target.hasClass('lg-video-play-button') ||\n (playButton && playButton.contains(target.get()))\n );\n }\n\n /**\n * Maximize minimize inline gallery.\n * @category lGPublicMethods\n */\n toggleMaximize(): void {\n this.getElementById('lg-maximize').on('click.lg', () => {\n this.$container.toggleClass('lg-inline');\n this.refreshOnResize();\n });\n }\n\n invalidateItems(): void {\n for (let index = 0; index < this.items.length; index++) {\n const element = this.items[index];\n const $element = $LG(element);\n $element.off(`click.lgcustom-item-${$element.attr('data-lg-id')}`);\n }\n }\n\n trapFocus(): void {\n this.$container.get().focus({\n preventScroll: true,\n });\n $LG(window).on(`keydown.lg.global${this.lgId}`, (e) => {\n if (!this.lgOpened) {\n return;\n }\n\n const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n if (!isTabPressed) {\n return;\n }\n const focusableEls = utils.getFocusableElements(\n this.$container.get(),\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n (lastFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === lastFocusableEl) {\n (firstFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n }\n });\n }\n\n manageCloseGallery(): void {\n if (!this.settings.closable) return;\n let mousedown = false;\n this.getElementById('lg-close').on('click.lg', () => {\n this.closeGallery();\n });\n\n if (this.settings.closeOnTap) {\n // If you drag the slide and release outside gallery gets close on chrome\n // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer\n this.outer.on('mousedown.lg', (e) => {\n const target = $LG(e.target);\n if (this.isSlideElement(target)) {\n mousedown = true;\n } else {\n mousedown = false;\n }\n });\n\n this.outer.on('mousemove.lg', () => {\n mousedown = false;\n });\n\n this.outer.on('mouseup.lg', (e) => {\n const target = $LG(e.target);\n if (this.isSlideElement(target) && mousedown) {\n if (!this.outer.hasClass('lg-dragging')) {\n this.closeGallery();\n }\n }\n });\n }\n }\n\n /**\n * Close lightGallery if it is opened.\n *\n * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery\n * @return returns the estimated time to close gallery completely including the close animation duration\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.closeGallery();\n *\n */\n closeGallery(force?: boolean): number {\n if (!this.lgOpened || (!this.settings.closable && !force)) {\n return 0;\n }\n this.LGel.trigger(lGEvents.beforeClose);\n\n if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {\n $LG(window).scrollTop(this.prevScrollTop);\n }\n\n const currentItem = this.items[this.index];\n let transform: string | undefined;\n if (this.zoomFromOrigin && currentItem) {\n const { top, bottom } = this.mediaContainerPosition;\n const { __slideVideoInfo, poster } = this.galleryItems[this.index];\n const imageSize = utils.getSize(\n currentItem,\n this.outer,\n top + bottom,\n __slideVideoInfo && poster && this.settings.videoMaxSize,\n );\n transform = utils.getTransform(\n currentItem,\n this.outer,\n top,\n bottom,\n imageSize,\n );\n }\n if (this.zoomFromOrigin && transform) {\n this.outer.addClass('lg-closing lg-zoom-from-image');\n this.getSlideItem(this.index)\n .addClass('lg-start-end-progress')\n .css(\n 'transition-duration',\n this.settings.startAnimationDuration + 'ms',\n )\n .css('transform', transform);\n } else {\n this.outer.addClass('lg-hide-items');\n // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true\n // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts\n this.outer.removeClass('lg-zoom-from-image');\n }\n\n // Unbind all events added by lightGallery\n // @todo\n //this.$el.off('.lg.tm');\n\n this.destroyModules();\n\n this.lGalleryOn = false;\n this.isDummyImageRemoved = false;\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\n\n clearTimeout(this.hideBarTimeout);\n this.hideBarTimeout = false;\n $LG('html').removeClass('lg-on');\n\n this.outer.removeClass('lg-visible lg-components-open');\n\n // Resetting opacity to 0 isd required as vertical swipe to close function adds inline opacity.\n this.$backdrop.removeClass('in').css('opacity', 0);\n\n const removeTimeout =\n this.zoomFromOrigin && transform\n ? Math.max(\n this.settings.startAnimationDuration,\n this.settings.backdropDuration,\n )\n : this.settings.backdropDuration;\n this.$container.removeClass('lg-show-in');\n\n // Once the closign animation is completed and gallery is invisible\n setTimeout(() => {\n if (this.zoomFromOrigin && transform) {\n this.outer.removeClass('lg-zoom-from-image');\n }\n this.$container.removeClass('lg-show');\n\n // Reset scrollbar\n this.resetScrollBar();\n\n // Need to remove inline opacity as it is used in the stylesheet as well\n this.$backdrop\n .removeAttr('style')\n .css(\n 'transition-duration',\n this.settings.backdropDuration + 'ms',\n );\n\n this.outer.removeClass(`lg-closing ${this.settings.startClass}`);\n\n this.getSlideItem(this.index).removeClass('lg-start-end-progress');\n this.$inner.empty();\n if (this.lgOpened) {\n this.LGel.trigger(lGEvents.afterClose, {\n instance: this,\n });\n }\n if (this.$container.get()) {\n this.$container.get().blur();\n }\n\n this.lgOpened = false;\n }, removeTimeout + 100);\n return removeTimeout + 100;\n }\n\n initModules(): void {\n this.plugins.forEach((module) => {\n try {\n module.init();\n } catch (err) {\n console.warn(\n `lightGallery:- make sure lightGallery module is properly initiated`,\n );\n }\n });\n }\n\n destroyModules(destroy?: true): void {\n this.plugins.forEach((module) => {\n try {\n if (destroy) {\n module.destroy();\n } else {\n module.closeGallery && module.closeGallery();\n }\n } catch (err) {\n console.warn(\n `lightGallery:- make sure lightGallery module is properly destroyed`,\n );\n }\n });\n }\n\n /**\n * Refresh lightGallery with new set of children.\n *\n * @description This is useful to update the gallery when the child elements are changed without calling destroy method.\n *\n * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery\n * @see Demo\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * // Delete or add children, then call\n * plugin.refresh();\n *\n */\n refresh(galleryItems?: GalleryItem[]): void {\n if (!this.settings.dynamic) {\n this.invalidateItems();\n }\n if (galleryItems) {\n this.galleryItems = galleryItems;\n } else {\n this.galleryItems = this.getItems();\n }\n this.updateControls();\n this.openGalleryOnItemClick();\n this.LGel.trigger(lGEvents.updateSlides);\n }\n\n updateControls(): void {\n this.addSlideVideoInfo(this.galleryItems);\n this.updateCounterTotal();\n this.manageSingleSlideClassName();\n }\n\n private destroyGallery(): void {\n this.destroyModules(true);\n if (!this.settings.dynamic) {\n this.invalidateItems();\n }\n $LG(window).off(`.lg.global${this.lgId}`);\n this.LGel.off('.lg');\n this.$container.remove();\n }\n\n /**\n * Destroy lightGallery.\n * Destroy lightGallery and its plugin instances completely\n *\n * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance.\n * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed.\n * You can use refresh method most of the times.\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.destroy();\n *\n */\n destroy(): number {\n const closeTimeout = this.closeGallery(true);\n if (closeTimeout) {\n setTimeout(this.destroyGallery.bind(this), closeTimeout);\n } else {\n this.destroyGallery();\n }\n return closeTimeout;\n }\n}\n","import { LightGallerySettings } from './lg-settings';\nimport { LightGallery } from './lightgallery';\n\nfunction lightGallery(\n el: HTMLElement,\n options?: LightGallerySettings,\n): LightGallery {\n return new LightGallery(el, options);\n}\nexport default lightGallery;\n","interface ThumbnailStrings {\n toggleThumbnails: string;\n}\n\nexport interface ThumbnailsSettings {\n /**\n * Enable thumbnails for the gallery\n */\n thumbnail: boolean;\n\n /*\n * Enable thumbnail animation.\n */\n animateThumb: boolean;\n\n /**\n * Position of selected thumbnail.\n */\n currentPagerPosition: 'left' | 'middle' | 'right';\n\n /**\n * Position of thumbnails when the width of all thumbnails combined is less than the gallery's width.\n *\n */\n alignThumbnails: 'left' | 'middle' | 'right';\n\n /**\n * Width of each thumbnails.\n */\n thumbWidth: number;\n\n /**\n * Height of each thumbnails.\n */\n thumbHeight: string;\n\n /**\n * Spacing between each thumbnails\n */\n thumbMargin: number;\n\n /**\n * control where the thumbnails should be appended.\n * By default, thumbnails are appended to '.lg-components' which has inbuilt open close transitions\n * If you don't want initial thumbnails transitions, or want to do more customization,\n * you can append thumbnails to the lightGalley outer div -\n * Demo\n */\n appendThumbnailsTo: '.lg-outer' | '.lg-components';\n\n /**\n * Enable toggle captions and thumbnails.\n * @description not applicable if allowMediaOverlap is false\n */\n toggleThumb: boolean;\n\n /**\n * Enables desktop mouse drag support for thumbnails.\n */\n enableThumbDrag: boolean;\n\n /**\n * Enables thumbnail touch/swipe support for touch devices\n */\n enableThumbSwipe: boolean;\n\n /**\n * By setting the thumbnailSwipeThreshold (in px) you can set how far the user must swipe for the next/prev slide.\n */\n thumbnailSwipeThreshold: number;\n\n /**\n * You can automatically load thumbnails for YouTube videos from YouTube by setting loadYouTubeThumbnail true\n */\n loadYouTubeThumbnail: boolean;\n\n /**\n * You can specify the thumbnail size by setting respective number.\n */\n //@todo add demo\n youTubeThumbSize: number;\n\n /**\n * Custom translation strings for aria-labels\n */\n thumbnailPluginStrings: ThumbnailStrings;\n}\n\nexport const thumbnailsSettings: ThumbnailsSettings = {\n thumbnail: true,\n\n animateThumb: true,\n currentPagerPosition: 'middle',\n alignThumbnails: 'middle',\n\n thumbWidth: 100,\n thumbHeight: '80px',\n thumbMargin: 5,\n\n appendThumbnailsTo: '.lg-components',\n toggleThumb: false,\n\n enableThumbDrag: true,\n enableThumbSwipe: true,\n thumbnailSwipeThreshold: 10,\n\n loadYouTubeThumbnail: true,\n youTubeThumbSize: 1,\n\n thumbnailPluginStrings: {\n toggleThumbnails: 'Toggle thumbnails',\n } as ThumbnailStrings,\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 rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\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 * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\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/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n","import {\n ThumbnailsSettings,\n thumbnailsSettings,\n} from './lg-thumbnail-settings';\nimport { LgQuery, lgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { GalleryItem } from '../../lg-utils';\nimport { lGEvents } from '../../lg-events';\n\ninterface ThumbDragUtils {\n cords: {\n startX: number;\n endX: number;\n };\n isMoved: boolean;\n newTranslateX: number;\n startTime: Date;\n endTime: Date;\n touchMoveTime: number;\n}\ninterface ThumbnailGalleryItem extends GalleryItem {\n thumb: string;\n}\nexport default class Thumbnail {\n private core: LightGallery;\n private $thumbOuter!: lgQuery;\n private $lgThumb!: lgQuery;\n private thumbOuterWidth = 0;\n private thumbTotalWidth = 0;\n private translateX = 0;\n private thumbClickable = false;\n private settings!: ThumbnailsSettings;\n private $LG!: LgQuery;\n constructor(instance: LightGallery, $LG: LgQuery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.$LG = $LG;\n\n return this;\n }\n\n init(): void {\n // extend module default settings with lightGallery core settings\n this.settings = {\n ...thumbnailsSettings,\n ...this.core.settings,\n };\n this.thumbOuterWidth = 0;\n this.thumbTotalWidth =\n this.core.galleryItems.length *\n (this.settings.thumbWidth + this.settings.thumbMargin);\n\n // Thumbnail animation value\n this.translateX = 0;\n\n this.setAnimateThumbStyles();\n\n if (!this.core.settings.allowMediaOverlap) {\n this.settings.toggleThumb = false;\n }\n\n if (this.settings.thumbnail) {\n this.build();\n if (this.settings.animateThumb) {\n if (this.settings.enableThumbDrag) {\n this.enableThumbDrag();\n }\n\n if (this.settings.enableThumbSwipe) {\n this.enableThumbSwipe();\n }\n\n this.thumbClickable = false;\n } else {\n this.thumbClickable = true;\n }\n\n this.toggleThumbBar();\n this.thumbKeyPress();\n }\n }\n\n build(): void {\n this.setThumbMarkup();\n this.manageActiveClassOnSlideChange();\n this.$lgThumb.first().on('click.lg touchend.lg', (e: CustomEvent) => {\n const $target = this.$LG(e.target);\n if (!$target.hasAttribute('data-lg-item-id')) {\n return;\n }\n setTimeout(() => {\n // In IE9 and bellow touch does not support\n // Go to slide if browser does not support css transitions\n if (this.thumbClickable && !this.core.lgBusy) {\n const index = parseInt($target.attr('data-lg-item-id'));\n this.core.slide(index, false, true, false);\n }\n }, 50);\n });\n\n this.core.LGel.on(`${lGEvents.beforeSlide}.thumb`, (event) => {\n const { index } = event.detail;\n this.animateThumb(index);\n });\n this.core.LGel.on(`${lGEvents.beforeOpen}.thumb`, () => {\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n });\n\n this.core.LGel.on(`${lGEvents.updateSlides}.thumb`, () => {\n this.rebuildThumbnails();\n });\n this.core.LGel.on(`${lGEvents.containerResize}.thumb`, () => {\n if (!this.core.lgOpened) return;\n setTimeout(() => {\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n this.animateThumb(this.core.index);\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n }, 50);\n });\n }\n\n setThumbMarkup(): void {\n let thumbOuterClassNames = 'lg-thumb-outer ';\n\n if (this.settings.alignThumbnails) {\n thumbOuterClassNames += `lg-thumb-align-${this.settings.alignThumbnails}`;\n }\n\n const html = `
\n
\n
\n
`;\n\n this.core.outer.addClass('lg-has-thumb');\n\n if (this.settings.appendThumbnailsTo === '.lg-components') {\n this.core.$lgComponents.append(html);\n } else {\n this.core.outer.append(html);\n }\n\n this.$thumbOuter = this.core.outer.find('.lg-thumb-outer').first();\n this.$lgThumb = this.core.outer.find('.lg-thumb').first();\n\n if (this.settings.animateThumb) {\n this.core.outer\n .find('.lg-thumb')\n .css('transition-duration', this.core.settings.speed + 'ms')\n .css('width', this.thumbTotalWidth + 'px')\n .css('position', 'relative');\n }\n\n this.setThumbItemHtml(\n (this.core.galleryItems as unknown) as ThumbnailGalleryItem[],\n );\n }\n\n enableThumbDrag(): void {\n let thumbDragUtils: ThumbDragUtils = {\n cords: {\n startX: 0,\n endX: 0,\n },\n isMoved: false,\n newTranslateX: 0,\n startTime: new Date(),\n endTime: new Date(),\n touchMoveTime: 0,\n };\n\n let isDragging = false;\n\n this.$thumbOuter.addClass('lg-grab');\n\n this.core.outer\n .find('.lg-thumb')\n .first()\n .on('mousedown.lg.thumb', (e) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n // execute only on .lg-object\n e.preventDefault();\n thumbDragUtils.cords.startX = e.pageX;\n\n thumbDragUtils.startTime = new Date();\n this.thumbClickable = false;\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 // *\n this.$thumbOuter\n .removeClass('lg-grab')\n .addClass('lg-grabbing');\n }\n });\n\n this.$LG(window).on(\n `mousemove.lg.thumb.global${this.core.lgId}`,\n (e) => {\n if (!this.core.lgOpened) return;\n if (isDragging) {\n thumbDragUtils.cords.endX = e.pageX;\n\n thumbDragUtils = this.onThumbTouchMove(thumbDragUtils);\n }\n },\n );\n\n this.$LG(window).on(`mouseup.lg.thumb.global${this.core.lgId}`, () => {\n if (!this.core.lgOpened) return;\n if (thumbDragUtils.isMoved) {\n thumbDragUtils = this.onThumbTouchEnd(thumbDragUtils);\n } else {\n this.thumbClickable = true;\n }\n\n if (isDragging) {\n isDragging = false;\n this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab');\n }\n });\n }\n\n enableThumbSwipe(): void {\n let thumbDragUtils: ThumbDragUtils = {\n cords: {\n startX: 0,\n endX: 0,\n },\n isMoved: false,\n newTranslateX: 0,\n startTime: new Date(),\n endTime: new Date(),\n touchMoveTime: 0,\n };\n\n this.$lgThumb.on('touchstart.lg', (e: TouchEvent) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n e.preventDefault();\n thumbDragUtils.cords.startX = e.targetTouches[0].pageX;\n this.thumbClickable = false;\n thumbDragUtils.startTime = new Date();\n }\n });\n\n this.$lgThumb.on('touchmove.lg', (e: TouchEvent) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n e.preventDefault();\n thumbDragUtils.cords.endX = e.targetTouches[0].pageX;\n thumbDragUtils = this.onThumbTouchMove(thumbDragUtils);\n }\n });\n\n this.$lgThumb.on('touchend.lg', () => {\n if (thumbDragUtils.isMoved) {\n thumbDragUtils = this.onThumbTouchEnd(thumbDragUtils);\n } else {\n this.thumbClickable = true;\n }\n });\n }\n\n // Rebuild thumbnails\n rebuildThumbnails(): void {\n // Remove transitions\n this.$thumbOuter.addClass('lg-rebuilding-thumbnails');\n setTimeout(() => {\n this.thumbTotalWidth =\n this.core.galleryItems.length *\n (this.settings.thumbWidth + this.settings.thumbMargin);\n this.$lgThumb.css('width', this.thumbTotalWidth + 'px');\n this.$lgThumb.empty();\n this.setThumbItemHtml(\n (this.core.galleryItems as unknown) as ThumbnailGalleryItem[],\n );\n this.animateThumb(this.core.index);\n }, 50);\n setTimeout(() => {\n this.$thumbOuter.removeClass('lg-rebuilding-thumbnails');\n }, 200);\n }\n\n // @ts-check\n\n setTranslate(value: number): void {\n this.$lgThumb.css(\n 'transform',\n 'translate3d(-' + value + 'px, 0px, 0px)',\n );\n }\n\n getPossibleTransformX(left: number): number {\n if (left > this.thumbTotalWidth - this.thumbOuterWidth) {\n left = this.thumbTotalWidth - this.thumbOuterWidth;\n }\n\n if (left < 0) {\n left = 0;\n }\n return left;\n }\n\n animateThumb(index: number): void {\n this.$lgThumb.css(\n 'transition-duration',\n this.core.settings.speed + 'ms',\n );\n if (this.settings.animateThumb) {\n let position = 0;\n switch (this.settings.currentPagerPosition) {\n case 'left':\n position = 0;\n break;\n case 'middle':\n position =\n this.thumbOuterWidth / 2 - this.settings.thumbWidth / 2;\n break;\n case 'right':\n position = this.thumbOuterWidth - this.settings.thumbWidth;\n }\n this.translateX =\n (this.settings.thumbWidth + this.settings.thumbMargin) * index -\n 1 -\n position;\n if (this.translateX > this.thumbTotalWidth - this.thumbOuterWidth) {\n this.translateX = this.thumbTotalWidth - this.thumbOuterWidth;\n }\n\n if (this.translateX < 0) {\n this.translateX = 0;\n }\n\n this.setTranslate(this.translateX);\n }\n }\n\n onThumbTouchMove(thumbDragUtils: ThumbDragUtils): ThumbDragUtils {\n thumbDragUtils.newTranslateX = this.translateX;\n thumbDragUtils.isMoved = true;\n\n thumbDragUtils.touchMoveTime = new Date().valueOf();\n\n thumbDragUtils.newTranslateX -=\n thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\n\n thumbDragUtils.newTranslateX = this.getPossibleTransformX(\n thumbDragUtils.newTranslateX,\n );\n\n // move current slide\n this.setTranslate(thumbDragUtils.newTranslateX);\n this.$thumbOuter.addClass('lg-dragging');\n\n return thumbDragUtils;\n }\n\n onThumbTouchEnd(thumbDragUtils: ThumbDragUtils): ThumbDragUtils {\n thumbDragUtils.isMoved = false;\n thumbDragUtils.endTime = new Date();\n this.$thumbOuter.removeClass('lg-dragging');\n\n const touchDuration =\n thumbDragUtils.endTime.valueOf() -\n thumbDragUtils.startTime.valueOf();\n let distanceXnew =\n thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\n let speedX = Math.abs(distanceXnew) / touchDuration;\n // Some magical numbers\n // Can be improved\n if (\n speedX > 0.15 &&\n thumbDragUtils.endTime.valueOf() - thumbDragUtils.touchMoveTime < 30\n ) {\n speedX += 1;\n\n if (speedX > 2) {\n speedX += 1;\n }\n speedX =\n speedX +\n speedX * (Math.abs(distanceXnew) / this.thumbOuterWidth);\n this.$lgThumb.css(\n 'transition-duration',\n Math.min(speedX - 1, 2) + 'settings',\n );\n\n distanceXnew = distanceXnew * speedX;\n\n this.translateX = this.getPossibleTransformX(\n this.translateX - distanceXnew,\n );\n this.setTranslate(this.translateX);\n } else {\n this.translateX = thumbDragUtils.newTranslateX;\n }\n if (\n Math.abs(thumbDragUtils.cords.endX - thumbDragUtils.cords.startX) <\n this.settings.thumbnailSwipeThreshold\n ) {\n this.thumbClickable = true;\n }\n\n return thumbDragUtils;\n }\n\n getThumbHtml(thumb: string, index: number): string {\n const slideVideoInfo =\n this.core.galleryItems[index].__slideVideoInfo || {};\n let thumbImg;\n\n if (slideVideoInfo.youtube) {\n if (this.settings.loadYouTubeThumbnail) {\n thumbImg =\n '//img.youtube.com/vi/' +\n slideVideoInfo.youtube[1] +\n '/' +\n this.settings.youTubeThumbSize +\n '.jpg';\n } else {\n thumbImg = thumb;\n }\n } else {\n thumbImg = thumb;\n }\n\n return `
\n \n
`;\n }\n\n getThumbItemHtml(items: ThumbnailGalleryItem[]): string {\n let thumbList = '';\n for (let i = 0; i < items.length; i++) {\n thumbList += this.getThumbHtml(items[i].thumb, i);\n }\n\n return thumbList;\n }\n\n setThumbItemHtml(items: ThumbnailGalleryItem[]): void {\n const thumbList = this.getThumbItemHtml(items);\n this.$lgThumb.html(thumbList);\n }\n\n setAnimateThumbStyles(): void {\n if (this.settings.animateThumb) {\n this.core.outer.addClass('lg-animate-thumb');\n }\n }\n\n // Manage thumbnail active calss\n manageActiveClassOnSlideChange(): void {\n // manage active class for thumbnail\n this.core.LGel.on(\n `${lGEvents.beforeSlide}.thumb`,\n (event: CustomEvent) => {\n const $thumb = this.core.outer.find('.lg-thumb-item');\n const { index } = event.detail;\n $thumb.removeClass('active');\n $thumb.eq(index).addClass('active');\n },\n );\n }\n\n // Toggle thumbnail bar\n toggleThumbBar(): void {\n if (this.settings.toggleThumb) {\n this.core.outer.addClass('lg-can-toggle');\n this.core.$toolbar.append(\n '',\n );\n this.core.outer\n .find('.lg-toggle-thumb')\n .first()\n .on('click.lg', () => {\n this.core.outer.toggleClass('lg-components-open');\n });\n }\n }\n\n thumbKeyPress(): void {\n this.$LG(window).on(`keydown.lg.thumb.global${this.core.lgId}`, (e) => {\n if (!this.core.lgOpened || !this.settings.toggleThumb) return;\n\n if (e.keyCode === 38) {\n e.preventDefault();\n this.core.outer.addClass('lg-components-open');\n } else if (e.keyCode === 40) {\n e.preventDefault();\n this.core.outer.removeClass('lg-components-open');\n }\n });\n }\n\n destroy(): void {\n if (this.settings.thumbnail) {\n this.$LG(window).off(`.lg.thumb.global${this.core.lgId}`);\n this.core.LGel.off('.lg.thumb');\n this.core.LGel.off('.thumb');\n this.$thumbOuter.remove();\n this.core.outer.removeClass('lg-has-thumb');\n }\n }\n}\n","export interface ActualSizeIcons {\n zoomIn: 'lg-zoom-in' | 'lg-actual-size';\n zoomOut: 'lg-zoom-out' | 'lg-actual-size';\n}\n\nexport interface ZoomStrings {\n zoomIn: string;\n zoomOut: string;\n viewActualSize: string;\n}\n\nexport 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 classnames.\n * Specify classnames for both ZoomIn and ZoomOut states\n * You can use `actualSizeIcons: { zoomIn: 'lg-actual-size', zoomOut: 'lg-zoom-out' }`\n * to show actual size icons instead of zoom in and zoom out icons.\n */\n actualSizeIcons: ActualSizeIcons;\n\n /**\n * Custom translation strings for aria-labels\n */\n zoomPluginStrings: ZoomStrings;\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 } as ActualSizeIcons,\n enableZoomAfter: 300,\n zoomPluginStrings: {\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n viewActualSize: 'View actual size',\n } as ZoomStrings,\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 touches: { pageY: number; pageX: number }[];\n pageY: number;\n}\ninterface PossibleCords {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n}\n\nconst ZOOM_TRANSITION_DURATION = 500;\n\nexport default class Zoom {\n private core: LightGallery;\n private settings: ZoomSettings;\n private $LG!: LgQuery;\n private imageReset!: number | boolean;\n zoomableTimeout: any;\n positionChanged!: boolean;\n pageX!: number;\n pageY!: number;\n scale!: number;\n\n containerRect!: ClientRect;\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(this.core.index)) {\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 getDragCords(e: MouseEvent): Coords {\n return {\n x: e.pageX,\n y: e.pageY,\n };\n }\n getSwipeCords(e: TouchEvent): Coords {\n const x = e.touches[0].pageX;\n const y = e.touches[0].pageY;\n return {\n x,\n y,\n };\n }\n\n getDragAllowedAxises(scale: number, scaleDiff?: number): DragAllowedAxises {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first()\n .get();\n\n let height = 0;\n let width = 0;\n const rect = $image.getBoundingClientRect();\n if (scale) {\n height = $image.offsetHeight * scale;\n width = $image.offsetWidth * scale;\n } else if (scaleDiff) {\n height = rect.height + scaleDiff * rect.height;\n width = rect.width + scaleDiff * rect.width;\n } else {\n height = rect.height;\n width = rect.width;\n }\n const allowY = height > this.containerRect.height;\n const allowX = width > this.containerRect.width;\n return {\n allowX,\n allowY,\n };\n }\n\n setZoomEssentials(): void {\n this.containerRect = this.core.$content.get().getBoundingClientRect();\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(\n scale: number,\n scaleDiff: number,\n reposition: boolean,\n resetToMax: boolean,\n ): void {\n if (Math.abs(scaleDiff) <= 0) return;\n\n const offsetX = this.containerRect.width / 2 + this.containerRect.left;\n\n const offsetY =\n this.containerRect.height / 2 +\n this.containerRect.top +\n this.scrollTop;\n\n let originalX;\n let originalY;\n\n if (scale === 1) {\n this.positionChanged = false;\n }\n\n const dragAllowedAxises = this.getDragAllowedAxises(0, scaleDiff);\n\n const { allowY, allowX } = dragAllowedAxises;\n if (this.positionChanged) {\n originalX = this.left / (this.scale - scaleDiff);\n originalY = this.top / (this.scale - scaleDiff);\n this.pageX = offsetX - originalX;\n this.pageY = offsetY - originalY;\n\n this.positionChanged = false;\n }\n\n const possibleSwipeCords = this.getPossibleSwipeDragCords(scaleDiff);\n\n let x;\n let y;\n let _x = offsetX - this.pageX;\n let _y = offsetY - this.pageY;\n\n if (scale - scaleDiff > 1) {\n const scaleVal = (scale - scaleDiff) / Math.abs(scaleDiff);\n _x =\n (scaleDiff < 0 ? -_x : _x) +\n this.left * (scaleVal + (scaleDiff < 0 ? -1 : 1));\n _y =\n (scaleDiff < 0 ? -_y : _y) +\n this.top * (scaleVal + (scaleDiff < 0 ? -1 : 1));\n x = _x / scaleVal;\n y = _y / scaleVal;\n } else {\n const scaleVal = (scale - scaleDiff) * scaleDiff;\n x = _x * scaleVal;\n y = _y * scaleVal;\n }\n\n if (reposition) {\n if (allowX) {\n if (this.isBeyondPossibleLeft(x, possibleSwipeCords.minX)) {\n x = possibleSwipeCords.minX;\n } else if (\n this.isBeyondPossibleRight(x, possibleSwipeCords.maxX)\n ) {\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 // @todo fix this\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\n this.setZoomStyles({\n x: x,\n y: y,\n scale,\n });\n\n this.left = x;\n this.top = y;\n\n if (resetToMax) {\n this.setZoomImageSize();\n }\n }\n\n resetImageTranslate(index: number): void {\n if (!this.isImageSlide(index)) {\n return;\n }\n const $image = this.core.getSlideItem(index).find('.lg-image').first();\n this.imageReset = false;\n $image.removeClass(\n 'reset-transition reset-transition-y reset-transition-x',\n );\n this.core.outer.removeClass('lg-actual-size');\n $image.css('width', 'auto').css('height', 'auto');\n setTimeout(() => {\n $image.removeClass('no-transition');\n }, 10);\n }\n\n setZoomImageSize(): void {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n\n setTimeout(() => {\n const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n if (this.scale >= actualSizeScale) {\n $image.addClass('no-transition');\n this.imageReset = true;\n }\n }, ZOOM_TRANSITION_DURATION);\n\n setTimeout(() => {\n const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n if (this.scale >= actualSizeScale) {\n const dragAllowedAxises = this.getDragAllowedAxises(this.scale);\n\n $image\n .css(\n 'width',\n ($image.get() as HTMLImageElement).naturalWidth + 'px',\n )\n .css(\n 'height',\n ($image.get() as HTMLImageElement).naturalHeight + 'px',\n );\n\n this.core.outer.addClass('lg-actual-size');\n\n if (dragAllowedAxises.allowX && dragAllowedAxises.allowY) {\n $image.addClass('reset-transition');\n } else if (\n dragAllowedAxises.allowX &&\n !dragAllowedAxises.allowY\n ) {\n $image.addClass('reset-transition-x');\n } else if (\n !dragAllowedAxises.allowX &&\n dragAllowedAxises.allowY\n ) {\n $image.addClass('reset-transition-y');\n }\n }\n }, ZOOM_TRANSITION_DURATION + 50);\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 $imageWrap = 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-image')\n .first();\n const $dummyImage = this.core.outer\n .find('.lg-current .lg-dummy-img')\n .first();\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\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 this.resetImageTranslate(index);\n setTimeout(() => {\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 const prevScale = this.scale;\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, this.scale - prevScale, true, true);\n\n setTimeout(() => {\n this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\n }, 10);\n }, 50);\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.touches[0].pageX;\n cords.y = event.pageY || event.touches[0].pageY;\n } else {\n const containerRect = this.core.$content\n .get()\n .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 manageActualPixelClassNames(): void {\n const $actualSize = this.core.getElementById('lg-actual-size');\n $actualSize\n .removeClass(this.settings.actualSizeIcons.zoomIn)\n .addClass(this.settings.actualSizeIcons.zoomOut);\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 this.manageActualPixelClassNames();\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 (event.touches.length === 1 && $target.hasClass('lg-image')) {\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 this.core.LGel.on(\n `${lGEvents.containerResize}.zoom ${lGEvents.rotateRight}.zoom ${lGEvents.rotateLeft}.zoom ${lGEvents.flipHorizontal}.zoom ${lGEvents.flipVertical}.zoom`,\n () => {\n if (\n !this.core.lgOpened ||\n !this.isImageSlide(this.core.index) ||\n this.core.touchAction\n ) {\n return;\n }\n const _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n this.top = 0;\n this.left = 0;\n this.setZoomEssentials();\n this.setZoomSwipeStyles(_LGel, { x: 0, y: 0 });\n this.positionChanged = true;\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 // Allow zoom only on image\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n\n let timeout = 0;\n if (this.imageReset) {\n this.resetImageTranslate(this.core.index);\n timeout = 50;\n }\n setTimeout(() => {\n let scale = this.scale - this.settings.scale;\n\n if (scale < 1) {\n scale = 1;\n }\n this.beginZoom(scale);\n this.zoomImage(scale, -this.settings.scale, true, true);\n }, timeout);\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 this.resetImageTranslate(prevIndex);\n if (this.isImageSlide(this.core.index)) {\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(): void {\n // Allow zoom only on image\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n\n let scale = this.scale + this.settings.scale;\n\n scale = this.getScale(scale);\n this.beginZoom(scale);\n this.zoomImage(\n scale,\n Math.min(this.settings.scale, scale - this.scale),\n true,\n true,\n );\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.touches[0].pageX - e.touches[1].pageX) *\n (e.touches[0].pageX - e.touches[1].pageX) +\n (e.touches[0].pageY - e.touches[1].pageY) *\n (e.touches[0].pageY - e.touches[1].pageY),\n );\n }\n\n pinchZoom(): void {\n let startDist = 0;\n let pinchStarted = false;\n let initScale = 1;\n let prevScale = 0;\n\n let $item = this.core.getSlideItem(this.core.index);\n\n this.core.outer.on('touchstart.lg', (e) => {\n $item = this.core.getSlideItem(this.core.index);\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n if (e.touches.length === 2) {\n e.preventDefault();\n if (this.core.outer.hasClass('lg-first-slide-loading')) {\n return;\n }\n initScale = this.scale || 1;\n this.core.outer.removeClass(\n 'lg-zoom-drag-transition lg-zoom-dragging',\n );\n\n this.setPageCords(e);\n this.resetImageTranslate(this.core.index);\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.touches.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 prevScale = this.scale;\n const _scale = Math.max(1, initScale + -distance * 0.02);\n this.scale =\n Math.round((_scale + Number.EPSILON) * 100) / 100;\n const diff = this.scale - prevScale;\n this.zoomImage(\n this.scale,\n Math.round((diff + Number.EPSILON) * 100) / 100,\n false,\n false,\n );\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 const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n if (this.scale >= actualSizeScale) {\n let scaleDiff = actualSizeScale - this.scale;\n if (scaleDiff === 0) {\n scaleDiff = 0.01;\n }\n this.zoomImage(actualSizeScale, scaleDiff, false, true);\n }\n this.manageActualPixelClassNames();\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 ): 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;\n distance.y = this.top + distanceYnew;\n\n const possibleSwipeCords = this.getPossibleSwipeDragCords();\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 = this.top + (endCoords.y - startCoords.y);\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 = this.left + (endCoords.x - startCoords.x);\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(index: number): boolean {\n const currentItem = this.core.galleryItems[index];\n return this.core.getSlideType(currentItem) === 'image';\n }\n\n getPossibleSwipeDragCords(scale?: number): PossibleCords {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n\n const { bottom } = this.core.mediaContainerPosition;\n\n const imgRect = $image.get().getBoundingClientRect();\n\n let imageHeight = imgRect.height;\n let imageWidth = imgRect.width;\n\n if (scale) {\n imageHeight = imageHeight + scale * imageHeight;\n imageWidth = imageWidth + scale * imageWidth;\n }\n\n const minY = (imageHeight - this.containerRect.height) / 2;\n const maxY = (this.containerRect.height - imageHeight) / 2 + bottom;\n\n const minX = (imageWidth - this.containerRect.width) / 2;\n\n const maxX = (this.containerRect.width - imageWidth) / 2;\n\n const possibleSwipeCords = {\n minY: minY,\n maxY: maxY,\n minX: minX,\n maxX: maxX,\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(this.core.index)) {\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.touches.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(0);\n\n allowY = dragAllowedAxises.allowY;\n allowX = dragAllowedAxises.allowX;\n if (allowX || allowY) {\n startCoords = this.getSwipeCords(e);\n }\n\n possibleSwipeCords = this.getPossibleSwipeDragCords();\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.touches.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);\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 e.preventDefault();\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 );\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(this.core.index)) {\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(0);\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(e);\n\n possibleSwipeCords = this.getPossibleSwipeDragCords();\n\n isDragging = true;\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);\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(e);\n\n const touchDuration =\n endTime.valueOf() - startTime.valueOf();\n this.touchendZoom(\n startCoords,\n endCoords,\n allowX,\n allowY,\n touchDuration,\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","import { PlayerParams } from './lg-video-utils';\n\nexport interface VideoSettings {\n /**\n * Enable/DIsable first video autoplay.\n * @description Autoplay has to be managed using this setting.\n * Autoplay in PlayerParams doesn't have any effect.\n */\n autoplayFirstVideo: boolean;\n\n /**\n * Change YouTube player parameters.\n * You can find the list of YouTube player parameters from the following link\n *
YouTube player parameters\n * @example\n * lightGallery(document.getElementById('lightGallery'), {\n * youTubePlayerParams: {\n * modestbranding : 1,\n * showinfo : 0,\n * controls : 0\n * }\n * })\n */\n youTubePlayerParams: any;\n\n /**\n * Change Vimeo player parameters.\n * You can find the list of vimeo player parameters from the following link\n * Vimeo player parameters\n * @example\n * lightGallery(document.getElementById('lightGallery'), {\n * vimeoPlayerParams: {\n * byline : 0,\n * portrait : 0,\n * color : 'CCCCCC'\n * }\n * })\n */\n vimeoPlayerParams: PlayerParams;\n\n /**\n * Change Wistia player parameters.\n * You can find the list of Wistia player parameters from the following link\n * Vimeo player parameters\n */\n wistiaPlayerParams: any;\n\n /**\n * Go to next slide when video is ended\n * Note - this doesn't work with YouTube videos at the moment\n */\n gotoNextSlideOnVideoEnd: boolean;\n\n /**\n * Autoplay video on slide change\n * @description Make sure you set preload:\"none\"\n */\n autoplayVideoOnSlide: boolean;\n\n /**\n * Enbale videojs custom video player\n *
\n * Dependency - You need to include videoJs on your document to enable videojs player\n *
\n */\n videojs: boolean;\n\n /**\n * Class name of the videojs theme\n * You need to include the theme stylesheet on your document. More info\n * @version V2.5.0\n */\n videojsTheme: string;\n\n /**\n * Videojs player options\n */\n videojsOptions: any;\n}\nexport const videoSettings: VideoSettings = {\n autoplayFirstVideo: true,\n youTubePlayerParams: false,\n vimeoPlayerParams: false,\n wistiaPlayerParams: false,\n gotoNextSlideOnVideoEnd: true,\n autoplayVideoOnSlide: false,\n videojs: false,\n videojsTheme: '',\n videojsOptions: {},\n};\n","import { VideoInfo } from '../../types';\nexport type PlayerParams = Record | boolean;\n\nexport type YouTubeParams = {\n [x: string]: string | number | boolean;\n};\n\nexport const param = (obj: YouTubeParams): string => {\n return Object.keys(obj)\n .map(function (k) {\n return encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]);\n })\n .join('&');\n};\nexport const paramsToObject = (url: string): YouTubeParams => {\n const paramas = url\n .slice(1)\n .split('&')\n .map((p) => p.split('='))\n .reduce((obj: any, pair) => {\n const [key, value] = pair.map(decodeURIComponent);\n obj[key] = value;\n return obj;\n }, {});\n return paramas;\n};\n\nexport const getYouTubeParams = (\n videoInfo: VideoInfo,\n youTubePlayerParamsSettings: YouTubeParams | false,\n): string => {\n if (!videoInfo.youtube) return '';\n const slideUrlParams = videoInfo.youtube[2]\n ? paramsToObject(videoInfo.youtube[2])\n : '';\n\n // For youtube first params gets priority if duplicates found\n const defaultYouTubePlayerParams = {\n wmode: 'opaque',\n autoplay: 0,\n mute: 1,\n enablejsapi: 1,\n };\n\n const playerParamsSettings = youTubePlayerParamsSettings || {};\n\n const youTubePlayerParams = {\n ...defaultYouTubePlayerParams,\n ...playerParamsSettings,\n ...slideUrlParams,\n };\n\n const youTubeParams = `?${param(youTubePlayerParams)}`;\n return youTubeParams;\n};\n\nexport const isYouTubeNoCookie = (url: string): boolean => {\n return url.includes('youtube-nocookie.com');\n};\n\nexport const getVimeoURLParams = (\n defaultParams: PlayerParams,\n videoInfo?: VideoInfo,\n): string => {\n if (!videoInfo || !videoInfo.vimeo) return '';\n let urlParams = videoInfo.vimeo[2] || '';\n\n const defaultPlayerParams =\n defaultParams && Object.keys(defaultParams).length !== 0\n ? '&' + param(defaultParams as any)\n : '';\n\n // Support private video\n const urlWithHash = videoInfo.vimeo[0].split('/').pop() || '';\n const urlWithHashWithParams = urlWithHash.split('?')[0] || '';\n const hash = urlWithHashWithParams.split('#')[0];\n\n const isPrivate = videoInfo.vimeo[1] !== hash;\n if (isPrivate) {\n urlParams = urlParams.replace(`/${hash}`, '');\n }\n\n urlParams =\n urlParams[0] == '?' ? '&' + urlParams.slice(1) : urlParams || '';\n\n // For vimeo last params gets priority if duplicates found\n const vimeoPlayerParams = `?autoplay=0&muted=1${\n isPrivate ? `&h=${hash}` : ''\n }${defaultPlayerParams}${urlParams}`;\n return vimeoPlayerParams;\n};\n","/**\n * Video module for lightGallery\n * Supports HTML5, YouTube, Vimeo, wistia videos\n *\n *\n * @ref Wistia\n * https://wistia.com/support/integrations/wordpress(How to get url)\n * https://wistia.com/support/developers/embed-options#using-embed-options\n * https://wistia.com/support/developers/player-api\n * https://wistia.com/support/developers/construct-an-embed-code\n * http://jsfiddle.net/xvnm7xLm/\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video\n * https://wistia.com/support/embed-and-share/sharing-videos\n * https://private-sharing.wistia.com/medias/mwhrulrucj\n *\n * @ref Youtube\n * https://developers.google.com/youtube/player_parameters#enablejsapi\n * https://developers.google.com/youtube/iframe_api_reference\n * https://developer.chrome.com/blog/autoplay/#iframe-delegation\n *\n * @ref Vimeo\n * https://stackoverflow.com/questions/10488943/easy-way-to-get-vimeo-id-from-a-vimeo-url\n * https://vimeo.zendesk.com/hc/en-us/articles/360000121668-Starting-playback-at-a-specific-timecode\n * https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters\n */\n\nimport { VideoSettings, videoSettings } from './lg-video-settings';\nimport { LightGallery } from '../../lightgallery';\nimport { lgQuery } from '../../lgQuery';\nimport {\n CustomEventAfterSlide,\n CustomEventHasVideo,\n CustomEventSlideItemLoad,\n VideoInfo,\n} from '../../types';\nimport { lGEvents } from '../../lg-events';\nimport { VideoSource } from './types';\nimport {\n getVimeoURLParams,\n getYouTubeParams,\n isYouTubeNoCookie,\n param,\n} from './lg-video-utils';\n\ndeclare let Vimeo: any;\ndeclare let videojs: any;\ndeclare global {\n interface Window {\n _wq: any;\n Vimeo: any;\n }\n}\nexport default class Video {\n private core: LightGallery;\n private settings: VideoSettings;\n constructor(instance: LightGallery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.settings = { ...videoSettings, ...this.core.settings };\n\n return this;\n }\n init() {\n /**\n * Event triggered when video url found without poster\n * Append video HTML\n * Play if autoplayFirstVideo is true\n */\n this.core.LGel.on(\n `${lGEvents.hasVideo}.video`,\n this.onHasVideo.bind(this),\n );\n\n this.core.LGel.on(`${lGEvents.posterClick}.video`, () => {\n const $el = this.core.getSlideItem(this.core.index);\n this.loadVideoOnPosterClick($el);\n });\n this.core.LGel.on(\n `${lGEvents.slideItemLoad}.video`,\n this.onSlideItemLoad.bind(this),\n );\n\n // @desc fired immediately before each slide transition.\n this.core.LGel.on(\n `${lGEvents.beforeSlide}.video`,\n this.onBeforeSlide.bind(this),\n );\n\n // @desc fired immediately after each slide transition.\n this.core.LGel.on(\n `${lGEvents.afterSlide}.video`,\n this.onAfterSlide.bind(this),\n );\n }\n\n /**\n * @desc Event triggered when a slide is completely loaded\n *\n * @param {Event} event - lightGalley custom event\n */\n onSlideItemLoad(event: CustomEventSlideItemLoad): void {\n const { isFirstSlide, index } = event.detail;\n\n // Should check the active slide as well as user may have moved to different slide before the first slide is loaded\n if (\n this.settings.autoplayFirstVideo &&\n isFirstSlide &&\n index === this.core.index\n ) {\n // Delay is just for the transition effect on video load\n setTimeout(() => {\n this.loadAndPlayVideo(index);\n }, 200);\n }\n\n // Should not call on first slide. should check only if the slide is active\n if (\n !isFirstSlide &&\n this.settings.autoplayVideoOnSlide &&\n index === this.core.index\n ) {\n this.loadAndPlayVideo(index);\n }\n }\n\n /**\n * @desc Event triggered when video url or poster found\n * Append video HTML is poster is not given\n * Play if autoplayFirstVideo is true\n *\n * @param {Event} event - Javascript Event object.\n */\n onHasVideo(event: CustomEventHasVideo): void {\n const { index, src, html5Video, hasPoster } = event.detail;\n if (!hasPoster) {\n // All functions are called separately if poster exist in loadVideoOnPosterClick function\n\n this.appendVideos(this.core.getSlideItem(index), {\n src,\n addClass: 'lg-object',\n index,\n html5Video,\n });\n\n // Automatically navigate to next slide once video reaches the end.\n this.gotoNextSlideOnVideoEnd(src, index);\n }\n }\n\n /**\n * @desc fired immediately before each slide transition.\n * Pause the previous video\n * Hide the download button if the slide contains YouTube, Vimeo, or Wistia videos.\n *\n * @param {Event} event - Javascript Event object.\n * @param {number} prevIndex - Previous index of the slide.\n * @param {number} index - Current index of the slide\n */\n onBeforeSlide(event: CustomEvent): void {\n if (this.core.lGalleryOn) {\n const { prevIndex } = event.detail;\n this.pauseVideo(prevIndex);\n }\n }\n\n /**\n * @desc fired immediately after each slide transition.\n * Play video if autoplayVideoOnSlide option is enabled.\n *\n * @param {Event} event - Javascript Event object.\n * @param {number} prevIndex - Previous index of the slide.\n * @param {number} index - Current index of the slide\n * @todo should check on onSlideLoad as well if video is not loaded on after slide\n */\n onAfterSlide(event: CustomEventAfterSlide): void {\n const { index, prevIndex } = event.detail;\n // Do not call on first slide\n const $slide = this.core.getSlideItem(index);\n if (this.settings.autoplayVideoOnSlide && index !== prevIndex) {\n if ($slide.hasClass('lg-complete')) {\n setTimeout(() => {\n this.loadAndPlayVideo(index);\n }, 100);\n }\n }\n }\n\n loadAndPlayVideo(index: number): void {\n const $slide = this.core.getSlideItem(index);\n const currentGalleryItem = this.core.galleryItems[index];\n if (currentGalleryItem.poster) {\n this.loadVideoOnPosterClick($slide, true);\n } else {\n this.playVideo(index);\n }\n }\n\n /**\n * Play HTML5, Youtube, Vimeo or Wistia videos in a particular slide.\n * @param {number} index - Index of the slide\n */\n playVideo(index: number) {\n this.controlVideo(index, 'play');\n }\n\n /**\n * Pause HTML5, Youtube, Vimeo or Wistia videos in a particular slide.\n * @param {number} index - Index of the slide\n */\n pauseVideo(index: number) {\n this.controlVideo(index, 'pause');\n }\n\n getVideoHtml(\n src: any,\n addClass: any,\n index: number,\n html5Video: VideoSource,\n ): string {\n let video = '';\n const videoInfo =\n this.core.galleryItems[(index as unknown) as number]\n .__slideVideoInfo || {};\n const currentGalleryItem = this.core.galleryItems[index];\n let videoTitle = currentGalleryItem.title || currentGalleryItem.alt;\n videoTitle = videoTitle ? 'title=\"' + videoTitle + '\"' : '';\n const commonIframeProps = `allowtransparency=\"true\"\n frameborder=\"0\"\n scrolling=\"no\"\n allowfullscreen\n mozallowfullscreen\n webkitallowfullscreen\n oallowfullscreen\n msallowfullscreen`;\n\n if (videoInfo.youtube) {\n const videoId = 'lg-youtube' + index;\n\n const youTubeParams = getYouTubeParams(\n videoInfo,\n this.settings.youTubePlayerParams,\n );\n\n const isYouTubeNoCookieURL = isYouTubeNoCookie(src);\n\n const youtubeURL = isYouTubeNoCookieURL\n ? '//www.youtube-nocookie.com/'\n : '//www.youtube.com/';\n\n video = ``;\n } else if (videoInfo.vimeo) {\n const videoId = 'lg-vimeo' + index;\n const playerParams = getVimeoURLParams(\n this.settings.vimeoPlayerParams,\n videoInfo,\n );\n video = ``;\n } else if (videoInfo.wistia) {\n const wistiaId = 'lg-wistia' + index;\n let playerParams = param(this.settings.wistiaPlayerParams);\n playerParams = playerParams ? '?' + playerParams : '';\n video = ``;\n } else if (videoInfo.html5) {\n let html5VideoMarkup = '';\n for (let i = 0; i < html5Video.source.length; i++) {\n html5VideoMarkup += ``;\n }\n if (html5Video.tracks) {\n for (let i = 0; i < html5Video.tracks.length; i++) {\n let trackAttributes = '';\n const track = html5Video.tracks[i];\n Object.keys(track || {}).forEach(function (key) {\n trackAttributes += `${key}=\"${(track as any)[key]}\" `;\n });\n html5VideoMarkup += ``;\n }\n }\n\n let html5VideoAttrs = '';\n const videoAttributes = html5Video.attributes || {};\n Object.keys(videoAttributes || {}).forEach(function (key) {\n html5VideoAttrs += `${key}=\"${(videoAttributes as any)[key]}\" `;\n });\n video = ``;\n }\n\n return video;\n }\n\n /**\n * @desc - Append videos to the slide\n *\n * @param {HTMLElement} el - slide element\n * @param {Object} videoParams - Video parameters, Contains src, class, index, htmlVideo\n */\n appendVideos(\n el: lgQuery,\n videoParams: {\n src: string;\n addClass: string;\n index: number;\n html5Video: any;\n },\n ): any {\n const videoHtml = this.getVideoHtml(\n videoParams.src,\n videoParams.addClass,\n videoParams.index,\n videoParams.html5Video,\n );\n el.find('.lg-video-cont').append(videoHtml);\n const $videoElement = el.find('.lg-video-object').first();\n if (videoParams.html5Video) {\n $videoElement.on('mousedown.lg.video', (e) => {\n e.stopPropagation();\n });\n }\n if (\n this.settings.videojs &&\n this.core.galleryItems[videoParams.index].__slideVideoInfo?.html5\n ) {\n try {\n return videojs(\n $videoElement.get(),\n this.settings.videojsOptions,\n );\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included videojs',\n );\n }\n }\n }\n\n gotoNextSlideOnVideoEnd(src: any, index: number) {\n const $videoElement = this.core\n .getSlideItem(index)\n .find('.lg-video-object')\n .first();\n const videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n if (this.settings.gotoNextSlideOnVideoEnd) {\n if (videoInfo.html5) {\n $videoElement.on('ended', () => {\n this.core.goToNextSlide();\n });\n } else if (videoInfo.vimeo) {\n try {\n // https://github.com/vimeo/player.js/#ended\n new Vimeo.Player($videoElement.get()).on('ended', () => {\n this.core.goToNextSlide();\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //github.com/vimeo/player.js',\n );\n }\n } else if (videoInfo.wistia) {\n try {\n window._wq = window._wq || [];\n\n // @todo Event is gettign triggered multiple times\n window._wq.push({\n id: $videoElement.attr('id'),\n onReady: (video: {\n bind: (arg0: string, arg1: () => void) => void;\n }) => {\n video.bind('end', () => {\n this.core.goToNextSlide();\n });\n },\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //fast.wistia.com/assets/external/E-v1.js',\n );\n }\n }\n }\n }\n\n controlVideo(index: number, action: string) {\n const $videoElement = this.core\n .getSlideItem(index)\n .find('.lg-video-object')\n .first();\n const videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n\n if (!$videoElement.get()) return;\n\n if (videoInfo.youtube) {\n try {\n ($videoElement.get() as any).contentWindow.postMessage(\n `{\"event\":\"command\",\"func\":\"${action}Video\",\"args\":\"\"}`,\n '*',\n );\n } catch (e) {\n console.error(`lightGallery:- ${e}`);\n }\n } else if (videoInfo.vimeo) {\n try {\n new Vimeo.Player($videoElement.get())[action]();\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //github.com/vimeo/player.js',\n );\n }\n } else if (videoInfo.html5) {\n if (this.settings.videojs) {\n try {\n (videojs($videoElement.get()) as any)[action as any]();\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included videojs',\n );\n }\n } else {\n ($videoElement.get() as any)[action]();\n }\n } else if (videoInfo.wistia) {\n try {\n window._wq = window._wq || [];\n\n // @todo Find a way to destroy wistia player instance\n window._wq.push({\n id: $videoElement.attr('id'),\n onReady: (video: any) => {\n video[action]();\n },\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //fast.wistia.com/assets/external/E-v1.js',\n );\n }\n }\n }\n\n loadVideoOnPosterClick($el: lgQuery, forcePlay?: boolean): void {\n // check slide has poster\n if (!$el.hasClass('lg-video-loaded')) {\n // check already video element present\n if (!$el.hasClass('lg-has-video')) {\n $el.addClass('lg-has-video');\n\n let _html;\n\n const _src = this.core.galleryItems[this.core.index].src;\n const video = this.core.galleryItems[this.core.index].video;\n if (video) {\n _html =\n typeof video === 'string' ? JSON.parse(video) : video;\n }\n\n const videoJsPlayer = this.appendVideos($el, {\n src: _src as string,\n addClass: '',\n index: this.core.index,\n html5Video: _html,\n });\n\n this.gotoNextSlideOnVideoEnd(_src, this.core.index);\n\n const $tempImg = $el.find('.lg-object').first().get();\n\n // @todo make sure it is working\n $el.find('.lg-video-cont').first().append($tempImg);\n $el.addClass('lg-video-loading');\n\n videoJsPlayer &&\n videoJsPlayer.ready(() => {\n videoJsPlayer.on('loadedmetadata', () => {\n this.onVideoLoadAfterPosterClick(\n $el,\n this.core.index,\n );\n });\n });\n\n $el.find('.lg-video-object')\n .first()\n .on('load.lg error.lg loadedmetadata.lg', () => {\n setTimeout(() => {\n this.onVideoLoadAfterPosterClick(\n $el,\n this.core.index,\n );\n }, 50);\n });\n } else {\n this.playVideo(this.core.index);\n }\n } else if (forcePlay) {\n this.playVideo(this.core.index);\n }\n }\n onVideoLoadAfterPosterClick($el: lgQuery, index: number): void {\n $el.addClass('lg-video-loaded');\n this.playVideo(index);\n }\n destroy(): void {\n this.core.LGel.off('.lg.video');\n this.core.LGel.off('.video');\n }\n}\n","const candidateSelectors = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]:not(slot)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n 'details>summary:first-of-type',\n 'details',\n];\nconst candidateSelector = /* #__PURE__ */ candidateSelectors.join(',');\n\nconst NoElement = typeof Element === 'undefined';\n\nconst matches = NoElement\n ? function () {}\n : Element.prototype.matches ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n\nconst getRootNode =\n !NoElement && Element.prototype.getRootNode\n ? (element) => element.getRootNode()\n : (element) => element.ownerDocument;\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nconst getCandidates = function (el, includeContainer, filter) {\n let candidates = Array.prototype.slice.apply(\n el.querySelectorAll(candidateSelector)\n );\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidatesScope\n * @property {Element} scope contains inner candidates\n * @property {Element[]} candidates\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidatesScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.}\n */\nconst getCandidatesIteratively = function (\n elements,\n includeContainer,\n options\n) {\n const candidates = [];\n const elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n const element = elementsToCheck.shift();\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n const assigned = element.assignedElements();\n const content = assigned.length ? assigned : element.children;\n const nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // check candidate element\n const validCandidate = matches.call(element, candidateSelector);\n if (\n validCandidate &&\n options.filter(element) &&\n (includeContainer || !elements.includes(element))\n ) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n const shadowRoot =\n element.shadowRoot ||\n // check for an undisclosed shadow\n (typeof options.getShadowRoot === 'function' &&\n options.getShadowRoot(element));\n\n const validShadowRoot =\n !options.shadowRootFilter || options.shadowRootFilter(element);\n\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n const nestedCandidates = getCandidatesIteratively(\n shadowRoot === true ? element.children : shadowRoot.children,\n true,\n options\n );\n\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift(...element.children);\n }\n }\n }\n return candidates;\n};\n\nconst getTabindex = function (node, isScope) {\n if (node.tabIndex < 0) {\n // in Chrome,
,