{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@stimulus/core/dist/event_listener.js","webpack:///./node_modules/@stimulus/core/dist/dispatcher.js","webpack:///./node_modules/@stimulus/core/dist/action_descriptor.js","webpack:///./node_modules/@stimulus/core/dist/action.js","webpack:///./node_modules/@stimulus/core/dist/binding.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/element_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/attribute_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/string_map_observer.js","webpack:///./node_modules/@stimulus/multimap/dist/set_operations.js","webpack:///./node_modules/@stimulus/multimap/dist/multimap.js","webpack:///./node_modules/@stimulus/multimap/dist/indexed_multimap.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/token_list_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/value_list_observer.js","webpack:///./node_modules/@stimulus/core/dist/binding_observer.js","webpack:///./node_modules/@stimulus/core/dist/value_observer.js","webpack:///./node_modules/@stimulus/core/dist/context.js","webpack:///./node_modules/@stimulus/core/dist/inheritable_statics.js","webpack:///./node_modules/@stimulus/core/dist/blessing.js","webpack:///./node_modules/@stimulus/core/dist/module.js","webpack:///./node_modules/@stimulus/core/dist/definition.js","webpack:///./node_modules/@stimulus/core/dist/class_map.js","webpack:///./node_modules/@stimulus/core/dist/string_helpers.js","webpack:///./node_modules/@stimulus/core/dist/data_map.js","webpack:///./node_modules/@stimulus/core/dist/guide.js","webpack:///./node_modules/@stimulus/core/dist/selectors.js","webpack:///./node_modules/@stimulus/core/dist/target_set.js","webpack:///./node_modules/@stimulus/core/dist/scope.js","webpack:///./node_modules/@stimulus/core/dist/scope_observer.js","webpack:///./node_modules/@stimulus/core/dist/router.js","webpack:///./node_modules/@stimulus/core/dist/schema.js","webpack:///./node_modules/@stimulus/core/dist/application.js","webpack:///./node_modules/@stimulus/core/dist/class_properties.js","webpack:///./node_modules/@stimulus/core/dist/target_properties.js","webpack:///./node_modules/@stimulus/core/dist/value_properties.js","webpack:///./node_modules/@stimulus/core/dist/controller.js","webpack:///./app/javascript/glightbox/index.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/@stimulus/webpack-helpers/dist/index.js","webpack:///./app/javascript/rich_text/index.js","webpack:///./node_modules/@splidejs/splide/dist/js/splide.esm.js","webpack:///./app/javascript/controllers sync _controller\\.(js|ts)$","webpack:///./app/javascript/controllers/contact_controller.js","webpack:///./app/javascript/article/index.js","webpack:///./app/javascript/media_gallery/index.js","webpack:///./app/javascript/controllers/index.js","webpack:///./app/javascript/packs/application.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","EventListener","eventTarget","eventName","eventOptions","this","unorderedBindings","Set","connect","addEventListener","disconnect","removeEventListener","bindingConnected","binding","add","bindingDisconnected","delete","handleEvent","event","extendedEvent","stopImmediatePropagation_1","stopImmediatePropagation","assign","immediatePropagationStopped","extendEvent","_i","_a","bindings","length","Array","from","sort","left","right","leftIndex","index","rightIndex","configurable","Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","forEach","eventListener","stop","values","reduce","listeners","map","concat","fetchEventListenerForBinding","handleError","error","message","detail","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","createEventListener","set","parts","keys","push","join","descriptorPattern","parseEventTarget","eventTargetName","window","document","Action","element","descriptor","tagName","toLowerCase","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","forToken","token","descriptorString","content","matches","trim","match","split","options","replace","test","toString","eventNameSuffix","e","getAttribute","Error","Binding","context","action","willBeInvokedByEvent","invokeWithEvent","method","controller","target","Element","contains","scope","containsElement","ElementObserver","delegate","_this","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","attributes","childList","subtree","refresh","takeRecords","matchElementsInTree","has","removeElement","_b","_c","addElement","mutations_1","mutation","processMutation","type","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","node","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","hasAttribute","querySelectorAll","selector","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","StringMapObserver","stringMap","knownAttributeNames","refreshAttribute","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","fetch","del","size","prune","extendStatics","Multimap","valuesByKey","hasKey","hasValue","some","getValuesForKey","getKeysForValue","filter","__extends","b","setPrototypeOf","__proto__","__","constructor","_super","IndexedMultimap","keysByValue","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","refreshTokensForElement","unmatchedTokens","matchedTokens","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","Math","max","_","findIndex","tokensAreEqual","slice","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","clear","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","attributeValue","invokeChangedCallbackForValue","valueDescriptors","name_1","undefined","defaultValue","data","Context","controllerConstructor","bindingObserver","dispatcher","valueObserver","initialize","parentElement","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","definition","isArray","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","apply","getOwnStaticObjectPairs","getPrototypeOf","reverse","__spreadArrays","il","arguments","k","a","j","jl","bless","properties","shadowConstructor","extend","shadowProperties","getOwnKeys","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","defineProperties","shadow","blessings","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","getOwnPropertyNames","extendWithReflect","extended","_newTarget","Reflect","construct","Module","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAttributeName","getAttributeNameForKey","camelize","char","toUpperCase","capitalize","charAt","dasherize","DataMap","setAttribute","removeAttribute","Guide","logger","warnedKeysByObject","warn","warnedKeys","attributeValueContainsToken","TargetSet","targetName","find","targetNames","findTarget","findLegacyTarget","findAll","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","guide","Scope","classes","closest","controllerSelector","queryElements","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","contexts","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","__generator","body","f","y","g","label","sent","trys","ops","verb","iterator","v","op","TypeError","pop","Application","documentElement","console","router","readyState","register","load","head","rest","unload","getControllerForElementAndIdentifier","ClassPropertiesBlessing","classDefinition","TargetPropertiesBlessing","targetDefinition","ValuePropertiesBlessing","valueDefinitionPairs","propertyDescriptorMap","valueDefinitionPair","valueDescriptor","parseValueDefinitionPair","read","readers","write","writers","default","propertiesForValueDefinitionPair","typeConstant","Boolean","Number","String","parseValueTypeConstant","defaultValuesByType","valueDescriptorForTokenAndType","array","boolean","number","string","JSON","parse","parseFloat","writeJSON","stringify","Controller","_typeof","obj","_classCallCheck","instance","Constructor","_defineProperties","props","writable","_createClass","protoProps","staticProps","uid","Date","now","deep","merge","prop","each","collection","callback","isNode","isArrayLike","isObject","getNodeEvents","fn","cache","all","evt","found","cl","addEvent","_ref","onElement","withCallback","_ref$avoidDuplicate","avoidDuplicate","_ref$once","once","_ref$useCapture","useCapture","handler","isFunction","destroy","isString","el","events","splice","addClass","classList","removeClass","remove","hasClass","elem","msMatchesSelector","animateElement","animation","animationEnd","whichAnimationEvent","animationNames","cssTransform","translate","style","webkitTransform","MozTransform","msTransform","OTransform","transform","show","display","hide","createHTML","htmlStr","frag","createDocumentFragment","temp","createElement","innerHTML","firstChild","appendChild","windowSize","width","innerWidth","clientWidth","height","innerHeight","clientHeight","animations","OAnimation","MozAnimation","WebkitAnimation","whichTransitionEvent","transitions","transition","OTransition","MozTransition","WebkitTransition","createIframe","config","url","allow","appendTo","iframe","className","src","onload","waitUntil","check","onComplete","delay","timeout","timeoutPointer","intervalPointer","setInterval","clearInterval","clearTimeout","setTimeout","injectAssets","waitFor","isNil","indexOf","getElementsByTagName","headStyles","link","rel","href","media","insertBefore","script","isMobile","navigator","userAgent","isTouch","createTouch","msMaxTouchPoints","ar","isFinite","isNumber","isNaN","getNextFocusElement","current","btns","parseInt","newIndex","orders","btn","nextFocus","querySelector","keyboardNavigation","keyCode","focusedButton","activeElement","nodeName","toLocaleLowerCase","preventDefault","first","focus","nextSlide","prevSlide","close","getLen","sqrt","x","dot","v1","v2","getAngle","mr","acos","cross","getRotateAngle","angle","PI","EventsHandlerAdmin","handlers","len","wrapFunc","EventshandlerAdmin","TouchEvents","option","move","end","cancel","preV","pinchStartLen","zoom","isDoubleTap","noop","rotate","touchStart","multipointStart","multipointEnd","pinch","swipe","tap","doubleTap","longTap","singleTap","pressMove","twoFingerPressMove","touchMove","touchEnd","touchCancel","translateContainer","_cancelAllHandler","cancelAll","delta","last","tapTimeout","singleTapTimeout","longTapTimeout","swipeTimeout","x1","x2","y1","y2","preTapPosition","touches","ignoreDragFor","log","pageX","pageY","dispatch","abs","_cancelLongTap","_cancelSingleTap","_preventTap","currentX","currentY","sCurrentX","sCurrentY","sx2","deltaX","deltaY","sy2","movedX","movedY","changedTouches","self","direction","_swipeDirection","resetSlideMove","slide","transitionEnd","windowWidth","container","desc","opacity","touchNavigation","hDistance","vDistance","isInlined","winSize","winWidth","winHeight","process","currentSlide","mediaImage","doingMove","initScale","maxScale","currentScale","doingZoom","imageZoomed","zoomedPosX","zoomedPosY","lastZoomedPosX","lastZoomedPosY","hDistancePercent","vDistancePercent","vSwipe","hSwipe","startCoords","endCoords","xDown","yDown","sliderWrapper","getElementById","overlay","touchInstance","targetTouches","parentNode","clientX","clientY","activeSlide","offsetHeight","moved","xUp","yUp","xDiff","yDiff","settings","touchFollowAxis","h","scaleX","scaleY","scale","mhDistance","mvDistance","ZoomImages","onclose","img","setZoomEvents","active","zoomedIn","dragging","initialX","initialY","xOffset","yOffset","dragStart","dragEnd","drag","zoomOut","zoomIn","widowWidth","maxWidth","naturalWidth","maxHeight","naturalHeight","centerX","setTranslate","_this2","isDragging","xPos","yPos","DragSlides","dragEl","_config$toleranceX","toleranceX","_config$toleranceY","toleranceY","_config$slide","_config$instance","lastDirection","toleranceReached","dragContainer","clicked","exludeClicks","doSlideChange","preventOutsideClick","doSlideClose","currentXInt","currentYInt","doChange","shouldChange","dragAutoSnap","doClose","shouldClose","dragDir","lastChild","animated","slideImage","slideMedia","Image","titleID","textID","srcset","sizes","alt","title","description","_hasCustomWidth","_hasCustomHeight","slideVideo","slideContainer","videoID","videoPlayers","getAllPlayers","videoWrapper","plyr","css","protocol","location","videoSource","embedID","customPlaceholder","js","vimeoID","exec","youtubeID","getYoutubeID","html","sources","mp4","videoFile","placeholder","playerConfig","player","Plyr","on","dataset","ready","resize","handleMediaFullScreen","slideInline","innerContent","hash","div","cloned","cloneNode","slideIframe","SlideConfigParser","slideParamas","defaults","descPosition","effect","zoomable","draggable","origin","sourceType","objectData","setSize","val","nodeData","sanitizeValue","cleanKeys","str","regex","RegExp","substring","DOMException","nodeDesc","slideConfig","defaultWith","checkSize","videosWidth","defaultHeight","Slide","isMobileDevice","beforeSlideLoad","position","slideTitle","slideText","slideDesc","finalCallback","afterSlideLoad","getSlidePlayerInstance","removeChild","id","moreLength","smallDescription","slideShortDesc","moreText","descriptionEvents","dragToleranceX","dragToleranceY","offsetWidth","wordBoundary","useWordBoundary","innerText","subString","substr","moreLink","shortEvent","slideHTML","parser","slideExtraAttributes","parseConfig","_version","isMobile$1","isTouch$1","skin","theme","closeButton","startAt","autoplayVideos","autofocusVideos","beforeSlideChange","afterSlideChange","slideInserted","slideRemoved","onOpen","onClose","loop","preload","oneSlidePerOpen","closeOnOutsideClick","plugins","ratio","fullscreen","enabled","iosNative","youtube","noCookie","showinfo","iv_load_policy","vimeo","byline","portrait","transparent","openEffect","closeEffect","slideEffect","cssEfects","fade","out","slideBack","none","svg","prev","GlightboxInit","customOptions","effectsClasses","getAnimationClasses","apiEvents","fullElementsList","getSelector","baseEvents","open","getElements","prevActiveSlideIndex","prevActiveSlide","gallery","getGalleryElements","getElementIndex","build","scrollBar","styleSheet","showSlide","prevButton","nextButton","lightboxOpen","trigger","loader","slidesContainer","slideAnimateOut","slideNode","slideAnimateIn","slideData","slideIndex","setContent","slideDescription","slideDescriptionContained","preloadSlide","updateNavigationClasses","_this3","goToSlide","getConfig","slideInfo","newSlide","totalSlides","addedSlideNode","addedSlidePlayer","existingSlide","getActiveSlideIndex","_this4","prevData","nextData","slidePlayerPlay","effectName","animIn","animOut","slidePlayerPause","playing","pause","play","_this5","newElements","_this6","list","elData","effects","_this7","built","children","childNodes","bodyChildElms","nextSVG","prevSVG","closeSVG","lightboxHTML","modal","bodyHiddenChildElms","video","image","descriptionResize","descHeight","_imgNode","containerWidth","containerHeight","divisor","videoRatio","videoWidth","floor","vwidth","vheight","_ratio","vsize","init","loopAtEnd","_this8","closing","_key","styles","clearAllEvents","_this9","onceTriggered","glightbox","factory","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","ref","cspNonce","expando","matchesSelector","mozMatchesSelector","oMatchesSelector","webkitMatchesSelector","getData","setData","isContentEditable","isEditable","$","csrfParam","csrfToken","meta","CSRFProtection","xhr","setRequestHeader","refreshCSRFTokens","param","input","CustomEvent","fire","params","createEvent","initCustomEvent","bubbles","cancelable","Event","defaultPrevented","dispatchEvent","stopEverything","stopPropagation","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","text","xml","json","ajax","response","responseText","getResponseHeader","status","success","statusText","complete","beforeSend","XMLHttpRequest","OPENED","send","dataType","accept","crossDomain","withCredentials","onreadystatechange","DONE","DOMParser","parseFromString","isCrossDomain","originAnchor","urlAnchor","host","toArray","serializeElement","additionalParam","inputs","disabled","selected","checked","encodeURIComponent","formElements","form","allowAction","handleConfirm","confirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","click","isRemote","handleRemote","button","enctype","FormData","append","args","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","ajaxPrefilter","originalOptions","_rails_loaded","definitionsFromContext","logicalName","identifierForContextKey","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","attachment","file","trixLinks","__webpack_modules__","__unused_webpack_module","__webpack_exports__","module_Splide","states_namespaceObject","_extends","source","CREATED","DESTROYED","IDLE","MOUNTED","MOVING","subject","to","between","m1","m2","min","sprintf","format","replacements","unit","pad","toPixel","root","applyStyle","dom_remove","elm","child","parent","tagOrClassName","tag","attrs","domify","elms","before","addOrRemoveClasses","names","getRect","getBoundingClientRect","SLIDE","LOOP","FADE","Splide","Components","endCallback","mount","Elements","destIndex","prevIndex","coord","edgeIndex","speed","is","rewindSpeed","easing","Fade","track","slides","MESSAGE_PREFIX","exist","ROOT","STATUS_CLASSES","visible","loading","DEFAULTS","rewind","waitForTransition","fixedWidth","fixedHeight","heightRatio","autoWidth","autoHeight","perPage","perMove","clones","gap","padding","arrows","arrowPath","pagination","autoplay","interval","pauseOnHover","pauseOnFocus","resetProgress","lazyLoad","preloadPages","keyboard","dragAngleThreshold","swipeDistanceThreshold","flickVelocityThreshold","flickPower","flickMaxPages","cover","accessibility","slideFocus","isNavigation","trimSpace","updateOnMove","throttle","breakpoints","slider","arrow","page","clone","progress","bar","spinner","sr","i18n","slideX","curr","off","item","unsubscribe","emit","_len","core_event","State","state","STATES","_o","_e","_t","_proto","Extensions","Transition","components","Component","compose","component","required","mounted","visibility","sync","splide","sibling","_this$Event","go","control","wait","completely","created","RTL","TTB","STYLE_RESTORE_EVENTS","components_elements","Slides","getClasses","findParts","collect","realIndex","SlideObject","STATUS_UPDATE_EVENTS","isClone","update","restoreStyles","_update","isActive","isVisible","ceil","trackRect","slideRect","top","bottom","isWithin","within","diff","forVisibility","elements_slide","getSlide","getSlides","includeClones","getSlidesByPage","idx","toIndex","images","count","onerror","loaded","total","rootClass","isLoop","newOptions","silently","Track","indicator","sign","toPage","parsePage","hasFocus","pageLength","edge","isRtl","nextIndex","Layout","isVertical","isFade","isRTL","isLoopPending","jump","newPosition","getTrimmedPosition","toCoord","onTransitionEnd","shift","toPosition","innerSize","totalSize","minDistance","Infinity","distance","slideSize","offset","cloneCount","Clones","getCloneCount","cloneDeeply","generateClones","baseCount","dimension","fixedSize","func","layout","totalHeight","totalWidth","slideHeight","slideWidth","margin","paddingTop","paddingBottom","vertical","paddingLeft","paddingRight","listRect","horizontal","drag_abs","startCoord","startInfo","currentInfo","axis","Drag","passive","analyze","_start","_end","resist","atan","shouldMove","info","velocity","absV","destination","timeStamp","_ref2","_ref3","_ref3$x","fromX","_ref3$y","duration","time","onClick","capture","PAUSE_FLAGS","updateDisabled","_Components$Controlle","isEnough","createArrow","wrapper","firstElementChild","appendArrows","ATTRIBUTES_UPDATE_EVENT","UPDATE_EVENT","Pagination","items","li","createPagination","updateAttributes","getItem","SRC_DATA_NAME","SRCSET_DATA_NAME","ARIA_CURRENRT","ARIA_CONTROLS","ARIA_LABEL","ARIA_HIDDEN","TAB_INDEX","KEY_MAP","ltr","ArrowLeft","ArrowRight","Left","Right","rtl","ttb","ArrowUp","ArrowDown","Up","Down","a11y","allAttributes","A11y","updateSlide","initArrows","updateArrows","initPagination","updatePagination","initNavigation","updateNavigation","isButton","Arrows","controls","prevLabel","nextLabel","activeItem","main","mainSlide","SYNC_EVENT","CLICK_EVENTS","TRIGGER_KEYS","COMPLETE","Options","Breakpoints","initialOptions","prevPoint","throttledCheck","point","mql","matchMedia","Click","Autoplay","flags","elapse","rate","requestAnimationFrame","_pause","timestamp","reset","createInterval","switchOn","flag","Cover","uncover","background","LazyLoad","isSequential","loadNext","Keyboard","Sync","syncMain","syncSibling","moveSibling","_Core","subClass","superClass","__webpack_module_cache__","webpackContext","req","webpackContextResolve","code","_default","_Controller","_callSuper","_inherits","fileInputTarget","files","usageRightsInputTarget","thumbnails","mapWidth","mapLightbox","GLightbox","thumbnail","textContent","date","author","sourceLabel","sourceData","mapLink","geodataLabel","geodataLink","gmapsurl","updatedMapLink","replaceWith","reload","backLink","history","referrer","Stimulus","require"],"mappings":"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","file":"js/application-4871309b61ce683835ed.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://assets.chronik-kramsach.at/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 28);\n","var EventListener = /** @class */function () {\n function EventListener(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n EventListener.prototype.connect = function () {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n };\n EventListener.prototype.disconnect = function () {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n };\n // Binding observer delegate\n /** @hidden */\n EventListener.prototype.bindingConnected = function (binding) {\n this.unorderedBindings.add(binding);\n };\n /** @hidden */\n EventListener.prototype.bindingDisconnected = function (binding) {\n this.unorderedBindings.delete(binding);\n };\n EventListener.prototype.handleEvent = function (event) {\n var extendedEvent = extendEvent(event);\n for (var _i = 0, _a = this.bindings; _i < _a.length; _i++) {\n var binding = _a[_i];\n if (extendedEvent.immediatePropagationStopped) {\n break;\n } else {\n binding.handleEvent(extendedEvent);\n }\n }\n };\n Object.defineProperty(EventListener.prototype, \"bindings\", {\n get: function () {\n return Array.from(this.unorderedBindings).sort(function (left, right) {\n var leftIndex = left.index,\n rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n },\n enumerable: false,\n configurable: true\n });\n return EventListener;\n}();\nexport { EventListener };\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n } else {\n var stopImmediatePropagation_1 = event.stopImmediatePropagation;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation: function () {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation_1.call(this);\n }\n });\n }\n}","import { EventListener } from \"./event_listener\";\nvar Dispatcher = /** @class */function () {\n function Dispatcher(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n Dispatcher.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.connect();\n });\n }\n };\n Dispatcher.prototype.stop = function () {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.disconnect();\n });\n }\n };\n Object.defineProperty(Dispatcher.prototype, \"eventListeners\", {\n get: function () {\n return Array.from(this.eventListenerMaps.values()).reduce(function (listeners, map) {\n return listeners.concat(Array.from(map.values()));\n }, []);\n },\n enumerable: false,\n configurable: true\n });\n // Binding observer delegate\n /** @hidden */\n Dispatcher.prototype.bindingConnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n };\n /** @hidden */\n Dispatcher.prototype.bindingDisconnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n };\n // Error handling\n Dispatcher.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n this.application.handleError(error, \"Error \" + message, detail);\n };\n Dispatcher.prototype.fetchEventListenerForBinding = function (binding) {\n var eventTarget = binding.eventTarget,\n eventName = binding.eventName,\n eventOptions = binding.eventOptions;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n };\n Dispatcher.prototype.fetchEventListener = function (eventTarget, eventName, eventOptions) {\n var eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n var cacheKey = this.cacheKey(eventName, eventOptions);\n var eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n };\n Dispatcher.prototype.createEventListener = function (eventTarget, eventName, eventOptions) {\n var eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n };\n Dispatcher.prototype.fetchEventListenerMapForEventTarget = function (eventTarget) {\n var eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n };\n Dispatcher.prototype.cacheKey = function (eventName, eventOptions) {\n var parts = [eventName];\n Object.keys(eventOptions).sort().forEach(function (key) {\n parts.push(\"\" + (eventOptions[key] ? \"\" : \"!\") + key);\n });\n return parts.join(\":\");\n };\n return Dispatcher;\n}();\nexport { Dispatcher };","// capture nos.: 12 23 4 43 1 5 56 7 768 9 98\nvar descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nexport function parseActionDescriptorString(descriptorString) {\n var source = descriptorString.trim();\n var matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n identifier: matches[5],\n methodName: matches[7]\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n } else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions.split(\":\").reduce(function (options, token) {\n var _a;\n return Object.assign(options, (_a = {}, _a[token.replace(/^!/, \"\")] = !/^!/.test(token), _a));\n }, {});\n}\nexport function stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n } else if (eventTarget == document) {\n return \"document\";\n }\n}","import { parseActionDescriptorString, stringifyEventTarget } from \"./action_descriptor\";\nvar Action = /** @class */function () {\n function Action(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n Action.forToken = function (token) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content));\n };\n Action.prototype.toString = function () {\n var eventNameSuffix = this.eventTargetName ? \"@\" + this.eventTargetName : \"\";\n return \"\" + this.eventName + eventNameSuffix + \"->\" + this.identifier + \"#\" + this.methodName;\n };\n Object.defineProperty(Action.prototype, \"eventTargetName\", {\n get: function () {\n return stringifyEventTarget(this.eventTarget);\n },\n enumerable: false,\n configurable: true\n });\n return Action;\n}();\nexport { Action };\nvar defaultEventNames = {\n \"a\": function (e) {\n return \"click\";\n },\n \"button\": function (e) {\n return \"click\";\n },\n \"form\": function (e) {\n return \"submit\";\n },\n \"input\": function (e) {\n return e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\";\n },\n \"select\": function (e) {\n return \"change\";\n },\n \"textarea\": function (e) {\n return \"input\";\n }\n};\nexport function getDefaultEventNameForElement(element) {\n var tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}","var Binding = /** @class */function () {\n function Binding(context, action) {\n this.context = context;\n this.action = action;\n }\n Object.defineProperty(Binding.prototype, \"index\", {\n get: function () {\n return this.action.index;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"eventTarget\", {\n get: function () {\n return this.action.eventTarget;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"eventOptions\", {\n get: function () {\n return this.action.eventOptions;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"identifier\", {\n get: function () {\n return this.context.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Binding.prototype.handleEvent = function (event) {\n if (this.willBeInvokedByEvent(event)) {\n this.invokeWithEvent(event);\n }\n };\n Object.defineProperty(Binding.prototype, \"eventName\", {\n get: function () {\n return this.action.eventName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"method\", {\n get: function () {\n var method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(\"Action \\\"\" + this.action + \"\\\" references undefined method \\\"\" + this.methodName + \"\\\"\");\n },\n enumerable: false,\n configurable: true\n });\n Binding.prototype.invokeWithEvent = function (event) {\n try {\n this.method.call(this.controller, event);\n } catch (error) {\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element,\n index = _a.index;\n var detail = {\n identifier: identifier,\n controller: controller,\n element: element,\n index: index,\n event: event\n };\n this.context.handleError(error, \"invoking action \\\"\" + this.action + \"\\\"\", detail);\n }\n };\n Binding.prototype.willBeInvokedByEvent = function (event) {\n var eventTarget = event.target;\n if (this.element === eventTarget) {\n return true;\n } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n } else {\n return this.scope.containsElement(this.action.element);\n }\n };\n Object.defineProperty(Binding.prototype, \"controller\", {\n get: function () {\n return this.context.controller;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"methodName\", {\n get: function () {\n return this.action.methodName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"scope\", {\n get: function () {\n return this.context.scope;\n },\n enumerable: false,\n configurable: true\n });\n return Binding;\n}();\nexport { Binding };","var ElementObserver = /** @class */function () {\n function ElementObserver(element, delegate) {\n var _this = this;\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver(function (mutations) {\n return _this.processMutations(mutations);\n });\n }\n ElementObserver.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, {\n attributes: true,\n childList: true,\n subtree: true\n });\n this.refresh();\n }\n };\n ElementObserver.prototype.stop = function () {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n };\n ElementObserver.prototype.refresh = function () {\n if (this.started) {\n var matches = new Set(this.matchElementsInTree());\n for (var _i = 0, _a = Array.from(this.elements); _i < _a.length; _i++) {\n var element = _a[_i];\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (var _b = 0, _c = Array.from(matches); _b < _c.length; _b++) {\n var element = _c[_b];\n this.addElement(element);\n }\n }\n };\n // Mutation record processing\n ElementObserver.prototype.processMutations = function (mutations) {\n if (this.started) {\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n this.processMutation(mutation);\n }\n }\n };\n ElementObserver.prototype.processMutation = function (mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n } else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n };\n ElementObserver.prototype.processAttributeChange = function (node, attributeName) {\n var element = node;\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n } else {\n this.removeElement(element);\n }\n } else if (this.matchElement(element)) {\n this.addElement(element);\n }\n };\n ElementObserver.prototype.processRemovedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n };\n ElementObserver.prototype.processAddedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n };\n // Element matching\n ElementObserver.prototype.matchElement = function (element) {\n return this.delegate.matchElement(element);\n };\n ElementObserver.prototype.matchElementsInTree = function (tree) {\n if (tree === void 0) {\n tree = this.element;\n }\n return this.delegate.matchElementsInTree(tree);\n };\n ElementObserver.prototype.processTree = function (tree, processor) {\n for (var _i = 0, _a = this.matchElementsInTree(tree); _i < _a.length; _i++) {\n var element = _a[_i];\n processor.call(this, element);\n }\n };\n ElementObserver.prototype.elementFromNode = function (node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n };\n ElementObserver.prototype.elementIsActive = function (element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n } else {\n return this.element.contains(element);\n }\n };\n // Element tracking\n ElementObserver.prototype.addElement = function (element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n };\n ElementObserver.prototype.removeElement = function (element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n };\n return ElementObserver;\n}();\nexport { ElementObserver };","import { ElementObserver } from \"./element_observer\";\nvar AttributeObserver = /** @class */function () {\n function AttributeObserver(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n Object.defineProperty(AttributeObserver.prototype, \"element\", {\n get: function () {\n return this.elementObserver.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AttributeObserver.prototype, \"selector\", {\n get: function () {\n return \"[\" + this.attributeName + \"]\";\n },\n enumerable: false,\n configurable: true\n });\n AttributeObserver.prototype.start = function () {\n this.elementObserver.start();\n };\n AttributeObserver.prototype.stop = function () {\n this.elementObserver.stop();\n };\n AttributeObserver.prototype.refresh = function () {\n this.elementObserver.refresh();\n };\n Object.defineProperty(AttributeObserver.prototype, \"started\", {\n get: function () {\n return this.elementObserver.started;\n },\n enumerable: false,\n configurable: true\n });\n // Element observer delegate\n AttributeObserver.prototype.matchElement = function (element) {\n return element.hasAttribute(this.attributeName);\n };\n AttributeObserver.prototype.matchElementsInTree = function (tree) {\n var match = this.matchElement(tree) ? [tree] : [];\n var matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n };\n AttributeObserver.prototype.elementMatched = function (element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n };\n AttributeObserver.prototype.elementUnmatched = function (element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n };\n AttributeObserver.prototype.elementAttributeChanged = function (element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n };\n return AttributeObserver;\n}();\nexport { AttributeObserver };","var StringMapObserver = /** @class */function () {\n function StringMapObserver(element, delegate) {\n var _this = this;\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver(function (mutations) {\n return _this.processMutations(mutations);\n });\n }\n StringMapObserver.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, {\n attributes: true\n });\n this.refresh();\n }\n };\n StringMapObserver.prototype.stop = function () {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n };\n StringMapObserver.prototype.refresh = function () {\n if (this.started) {\n for (var _i = 0, _a = this.knownAttributeNames; _i < _a.length; _i++) {\n var attributeName = _a[_i];\n this.refreshAttribute(attributeName);\n }\n }\n };\n // Mutation record processing\n StringMapObserver.prototype.processMutations = function (mutations) {\n if (this.started) {\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n this.processMutation(mutation);\n }\n }\n };\n StringMapObserver.prototype.processMutation = function (mutation) {\n var attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName);\n }\n };\n // State tracking\n StringMapObserver.prototype.refreshAttribute = function (attributeName) {\n var key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n var value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key);\n }\n if (value == null) {\n this.stringMap.delete(attributeName);\n this.stringMapKeyRemoved(key, attributeName);\n } else {\n this.stringMap.set(attributeName, value);\n }\n }\n };\n StringMapObserver.prototype.stringMapKeyAdded = function (key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n };\n StringMapObserver.prototype.stringMapValueChanged = function (value, key) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key);\n }\n };\n StringMapObserver.prototype.stringMapKeyRemoved = function (key, attributeName) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName);\n }\n };\n Object.defineProperty(StringMapObserver.prototype, \"knownAttributeNames\", {\n get: function () {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StringMapObserver.prototype, \"currentAttributeNames\", {\n get: function () {\n return Array.from(this.element.attributes).map(function (attribute) {\n return attribute.name;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StringMapObserver.prototype, \"recordedAttributeNames\", {\n get: function () {\n return Array.from(this.stringMap.keys());\n },\n enumerable: false,\n configurable: true\n });\n return StringMapObserver;\n}();\nexport { StringMapObserver };","export function add(map, key, value) {\n fetch(map, key).add(value);\n}\nexport function del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nexport function fetch(map, key) {\n var values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nexport function prune(map, key) {\n var values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}","import { add, del } from \"./set_operations\";\nvar Multimap = /** @class */function () {\n function Multimap() {\n this.valuesByKey = new Map();\n }\n Object.defineProperty(Multimap.prototype, \"values\", {\n get: function () {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (values, set) {\n return values.concat(Array.from(set));\n }, []);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Multimap.prototype, \"size\", {\n get: function () {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (size, set) {\n return size + set.size;\n }, 0);\n },\n enumerable: false,\n configurable: true\n });\n Multimap.prototype.add = function (key, value) {\n add(this.valuesByKey, key, value);\n };\n Multimap.prototype.delete = function (key, value) {\n del(this.valuesByKey, key, value);\n };\n Multimap.prototype.has = function (key, value) {\n var values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n };\n Multimap.prototype.hasKey = function (key) {\n return this.valuesByKey.has(key);\n };\n Multimap.prototype.hasValue = function (value) {\n var sets = Array.from(this.valuesByKey.values());\n return sets.some(function (set) {\n return set.has(value);\n });\n };\n Multimap.prototype.getValuesForKey = function (key) {\n var values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n };\n Multimap.prototype.getKeysForValue = function (value) {\n return Array.from(this.valuesByKey).filter(function (_a) {\n var key = _a[0],\n values = _a[1];\n return values.has(value);\n }).map(function (_a) {\n var key = _a[0],\n values = _a[1];\n return key;\n });\n };\n return Multimap;\n}();\nexport { Multimap };","var __extends = this && this.__extends || function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nimport { Multimap } from \"./multimap\";\nimport { add, del } from \"./set_operations\";\nvar IndexedMultimap = /** @class */function (_super) {\n __extends(IndexedMultimap, _super);\n function IndexedMultimap() {\n var _this = _super.call(this) || this;\n _this.keysByValue = new Map();\n return _this;\n }\n Object.defineProperty(IndexedMultimap.prototype, \"values\", {\n get: function () {\n return Array.from(this.keysByValue.keys());\n },\n enumerable: false,\n configurable: true\n });\n IndexedMultimap.prototype.add = function (key, value) {\n _super.prototype.add.call(this, key, value);\n add(this.keysByValue, value, key);\n };\n IndexedMultimap.prototype.delete = function (key, value) {\n _super.prototype.delete.call(this, key, value);\n del(this.keysByValue, value, key);\n };\n IndexedMultimap.prototype.hasValue = function (value) {\n return this.keysByValue.has(value);\n };\n IndexedMultimap.prototype.getKeysForValue = function (value) {\n var set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n };\n return IndexedMultimap;\n}(Multimap);\nexport { IndexedMultimap };","import { AttributeObserver } from \"./attribute_observer\";\nimport { Multimap } from \"@stimulus/multimap\";\nvar TokenListObserver = /** @class */function () {\n function TokenListObserver(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n Object.defineProperty(TokenListObserver.prototype, \"started\", {\n get: function () {\n return this.attributeObserver.started;\n },\n enumerable: false,\n configurable: true\n });\n TokenListObserver.prototype.start = function () {\n this.attributeObserver.start();\n };\n TokenListObserver.prototype.stop = function () {\n this.attributeObserver.stop();\n };\n TokenListObserver.prototype.refresh = function () {\n this.attributeObserver.refresh();\n };\n Object.defineProperty(TokenListObserver.prototype, \"element\", {\n get: function () {\n return this.attributeObserver.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TokenListObserver.prototype, \"attributeName\", {\n get: function () {\n return this.attributeObserver.attributeName;\n },\n enumerable: false,\n configurable: true\n });\n // Attribute observer delegate\n TokenListObserver.prototype.elementMatchedAttribute = function (element) {\n this.tokensMatched(this.readTokensForElement(element));\n };\n TokenListObserver.prototype.elementAttributeValueChanged = function (element) {\n var _a = this.refreshTokensForElement(element),\n unmatchedTokens = _a[0],\n matchedTokens = _a[1];\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n };\n TokenListObserver.prototype.elementUnmatchedAttribute = function (element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n };\n TokenListObserver.prototype.tokensMatched = function (tokens) {\n var _this = this;\n tokens.forEach(function (token) {\n return _this.tokenMatched(token);\n });\n };\n TokenListObserver.prototype.tokensUnmatched = function (tokens) {\n var _this = this;\n tokens.forEach(function (token) {\n return _this.tokenUnmatched(token);\n });\n };\n TokenListObserver.prototype.tokenMatched = function (token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n };\n TokenListObserver.prototype.tokenUnmatched = function (token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n };\n TokenListObserver.prototype.refreshTokensForElement = function (element) {\n var previousTokens = this.tokensByElement.getValuesForKey(element);\n var currentTokens = this.readTokensForElement(element);\n var firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(function (_a) {\n var previousToken = _a[0],\n currentToken = _a[1];\n return !tokensAreEqual(previousToken, currentToken);\n });\n if (firstDifferingIndex == -1) {\n return [[], []];\n } else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n };\n TokenListObserver.prototype.readTokensForElement = function (element) {\n var attributeName = this.attributeName;\n var tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n };\n return TokenListObserver;\n}();\nexport { TokenListObserver };\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter(function (content) {\n return content.length;\n }).map(function (content, index) {\n return {\n element: element,\n attributeName: attributeName,\n content: content,\n index: index\n };\n });\n}\nfunction zip(left, right) {\n var length = Math.max(left.length, right.length);\n return Array.from({\n length: length\n }, function (_, index) {\n return [left[index], right[index]];\n });\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}","import { TokenListObserver } from \"./token_list_observer\";\nvar ValueListObserver = /** @class */function () {\n function ValueListObserver(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n Object.defineProperty(ValueListObserver.prototype, \"started\", {\n get: function () {\n return this.tokenListObserver.started;\n },\n enumerable: false,\n configurable: true\n });\n ValueListObserver.prototype.start = function () {\n this.tokenListObserver.start();\n };\n ValueListObserver.prototype.stop = function () {\n this.tokenListObserver.stop();\n };\n ValueListObserver.prototype.refresh = function () {\n this.tokenListObserver.refresh();\n };\n Object.defineProperty(ValueListObserver.prototype, \"element\", {\n get: function () {\n return this.tokenListObserver.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ValueListObserver.prototype, \"attributeName\", {\n get: function () {\n return this.tokenListObserver.attributeName;\n },\n enumerable: false,\n configurable: true\n });\n ValueListObserver.prototype.tokenMatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n };\n ValueListObserver.prototype.tokenUnmatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n };\n ValueListObserver.prototype.fetchParseResultForToken = function (token) {\n var parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n };\n ValueListObserver.prototype.fetchValuesByTokenForElement = function (element) {\n var valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n };\n ValueListObserver.prototype.parseToken = function (token) {\n try {\n var value = this.delegate.parseValueForToken(token);\n return {\n value: value\n };\n } catch (error) {\n return {\n error: error\n };\n }\n };\n return ValueListObserver;\n}();\nexport { ValueListObserver };","import { Action } from \"./action\";\nimport { Binding } from \"./binding\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\nvar BindingObserver = /** @class */function () {\n function BindingObserver(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n BindingObserver.prototype.start = function () {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n };\n BindingObserver.prototype.stop = function () {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n };\n Object.defineProperty(BindingObserver.prototype, \"element\", {\n get: function () {\n return this.context.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"identifier\", {\n get: function () {\n return this.context.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"actionAttribute\", {\n get: function () {\n return this.schema.actionAttribute;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"schema\", {\n get: function () {\n return this.context.schema;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"bindings\", {\n get: function () {\n return Array.from(this.bindingsByAction.values());\n },\n enumerable: false,\n configurable: true\n });\n BindingObserver.prototype.connectAction = function (action) {\n var binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n };\n BindingObserver.prototype.disconnectAction = function (action) {\n var binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n };\n BindingObserver.prototype.disconnectAllActions = function () {\n var _this = this;\n this.bindings.forEach(function (binding) {\n return _this.delegate.bindingDisconnected(binding);\n });\n this.bindingsByAction.clear();\n };\n // Value observer delegate\n BindingObserver.prototype.parseValueForToken = function (token) {\n var action = Action.forToken(token);\n if (action.identifier == this.identifier) {\n return action;\n }\n };\n BindingObserver.prototype.elementMatchedValue = function (element, action) {\n this.connectAction(action);\n };\n BindingObserver.prototype.elementUnmatchedValue = function (element, action) {\n this.disconnectAction(action);\n };\n return BindingObserver;\n}();\nexport { BindingObserver };","import { StringMapObserver } from \"@stimulus/mutation-observers\";\nvar ValueObserver = /** @class */function () {\n function ValueObserver(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n this.invokeChangedCallbacksForDefaultValues();\n }\n ValueObserver.prototype.start = function () {\n this.stringMapObserver.start();\n };\n ValueObserver.prototype.stop = function () {\n this.stringMapObserver.stop();\n };\n Object.defineProperty(ValueObserver.prototype, \"element\", {\n get: function () {\n return this.context.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ValueObserver.prototype, \"controller\", {\n get: function () {\n return this.context.controller;\n },\n enumerable: false,\n configurable: true\n });\n // String map observer delegate\n ValueObserver.prototype.getStringMapKeyForAttribute = function (attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n };\n ValueObserver.prototype.stringMapValueChanged = function (attributeValue, name) {\n this.invokeChangedCallbackForValue(name);\n };\n ValueObserver.prototype.invokeChangedCallbacksForDefaultValues = function () {\n for (var _i = 0, _a = this.valueDescriptors; _i < _a.length; _i++) {\n var _b = _a[_i],\n key = _b.key,\n name_1 = _b.name,\n defaultValue = _b.defaultValue;\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallbackForValue(name_1);\n }\n }\n };\n ValueObserver.prototype.invokeChangedCallbackForValue = function (name) {\n var methodName = name + \"Changed\";\n var method = this.receiver[methodName];\n if (typeof method == \"function\") {\n var value = this.receiver[name];\n method.call(this.receiver, value);\n }\n };\n Object.defineProperty(ValueObserver.prototype, \"valueDescriptors\", {\n get: function () {\n var valueDescriptorMap = this.valueDescriptorMap;\n return Object.keys(valueDescriptorMap).map(function (key) {\n return valueDescriptorMap[key];\n });\n },\n enumerable: false,\n configurable: true\n });\n return ValueObserver;\n}();\nexport { ValueObserver };","import { BindingObserver } from \"./binding_observer\";\nimport { ValueObserver } from \"./value_observer\";\nvar Context = /** @class */function () {\n function Context(module, scope) {\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n try {\n this.controller.initialize();\n } catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n Context.prototype.connect = function () {\n this.bindingObserver.start();\n this.valueObserver.start();\n try {\n this.controller.connect();\n } catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n };\n Context.prototype.disconnect = function () {\n try {\n this.controller.disconnect();\n } catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.valueObserver.stop();\n this.bindingObserver.stop();\n };\n Object.defineProperty(Context.prototype, \"application\", {\n get: function () {\n return this.module.application;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"identifier\", {\n get: function () {\n return this.module.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"schema\", {\n get: function () {\n return this.application.schema;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"dispatcher\", {\n get: function () {\n return this.application.dispatcher;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"parentElement\", {\n get: function () {\n return this.element.parentElement;\n },\n enumerable: false,\n configurable: true\n });\n // Error handling\n Context.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element;\n detail = Object.assign({\n identifier: identifier,\n controller: controller,\n element: element\n }, detail);\n this.application.handleError(error, \"Error \" + message, detail);\n };\n return Context;\n}();\nexport { Context };","export function readInheritableStaticArrayValues(constructor, propertyName) {\n var ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce(function (values, constructor) {\n getOwnStaticArrayValues(constructor, propertyName).forEach(function (name) {\n return values.add(name);\n });\n return values;\n }, new Set()));\n}\nexport function readInheritableStaticObjectPairs(constructor, propertyName) {\n var ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce(function (pairs, constructor) {\n pairs.push.apply(pairs, getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n var ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n var definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n var definition = constructor[propertyName];\n return definition ? Object.keys(definition).map(function (key) {\n return [key, definition[key]];\n }) : [];\n}","var __extends = this && this.__extends || function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n};\nimport { readInheritableStaticArrayValues } from \"./inheritable_statics\";\n/** @hidden */\nexport function bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n var shadowConstructor = extend(constructor);\n var shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n var blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce(function (blessedProperties, blessing) {\n var properties = blessing(constructor);\n for (var key in properties) {\n var descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce(function (shadowProperties, key) {\n var _a;\n var descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, (_a = {}, _a[key] = descriptor, _a));\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n var shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n var shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n var descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nvar getOwnKeys = function () {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return function (object) {\n return __spreadArrays(Object.getOwnPropertyNames(object), Object.getOwnPropertySymbols(object));\n };\n } else {\n return Object.getOwnPropertyNames;\n }\n}();\nvar extend = function () {\n function extendWithReflect(constructor) {\n function extended() {\n var _newTarget = this && this instanceof extended ? this.constructor : void 0;\n return Reflect.construct(constructor, arguments, _newTarget);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: {\n value: extended\n }\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n var a = function () {\n this.a.call(this);\n };\n var b = extendWithReflect(a);\n b.prototype.a = function () {};\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n } catch (error) {\n return function (constructor) {\n return /** @class */function (_super) {\n __extends(extended, _super);\n function extended() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return extended;\n }(constructor);\n };\n }\n}();","import { Context } from \"./context\";\nimport { blessDefinition } from \"./definition\";\nvar Module = /** @class */function () {\n function Module(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n Object.defineProperty(Module.prototype, \"identifier\", {\n get: function () {\n return this.definition.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"controllerConstructor\", {\n get: function () {\n return this.definition.controllerConstructor;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"contexts\", {\n get: function () {\n return Array.from(this.connectedContexts);\n },\n enumerable: false,\n configurable: true\n });\n Module.prototype.connectContextForScope = function (scope) {\n var context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n };\n Module.prototype.disconnectContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n };\n Module.prototype.fetchContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n };\n return Module;\n}();\nexport { Module };","import { bless } from \"./blessing\";\n/** @hidden */\nexport function blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor)\n };\n}","var ClassMap = /** @class */function () {\n function ClassMap(scope) {\n this.scope = scope;\n }\n ClassMap.prototype.has = function (name) {\n return this.data.has(this.getDataKey(name));\n };\n ClassMap.prototype.get = function (name) {\n return this.data.get(this.getDataKey(name));\n };\n ClassMap.prototype.getAttributeName = function (name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n };\n ClassMap.prototype.getDataKey = function (name) {\n return name + \"-class\";\n };\n Object.defineProperty(ClassMap.prototype, \"data\", {\n get: function () {\n return this.scope.data;\n },\n enumerable: false,\n configurable: true\n });\n return ClassMap;\n}();\nexport { ClassMap };","export function camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, function (_, char) {\n return char.toUpperCase();\n });\n}\nexport function capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nexport function dasherize(value) {\n return value.replace(/([A-Z])/g, function (_, char) {\n return \"-\" + char.toLowerCase();\n });\n}","import { dasherize } from \"./string_helpers\";\nvar DataMap = /** @class */function () {\n function DataMap(scope) {\n this.scope = scope;\n }\n Object.defineProperty(DataMap.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DataMap.prototype, \"identifier\", {\n get: function () {\n return this.scope.identifier;\n },\n enumerable: false,\n configurable: true\n });\n DataMap.prototype.get = function (key) {\n var name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n };\n DataMap.prototype.set = function (key, value) {\n var name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n };\n DataMap.prototype.has = function (key) {\n var name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n };\n DataMap.prototype.delete = function (key) {\n if (this.has(key)) {\n var name_1 = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name_1);\n return true;\n } else {\n return false;\n }\n };\n DataMap.prototype.getAttributeNameForKey = function (key) {\n return \"data-\" + this.identifier + \"-\" + dasherize(key);\n };\n return DataMap;\n}();\nexport { DataMap };","var Guide = /** @class */function () {\n function Guide(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n Guide.prototype.warn = function (object, key, message) {\n var warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n };\n return Guide;\n}();\nexport { Guide };","/** @hidden */\nexport function attributeValueContainsToken(attributeName, token) {\n return \"[\" + attributeName + \"~=\\\"\" + token + \"\\\"]\";\n}","var __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n};\nimport { attributeValueContainsToken } from \"./selectors\";\nvar TargetSet = /** @class */function () {\n function TargetSet(scope) {\n this.scope = scope;\n }\n Object.defineProperty(TargetSet.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"identifier\", {\n get: function () {\n return this.scope.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"schema\", {\n get: function () {\n return this.scope.schema;\n },\n enumerable: false,\n configurable: true\n });\n TargetSet.prototype.has = function (targetName) {\n return this.find(targetName) != null;\n };\n TargetSet.prototype.find = function () {\n var _this = this;\n var targetNames = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n return targetNames.reduce(function (target, targetName) {\n return target || _this.findTarget(targetName) || _this.findLegacyTarget(targetName);\n }, undefined);\n };\n TargetSet.prototype.findAll = function () {\n var _this = this;\n var targetNames = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n return targetNames.reduce(function (targets, targetName) {\n return __spreadArrays(targets, _this.findAllTargets(targetName), _this.findAllLegacyTargets(targetName));\n }, []);\n };\n TargetSet.prototype.findTarget = function (targetName) {\n var selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n };\n TargetSet.prototype.findAllTargets = function (targetName) {\n var selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n };\n TargetSet.prototype.getSelectorForTargetName = function (targetName) {\n var attributeName = \"data-\" + this.identifier + \"-target\";\n return attributeValueContainsToken(attributeName, targetName);\n };\n TargetSet.prototype.findLegacyTarget = function (targetName) {\n var selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n };\n TargetSet.prototype.findAllLegacyTargets = function (targetName) {\n var _this = this;\n var selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map(function (element) {\n return _this.deprecate(element, targetName);\n });\n };\n TargetSet.prototype.getLegacySelectorForTargetName = function (targetName) {\n var targetDescriptor = this.identifier + \".\" + targetName;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n };\n TargetSet.prototype.deprecate = function (element, targetName) {\n if (element) {\n var identifier = this.identifier;\n var attributeName = this.schema.targetAttribute;\n this.guide.warn(element, \"target:\" + targetName, \"Please replace \" + attributeName + \"=\\\"\" + identifier + \".\" + targetName + \"\\\" with data-\" + identifier + \"-target=\\\"\" + targetName + \"\\\". \" + (\"The \" + attributeName + \" attribute is deprecated and will be removed in a future version of Stimulus.\"));\n }\n return element;\n };\n Object.defineProperty(TargetSet.prototype, \"guide\", {\n get: function () {\n return this.scope.guide;\n },\n enumerable: false,\n configurable: true\n });\n return TargetSet;\n}();\nexport { TargetSet };","var __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n};\nimport { ClassMap } from \"./class_map\";\nimport { DataMap } from \"./data_map\";\nimport { Guide } from \"./guide\";\nimport { attributeValueContainsToken } from \"./selectors\";\nimport { TargetSet } from \"./target_set\";\nvar Scope = /** @class */function () {\n function Scope(schema, element, identifier, logger) {\n var _this = this;\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = function (element) {\n return element.closest(_this.controllerSelector) === _this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n }\n Scope.prototype.findElement = function (selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n };\n Scope.prototype.findAllElements = function (selector) {\n return __spreadArrays(this.element.matches(selector) ? [this.element] : [], this.queryElements(selector).filter(this.containsElement));\n };\n Scope.prototype.queryElements = function (selector) {\n return Array.from(this.element.querySelectorAll(selector));\n };\n Object.defineProperty(Scope.prototype, \"controllerSelector\", {\n get: function () {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n },\n enumerable: false,\n configurable: true\n });\n return Scope;\n}();\nexport { Scope };","import { ValueListObserver } from \"@stimulus/mutation-observers\";\nvar ScopeObserver = /** @class */function () {\n function ScopeObserver(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n ScopeObserver.prototype.start = function () {\n this.valueListObserver.start();\n };\n ScopeObserver.prototype.stop = function () {\n this.valueListObserver.stop();\n };\n Object.defineProperty(ScopeObserver.prototype, \"controllerAttribute\", {\n get: function () {\n return this.schema.controllerAttribute;\n },\n enumerable: false,\n configurable: true\n });\n // Value observer delegate\n /** @hidden */\n ScopeObserver.prototype.parseValueForToken = function (token) {\n var element = token.element,\n identifier = token.content;\n var scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n var scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n };\n /** @hidden */\n ScopeObserver.prototype.elementMatchedValue = function (element, value) {\n var referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n };\n /** @hidden */\n ScopeObserver.prototype.elementUnmatchedValue = function (element, value) {\n var referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n };\n ScopeObserver.prototype.fetchScopesByIdentifierForElement = function (element) {\n var scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n };\n return ScopeObserver;\n}();\nexport { ScopeObserver };","import { Module } from \"./module\";\nimport { Multimap } from \"@stimulus/multimap\";\nimport { Scope } from \"./scope\";\nimport { ScopeObserver } from \"./scope_observer\";\nvar Router = /** @class */function () {\n function Router(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n Object.defineProperty(Router.prototype, \"element\", {\n get: function () {\n return this.application.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"schema\", {\n get: function () {\n return this.application.schema;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"logger\", {\n get: function () {\n return this.application.logger;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"controllerAttribute\", {\n get: function () {\n return this.schema.controllerAttribute;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"modules\", {\n get: function () {\n return Array.from(this.modulesByIdentifier.values());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"contexts\", {\n get: function () {\n return this.modules.reduce(function (contexts, module) {\n return contexts.concat(module.contexts);\n }, []);\n },\n enumerable: false,\n configurable: true\n });\n Router.prototype.start = function () {\n this.scopeObserver.start();\n };\n Router.prototype.stop = function () {\n this.scopeObserver.stop();\n };\n Router.prototype.loadDefinition = function (definition) {\n this.unloadIdentifier(definition.identifier);\n var module = new Module(this.application, definition);\n this.connectModule(module);\n };\n Router.prototype.unloadIdentifier = function (identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n };\n Router.prototype.getContextForElementAndIdentifier = function (element, identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find(function (context) {\n return context.element == element;\n });\n }\n };\n // Error handler delegate\n /** @hidden */\n Router.prototype.handleError = function (error, message, detail) {\n this.application.handleError(error, message, detail);\n };\n // Scope observer delegate\n /** @hidden */\n Router.prototype.createScopeForElementAndIdentifier = function (element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n };\n /** @hidden */\n Router.prototype.scopeConnected = function (scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n };\n /** @hidden */\n Router.prototype.scopeDisconnected = function (scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n };\n // Modules\n Router.prototype.connectModule = function (module) {\n this.modulesByIdentifier.set(module.identifier, module);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.connectContextForScope(scope);\n });\n };\n Router.prototype.disconnectModule = function (module) {\n this.modulesByIdentifier.delete(module.identifier);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.disconnectContextForScope(scope);\n });\n };\n return Router;\n}();\nexport { Router };","export var defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\"\n};","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function () {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n};\nimport { Dispatcher } from \"./dispatcher\";\nimport { Router } from \"./router\";\nimport { defaultSchema } from \"./schema\";\nvar Application = /** @class */function () {\n function Application(element, schema) {\n if (element === void 0) {\n element = document.documentElement;\n }\n if (schema === void 0) {\n schema = defaultSchema;\n }\n this.logger = console;\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n Application.start = function (element, schema) {\n var application = new Application(element, schema);\n application.start();\n return application;\n };\n Application.prototype.start = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4 /*yield*/, domReady()];\n case 1:\n _a.sent();\n this.dispatcher.start();\n this.router.start();\n return [2 /*return*/];\n }\n });\n });\n };\n Application.prototype.stop = function () {\n this.dispatcher.stop();\n this.router.stop();\n };\n Application.prototype.register = function (identifier, controllerConstructor) {\n this.load({\n identifier: identifier,\n controllerConstructor: controllerConstructor\n });\n };\n Application.prototype.load = function (head) {\n var _this = this;\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var definitions = Array.isArray(head) ? head : __spreadArrays([head], rest);\n definitions.forEach(function (definition) {\n return _this.router.loadDefinition(definition);\n });\n };\n Application.prototype.unload = function (head) {\n var _this = this;\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var identifiers = Array.isArray(head) ? head : __spreadArrays([head], rest);\n identifiers.forEach(function (identifier) {\n return _this.router.unloadIdentifier(identifier);\n });\n };\n Object.defineProperty(Application.prototype, \"controllers\", {\n // Controllers\n get: function () {\n return this.router.contexts.map(function (context) {\n return context.controller;\n });\n },\n enumerable: false,\n configurable: true\n });\n Application.prototype.getControllerForElementAndIdentifier = function (element, identifier) {\n var context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n };\n // Error handling\n Application.prototype.handleError = function (error, message, detail) {\n this.logger.error(\"%s\\n\\n%o\\n\\n%o\", message, error, detail);\n };\n return Application;\n}();\nexport { Application };\nfunction domReady() {\n return new Promise(function (resolve) {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", resolve);\n } else {\n resolve();\n }\n });\n}","import { readInheritableStaticArrayValues } from \"./inheritable_statics\";\nimport { capitalize } from \"./string_helpers\";\n/** @hidden */\nexport function ClassPropertiesBlessing(constructor) {\n var classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce(function (properties, classDefinition) {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n var _a;\n var name = key + \"Class\";\n return _a = {}, _a[name] = {\n get: function () {\n var classes = this.classes;\n if (classes.has(key)) {\n return classes.get(key);\n } else {\n var attribute = classes.getAttributeName(key);\n throw new Error(\"Missing attribute \\\"\" + attribute + \"\\\"\");\n }\n }\n }, _a[\"has\" + capitalize(name)] = {\n get: function () {\n return this.classes.has(key);\n }\n }, _a;\n}","import { readInheritableStaticArrayValues } from \"./inheritable_statics\";\nimport { capitalize } from \"./string_helpers\";\n/** @hidden */\nexport function TargetPropertiesBlessing(constructor) {\n var targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce(function (properties, targetDefinition) {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n var _a;\n return _a = {}, _a[name + \"Target\"] = {\n get: function () {\n var target = this.targets.find(name);\n if (target) {\n return target;\n } else {\n throw new Error(\"Missing target element \\\"\" + this.identifier + \".\" + name + \"\\\"\");\n }\n }\n }, _a[name + \"Targets\"] = {\n get: function () {\n return this.targets.findAll(name);\n }\n }, _a[\"has\" + capitalize(name) + \"Target\"] = {\n get: function () {\n return this.targets.has(name);\n }\n }, _a;\n}","import { readInheritableStaticObjectPairs } from \"./inheritable_statics\";\nimport { camelize, capitalize, dasherize } from \"./string_helpers\";\n/** @hidden */\nexport function ValuePropertiesBlessing(constructor) {\n var valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n var propertyDescriptorMap = {\n valueDescriptorMap: {\n get: function () {\n var _this = this;\n return valueDefinitionPairs.reduce(function (result, valueDefinitionPair) {\n var _a;\n var valueDescriptor = parseValueDefinitionPair(valueDefinitionPair);\n var attributeName = _this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, (_a = {}, _a[attributeName] = valueDescriptor, _a));\n }, {});\n }\n }\n };\n return valueDefinitionPairs.reduce(function (properties, valueDefinitionPair) {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\n/** @hidden */\nexport function propertiesForValueDefinitionPair(valueDefinitionPair) {\n var _a;\n var definition = parseValueDefinitionPair(valueDefinitionPair);\n var type = definition.type,\n key = definition.key,\n name = definition.name;\n var read = readers[type],\n write = writers[type] || writers.default;\n return _a = {}, _a[name] = {\n get: function () {\n var value = this.data.get(key);\n if (value !== null) {\n return read(value);\n } else {\n return definition.defaultValue;\n }\n },\n set: function (value) {\n if (value === undefined) {\n this.data.delete(key);\n } else {\n this.data.set(key, write(value));\n }\n }\n }, _a[\"has\" + capitalize(name)] = {\n get: function () {\n return this.data.has(key);\n }\n }, _a;\n}\nfunction parseValueDefinitionPair(_a) {\n var token = _a[0],\n typeConstant = _a[1];\n var type = parseValueTypeConstant(typeConstant);\n return valueDescriptorForTokenAndType(token, type);\n}\nfunction parseValueTypeConstant(typeConstant) {\n switch (typeConstant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n throw new Error(\"Unknown value type constant \\\"\" + typeConstant + \"\\\"\");\n}\nfunction valueDescriptorForTokenAndType(token, type) {\n var key = dasherize(token) + \"-value\";\n return {\n type: type,\n key: key,\n name: camelize(key),\n get defaultValue() {\n return defaultValuesByType[type];\n }\n };\n}\nvar defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\"\n};\nvar readers = {\n array: function (value) {\n var array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(\"Expected array\");\n }\n return array;\n },\n boolean: function (value) {\n return !(value == \"0\" || value == \"false\");\n },\n number: function (value) {\n return parseFloat(value);\n },\n object: function (value) {\n var object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(\"Expected object\");\n }\n return object;\n },\n string: function (value) {\n return value;\n }\n};\nvar writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return \"\" + value;\n}","import { ClassPropertiesBlessing } from \"./class_properties\";\nimport { TargetPropertiesBlessing } from \"./target_properties\";\nimport { ValuePropertiesBlessing } from \"./value_properties\";\nvar Controller = /** @class */function () {\n function Controller(context) {\n this.context = context;\n }\n Object.defineProperty(Controller.prototype, \"application\", {\n get: function () {\n return this.context.application;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"scope\", {\n get: function () {\n return this.context.scope;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"element\", {\n get: function () {\n return this.scope.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"identifier\", {\n get: function () {\n return this.scope.identifier;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"targets\", {\n get: function () {\n return this.scope.targets;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"classes\", {\n get: function () {\n return this.scope.classes;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"data\", {\n get: function () {\n return this.scope.data;\n },\n enumerable: false,\n configurable: true\n });\n Controller.prototype.initialize = function () {\n // Override in your subclass to set up initial controller state\n };\n Controller.prototype.connect = function () {\n // Override in your subclass to respond when the controller is connected to the DOM\n };\n Controller.prototype.disconnect = function () {\n // Override in your subclass to respond when the controller is disconnected from the DOM\n };\n Controller.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\n Controller.targets = [];\n Controller.values = {};\n return Controller;\n}();\nexport { Controller };","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.GLightbox = factory());\n}(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _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, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n var uid = Date.now();\n function extend() {\n var extended = {};\n var deep = true;\n var i = 0;\n var length = arguments.length;\n\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\n deep = arguments[0];\n i++;\n }\n\n var merge = function merge(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n extended[prop] = extend(true, extended[prop], obj[prop]);\n } else {\n extended[prop] = obj[prop];\n }\n }\n }\n };\n\n for (; i < length; i++) {\n var obj = arguments[i];\n merge(obj);\n }\n\n return extended;\n }\n function each(collection, callback) {\n if (isNode(collection) || collection === window || collection === document) {\n collection = [collection];\n }\n\n if (!isArrayLike(collection) && !isObject(collection)) {\n collection = [collection];\n }\n\n if (size(collection) == 0) {\n return;\n }\n\n if (isArrayLike(collection) && !isObject(collection)) {\n var l = collection.length,\n i = 0;\n\n for (; i < l; i++) {\n if (callback.call(collection[i], collection[i], i, collection) === false) {\n break;\n }\n }\n } else if (isObject(collection)) {\n for (var key in collection) {\n if (has(collection, key)) {\n if (callback.call(collection[key], collection[key], key, collection) === false) {\n break;\n }\n }\n }\n }\n }\n function getNodeEvents(node) {\n var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var cache = node[uid] = node[uid] || [];\n var data = {\n all: cache,\n evt: null,\n found: null\n };\n\n if (name && fn && size(cache) > 0) {\n each(cache, function (cl, i) {\n if (cl.eventName == name && cl.fn.toString() == fn.toString()) {\n data.found = true;\n data.evt = i;\n return false;\n }\n });\n }\n\n return data;\n }\n function addEvent(eventName) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onElement = _ref.onElement,\n withCallback = _ref.withCallback,\n _ref$avoidDuplicate = _ref.avoidDuplicate,\n avoidDuplicate = _ref$avoidDuplicate === void 0 ? true : _ref$avoidDuplicate,\n _ref$once = _ref.once,\n once = _ref$once === void 0 ? false : _ref$once,\n _ref$useCapture = _ref.useCapture,\n useCapture = _ref$useCapture === void 0 ? false : _ref$useCapture;\n\n var thisArg = arguments.length > 2 ? arguments[2] : undefined;\n var element = onElement || [];\n\n if (isString(element)) {\n element = document.querySelectorAll(element);\n }\n\n function handler(event) {\n if (isFunction(withCallback)) {\n withCallback.call(thisArg, event, this);\n }\n\n if (once) {\n handler.destroy();\n }\n }\n\n handler.destroy = function () {\n each(element, function (el) {\n var events = getNodeEvents(el, eventName, handler);\n\n if (events.found) {\n events.all.splice(events.evt, 1);\n }\n\n if (el.removeEventListener) {\n el.removeEventListener(eventName, handler, useCapture);\n }\n });\n };\n\n each(element, function (el) {\n var events = getNodeEvents(el, eventName, handler);\n\n if (el.addEventListener && avoidDuplicate && !events.found || !avoidDuplicate) {\n el.addEventListener(eventName, handler, useCapture);\n events.all.push({\n eventName: eventName,\n fn: handler\n });\n }\n });\n return handler;\n }\n function addClass(node, name) {\n each(name.split(' '), function (cl) {\n return node.classList.add(cl);\n });\n }\n function removeClass(node, name) {\n each(name.split(' '), function (cl) {\n return node.classList.remove(cl);\n });\n }\n function hasClass(node, name) {\n return node.classList.contains(name);\n }\n function closest(elem, selector) {\n while (elem !== document.body) {\n elem = elem.parentElement;\n\n if (!elem) {\n return false;\n }\n\n var matches = typeof elem.matches == 'function' ? elem.matches(selector) : elem.msMatchesSelector(selector);\n\n if (matches) {\n return elem;\n }\n }\n }\n function animateElement(element) {\n var animation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (!element || animation === '') {\n return false;\n }\n\n if (animation == 'none') {\n if (isFunction(callback)) {\n callback();\n }\n\n return false;\n }\n\n var animationEnd = whichAnimationEvent();\n var animationNames = animation.split(' ');\n each(animationNames, function (name) {\n addClass(element, 'g' + name);\n });\n addEvent(animationEnd, {\n onElement: element,\n avoidDuplicate: false,\n once: true,\n withCallback: function withCallback(event, target) {\n each(animationNames, function (name) {\n removeClass(target, 'g' + name);\n });\n\n if (isFunction(callback)) {\n callback();\n }\n }\n });\n }\n function cssTransform(node) {\n var translate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (translate == '') {\n node.style.webkitTransform = '';\n node.style.MozTransform = '';\n node.style.msTransform = '';\n node.style.OTransform = '';\n node.style.transform = '';\n return false;\n }\n\n node.style.webkitTransform = translate;\n node.style.MozTransform = translate;\n node.style.msTransform = translate;\n node.style.OTransform = translate;\n node.style.transform = translate;\n }\n function show(element) {\n element.style.display = 'block';\n }\n function hide(element) {\n element.style.display = 'none';\n }\n function createHTML(htmlStr) {\n var frag = document.createDocumentFragment(),\n temp = document.createElement('div');\n temp.innerHTML = htmlStr;\n\n while (temp.firstChild) {\n frag.appendChild(temp.firstChild);\n }\n\n return frag;\n }\n function windowSize() {\n return {\n width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,\n height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n };\n }\n function whichAnimationEvent() {\n var t,\n el = document.createElement('fakeelement');\n var animations = {\n animation: 'animationend',\n OAnimation: 'oAnimationEnd',\n MozAnimation: 'animationend',\n WebkitAnimation: 'webkitAnimationEnd'\n };\n\n for (t in animations) {\n if (el.style[t] !== undefined) {\n return animations[t];\n }\n }\n }\n function whichTransitionEvent() {\n var t,\n el = document.createElement('fakeelement');\n var transitions = {\n transition: 'transitionend',\n OTransition: 'oTransitionEnd',\n MozTransition: 'transitionend',\n WebkitTransition: 'webkitTransitionEnd'\n };\n\n for (t in transitions) {\n if (el.style[t] !== undefined) {\n return transitions[t];\n }\n }\n }\n function createIframe(config) {\n var url = config.url,\n allow = config.allow,\n callback = config.callback,\n appendTo = config.appendTo;\n var iframe = document.createElement('iframe');\n iframe.className = 'vimeo-video gvideo';\n iframe.src = url;\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n\n if (allow) {\n iframe.setAttribute('allow', allow);\n }\n\n iframe.onload = function () {\n addClass(iframe, 'node-ready');\n\n if (isFunction(callback)) {\n callback();\n }\n };\n\n if (appendTo) {\n appendTo.appendChild(iframe);\n }\n\n return iframe;\n }\n function waitUntil(check, onComplete, delay, timeout) {\n if (check()) {\n onComplete();\n return;\n }\n\n if (!delay) {\n delay = 100;\n }\n\n var timeoutPointer;\n var intervalPointer = setInterval(function () {\n if (!check()) {\n return;\n }\n\n clearInterval(intervalPointer);\n\n if (timeoutPointer) {\n clearTimeout(timeoutPointer);\n }\n\n onComplete();\n }, delay);\n\n if (timeout) {\n timeoutPointer = setTimeout(function () {\n clearInterval(intervalPointer);\n }, timeout);\n }\n }\n function injectAssets(url, waitFor, callback) {\n if (isNil(url)) {\n console.error('Inject assets error');\n return;\n }\n\n if (isFunction(waitFor)) {\n callback = waitFor;\n waitFor = false;\n }\n\n if (isString(waitFor) && waitFor in window) {\n if (isFunction(callback)) {\n callback();\n }\n\n return;\n }\n\n var found;\n\n if (url.indexOf('.css') !== -1) {\n found = document.querySelectorAll('link[href=\"' + url + '\"]');\n\n if (found && found.length > 0) {\n if (isFunction(callback)) {\n callback();\n }\n\n return;\n }\n\n var head = document.getElementsByTagName('head')[0];\n var headStyles = head.querySelectorAll('link[rel=\"stylesheet\"]');\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n link.media = 'all';\n\n if (headStyles) {\n head.insertBefore(link, headStyles[0]);\n } else {\n head.appendChild(link);\n }\n\n if (isFunction(callback)) {\n callback();\n }\n\n return;\n }\n\n found = document.querySelectorAll('script[src=\"' + url + '\"]');\n\n if (found && found.length > 0) {\n if (isFunction(callback)) {\n if (isString(waitFor)) {\n waitUntil(function () {\n return typeof window[waitFor] !== 'undefined';\n }, function () {\n callback();\n });\n return false;\n }\n\n callback();\n }\n\n return;\n }\n\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n\n script.onload = function () {\n if (isFunction(callback)) {\n if (isString(waitFor)) {\n waitUntil(function () {\n return typeof window[waitFor] !== 'undefined';\n }, function () {\n callback();\n });\n return false;\n }\n\n callback();\n }\n };\n\n document.body.appendChild(script);\n return;\n }\n function isMobile() {\n return 'navigator' in window && window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i);\n }\n function isTouch() {\n return isMobile() !== null || document.createTouch !== undefined || 'ontouchstart' in window || 'onmsgesturechange' in window || navigator.msMaxTouchPoints;\n }\n function isFunction(f) {\n return typeof f === 'function';\n }\n function isString(s) {\n return typeof s === 'string';\n }\n function isNode(el) {\n return !!(el && el.nodeType && el.nodeType == 1);\n }\n function isArray(ar) {\n return Array.isArray(ar);\n }\n function isArrayLike(ar) {\n return ar && ar.length && isFinite(ar.length);\n }\n function isObject(o) {\n var type = _typeof(o);\n\n return type === 'object' && o != null && !isFunction(o) && !isArray(o);\n }\n function isNil(o) {\n return o == null;\n }\n function has(obj, key) {\n return obj !== null && hasOwnProperty.call(obj, key);\n }\n function size(o) {\n if (isObject(o)) {\n if (o.keys) {\n return o.keys().length;\n }\n\n var l = 0;\n\n for (var k in o) {\n if (has(o, k)) {\n l++;\n }\n }\n\n return l;\n } else {\n return o.length;\n }\n }\n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function getNextFocusElement() {\n var current = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\n var btns = document.querySelectorAll('.gbtn[data-taborder]:not(.disabled)');\n\n if (!btns.length) {\n return false;\n }\n\n if (btns.length == 1) {\n return btns[0];\n }\n\n if (typeof current == 'string') {\n current = parseInt(current);\n }\n\n var newIndex = current < 0 ? 1 : current + 1;\n\n if (newIndex > btns.length) {\n newIndex = '1';\n }\n\n var orders = [];\n each(btns, function (btn) {\n orders.push(btn.getAttribute('data-taborder'));\n });\n var nextOrders = orders.filter(function (el) {\n return el >= parseInt(newIndex);\n });\n var nextFocus = nextOrders.sort()[0];\n return document.querySelector(\".gbtn[data-taborder=\\\"\".concat(nextFocus, \"\\\"]\"));\n }\n\n function keyboardNavigation(instance) {\n if (instance.events.hasOwnProperty('keyboard')) {\n return false;\n }\n\n instance.events['keyboard'] = addEvent('keydown', {\n onElement: window,\n withCallback: function withCallback(event, target) {\n event = event || window.event;\n var key = event.keyCode;\n\n if (key == 9) {\n var focusedButton = document.querySelector('.gbtn.focused');\n\n if (!focusedButton) {\n var activeElement = document.activeElement && document.activeElement.nodeName ? document.activeElement.nodeName.toLocaleLowerCase() : false;\n\n if (activeElement == 'input' || activeElement == 'textarea' || activeElement == 'button') {\n return;\n }\n }\n\n event.preventDefault();\n var btns = document.querySelectorAll('.gbtn[data-taborder]');\n\n if (!btns || btns.length <= 0) {\n return;\n }\n\n if (!focusedButton) {\n var first = getNextFocusElement();\n\n if (first) {\n first.focus();\n addClass(first, 'focused');\n }\n\n return;\n }\n\n var currentFocusOrder = focusedButton.getAttribute('data-taborder');\n var nextFocus = getNextFocusElement(currentFocusOrder);\n removeClass(focusedButton, 'focused');\n\n if (nextFocus) {\n nextFocus.focus();\n addClass(nextFocus, 'focused');\n }\n }\n\n if (key == 39) {\n instance.nextSlide();\n }\n\n if (key == 37) {\n instance.prevSlide();\n }\n\n if (key == 27) {\n instance.close();\n }\n }\n });\n }\n\n function getLen(v) {\n return Math.sqrt(v.x * v.x + v.y * v.y);\n }\n\n function dot(v1, v2) {\n return v1.x * v2.x + v1.y * v2.y;\n }\n\n function getAngle(v1, v2) {\n var mr = getLen(v1) * getLen(v2);\n\n if (mr === 0) {\n return 0;\n }\n\n var r = dot(v1, v2) / mr;\n\n if (r > 1) {\n r = 1;\n }\n\n return Math.acos(r);\n }\n\n function cross(v1, v2) {\n return v1.x * v2.y - v2.x * v1.y;\n }\n\n function getRotateAngle(v1, v2) {\n var angle = getAngle(v1, v2);\n\n if (cross(v1, v2) > 0) {\n angle *= -1;\n }\n\n return angle * 180 / Math.PI;\n }\n\n var EventsHandlerAdmin = function () {\n function EventsHandlerAdmin(el) {\n _classCallCheck(this, EventsHandlerAdmin);\n\n this.handlers = [];\n this.el = el;\n }\n\n _createClass(EventsHandlerAdmin, [{\n key: \"add\",\n value: function add(handler) {\n this.handlers.push(handler);\n }\n }, {\n key: \"del\",\n value: function del(handler) {\n if (!handler) {\n this.handlers = [];\n }\n\n for (var i = this.handlers.length; i >= 0; i--) {\n if (this.handlers[i] === handler) {\n this.handlers.splice(i, 1);\n }\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch() {\n for (var i = 0, len = this.handlers.length; i < len; i++) {\n var handler = this.handlers[i];\n\n if (typeof handler === 'function') {\n handler.apply(this.el, arguments);\n }\n }\n }\n }]);\n\n return EventsHandlerAdmin;\n }();\n\n function wrapFunc(el, handler) {\n var EventshandlerAdmin = new EventsHandlerAdmin(el);\n EventshandlerAdmin.add(handler);\n return EventshandlerAdmin;\n }\n\n var TouchEvents = function () {\n function TouchEvents(el, option) {\n _classCallCheck(this, TouchEvents);\n\n this.element = typeof el == 'string' ? document.querySelector(el) : el;\n this.start = this.start.bind(this);\n this.move = this.move.bind(this);\n this.end = this.end.bind(this);\n this.cancel = this.cancel.bind(this);\n this.element.addEventListener('touchstart', this.start, false);\n this.element.addEventListener('touchmove', this.move, false);\n this.element.addEventListener('touchend', this.end, false);\n this.element.addEventListener('touchcancel', this.cancel, false);\n this.preV = {\n x: null,\n y: null\n };\n this.pinchStartLen = null;\n this.zoom = 1;\n this.isDoubleTap = false;\n\n var noop = function noop() {};\n\n this.rotate = wrapFunc(this.element, option.rotate || noop);\n this.touchStart = wrapFunc(this.element, option.touchStart || noop);\n this.multipointStart = wrapFunc(this.element, option.multipointStart || noop);\n this.multipointEnd = wrapFunc(this.element, option.multipointEnd || noop);\n this.pinch = wrapFunc(this.element, option.pinch || noop);\n this.swipe = wrapFunc(this.element, option.swipe || noop);\n this.tap = wrapFunc(this.element, option.tap || noop);\n this.doubleTap = wrapFunc(this.element, option.doubleTap || noop);\n this.longTap = wrapFunc(this.element, option.longTap || noop);\n this.singleTap = wrapFunc(this.element, option.singleTap || noop);\n this.pressMove = wrapFunc(this.element, option.pressMove || noop);\n this.twoFingerPressMove = wrapFunc(this.element, option.twoFingerPressMove || noop);\n this.touchMove = wrapFunc(this.element, option.touchMove || noop);\n this.touchEnd = wrapFunc(this.element, option.touchEnd || noop);\n this.touchCancel = wrapFunc(this.element, option.touchCancel || noop);\n this.translateContainer = this.element;\n this._cancelAllHandler = this.cancelAll.bind(this);\n window.addEventListener('scroll', this._cancelAllHandler);\n this.delta = null;\n this.last = null;\n this.now = null;\n this.tapTimeout = null;\n this.singleTapTimeout = null;\n this.longTapTimeout = null;\n this.swipeTimeout = null;\n this.x1 = this.x2 = this.y1 = this.y2 = null;\n this.preTapPosition = {\n x: null,\n y: null\n };\n }\n\n _createClass(TouchEvents, [{\n key: \"start\",\n value: function start(evt) {\n if (!evt.touches) {\n return;\n }\n\n var ignoreDragFor = ['a', 'button', 'input'];\n\n if (evt.target && evt.target.nodeName && ignoreDragFor.indexOf(evt.target.nodeName.toLowerCase()) >= 0) {\n console.log('ignore drag for this touched element', evt.target.nodeName.toLowerCase());\n return;\n }\n\n this.now = Date.now();\n this.x1 = evt.touches[0].pageX;\n this.y1 = evt.touches[0].pageY;\n this.delta = this.now - (this.last || this.now);\n this.touchStart.dispatch(evt, this.element);\n\n if (this.preTapPosition.x !== null) {\n this.isDoubleTap = this.delta > 0 && this.delta <= 250 && Math.abs(this.preTapPosition.x - this.x1) < 30 && Math.abs(this.preTapPosition.y - this.y1) < 30;\n\n if (this.isDoubleTap) {\n clearTimeout(this.singleTapTimeout);\n }\n }\n\n this.preTapPosition.x = this.x1;\n this.preTapPosition.y = this.y1;\n this.last = this.now;\n var preV = this.preV,\n len = evt.touches.length;\n\n if (len > 1) {\n this._cancelLongTap();\n\n this._cancelSingleTap();\n\n var v = {\n x: evt.touches[1].pageX - this.x1,\n y: evt.touches[1].pageY - this.y1\n };\n preV.x = v.x;\n preV.y = v.y;\n this.pinchStartLen = getLen(preV);\n this.multipointStart.dispatch(evt, this.element);\n }\n\n this._preventTap = false;\n this.longTapTimeout = setTimeout(function () {\n this.longTap.dispatch(evt, this.element);\n this._preventTap = true;\n }.bind(this), 750);\n }\n }, {\n key: \"move\",\n value: function move(evt) {\n if (!evt.touches) {\n return;\n }\n\n var preV = this.preV,\n len = evt.touches.length,\n currentX = evt.touches[0].pageX,\n currentY = evt.touches[0].pageY;\n this.isDoubleTap = false;\n\n if (len > 1) {\n var sCurrentX = evt.touches[1].pageX,\n sCurrentY = evt.touches[1].pageY;\n var v = {\n x: evt.touches[1].pageX - currentX,\n y: evt.touches[1].pageY - currentY\n };\n\n if (preV.x !== null) {\n if (this.pinchStartLen > 0) {\n evt.zoom = getLen(v) / this.pinchStartLen;\n this.pinch.dispatch(evt, this.element);\n }\n\n evt.angle = getRotateAngle(v, preV);\n this.rotate.dispatch(evt, this.element);\n }\n\n preV.x = v.x;\n preV.y = v.y;\n\n if (this.x2 !== null && this.sx2 !== null) {\n evt.deltaX = (currentX - this.x2 + sCurrentX - this.sx2) / 2;\n evt.deltaY = (currentY - this.y2 + sCurrentY - this.sy2) / 2;\n } else {\n evt.deltaX = 0;\n evt.deltaY = 0;\n }\n\n this.twoFingerPressMove.dispatch(evt, this.element);\n this.sx2 = sCurrentX;\n this.sy2 = sCurrentY;\n } else {\n if (this.x2 !== null) {\n evt.deltaX = currentX - this.x2;\n evt.deltaY = currentY - this.y2;\n var movedX = Math.abs(this.x1 - this.x2),\n movedY = Math.abs(this.y1 - this.y2);\n\n if (movedX > 10 || movedY > 10) {\n this._preventTap = true;\n }\n } else {\n evt.deltaX = 0;\n evt.deltaY = 0;\n }\n\n this.pressMove.dispatch(evt, this.element);\n }\n\n this.touchMove.dispatch(evt, this.element);\n\n this._cancelLongTap();\n\n this.x2 = currentX;\n this.y2 = currentY;\n\n if (len > 1) {\n evt.preventDefault();\n }\n }\n }, {\n key: \"end\",\n value: function end(evt) {\n if (!evt.changedTouches) {\n return;\n }\n\n this._cancelLongTap();\n\n var self = this;\n\n if (evt.touches.length < 2) {\n this.multipointEnd.dispatch(evt, this.element);\n this.sx2 = this.sy2 = null;\n }\n\n if (this.x2 && Math.abs(this.x1 - this.x2) > 30 || this.y2 && Math.abs(this.y1 - this.y2) > 30) {\n evt.direction = this._swipeDirection(this.x1, this.x2, this.y1, this.y2);\n this.swipeTimeout = setTimeout(function () {\n self.swipe.dispatch(evt, self.element);\n }, 0);\n } else {\n this.tapTimeout = setTimeout(function () {\n if (!self._preventTap) {\n self.tap.dispatch(evt, self.element);\n }\n\n if (self.isDoubleTap) {\n self.doubleTap.dispatch(evt, self.element);\n self.isDoubleTap = false;\n }\n }, 0);\n\n if (!self.isDoubleTap) {\n self.singleTapTimeout = setTimeout(function () {\n self.singleTap.dispatch(evt, self.element);\n }, 250);\n }\n }\n\n this.touchEnd.dispatch(evt, this.element);\n this.preV.x = 0;\n this.preV.y = 0;\n this.zoom = 1;\n this.pinchStartLen = null;\n this.x1 = this.x2 = this.y1 = this.y2 = null;\n }\n }, {\n key: \"cancelAll\",\n value: function cancelAll() {\n this._preventTap = true;\n clearTimeout(this.singleTapTimeout);\n clearTimeout(this.tapTimeout);\n clearTimeout(this.longTapTimeout);\n clearTimeout(this.swipeTimeout);\n }\n }, {\n key: \"cancel\",\n value: function cancel(evt) {\n this.cancelAll();\n this.touchCancel.dispatch(evt, this.element);\n }\n }, {\n key: \"_cancelLongTap\",\n value: function _cancelLongTap() {\n clearTimeout(this.longTapTimeout);\n }\n }, {\n key: \"_cancelSingleTap\",\n value: function _cancelSingleTap() {\n clearTimeout(this.singleTapTimeout);\n }\n }, {\n key: \"_swipeDirection\",\n value: function _swipeDirection(x1, x2, y1, y2) {\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? 'Left' : 'Right' : y1 - y2 > 0 ? 'Up' : 'Down';\n }\n }, {\n key: \"on\",\n value: function on(evt, handler) {\n if (this[evt]) {\n this[evt].add(handler);\n }\n }\n }, {\n key: \"off\",\n value: function off(evt, handler) {\n if (this[evt]) {\n this[evt].del(handler);\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this.singleTapTimeout) {\n clearTimeout(this.singleTapTimeout);\n }\n\n if (this.tapTimeout) {\n clearTimeout(this.tapTimeout);\n }\n\n if (this.longTapTimeout) {\n clearTimeout(this.longTapTimeout);\n }\n\n if (this.swipeTimeout) {\n clearTimeout(this.swipeTimeout);\n }\n\n this.element.removeEventListener('touchstart', this.start);\n this.element.removeEventListener('touchmove', this.move);\n this.element.removeEventListener('touchend', this.end);\n this.element.removeEventListener('touchcancel', this.cancel);\n this.rotate.del();\n this.touchStart.del();\n this.multipointStart.del();\n this.multipointEnd.del();\n this.pinch.del();\n this.swipe.del();\n this.tap.del();\n this.doubleTap.del();\n this.longTap.del();\n this.singleTap.del();\n this.pressMove.del();\n this.twoFingerPressMove.del();\n this.touchMove.del();\n this.touchEnd.del();\n this.touchCancel.del();\n this.preV = this.pinchStartLen = this.zoom = this.isDoubleTap = this.delta = this.last = this.now = this.tapTimeout = this.singleTapTimeout = this.longTapTimeout = this.swipeTimeout = this.x1 = this.x2 = this.y1 = this.y2 = this.preTapPosition = this.rotate = this.touchStart = this.multipointStart = this.multipointEnd = this.pinch = this.swipe = this.tap = this.doubleTap = this.longTap = this.singleTap = this.pressMove = this.touchMove = this.touchEnd = this.touchCancel = this.twoFingerPressMove = null;\n window.removeEventListener('scroll', this._cancelAllHandler);\n return null;\n }\n }]);\n\n return TouchEvents;\n }();\n\n function resetSlideMove(slide) {\n var transitionEnd = whichTransitionEvent();\n var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n var media = hasClass(slide, 'gslide-media') ? slide : slide.querySelector('.gslide-media');\n var container = closest(media, '.ginner-container');\n var desc = slide.querySelector('.gslide-description');\n\n if (windowWidth > 769) {\n media = container;\n }\n\n addClass(media, 'greset');\n cssTransform(media, 'translate3d(0, 0, 0)');\n addEvent(transitionEnd, {\n onElement: media,\n once: true,\n withCallback: function withCallback(event, target) {\n removeClass(media, 'greset');\n }\n });\n media.style.opacity = '';\n\n if (desc) {\n desc.style.opacity = '';\n }\n }\n\n function touchNavigation(instance) {\n if (instance.events.hasOwnProperty('touch')) {\n return false;\n }\n\n var winSize = windowSize();\n var winWidth = winSize.width;\n var winHeight = winSize.height;\n var process = false;\n var currentSlide = null;\n var media = null;\n var mediaImage = null;\n var doingMove = false;\n var initScale = 1;\n var maxScale = 4.5;\n var currentScale = 1;\n var doingZoom = false;\n var imageZoomed = false;\n var zoomedPosX = null;\n var zoomedPosY = null;\n var lastZoomedPosX = null;\n var lastZoomedPosY = null;\n var hDistance;\n var vDistance;\n var hDistancePercent = 0;\n var vDistancePercent = 0;\n var vSwipe = false;\n var hSwipe = false;\n var startCoords = {};\n var endCoords = {};\n var xDown = 0;\n var yDown = 0;\n var isInlined;\n var sliderWrapper = document.getElementById('glightbox-slider');\n var overlay = document.querySelector('.goverlay');\n var touchInstance = new TouchEvents(sliderWrapper, {\n touchStart: function touchStart(e) {\n process = true;\n\n if (hasClass(e.targetTouches[0].target, 'ginner-container') || closest(e.targetTouches[0].target, '.gslide-desc') || e.targetTouches[0].target.nodeName.toLowerCase() == 'a') {\n process = false;\n }\n\n if (closest(e.targetTouches[0].target, '.gslide-inline') && !hasClass(e.targetTouches[0].target.parentNode, 'gslide-inline')) {\n process = false;\n }\n\n if (process) {\n endCoords = e.targetTouches[0];\n startCoords.pageX = e.targetTouches[0].pageX;\n startCoords.pageY = e.targetTouches[0].pageY;\n xDown = e.targetTouches[0].clientX;\n yDown = e.targetTouches[0].clientY;\n currentSlide = instance.activeSlide;\n media = currentSlide.querySelector('.gslide-media');\n isInlined = currentSlide.querySelector('.gslide-inline');\n mediaImage = null;\n\n if (hasClass(media, 'gslide-image')) {\n mediaImage = media.querySelector('img');\n }\n\n var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n\n if (windowWidth > 769) {\n media = currentSlide.querySelector('.ginner-container');\n }\n\n removeClass(overlay, 'greset');\n\n if (e.pageX > 20 && e.pageX < window.innerWidth - 20) {\n return;\n }\n\n e.preventDefault();\n }\n },\n touchMove: function touchMove(e) {\n if (!process) {\n return;\n }\n\n endCoords = e.targetTouches[0];\n\n if (doingZoom || imageZoomed) {\n return;\n }\n\n if (isInlined && isInlined.offsetHeight > winHeight) {\n var moved = startCoords.pageX - endCoords.pageX;\n\n if (Math.abs(moved) <= 13) {\n return false;\n }\n }\n\n doingMove = true;\n var xUp = e.targetTouches[0].clientX;\n var yUp = e.targetTouches[0].clientY;\n var xDiff = xDown - xUp;\n var yDiff = yDown - yUp;\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\n vSwipe = false;\n hSwipe = true;\n } else {\n hSwipe = false;\n vSwipe = true;\n }\n\n hDistance = endCoords.pageX - startCoords.pageX;\n hDistancePercent = hDistance * 100 / winWidth;\n vDistance = endCoords.pageY - startCoords.pageY;\n vDistancePercent = vDistance * 100 / winHeight;\n var opacity;\n\n if (vSwipe && mediaImage) {\n opacity = 1 - Math.abs(vDistance) / winHeight;\n overlay.style.opacity = opacity;\n\n if (instance.settings.touchFollowAxis) {\n hDistancePercent = 0;\n }\n }\n\n if (hSwipe) {\n opacity = 1 - Math.abs(hDistance) / winWidth;\n media.style.opacity = opacity;\n\n if (instance.settings.touchFollowAxis) {\n vDistancePercent = 0;\n }\n }\n\n if (!mediaImage) {\n return cssTransform(media, \"translate3d(\".concat(hDistancePercent, \"%, 0, 0)\"));\n }\n\n cssTransform(media, \"translate3d(\".concat(hDistancePercent, \"%, \").concat(vDistancePercent, \"%, 0)\"));\n },\n touchEnd: function touchEnd() {\n if (!process) {\n return;\n }\n\n doingMove = false;\n\n if (imageZoomed || doingZoom) {\n lastZoomedPosX = zoomedPosX;\n lastZoomedPosY = zoomedPosY;\n return;\n }\n\n var v = Math.abs(parseInt(vDistancePercent));\n var h = Math.abs(parseInt(hDistancePercent));\n\n if (v > 29 && mediaImage) {\n instance.close();\n return;\n }\n\n if (v < 29 && h < 25) {\n addClass(overlay, 'greset');\n overlay.style.opacity = 1;\n return resetSlideMove(media);\n }\n },\n multipointEnd: function multipointEnd() {\n setTimeout(function () {\n doingZoom = false;\n }, 50);\n },\n multipointStart: function multipointStart() {\n doingZoom = true;\n initScale = currentScale ? currentScale : 1;\n },\n pinch: function pinch(evt) {\n if (!mediaImage || doingMove) {\n return false;\n }\n\n doingZoom = true;\n mediaImage.scaleX = mediaImage.scaleY = initScale * evt.zoom;\n var scale = initScale * evt.zoom;\n imageZoomed = true;\n\n if (scale <= 1) {\n imageZoomed = false;\n scale = 1;\n lastZoomedPosY = null;\n lastZoomedPosX = null;\n zoomedPosX = null;\n zoomedPosY = null;\n mediaImage.setAttribute('style', '');\n return;\n }\n\n if (scale > maxScale) {\n scale = maxScale;\n }\n\n mediaImage.style.transform = \"scale3d(\".concat(scale, \", \").concat(scale, \", 1)\");\n currentScale = scale;\n },\n pressMove: function pressMove(e) {\n if (imageZoomed && !doingZoom) {\n var mhDistance = endCoords.pageX - startCoords.pageX;\n var mvDistance = endCoords.pageY - startCoords.pageY;\n\n if (lastZoomedPosX) {\n mhDistance = mhDistance + lastZoomedPosX;\n }\n\n if (lastZoomedPosY) {\n mvDistance = mvDistance + lastZoomedPosY;\n }\n\n zoomedPosX = mhDistance;\n zoomedPosY = mvDistance;\n var style = \"translate3d(\".concat(mhDistance, \"px, \").concat(mvDistance, \"px, 0)\");\n\n if (currentScale) {\n style += \" scale3d(\".concat(currentScale, \", \").concat(currentScale, \", 1)\");\n }\n\n cssTransform(mediaImage, style);\n }\n },\n swipe: function swipe(evt) {\n if (imageZoomed) {\n return;\n }\n\n if (doingZoom) {\n doingZoom = false;\n return;\n }\n\n if (evt.direction == 'Left') {\n if (instance.index == instance.elements.length - 1) {\n return resetSlideMove(media);\n }\n\n instance.nextSlide();\n }\n\n if (evt.direction == 'Right') {\n if (instance.index == 0) {\n return resetSlideMove(media);\n }\n\n instance.prevSlide();\n }\n }\n });\n instance.events['touch'] = touchInstance;\n }\n\n var ZoomImages = function () {\n function ZoomImages(el, slide) {\n var _this = this;\n\n var onclose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n _classCallCheck(this, ZoomImages);\n\n this.img = el;\n this.slide = slide;\n this.onclose = onclose;\n\n if (this.img.setZoomEvents) {\n return false;\n }\n\n this.active = false;\n this.zoomedIn = false;\n this.dragging = false;\n this.currentX = null;\n this.currentY = null;\n this.initialX = null;\n this.initialY = null;\n this.xOffset = 0;\n this.yOffset = 0;\n this.img.addEventListener('mousedown', function (e) {\n return _this.dragStart(e);\n }, false);\n this.img.addEventListener('mouseup', function (e) {\n return _this.dragEnd(e);\n }, false);\n this.img.addEventListener('mousemove', function (e) {\n return _this.drag(e);\n }, false);\n this.img.addEventListener('click', function (e) {\n if (_this.slide.classList.contains('dragging-nav')) {\n _this.zoomOut();\n\n return false;\n }\n\n if (!_this.zoomedIn) {\n return _this.zoomIn();\n }\n\n if (_this.zoomedIn && !_this.dragging) {\n _this.zoomOut();\n }\n }, false);\n this.img.setZoomEvents = true;\n }\n\n _createClass(ZoomImages, [{\n key: \"zoomIn\",\n value: function zoomIn() {\n var winWidth = this.widowWidth();\n\n if (this.zoomedIn || winWidth <= 768) {\n return;\n }\n\n var img = this.img;\n img.setAttribute('data-style', img.getAttribute('style'));\n img.style.maxWidth = img.naturalWidth + 'px';\n img.style.maxHeight = img.naturalHeight + 'px';\n\n if (img.naturalWidth > winWidth) {\n var centerX = winWidth / 2 - img.naturalWidth / 2;\n this.setTranslate(this.img.parentNode, centerX, 0);\n }\n\n this.slide.classList.add('zoomed');\n this.zoomedIn = true;\n }\n }, {\n key: \"zoomOut\",\n value: function zoomOut() {\n this.img.parentNode.setAttribute('style', '');\n this.img.setAttribute('style', this.img.getAttribute('data-style'));\n this.slide.classList.remove('zoomed');\n this.zoomedIn = false;\n this.currentX = null;\n this.currentY = null;\n this.initialX = null;\n this.initialY = null;\n this.xOffset = 0;\n this.yOffset = 0;\n\n if (this.onclose && typeof this.onclose == 'function') {\n this.onclose();\n }\n }\n }, {\n key: \"dragStart\",\n value: function dragStart(e) {\n e.preventDefault();\n\n if (!this.zoomedIn) {\n this.active = false;\n return;\n }\n\n if (e.type === 'touchstart') {\n this.initialX = e.touches[0].clientX - this.xOffset;\n this.initialY = e.touches[0].clientY - this.yOffset;\n } else {\n this.initialX = e.clientX - this.xOffset;\n this.initialY = e.clientY - this.yOffset;\n }\n\n if (e.target === this.img) {\n this.active = true;\n this.img.classList.add('dragging');\n }\n }\n }, {\n key: \"dragEnd\",\n value: function dragEnd(e) {\n var _this2 = this;\n\n e.preventDefault();\n this.initialX = this.currentX;\n this.initialY = this.currentY;\n this.active = false;\n setTimeout(function () {\n _this2.dragging = false;\n _this2.img.isDragging = false;\n\n _this2.img.classList.remove('dragging');\n }, 100);\n }\n }, {\n key: \"drag\",\n value: function drag(e) {\n if (this.active) {\n e.preventDefault();\n\n if (e.type === 'touchmove') {\n this.currentX = e.touches[0].clientX - this.initialX;\n this.currentY = e.touches[0].clientY - this.initialY;\n } else {\n this.currentX = e.clientX - this.initialX;\n this.currentY = e.clientY - this.initialY;\n }\n\n this.xOffset = this.currentX;\n this.yOffset = this.currentY;\n this.img.isDragging = true;\n this.dragging = true;\n this.setTranslate(this.img, this.currentX, this.currentY);\n }\n }\n }, {\n key: \"onMove\",\n value: function onMove(e) {\n if (!this.zoomedIn) {\n return;\n }\n\n var xOffset = e.clientX - this.img.naturalWidth / 2;\n var yOffset = e.clientY - this.img.naturalHeight / 2;\n this.setTranslate(this.img, xOffset, yOffset);\n }\n }, {\n key: \"setTranslate\",\n value: function setTranslate(node, xPos, yPos) {\n node.style.transform = 'translate3d(' + xPos + 'px, ' + yPos + 'px, 0)';\n }\n }, {\n key: \"widowWidth\",\n value: function widowWidth() {\n return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n }\n }]);\n\n return ZoomImages;\n }();\n\n var DragSlides = function () {\n function DragSlides() {\n var _this = this;\n\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, DragSlides);\n\n var dragEl = config.dragEl,\n _config$toleranceX = config.toleranceX,\n toleranceX = _config$toleranceX === void 0 ? 40 : _config$toleranceX,\n _config$toleranceY = config.toleranceY,\n toleranceY = _config$toleranceY === void 0 ? 65 : _config$toleranceY,\n _config$slide = config.slide,\n slide = _config$slide === void 0 ? null : _config$slide,\n _config$instance = config.instance,\n instance = _config$instance === void 0 ? null : _config$instance;\n this.el = dragEl;\n this.active = false;\n this.dragging = false;\n this.currentX = null;\n this.currentY = null;\n this.initialX = null;\n this.initialY = null;\n this.xOffset = 0;\n this.yOffset = 0;\n this.direction = null;\n this.lastDirection = null;\n this.toleranceX = toleranceX;\n this.toleranceY = toleranceY;\n this.toleranceReached = false;\n this.dragContainer = this.el;\n this.slide = slide;\n this.instance = instance;\n this.el.addEventListener('mousedown', function (e) {\n return _this.dragStart(e);\n }, false);\n this.el.addEventListener('mouseup', function (e) {\n return _this.dragEnd(e);\n }, false);\n this.el.addEventListener('mousemove', function (e) {\n return _this.drag(e);\n }, false);\n }\n\n _createClass(DragSlides, [{\n key: \"dragStart\",\n value: function dragStart(e) {\n if (this.slide.classList.contains('zoomed')) {\n this.active = false;\n return;\n }\n\n if (e.type === 'touchstart') {\n this.initialX = e.touches[0].clientX - this.xOffset;\n this.initialY = e.touches[0].clientY - this.yOffset;\n } else {\n this.initialX = e.clientX - this.xOffset;\n this.initialY = e.clientY - this.yOffset;\n }\n\n var clicked = e.target.nodeName.toLowerCase();\n var exludeClicks = ['input', 'select', 'textarea', 'button', 'a'];\n\n if (e.target.classList.contains('nodrag') || closest(e.target, '.nodrag') || exludeClicks.indexOf(clicked) !== -1) {\n this.active = false;\n return;\n }\n\n e.preventDefault();\n\n if (e.target === this.el || clicked !== 'img' && closest(e.target, '.gslide-inline')) {\n this.active = true;\n this.el.classList.add('dragging');\n this.dragContainer = closest(e.target, '.ginner-container');\n }\n }\n }, {\n key: \"dragEnd\",\n value: function dragEnd(e) {\n var _this2 = this;\n\n e && e.preventDefault();\n this.initialX = 0;\n this.initialY = 0;\n this.currentX = null;\n this.currentY = null;\n this.initialX = null;\n this.initialY = null;\n this.xOffset = 0;\n this.yOffset = 0;\n this.active = false;\n\n if (this.doSlideChange) {\n this.instance.preventOutsideClick = true;\n this.doSlideChange == 'right' && this.instance.prevSlide();\n this.doSlideChange == 'left' && this.instance.nextSlide();\n }\n\n if (this.doSlideClose) {\n this.instance.close();\n }\n\n if (!this.toleranceReached) {\n this.setTranslate(this.dragContainer, 0, 0, true);\n }\n\n setTimeout(function () {\n _this2.instance.preventOutsideClick = false;\n _this2.toleranceReached = false;\n _this2.lastDirection = null;\n _this2.dragging = false;\n _this2.el.isDragging = false;\n\n _this2.el.classList.remove('dragging');\n\n _this2.slide.classList.remove('dragging-nav');\n\n _this2.dragContainer.style.transform = '';\n _this2.dragContainer.style.transition = '';\n }, 100);\n }\n }, {\n key: \"drag\",\n value: function drag(e) {\n if (this.active) {\n e.preventDefault();\n this.slide.classList.add('dragging-nav');\n\n if (e.type === 'touchmove') {\n this.currentX = e.touches[0].clientX - this.initialX;\n this.currentY = e.touches[0].clientY - this.initialY;\n } else {\n this.currentX = e.clientX - this.initialX;\n this.currentY = e.clientY - this.initialY;\n }\n\n this.xOffset = this.currentX;\n this.yOffset = this.currentY;\n this.el.isDragging = true;\n this.dragging = true;\n this.doSlideChange = false;\n this.doSlideClose = false;\n var currentXInt = Math.abs(this.currentX);\n var currentYInt = Math.abs(this.currentY);\n\n if (currentXInt > 0 && currentXInt >= Math.abs(this.currentY) && (!this.lastDirection || this.lastDirection == 'x')) {\n this.yOffset = 0;\n this.lastDirection = 'x';\n this.setTranslate(this.dragContainer, this.currentX, 0);\n var doChange = this.shouldChange();\n\n if (!this.instance.settings.dragAutoSnap && doChange) {\n this.doSlideChange = doChange;\n }\n\n if (this.instance.settings.dragAutoSnap && doChange) {\n this.instance.preventOutsideClick = true;\n this.toleranceReached = true;\n this.active = false;\n this.instance.preventOutsideClick = true;\n this.dragEnd(null);\n doChange == 'right' && this.instance.prevSlide();\n doChange == 'left' && this.instance.nextSlide();\n return;\n }\n }\n\n if (this.toleranceY > 0 && currentYInt > 0 && currentYInt >= currentXInt && (!this.lastDirection || this.lastDirection == 'y')) {\n this.xOffset = 0;\n this.lastDirection = 'y';\n this.setTranslate(this.dragContainer, 0, this.currentY);\n var doClose = this.shouldClose();\n\n if (!this.instance.settings.dragAutoSnap && doClose) {\n this.doSlideClose = true;\n }\n\n if (this.instance.settings.dragAutoSnap && doClose) {\n this.instance.close();\n }\n\n return;\n }\n }\n }\n }, {\n key: \"shouldChange\",\n value: function shouldChange() {\n var doChange = false;\n var currentXInt = Math.abs(this.currentX);\n\n if (currentXInt >= this.toleranceX) {\n var dragDir = this.currentX > 0 ? 'right' : 'left';\n\n if (dragDir == 'left' && this.slide !== this.slide.parentNode.lastChild || dragDir == 'right' && this.slide !== this.slide.parentNode.firstChild) {\n doChange = dragDir;\n }\n }\n\n return doChange;\n }\n }, {\n key: \"shouldClose\",\n value: function shouldClose() {\n var doClose = false;\n var currentYInt = Math.abs(this.currentY);\n\n if (currentYInt >= this.toleranceY) {\n doClose = true;\n }\n\n return doClose;\n }\n }, {\n key: \"setTranslate\",\n value: function setTranslate(node, xPos, yPos) {\n var animated = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (animated) {\n node.style.transition = 'all .2s ease';\n } else {\n node.style.transition = '';\n }\n\n node.style.transform = \"translate3d(\".concat(xPos, \"px, \").concat(yPos, \"px, 0)\");\n }\n }]);\n\n return DragSlides;\n }();\n\n function slideImage(slide, data, index, callback) {\n var slideMedia = slide.querySelector('.gslide-media');\n var img = new Image();\n var titleID = 'gSlideTitle_' + index;\n var textID = 'gSlideDesc_' + index;\n img.addEventListener('load', function () {\n if (isFunction(callback)) {\n callback();\n }\n }, false);\n img.src = data.href;\n\n if (data.srcset != '') {\n if (data.sizes != '') {\n img.sizes = data.sizes;\n }\n img.srcset = data.srcset;\n }\n\n img.alt = '';\n\n if (!isNil(data.alt) && data.alt !== '') {\n img.alt = data.alt;\n }\n\n if (data.title !== '') {\n img.setAttribute('aria-labelledby', titleID);\n }\n\n if (data.description !== '') {\n img.setAttribute('aria-describedby', textID);\n }\n\n if (data.hasOwnProperty('_hasCustomWidth') && data._hasCustomWidth) {\n img.style.width = data.width;\n }\n\n if (data.hasOwnProperty('_hasCustomHeight') && data._hasCustomHeight) {\n img.style.height = data.height;\n }\n\n slideMedia.insertBefore(img, slideMedia.firstChild);\n return;\n }\n\n function slideVideo(slide, data, index, callback) {\n var _this = this;\n\n var slideContainer = slide.querySelector('.ginner-container');\n var videoID = 'gvideo' + index;\n var slideMedia = slide.querySelector('.gslide-media');\n var videoPlayers = this.getAllPlayers();\n addClass(slideContainer, 'gvideo-container');\n slideMedia.insertBefore(createHTML('
'), slideMedia.firstChild);\n var videoWrapper = slide.querySelector('.gvideo-wrapper');\n injectAssets(this.settings.plyr.css, 'Plyr');\n var url = data.href;\n var protocol = location.protocol.replace(':', '');\n var videoSource = '';\n var embedID = '';\n var customPlaceholder = false;\n\n if (protocol == 'file') {\n protocol = 'http';\n }\n\n slideMedia.style.maxWidth = data.width;\n injectAssets(this.settings.plyr.js, 'Plyr', function () {\n if (url.match(/vimeo\\.com\\/([0-9]*)/)) {\n var vimeoID = /vimeo.*\\/(\\d+)/i.exec(url);\n videoSource = 'vimeo';\n embedID = vimeoID[1];\n }\n\n if (url.match(/(youtube\\.com|youtube-nocookie\\.com)\\/watch\\?v=([a-zA-Z0-9\\-_]+)/) || url.match(/youtu\\.be\\/([a-zA-Z0-9\\-_]+)/) || url.match(/(youtube\\.com|youtube-nocookie\\.com)\\/embed\\/([a-zA-Z0-9\\-_]+)/)) {\n var youtubeID = getYoutubeID(url);\n videoSource = 'youtube';\n embedID = youtubeID;\n }\n\n if (url !== null) {\n videoSource = 'local';\n var html = '';\n customPlaceholder = createHTML(html);\n }\n\n var placeholder = customPlaceholder ? customPlaceholder : createHTML(\"
\"));\n addClass(videoWrapper, \"\".concat(videoSource, \"-video gvideo\"));\n videoWrapper.appendChild(placeholder);\n videoWrapper.setAttribute('data-id', videoID);\n videoWrapper.setAttribute('data-index', index);\n var playerConfig = has(_this.settings.plyr, 'config') ? _this.settings.plyr.config : {};\n var player = new Plyr('#' + videoID, playerConfig);\n player.on('ready', function (event) {\n var instance = event.detail.plyr;\n videoPlayers[videoID] = instance;\n\n if (isFunction(callback)) {\n callback();\n }\n });\n waitUntil(function () {\n return slide.querySelector('iframe') && slide.querySelector('iframe').dataset.ready == 'true';\n }, function () {\n _this.resize(slide);\n });\n player.on('enterfullscreen', handleMediaFullScreen);\n player.on('exitfullscreen', handleMediaFullScreen);\n });\n }\n\n function getYoutubeID(url) {\n var videoID = '';\n url = url.replace(/(>|<)/gi, '').split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n\n if (url[2] !== undefined) {\n videoID = url[2].split(/[^0-9a-z_\\-]/i);\n videoID = videoID[0];\n } else {\n videoID = url;\n }\n\n return videoID;\n }\n\n function handleMediaFullScreen(event) {\n var media = closest(event.target, '.gslide-media');\n\n if (event.type == 'enterfullscreen') {\n addClass(media, 'fullscreen');\n }\n\n if (event.type == 'exitfullscreen') {\n removeClass(media, 'fullscreen');\n }\n }\n\n function slideInline(slide, data, index, callback) {\n var _this = this;\n\n var slideMedia = slide.querySelector('.gslide-media');\n var hash = has(data, 'href') && data.href ? data.href.split('#').pop().trim() : false;\n var content = has(data, 'content') && data.content ? data.content : false;\n var innerContent;\n\n if (content) {\n if (isString(content)) {\n innerContent = createHTML(\"
\".concat(content, \"
\"));\n }\n\n if (isNode(content)) {\n if (content.style.display == 'none') {\n content.style.display = 'block';\n }\n\n var container = document.createElement('div');\n container.className = 'ginlined-content';\n container.appendChild(content);\n innerContent = container;\n }\n }\n\n if (hash) {\n var div = document.getElementById(hash);\n\n if (!div) {\n return false;\n }\n\n var cloned = div.cloneNode(true);\n cloned.style.height = data.height;\n cloned.style.maxWidth = data.width;\n addClass(cloned, 'ginlined-content');\n innerContent = cloned;\n }\n\n if (!innerContent) {\n console.error('Unable to append inline slide content', data);\n return false;\n }\n\n slideMedia.style.height = data.height;\n slideMedia.style.width = data.width;\n slideMedia.appendChild(innerContent);\n this.events['inlineclose' + hash] = addEvent('click', {\n onElement: slideMedia.querySelectorAll('.gtrigger-close'),\n withCallback: function withCallback(e) {\n e.preventDefault();\n\n _this.close();\n }\n });\n\n if (isFunction(callback)) {\n callback();\n }\n\n return;\n }\n\n function slideIframe(slide, data, index, callback) {\n var slideMedia = slide.querySelector('.gslide-media');\n var iframe = createIframe({\n url: data.href,\n callback: callback\n });\n slideMedia.parentNode.style.maxWidth = data.width;\n slideMedia.parentNode.style.height = data.height;\n slideMedia.appendChild(iframe);\n return;\n }\n\n var SlideConfigParser = function () {\n function SlideConfigParser() {\n var slideParamas = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, SlideConfigParser);\n\n this.defaults = {\n href: '',\n sizes: '',\n srcset: '',\n title: '',\n type: '',\n description: '',\n alt: '',\n descPosition: 'bottom',\n effect: '',\n width: '',\n height: '',\n content: false,\n zoomable: true,\n draggable: true\n };\n\n if (isObject(slideParamas)) {\n this.defaults = extend(this.defaults, slideParamas);\n }\n }\n\n _createClass(SlideConfigParser, [{\n key: \"sourceType\",\n value: function sourceType(url) {\n var origin = url;\n url = url.toLowerCase();\n\n if (url.match(/\\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/) !== null) {\n return 'image';\n }\n\n if (url.match(/(youtube\\.com|youtube-nocookie\\.com)\\/watch\\?v=([a-zA-Z0-9\\-_]+)/) || url.match(/youtu\\.be\\/([a-zA-Z0-9\\-_]+)/) || url.match(/(youtube\\.com|youtube-nocookie\\.com)\\/embed\\/([a-zA-Z0-9\\-_]+)/)) {\n return 'video';\n }\n\n if (url.match(/vimeo\\.com\\/([0-9]*)/)) {\n return 'video';\n }\n\n if (url.match(/\\.(mp4|ogg|webm|mov)/) !== null) {\n return 'video';\n }\n\n if (url.match(/\\.(mp3|wav|wma|aac|ogg)/) !== null) {\n return 'audio';\n }\n\n if (url.indexOf('#') > -1) {\n var hash = origin.split('#').pop();\n\n if (hash.trim() !== '') {\n return 'inline';\n }\n }\n\n if (url.indexOf('goajax=true') > -1) {\n return 'ajax';\n }\n\n return 'external';\n }\n }, {\n key: \"parseConfig\",\n value: function parseConfig(element, settings) {\n var _this = this;\n\n var data = extend({\n descPosition: settings.descPosition\n }, this.defaults);\n\n if (isObject(element) && !isNode(element)) {\n if (!has(element, 'type')) {\n if (has(element, 'content') && element.content) {\n element.type = 'inline';\n } else if (has(element, 'href')) {\n element.type = this.sourceType(element.href);\n }\n }\n\n var objectData = extend(data, element);\n this.setSize(objectData, settings);\n return objectData;\n }\n\n var url = '';\n var config = element.getAttribute('data-glightbox');\n var nodeType = element.nodeName.toLowerCase();\n\n if (nodeType === 'a') {\n url = element.href;\n }\n\n if (nodeType === 'img') {\n url = element.src;\n data.alt = element.alt;\n }\n\n data.href = url;\n each(data, function (val, key) {\n if (has(settings, key) && key !== 'width') {\n data[key] = settings[key];\n }\n\n var nodeData = element.dataset[key];\n\n if (!isNil(nodeData)) {\n data[key] = _this.sanitizeValue(nodeData);\n }\n });\n\n if (data.content) {\n data.type = 'inline';\n }\n\n if (!data.type && url) {\n data.type = this.sourceType(url);\n }\n\n if (!isNil(config)) {\n var cleanKeys = [];\n each(data, function (v, k) {\n cleanKeys.push(';\\\\s?' + k);\n });\n cleanKeys = cleanKeys.join('\\\\s?:|');\n\n if (config.trim() !== '') {\n each(data, function (val, key) {\n var str = config;\n var match = 's?' + key + 's?:s?(.*?)(' + cleanKeys + 's?:|$)';\n var regex = new RegExp(match);\n var matches = str.match(regex);\n\n if (matches && matches.length && matches[1]) {\n var value = matches[1].trim().replace(/;\\s*$/, '');\n data[key] = _this.sanitizeValue(value);\n }\n });\n }\n } else {\n if (!data.title && nodeType == 'a') {\n var title = element.title;\n\n if (!isNil(title) && title !== '') {\n data.title = title;\n }\n }\n\n if (!data.title && nodeType == 'img') {\n var alt = element.alt;\n\n if (!isNil(alt) && alt !== '') {\n data.title = alt;\n }\n }\n }\n\n if (data.description && data.description.substring(0, 1) === '.') {\n var description;\n\n try {\n description = document.querySelector(data.description).innerHTML;\n } catch (error) {\n if (!(error instanceof DOMException)) {\n throw error;\n }\n }\n\n if (description) {\n data.description = description;\n }\n }\n\n if (!data.description) {\n var nodeDesc = element.querySelector('.glightbox-desc');\n\n if (nodeDesc) {\n data.description = nodeDesc.innerHTML;\n }\n }\n\n this.setSize(data, settings, element);\n this.slideConfig = data;\n return data;\n }\n }, {\n key: \"setSize\",\n value: function setSize(data, settings) {\n var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var defaultWith = data.type == 'video' ? this.checkSize(settings.videosWidth) : this.checkSize(settings.width);\n var defaultHeight = this.checkSize(settings.height);\n data.width = has(data, 'width') && data.width !== '' ? this.checkSize(data.width) : defaultWith;\n data.height = has(data, 'height') && data.height !== '' ? this.checkSize(data.height) : defaultHeight;\n\n if (element && data.type == 'image') {\n data._hasCustomWidth = element.dataset.width ? true : false;\n data._hasCustomHeight = element.dataset.height ? true : false;\n }\n\n return data;\n }\n }, {\n key: \"checkSize\",\n value: function checkSize(size) {\n return isNumber(size) ? \"\".concat(size, \"px\") : size;\n }\n }, {\n key: \"sanitizeValue\",\n value: function sanitizeValue(val) {\n if (val !== 'true' && val !== 'false') {\n return val;\n }\n\n return val === 'true';\n }\n }]);\n\n return SlideConfigParser;\n }();\n\n var Slide = function () {\n function Slide(el, instance, index) {\n _classCallCheck(this, Slide);\n\n this.element = el;\n this.instance = instance;\n this.index = index;\n }\n\n _createClass(Slide, [{\n key: \"setContent\",\n value: function setContent() {\n var _this = this;\n\n var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (hasClass(slide, 'loaded')) {\n return false;\n }\n\n var settings = this.instance.settings;\n var slideConfig = this.slideConfig;\n var isMobileDevice = isMobile();\n\n if (isFunction(settings.beforeSlideLoad)) {\n settings.beforeSlideLoad({\n index: this.index,\n slide: slide,\n player: false\n });\n }\n\n var type = slideConfig.type;\n var position = slideConfig.descPosition;\n var slideMedia = slide.querySelector('.gslide-media');\n var slideTitle = slide.querySelector('.gslide-title');\n var slideText = slide.querySelector('.gslide-desc');\n var slideDesc = slide.querySelector('.gdesc-inner');\n var finalCallback = callback;\n var titleID = 'gSlideTitle_' + this.index;\n var textID = 'gSlideDesc_' + this.index;\n\n if (isFunction(settings.afterSlideLoad)) {\n finalCallback = function finalCallback() {\n if (isFunction(callback)) {\n callback();\n }\n\n settings.afterSlideLoad({\n index: _this.index,\n slide: slide,\n player: _this.instance.getSlidePlayerInstance(_this.index)\n });\n };\n }\n\n if (slideConfig.title == '' && slideConfig.description == '') {\n if (slideDesc) {\n slideDesc.parentNode.parentNode.removeChild(slideDesc.parentNode);\n }\n } else {\n if (slideTitle && slideConfig.title !== '') {\n slideTitle.id = titleID;\n slideTitle.innerHTML = slideConfig.title;\n } else {\n slideTitle.parentNode.removeChild(slideTitle);\n }\n\n if (slideText && slideConfig.description !== '') {\n slideText.id = textID;\n\n if (isMobileDevice && settings.moreLength > 0) {\n slideConfig.smallDescription = this.slideShortDesc(slideConfig.description, settings.moreLength, settings.moreText);\n slideText.innerHTML = slideConfig.smallDescription;\n this.descriptionEvents(slideText, slideConfig);\n } else {\n slideText.innerHTML = slideConfig.description;\n }\n } else {\n slideText.parentNode.removeChild(slideText);\n }\n\n addClass(slideMedia.parentNode, \"desc-\".concat(position));\n addClass(slideDesc.parentNode, \"description-\".concat(position));\n }\n\n addClass(slideMedia, \"gslide-\".concat(type));\n addClass(slide, 'loaded');\n\n if (type === 'video') {\n slideVideo.apply(this.instance, [slide, slideConfig, this.index, finalCallback]);\n return;\n }\n\n if (type === 'external') {\n slideIframe.apply(this, [slide, slideConfig, this.index, finalCallback]);\n return;\n }\n\n if (type === 'inline') {\n slideInline.apply(this.instance, [slide, slideConfig, this.index, finalCallback]);\n\n if (slideConfig.draggable) {\n new DragSlides({\n dragEl: slide.querySelector('.gslide-inline'),\n toleranceX: settings.dragToleranceX,\n toleranceY: settings.dragToleranceY,\n slide: slide,\n instance: this.instance\n });\n }\n\n return;\n }\n\n if (type === 'image') {\n slideImage(slide, slideConfig, this.index, function () {\n var img = slide.querySelector('img');\n\n if (slideConfig.draggable) {\n new DragSlides({\n dragEl: img,\n toleranceX: settings.dragToleranceX,\n toleranceY: settings.dragToleranceY,\n slide: slide,\n instance: _this.instance\n });\n }\n\n if (slideConfig.zoomable && img.naturalWidth > img.offsetWidth) {\n addClass(img, 'zoomable');\n new ZoomImages(img, slide, function () {\n _this.instance.resize();\n });\n }\n\n if (isFunction(finalCallback)) {\n finalCallback();\n }\n });\n return;\n }\n\n if (isFunction(finalCallback)) {\n finalCallback();\n }\n }\n }, {\n key: \"slideShortDesc\",\n value: function slideShortDesc(string) {\n var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50;\n var wordBoundary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var div = document.createElement('div');\n div.innerHTML = string;\n var cleanedString = div.innerText;\n var useWordBoundary = wordBoundary;\n string = cleanedString.trim();\n\n if (string.length <= n) {\n return string;\n }\n\n var subString = string.substr(0, n - 1);\n\n if (!useWordBoundary) {\n return subString;\n }\n\n div = null;\n return subString + '... ' + wordBoundary + '';\n }\n }, {\n key: \"descriptionEvents\",\n value: function descriptionEvents(desc, data) {\n var _this2 = this;\n\n var moreLink = desc.querySelector('.desc-more');\n\n if (!moreLink) {\n return false;\n }\n\n addEvent('click', {\n onElement: moreLink,\n withCallback: function withCallback(event, target) {\n event.preventDefault();\n var body = document.body;\n var desc = closest(target, '.gslide-desc');\n\n if (!desc) {\n return false;\n }\n\n desc.innerHTML = data.description;\n addClass(body, 'gdesc-open');\n var shortEvent = addEvent('click', {\n onElement: [body, closest(desc, '.gslide-description')],\n withCallback: function withCallback(event, target) {\n if (event.target.nodeName.toLowerCase() !== 'a') {\n removeClass(body, 'gdesc-open');\n addClass(body, 'gdesc-closed');\n desc.innerHTML = data.smallDescription;\n\n _this2.descriptionEvents(desc, data);\n\n setTimeout(function () {\n removeClass(body, 'gdesc-closed');\n }, 400);\n shortEvent.destroy();\n }\n }\n });\n }\n });\n }\n }, {\n key: \"create\",\n value: function create() {\n return createHTML(this.instance.settings.slideHTML);\n }\n }, {\n key: \"getConfig\",\n value: function getConfig() {\n if (!isNode(this.element) && !this.element.hasOwnProperty('draggable')) {\n this.element.draggable = this.instance.settings.draggable;\n }\n\n var parser = new SlideConfigParser(this.instance.settings.slideExtraAttributes);\n this.slideConfig = parser.parseConfig(this.element, this.instance.settings);\n return this.slideConfig;\n }\n }]);\n\n return Slide;\n }();\n\n var _version = '3.1.1';\n\n var isMobile$1 = isMobile();\n\n var isTouch$1 = isTouch();\n\n var html = document.getElementsByTagName('html')[0];\n var defaults = {\n selector: '.glightbox',\n elements: null,\n skin: 'clean',\n theme: 'clean',\n closeButton: true,\n startAt: null,\n autoplayVideos: true,\n autofocusVideos: true,\n descPosition: 'bottom',\n width: '900px',\n height: '506px',\n videosWidth: '960px',\n beforeSlideChange: null,\n afterSlideChange: null,\n beforeSlideLoad: null,\n afterSlideLoad: null,\n slideInserted: null,\n slideRemoved: null,\n slideExtraAttributes: null,\n onOpen: null,\n onClose: null,\n loop: false,\n zoomable: true,\n draggable: true,\n dragAutoSnap: false,\n dragToleranceX: 40,\n dragToleranceY: 65,\n preload: true,\n oneSlidePerOpen: false,\n touchNavigation: true,\n touchFollowAxis: true,\n keyboardNavigation: true,\n closeOnOutsideClick: true,\n plugins: false,\n plyr: {\n css: 'https://cdn.plyr.io/3.6.8/plyr.css',\n js: 'https://cdn.plyr.io/3.6.8/plyr.js',\n config: {\n ratio: '16:9',\n fullscreen: {\n enabled: true,\n iosNative: true\n },\n youtube: {\n noCookie: true,\n rel: 0,\n showinfo: 0,\n iv_load_policy: 3\n },\n vimeo: {\n byline: false,\n portrait: false,\n title: false,\n transparent: false\n }\n }\n },\n openEffect: 'zoom',\n closeEffect: 'zoom',\n slideEffect: 'slide',\n moreText: 'Mehr anzeigen',\n moreLength: 60,\n cssEfects: {\n fade: {\n \"in\": 'fadeIn',\n out: 'fadeOut'\n },\n zoom: {\n \"in\": 'zoomIn',\n out: 'zoomOut'\n },\n slide: {\n \"in\": 'slideInRight',\n out: 'slideOutLeft'\n },\n slideBack: {\n \"in\": 'slideInLeft',\n out: 'slideOutRight'\n },\n none: {\n \"in\": 'none',\n out: 'none'\n }\n },\n svg: {\n close: '',\n next: ' ',\n prev: ''\n }\n };\n defaults.slideHTML = \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n

\\n
\\n
\\n
\\n
\\n
\\n
\";\n defaults.lightboxHTML = \"
\\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n
\";\n\n var GlightboxInit = function () {\n function GlightboxInit() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, GlightboxInit);\n\n this.customOptions = options;\n this.settings = extend(defaults, options);\n this.effectsClasses = this.getAnimationClasses();\n this.videoPlayers = {};\n this.apiEvents = [];\n this.fullElementsList = false;\n }\n\n _createClass(GlightboxInit, [{\n key: \"init\",\n value: function init() {\n var _this = this;\n\n var selector = this.getSelector();\n\n if (selector) {\n this.baseEvents = addEvent('click', {\n onElement: selector,\n withCallback: function withCallback(e, target) {\n e.preventDefault();\n\n _this.open(target);\n }\n });\n }\n\n this.elements = this.getElements();\n }\n }, {\n key: \"open\",\n value: function open() {\n var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var startAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (this.elements.length == 0) {\n return false;\n }\n\n this.activeSlide = null;\n this.prevActiveSlideIndex = null;\n this.prevActiveSlide = null;\n var index = isNumber(startAt) ? startAt : this.settings.startAt;\n\n if (isNode(element)) {\n var gallery = element.getAttribute('data-gallery');\n\n if (gallery) {\n this.fullElementsList = this.elements;\n this.elements = this.getGalleryElements(this.elements, gallery);\n }\n\n if (isNil(index)) {\n index = this.getElementIndex(element);\n\n if (index < 0) {\n index = 0;\n }\n }\n }\n\n if (!isNumber(index)) {\n index = 0;\n }\n\n this.build();\n\n animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade[\"in\"]);\n\n var body = document.body;\n var scrollBar = window.innerWidth - document.documentElement.clientWidth;\n\n if (scrollBar > 0) {\n var styleSheet = document.createElement('style');\n styleSheet.type = 'text/css';\n styleSheet.className = 'gcss-styles';\n styleSheet.innerText = \".gscrollbar-fixer {margin-right: \".concat(scrollBar, \"px}\");\n document.head.appendChild(styleSheet);\n\n addClass(body, 'gscrollbar-fixer');\n }\n\n addClass(body, 'glightbox-open');\n\n addClass(html, 'glightbox-open');\n\n if (isMobile$1) {\n addClass(document.body, 'glightbox-mobile');\n\n this.settings.slideEffect = 'slide';\n }\n\n this.showSlide(index, true);\n\n if (this.elements.length == 1) {\n addClass(this.prevButton, 'glightbox-button-hidden');\n\n addClass(this.nextButton, 'glightbox-button-hidden');\n } else {\n removeClass(this.prevButton, 'glightbox-button-hidden');\n\n removeClass(this.nextButton, 'glightbox-button-hidden');\n }\n\n this.lightboxOpen = true;\n this.trigger('open');\n\n if (isFunction(this.settings.onOpen)) {\n this.settings.onOpen();\n }\n\n if (isTouch$1 && this.settings.touchNavigation) {\n touchNavigation(this);\n }\n\n if (this.settings.keyboardNavigation) {\n keyboardNavigation(this);\n }\n }\n }, {\n key: \"openAt\",\n value: function openAt() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.open(null, index);\n }\n }, {\n key: \"showSlide\",\n value: function showSlide() {\n var _this2 = this;\n\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n show(this.loader);\n\n this.index = parseInt(index);\n var current = this.slidesContainer.querySelector('.current');\n\n if (current) {\n removeClass(current, 'current');\n }\n\n this.slideAnimateOut();\n var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index];\n\n if (hasClass(slideNode, 'loaded')) {\n this.slideAnimateIn(slideNode, first);\n\n hide(this.loader);\n } else {\n show(this.loader);\n\n var slide = this.elements[index];\n var slideData = {\n index: this.index,\n slide: slideNode,\n slideNode: slideNode,\n slideConfig: slide.slideConfig,\n slideIndex: this.index,\n trigger: slide.node,\n player: null\n };\n this.trigger('slide_before_load', slideData);\n slide.instance.setContent(slideNode, function () {\n hide(_this2.loader);\n\n _this2.resize();\n\n _this2.slideAnimateIn(slideNode, first);\n\n _this2.trigger('slide_after_load', slideData);\n });\n }\n\n this.slideDescription = slideNode.querySelector('.gslide-description');\n this.slideDescriptionContained = this.slideDescription && hasClass(this.slideDescription.parentNode, 'gslide-media');\n\n if (this.settings.preload) {\n this.preloadSlide(index + 1);\n this.preloadSlide(index - 1);\n }\n\n this.updateNavigationClasses();\n this.activeSlide = slideNode;\n }\n }, {\n key: \"preloadSlide\",\n value: function preloadSlide(index) {\n var _this3 = this;\n\n if (index < 0 || index > this.elements.length - 1) {\n return false;\n }\n\n if (isNil(this.elements[index])) {\n return false;\n }\n\n var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index];\n\n if (hasClass(slideNode, 'loaded')) {\n return false;\n }\n\n var slide = this.elements[index];\n var type = slide.type;\n var slideData = {\n index: index,\n slide: slideNode,\n slideNode: slideNode,\n slideConfig: slide.slideConfig,\n slideIndex: index,\n trigger: slide.node,\n player: null\n };\n this.trigger('slide_before_load', slideData);\n\n if (type == 'video' || type == 'external') {\n setTimeout(function () {\n slide.instance.setContent(slideNode, function () {\n _this3.trigger('slide_after_load', slideData);\n });\n }, 200);\n } else {\n slide.instance.setContent(slideNode, function () {\n _this3.trigger('slide_after_load', slideData);\n });\n }\n }\n }, {\n key: \"prevSlide\",\n value: function prevSlide() {\n this.goToSlide(this.index - 1);\n }\n }, {\n key: \"nextSlide\",\n value: function nextSlide() {\n this.goToSlide(this.index + 1);\n }\n }, {\n key: \"goToSlide\",\n value: function goToSlide() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.prevActiveSlide = this.activeSlide;\n this.prevActiveSlideIndex = this.index;\n\n if (!this.loop() && (index < 0 || index > this.elements.length - 1)) {\n return false;\n }\n\n if (index < 0) {\n index = this.elements.length - 1;\n } else if (index >= this.elements.length) {\n index = 0;\n }\n\n this.showSlide(index);\n }\n }, {\n key: \"insertSlide\",\n value: function insertSlide() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n\n if (index < 0) {\n index = this.elements.length;\n }\n\n var slide = new Slide(config, this, index);\n var data = slide.getConfig();\n\n var slideInfo = extend({}, data);\n\n var newSlide = slide.create();\n var totalSlides = this.elements.length - 1;\n slideInfo.index = index;\n slideInfo.node = false;\n slideInfo.instance = slide;\n slideInfo.slideConfig = data;\n this.elements.splice(index, 0, slideInfo);\n var addedSlideNode = null;\n var addedSlidePlayer = null;\n\n if (this.slidesContainer) {\n if (index > totalSlides) {\n this.slidesContainer.appendChild(newSlide);\n } else {\n var existingSlide = this.slidesContainer.querySelectorAll('.gslide')[index];\n this.slidesContainer.insertBefore(newSlide, existingSlide);\n }\n\n if (this.settings.preload && this.index == 0 && index == 0 || this.index - 1 == index || this.index + 1 == index) {\n this.preloadSlide(index);\n }\n\n if (this.index == 0 && index == 0) {\n this.index = 1;\n }\n\n this.updateNavigationClasses();\n addedSlideNode = this.slidesContainer.querySelectorAll('.gslide')[index];\n addedSlidePlayer = this.getSlidePlayerInstance(index);\n slideInfo.slideNode = addedSlideNode;\n }\n\n this.trigger('slide_inserted', {\n index: index,\n slide: addedSlideNode,\n slideNode: addedSlideNode,\n slideConfig: data,\n slideIndex: index,\n trigger: null,\n player: addedSlidePlayer\n });\n\n if (isFunction(this.settings.slideInserted)) {\n this.settings.slideInserted({\n index: index,\n slide: addedSlideNode,\n player: addedSlidePlayer\n });\n }\n }\n }, {\n key: \"removeSlide\",\n value: function removeSlide() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\n\n if (index < 0 || index > this.elements.length - 1) {\n return false;\n }\n\n var slide = this.slidesContainer && this.slidesContainer.querySelectorAll('.gslide')[index];\n\n if (slide) {\n if (this.getActiveSlideIndex() == index) {\n if (index == this.elements.length - 1) {\n this.prevSlide();\n } else {\n this.nextSlide();\n }\n }\n\n slide.parentNode.removeChild(slide);\n }\n\n this.elements.splice(index, 1);\n this.trigger('slide_removed', index);\n\n if (isFunction(this.settings.slideRemoved)) {\n this.settings.slideRemoved(index);\n }\n }\n }, {\n key: \"slideAnimateIn\",\n value: function slideAnimateIn(slide, first) {\n var _this4 = this;\n\n var slideMedia = slide.querySelector('.gslide-media');\n var slideDesc = slide.querySelector('.gslide-description');\n var prevData = {\n index: this.prevActiveSlideIndex,\n slide: this.prevActiveSlide,\n slideNode: this.prevActiveSlide,\n slideIndex: this.prevActiveSlide,\n slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig,\n trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node,\n player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)\n };\n var nextData = {\n index: this.index,\n slide: this.activeSlide,\n slideNode: this.activeSlide,\n slideConfig: this.elements[this.index].slideConfig,\n slideIndex: this.index,\n trigger: this.elements[this.index].node,\n player: this.getSlidePlayerInstance(this.index)\n };\n\n if (slideMedia.offsetWidth > 0 && slideDesc) {\n hide(slideDesc);\n\n slideDesc.style.display = '';\n }\n\n removeClass(slide, this.effectsClasses);\n\n if (first) {\n animateElement(slide, this.settings.cssEfects[this.settings.openEffect][\"in\"], function () {\n if (_this4.settings.autoplayVideos) {\n _this4.slidePlayerPlay(slide);\n }\n\n _this4.trigger('slide_changed', {\n prev: prevData,\n current: nextData\n });\n\n if (isFunction(_this4.settings.afterSlideChange)) {\n _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]);\n }\n });\n } else {\n var effectName = this.settings.slideEffect;\n var animIn = effectName !== 'none' ? this.settings.cssEfects[effectName][\"in\"] : effectName;\n\n if (this.prevActiveSlideIndex > this.index) {\n if (this.settings.slideEffect == 'slide') {\n animIn = this.settings.cssEfects.slideBack[\"in\"];\n }\n }\n\n animateElement(slide, animIn, function () {\n if (_this4.settings.autoplayVideos) {\n _this4.slidePlayerPlay(slide);\n }\n\n _this4.trigger('slide_changed', {\n prev: prevData,\n current: nextData\n });\n\n if (isFunction(_this4.settings.afterSlideChange)) {\n _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]);\n }\n });\n }\n\n setTimeout(function () {\n _this4.resize(slide);\n }, 100);\n\n addClass(slide, 'current');\n }\n }, {\n key: \"slideAnimateOut\",\n value: function slideAnimateOut() {\n if (!this.prevActiveSlide) {\n return false;\n }\n\n var prevSlide = this.prevActiveSlide;\n\n removeClass(prevSlide, this.effectsClasses);\n\n addClass(prevSlide, 'prev');\n\n var animation = this.settings.slideEffect;\n var animOut = animation !== 'none' ? this.settings.cssEfects[animation].out : animation;\n this.slidePlayerPause(prevSlide);\n this.trigger('slide_before_change', {\n prev: {\n index: this.prevActiveSlideIndex,\n slide: this.prevActiveSlide,\n slideNode: this.prevActiveSlide,\n slideIndex: this.prevActiveSlideIndex,\n slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig,\n trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node,\n player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)\n },\n current: {\n index: this.index,\n slide: this.activeSlide,\n slideNode: this.activeSlide,\n slideIndex: this.index,\n slideConfig: this.elements[this.index].slideConfig,\n trigger: this.elements[this.index].node,\n player: this.getSlidePlayerInstance(this.index)\n }\n });\n\n if (isFunction(this.settings.beforeSlideChange)) {\n this.settings.beforeSlideChange.apply(this, [{\n index: this.prevActiveSlideIndex,\n slide: this.prevActiveSlide,\n player: this.getSlidePlayerInstance(this.prevActiveSlideIndex)\n }, {\n index: this.index,\n slide: this.activeSlide,\n player: this.getSlidePlayerInstance(this.index)\n }]);\n }\n\n if (this.prevActiveSlideIndex > this.index && this.settings.slideEffect == 'slide') {\n animOut = this.settings.cssEfects.slideBack.out;\n }\n\n animateElement(prevSlide, animOut, function () {\n var container = prevSlide.querySelector('.ginner-container');\n var media = prevSlide.querySelector('.gslide-media');\n var desc = prevSlide.querySelector('.gslide-description');\n container.style.transform = '';\n media.style.transform = '';\n\n removeClass(media, 'greset');\n\n media.style.opacity = '';\n\n if (desc) {\n desc.style.opacity = '';\n }\n\n removeClass(prevSlide, 'prev');\n });\n }\n }, {\n key: \"getAllPlayers\",\n value: function getAllPlayers() {\n return this.videoPlayers;\n }\n }, {\n key: \"getSlidePlayerInstance\",\n value: function getSlidePlayerInstance(index) {\n var id = 'gvideo' + index;\n var videoPlayers = this.getAllPlayers();\n\n if (has(videoPlayers, id) && videoPlayers[id]) {\n return videoPlayers[id];\n }\n\n return false;\n }\n }, {\n key: \"stopSlideVideo\",\n value: function stopSlideVideo(slide) {\n if (isNode(slide)) {\n var node = slide.querySelector('.gvideo-wrapper');\n\n if (node) {\n slide = node.getAttribute('data-index');\n }\n }\n\n console.log('stopSlideVideo is deprecated, use slidePlayerPause');\n var player = this.getSlidePlayerInstance(slide);\n\n if (player && player.playing) {\n player.pause();\n }\n }\n }, {\n key: \"slidePlayerPause\",\n value: function slidePlayerPause(slide) {\n if (isNode(slide)) {\n var node = slide.querySelector('.gvideo-wrapper');\n\n if (node) {\n slide = node.getAttribute('data-index');\n }\n }\n\n var player = this.getSlidePlayerInstance(slide);\n\n if (player && player.playing) {\n player.pause();\n }\n }\n }, {\n key: \"playSlideVideo\",\n value: function playSlideVideo(slide) {\n if (isNode(slide)) {\n var node = slide.querySelector('.gvideo-wrapper');\n\n if (node) {\n slide = node.getAttribute('data-index');\n }\n }\n\n console.log('playSlideVideo is deprecated, use slidePlayerPlay');\n var player = this.getSlidePlayerInstance(slide);\n\n if (player && !player.playing) {\n player.play();\n }\n }\n }, {\n key: \"slidePlayerPlay\",\n value: function slidePlayerPlay(slide) {\n if (isNode(slide)) {\n var node = slide.querySelector('.gvideo-wrapper');\n\n if (node) {\n slide = node.getAttribute('data-index');\n }\n }\n\n var player = this.getSlidePlayerInstance(slide);\n\n if (player && !player.playing) {\n player.play();\n\n if (this.settings.autofocusVideos) {\n player.elements.container.focus();\n }\n }\n }\n }, {\n key: \"setElements\",\n value: function setElements(elements) {\n var _this5 = this;\n\n this.settings.elements = false;\n var newElements = [];\n\n if (elements && elements.length) {\n each(elements, function (el, i) {\n var slide = new Slide(el, _this5, i);\n var data = slide.getConfig();\n\n var slideInfo = extend({}, data);\n\n slideInfo.slideConfig = data;\n slideInfo.instance = slide;\n slideInfo.index = i;\n newElements.push(slideInfo);\n });\n }\n\n this.elements = newElements;\n\n if (this.lightboxOpen) {\n this.slidesContainer.innerHTML = '';\n\n if (this.elements.length) {\n each(this.elements, function () {\n var slide = createHTML(_this5.settings.slideHTML);\n\n _this5.slidesContainer.appendChild(slide);\n });\n\n this.showSlide(0, true);\n }\n }\n }\n }, {\n key: \"getElementIndex\",\n value: function getElementIndex(node) {\n var index = false;\n\n each(this.elements, function (el, i) {\n if (has(el, 'node') && el.node == node) {\n index = i;\n return true;\n }\n });\n\n return index;\n }\n }, {\n key: \"getElements\",\n value: function getElements() {\n var _this6 = this;\n\n var list = [];\n this.elements = this.elements ? this.elements : [];\n\n if (!isNil(this.settings.elements) && isArray(this.settings.elements) && this.settings.elements.length) {\n each(this.settings.elements, function (el, i) {\n var slide = new Slide(el, _this6, i);\n var elData = slide.getConfig();\n\n var slideInfo = extend({}, elData);\n\n slideInfo.node = false;\n slideInfo.index = i;\n slideInfo.instance = slide;\n slideInfo.slideConfig = elData;\n list.push(slideInfo);\n });\n }\n\n var nodes = false;\n var selector = this.getSelector();\n\n if (selector) {\n nodes = document.querySelectorAll(this.getSelector());\n }\n\n if (!nodes) {\n return list;\n }\n\n each(nodes, function (el, i) {\n var slide = new Slide(el, _this6, i);\n var elData = slide.getConfig();\n\n var slideInfo = extend({}, elData);\n\n slideInfo.node = el;\n slideInfo.index = i;\n slideInfo.instance = slide;\n slideInfo.slideConfig = elData;\n slideInfo.gallery = el.getAttribute('data-gallery');\n list.push(slideInfo);\n });\n\n return list;\n }\n }, {\n key: \"getGalleryElements\",\n value: function getGalleryElements(list, gallery) {\n return list.filter(function (el) {\n return el.gallery == gallery;\n });\n }\n }, {\n key: \"getSelector\",\n value: function getSelector() {\n if (this.settings.elements) {\n return false;\n }\n\n if (this.settings.selector && this.settings.selector.substring(0, 5) == 'data-') {\n return \"*[\".concat(this.settings.selector, \"]\");\n }\n\n return this.settings.selector;\n }\n }, {\n key: \"getActiveSlide\",\n value: function getActiveSlide() {\n return this.slidesContainer.querySelectorAll('.gslide')[this.index];\n }\n }, {\n key: \"getActiveSlideIndex\",\n value: function getActiveSlideIndex() {\n return this.index;\n }\n }, {\n key: \"getAnimationClasses\",\n value: function getAnimationClasses() {\n var effects = [];\n\n for (var key in this.settings.cssEfects) {\n if (this.settings.cssEfects.hasOwnProperty(key)) {\n var effect = this.settings.cssEfects[key];\n effects.push(\"g\".concat(effect[\"in\"]));\n effects.push(\"g\".concat(effect.out));\n }\n }\n\n return effects.join(' ');\n }\n }, {\n key: \"build\",\n value: function build() {\n var _this7 = this;\n\n if (this.built) {\n return false;\n }\n\n var children = document.body.childNodes;\n var bodyChildElms = [];\n\n each(children, function (el) {\n if (el.parentNode == document.body && el.nodeName.charAt(0) !== '#' && el.hasAttribute && !el.hasAttribute('aria-hidden')) {\n bodyChildElms.push(el);\n el.setAttribute('aria-hidden', 'true');\n }\n });\n\n var nextSVG = has(this.settings.svg, 'next') ? this.settings.svg.next : '';\n var prevSVG = has(this.settings.svg, 'prev') ? this.settings.svg.prev : '';\n var closeSVG = has(this.settings.svg, 'close') ? this.settings.svg.close : '';\n var lightboxHTML = this.settings.lightboxHTML;\n lightboxHTML = lightboxHTML.replace(/{nextSVG}/g, nextSVG);\n lightboxHTML = lightboxHTML.replace(/{prevSVG}/g, prevSVG);\n lightboxHTML = lightboxHTML.replace(/{closeSVG}/g, closeSVG);\n lightboxHTML = createHTML(lightboxHTML);\n document.body.appendChild(lightboxHTML);\n var modal = document.getElementById('glightbox-body');\n this.modal = modal;\n var closeButton = modal.querySelector('.gclose');\n this.prevButton = modal.querySelector('.gprev');\n this.nextButton = modal.querySelector('.gnext');\n this.overlay = modal.querySelector('.goverlay');\n this.loader = modal.querySelector('.gloader');\n this.slidesContainer = document.getElementById('glightbox-slider');\n this.bodyHiddenChildElms = bodyChildElms;\n this.events = {};\n\n addClass(this.modal, 'glightbox-' + this.settings.skin);\n\n if (this.settings.closeButton && closeButton) {\n this.events['close'] = addEvent('click', {\n onElement: closeButton,\n withCallback: function withCallback(e, target) {\n e.preventDefault();\n\n _this7.close();\n }\n });\n }\n\n if (closeButton && !this.settings.closeButton) {\n closeButton.parentNode.removeChild(closeButton);\n }\n\n if (this.nextButton) {\n this.events['next'] = addEvent('click', {\n onElement: this.nextButton,\n withCallback: function withCallback(e, target) {\n e.preventDefault();\n\n _this7.nextSlide();\n }\n });\n }\n\n if (this.prevButton) {\n this.events['prev'] = addEvent('click', {\n onElement: this.prevButton,\n withCallback: function withCallback(e, target) {\n e.preventDefault();\n\n _this7.prevSlide();\n }\n });\n }\n\n if (this.settings.closeOnOutsideClick) {\n this.events['outClose'] = addEvent('click', {\n onElement: modal,\n withCallback: function withCallback(e, target) {\n if (!_this7.preventOutsideClick && !hasClass(document.body, 'glightbox-mobile') && !closest(e.target, '.ginner-container')) {\n if (!closest(e.target, '.gbtn') && !hasClass(e.target, 'gnext') && !hasClass(e.target, 'gprev')) {\n _this7.close();\n }\n }\n }\n });\n }\n\n each(this.elements, function (slide, i) {\n _this7.slidesContainer.appendChild(slide.instance.create());\n\n slide.slideNode = _this7.slidesContainer.querySelectorAll('.gslide')[i];\n });\n\n if (isTouch$1) {\n addClass(document.body, 'glightbox-touch');\n }\n\n this.events['resize'] = addEvent('resize', {\n onElement: window,\n withCallback: function withCallback() {\n _this7.resize();\n }\n });\n this.built = true;\n }\n }, {\n key: \"resize\",\n value: function resize() {\n var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n slide = !slide ? this.activeSlide : slide;\n\n if (!slide || hasClass(slide, 'zoomed')) {\n return;\n }\n\n var winSize = windowSize();\n\n var video = slide.querySelector('.gvideo-wrapper');\n var image = slide.querySelector('.gslide-image');\n var description = this.slideDescription;\n var winWidth = winSize.width;\n var winHeight = winSize.height;\n\n if (winWidth <= 768) {\n addClass(document.body, 'glightbox-mobile');\n } else {\n removeClass(document.body, 'glightbox-mobile');\n }\n\n if (!video && !image) {\n return;\n }\n\n var descriptionResize = false;\n\n if (description && (hasClass(description, 'description-bottom') || hasClass(description, 'description-top')) && !hasClass(description, 'gabsolute')) {\n descriptionResize = true;\n }\n\n if (image) {\n if (winWidth <= 768) {\n var imgNode = image.querySelector('img');\n } else if (descriptionResize) {\n var descHeight = description.offsetHeight;\n\n var _imgNode = image.querySelector('img');\n\n _imgNode.setAttribute('style', \"max-height: calc(100vh - \".concat(descHeight, \"px)\"));\n\n description.setAttribute('style', \"max-width: \".concat(_imgNode.offsetWidth, \"px;\"));\n }\n }\n\n if (video) {\n var ratio = has(this.settings.plyr.config, 'ratio') ? this.settings.plyr.config.ratio : '';\n\n if (!ratio) {\n var containerWidth = video.clientWidth;\n var containerHeight = video.clientHeight;\n var divisor = containerWidth / containerHeight;\n ratio = \"\".concat(containerWidth / divisor, \":\").concat(containerHeight / divisor);\n }\n\n var videoRatio = ratio.split(':');\n var videoWidth = this.settings.videosWidth;\n var maxWidth = this.settings.videosWidth;\n\n if (isNumber(videoWidth) || videoWidth.indexOf('px') !== -1) {\n maxWidth = parseInt(videoWidth);\n } else {\n if (videoWidth.indexOf('vw') !== -1) {\n maxWidth = winWidth * parseInt(videoWidth) / 100;\n } else if (videoWidth.indexOf('vh') !== -1) {\n maxWidth = winHeight * parseInt(videoWidth) / 100;\n } else if (videoWidth.indexOf('%') !== -1) {\n maxWidth = winWidth * parseInt(videoWidth) / 100;\n } else {\n maxWidth = parseInt(video.clientWidth);\n }\n }\n\n var maxHeight = maxWidth / (parseInt(videoRatio[0]) / parseInt(videoRatio[1]));\n maxHeight = Math.floor(maxHeight);\n\n if (descriptionResize) {\n winHeight = winHeight - description.offsetHeight;\n }\n\n if (maxWidth > winWidth || maxHeight > winHeight || winHeight < maxHeight && winWidth > maxWidth) {\n var vwidth = video.offsetWidth;\n var vheight = video.offsetHeight;\n\n var _ratio = winHeight / vheight;\n\n var vsize = {\n width: vwidth * _ratio,\n height: vheight * _ratio\n };\n video.parentNode.setAttribute('style', \"max-width: \".concat(vsize.width, \"px\"));\n\n if (descriptionResize) {\n description.setAttribute('style', \"max-width: \".concat(vsize.width, \"px;\"));\n }\n } else {\n video.parentNode.style.maxWidth = \"\".concat(videoWidth);\n\n if (descriptionResize) {\n description.setAttribute('style', \"max-width: \".concat(videoWidth, \";\"));\n }\n }\n }\n }\n }, {\n key: \"reload\",\n value: function reload() {\n this.init();\n }\n }, {\n key: \"updateNavigationClasses\",\n value: function updateNavigationClasses() {\n var loop = this.loop();\n\n removeClass(this.nextButton, 'disabled');\n\n removeClass(this.prevButton, 'disabled');\n\n if (this.index == 0 && this.elements.length - 1 == 0) {\n addClass(this.prevButton, 'disabled');\n\n addClass(this.nextButton, 'disabled');\n } else if (this.index === 0 && !loop) {\n addClass(this.prevButton, 'disabled');\n } else if (this.index === this.elements.length - 1 && !loop) {\n addClass(this.nextButton, 'disabled');\n }\n }\n }, {\n key: \"loop\",\n value: function loop() {\n var loop = has(this.settings, 'loopAtEnd') ? this.settings.loopAtEnd : null;\n loop = has(this.settings, 'loop') ? this.settings.loop : loop;\n return loop;\n }\n }, {\n key: \"close\",\n value: function close() {\n var _this8 = this;\n\n if (!this.lightboxOpen) {\n if (this.events) {\n for (var key in this.events) {\n if (this.events.hasOwnProperty(key)) {\n this.events[key].destroy();\n }\n }\n\n this.events = null;\n }\n\n return false;\n }\n\n if (this.closing) {\n return false;\n }\n\n this.closing = true;\n this.slidePlayerPause(this.activeSlide);\n\n if (this.fullElementsList) {\n this.elements = this.fullElementsList;\n }\n\n if (this.bodyHiddenChildElms.length) {\n each(this.bodyHiddenChildElms, function (el) {\n el.removeAttribute('aria-hidden');\n });\n }\n\n addClass(this.modal, 'glightbox-closing');\n\n animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade.out);\n\n animateElement(this.activeSlide, this.settings.cssEfects[this.settings.closeEffect].out, function () {\n _this8.activeSlide = null;\n _this8.prevActiveSlideIndex = null;\n _this8.prevActiveSlide = null;\n _this8.built = false;\n\n if (_this8.events) {\n for (var _key in _this8.events) {\n if (_this8.events.hasOwnProperty(_key)) {\n _this8.events[_key].destroy();\n }\n }\n\n _this8.events = null;\n }\n\n var body = document.body;\n\n removeClass(html, 'glightbox-open');\n\n removeClass(body, 'glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer');\n\n _this8.modal.parentNode.removeChild(_this8.modal);\n\n _this8.trigger('close');\n\n if (isFunction(_this8.settings.onClose)) {\n _this8.settings.onClose();\n }\n\n var styles = document.querySelector('.gcss-styles');\n\n if (styles) {\n styles.parentNode.removeChild(styles);\n }\n\n _this8.lightboxOpen = false;\n _this8.closing = null;\n });\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.close();\n this.clearAllEvents();\n\n if (this.baseEvents) {\n this.baseEvents.destroy();\n }\n }\n }, {\n key: \"on\",\n value: function on(evt, callback) {\n var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (!evt || !isFunction(callback)) {\n throw new TypeError('Event name and callback must be defined');\n }\n\n this.apiEvents.push({\n evt: evt,\n once: once,\n callback: callback\n });\n }\n }, {\n key: \"once\",\n value: function once(evt, callback) {\n this.on(evt, callback, true);\n }\n }, {\n key: \"trigger\",\n value: function trigger(eventName) {\n var _this9 = this;\n\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var onceTriggered = [];\n\n each(this.apiEvents, function (event, i) {\n var evt = event.evt,\n once = event.once,\n callback = event.callback;\n\n if (evt == eventName) {\n callback(data);\n\n if (once) {\n onceTriggered.push(i);\n }\n }\n });\n\n if (onceTriggered.length) {\n each(onceTriggered, function (i) {\n return _this9.apiEvents.splice(i, 1);\n });\n }\n }\n }, {\n key: \"clearAllEvents\",\n value: function clearAllEvents() {\n this.apiEvents.splice(0, this.apiEvents.length);\n }\n }, {\n key: \"version\",\n value: function version() {\n return _version;\n }\n }]);\n\n return GlightboxInit;\n }();\n\n function glightbox () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var instance = new GlightboxInit(options);\n instance.init();\n return instance;\n }\n\n return glightbox;\n\n})));\n","/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form:not([data-turbo=true])',\n formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n expando = '_ujsData';\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n return element[expando][key] = value;\n };\n Rails.isContentEditable = function (element) {\n var isEditable;\n isEditable = false;\n while (true) {\n if (element.isContentEditable) {\n isEditable = true;\n break;\n }\n element = element.parentElement;\n if (!element) {\n break;\n }\n }\n return isEditable;\n };\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function (event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n }\n return result;\n };\n }\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n prepareOptions = function (options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n return options;\n };\n createXHR = function (options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n };\n processResponse = function (response, type) {\n var parser, script;\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n return response;\n };\n Rails.href = function (element) {\n return element.href;\n };\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n toArray = function (e) {\n return Array.prototype.slice.call(e);\n };\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n allowAction = function (element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n if (!message) {\n return true;\n }\n answer = false;\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, 'confirm:complete', [answer]);\n }\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isContentEditable, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements, isContentEditable = Rails.isContentEditable;\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n Rails.enableElement = function (e) {\n var element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n disableLinkElement = function (element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n enableLinkElement = function (element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n disableFormElements = function (form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n disableFormElement = function (element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n enableFormElements = function (form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n enableFormElement = function (element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, 'ujs:enable-with', null);\n }\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n isXhrRedirect = function (event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var isContentEditable, stopEverything;\n stopEverything = Rails.stopEverything;\n isContentEditable = Rails.isContentEditable;\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n if (!method) {\n return;\n }\n if (isContentEditable(this)) {\n return;\n }\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isContentEditable,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement, isContentEditable = Rails.isContentEditable;\n isRemote = function (element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n if (isContentEditable(element)) {\n fire(element, 'ajax:stopped');\n return false;\n }\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function (xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function () {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function () {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function () {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n if (typeof module === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","export function definitionsFromContext(context) {\n return context.keys().map(function (key) {\n return definitionForModuleWithContextAndKey(context, key);\n }).filter(function (value) {\n return value;\n });\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n var identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n var controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return {\n identifier: identifier,\n controllerConstructor: controllerConstructor\n };\n }\n}\nexport function identifierForContextKey(key) {\n var logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}","document.addEventListener('trix-attachment-add', (event) => {\n\tif (!event.attachment.file) {\n\t\t// Deny HTML attachments (e.g. pasted images)\n\t\tevent.attachment.remove()\n\t}\n});\ndocument.addEventListener('trix-file-accept', (event) => {\n\t// Deny file attachments\n\tevent.preventDefault();\n});\ndocument.addEventListener('DOMContentLoaded', () => {\n\t// Open all external trix links in new pages/tabs\n\tconst trixLinks = document.querySelectorAll('.trix-content a');\n\tArray.prototype.forEach.call(trixLinks, (el, i) => {\n\t\tif (el.host !== window.location.host) {\n\t\t\tel.setAttribute('target', '_blank');\n\t\t}\n\t});\n});\n","/*!\n * Splide.js\n * Version : 2.4.20\n * License : MIT\n * Copyright: 2020 Naotoshi Fujita\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n if (typeof exports === 'object' && typeof module === 'object') module.exports = factory();else if (typeof define === 'function' && define.amd) define([], factory);else if (typeof exports === 'object') exports[\"Splide\"] = factory();else root[\"Splide\"] = factory();\n})(self, function () {\n return /******/(() => {\n // webpackBootstrap\n /******/\n \"use strict\";\n\n /******/\n var __webpack_modules__ = {\n /***/311: (/***/(__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n // ESM COMPAT FLAG\n __webpack_require__.r(__webpack_exports__);\n\n // EXPORTS\n __webpack_require__.d(__webpack_exports__, {\n \"default\": () => /* binding */module_Splide\n });\n\n // NAMESPACE OBJECT: ./src/js/constants/states.js\n var states_namespaceObject = {};\n __webpack_require__.r(states_namespaceObject);\n __webpack_require__.d(states_namespaceObject, {\n \"CREATED\": () => CREATED,\n \"DESTROYED\": () => DESTROYED,\n \"IDLE\": () => IDLE,\n \"MOUNTED\": () => MOUNTED,\n \"MOVING\": () => MOVING\n });\n ; // CONCATENATED MODULE: ./src/js/core/event.js\n /**\r\n * The function for providing an Event object simply managing events.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The function for providing an Event object simply managing events.\r\n */\n /* harmony default export */\n const core_event = function () {\n /**\r\n * Store all event data.\r\n *\r\n * @type {Array}\r\n */\n var data = [];\n var Event = {\n /**\r\n * Subscribe the given event(s).\r\n *\r\n * @param {string} events - An event name. Use space to separate multiple events.\r\n * Also, namespace is accepted by dot, such as 'resize.{namespace}'.\r\n * @param {function} handler - A callback function.\r\n * @param {Element} elm - Optional. Native event will be listened to when this arg is provided.\r\n * @param {Object} options - Optional. Options for addEventListener.\r\n */\n on: function on(events, handler, elm, options) {\n if (elm === void 0) {\n elm = null;\n }\n if (options === void 0) {\n options = {};\n }\n events.split(' ').forEach(function (event) {\n if (elm) {\n elm.addEventListener(event, handler, options);\n }\n data.push({\n event: event,\n handler: handler,\n elm: elm,\n options: options\n });\n });\n },\n /**\r\n * Unsubscribe the given event(s).\r\n *\r\n * @param {string} events - A event name or names split by space.\r\n * @param {Element} elm - Optional. removeEventListener() will be called when this arg is provided.\r\n */\n off: function off(events, elm) {\n if (elm === void 0) {\n elm = null;\n }\n events.split(' ').forEach(function (event) {\n data = data.filter(function (item) {\n if (item && item.event === event && item.elm === elm) {\n unsubscribe(item);\n return false;\n }\n return true;\n });\n });\n },\n /**\r\n * Emit an event.\r\n * This method is only for custom events.\r\n *\r\n * @param {string} event - An event name.\r\n * @param {*} args - Any number of arguments passed to handlers.\r\n */\n emit: function emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n data.forEach(function (item) {\n if (!item.elm && item.event.split('.')[0] === event) {\n item.handler.apply(item, args);\n }\n });\n },\n /**\r\n * Clear event data.\r\n */\n destroy: function destroy() {\n data.forEach(unsubscribe);\n data = [];\n }\n };\n /**\r\n * Remove the registered event listener.\r\n *\r\n * @param {Object} item - An object containing event data.\r\n */\n\n function unsubscribe(item) {\n if (item.elm) {\n item.elm.removeEventListener(item.event, item.handler, item.options);\n }\n }\n return Event;\n };\n ; // CONCATENATED MODULE: ./src/js/core/state.js\n /**\r\n * The function providing a super simple state system.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The function providing a super simple state system.\r\n *\r\n * @param {string|number} initialState - Provide the initial state value.\r\n */\n /* harmony default export */\n const state = function (initialState) {\n /**\r\n * Store the current state.\r\n *\r\n * @type {string|number}\r\n */\n var curr = initialState;\n return {\n /**\r\n * Change state.\r\n *\r\n * @param {string|number} state - A new state.\r\n */\n set: function set(state) {\n curr = state;\n },\n /**\r\n * Verify if the current state is given one or not.\r\n *\r\n * @param {string|number} state - A state name to be verified.\r\n *\r\n * @return {boolean} - True if the current state is the given one.\r\n */\n is: function is(state) {\n return state === curr;\n }\n };\n };\n ; // CONCATENATED MODULE: ./src/js/utils/object.js\n function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n }\n\n /**\r\n * Some utility functions related with Object, supporting IE.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n var keys = Object.keys;\n /**\r\n * Iterate an object like Array.forEach.\r\n * IE doesn't support forEach of HTMLCollection.\r\n *\r\n * @param {Object} obj - An object.\r\n * @param {function} callback - A function handling each value. Arguments are value, property and index.\r\n */\n\n function each(obj, callback) {\n keys(obj).some(function (key, index) {\n return callback(obj[key], key, index);\n });\n }\n /**\r\n * Return values of the given object as an array.\r\n * IE doesn't support Object.values.\r\n *\r\n * @param {Object} obj - An object.\r\n *\r\n * @return {Array} - An array containing all values of the given object.\r\n */\n\n function values(obj) {\n return keys(obj).map(function (key) {\n return obj[key];\n });\n }\n /**\r\n * Check if the given subject is object or not.\r\n *\r\n * @param {*} subject - A subject to be verified.\r\n *\r\n * @return {boolean} - True if object, false otherwise.\r\n */\n\n function isObject(subject) {\n return typeof subject === 'object';\n }\n /**\r\n * Merge two objects deeply.\r\n *\r\n * @param {Object} to - An object where \"from\" is merged.\r\n * @param {Object} from - An object merged to \"to\".\r\n *\r\n * @return {Object} - A merged object.\r\n */\n\n function merge(_ref, from) {\n var to = _extends({}, _ref);\n each(from, function (value, key) {\n if (isObject(value)) {\n if (!isObject(to[key])) {\n to[key] = {};\n }\n to[key] = merge(to[key], value);\n } else {\n to[key] = value;\n }\n });\n return to;\n }\n /**\r\n * Assign all properties \"from\" to \"to\" object.\r\n *\r\n * @param {Object} to - An object where properties are assigned.\r\n * @param {Object} from - An object whose properties are assigned to \"to\".\r\n *\r\n * @return {Object} - An assigned object.\r\n */\n\n function object_assign(to, from) {\n keys(from).forEach(function (key) {\n if (!to[key]) {\n Object.defineProperty(to, key, Object.getOwnPropertyDescriptor(from, key));\n }\n });\n return to;\n }\n ; // CONCATENATED MODULE: ./src/js/utils/utils.js\n /**\r\n * A package of some miscellaneous utility functions.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Convert the given value to array.\r\n *\r\n * @param {*} value - Any value.\r\n *\r\n * @return {*[]} - Array containing the given value.\r\n */\n\n function toArray(value) {\n return Array.isArray(value) ? value : [value];\n }\n /**\r\n * Check if the given value is between min and max.\r\n * Min will be returned when the value is less than min or max will do when greater than max.\r\n *\r\n * @param {number} value - A number to be checked.\r\n * @param {number} m1 - Minimum or maximum number.\r\n * @param {number} m2 - Maximum or minimum number.\r\n *\r\n * @return {number} - A value itself, min or max.\r\n */\n\n function between(value, m1, m2) {\n return Math.min(Math.max(value, m1 > m2 ? m2 : m1), m1 > m2 ? m1 : m2);\n }\n /**\r\n * The sprintf method with minimum functionality.\r\n *\r\n * @param {string} format - The string format.\r\n * @param {string|Array} replacements - Replacements accepting multiple arguments.\r\n *\r\n * @returns {string} - Converted string.\r\n */\n\n function sprintf(format, replacements) {\n var i = 0;\n return format.replace(/%s/g, function () {\n return toArray(replacements)[i++];\n });\n }\n /**\r\n * Append px unit to the given subject if necessary.\r\n *\r\n * @param {number|string} value - A value that may not include an unit.\r\n *\r\n * @return {string} - If the value is string, return itself.\r\n * If number, do value + \"px\". An empty string, otherwise.\r\n */\n\n function unit(value) {\n var type = typeof value;\n if (type === 'number' && value > 0) {\n return parseFloat(value) + 'px';\n }\n return type === 'string' ? value : '';\n }\n /**\r\n * Pad start with 0.\r\n *\r\n * @param {number} number - A number to be filled with 0.\r\n *\r\n * @return {string|number} - Padded number.\r\n */\n\n function pad(number) {\n return number < 10 ? '0' + number : number;\n }\n /**\r\n * Convert the given value to pixel.\r\n *\r\n * @param {Element} root - Root element where a dummy div is appended.\r\n * @param {string|number} value - CSS value to be converted, such as 10rem.\r\n *\r\n * @return {number} - Pixel.\r\n */\n\n function toPixel(root, value) {\n if (typeof value === 'string') {\n var div = create('div', {});\n applyStyle(div, {\n position: 'absolute',\n width: value\n });\n append(root, div);\n value = div.clientWidth;\n dom_remove(div);\n }\n return +value || 0;\n }\n ; // CONCATENATED MODULE: ./src/js/utils/dom.js\n /**\r\n * Some utility functions related with DOM.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Find the first element matching the given selector.\r\n * Be aware that all selectors after a space are ignored.\r\n *\r\n * @param {Element|Node} elm - An ancestor element.\r\n * @param {string} selector - DOMString.\r\n *\r\n * @return {Element|null} - A found element or null.\r\n */\n\n function find(elm, selector) {\n return elm ? elm.querySelector(selector.split(' ')[0]) : null;\n }\n /**\r\n * Find a first child having the given tag or class name.\r\n *\r\n * @param {Element} parent - A parent element.\r\n * @param {string} tagOrClassName - A tag or class name.\r\n *\r\n * @return {Element|undefined} - A found element on success or undefined on failure.\r\n */\n\n function child(parent, tagOrClassName) {\n return children(parent, tagOrClassName)[0];\n }\n /**\r\n * Return chile elements that matches the provided tag or class name.\r\n *\r\n * @param {Element} parent - A parent element.\r\n * @param {string} tagOrClassName - A tag or class name.\r\n *\r\n * @return {Element[]} - Found elements.\r\n */\n\n function children(parent, tagOrClassName) {\n if (parent) {\n return values(parent.children).filter(function (child) {\n return hasClass(child, tagOrClassName.split(' ')[0]) || child.tagName === tagOrClassName;\n });\n }\n return [];\n }\n /**\r\n * Create an element with some optional attributes.\r\n *\r\n * @param {string} tag - A tag name.\r\n * @param {Object} attrs - An object any attribute pairs of name and value.\r\n *\r\n * @return {Element} - A created element.\r\n */\n\n function create(tag, attrs) {\n var elm = document.createElement(tag);\n each(attrs, function (value, key) {\n return setAttribute(elm, key, value);\n });\n return elm;\n }\n /**\r\n * Convert HTML string to DOM node.\r\n *\r\n * @param {string} html - HTML string.\r\n *\r\n * @return {Node} - A created node.\r\n */\n\n function domify(html) {\n var div = create('div', {});\n div.innerHTML = html;\n return div.firstChild;\n }\n /**\r\n * Remove a given element from a DOM tree.\r\n *\r\n * @param {Element|Element[]} elms - Element(s) to be removed.\r\n */\n\n function dom_remove(elms) {\n toArray(elms).forEach(function (elm) {\n if (elm) {\n var parent = elm.parentElement;\n parent && parent.removeChild(elm);\n }\n });\n }\n /**\r\n * Append a child to a given element.\r\n *\r\n * @param {Element} parent - A parent element.\r\n * @param {Element} child - An element to be appended.\r\n */\n\n function append(parent, child) {\n if (parent) {\n parent.appendChild(child);\n }\n }\n /**\r\n * Insert an element before the reference element.\r\n *\r\n * @param {Element|Node} ref - A reference element.\r\n * @param {Element} elm - An element to be inserted.\r\n */\n\n function before(elm, ref) {\n if (elm && ref) {\n var parent = ref.parentElement;\n parent && parent.insertBefore(elm, ref);\n }\n }\n /**\r\n * Apply styles to the given element.\r\n *\r\n * @param {Element} elm - An element where styles are applied.\r\n * @param {Object} styles - Object containing styles.\r\n */\n\n function applyStyle(elm, styles) {\n if (elm) {\n each(styles, function (value, prop) {\n if (value !== null) {\n elm.style[prop] = value;\n }\n });\n }\n }\n /**\r\n * Add or remove classes to/from the element.\r\n * This function is for internal usage.\r\n *\r\n * @param {Element} elm - An element where classes are added.\r\n * @param {string|string[]} classes - Class names being added.\r\n * @param {boolean} remove - Whether to remove or add classes.\r\n */\n\n function addOrRemoveClasses(elm, classes, remove) {\n if (elm) {\n toArray(classes).forEach(function (name) {\n if (name) {\n elm.classList[remove ? 'remove' : 'add'](name);\n }\n });\n }\n }\n /**\r\n * Add classes to the element.\r\n *\r\n * @param {Element} elm - An element where classes are added.\r\n * @param {string|string[]} classes - Class names being added.\r\n */\n\n function addClass(elm, classes) {\n addOrRemoveClasses(elm, classes, false);\n }\n /**\r\n * Remove a class from the element.\r\n *\r\n * @param {Element} elm - An element where classes are removed.\r\n * @param {string|string[]} classes - A class name being removed.\r\n */\n\n function removeClass(elm, classes) {\n addOrRemoveClasses(elm, classes, true);\n }\n /**\r\n * Verify if the provided element has the class or not.\r\n *\r\n * @param {Element} elm - An element.\r\n * @param {string} className - A class name.\r\n *\r\n * @return {boolean} - True if the element has the class or false if not.\r\n */\n\n function hasClass(elm, className) {\n return !!elm && elm.classList.contains(className);\n }\n /**\r\n * Set attribute to the given element.\r\n *\r\n * @param {Element} elm - An element where an attribute is assigned.\r\n * @param {string} name - Attribute name.\r\n * @param {string|number|boolean} value - Attribute value.\r\n */\n\n function setAttribute(elm, name, value) {\n if (elm) {\n elm.setAttribute(name, value);\n }\n }\n /**\r\n * Get attribute from the given element.\r\n *\r\n * @param {Element} elm - An element where an attribute is assigned.\r\n * @param {string} name - Attribute name.\r\n *\r\n * @return {string} - The value of the given attribute if available. An empty string if not.\r\n */\n\n function getAttribute(elm, name) {\n return elm ? elm.getAttribute(name) : '';\n }\n /**\r\n * Remove attribute from the given element.\r\n *\r\n * @param {Element|Element[]} elms - An element where an attribute is removed.\r\n * @param {string|string[]} names - Attribute name.\r\n */\n\n function removeAttribute(elms, names) {\n toArray(names).forEach(function (name) {\n toArray(elms).forEach(function (elm) {\n return elm && elm.removeAttribute(name);\n });\n });\n }\n /**\r\n * Return the Rect object of the provided object.\r\n *\r\n * @param {Element} elm - An element.\r\n *\r\n * @return {ClientRect|DOMRect} - A rect object.\r\n */\n\n function getRect(elm) {\n return elm.getBoundingClientRect();\n }\n /**\r\n * Trigger the given callback after all images contained by the element are loaded.\r\n *\r\n * @param {Element} elm - Element that may contain images.\r\n * @param {Function} callback - Callback function fired right after all images are loaded.\r\n */\n\n function loaded(elm, callback) {\n var images = elm.querySelectorAll('img');\n var length = images.length;\n if (length) {\n var count = 0;\n each(images, function (img) {\n img.onload = img.onerror = function () {\n if (++count === length) {\n callback();\n }\n };\n });\n } else {\n // Trigger the callback immediately if there is no image.\n callback();\n }\n }\n ; // CONCATENATED MODULE: ./src/js/constants/types.js\n /**\r\n * Export slider types.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Normal slider.\r\n *\r\n * @type {string}\r\n */\n var SLIDE = 'slide';\n /**\r\n * Loop after the last slide and before the first one.\r\n *\r\n * @type {string}\r\n */\n\n var LOOP = 'loop';\n /**\r\n * The track doesn't move.\r\n *\r\n * @type {string}\r\n */\n\n var FADE = 'fade';\n ; // CONCATENATED MODULE: ./src/js/transitions/slide/index.js\n /**\r\n * The component for general slide effect transition.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The component for general slide effect transition.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const slide = function (Splide, Components) {\n /**\r\n * Hold the list element.\r\n *\r\n * @type {Element}\r\n */\n var list;\n /**\r\n * Hold the onEnd callback function.\r\n *\r\n * @type {function}\r\n */\n\n var endCallback;\n return {\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n list = Components.Elements.list;\n Splide.on('transitionend', function (e) {\n if (e.target === list && endCallback) {\n endCallback();\n }\n }, list);\n },\n /**\r\n * Start transition.\r\n *\r\n * @param {number} destIndex - Destination slide index that might be clone's.\r\n * @param {number} newIndex - New index.\r\n * @param {number} prevIndex - Previous index.\r\n * @param {Object} coord - Destination coordinates.\r\n * @param {function} done - Callback function must be invoked when transition is completed.\r\n */\n start: function start(destIndex, newIndex, prevIndex, coord, done) {\n var options = Splide.options;\n var edgeIndex = Components.Controller.edgeIndex;\n var speed = options.speed;\n endCallback = done;\n if (Splide.is(SLIDE)) {\n if (prevIndex === 0 && newIndex >= edgeIndex || prevIndex >= edgeIndex && newIndex === 0) {\n speed = options.rewindSpeed || speed;\n }\n }\n applyStyle(list, {\n transition: \"transform \" + speed + \"ms \" + options.easing,\n transform: \"translate(\" + coord.x + \"px,\" + coord.y + \"px)\"\n });\n }\n };\n };\n ; // CONCATENATED MODULE: ./src/js/transitions/fade/index.js\n /**\r\n * The component for fade transition.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The component for fade transition.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const fade = function (Splide, Components) {\n var Fade = {\n /**\r\n * Called when the component is mounted.\r\n * Apply transition style to the first slide.\r\n */\n mount: function mount() {\n apply(Splide.index);\n },\n /**\r\n * Start transition.\r\n *\r\n * @param {number} destIndex - Destination slide index that might be clone's.\r\n * @param {number} newIndex - New index.\r\n * @param {number} prevIndex - Previous index.\r\n * @param {Object} coord - Destination coordinates.\r\n * @param {function} done - Callback function must be invoked when transition is completed.\r\n */\n start: function start(destIndex, newIndex, prevIndex, coord, done) {\n var track = Components.Elements.track;\n applyStyle(track, {\n height: unit(track.clientHeight)\n });\n apply(newIndex);\n setTimeout(function () {\n done();\n applyStyle(track, {\n height: ''\n });\n });\n }\n };\n /**\r\n * Apply transition style to the slide specified by the given index.\r\n *\r\n * @param {number} index - A slide index.\r\n */\n\n function apply(index) {\n var options = Splide.options;\n applyStyle(Components.Elements.slides[index], {\n transition: \"opacity \" + options.speed + \"ms \" + options.easing\n });\n }\n return Fade;\n };\n ; // CONCATENATED MODULE: ./src/js/transitions/index.js\n /**\r\n * Export transition components.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n ; // CONCATENATED MODULE: ./src/js/core/composer.js\n /**\r\n * Provide a function for composing components.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Compose components.\r\n *\r\n * @param {Splide} Splide - Splide instance.\r\n * @param {Object} Components - Additional components.\r\n * @param {function} Transition - Change component for transition.\r\n *\r\n * @return {Object} - An object containing all components.\r\n */\n\n function compose(Splide, Components, Transition) {\n var components = {};\n each(Components, function (Component, name) {\n components[name] = Component(Splide, components, name.toLowerCase());\n });\n if (!Transition) {\n Transition = Splide.is(FADE) ? fade : slide;\n }\n components.Transition = Transition(Splide, components);\n return components;\n }\n ; // CONCATENATED MODULE: ./src/js/utils/error.js\n /**\r\n * Utility functions for outputting logs.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Prefix of an error massage.\r\n *\r\n * @type {string}\r\n */\n var MESSAGE_PREFIX = '[SPLIDE]';\n /**\r\n * Display an error message on the browser console.\r\n *\r\n * @param {string} message - An error message.\r\n */\n\n function error(message) {\n console.error(MESSAGE_PREFIX + \" \" + message);\n }\n /**\r\n * Check existence of the given object and throw an error if it doesn't.\r\n *\r\n * @throws {Error}\r\n *\r\n * @param {*} subject - A subject to be confirmed.\r\n * @param {string} message - An error message.\r\n */\n\n function exist(subject, message) {\n if (!subject) {\n throw new Error(message);\n }\n }\n ; // CONCATENATED MODULE: ./src/js/constants/classes.js\n /**\r\n * Export class names.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * A root class name.\r\n *\r\n * @type {string}\r\n */\n var ROOT = 'splide';\n /**\r\n * The definition table of all classes for elements.\r\n * They might be modified by options.\r\n *\r\n * @type {Object}\r\n */\n\n var ELEMENT_CLASSES = {\n root: ROOT,\n slider: ROOT + \"__slider\",\n track: ROOT + \"__track\",\n list: ROOT + \"__list\",\n slide: ROOT + \"__slide\",\n container: ROOT + \"__slide__container\",\n arrows: ROOT + \"__arrows\",\n arrow: ROOT + \"__arrow\",\n prev: ROOT + \"__arrow--prev\",\n next: ROOT + \"__arrow--next\",\n pagination: ROOT + \"__pagination\",\n page: ROOT + \"__pagination__page\",\n clone: ROOT + \"__slide--clone\",\n progress: ROOT + \"__progress\",\n bar: ROOT + \"__progress__bar\",\n autoplay: ROOT + \"__autoplay\",\n play: ROOT + \"__play\",\n pause: ROOT + \"__pause\",\n spinner: ROOT + \"__spinner\",\n sr: ROOT + \"__sr\"\n };\n /**\r\n * Definitions of status classes.\r\n *\r\n * @type {Object}\r\n */\n\n var STATUS_CLASSES = {\n active: 'is-active',\n visible: 'is-visible',\n loading: 'is-loading'\n };\n ; // CONCATENATED MODULE: ./src/js/constants/i18n.js\n /**\r\n * Export i18n texts as object.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Texts for i18n.\r\n *\r\n * @type {Object}\r\n */\n var I18N = {\n prev: 'Previous slide',\n next: 'Next slide',\n first: 'Go to first slide',\n last: 'Go to last slide',\n slideX: 'Go to slide %s',\n pageX: 'Go to page %s',\n play: 'Start autoplay',\n pause: 'Pause autoplay'\n };\n ; // CONCATENATED MODULE: ./src/js/constants/defaults.js\n /**\r\n * Export default options.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n var DEFAULTS = {\n /**\r\n * Determine a slider type.\r\n * - 'slide': Regular slider.\r\n * - 'loop' : Carousel slider.\r\n * - 'fade' : Change slides with fade transition. perPage, drag options are ignored.\r\n *\r\n * @type {string}\r\n */\n type: 'slide',\n /**\r\n * Whether to rewind a slider before the first slide or after the last one.\r\n * In \"loop\" mode, this option is ignored.\r\n *\r\n * @type {boolean}\r\n */\n rewind: false,\n /**\r\n * Transition speed in milliseconds.\r\n *\r\n * @type {number}\r\n */\n speed: 400,\n /**\r\n * Transition speed on rewind in milliseconds.\r\n *\r\n * @type {number}\r\n */\n rewindSpeed: 0,\n /**\r\n * Whether to prevent any actions while a slider is transitioning.\r\n * If false, navigation, drag and swipe work while the slider is running.\r\n * Even so, it will be forced to wait for transition in some cases in the loop mode to shift a slider.\r\n *\r\n * @type {boolean}\r\n */\n waitForTransition: true,\n /**\r\n * Define slider max width.\r\n *\r\n * @type {number}\r\n */\n width: 0,\n /**\r\n * Define slider height.\r\n *\r\n * @type {number}\r\n */\n height: 0,\n /**\r\n * Fix width of slides. CSS format is allowed such as 10em, 80% or 80vw.\r\n * perPage number will be ignored when this option is falsy.\r\n *\r\n * @type {number|string}\r\n */\n fixedWidth: 0,\n /**\r\n * Fix height of slides. CSS format is allowed such as 10em, 80vh but % unit is not accepted.\r\n * heightRatio option will be ignored when this option is falsy.\r\n *\r\n * @type {number|string}\r\n */\n fixedHeight: 0,\n /**\r\n * Determine height of slides by ratio to a slider width.\r\n * This will be ignored when the fixedHeight is provided.\r\n *\r\n * @type {number}\r\n */\n heightRatio: 0,\n /**\r\n * If true, slide width will be determined by the element width itself.\r\n * - perPage/perMove should be 1.\r\n *\r\n * @type {boolean}\r\n */\n autoWidth: false,\n /**\r\n * If true, slide height will be determined by the element width itself.\r\n * - perPage/perMove should be 1.\r\n *\r\n * @type {boolean}\r\n */\n autoHeight: false,\n /**\r\n * Determine how many slides should be displayed per page.\r\n *\r\n * @type {number}\r\n */\n perPage: 1,\n /**\r\n * Determine how many slides should be moved when a slider goes to next or perv.\r\n *\r\n * @type {number}\r\n */\n perMove: 0,\n /**\r\n * Determine manually how many clones should be generated on the left and right side.\r\n * The total number of clones will be twice of this number.\r\n *\r\n * @type {number}\r\n */\n clones: 0,\n /**\r\n * Start index.\r\n *\r\n * @type {number}\r\n */\n start: 0,\n /**\r\n * Determine which slide should be focused if there are multiple slides in a page.\r\n * A string \"center\" is acceptable for centering slides.\r\n *\r\n * @type {boolean|number|string}\r\n */\n focus: false,\n /**\r\n * Gap between slides. CSS format is allowed such as 1em.\r\n *\r\n * @type {number|string}\r\n */\n gap: 0,\n /**\r\n * Set padding-left/right in horizontal mode or padding-top/bottom in vertical one.\r\n * Give a single value to set a same size for both sides or\r\n * do an object for different sizes.\r\n * Also, CSS format is allowed such as 1em.\r\n *\r\n * @example\r\n * - 10: Number\r\n * - '1em': CSS format.\r\n * - { left: 0, right: 20 }: Object for different sizes in horizontal mode.\r\n * - { top: 0, bottom: 20 }: Object for different sizes in vertical mode.\r\n *\r\n * @type {number|string|Object}\r\n */\n padding: 0,\n /**\r\n * Whether to append arrows.\r\n *\r\n * @type {boolean}\r\n */\n arrows: true,\n /**\r\n * Change the arrow SVG path like 'm7.61 0.807-2.12...'.\r\n *\r\n * @type {string}\r\n */\n arrowPath: '',\n /**\r\n * Whether to append pagination(indicator dots) or not.\r\n *\r\n * @type {boolean}\r\n */\n pagination: true,\n /**\r\n * Activate autoplay.\r\n *\r\n * @type {boolean}\r\n */\n autoplay: false,\n /**\r\n * Autoplay interval in milliseconds.\r\n *\r\n * @type {number}\r\n */\n interval: 5000,\n /**\r\n * Whether to stop autoplay when a slider is hovered.\r\n *\r\n * @type {boolean}\r\n */\n pauseOnHover: true,\n /**\r\n * Whether to stop autoplay when a slider elements are focused.\r\n * True is recommended for accessibility.\r\n *\r\n * @type {boolean}\r\n */\n pauseOnFocus: true,\n /**\r\n * Whether to reset progress of the autoplay timer when resumed.\r\n *\r\n * @type {boolean}\r\n */\n resetProgress: true,\n /**\r\n * Loading images lazily.\r\n * Image src must be provided by a data-splide-lazy attribute.\r\n *\r\n * - false: Do nothing.\r\n * - 'nearby': Only images around an active slide will be loaded.\r\n * - 'sequential': All images will be sequentially loaded.\r\n *\r\n * @type {boolean|string}\r\n */\n lazyLoad: false,\n /**\r\n * This option works only when a lazyLoad option is \"nearby\".\r\n * Determine how many pages(not slides) around an active slide should be loaded beforehand.\r\n *\r\n * @type {number}\r\n */\n preloadPages: 1,\n /**\r\n * Easing for CSS transition. For example, linear, ease or cubic-bezier().\r\n *\r\n * @type {string}\r\n */\n easing: 'cubic-bezier(.42,.65,.27,.99)',\n /**\r\n * Whether to enable keyboard shortcuts\r\n * - true or 'global': Listen to keydown event of the document.\r\n * - 'focused': Listen to the keydown event of the slider root element. tabindex=\"0\" will be added to the element.\r\n * - false: Disable keyboard shortcuts.\r\n *\r\n * @type {boolean|string}\r\n */\n keyboard: 'global',\n /**\r\n * Whether to allow mouse drag and touch swipe.\r\n *\r\n * @type {boolean}\r\n */\n drag: true,\n /**\r\n * The angle threshold for drag.\r\n * The slider starts moving only when the drag angle is less than this threshold.\r\n *\r\n * @type {number}\r\n */\n dragAngleThreshold: 30,\n /**\r\n * Distance threshold for determining if the action is \"flick\" or \"swipe\".\r\n * When a drag distance is over this value, the action will be treated as \"swipe\", not \"flick\".\r\n *\r\n * @type {number}\r\n */\n swipeDistanceThreshold: 150,\n /**\r\n * Velocity threshold for determining if the action is \"flick\" or \"swipe\".\r\n * Around 0.5 is recommended.\r\n *\r\n * @type {number}\r\n */\n flickVelocityThreshold: .6,\n /**\r\n * Determine power of flick. The larger number this is, the farther a slider runs by flick.\r\n * Around 500 is recommended.\r\n *\r\n * @type {number}\r\n */\n flickPower: 600,\n /**\r\n * Limit a number of pages to move by flick.\r\n *\r\n * @type {number}\r\n */\n flickMaxPages: 1,\n /**\r\n * Slider direction.\r\n * - 'ltr': Left to right.\r\n * - 'rtl': Right to left.\r\n * - 'ttb': Top to bottom.\r\n *\r\n * @type {string}\r\n */\n direction: 'ltr',\n /**\r\n * Set img src to background-image of its parent element.\r\n * Images with various sizes can be displayed as same dimension without cropping work.\r\n * fixedHeight or heightRatio is required.\r\n *\r\n * @type {boolean}\r\n */\n cover: false,\n /**\r\n * Whether to enable accessibility(aria and screen reader texts) or not.\r\n *\r\n * @type {boolean}\r\n */\n accessibility: true,\n /**\r\n * Whether to add tabindex=\"0\" to visible slides or not.\r\n *\r\n * @type {boolean}\r\n */\n slideFocus: true,\n /**\r\n * Determine if a slider is navigation for another.\r\n * Use \"sync\" API to synchronize two sliders.\r\n *\r\n * @type {boolean}\r\n */\n isNavigation: false,\n /**\r\n * Whether to trim spaces before the fist slide or after the last one when \"focus\" is not 0.\r\n *\r\n * @type {boolean}\r\n */\n trimSpace: true,\n /**\r\n * The \"is-active\" class is added after transition as default.\r\n * If true, it will be added before move.\r\n *\r\n * @type {boolean}\r\n */\n updateOnMove: false,\n /**\r\n * Throttle duration in milliseconds for the resize event.\r\n *\r\n * @type {number}\r\n */\n throttle: 100,\n /**\r\n * Whether to destroy a slider or not.\r\n *\r\n * @type {boolean}\r\n */\n destroy: false,\n /**\r\n * Options for specific breakpoints.\r\n *\r\n * @example\r\n * {\r\n * 1000: {\r\n * perPage: 3,\r\n * gap: 20\r\n * },\r\n * 600: {\r\n * perPage: 1,\r\n * gap: 5,\r\n * }\r\n * }\r\n *\r\n * @type {boolean|Object}\r\n */\n breakpoints: false,\n /**\r\n * Collection of class names.\r\n *\r\n * @see ./classes.js\r\n *\r\n * @type {Object}\r\n */\n classes: ELEMENT_CLASSES,\n /**\r\n * Collection of i18n texts.\r\n *\r\n * @see ./i18n.js\r\n *\r\n * @type {Object}\r\n */\n i18n: I18N\n };\n ; // CONCATENATED MODULE: ./src/js/constants/states.js\n /**\r\n * Export state constants.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Splide has been just created.\r\n *\r\n * @type {number}\r\n */\n var CREATED = 1;\n /**\r\n * All components have been mounted and initialized.\r\n *\r\n * @type {number}\r\n */\n\n var MOUNTED = 2;\n /**\r\n * Splide is ready for transition.\r\n *\r\n * @type {number}\r\n */\n\n var IDLE = 3;\n /**\r\n * Splide is moving.\r\n *\r\n * @type {number}\r\n */\n\n var MOVING = 4;\n /**\r\n * Splide is moving.\r\n *\r\n * @type {number}\r\n */\n\n var DESTROYED = 5;\n ; // CONCATENATED MODULE: ./src/js/splide.js\n function _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, descriptor.key, descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\r\n * The main class for applying Splide to an element.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The main class for applying Splide to an element,\r\n * providing some APIs to control the behavior.\r\n */\n\n var Splide = /*#__PURE__*/function () {\n /**\r\n * Splide constructor.\r\n *\r\n * @throws {Error} When the given root element or selector is invalid.\r\n *\r\n * @param {Element|string} root - A selector for a root element or an element itself.\r\n * @param {Object} options - Optional. Options to change default behaviour.\r\n * @param {Object} Components - Optional. Components.\r\n */\n function Splide(root, options, Components) {\n if (options === void 0) {\n options = {};\n }\n if (Components === void 0) {\n Components = {};\n }\n this.root = root instanceof Element ? root : document.querySelector(root);\n exist(this.root, 'An invalid element/selector was given.');\n this.Components = null;\n this.Event = core_event();\n this.State = state(CREATED);\n this.STATES = states_namespaceObject;\n this._o = merge(DEFAULTS, options);\n this._i = 0;\n this._c = Components;\n this._e = {}; // Extensions\n\n this._t = null; // Transition\n }\n /**\r\n * Compose and mount components.\r\n *\r\n * @param {Object} Extensions - Optional. Additional components.\r\n * @param {function} Transition - Optional. Set a custom transition component.\r\n *\r\n * @return {Splide|undefined} - This instance or undefined if an exception occurred.\r\n */\n\n var _proto = Splide.prototype;\n _proto.mount = function mount(Extensions, Transition) {\n var _this = this;\n if (Extensions === void 0) {\n Extensions = this._e;\n }\n if (Transition === void 0) {\n Transition = this._t;\n }\n\n // Reset the state.\n this.State.set(CREATED);\n this._e = Extensions;\n this._t = Transition;\n this.Components = compose(this, merge(this._c, Extensions), Transition);\n try {\n each(this.Components, function (component, key) {\n var required = component.required;\n if (required === undefined || required) {\n component.mount && component.mount();\n } else {\n delete _this.Components[key];\n }\n });\n } catch (e) {\n error(e.message);\n return;\n }\n var State = this.State;\n State.set(MOUNTED);\n each(this.Components, function (component) {\n component.mounted && component.mounted();\n });\n this.emit('mounted');\n State.set(IDLE);\n this.emit('ready');\n applyStyle(this.root, {\n visibility: 'visible'\n });\n this.on('move drag', function () {\n return State.set(MOVING);\n }).on('moved dragged', function () {\n return State.set(IDLE);\n });\n return this;\n }\n /**\r\n * Set sync target.\r\n *\r\n * @param {Splide} splide - A Splide instance.\r\n *\r\n * @return {Splide} - This instance.\r\n */;\n _proto.sync = function sync(splide) {\n this.sibling = splide;\n return this;\n }\n /**\r\n * Register callback fired on the given event(s).\r\n *\r\n * @param {string} events - An event name. Use space to separate multiple events.\r\n * Also, namespace is accepted by dot, such as 'resize.{namespace}'.\r\n * @param {function} handler - A callback function.\r\n * @param {Element} elm - Optional. Native event will be listened to when this arg is provided.\r\n * @param {Object} options - Optional. Options for addEventListener.\r\n *\r\n * @return {Splide} - This instance.\r\n */;\n _proto.on = function on(events, handler, elm, options) {\n if (elm === void 0) {\n elm = null;\n }\n if (options === void 0) {\n options = {};\n }\n this.Event.on(events, handler, elm, options);\n return this;\n }\n /**\r\n * Unsubscribe the given event.\r\n *\r\n * @param {string} events - A event name.\r\n * @param {Element} elm - Optional. removeEventListener() will be called when this arg is provided.\r\n *\r\n * @return {Splide} - This instance.\r\n */;\n _proto.off = function off(events, elm) {\n if (elm === void 0) {\n elm = null;\n }\n this.Event.off(events, elm);\n return this;\n }\n /**\r\n * Emit an event.\r\n *\r\n * @param {string} event - An event name.\r\n * @param {*} args - Any number of arguments passed to handlers.\r\n */;\n _proto.emit = function emit(event) {\n var _this$Event;\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n (_this$Event = this.Event).emit.apply(_this$Event, [event].concat(args));\n return this;\n }\n /**\r\n * Go to the slide specified by the given control.\r\n *\r\n * @param {string|number} control - A control pattern.\r\n * @param {boolean} wait - Optional. Whether to wait for transition.\r\n */;\n _proto.go = function go(control, wait) {\n if (wait === void 0) {\n wait = this.options.waitForTransition;\n }\n if (this.State.is(IDLE) || this.State.is(MOVING) && !wait) {\n this.Components.Controller.go(control, false);\n }\n return this;\n }\n /**\r\n * Verify whether the slider type is the given one or not.\r\n *\r\n * @param {string} type - A slider type.\r\n *\r\n * @return {boolean} - True if the slider type is the provided type or false if not.\r\n */;\n _proto.is = function is(type) {\n return type === this._o.type;\n }\n /**\r\n * Insert a slide.\r\n *\r\n * @param {Element|string} slide - A slide element to be added.\r\n * @param {number} index - A slide will be added at the position.\r\n */;\n _proto.add = function add(slide, index) {\n if (index === void 0) {\n index = -1;\n }\n this.Components.Elements.add(slide, index, this.refresh.bind(this));\n return this;\n }\n /**\r\n * Remove the slide designated by the index.\r\n *\r\n * @param {number} index - A slide index.\r\n */;\n _proto.remove = function remove(index) {\n this.Components.Elements.remove(index);\n this.refresh();\n return this;\n }\n /**\r\n * Destroy all Slide objects and clones and recreate them again.\r\n */;\n _proto.refresh = function refresh() {\n this.emit('refresh:before').emit('refresh').emit('resize');\n return this;\n }\n /**\r\n * Destroy the Splide.\r\n * \"Completely\" boolean is mainly for breakpoints.\r\n *\r\n * @param {boolean} completely - Destroy completely.\r\n */;\n _proto.destroy = function destroy(completely) {\n var _this2 = this;\n if (completely === void 0) {\n completely = true;\n }\n\n // Postpone destroy because it should be done after mount.\n if (this.State.is(CREATED)) {\n this.on('ready', function () {\n return _this2.destroy(completely);\n });\n return;\n }\n values(this.Components).reverse().forEach(function (component) {\n component.destroy && component.destroy(completely);\n });\n this.emit('destroy', completely); // Destroy all event handlers, including ones for native events.\n\n this.Event.destroy();\n this.State.set(DESTROYED);\n return this;\n }\n /**\r\n * Return the current slide index.\r\n *\r\n * @return {number} - The current slide index.\r\n // */;\n _createClass(Splide, [{\n key: \"index\",\n get: function get() {\n return this._i;\n }\n /**\r\n * Set the current slide index.\r\n *\r\n * @param {number|string} index - A new index.\r\n */,\n\n set: function set(index) {\n this._i = parseInt(index);\n }\n /**\r\n * Return length of slides.\r\n * This is an alias of Elements.length.\r\n *\r\n * @return {number} - A number of slides.\r\n */\n }, {\n key: \"length\",\n get: function get() {\n return this.Components.Elements.length;\n }\n /**\r\n * Return options.\r\n *\r\n * @return {Object} - Options object.\r\n */\n }, {\n key: \"options\",\n get: function get() {\n return this._o;\n }\n /**\r\n * Set options with merging the given object to the current one.\r\n *\r\n * @param {Object} options - New options.\r\n */,\n\n set: function set(options) {\n var created = this.State.is(CREATED);\n if (!created) {\n this.emit('update');\n }\n this._o = merge(this._o, options);\n if (!created) {\n this.emit('updated', this._o);\n }\n }\n /**\r\n * Return the class list.\r\n * This is an alias of Splide.options.classList.\r\n *\r\n * @return {Object} - An object containing all class list.\r\n */\n }, {\n key: \"classes\",\n get: function get() {\n return this._o.classes;\n }\n /**\r\n * Return the i18n strings.\r\n * This is an alias of Splide.options.i18n.\r\n *\r\n * @return {Object} - An object containing all i18n strings.\r\n */\n }, {\n key: \"i18n\",\n get: function get() {\n return this._o.i18n;\n }\n }]);\n return Splide;\n }();\n ; // CONCATENATED MODULE: ./src/js/components/options/index.js\n /**\r\n * The component for initializing options.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The component for initializing options.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const options = function (Splide) {\n /**\r\n * Retrieve options from the data attribute.\r\n * Note that IE10 doesn't support dataset property.\r\n *\r\n * @type {string}\r\n */\n var options = getAttribute(Splide.root, 'data-splide');\n if (options) {\n try {\n Splide.options = JSON.parse(options);\n } catch (e) {\n error(e.message);\n }\n }\n return {\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n if (Splide.State.is(CREATED)) {\n Splide.index = Splide.options.start;\n }\n }\n };\n };\n ; // CONCATENATED MODULE: ./src/js/constants/directions.js\n /**\r\n * Export layout modes.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Enumerate slides from left to right.\r\n *\r\n * @type {string}\r\n */\n var LTR = 'ltr';\n /**\r\n * Enumerate slides from right to left.\r\n *\r\n * @type {string}\r\n */\n\n var RTL = 'rtl';\n /**\r\n * Enumerate slides in a col.\r\n *\r\n * @type {string}\r\n */\n\n var TTB = 'ttb';\n ; // CONCATENATED MODULE: ./src/js/components/elements/slide.js\n /**\r\n * The sub component for handling each slide.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Events for restoring original styles.\r\n *\r\n * @type {string}\r\n */\n\n var STYLE_RESTORE_EVENTS = 'update.slide';\n /**\r\n * The sub component for handling each slide.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {number} index - An unique slide index.\r\n * @param {number} realIndex - Clones should pass a real slide index.\r\n * @param {Element} slide - A slide element.\r\n *\r\n * @return {Object} - The sub component object.\r\n */\n\n /* harmony default export */\n const elements_slide = function (Splide, index, realIndex, slide) {\n /**\r\n * Whether to update \"is-active\" class before or after transition.\r\n *\r\n * @type {boolean}\r\n */\n var updateOnMove = Splide.options.updateOnMove;\n /**\r\n * Events when the slide status is updated.\r\n * Append a namespace to remove listeners later.\r\n *\r\n * @type {string}\r\n */\n\n var STATUS_UPDATE_EVENTS = 'ready.slide updated.slide resized.slide moved.slide' + (updateOnMove ? ' move.slide' : '');\n /**\r\n * Slide sub component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Slide = {\n /**\r\n * Slide element.\r\n *\r\n * @type {Element}\r\n */\n slide: slide,\n /**\r\n * Slide index.\r\n *\r\n * @type {number}\r\n */\n index: index,\n /**\r\n * Real index for clones.\r\n *\r\n * @type {number}\r\n */\n realIndex: realIndex,\n /**\r\n * Container element if available.\r\n *\r\n * @type {Element|undefined}\r\n */\n container: child(slide, Splide.classes.container),\n /**\r\n * Whether this is a cloned slide or not.\r\n *\r\n * @type {boolean}\r\n */\n isClone: realIndex > -1,\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n var _this = this;\n if (!this.isClone) {\n slide.id = Splide.root.id + \"-slide\" + pad(index + 1);\n }\n Splide.on(STATUS_UPDATE_EVENTS, function () {\n return _this.update();\n }).on(STYLE_RESTORE_EVENTS, restoreStyles).on('click', function () {\n return Splide.emit('click', _this);\n }, slide);\n /*\r\n * Add \"is-active\" class to a clone element temporarily\r\n * and it will be removed on \"moved\" event.\r\n */\n\n if (updateOnMove) {\n Splide.on('move.slide', function (newIndex) {\n if (newIndex === realIndex) {\n _update(true, false);\n }\n });\n } // Make sure the slide is shown.\n\n applyStyle(slide, {\n display: ''\n }); // Hold the original styles.\n\n this.styles = getAttribute(slide, 'style') || '';\n },\n /**\r\n * Destroy.\r\n */\n destroy: function destroy() {\n Splide.off(STATUS_UPDATE_EVENTS).off(STYLE_RESTORE_EVENTS).off('click', slide);\n removeClass(slide, values(STATUS_CLASSES));\n restoreStyles();\n removeAttribute(this.container, 'style');\n },\n /**\r\n * Update active and visible status.\r\n */\n update: function update() {\n _update(this.isActive(), false);\n _update(this.isVisible(), true);\n },\n /**\r\n * Check whether this slide is active or not.\r\n *\r\n * @return {boolean} - True if the slide is active or false if not.\r\n */\n isActive: function isActive() {\n return Splide.index === index;\n },\n /**\r\n * Check whether this slide is visible in the viewport or not.\r\n *\r\n * @return {boolean} - True if the slide is visible or false if not.\r\n */\n isVisible: function isVisible() {\n var active = this.isActive();\n if (Splide.is(FADE) || active) {\n return active;\n }\n var ceil = Math.ceil;\n var trackRect = getRect(Splide.Components.Elements.track);\n var slideRect = getRect(slide);\n if (Splide.options.direction === TTB) {\n return trackRect.top <= slideRect.top && slideRect.bottom <= ceil(trackRect.bottom);\n }\n return trackRect.left <= slideRect.left && slideRect.right <= ceil(trackRect.right);\n },\n /**\r\n * Calculate how far this slide is from another slide and\r\n * return true if the distance is within the given number.\r\n *\r\n * @param {number} from - Index of a target slide.\r\n * @param {number} within - True if the slide is within this number.\r\n *\r\n * @return {boolean} - True if the slide is within the number or false otherwise.\r\n */\n isWithin: function isWithin(from, within) {\n var diff = Math.abs(from - index);\n if (!Splide.is(SLIDE) && !this.isClone) {\n diff = Math.min(diff, Splide.length - diff);\n }\n return diff < within;\n }\n };\n /**\r\n * Update classes for activity or visibility.\r\n *\r\n * @param {boolean} active - Is active/visible or not.\r\n * @param {boolean} forVisibility - Toggle classes for activity or visibility.\r\n */\n\n function _update(active, forVisibility) {\n var type = forVisibility ? 'visible' : 'active';\n var className = STATUS_CLASSES[type];\n if (active) {\n addClass(slide, className);\n Splide.emit(\"\" + type, Slide);\n } else {\n if (hasClass(slide, className)) {\n removeClass(slide, className);\n Splide.emit(\"\" + (forVisibility ? 'hidden' : 'inactive'), Slide);\n }\n }\n }\n /**\r\n * Restore the original styles.\r\n */\n\n function restoreStyles() {\n setAttribute(slide, 'style', Slide.styles);\n }\n return Slide;\n };\n ; // CONCATENATED MODULE: ./src/js/components/elements/index.js\n /**\r\n * The component for main elements.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The property name for UID stored in a window object.\r\n *\r\n * @type {string}\r\n */\n\n var UID_NAME = 'uid';\n /**\r\n * The component for main elements.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const components_elements = function (Splide, Components) {\n /**\r\n * Hold the root element.\r\n *\r\n * @type {Element}\r\n */\n var root = Splide.root;\n /**\r\n * Hold the class list.\r\n *\r\n * @type {Object}\r\n */\n\n var classes = Splide.classes;\n /**\r\n * Store Slide objects.\r\n *\r\n * @type {Array}\r\n */\n\n var Slides = [];\n /*\r\n * Assign unique ID to the root element if it doesn't have the one.\r\n * Note that IE doesn't support padStart() to fill the uid by 0.\r\n */\n\n if (!root.id) {\n window.splide = window.splide || {};\n var uid = window.splide[UID_NAME] || 0;\n window.splide[UID_NAME] = ++uid;\n root.id = \"splide\" + pad(uid);\n }\n /**\r\n * Elements component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Elements = {\n /**\r\n * Called when the component is mounted.\r\n * Collect main elements and store them as member properties.\r\n */\n mount: function mount() {\n var _this = this;\n this.init();\n Splide.on('refresh', function () {\n _this.destroy();\n _this.init();\n }).on('updated', function () {\n removeClass(root, getClasses());\n addClass(root, getClasses());\n });\n },\n /**\r\n * Destroy.\r\n */\n destroy: function destroy() {\n Slides.forEach(function (Slide) {\n Slide.destroy();\n });\n Slides = [];\n removeClass(root, getClasses());\n },\n /**\r\n * Initialization.\r\n */\n init: function init() {\n var _this2 = this;\n collect();\n addClass(root, getClasses());\n this.slides.forEach(function (slide, index) {\n _this2.register(slide, index, -1);\n });\n },\n /**\r\n * Register a slide to create a Slide object and handle its behavior.\r\n *\r\n * @param {Element} slide - A slide element.\r\n * @param {number} index - A unique index. This can be negative.\r\n * @param {number} realIndex - A real index for clones. Set -1 for real slides.\r\n */\n register: function register(slide, index, realIndex) {\n var SlideObject = elements_slide(Splide, index, realIndex, slide);\n SlideObject.mount();\n Slides.push(SlideObject);\n },\n /**\r\n * Return the Slide object designated by the index.\r\n * Note that \"find\" is not supported by IE.\r\n *\r\n * @return {Object|undefined} - A Slide object if available. Undefined if not.\r\n */\n getSlide: function getSlide(index) {\n return Slides.filter(function (Slide) {\n return Slide.index === index;\n })[0];\n },\n /**\r\n * Return all Slide objects.\r\n *\r\n * @param {boolean} includeClones - Whether to include cloned slides or not.\r\n *\r\n * @return {Object[]} - Slide objects.\r\n */\n getSlides: function getSlides(includeClones) {\n return includeClones ? Slides : Slides.filter(function (Slide) {\n return !Slide.isClone;\n });\n },\n /**\r\n * Return Slide objects belonging to the given page.\r\n *\r\n * @param {number} page - A page number.\r\n *\r\n * @return {Object[]} - An array containing Slide objects.\r\n */\n getSlidesByPage: function getSlidesByPage(page) {\n var idx = Components.Controller.toIndex(page);\n var options = Splide.options;\n var max = options.focus !== false ? 1 : options.perPage;\n return Slides.filter(function (_ref) {\n var index = _ref.index;\n return idx <= index && index < idx + max;\n });\n },\n /**\r\n * Insert a slide to a slider.\r\n * Need to refresh Splide after adding a slide.\r\n *\r\n * @param {Node|string} slide - A slide element to be added.\r\n * @param {number} index - A slide will be added at the position.\r\n * @param {Function} callback - Called right after the slide is added to the DOM tree.\r\n */\n add: function add(slide, index, callback) {\n if (typeof slide === 'string') {\n slide = domify(slide);\n }\n if (slide instanceof Element) {\n var ref = this.slides[index]; // This will be removed in mount() of a Slide component.\n\n applyStyle(slide, {\n display: 'none'\n });\n if (ref) {\n before(slide, ref);\n this.slides.splice(index, 0, slide);\n } else {\n append(this.list, slide);\n this.slides.push(slide);\n }\n loaded(slide, function () {\n callback && callback(slide);\n });\n }\n },\n /**\r\n * Remove a slide from a slider.\r\n * Need to refresh Splide after removing a slide.\r\n *\r\n * @param index - Slide index.\r\n */\n remove: function remove(index) {\n dom_remove(this.slides.splice(index, 1)[0]);\n },\n /**\r\n * Trigger the provided callback for each Slide object.\r\n *\r\n * @param {Function} callback - A callback function. The first argument will be the Slide object.\r\n */\n each: function each(callback) {\n Slides.forEach(callback);\n },\n /**\r\n * Return slides length without clones.\r\n *\r\n * @return {number} - Slide length.\r\n */\n get length() {\n return this.slides.length;\n },\n /**\r\n * Return \"SlideObjects\" length including clones.\r\n *\r\n * @return {number} - Slide length including clones.\r\n */\n get total() {\n return Slides.length;\n }\n };\n /**\r\n * Collect elements.\r\n */\n\n function collect() {\n Elements.slider = child(root, classes.slider);\n Elements.track = find(root, \".\" + classes.track);\n Elements.list = child(Elements.track, classes.list);\n exist(Elements.track && Elements.list, 'Track or list was not found.');\n Elements.slides = children(Elements.list, classes.slide);\n var arrows = findParts(classes.arrows);\n Elements.arrows = {\n prev: find(arrows, \".\" + classes.prev),\n next: find(arrows, \".\" + classes.next)\n };\n var autoplay = findParts(classes.autoplay);\n Elements.bar = find(findParts(classes.progress), \".\" + classes.bar);\n Elements.play = find(autoplay, \".\" + classes.play);\n Elements.pause = find(autoplay, \".\" + classes.pause);\n Elements.track.id = Elements.track.id || root.id + \"-track\";\n Elements.list.id = Elements.list.id || root.id + \"-list\";\n }\n /**\r\n * Return class names for the root element.\r\n */\n\n function getClasses() {\n var rootClass = classes.root;\n var options = Splide.options;\n return [rootClass + \"--\" + options.type, rootClass + \"--\" + options.direction, options.drag ? rootClass + \"--draggable\" : '', options.isNavigation ? rootClass + \"--nav\" : '', STATUS_CLASSES.active];\n }\n /**\r\n * Find parts only from children of the root or track.\r\n *\r\n * @return {Element} - A found element or undefined.\r\n */\n\n function findParts(className) {\n return child(root, className) || child(Elements.slider, className);\n }\n return Elements;\n };\n ; // CONCATENATED MODULE: ./src/js/components/controller/index.js\n /**\r\n * The component for controlling the track.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n var floor = Math.floor;\n /**\r\n * The component for controlling the track.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const controller = function (Splide, Components) {\n /**\r\n * Store current options.\r\n *\r\n * @type {Object}\r\n */\n var options;\n /**\r\n * True if the slide is LOOP mode.\r\n *\r\n * @type {boolean}\r\n */\n\n var isLoop;\n /**\r\n * Controller component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Controller = {\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n options = Splide.options;\n isLoop = Splide.is(LOOP);\n bind();\n },\n /**\r\n * Make track run by the given control.\r\n * - \"+{i}\" : Increment the slide index by i.\r\n * - \"-{i}\" : Decrement the slide index by i.\r\n * - \"{i}\" : Go to the slide whose index is i.\r\n * - \">\" : Go to next page.\r\n * - \"<\" : Go to prev page.\r\n * - \">{i}\" : Go to page i.\r\n *\r\n * @param {string|number} control - A control pattern.\r\n * @param {boolean} silently - Go to the destination without event emission.\r\n */\n go: function go(control, silently) {\n var destIndex = this.trim(this.parse(control));\n Components.Track.go(destIndex, this.rewind(destIndex), silently);\n },\n /**\r\n * Parse the given control and return the destination index for the track.\r\n *\r\n * @param {string} control - A control target pattern.\r\n *\r\n * @return {number} - A parsed target.\r\n */\n parse: function parse(control) {\n var index = Splide.index;\n var matches = String(control).match(/([+\\-<>]+)(\\d+)?/);\n var indicator = matches ? matches[1] : '';\n var number = matches ? parseInt(matches[2]) : 0;\n switch (indicator) {\n case '+':\n index += number || 1;\n break;\n case '-':\n index -= number || 1;\n break;\n case '>':\n case '<':\n index = parsePage(number, index, indicator === '<');\n break;\n default:\n index = parseInt(control);\n }\n return index;\n },\n /**\r\n * Compute index from the given page number.\r\n *\r\n * @param {number} page - Page number.\r\n *\r\n * @return {number} - A computed page number.\r\n */\n toIndex: function toIndex(page) {\n if (hasFocus()) {\n return page;\n }\n var length = Splide.length;\n var perPage = options.perPage;\n var index = page * perPage;\n index = index - (this.pageLength * perPage - length) * floor(index / length); // Adjustment for the last page.\n\n if (length - perPage <= index && index < length) {\n index = length - perPage;\n }\n return index;\n },\n /**\r\n * Compute page number from the given slide index.\r\n *\r\n * @param {number} index - Slide index.\r\n *\r\n * @return {number} - A computed page number.\r\n */\n toPage: function toPage(index) {\n if (hasFocus()) {\n return index;\n }\n var length = Splide.length;\n var perPage = options.perPage; // Make the last \"perPage\" number of slides belong to the last page.\n\n if (length - perPage <= index && index < length) {\n return floor((length - 1) / perPage);\n }\n return floor(index / perPage);\n },\n /**\r\n * Trim the given index according to the current mode.\r\n * Index being returned could be less than 0 or greater than the length in Loop mode.\r\n *\r\n * @param {number} index - An index being trimmed.\r\n *\r\n * @return {number} - A trimmed index.\r\n */\n trim: function trim(index) {\n if (!isLoop) {\n index = options.rewind ? this.rewind(index) : between(index, 0, this.edgeIndex);\n }\n return index;\n },\n /**\r\n * Rewind the given index if it's out of range.\r\n *\r\n * @param {number} index - An index.\r\n *\r\n * @return {number} - A rewound index.\r\n */\n rewind: function rewind(index) {\n var edge = this.edgeIndex;\n if (isLoop) {\n while (index > edge) {\n index -= edge + 1;\n }\n while (index < 0) {\n index += edge + 1;\n }\n } else {\n if (index > edge) {\n index = 0;\n } else if (index < 0) {\n index = edge;\n }\n }\n return index;\n },\n /**\r\n * Check if the direction is \"rtl\" or not.\r\n *\r\n * @return {boolean} - True if \"rtl\" or false if not.\r\n */\n isRtl: function isRtl() {\n return options.direction === RTL;\n },\n /**\r\n * Return the page length.\r\n *\r\n * @return {number} - Max page number.\r\n */\n get pageLength() {\n var length = Splide.length;\n return hasFocus() ? length : Math.ceil(length / options.perPage);\n },\n /**\r\n * Return the edge index.\r\n *\r\n * @return {number} - Edge index.\r\n */\n get edgeIndex() {\n var length = Splide.length;\n if (!length) {\n return 0;\n }\n if (hasFocus() || options.isNavigation || isLoop) {\n return length - 1;\n }\n return length - options.perPage;\n },\n /**\r\n * Return the index of the previous slide.\r\n *\r\n * @return {number} - The index of the previous slide if available. -1 otherwise.\r\n */\n get prevIndex() {\n var prev = Splide.index - 1;\n if (isLoop || options.rewind) {\n prev = this.rewind(prev);\n }\n return prev > -1 ? prev : -1;\n },\n /**\r\n * Return the index of the next slide.\r\n *\r\n * @return {number} - The index of the next slide if available. -1 otherwise.\r\n */\n get nextIndex() {\n var next = Splide.index + 1;\n if (isLoop || options.rewind) {\n next = this.rewind(next);\n }\n return Splide.index < next && next <= this.edgeIndex || next === 0 ? next : -1;\n }\n };\n /**\r\n * Listen to some events.\r\n */\n\n function bind() {\n Splide.on('move', function (newIndex) {\n Splide.index = newIndex;\n }).on('updated refresh', function (newOptions) {\n options = newOptions || options;\n Splide.index = between(Splide.index, 0, Controller.edgeIndex);\n });\n }\n /**\r\n * Verify if the focus option is available or not.\r\n *\r\n * @return {boolean} - True if a slider has the focus option.\r\n */\n\n function hasFocus() {\n return options.focus !== false;\n }\n /**\r\n * Return the next or previous page index computed by the page number and current index.\r\n *\r\n * @param {number} number - Specify the page number.\r\n * @param {number} index - Current index.\r\n * @param {boolean} prev - Prev or next.\r\n *\r\n * @return {number} - Slide index.\r\n */\n\n function parsePage(number, index, prev) {\n if (number > -1) {\n return Controller.toIndex(number);\n }\n var perMove = options.perMove;\n var sign = prev ? -1 : 1;\n if (perMove) {\n return index + perMove * sign;\n }\n return Controller.toIndex(Controller.toPage(index) + sign);\n }\n return Controller;\n };\n ; // CONCATENATED MODULE: ./src/js/components/track/index.js\n /**\r\n * The component for moving list in the track.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n var abs = Math.abs;\n /**\r\n * The component for moving list in the track.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const track = function (Splide, Components) {\n /**\r\n * Hold the Layout component.\r\n *\r\n * @type {Object}\r\n */\n var Layout;\n /**\r\n * Hold the Layout component.\r\n *\r\n * @type {Object}\r\n */\n\n var Elements;\n /**\r\n * Store the list element.\r\n *\r\n * @type {Element}\r\n */\n\n var list;\n /**\r\n * Whether the current direction is vertical or not.\r\n *\r\n * @type {boolean}\r\n */\n\n var isVertical = Splide.options.direction === TTB;\n /**\r\n * Whether the slider type is FADE or not.\r\n *\r\n * @type {boolean}\r\n */\n\n var isFade = Splide.is(FADE);\n /**\r\n * Whether the slider direction is RTL or not.\r\n *\r\n * @type {boolean}\r\n */\n\n var isRTL = Splide.options.direction === RTL;\n /**\r\n * This will be true while transitioning from the last index to the first one.\r\n *\r\n * @type {boolean}\r\n */\n\n var isLoopPending = false;\n /**\r\n * Sign for the direction. Only RTL mode uses the positive sign.\r\n *\r\n * @type {number}\r\n */\n\n var sign = isRTL ? 1 : -1;\n /**\r\n * Track component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Track = {\n /**\r\n * Make public the sign defined locally.\r\n *\r\n * @type {number}\r\n */\n sign: sign,\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n Elements = Components.Elements;\n Layout = Components.Layout;\n list = Elements.list;\n },\n /**\r\n * Called after the component is mounted.\r\n * The resize event must be registered after the Layout's one is done.\r\n */\n mounted: function mounted() {\n var _this = this;\n if (!isFade) {\n this.jump(0);\n Splide.on('mounted resize updated', function () {\n _this.jump(Splide.index);\n });\n }\n },\n /**\r\n * Go to the given destination index.\r\n * After arriving there, the track is jump to the new index without animation, mainly for loop mode.\r\n *\r\n * @param {number} destIndex - A destination index.\r\n * This can be negative or greater than slides length for reaching clones.\r\n * @param {number} newIndex - An actual new index. They are always same in Slide and Rewind mode.\r\n * @param {boolean} silently - If true, suppress emitting events.\r\n */\n go: function go(destIndex, newIndex, silently) {\n var newPosition = getTrimmedPosition(destIndex);\n var prevIndex = Splide.index; // Prevent any actions while transitioning from the last index to the first one for jump.\n\n if (Splide.State.is(MOVING) && isLoopPending) {\n return;\n }\n isLoopPending = destIndex !== newIndex;\n if (!silently) {\n Splide.emit('move', newIndex, prevIndex, destIndex);\n }\n if (Math.abs(newPosition - this.position) >= 1 || isFade) {\n Components.Transition.start(destIndex, newIndex, prevIndex, this.toCoord(newPosition), function () {\n onTransitionEnd(destIndex, newIndex, prevIndex, silently);\n });\n } else {\n if (destIndex !== prevIndex && Splide.options.trimSpace === 'move') {\n Components.Controller.go(destIndex + destIndex - prevIndex, silently);\n } else {\n onTransitionEnd(destIndex, newIndex, prevIndex, silently);\n }\n }\n },\n /**\r\n * Move the track to the specified index.\r\n *\r\n * @param {number} index - A destination index where the track jumps.\r\n */\n jump: function jump(index) {\n this.translate(getTrimmedPosition(index));\n },\n /**\r\n * Set the list position by CSS translate property.\r\n *\r\n * @param {number} position - A new position value.\r\n */\n translate: function translate(position) {\n applyStyle(list, {\n transform: \"translate\" + (isVertical ? 'Y' : 'X') + \"(\" + position + \"px)\"\n });\n },\n /**\r\n * Cancel the transition and set the list position.\r\n * Also, loop the slider if necessary.\r\n */\n cancel: function cancel() {\n if (Splide.is(LOOP)) {\n this.shift();\n } else {\n // Ensure the current position.\n this.translate(this.position);\n }\n applyStyle(list, {\n transition: ''\n });\n },\n /**\r\n * Shift the slider if it exceeds borders on the edge.\r\n */\n shift: function shift() {\n var position = abs(this.position);\n var left = abs(this.toPosition(0));\n var right = abs(this.toPosition(Splide.length));\n var innerSize = right - left;\n if (position < left) {\n position += innerSize;\n } else if (position > right) {\n position -= innerSize;\n }\n this.translate(sign * position);\n },\n /**\r\n * Trim redundant spaces on the left or right edge if necessary.\r\n *\r\n * @param {number} position - Position value to be trimmed.\r\n *\r\n * @return {number} - Trimmed position.\r\n */\n trim: function trim(position) {\n if (!Splide.options.trimSpace || Splide.is(LOOP)) {\n return position;\n }\n var edge = sign * (Layout.totalSize() - Layout.size - Layout.gap);\n return between(position, edge, 0);\n },\n /**\r\n * Calculate the closest slide index from the given position.\r\n *\r\n * @param {number} position - A position converted to an slide index.\r\n *\r\n * @return {number} - The closest slide index.\r\n */\n toIndex: function toIndex(position) {\n var _this2 = this;\n var index = 0;\n var minDistance = Infinity;\n Elements.getSlides(true).forEach(function (Slide) {\n var slideIndex = Slide.index;\n var distance = abs(_this2.toPosition(slideIndex) - position);\n if (distance < minDistance) {\n minDistance = distance;\n index = slideIndex;\n }\n });\n return index;\n },\n /**\r\n * Return coordinates object by the given position.\r\n *\r\n * @param {number} position - A position value.\r\n *\r\n * @return {Object} - A coordinates object.\r\n */\n toCoord: function toCoord(position) {\n return {\n x: isVertical ? 0 : position,\n y: isVertical ? position : 0\n };\n },\n /**\r\n * Calculate the track position by a slide index.\r\n *\r\n * @param {number} index - Slide index.\r\n *\r\n * @return {Object} - Calculated position.\r\n */\n toPosition: function toPosition(index) {\n var position = Layout.totalSize(index) - Layout.slideSize(index) - Layout.gap;\n return sign * (position + this.offset(index));\n },\n /**\r\n * Return the current offset value, considering direction.\r\n *\r\n * @return {number} - Offset amount.\r\n */\n offset: function offset(index) {\n var focus = Splide.options.focus;\n var slideSize = Layout.slideSize(index);\n if (focus === 'center') {\n return -(Layout.size - slideSize) / 2;\n }\n return -(parseInt(focus) || 0) * (slideSize + Layout.gap);\n },\n /**\r\n * Return the current position.\r\n * This returns the correct position even while transitioning by CSS.\r\n *\r\n * @return {number} - Current position.\r\n */\n get position() {\n var prop = isVertical ? 'top' : isRTL ? 'right' : 'left';\n return getRect(list)[prop] - (getRect(Elements.track)[prop] - Layout.padding[prop] * sign);\n }\n };\n /**\r\n * Called whenever slides arrive at a destination.\r\n *\r\n * @param {number} destIndex - A destination index.\r\n * @param {number} newIndex - A new index.\r\n * @param {number} prevIndex - A previous index.\r\n * @param {boolean} silently - If true, suppress emitting events.\r\n */\n\n function onTransitionEnd(destIndex, newIndex, prevIndex, silently) {\n applyStyle(list, {\n transition: ''\n });\n isLoopPending = false;\n if (!isFade) {\n Track.jump(newIndex);\n }\n if (!silently) {\n Splide.emit('moved', newIndex, prevIndex, destIndex);\n }\n }\n /**\r\n * Convert index to the trimmed position.\r\n *\r\n * @return {number} - Trimmed position.\r\n */\n\n function getTrimmedPosition(index) {\n return Track.trim(Track.toPosition(index));\n }\n return Track;\n };\n ; // CONCATENATED MODULE: ./src/js/components/clones/index.js\n /**\r\n * The component for cloning some slides for \"loop\" mode of the track.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The component for cloning some slides for \"loop\" mode of the track.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const clones = function (Splide, Components) {\n /**\r\n * Store information of all clones.\r\n *\r\n * @type {Array}\r\n */\n var clones = [];\n /**\r\n * Store the current clone count on one side.\r\n *\r\n * @type {number}\r\n */\n\n var cloneCount = 0;\n /**\r\n * Keep Elements component.\r\n *\r\n * @type {Object}\r\n */\n\n var Elements = Components.Elements;\n /**\r\n * Clones component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Clones = {\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n var _this = this;\n if (Splide.is(LOOP)) {\n init();\n Splide.on('refresh:before', function () {\n _this.destroy();\n }).on('refresh', init).on('resize', function () {\n if (cloneCount !== getCloneCount()) {\n // Destroy before refresh not to collect clones by the Elements component.\n _this.destroy();\n Splide.refresh();\n }\n });\n }\n },\n /**\r\n * Destroy.\r\n */\n destroy: function destroy() {\n dom_remove(clones);\n clones = [];\n },\n /**\r\n * Return all clones.\r\n *\r\n * @return {Element[]} - Cloned elements.\r\n */\n get clones() {\n return clones;\n },\n /**\r\n * Return clone length.\r\n *\r\n * @return {number} - A length of clones.\r\n */\n get length() {\n return clones.length;\n }\n };\n /**\r\n * Initialization.\r\n */\n\n function init() {\n Clones.destroy();\n cloneCount = getCloneCount();\n generateClones(cloneCount);\n }\n /**\r\n * Generate and append/prepend clones.\r\n *\r\n * @param {number} count - The half number of clones.\r\n */\n\n function generateClones(count) {\n var length = Elements.length,\n register = Elements.register;\n if (length) {\n var slides = Elements.slides;\n while (slides.length < count) {\n slides = slides.concat(slides);\n } // Clones after the last element.\n\n slides.slice(0, count).forEach(function (elm, index) {\n var clone = cloneDeeply(elm);\n append(Elements.list, clone);\n clones.push(clone);\n register(clone, index + length, index % length);\n }); // Clones before the first element.\n\n slides.slice(-count).forEach(function (elm, index) {\n var clone = cloneDeeply(elm);\n before(clone, slides[0]);\n clones.push(clone);\n register(clone, index - count, (length + index - count % length) % length);\n });\n }\n }\n /**\r\n * Return half count of clones to be generated.\r\n * Clone count is determined by:\r\n * - \"clones\" value in the options.\r\n * - Number of slides that can be placed in a view in \"fixed\" mode.\r\n * - Max pages a flick action can move.\r\n * - Whether the slide length is enough for perPage.\r\n *\r\n * @return {number} - Count for clones.\r\n */\n\n function getCloneCount() {\n var options = Splide.options;\n if (options.clones) {\n return options.clones;\n } // Use the slide length in autoWidth mode because the number cannot be calculated.\n\n var baseCount = options.autoWidth || options.autoHeight ? Elements.length : options.perPage;\n var dimension = options.direction === TTB ? 'Height' : 'Width';\n var fixedSize = toPixel(Splide.root, options[\"fixed\" + dimension]);\n if (fixedSize) {\n // Roughly calculate the count. This needs not to be strict.\n baseCount = Math.ceil(Elements.track[\"client\" + dimension] / fixedSize);\n }\n return baseCount * (options.drag ? options.flickMaxPages + 1 : 1);\n }\n /**\r\n * Clone deeply the given element.\r\n *\r\n * @param {Element} elm - An element being duplicated.\r\n *\r\n * @return {Node} - A cloned node(element).\r\n */\n\n function cloneDeeply(elm) {\n var clone = elm.cloneNode(true);\n addClass(clone, Splide.classes.clone); // ID should not be duplicated.\n\n removeAttribute(clone, 'id');\n return clone;\n }\n return Clones;\n };\n ; // CONCATENATED MODULE: ./src/js/components/layout/directions/horizontal.js\n /**\r\n * The resolver component for horizontal layout.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The resolver component for horizontal layout.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The resolver object.\r\n */\n\n /* harmony default export */\n const horizontal = function (Splide, Components) {\n /**\r\n * Keep the Elements component.\r\n *\r\n * @type {string}\r\n */\n var Elements = Components.Elements;\n /**\r\n * Keep the root element.\r\n *\r\n * @type {Element}\r\n */\n\n var root = Splide.root;\n /**\r\n * Keep the track element.\r\n *\r\n * @type {Element}\r\n */\n\n var track;\n /**\r\n * Keep the latest options.\r\n *\r\n * @type {Element}\r\n */\n\n var options = Splide.options;\n return {\n /**\r\n * Margin property name.\r\n *\r\n * @type {string}\r\n */\n margin: 'margin' + (options.direction === RTL ? 'Left' : 'Right'),\n /**\r\n * Always 0 because the height will be determined by inner contents.\r\n *\r\n * @type {number}\r\n */\n height: 0,\n /**\r\n * Initialization.\r\n */\n init: function init() {\n this.resize();\n },\n /**\r\n * Resize gap and padding.\r\n * This must be called on init.\r\n */\n resize: function resize() {\n options = Splide.options;\n track = Elements.track;\n this.gap = toPixel(root, options.gap);\n var padding = options.padding;\n var left = toPixel(root, padding.left || padding);\n var right = toPixel(root, padding.right || padding);\n this.padding = {\n left: left,\n right: right\n };\n applyStyle(track, {\n paddingLeft: unit(left),\n paddingRight: unit(right)\n });\n },\n /**\r\n * Return total width from the left of the list to the right of the slide specified by the provided index.\r\n *\r\n * @param {number} index - Optional. A slide index. If undefined, total width of the slider will be returned.\r\n *\r\n * @return {number} - Total width to the right side of the specified slide, or 0 for an invalid index.\r\n */\n totalWidth: function totalWidth(index) {\n if (index === void 0) {\n index = Splide.length - 1;\n }\n var Slide = Elements.getSlide(index);\n var width = 0;\n if (Slide) {\n var slideRect = getRect(Slide.slide);\n var listRect = getRect(Elements.list);\n if (options.direction === RTL) {\n width = listRect.right - slideRect.left;\n } else {\n width = slideRect.right - listRect.left;\n }\n width += this.gap;\n }\n return width;\n },\n /**\r\n * Return the slide width in px.\r\n *\r\n * @param {number} index - Slide index.\r\n *\r\n * @return {number} - The slide width.\r\n */\n slideWidth: function slideWidth(index) {\n if (options.autoWidth) {\n var Slide = Elements.getSlide(index);\n return Slide ? Slide.slide.offsetWidth : 0;\n }\n var width = options.fixedWidth || (this.width + this.gap) / options.perPage - this.gap;\n return toPixel(root, width);\n },\n /**\r\n * Return the slide height in px.\r\n *\r\n * @return {number} - The slide height.\r\n */\n slideHeight: function slideHeight() {\n var height = options.height || options.fixedHeight || this.width * options.heightRatio;\n return toPixel(root, height);\n },\n /**\r\n * Return slider width without padding.\r\n *\r\n * @return {number} - Current slider width.\r\n */\n get width() {\n return track.clientWidth - this.padding.left - this.padding.right;\n }\n };\n };\n ; // CONCATENATED MODULE: ./src/js/components/layout/directions/vertical.js\n /**\r\n * The resolver component for vertical layout.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The resolver component for vertical layout.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The resolver object.\r\n */\n\n /* harmony default export */\n const vertical = function (Splide, Components) {\n /**\r\n * Keep the Elements component.\r\n *\r\n * @type {string}\r\n */\n var Elements = Components.Elements;\n /**\r\n * Keep the root element.\r\n *\r\n * @type {Element}\r\n */\n\n var root = Splide.root;\n /**\r\n * Keep the track element.\r\n *\r\n * @type {Element}\r\n */\n\n var track;\n /**\r\n * Keep the latest options.\r\n *\r\n * @type {Element}\r\n */\n\n var options;\n return {\n /**\r\n * Margin property name.\r\n *\r\n * @type {string}\r\n */\n margin: 'marginBottom',\n /**\r\n * Initialization.\r\n */\n init: function init() {\n this.resize();\n },\n /**\r\n * Resize gap and padding.\r\n * This must be called on init.\r\n */\n resize: function resize() {\n options = Splide.options;\n track = Elements.track;\n this.gap = toPixel(root, options.gap);\n var padding = options.padding;\n var top = toPixel(root, padding.top || padding);\n var bottom = toPixel(root, padding.bottom || padding);\n this.padding = {\n top: top,\n bottom: bottom\n };\n applyStyle(track, {\n paddingTop: unit(top),\n paddingBottom: unit(bottom)\n });\n },\n /**\r\n * Return total height from the top of the list to the bottom of the slide specified by the provided index.\r\n *\r\n * @param {number} index - Optional. A slide index. If undefined, total height of the slider will be returned.\r\n *\r\n * @return {number} - Total height to the bottom of the specified slide, or 0 for an invalid index.\r\n */\n totalHeight: function totalHeight(index) {\n if (index === void 0) {\n index = Splide.length - 1;\n }\n var Slide = Elements.getSlide(index);\n if (Slide) {\n return getRect(Slide.slide).bottom - getRect(Elements.list).top + this.gap;\n }\n return 0;\n },\n /**\r\n * Return the slide width in px.\r\n *\r\n * @return {number} - The slide width.\r\n */\n slideWidth: function slideWidth() {\n return toPixel(root, options.fixedWidth || this.width);\n },\n /**\r\n * Return the slide height in px.\r\n *\r\n * @param {number} index - Slide index.\r\n *\r\n * @return {number} - The slide height.\r\n */\n slideHeight: function slideHeight(index) {\n if (options.autoHeight) {\n var Slide = Elements.getSlide(index);\n return Slide ? Slide.slide.offsetHeight : 0;\n }\n var height = options.fixedHeight || (this.height + this.gap) / options.perPage - this.gap;\n return toPixel(root, height);\n },\n /**\r\n * Return slider width without padding.\r\n *\r\n * @return {number} - Current slider width.\r\n */\n get width() {\n return track.clientWidth;\n },\n /**\r\n * Return slide height without padding.\r\n *\r\n * @return {number} - Slider height.\r\n */\n get height() {\n var height = options.height || this.width * options.heightRatio;\n exist(height, '\"height\" or \"heightRatio\" is missing.');\n return toPixel(root, height) - this.padding.top - this.padding.bottom;\n }\n };\n };\n ; // CONCATENATED MODULE: ./src/js/utils/time.js\n /**\r\n * A package of utility functions related with time.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Simple throttle function that controls how often the given function is executed.\r\n *\r\n * @param {function} func - A function to be throttled.\r\n * @param {number} wait - Time in millisecond for interval of execution.\r\n *\r\n * @return {Function} - A debounced function.\r\n */\n function throttle(func, wait) {\n var timeout; // Declare function by the \"function\" keyword to prevent \"this\" from being inherited.\n\n return function () {\n if (!timeout) {\n timeout = setTimeout(function () {\n func();\n timeout = null;\n }, wait);\n }\n };\n }\n /**\r\n * Custom setInterval function that provides progress rate as callback.\r\n *\r\n * @param {function} callback - A callback function fired every time the interval time passes.\r\n * @param {number} interval - Interval duration in milliseconds.\r\n * @param {function} progress - A callback function fired whenever the progress goes.\r\n *\r\n * @return {Object} - An object containing play() and pause() functions.\r\n */\n\n function createInterval(callback, interval, progress) {\n var _window = window,\n requestAnimationFrame = _window.requestAnimationFrame;\n var start,\n elapse,\n rate,\n _pause = true;\n var step = function step(timestamp) {\n if (!_pause) {\n if (!start) {\n start = timestamp;\n if (rate && rate < 1) {\n start -= rate * interval;\n }\n }\n elapse = timestamp - start;\n rate = elapse / interval;\n if (elapse >= interval) {\n start = 0;\n rate = 1;\n callback();\n }\n if (progress) {\n progress(rate);\n }\n requestAnimationFrame(step);\n }\n };\n return {\n pause: function pause() {\n _pause = true;\n start = 0;\n },\n play: function play(reset) {\n start = 0;\n if (reset) {\n rate = 0;\n }\n if (_pause) {\n _pause = false;\n requestAnimationFrame(step);\n }\n }\n };\n }\n ; // CONCATENATED MODULE: ./src/js/components/layout/index.js\n /**\r\n * The component for handing slide layouts and their sizes.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The component for handing slide layouts and their sizes.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const layout = function (Splide, Components) {\n /**\r\n * Keep the Elements component.\r\n *\r\n * @type {string}\r\n */\n var Elements = Components.Elements;\n /**\r\n * Whether the slider is vertical or not.\r\n *\r\n * @type {boolean}\r\n */\n\n var isVertical = Splide.options.direction === TTB;\n /**\r\n * Layout component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Layout = object_assign({\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n bind();\n init(); // The word \"size\" means width for a horizontal slider and height for a vertical slider.\n\n this.totalSize = isVertical ? this.totalHeight : this.totalWidth;\n this.slideSize = isVertical ? this.slideHeight : this.slideWidth;\n },\n /**\r\n * Destroy the component.\r\n */\n destroy: function destroy() {\n removeAttribute([Elements.list, Elements.track], 'style');\n },\n /**\r\n * Return the slider height on the vertical mode or width on the horizontal mode.\r\n *\r\n * @return {number}\r\n */\n get size() {\n return isVertical ? this.height : this.width;\n }\n }, isVertical ? vertical(Splide, Components) : horizontal(Splide, Components));\n /**\r\n * Init slider styles according to options.\r\n */\n\n function init() {\n Layout.init();\n applyStyle(Splide.root, {\n maxWidth: unit(Splide.options.width)\n });\n Elements.each(function (Slide) {\n Slide.slide.style[Layout.margin] = unit(Layout.gap);\n });\n resize();\n }\n /**\r\n * Listen the resize native event with throttle.\r\n * Initialize when the component is mounted or options are updated.\r\n */\n\n function bind() {\n Splide.on('resize load', throttle(function () {\n Splide.emit('resize');\n }, Splide.options.throttle), window).on('resize', resize).on('updated refresh', init);\n }\n /**\r\n * Resize the track and slide elements.\r\n */\n\n function resize() {\n var options = Splide.options;\n Layout.resize();\n applyStyle(Elements.track, {\n height: unit(Layout.height)\n });\n var slideHeight = options.autoHeight ? null : unit(Layout.slideHeight());\n Elements.each(function (Slide) {\n applyStyle(Slide.container, {\n height: slideHeight\n });\n applyStyle(Slide.slide, {\n width: options.autoWidth ? null : unit(Layout.slideWidth(Slide.index)),\n height: Slide.container ? null : slideHeight\n });\n });\n Splide.emit('resized');\n }\n return Layout;\n };\n ; // CONCATENATED MODULE: ./src/js/components/drag/index.js\n /**\r\n * The component for supporting mouse drag and swipe.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n var drag_abs = Math.abs;\n /**\r\n * If the absolute velocity is greater thant this value,\r\n * a slider always goes to a different slide after drag, not allowed to stay on a current slide.\r\n */\n\n var MIN_VELOCITY = 0.1;\n /**\r\n * Adjust how much the track can be pulled on the first or last page.\r\n * The larger number this is, the farther the track moves.\r\n * This should be around 5 - 9.\r\n *\r\n * @type {number}\r\n */\n\n var FRICTION_REDUCER = 7;\n /**\r\n * The component supporting mouse drag and swipe.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const drag = function (Splide, Components) {\n /**\r\n * Store the Move component.\r\n *\r\n * @type {Object}\r\n */\n var Track = Components.Track;\n /**\r\n * Store the Controller component.\r\n *\r\n * @type {Object}\r\n */\n\n var Controller = Components.Controller;\n /**\r\n * Coordinate of the track on starting drag.\r\n *\r\n * @type {Object}\r\n */\n\n var startCoord;\n /**\r\n * Analyzed info on starting drag.\r\n *\r\n * @type {Object|null}\r\n */\n\n var startInfo;\n /**\r\n * Analyzed info being updated while dragging/swiping.\r\n *\r\n * @type {Object}\r\n */\n\n var currentInfo;\n /**\r\n * Determine whether slides are being dragged or not.\r\n *\r\n * @type {boolean}\r\n */\n\n var isDragging;\n /**\r\n * Whether the slider direction is vertical or not.\r\n *\r\n * @type {boolean}\r\n */\n\n var isVertical = Splide.options.direction === TTB;\n /**\r\n * Axis for the direction.\r\n *\r\n * @type {string}\r\n */\n\n var axis = isVertical ? 'y' : 'x';\n /**\r\n * Drag component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Drag = {\n /**\r\n * Whether dragging is disabled or not.\r\n *\r\n * @type {boolean}\r\n */\n disabled: false,\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n var _this = this;\n var Elements = Components.Elements;\n var track = Elements.track;\n Splide.on('touchstart mousedown', start, track).on('touchmove mousemove', move, track, {\n passive: false\n }).on('touchend touchcancel mouseleave mouseup dragend', end, track).on('mounted refresh', function () {\n // Prevent dragging an image or anchor itself.\n each(Elements.list.querySelectorAll('img, a'), function (elm) {\n Splide.off('dragstart', elm).on('dragstart', function (e) {\n e.preventDefault();\n }, elm, {\n passive: false\n });\n });\n }).on('mounted updated', function () {\n _this.disabled = !Splide.options.drag;\n });\n }\n };\n /**\r\n * Called when the track starts to be dragged.\r\n *\r\n * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object.\r\n */\n\n function start(e) {\n if (!Drag.disabled && !isDragging) {\n // These prams are used to evaluate whether the slider should start moving.\n init(e);\n }\n }\n /**\r\n * Initialize parameters.\r\n *\r\n * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object.\r\n */\n\n function init(e) {\n startCoord = Track.toCoord(Track.position);\n startInfo = analyze(e, {});\n currentInfo = startInfo;\n }\n /**\r\n * Called while the track being dragged.\r\n *\r\n * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object.\r\n */\n\n function move(e) {\n if (startInfo) {\n currentInfo = analyze(e, startInfo);\n if (isDragging) {\n if (e.cancelable) {\n e.preventDefault();\n }\n if (!Splide.is(FADE)) {\n var position = startCoord[axis] + currentInfo.offset[axis];\n Track.translate(resist(position));\n }\n } else {\n if (shouldMove(currentInfo)) {\n Splide.emit('drag', startInfo);\n isDragging = true;\n Track.cancel(); // These params are actual drag data.\n\n init(e);\n }\n }\n }\n }\n /**\r\n * Determine whether to start moving the track or not by drag angle.\r\n *\r\n * @param {Object} info - An information object.\r\n *\r\n * @return {boolean} - True if the track should be moved or false if not.\r\n */\n\n function shouldMove(_ref) {\n var offset = _ref.offset;\n if (Splide.State.is(MOVING) && Splide.options.waitForTransition) {\n return false;\n }\n var angle = Math.atan(drag_abs(offset.y) / drag_abs(offset.x)) * 180 / Math.PI;\n if (isVertical) {\n angle = 90 - angle;\n }\n return angle < Splide.options.dragAngleThreshold;\n }\n /**\r\n * Resist dragging the track on the first/last page because there is no more.\r\n *\r\n * @param {number} position - A position being applied to the track.\r\n *\r\n * @return {Object} - Adjusted position.\r\n */\n\n function resist(position) {\n if (Splide.is(SLIDE)) {\n var sign = Track.sign;\n var _start = sign * Track.trim(Track.toPosition(0));\n var _end = sign * Track.trim(Track.toPosition(Controller.edgeIndex));\n position *= sign;\n if (position < _start) {\n position = _start - FRICTION_REDUCER * Math.log(_start - position);\n } else if (position > _end) {\n position = _end + FRICTION_REDUCER * Math.log(position - _end);\n }\n position *= sign;\n }\n return position;\n }\n /**\r\n * Called when dragging ends.\r\n */\n\n function end() {\n startInfo = null;\n if (isDragging) {\n Splide.emit('dragged', currentInfo);\n go(currentInfo);\n isDragging = false;\n }\n }\n /**\r\n * Go to the slide determined by the analyzed data.\r\n *\r\n * @param {Object} info - An info object.\r\n */\n\n function go(info) {\n var velocity = info.velocity[axis];\n var absV = drag_abs(velocity);\n if (absV > 0) {\n var options = Splide.options;\n var index = Splide.index;\n var sign = velocity < 0 ? -1 : 1;\n var destIndex = index;\n if (!Splide.is(FADE)) {\n var destination = Track.position;\n if (absV > options.flickVelocityThreshold && drag_abs(info.offset[axis]) < options.swipeDistanceThreshold) {\n destination += sign * Math.min(absV * options.flickPower, Components.Layout.size * (options.flickMaxPages || 1));\n }\n destIndex = Track.toIndex(destination);\n }\n /*\r\n * Do not allow the track to go to a previous position if there is enough velocity.\r\n * Always use the adjacent index for the fade mode.\r\n */\n\n if (destIndex === index && absV > MIN_VELOCITY) {\n destIndex = index + sign * Track.sign;\n }\n if (Splide.is(SLIDE)) {\n destIndex = between(destIndex, 0, Controller.edgeIndex);\n }\n Controller.go(destIndex, options.isNavigation);\n }\n }\n /**\r\n * Analyze the given event object and return important information for handling swipe behavior.\r\n *\r\n * @param {Event} e - Touch or Mouse event object.\r\n * @param {Object} startInfo - Information analyzed on start for calculating difference from the current one.\r\n *\r\n * @return {Object} - An object containing analyzed information, such as offset, velocity, etc.\r\n */\n\n function analyze(e, startInfo) {\n var timeStamp = e.timeStamp,\n touches = e.touches;\n var _ref2 = touches ? touches[0] : e,\n clientX = _ref2.clientX,\n clientY = _ref2.clientY;\n var _ref3 = startInfo.to || {},\n _ref3$x = _ref3.x,\n fromX = _ref3$x === void 0 ? clientX : _ref3$x,\n _ref3$y = _ref3.y,\n fromY = _ref3$y === void 0 ? clientY : _ref3$y;\n var startTime = startInfo.time || 0;\n var offset = {\n x: clientX - fromX,\n y: clientY - fromY\n };\n var duration = timeStamp - startTime;\n var velocity = {\n x: offset.x / duration,\n y: offset.y / duration\n };\n return {\n to: {\n x: clientX,\n y: clientY\n },\n offset: offset,\n time: timeStamp,\n velocity: velocity\n };\n }\n return Drag;\n };\n ; // CONCATENATED MODULE: ./src/js/components/click/index.js\n /**\r\n * The component for handling a click event.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The component for handling a click event.\r\n * Click should be disabled during drag/swipe.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n /* harmony default export */\n const click = function (Splide, Components) {\n /**\r\n * Whether click is disabled or not.\r\n *\r\n * @type {boolean}\r\n */\n var disabled = false;\n /**\r\n * Click component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Click = {\n /**\r\n * Mount only when the drag is activated and the slide type is not \"fade\".\r\n *\r\n * @type {boolean}\r\n */\n required: Splide.options.drag,\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n Splide.on('click', onClick, Components.Elements.track, {\n capture: true\n }).on('drag', function () {\n disabled = true;\n }).on('dragged', function () {\n // Make sure the flag is released after the click event is fired.\n setTimeout(function () {\n disabled = false;\n });\n });\n }\n };\n /**\r\n * Called when a track element is clicked.\r\n *\r\n * @param {Event} e - A click event.\r\n */\n\n function onClick(e) {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n return Click;\n };\n ; // CONCATENATED MODULE: ./src/js/components/autoplay/index.js\n /**\r\n * The component for playing slides automatically.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Set of pause flags.\r\n */\n\n var PAUSE_FLAGS = {\n HOVER: 1,\n FOCUS: 2,\n MANUAL: 3\n };\n /**\r\n * The component for playing slides automatically.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n * @param {string} name - A component name as a lowercase string.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const autoplay = function (Splide, Components, name) {\n /**\r\n * Store pause flags.\r\n *\r\n * @type {Array}\r\n */\n var flags = [];\n /**\r\n * Store an interval object.\r\n *\r\n * @type {Object};\r\n */\n\n var interval;\n /**\r\n * Keep the Elements component.\r\n *\r\n * @type {string}\r\n */\n\n var Elements = Components.Elements;\n /**\r\n * Autoplay component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Autoplay = {\n /**\r\n * Required only when the autoplay option is true.\r\n *\r\n * @type {boolean}\r\n */\n required: Splide.options.autoplay,\n /**\r\n * Called when the component is mounted.\r\n * Note that autoplay starts only if there are slides over perPage number.\r\n */\n mount: function mount() {\n var options = Splide.options;\n if (Elements.slides.length > options.perPage) {\n interval = createInterval(function () {\n Splide.go('>');\n }, options.interval, function (rate) {\n Splide.emit(name + \":playing\", rate);\n if (Elements.bar) {\n applyStyle(Elements.bar, {\n width: rate * 100 + \"%\"\n });\n }\n });\n bind();\n this.play();\n }\n },\n /**\r\n * Start autoplay.\r\n *\r\n * @param {number} flag - A pause flag to be removed.\r\n */\n play: function play(flag) {\n if (flag === void 0) {\n flag = 0;\n }\n flags = flags.filter(function (f) {\n return f !== flag;\n });\n if (!flags.length) {\n Splide.emit(name + \":play\");\n interval.play(Splide.options.resetProgress);\n }\n },\n /**\r\n * Pause autoplay.\r\n * Note that Array.includes is not supported by IE.\r\n *\r\n * @param {number} flag - A pause flag to be added.\r\n */\n pause: function pause(flag) {\n if (flag === void 0) {\n flag = 0;\n }\n interval.pause();\n if (flags.indexOf(flag) === -1) {\n flags.push(flag);\n }\n if (flags.length === 1) {\n Splide.emit(name + \":pause\");\n }\n }\n };\n /**\r\n * Listen some events.\r\n */\n\n function bind() {\n var options = Splide.options;\n var sibling = Splide.sibling;\n var elms = [Splide.root, sibling ? sibling.root : null];\n if (options.pauseOnHover) {\n switchOn(elms, 'mouseleave', PAUSE_FLAGS.HOVER, true);\n switchOn(elms, 'mouseenter', PAUSE_FLAGS.HOVER, false);\n }\n if (options.pauseOnFocus) {\n switchOn(elms, 'focusout', PAUSE_FLAGS.FOCUS, true);\n switchOn(elms, 'focusin', PAUSE_FLAGS.FOCUS, false);\n }\n if (Elements.play) {\n Splide.on('click', function () {\n // Need to be removed a focus flag at first.\n Autoplay.play(PAUSE_FLAGS.FOCUS);\n Autoplay.play(PAUSE_FLAGS.MANUAL);\n }, Elements.play);\n }\n if (Elements.pause) {\n switchOn([Elements.pause], 'click', PAUSE_FLAGS.MANUAL, false);\n }\n Splide.on('move refresh', function () {\n Autoplay.play();\n }) // Rewind the timer.\n .on('destroy', function () {\n Autoplay.pause();\n });\n }\n /**\r\n * Play or pause on the given event.\r\n *\r\n * @param {Element[]} elms - Elements.\r\n * @param {string} event - An event name or names.\r\n * @param {number} flag - A pause flag defined on the top.\r\n * @param {boolean} play - Determine whether to play or pause.\r\n */\n\n function switchOn(elms, event, flag, play) {\n elms.forEach(function (elm) {\n Splide.on(event, function () {\n Autoplay[play ? 'play' : 'pause'](flag);\n }, elm);\n });\n }\n return Autoplay;\n };\n ; // CONCATENATED MODULE: ./src/js/components/cover/index.js\n /**\r\n * The component for change an img element to background image of its wrapper.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The component for change an img element to background image of its wrapper.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const cover = function (Splide, Components) {\n /**\r\n * Hold options.\r\n *\r\n * @type {Object}\r\n */\n var options = Splide.options;\n /**\r\n * Cover component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Cover = {\n /**\r\n * Required only when \"cover\" option is true.\r\n *\r\n * @type {boolean}\r\n */\n required: options.cover,\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n Splide.on('lazyload:loaded', function (img) {\n cover(img, false);\n });\n Splide.on('mounted updated refresh', function () {\n return apply(false);\n });\n },\n /**\r\n * Destroy.\r\n */\n destroy: function destroy() {\n apply(true);\n }\n };\n /**\r\n * Apply \"cover\" to all slides.\r\n *\r\n * @param {boolean} uncover - If true, \"cover\" will be clear.\r\n */\n\n function apply(uncover) {\n Components.Elements.each(function (Slide) {\n var img = child(Slide.slide, 'IMG') || child(Slide.container, 'IMG');\n if (img && img.src) {\n cover(img, uncover);\n }\n });\n }\n /**\r\n * Set background image of the parent element, using source of the given image element.\r\n *\r\n * @param {Element} img - An image element.\r\n * @param {boolean} uncover - Reset \"cover\".\r\n */\n\n function cover(img, uncover) {\n applyStyle(img.parentElement, {\n background: uncover ? '' : \"center/cover no-repeat url(\\\"\" + img.src + \"\\\")\"\n });\n applyStyle(img, {\n display: uncover ? '' : 'none'\n });\n }\n return Cover;\n };\n ; // CONCATENATED MODULE: ./src/js/components/arrows/path.js\n /**\r\n * Export vector path for an arrow.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * Namespace definition for SVG element.\r\n *\r\n * @type {string}\r\n */\n var XML_NAME_SPACE = 'http://www.w3.org/2000/svg';\n /**\r\n * The arrow vector path.\r\n *\r\n * @type {number}\r\n */\n\n var PATH = 'm15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z';\n /**\r\n * SVG width and height.\r\n *\r\n * @type {number}\r\n */\n\n var SIZE = 40;\n ; // CONCATENATED MODULE: ./src/js/components/arrows/index.js\n /**\r\n * The component for appending prev/next arrows.\r\n *\r\n * @author Naotoshi Fujita\r\n * @copyright Naotoshi Fujita. All rights reserved.\r\n */\n\n /**\r\n * The component for appending prev/next arrows.\r\n *\r\n * @param {Splide} Splide - A Splide instance.\r\n * @param {Object} Components - An object containing components.\r\n * @param {string} name - A component name as a lowercase string.\r\n *\r\n * @return {Object} - The component object.\r\n */\n\n /* harmony default export */\n const arrows = function (Splide, Components, name) {\n /**\r\n * Previous arrow element.\r\n *\r\n * @type {Element|undefined}\r\n */\n var prev;\n /**\r\n * Next arrow element.\r\n *\r\n * @type {Element|undefined}\r\n */\n\n var next;\n /**\r\n * Store the class list.\r\n *\r\n * @type {Object}\r\n */\n\n var classes = Splide.classes;\n /**\r\n * Hold the root element.\r\n *\r\n * @type {Element}\r\n */\n\n var root = Splide.root;\n /**\r\n * Whether arrows are created programmatically or not.\r\n *\r\n * @type {boolean}\r\n */\n\n var created;\n /**\r\n * Hold the Elements component.\r\n *\r\n * @type {Object}\r\n */\n\n var Elements = Components.Elements;\n /**\r\n * Arrows component object.\r\n *\r\n * @type {Object}\r\n */\n\n var Arrows = {\n /**\r\n * Required when the arrows option is true.\r\n *\r\n * @type {boolean}\r\n */\n required: Splide.options.arrows,\n /**\r\n * Called when the component is mounted.\r\n */\n mount: function mount() {\n // Attempt to get arrows from HTML source.\n prev = Elements.arrows.prev;\n next = Elements.arrows.next; // If arrows were not found in HTML, let's generate them.\n\n if ((!prev || !next) && Splide.options.arrows) {\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n appendArrows();\n }\n if (prev && next) {\n bind();\n }\n this.arrows = {\n prev: prev,\n next: next\n };\n },\n /**\r\n * Called after all components are mounted.\r\n */\n mounted: function mounted() {\n Splide.emit(name + \":mounted\", prev, next);\n },\n /**\r\n * Destroy.\r\n */\n destroy: function destroy() {\n removeAttribute([prev, next], 'disabled');\n if (created) {\n dom_remove(prev.parentElement);\n }\n }\n };\n /**\r\n * Listen to native and custom events.\r\n */\n\n function bind() {\n Splide.on('click', function () {\n Splide.go('<');\n }, prev).on('click', function () {\n Splide.go('>');\n }, next).on('mounted move updated refresh', updateDisabled);\n }\n /**\r\n * Update a disabled attribute.\r\n */\n\n function updateDisabled() {\n var _Components$Controlle = Components.Controller,\n prevIndex = _Components$Controlle.prevIndex,\n nextIndex = _Components$Controlle.nextIndex;\n var isEnough = Splide.length > Splide.options.perPage || Splide.is(LOOP);\n prev.disabled = prevIndex < 0 || !isEnough;\n next.disabled = nextIndex < 0 || !isEnough;\n Splide.emit(name + \":updated\", prev, next, prevIndex, nextIndex);\n }\n /**\r\n * Create a wrapper element and append arrows.\r\n */\n\n function appendArrows() {\n var wrapper = create('div', {\n \"class\": classes.arrows\n });\n append(wrapper, prev);\n append(wrapper, next);\n var slider = Elements.slider;\n var parent = Splide.options.arrows === 'slider' && slider ? slider : root;\n before(wrapper, parent.firstElementChild);\n }\n /**\r\n * Create an arrow element.\r\n *\r\n * @param {boolean} prev - Determine to create a prev arrow or next arrow.\r\n *\r\n * @return {Element} - A created arrow element.\r\n */\n\n function createArrow(prev) {\n var arrow = \"