{"version":3,"sources":["webpack:///webpack/bootstrap eadd075901d7557b7c55","webpack:///./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack:///./node_modules/sortablejs/modular/sortable.esm.js","webpack:///./app/javascript/packs/stimulus.js","webpack:///./node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","webpack:///./app/javascript/stimulus \\.js$","webpack:///./app/javascript/stimulus/action_table_controller.js","webpack:///./app/javascript/stimulus/attachment_controller.js","webpack:///./app/javascript/stimulus/disable_controller.js","webpack:///./app/javascript/stimulus/drag_controller.js","webpack:///./app/javascript/stimulus/formatted_reports_drag_controller.js","webpack:///./app/javascript/stimulus/input_toggle_controller.js","webpack:///./app/javascript/stimulus/kebob_controller.js","webpack:///./app/javascript/stimulus/lightbox_controller.js","webpack:///./node_modules/stimulus-lightbox/dist/stimulus-lightbox.mjs","webpack:///./node_modules/lightgallery/lightgallery.es5.js","webpack:///./app/javascript/stimulus/nested_form_controller.js","webpack:///./app/javascript/stimulus/page_controller.js","webpack:///./app/javascript/stimulus/property_list_drag_controller.js","webpack:///./app/javascript/stimulus/refresh_form_controller.js","webpack:///./app/javascript/stimulus/search_and_filter_controller.js","webpack:///./app/javascript/stimulus/tabbed_form_controller.js","webpack:///./app/javascript/stimulus/task_controller.js","webpack:///./app/javascript/stimulus/task_process_controller.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","EventListener","eventTarget","eventName","eventOptions","_classCallCheck","this","unorderedBindings","Set","addEventListener","removeEventListener","binding","add","delete","event","extendedEvent","stopImmediatePropagation","assign","immediatePropagationStopped","extendEvent","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","bindings","Symbol","iterator","next","done","value","handleEvent","err","return","size","Array","from","sort","left","right","leftIndex","index","rightIndex","Dispatcher","application","eventListenerMaps","Map","started","eventListeners","forEach","eventListener","connect","disconnect","fetchEventListenerForBinding","bindingConnected","clearEventListeners","arguments","length","bindingDisconnected","clearEventListenersForBinding","error","message","detail","handleError","hasBindings","removeMappedEventListenerFor","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","fetchEventListener","createEventListener","set","parts","keys","key","push","join","values","reduce","listeners","map","concat","defaultActionDescriptorFilters","stop","_ref","stopPropagation","prevent","_ref2","preventDefault","self","_ref3","element","target","descriptorPattern","parseActionDescriptorString","descriptorString","matches","trim","match","keyFilter","includes","eventTargetName","window","document","parseEventTarget","split","options","token","_defineProperty","replace","test","parseEventOptions","identifier","methodName","camelize","_","char","toUpperCase","namespaceCamelize","capitalize","charAt","slice","dasherize","toLowerCase","Action","descriptor","schema","tagName","defaultEventNames","getDefaultEventNameForElement","eventFilter","filteres","modifiers","_modifiers$map","modifier","_modifiers$map2","_slicedToArray","meta","ctrl","alt","shift","metaKey","ctrlKey","altKey","shiftKey","standardFilter","filter","keyMappings","params","pattern","RegExp","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","attributes","_ref5","typecast","stringifyEventTarget","content","a","button","form","details","input","e","getAttribute","select","textarea","Error","JSON","parse","o_O","Binding","context","action","willBeInvokedByEvent","applyEventModifiers","invokeWithEvent","actionDescriptorFilters","passes","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","entries","_step3$value","currentTarget","actionEvent","method","controller","logDebugActivity","KeyboardEvent","isFilterTarget","Element","contains","scope","containsElement","ElementObserver","delegate","_this","mutationObserverInit","childList","subtree","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","refresh","callback","takeRecords","matchElementsInTree","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","has","removeElement","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","addElement","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_step6","_iterator6","mutation","processMutation","type","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","node","elementAttributeChanged","matchElement","nodes","_iteratorNormalCompletion7","_didIteratorError7","_iteratorError7","_step7","_iterator7","elementFromNode","processTree","_iteratorNormalCompletion8","_didIteratorError8","_iteratorError8","_step8","_iterator8","elementIsActive","tree","processor","_iteratorNormalCompletion9","_didIteratorError9","_iteratorError9","_step9","_iterator9","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","start","pause","hasAttribute","querySelectorAll","selector","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","fetch","del","prune","Multimap","valuesByKey","some","_ref6","_ref7","_ref8","_ref9","IndexedMultimap","_this2","_possibleConstructorReturn","__proto__","getPrototypeOf","keysByValue","_get","SelectorObserver","matchesByElement","selectorMatchElement","_this3","selectorMatched","selectorUnmatched","_attributeName","matchedBefore","StringMapObserver","_this4","stringMap","attributeOldValue","_iteratorNormalCompletion10","_didIteratorError10","_iteratorError10","_step10","_iterator10","knownAttributeNames","refreshAttribute","_iteratorNormalCompletion11","_didIteratorError11","_iteratorError11","_step11","_iterator11","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","_refreshTokensForElem","refreshTokensForElement","_refreshTokensForElem2","unmatchedTokens","matchedTokens","tokensUnmatched","getValuesForKey","tokens","_this5","tokenMatched","_this6","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","Math","max","zip","findIndex","_ref10","_ref11","tokensAreEqual","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","_this7","clear","forToken","connectAction","disconnectAction","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","hasValue","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","_iteratorNormalCompletion12","_didIteratorError12","_iteratorError12","_step12","_iterator12","valueDescriptors","_ref13","data","rawValue","rawOldValue","changedMethodName","changedMethod","reader","TypeError","hasMethodName","_this8","descriptors","TargetObserver","targetsByName","disconnectAllTargets","_ref14","connectTarget","_ref15","disconnectTarget","_a","_this9","targetConnected","_this10","targetDisconnected","_iteratorNormalCompletion13","_didIteratorError13","_iteratorError13","_step13","_iterator13","_iteratorNormalCompletion14","_didIteratorError14","_iteratorError14","_step14","_iterator14","readInheritableStaticArrayValues","constructor","propertyName","ancestors","getAncestorsForConstructor","definition","isArray","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","apply","_toConsumableArray","getOwnStaticObjectPairs","reverse","OutletObserver","outletsByName","outletElementsByName","selectorObserverMap","_this11","outletDefinitions","outletName","body","observer","dependentContexts","disconnectAllOutlets","_selector","_ref16","outlet","getOutlet","connectOutlet","_ref17","getOutletFromMap","disconnectOutlet","_ref18","hasOutlet","controllerAttribute","_this12","outletConnected","_this13","outletDisconnected","_iteratorNormalCompletion15","_didIteratorError15","_iteratorError15","_step15","_iterator15","_iteratorNormalCompletion16","_didIteratorError16","_iteratorError16","_step16","_iterator16","_iteratorNormalCompletion17","_didIteratorError17","_iteratorError17","_step17","_iterator17","outlets","getSelectorForOutletName","getControllerForElementAndIdentifier","find","dependencies","router","controllerConstructor","outletDependencies","getKeysForValue","identifiers","dependentControllerIdentifiers","contexts","Context","_this14","functionName","bindingObserver","dispatcher","valueObserver","targetObserver","outletObserver","initialize","invokeControllerMethod","_len","args","_key2","parentElement","bless","properties","shadowConstructor","extend","shadowProperties","getOwnKeys","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","defineProperties","shadow","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","getOwnPropertyNames","extendWithReflect","extended","Reflect","construct","create","setPrototypeOf","b","testReflectExtension","_constructor","_inherits","Module","blessDefinition","contextsByScope","connectedContexts","fetchContextForScope","ClassMap","getDataKey","getAll","tokenize","getAttributeNameForKey","DataMap","setAttribute","removeAttribute","Guide","logger","warnedKeysByObject","warnedKeys","warn","attributeValueContainsToken","TargetSet","targetName","_this16","_len2","targetNames","_key3","findTarget","findLegacyTarget","_this17","_len3","_key4","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","_this18","targetDescriptor","targetAttribute","revisedAttributeName","guide","OutletSet","controllerElement","_this19","_len4","outletNames","_key5","findOutlet","_this20","_len5","_key6","findAllOutlets","outletAttributeForScope","_this21","queryElements","matchesElement","_this22","Scope","_this23","classes","closest","controllerSelector","documentScope","documentElement","isDocumentScope","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","unloadIdentifier","connectModule","afterLoad","disconnectModule","connectContextForScope","disconnectContextForScope","defaultSchema","enter","tab","esc","space","up","down","home","end","objectFromEntries","array","memo","_ref19","_ref20","k","v","Application","_this24","console","debug","logFormattedMessage","Promise","resolve","readyState","load","head","_this25","_len6","rest","_key7","shouldLoad","loadDefinition","_this26","_len7","_key8","getContextForElementAndIdentifier","onerror","groupCollapsed","log","groupEnd","parseValueDefinitionPair","_ref26","_ref27","payload","typeFromObject","parseValueTypeConstant","typeObject","defaultValueType","parseValueTypeDefault","default","propertyPath","parseValueTypeObject","typeDefinition","typeFromDefaultValue","typeFromConstant","parseValueTypeDefinition","constant","defaultValuesByType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","Boolean","Number","String","_typeof","toString","boolean","number","string","writeJSON","stringify","Controller","_ref28","_ref28$target","_ref28$detail","_ref28$prefix","prefix","_ref28$bubbles","bubbles","_ref28$cancelable","cancelable","CustomEvent","dispatchEvent","_identifier","_application","blessings","classDefinition","_ref22","getAttributeName","propertiesForClassDefinition","targetDefinition","_ref24","findAll","propertiesForTargetDefinition","valueDefinitionPairs","propertyDescriptorMap","_this28","result","valueDefinitionPair","valueDescriptor","_ref25","read","write","propertiesForValueDefinitionPair","outletDefinition","_ref23","camelizedName","outletController","_this27","propertiesForOutletDefinition","obj","_typeof2","writable","_extends","source","_objectSpread","ownKeys","sym","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","arr","arr2","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","userAgent","navigator","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","fn","off","substring","msMatchesSelector","webkitMatchesSelector","getParentOrHost","host","parentNode","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","state","classList","className","css","prop","val","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","list","getElementsByTagName","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","bottom","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","currentChild","children","display","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","nodeName","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","isRectEqual","rect1","rect2","round","throttle","ms","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","setRect","rect","unsetRect","expando","Date","getTime","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","child","fromRect","thisAnimationDuration","childMatrix","f","addAnimationState","removeAnimationState","splice","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","easing","animated","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","pluginName","pluginEvent","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","substr","createEvent","initEvent","to","item","pullMode","lastPutMode","allEventProperties","bind","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","nearestEmptyInsertDetectEvent","nearest","ret","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_detectNearestEmptySortable","touches","clientX","clientY","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","disabled","store","handle","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","id","_getDirection","touch","pointerType","originalTarget","shadowRoot","path","composedPath","root","inputs","idx","checked","_saveInputCheckedState","isContentEditable","criteria","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","appendChild","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","dropEffect","_globalDragOver","toArray","order","useAnimation","items","destroy","utils","is","dst","nextTick","cancelNextTick","detectDirection","_key","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","lastSwapEl","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref4","parentSortable","lastMultiDragSelect","multiDragSortable","dragEl$1","clonesFromRect","clonesHidden","multiDragElements","multiDragClones","initialFolding","folding","insertMultiDragClones","elementsInserted","sortableIndex","removeMultiDragElements","multiDragElement","AutoScroll","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","MultiDrag","_deselectMultiDrag","_checkKeyDown","_checkKeyUp","selectedClass","multiDragKey","multiDragKeyDown","isMultiDrag","delayStartGlobal","delayEnded","setupClone","showClone","hideClone","dragStartGlobal","multiDrag","dragOver","clonesInserted","insertMultiDragElements","dragRectAbsolute","clonesHiddenBefore","dragOverAnimationCapture","dragMatrix","dragOverAnimationComplete","_ref12","originalEvt","lastIndex","currentIndex","multiDragIndex","update","nullingGlobal","destroyGlobal","deselect","oldIndicies","newIndicies","clones","Swap","swapClass","dragOverValid","swap","prevSwapEl","n1","n2","i1","i2","p1","p2","isEqualNode","swapNodes","swapItem","_stimulus","_stimulusWebpackHelpers","definitionsFromContext","definitionForModuleWithContextAndKey","identifierForContextKey","definitionForModuleAndIdentifier","logicalName","./action_table_controller.js","./attachment_controller.js","./disable_controller.js","./drag_controller.js","./formatted_reports_drag_controller.js","./input_toggle_controller.js","./kebob_controller.js","./lightbox_controller.js","./nested_form_controller.js","./page_controller.js","./property_list_drag_controller.js","./refresh_form_controller.js","./search_and_filter_controller.js","./tabbed_form_controller.js","./task_controller.js","./task_process_controller.js","webpackContext","req","webpackContextResolve","page","per","detectOverflow","rowTargets","r","expandBtn","querySelector","toggle","expandRowClass","remove","paginate","attr","dataset","range","createRange","selectNodeContents","sel","addRange","u","URL","location","searchParams","append","ttScrollPosition","scrollX","scrollY","visit","sort_key","dir","pair","startsWith","formTarget","S3Uploader","progressBarsTarget","uploadTarget","url","filepath","unique_id","lastModifiedDate","attachments_attributes","0","then","ok","reload","catch","json","filename","hasWithValue","withValue","submitButtons","with","_sortablejs2","sortableTarget","ajax","position","innerText","itemTargets","inputTargets","kebobContentTarget","kebobIconTarget","innerHTML","lightGallery","_lightgallery2","defaultOptions","optionsValue","__assign","t","lGEvents","lightGalleryCoreSettings","mode","licenseKey","addClass","startClass","backdropDuration","startAnimationDuration","zoomFromOrigin","hideBarsDelay","showBarsAfter","slideDelay","supportLegacyBrowser","allowMediaOverlap","videoMaxSize","loadYouTubePoster","defaultCaptionHeight","ariaLabelledby","ariaDescribedby","resetScrollPosition","hideScrollbar","closable","swipeToClose","closeOnTap","showCloseIcon","showMaximizeIcon","loop","escKey","keyPress","trapFocus","controls","slideEndAnimation","hideControlOnEnd","mousewheel","getCaptionFromTitleOrAlt","appendSubHtmlTo","subHtmlSelectorRelative","preload","numberOfSlideItemsInDom","selectWithin","nextHtml","prevHtml","iframeWidth","iframeHeight","iframeMaxWidth","iframeMaxHeight","download","counter","appendCounterTo","swipeThreshold","enableSwipe","enableDrag","dynamic","dynamicEl","extraProps","exThumbImage","isMobile","mobileSettings","strings","closeGallery","toggleMaximize","previousSlide","nextSlide","playVideo","lgQuery","cssVenderPrefixes","_getSelector","firstElement","_getFirstEl","generateUUID","random","_each","func","_setCssVendorPrefix","cssProperty","group1","isEventMatched","eventNamespace","every","$LG","first","eq","removeAttr","attrs","wrap","wrapper","classNames","removeClass","hasClass","events","listener","once","trigger","customEvent","res","text","html","insertAdjacentHTML","prepend","pageYOffset","pageXOffset","offset","bodyMarginLeft","parseFloat","paddingTop","paddingBottom","initCustomEvent","defaultDynamicOptions","convertToData","g","spacing","defaultLgSize","lgSize","isResponsiveSizes","wWidth","size_1","cWidth","cHeight","maxWidth","min","maxHeight","ratio","imageSize","LGel","wHeight","elHeight","elStyle","borderLeft","borderTop","scX","scY","iframeTitle","altAttr","srcset","sizes","sources","imgMarkup","sourceTag","srcItms","rsWidth","rsSrc","_src","j","img","complete","naturalWidth","_poster","dummyImg","videoContStyle","playVideoString","_isVideo","youtube","vimeo","visibility","dynamicElements","availableDynamicOptions","il","jl","__spreadArrays","specified","dynamicAttr","label","currentItem","title","thumb","subHtml","isHTML5VIdeo","html5","wistia","lgId","LightGallery","lgOpened","lGalleryOn","lgBusy","currentItemsInDom","prevScrollTop","bodyPaddingRight","isDummyImageRemoved","dragOrSwipeEnabled","mediaContainerPosition","generateSettings","buildModules","settings","galleryItems","getItems","normalizeSettings","init","validateLicense","addSlideVideoInfo","buildStructure","instance","triggerPosterClick","arrow","openGalleryOnItemClick","_loop_1","this_1","$element","uuid","currentItemIndex","openGallery","getSlideItem","getSlideItemId","getIdName","getElementById","manageSingleSlideClassName","outer","$container","subHtmlCont","addClasses","containerClassName","closeIcon","maximizeIcon","template","$lgComponents","$backdrop","$inner","$content","$toolbar","outerClassNames","refreshOnResize","hideBars","manageCloseGallery","initModules","__slideVideoInfo","getMediaContainerPosition","top_1","currentImageSize","resizeVideoSlide","imgStyle","getDummyImgStyles","lgVideoStyle","getVideoContStyle","updateSlides","currentSrc","updateControls","_index","galleryItem","itemIndex","organizeSlideItems","loadContent","updateCurrentCounter","shouldHideScrollbar","bodyRect","scrollbarWidth","resetScrollBar","itemsToBeInsertedToDom","getItemsToBeInsertedToDom","addHtml","setMediaContainerPosition","timeout","currentSlide_1","slide","captionHeight","thumbContainer","hideBarTimeout","initPictureFill","$img","picturefill","counterHtml","subHtmlUrl","fL","currentSlide","getDummyImageContent","$currentSlide","$currentItem","_dummyImgSrc","dummyImgContent","setImgMarkup","currentGalleryItem","isFirstSlideWithZoomAnimation","onSlideObjectLoad","$slide","isHTML5VideoWithoutPoster","onLoad","onError","mediaObject","onLgObjectLoad","isFirstSlide","triggerSlideItemLoad","_speed","getSlideType","poster","video","rec","_html5Video","responsive","srcDyItms","videoInfo","iframe","top_2","videoSize","markup","html5Video","hasPoster","loadContentOnFirstSlideLoad","prevIndex","numberOfItems","possibleNumberOfItems","prevIndexItem","_element","numberOfExistingItems","getPreviousSlideIndex","currentItemId","setDownloadValue","downloadUrl","$download","makeSlideAnimation","currentSlideItem","previousSlideItem","fromTouch","fromThumb","numberOfGalleryItems","previousSlideItem_1","top_3","arrowDisable","touchPrev","touchNext","updateCounterTotal","touchMove","startCoords","endCoords","distanceX","pageX","distanceY","pageY","allowSwipe","swipeDirection","setTranslate","gutter","opacity","scale","touchEnd","distance","triggerClick","distanceAbs","goToNextSlide","goToPrevSlide","isPosterElement","isMoved","isSwiping","$item","touchAction","manageSwipeClass","isDraging","_touchNext","_touchPrev","_loop","keyCode","$prev","$next","$el","xValue","yValue","lastCall","deltaY","now","isSlideElement","playButton","invalidateItems","focus","preventScroll","focusableEls","firstFocusableEl","lastFocusableEl","activeElement","mousedown","force","top_4","_b","destroyModules","removeTimeout","blur","destroyGallery","closeTimeout","reOrderListOrderValues","nestedFormContainer","hiddenDestroyField","hasRemoveInputTarget","removeInputTarget","currentNode","siblings","previousSibling","insertAdjacentElement","orderInputTargets","firstElementChild","anchor","endpoint","modalTarget","credentials","bodyTarget","closeButtonTarget","verb","confirm","hideForPrintClasses","toggleHidden","elementsToHide","margin","zoom","print","positionTargets","formData","FormData","URLSearchParams","search","subForm","inputName","X-CSRF-TOKEN","that","DOMParser","parseFromString","outerHTML","startingFiltersCount","filters","moveHighlight","selectedSuggestion","hideSuggestions","submitFilters","selectSuggestion","displaySuggestions","searchbarTarget","buildingFilter","resetPartial","removeFilter","toDelete","_step$value","suggestionsTarget","resetHighlight","suggestions","show","suggestionTerminal","allowed","fullValue","displayHighlight","help","vissibleSuggestions","relatedTarget","suggestion","addPartial","addFilter","currentSuggestions","searchAndFilterTarget","partialFilter","partialFilterTarget","previousSuggestionsTargets","partials","filtersTarget","insertAdjacentText","queryname","comparison","_step2$value","select2mount","multiSelectTargets","conditionalOnTargets","each","conditionalOnName","conditionalValue","conditionalOn","hide","showForm","targetsToMount","select2","formSectionTargets","getCSRFToken","updatePercentageClasses","percent","percentage_complete","completion","passedChecked","percentageTargets","_progressBarFillColor","_progressBarChunkColor","_progressBarChunkWidth","percentage","chunks","drawProgressBar","_e$detail","response","percentageTarget","progressBarTarget","normalizedCompletion","getContext","clearRect","fillStyle","fillRect","chunkWidth"],"mappings":"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","file":"stimulus-cd14d01bd9d8338ac5b1.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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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://d20o1mk4l2eucc.cloudfront.net/packs/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 858);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap eadd075901d7557b7c55","/*\nStimulus 3.2.1\nCopyright © 2022 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let 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 createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[1];\n let keyFilter = matches[2];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[3]),\n eventName,\n eventOptions: matches[6] ? parseEventOptions(matches[6]) : {},\n identifier: matches[4],\n methodName: matches[5],\n keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n constructor(element, index, descriptor, schema) {\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 this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n isFilterTarget(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filteres = this.keyFilter.split(\"+\");\n const modifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\n const [meta, ctrl, alt, shift] = modifiers.map((modifier) => filteres.includes(modifier));\n if (event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift) {\n return true;\n }\n const standardFilter = filteres.filter((key) => !modifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const 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}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(event)) {\n this.invokeWithEvent(event);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const 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 applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n const { params } = this.action;\n const actionEvent = Object.assign(event, { params });\n this.method.call(this.controller, actionEvent);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.isFilterTarget(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(node, attributeName) {\n const element = node;\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(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 removeElement(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}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details = {}) {\n this.selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const matches = element.matches(this.selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n elementMatched(element) {\n this.selectorMatched(element);\n }\n elementUnmatched(element) {\n this.selectorUnmatched(element);\n }\n elementAttributeChanged(element, _attributeName) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(this.selector, element);\n if (!matches && matchedBefore) {\n this.selectorUnmatched(element);\n }\n }\n selectorMatched(element) {\n if (this.delegate.selectorMatched) {\n this.delegate.selectorMatched(element, this.selector, this.details);\n this.matchesByElement.add(this.selector, element);\n }\n }\n selectorUnmatched(element) {\n this.delegate.selectorUnmatched(element, this.selector, this.details);\n this.matchesByElement.delete(this.selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(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 get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let 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 fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(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 }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n }\n start() {\n if (this.selectorObserverMap.size === 0) {\n this.outletDefinitions.forEach((outletName) => {\n const selector = this.selector(outletName);\n const details = { outletName };\n if (selector) {\n this.selectorObserverMap.set(outletName, new SelectorObserver(document.body, selector, this, details));\n }\n });\n this.selectorObserverMap.forEach((observer) => observer.start());\n }\n this.dependentContexts.forEach((context) => context.refresh());\n }\n stop() {\n if (this.selectorObserverMap.size > 0) {\n this.disconnectAllOutlets();\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n return (this.hasOutlet(element, outletName) &&\n element.matches(`[${this.context.application.schema.controllerAttribute}~=${outletName}]`));\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\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 this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const 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((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const 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}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let 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}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let 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}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (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 this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(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 start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let 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 elementMatchedValue(element, value) {\n const 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 elementUnmatchedValue(element, value) {\n const 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 fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(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 get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad(definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outlet = this.outlets.find(name);\n if (outlet) {\n const outletController = this.application.getControllerForElementAndIdentifier(outlet, name);\n if (outletController) {\n return outletController;\n }\n else {\n throw new Error(`Missing \"data-controller=${name}\" attribute on outlet element for \"${this.identifier}\" controller`);\n }\n }\n throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outlet) => {\n const controller = this.application.getControllerForElementAndIdentifier(outlet, name);\n if (controller) {\n return controller;\n }\n else {\n console.warn(`The provided outlet element is missing the outlet controller \"${name}\" for \"${this.identifier}\"`, outlet);\n }\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outlet = this.outlets.find(name);\n if (outlet) {\n return outlet;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\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}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n if (!typeFromObject)\n return;\n const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n if (typeFromObject !== defaultValueType) {\n const propertyPath = payload.controller ? `${payload.controller}.${payload.token}` : payload.token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${payload.typeObject.default}\" is of type \"${defaultValueType}\".`);\n }\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const typeFromObject = parseValueTypeObject({\n controller: payload.controller,\n token: payload.token,\n typeObject: payload.typeDefinition,\n });\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeDefinition);\n const typeFromConstant = parseValueTypeConstant(payload.typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = payload.controller ? `${payload.controller}.${payload.typeDefinition}` : payload.token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${payload.token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const defaultValue = typeDefinition.default;\n if (defaultValue !== undefined)\n return defaultValue;\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const key = `${dasherize(payload.token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(payload.typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(payload.typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value);\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst 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}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@hotwired/stimulus/dist/stimulus.js","/**!\n * Sortable 1.13.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction _typeof(obj) {\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\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar version = \"1.13.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !!\n /*@__PURE__*/\n navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, [\"evt\"]);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n if (lastChild(sortable)) return;\n var rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (threshold && insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // assign target only if condition is true\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/sortablejs/modular/sortable.esm.js","import { Application } from \"@hotwired/stimulus\"\nimport { definitionsFromContext } from \"@hotwired/stimulus-webpack-helpers\"\n\nconst application = Application.start()\nconst context = require.context(\"../stimulus\", true, /\\.js$/)\napplication.load(definitionsFromContext(context))\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/packs/stimulus.js","/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","var map = {\n\t\"./action_table_controller.js\": 861,\n\t\"./attachment_controller.js\": 862,\n\t\"./disable_controller.js\": 863,\n\t\"./drag_controller.js\": 864,\n\t\"./formatted_reports_drag_controller.js\": 865,\n\t\"./input_toggle_controller.js\": 866,\n\t\"./kebob_controller.js\": 867,\n\t\"./lightbox_controller.js\": 868,\n\t\"./nested_form_controller.js\": 871,\n\t\"./page_controller.js\": 872,\n\t\"./property_list_drag_controller.js\": 873,\n\t\"./refresh_form_controller.js\": 874,\n\t\"./search_and_filter_controller.js\": 875,\n\t\"./tabbed_form_controller.js\": 876,\n\t\"./task_controller.js\": 877,\n\t\"./task_process_controller.js\": 878\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 860;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/javascript/stimulus \\.js$\n// module id = 860\n// module chunks = 7","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"row\"]\n static classes = [\"expandRow\"]\n\n initialize() {\n this.page = parseInt(this.data.get(\"page\"), 10)\n this.per = parseInt(this.data.get(\"per\"), 10)\n let that = this\n this.detectOverflow()\n }\n\n detectOverflow() {\n this.rowTargets.forEach(r => {\n let expandBtn = r.querySelector('.expandRowBtn')\n let cells = Array.from(r.querySelectorAll('.at-cell'))\n if (cells.some(c => { return c.scrollHeight > c.clientHeight || c.scrollWidth > c.clientWidth })) {\n expandBtn.classList.toggle('hidden')\n }\n })\n }\n\n toggleRow(e) {\n e.currentTarget.closest('.actionTableRow').classList.toggle(this.expandRowClass)\n if (e.currentTarget.classList.contains('fa-plus')) {\n e.currentTarget.classList.remove('fa-plus')\n e.currentTarget.classList.add('fa-minus')\n } else {\n e.currentTarget.classList.add('fa-plus')\n e.currentTarget.classList.remove('fa-minus')\n }\n }\n\n next(e) {\n e.preventDefault()\n this.page += 1\n this.paginate()\n }\n\n previous(e) {\n e.preventDefault()\n if (this.page - 1 <= 0) {\n return\n }\n this.page -= 1\n this.paginate()\n }\n\n set_pagination_attr(e) {\n if (e.type === 'keydown' && e.key === 'Enter') {\n e.preventDefault()\n }\n let attr = e.currentTarget.dataset.attr\n let new_attr = parseInt(e.currentTarget.textContent, 10)\n if (new_attr === this[attr]) {\n return\n }\n this[attr] = parseInt(e.currentTarget.textContent, 10)\n this.paginate()\n }\n\n select(e) {\n let range = document.createRange()\n range.selectNodeContents(e.currentTarget)\n let sel = window.getSelection()\n sel.removeAllRanges()\n sel.addRange(range)\n }\n\n paginate() {\n let u = new URL(window.location.toString())\n u.searchParams.delete(`${this.id}[page]`)\n u.searchParams.delete(`${this.id}[per]`)\n u.searchParams.append(`${this.id}[page]`, this.page)\n u.searchParams.append(`${this.id}[per]`, this.per)\n window.ttScrollPosition = { x: window.scrollX, y: window.scrollY }\n Turbolinks.visit(u.toString())\n }\n\n sort(e) {\n let sort_key = e.currentTarget.dataset['sortKey']\n let name = e.currentTarget.dataset['sortName']\n let dir = e.currentTarget.dataset['sortNextDir']\n let u = new URL(window.location.toString())\n let toDelete = Array.from(u.searchParams.entries()).filter((pair) => {\n return pair[0].startsWith(`${this.id}[sort]`)\n })\n toDelete.forEach(pair => u.searchParams.delete(pair[0]))\n if (dir) {\n u.searchParams.append(`${this.id}[sort][${sort_key}][name]`, name)\n u.searchParams.append(`${this.id}[sort][${sort_key}][dir]`, dir)\n }\n window.ttScrollPosition = { x: window.scrollX, y: window.scrollY }\n Turbolinks.visit(u.toString())\n }\n\n get id() {\n return this.data.get(\"id\")\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/action_table_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nconst getCSRFToken = () => {\n return Array.from(document.getElementsByTagName('meta')).find(meta => meta.name === 'csrf-token').content\n}\n\nexport default class extends Controller {\n static targets = [\"form\", \"upload\", \"progressBars\"]\n\n connect(){\n // Setup the JQuery uploader object\n $(this.formTarget).S3Uploader({\n remove_completed_progress_bar: false,\n progress_bar_target: $(this.progressBarsTarget),\n click_submit_target: $(this.uploadTarget)\n })\n // Grab JQuery events and redirect to the controller\n $(this.formTarget).bind('s3_upload_complete',\n (e, content) => this.create(content))\n }\n\n create(e){\n // Prepare params hash for Rails accepts_nested_attributes :attachments\n let params = {}\n // Carrierwave / Fog expects just the path in the url param.\n // Additionally since this is url encoded %2f needs to be turned back into\n // / for parsing on the backend to work correctly.\n e.url = e.filepath.replace(/\\/uploads%2f/i,'').replace(/%2f/i,'/')\n // Remove unique_id as this is not an attribute of Attachment.\n delete e.unique_id\n // Remove filepath as it seems to break connection to s3.\n // All other attachments do not have a filepath set even though it is an\n // attribute.\n delete e.filepath\n delete e.lastModifiedDate\n params[this.data.get('param')] = { attachments_attributes: { 0: e }}\n\n let url = this.data.get(\"path\") + '.json'\n let options = {\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(params),\n headers: {\n \"Content-Type\": \"application/json\",\n 'X-CSRF-TOKEN': getCSRFToken()\n }\n }\n fetch(url, options)\n .then(r => {\n if(!r.ok){\n throw r\n }\n })\n .then(r => window.location.reload())\n .catch(r => r.json().then(r => { alert(`${e.filename}: ${r.message}`) }))\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/attachment_controller.js","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static values = { with: String };\n\n connect() {\n this.element.dataset[\"action\"] = \"submit->disable#disableForm\";\n\n if (!this.hasWithValue) {\n this.withValue = \"Processing...\";\n }\n }\n\n disableForm() {\n this.submitButtons().forEach((button) => {\n button.disabled = true;\n button.value = this.withValue;\n });\n }\n\n submitButtons() {\n return this.element.querySelectorAll(\"input[type='submit']\");\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/disable_controller.js","import { Controller } from \"@hotwired/stimulus\"\nimport Sortable from \"sortablejs\"\n\nexport default class extends Controller {\n static targets = ['sortable']\n\n connect(){\n this.sortable = Sortable.create(this.sortableTarget, {\n disabled: true,\n animation: 150,\n onEnd: this.end.bind(this)\n })\n }\n\n toggleEnabled(e){\n let state = this.sortable.option('disabled')\n if (state){\n e.currentTarget.classList.add(\"fa-times-circle\")\n e.currentTarget.classList.remove(\"fa-cog\")\n } else {\n e.currentTarget.classList.remove(\"fa-times-circle\")\n e.currentTarget.classList.add(\"fa-cog\")\n }\n this.sortable.option('disabled', !state)\n }\n\n end(event){\n let id = event.item.dataset.id\n $.ajax({\n url: this.data.get(\"url\").replace(\":id\", id),\n type: 'POST',\n data: { position: event.newIndex + 1}\n })\n\n this.element.querySelectorAll(\"tr:nth-child(odd)\").forEach(e => e.classList.add('visible-odd'))\n this.element.querySelectorAll(\"tr:nth-child(even)\").forEach(e => e.classList.remove('visible-odd'))\n this.element.querySelectorAll(\"tr td:first-child\").forEach((e, i) => e.innerText = i + 1)\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/drag_controller.js","import { Controller } from \"@hotwired/stimulus\"\nimport Sortable from \"sortablejs\"\n\nexport default class extends Controller {\n static targets = ['sortable', 'item']\n\n connect(){\n this.sortable = Sortable.create(this.sortableTarget, {\n animation: 150,\n filter: \".link_to_add_fields\",\n onEnd: this.end.bind(this)\n })\n }\n\n end(event){\n this.itemTargets.forEach((e,i) => e.value = i + 1)\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/formatted_reports_drag_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"input\", \"toggle\"]\n\n toggle(e){\n this.inputTargets.forEach(i => {\n i.disabled = !i.disabled\n i.classList.toggle('hidden')\n })\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/input_toggle_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = ['kebobContent', 'kebobIcon']\n\n toggleKebob(e) {\n this.kebobContentTarget.classList.toggle('hidden')\n this.kebobIconTarget.innerHTML = this.kebobIconTarget.innerHTML == 'more_vert' ? 'cancel' : 'more_vert'\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/kebob_controller.js","import Lightbox from \"stimulus-lightbox\";\n\nexport default class extends Lightbox {\n connect() {\n super.connect();\n }\n\n // You can set default options in this getter.\n get defaultOptions() {\n return {\n licenseKey: \"BEFD869D-8B86-42CA-9133-8468D717BED2\",\n thumbnail: true,\n selector: \".thumbnail > a\",\n subHtmlSelectorRelative: true,\n };\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/lightbox_controller.js","import { Controller as t } from \"@hotwired/stimulus\";\nimport e from \"lightgallery\";\nclass l extends t {\n connect() {\n this.lightGallery = e(this.element, {\n ...this.defaultOptions,\n ...this.optionsValue\n });\n }\n disconnect() {\n this.lightGallery.destroy();\n }\n get defaultOptions() {\n return {};\n }\n}\nl.values = {\n options: Object\n};\nexport {\n l as default\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/stimulus-lightbox/dist/stimulus-lightbox.mjs","/*!\n * lightgallery | 2.7.1 | January 11th 2023\n * http://www.lightgalleryjs.com/\n * Copyright (c) 2020 Sachin Neravath;\n * @license GPLv3\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\n\n/**\r\n * List of lightGallery events\r\n * All events should be documented here\r\n * Below interfaces are used to build the website documentations\r\n * */\r\nvar lGEvents = {\r\n afterAppendSlide: 'lgAfterAppendSlide',\r\n init: 'lgInit',\r\n hasVideo: 'lgHasVideo',\r\n containerResize: 'lgContainerResize',\r\n updateSlides: 'lgUpdateSlides',\r\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\r\n beforeOpen: 'lgBeforeOpen',\r\n afterOpen: 'lgAfterOpen',\r\n slideItemLoad: 'lgSlideItemLoad',\r\n beforeSlide: 'lgBeforeSlide',\r\n afterSlide: 'lgAfterSlide',\r\n posterClick: 'lgPosterClick',\r\n dragStart: 'lgDragStart',\r\n dragMove: 'lgDragMove',\r\n dragEnd: 'lgDragEnd',\r\n beforeNextSlide: 'lgBeforeNextSlide',\r\n beforePrevSlide: 'lgBeforePrevSlide',\r\n beforeClose: 'lgBeforeClose',\r\n afterClose: 'lgAfterClose',\r\n rotateLeft: 'lgRotateLeft',\r\n rotateRight: 'lgRotateRight',\r\n flipHorizontal: 'lgFlipHorizontal',\r\n flipVertical: 'lgFlipVertical',\r\n autoplay: 'lgAutoplay',\r\n autoplayStart: 'lgAutoplayStart',\r\n autoplayStop: 'lgAutoplayStop',\r\n};\n\nvar lightGalleryCoreSettings = {\r\n mode: 'lg-slide',\r\n easing: 'ease',\r\n speed: 400,\r\n licenseKey: '0000-0000-000-0000',\r\n height: '100%',\r\n width: '100%',\r\n addClass: '',\r\n startClass: 'lg-start-zoom',\r\n backdropDuration: 300,\r\n container: '',\r\n startAnimationDuration: 400,\r\n zoomFromOrigin: true,\r\n hideBarsDelay: 0,\r\n showBarsAfter: 10000,\r\n slideDelay: 0,\r\n supportLegacyBrowser: true,\r\n allowMediaOverlap: false,\r\n videoMaxSize: '1280-720',\r\n loadYouTubePoster: true,\r\n defaultCaptionHeight: 0,\r\n ariaLabelledby: '',\r\n ariaDescribedby: '',\r\n resetScrollPosition: true,\r\n hideScrollbar: false,\r\n closable: true,\r\n swipeToClose: true,\r\n closeOnTap: true,\r\n showCloseIcon: true,\r\n showMaximizeIcon: false,\r\n loop: true,\r\n escKey: true,\r\n keyPress: true,\r\n trapFocus: true,\r\n controls: true,\r\n slideEndAnimation: true,\r\n hideControlOnEnd: false,\r\n mousewheel: false,\r\n getCaptionFromTitleOrAlt: true,\r\n appendSubHtmlTo: '.lg-sub-html',\r\n subHtmlSelectorRelative: false,\r\n preload: 2,\r\n numberOfSlideItemsInDom: 10,\r\n selector: '',\r\n selectWithin: '',\r\n nextHtml: '',\r\n prevHtml: '',\r\n index: 0,\r\n iframeWidth: '100%',\r\n iframeHeight: '100%',\r\n iframeMaxWidth: '100%',\r\n iframeMaxHeight: '100%',\r\n download: true,\r\n counter: true,\r\n appendCounterTo: '.lg-toolbar',\r\n swipeThreshold: 50,\r\n enableSwipe: true,\r\n enableDrag: true,\r\n dynamic: false,\r\n dynamicEl: [],\r\n extraProps: [],\r\n exThumbImage: '',\r\n isMobile: undefined,\r\n mobileSettings: {\r\n controls: false,\r\n showCloseIcon: false,\r\n download: false,\r\n },\r\n plugins: [],\r\n strings: {\r\n closeGallery: 'Close gallery',\r\n toggleMaximize: 'Toggle maximize',\r\n previousSlide: 'Previous slide',\r\n nextSlide: 'Next slide',\r\n download: 'Download',\r\n playVideo: 'Play video',\r\n },\r\n};\n\nfunction initLgPolyfills() {\r\n (function () {\r\n if (typeof window.CustomEvent === 'function')\r\n return false;\r\n function CustomEvent(event, params) {\r\n params = params || {\r\n bubbles: false,\r\n cancelable: false,\r\n detail: null,\r\n };\r\n var evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n }\r\n window.CustomEvent = CustomEvent;\r\n })();\r\n (function () {\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n })();\r\n}\r\nvar lgQuery = /** @class */ (function () {\r\n function lgQuery(selector) {\r\n this.cssVenderPrefixes = [\r\n 'TransitionDuration',\r\n 'TransitionTimingFunction',\r\n 'Transform',\r\n 'Transition',\r\n ];\r\n this.selector = this._getSelector(selector);\r\n this.firstElement = this._getFirstEl();\r\n return this;\r\n }\r\n lgQuery.generateUUID = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n };\r\n lgQuery.prototype._getSelector = function (selector, context) {\r\n if (context === void 0) { context = document; }\r\n if (typeof selector !== 'string') {\r\n return selector;\r\n }\r\n context = context || document;\r\n var fl = selector.substring(0, 1);\r\n if (fl === '#') {\r\n return context.querySelector(selector);\r\n }\r\n else {\r\n return context.querySelectorAll(selector);\r\n }\r\n };\r\n lgQuery.prototype._each = function (func) {\r\n if (!this.selector) {\r\n return this;\r\n }\r\n if (this.selector.length !== undefined) {\r\n [].forEach.call(this.selector, func);\r\n }\r\n else {\r\n func(this.selector, 0);\r\n }\r\n return this;\r\n };\r\n lgQuery.prototype._setCssVendorPrefix = function (el, cssProperty, value) {\r\n // prettier-ignore\r\n var property = cssProperty.replace(/-([a-z])/gi, function (s, group1) {\r\n return group1.toUpperCase();\r\n });\r\n if (this.cssVenderPrefixes.indexOf(property) !== -1) {\r\n el.style[property.charAt(0).toLowerCase() + property.slice(1)] = value;\r\n el.style['webkit' + property] = value;\r\n el.style['moz' + property] = value;\r\n el.style['ms' + property] = value;\r\n el.style['o' + property] = value;\r\n }\r\n else {\r\n el.style[property] = value;\r\n }\r\n };\r\n lgQuery.prototype._getFirstEl = function () {\r\n if (this.selector && this.selector.length !== undefined) {\r\n return this.selector[0];\r\n }\r\n else {\r\n return this.selector;\r\n }\r\n };\r\n lgQuery.prototype.isEventMatched = function (event, eventName) {\r\n var eventNamespace = eventName.split('.');\r\n return event\r\n .split('.')\r\n .filter(function (e) { return e; })\r\n .every(function (e) {\r\n return eventNamespace.indexOf(e) !== -1;\r\n });\r\n };\r\n lgQuery.prototype.attr = function (attr, value) {\r\n if (value === undefined) {\r\n if (!this.firstElement) {\r\n return '';\r\n }\r\n return this.firstElement.getAttribute(attr);\r\n }\r\n this._each(function (el) {\r\n el.setAttribute(attr, value);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.find = function (selector) {\r\n return $LG(this._getSelector(selector, this.selector));\r\n };\r\n lgQuery.prototype.first = function () {\r\n if (this.selector && this.selector.length !== undefined) {\r\n return $LG(this.selector[0]);\r\n }\r\n else {\r\n return $LG(this.selector);\r\n }\r\n };\r\n lgQuery.prototype.eq = function (index) {\r\n return $LG(this.selector[index]);\r\n };\r\n lgQuery.prototype.parent = function () {\r\n return $LG(this.selector.parentElement);\r\n };\r\n lgQuery.prototype.get = function () {\r\n return this._getFirstEl();\r\n };\r\n lgQuery.prototype.removeAttr = function (attributes) {\r\n var attrs = attributes.split(' ');\r\n this._each(function (el) {\r\n attrs.forEach(function (attr) { return el.removeAttribute(attr); });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.wrap = function (className) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n var wrapper = document.createElement('div');\r\n wrapper.className = className;\r\n this.firstElement.parentNode.insertBefore(wrapper, this.firstElement);\r\n this.firstElement.parentNode.removeChild(this.firstElement);\r\n wrapper.appendChild(this.firstElement);\r\n return this;\r\n };\r\n lgQuery.prototype.addClass = function (classNames) {\r\n if (classNames === void 0) { classNames = ''; }\r\n this._each(function (el) {\r\n // IE doesn't support multiple arguments\r\n classNames.split(' ').forEach(function (className) {\r\n if (className) {\r\n el.classList.add(className);\r\n }\r\n });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.removeClass = function (classNames) {\r\n this._each(function (el) {\r\n // IE doesn't support multiple arguments\r\n classNames.split(' ').forEach(function (className) {\r\n if (className) {\r\n el.classList.remove(className);\r\n }\r\n });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.hasClass = function (className) {\r\n if (!this.firstElement) {\r\n return false;\r\n }\r\n return this.firstElement.classList.contains(className);\r\n };\r\n lgQuery.prototype.hasAttribute = function (attribute) {\r\n if (!this.firstElement) {\r\n return false;\r\n }\r\n return this.firstElement.hasAttribute(attribute);\r\n };\r\n lgQuery.prototype.toggleClass = function (className) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n if (this.hasClass(className)) {\r\n this.removeClass(className);\r\n }\r\n else {\r\n this.addClass(className);\r\n }\r\n return this;\r\n };\r\n lgQuery.prototype.css = function (property, value) {\r\n var _this = this;\r\n this._each(function (el) {\r\n _this._setCssVendorPrefix(el, property, value);\r\n });\r\n return this;\r\n };\r\n // Need to pass separate namespaces for separate elements\r\n lgQuery.prototype.on = function (events, listener) {\r\n var _this = this;\r\n if (!this.selector) {\r\n return this;\r\n }\r\n events.split(' ').forEach(function (event) {\r\n if (!Array.isArray(lgQuery.eventListeners[event])) {\r\n lgQuery.eventListeners[event] = [];\r\n }\r\n lgQuery.eventListeners[event].push(listener);\r\n _this.selector.addEventListener(event.split('.')[0], listener);\r\n });\r\n return this;\r\n };\r\n // @todo - test this\r\n lgQuery.prototype.once = function (event, listener) {\r\n var _this = this;\r\n this.on(event, function () {\r\n _this.off(event);\r\n listener(event);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.off = function (event) {\r\n var _this = this;\r\n if (!this.selector) {\r\n return this;\r\n }\r\n Object.keys(lgQuery.eventListeners).forEach(function (eventName) {\r\n if (_this.isEventMatched(event, eventName)) {\r\n lgQuery.eventListeners[eventName].forEach(function (listener) {\r\n _this.selector.removeEventListener(eventName.split('.')[0], listener);\r\n });\r\n lgQuery.eventListeners[eventName] = [];\r\n }\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.trigger = function (event, detail) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n var customEvent = new CustomEvent(event.split('.')[0], {\r\n detail: detail || null,\r\n });\r\n this.firstElement.dispatchEvent(customEvent);\r\n return this;\r\n };\r\n // Does not support IE\r\n lgQuery.prototype.load = function (url) {\r\n var _this = this;\r\n fetch(url)\r\n .then(function (res) { return res.text(); })\r\n .then(function (html) {\r\n _this.selector.innerHTML = html;\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.html = function (html) {\r\n if (html === undefined) {\r\n if (!this.firstElement) {\r\n return '';\r\n }\r\n return this.firstElement.innerHTML;\r\n }\r\n this._each(function (el) {\r\n el.innerHTML = html;\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.append = function (html) {\r\n this._each(function (el) {\r\n if (typeof html === 'string') {\r\n el.insertAdjacentHTML('beforeend', html);\r\n }\r\n else {\r\n el.appendChild(html);\r\n }\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.prepend = function (html) {\r\n this._each(function (el) {\r\n el.insertAdjacentHTML('afterbegin', html);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.remove = function () {\r\n this._each(function (el) {\r\n el.parentNode.removeChild(el);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.empty = function () {\r\n this._each(function (el) {\r\n el.innerHTML = '';\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.scrollTop = function (scrollTop) {\r\n if (scrollTop !== undefined) {\r\n document.body.scrollTop = scrollTop;\r\n document.documentElement.scrollTop = scrollTop;\r\n return this;\r\n }\r\n else {\r\n return (window.pageYOffset ||\r\n document.documentElement.scrollTop ||\r\n document.body.scrollTop ||\r\n 0);\r\n }\r\n };\r\n lgQuery.prototype.scrollLeft = function (scrollLeft) {\r\n if (scrollLeft !== undefined) {\r\n document.body.scrollLeft = scrollLeft;\r\n document.documentElement.scrollLeft = scrollLeft;\r\n return this;\r\n }\r\n else {\r\n return (window.pageXOffset ||\r\n document.documentElement.scrollLeft ||\r\n document.body.scrollLeft ||\r\n 0);\r\n }\r\n };\r\n lgQuery.prototype.offset = function () {\r\n if (!this.firstElement) {\r\n return {\r\n left: 0,\r\n top: 0,\r\n };\r\n }\r\n var rect = this.firstElement.getBoundingClientRect();\r\n var bodyMarginLeft = $LG('body').style().marginLeft;\r\n // Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value\r\n return {\r\n left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(),\r\n top: rect.top + this.scrollTop(),\r\n };\r\n };\r\n lgQuery.prototype.style = function () {\r\n if (!this.firstElement) {\r\n return {};\r\n }\r\n return (this.firstElement.currentStyle ||\r\n window.getComputedStyle(this.firstElement));\r\n };\r\n // Width without padding and border even if box-sizing is used.\r\n lgQuery.prototype.width = function () {\r\n var style = this.style();\r\n return (this.firstElement.clientWidth -\r\n parseFloat(style.paddingLeft) -\r\n parseFloat(style.paddingRight));\r\n };\r\n // Height without padding and border even if box-sizing is used.\r\n lgQuery.prototype.height = function () {\r\n var style = this.style();\r\n return (this.firstElement.clientHeight -\r\n parseFloat(style.paddingTop) -\r\n parseFloat(style.paddingBottom));\r\n };\r\n lgQuery.eventListeners = {};\r\n return lgQuery;\r\n}());\r\nfunction $LG(selector) {\r\n initLgPolyfills();\r\n return new lgQuery(selector);\r\n}\n\nvar defaultDynamicOptions = [\r\n 'src',\r\n 'sources',\r\n 'subHtml',\r\n 'subHtmlUrl',\r\n 'html',\r\n 'video',\r\n 'poster',\r\n 'slideName',\r\n 'responsive',\r\n 'srcset',\r\n 'sizes',\r\n 'iframe',\r\n 'downloadUrl',\r\n 'download',\r\n 'width',\r\n 'facebookShareUrl',\r\n 'tweetText',\r\n 'iframeTitle',\r\n 'twitterShareUrl',\r\n 'pinterestShareUrl',\r\n 'pinterestText',\r\n 'fbHtml',\r\n 'disqusIdentifier',\r\n 'disqusUrl',\r\n];\r\n// Convert html data-attribute to camalcase\r\nfunction convertToData(attr) {\r\n // FInd a way for lgsize\r\n if (attr === 'href') {\r\n return 'src';\r\n }\r\n attr = attr.replace('data-', '');\r\n attr = attr.charAt(0).toLowerCase() + attr.slice(1);\r\n attr = attr.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });\r\n return attr;\r\n}\r\nvar utils = {\r\n /**\r\n * get possible width and height from the lgSize attribute. Used for ZoomFromOrigin option\r\n */\r\n getSize: function (el, container, spacing, defaultLgSize) {\r\n if (spacing === void 0) { spacing = 0; }\r\n var LGel = $LG(el);\r\n var lgSize = LGel.attr('data-lg-size') || defaultLgSize;\r\n if (!lgSize) {\r\n return;\r\n }\r\n var isResponsiveSizes = lgSize.split(',');\r\n // if at-least two viewport sizes are available\r\n if (isResponsiveSizes[1]) {\r\n var wWidth = window.innerWidth;\r\n for (var i = 0; i < isResponsiveSizes.length; i++) {\r\n var size_1 = isResponsiveSizes[i];\r\n var responsiveWidth = parseInt(size_1.split('-')[2], 10);\r\n if (responsiveWidth > wWidth) {\r\n lgSize = size_1;\r\n break;\r\n }\r\n // take last item as last option\r\n if (i === isResponsiveSizes.length - 1) {\r\n lgSize = size_1;\r\n }\r\n }\r\n }\r\n var size = lgSize.split('-');\r\n var width = parseInt(size[0], 10);\r\n var height = parseInt(size[1], 10);\r\n var cWidth = container.width();\r\n var cHeight = container.height() - spacing;\r\n var maxWidth = Math.min(cWidth, width);\r\n var maxHeight = Math.min(cHeight, height);\r\n var ratio = Math.min(maxWidth / width, maxHeight / height);\r\n return { width: width * ratio, height: height * ratio };\r\n },\r\n /**\r\n * @desc Get transform value based on the imageSize. Used for ZoomFromOrigin option\r\n * @param {jQuery Element}\r\n * @returns {String} Transform CSS string\r\n */\r\n getTransform: function (el, container, top, bottom, imageSize) {\r\n if (!imageSize) {\r\n return;\r\n }\r\n var LGel = $LG(el).find('img').first();\r\n if (!LGel.get()) {\r\n return;\r\n }\r\n var containerRect = container.get().getBoundingClientRect();\r\n var wWidth = containerRect.width;\r\n // using innerWidth to include mobile safari bottom bar\r\n var wHeight = container.height() - (top + bottom);\r\n var elWidth = LGel.width();\r\n var elHeight = LGel.height();\r\n var elStyle = LGel.style();\r\n var x = (wWidth - elWidth) / 2 -\r\n LGel.offset().left +\r\n (parseFloat(elStyle.paddingLeft) || 0) +\r\n (parseFloat(elStyle.borderLeft) || 0) +\r\n $LG(window).scrollLeft() +\r\n containerRect.left;\r\n var y = (wHeight - elHeight) / 2 -\r\n LGel.offset().top +\r\n (parseFloat(elStyle.paddingTop) || 0) +\r\n (parseFloat(elStyle.borderTop) || 0) +\r\n $LG(window).scrollTop() +\r\n top;\r\n var scX = elWidth / imageSize.width;\r\n var scY = elHeight / imageSize.height;\r\n var transform = 'translate3d(' +\r\n (x *= -1) +\r\n 'px, ' +\r\n (y *= -1) +\r\n 'px, 0) scale3d(' +\r\n scX +\r\n ', ' +\r\n scY +\r\n ', 1)';\r\n return transform;\r\n },\r\n getIframeMarkup: function (iframeWidth, iframeHeight, iframeMaxWidth, iframeMaxHeight, src, iframeTitle) {\r\n var title = iframeTitle ? 'title=\"' + iframeTitle + '\"' : '';\r\n return \"
\\n \\n
\";\r\n },\r\n getImgMarkup: function (index, src, altAttr, srcset, sizes, sources) {\r\n var srcsetAttr = srcset ? \"srcset=\\\"\" + srcset + \"\\\"\" : '';\r\n var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\"\" : '';\r\n var imgMarkup = \"\";\r\n var sourceTag = '';\r\n if (sources) {\r\n var sourceObj = typeof sources === 'string' ? JSON.parse(sources) : sources;\r\n sourceTag = sourceObj.map(function (source) {\r\n var attrs = '';\r\n Object.keys(source).forEach(function (key) {\r\n // Do not remove the first space as it is required to separate the attributes\r\n attrs += \" \" + key + \"=\\\"\" + source[key] + \"\\\"\";\r\n });\r\n return \"\";\r\n });\r\n }\r\n return \"\" + sourceTag + imgMarkup;\r\n },\r\n // Get src from responsive src\r\n getResponsiveSrc: function (srcItms) {\r\n var rsWidth = [];\r\n var rsSrc = [];\r\n var src = '';\r\n for (var i = 0; i < srcItms.length; i++) {\r\n var _src = srcItms[i].split(' ');\r\n // Manage empty space\r\n if (_src[0] === '') {\r\n _src.splice(0, 1);\r\n }\r\n rsSrc.push(_src[0]);\r\n rsWidth.push(_src[1]);\r\n }\r\n var wWidth = window.innerWidth;\r\n for (var j = 0; j < rsWidth.length; j++) {\r\n if (parseInt(rsWidth[j], 10) > wWidth) {\r\n src = rsSrc[j];\r\n break;\r\n }\r\n }\r\n return src;\r\n },\r\n isImageLoaded: function (img) {\r\n if (!img)\r\n return false;\r\n // During the onload event, IE correctly identifies any images that\r\n // weren’t downloaded as not complete. Others should too. Gecko-based\r\n // browsers act like NS4 in that they report this incorrectly.\r\n if (!img.complete) {\r\n return false;\r\n }\r\n // However, they do have two very useful properties: naturalWidth and\r\n // naturalHeight. These give the true size of the image. If it failed\r\n // to load, either of these should be zero.\r\n if (img.naturalWidth === 0) {\r\n return false;\r\n }\r\n // No other way of checking: assume it’s ok.\r\n return true;\r\n },\r\n getVideoPosterMarkup: function (_poster, dummyImg, videoContStyle, playVideoString, _isVideo) {\r\n var videoClass = '';\r\n if (_isVideo && _isVideo.youtube) {\r\n videoClass = 'lg-has-youtube';\r\n }\r\n else if (_isVideo && _isVideo.vimeo) {\r\n videoClass = 'lg-has-vimeo';\r\n }\r\n else {\r\n videoClass = 'lg-has-html5';\r\n }\r\n return \"
\\n
\\n \\n \" + playVideoString + \"\\n \\n \\n \\n \\n \\n \\n \\n
\\n \" + (dummyImg || '') + \"\\n \\n
\";\r\n },\r\n getFocusableElements: function (container) {\r\n var elements = container.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])');\r\n var visibleElements = [].filter.call(elements, function (element) {\r\n var style = window.getComputedStyle(element);\r\n return style.display !== 'none' && style.visibility !== 'hidden';\r\n });\r\n return visibleElements;\r\n },\r\n /**\r\n * @desc Create dynamic elements array from gallery items when dynamic option is false\r\n * It helps to avoid frequent DOM interaction\r\n * and avoid multiple checks for dynamic elments\r\n *\r\n * @returns {Array} dynamicEl\r\n */\r\n getDynamicOptions: function (items, extraProps, getCaptionFromTitleOrAlt, exThumbImage) {\r\n var dynamicElements = [];\r\n var availableDynamicOptions = __spreadArrays(defaultDynamicOptions, extraProps);\r\n [].forEach.call(items, function (item) {\r\n var dynamicEl = {};\r\n for (var i = 0; i < item.attributes.length; i++) {\r\n var attr = item.attributes[i];\r\n if (attr.specified) {\r\n var dynamicAttr = convertToData(attr.name);\r\n var label = '';\r\n if (availableDynamicOptions.indexOf(dynamicAttr) > -1) {\r\n label = dynamicAttr;\r\n }\r\n if (label) {\r\n dynamicEl[label] = attr.value;\r\n }\r\n }\r\n }\r\n var currentItem = $LG(item);\r\n var alt = currentItem.find('img').first().attr('alt');\r\n var title = currentItem.attr('title');\r\n var thumb = exThumbImage\r\n ? currentItem.attr(exThumbImage)\r\n : currentItem.find('img').first().attr('src');\r\n dynamicEl.thumb = thumb;\r\n if (getCaptionFromTitleOrAlt && !dynamicEl.subHtml) {\r\n dynamicEl.subHtml = title || alt || '';\r\n }\r\n dynamicEl.alt = alt || title || '';\r\n dynamicElements.push(dynamicEl);\r\n });\r\n return dynamicElements;\r\n },\r\n isMobile: function () {\r\n return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n },\r\n /**\r\n * @desc Check the given src is video\r\n * @param {String} src\r\n * @return {Object} video type\r\n * Ex:{ youtube : [\"//www.youtube.com/watch?v=c0asJgSyxcY\", \"c0asJgSyxcY\"] }\r\n *\r\n * @todo - this information can be moved to dynamicEl to avoid frequent calls\r\n */\r\n isVideo: function (src, isHTML5VIdeo, index) {\r\n if (!src) {\r\n if (isHTML5VIdeo) {\r\n return {\r\n html5: true,\r\n };\r\n }\r\n else {\r\n console.error('lightGallery :- data-src is not provided on slide item ' +\r\n (index + 1) +\r\n '. Please make sure the selector property is properly configured. More info - https://www.lightgalleryjs.com/demos/html-markup/');\r\n return;\r\n }\r\n }\r\n var youtube = src.match(/\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com|be-nocookie\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-\\_\\%]+)([\\&|?][\\S]*)*/i);\r\n var vimeo = src.match(/\\/\\/(?:www\\.)?(?:player\\.)?vimeo.com\\/(?:video\\/)?([0-9a-z\\-_]+)(.*)?/i);\r\n var wistia = src.match(/https?:\\/\\/(.+)?(wistia\\.com|wi\\.st)\\/(medias|embed)\\/([0-9a-z\\-_]+)(.*)/);\r\n if (youtube) {\r\n return {\r\n youtube: youtube,\r\n };\r\n }\r\n else if (vimeo) {\r\n return {\r\n vimeo: vimeo,\r\n };\r\n }\r\n else if (wistia) {\r\n return {\r\n wistia: wistia,\r\n };\r\n }\r\n },\r\n};\n\n// @ref - https://stackoverflow.com/questions/3971841/how-to-resize-images-proportionally-keeping-the-aspect-ratio\r\n// @ref - https://2ality.com/2017/04/setting-up-multi-platform-packages.html\r\n// Unique id for each gallery\r\nvar lgId = 0;\r\nvar LightGallery = /** @class */ (function () {\r\n function LightGallery(element, options) {\r\n this.lgOpened = false;\r\n this.index = 0;\r\n // lightGallery modules\r\n this.plugins = [];\r\n // false when lightGallery load first slide content;\r\n this.lGalleryOn = false;\r\n // True when a slide animation is in progress\r\n this.lgBusy = false;\r\n this.currentItemsInDom = [];\r\n // Scroll top value before lightGallery is opened\r\n this.prevScrollTop = 0;\r\n this.bodyPaddingRight = 0;\r\n this.isDummyImageRemoved = false;\r\n this.dragOrSwipeEnabled = false;\r\n this.mediaContainerPosition = {\r\n top: 0,\r\n bottom: 0,\r\n };\r\n if (!element) {\r\n return this;\r\n }\r\n lgId++;\r\n this.lgId = lgId;\r\n this.el = element;\r\n this.LGel = $LG(element);\r\n this.generateSettings(options);\r\n this.buildModules();\r\n // When using dynamic mode, ensure dynamicEl is an array\r\n if (this.settings.dynamic &&\r\n this.settings.dynamicEl !== undefined &&\r\n !Array.isArray(this.settings.dynamicEl)) {\r\n throw 'When using dynamic mode, you must also define dynamicEl as an Array.';\r\n }\r\n this.galleryItems = this.getItems();\r\n this.normalizeSettings();\r\n // Gallery items\r\n this.init();\r\n this.validateLicense();\r\n return this;\r\n }\r\n LightGallery.prototype.generateSettings = function (options) {\r\n // lightGallery settings\r\n this.settings = __assign(__assign({}, lightGalleryCoreSettings), options);\r\n if (this.settings.isMobile &&\r\n typeof this.settings.isMobile === 'function'\r\n ? this.settings.isMobile()\r\n : utils.isMobile()) {\r\n var mobileSettings = __assign(__assign({}, this.settings.mobileSettings), this.settings.mobileSettings);\r\n this.settings = __assign(__assign({}, this.settings), mobileSettings);\r\n }\r\n };\r\n LightGallery.prototype.normalizeSettings = function () {\r\n if (this.settings.slideEndAnimation) {\r\n this.settings.hideControlOnEnd = false;\r\n }\r\n if (!this.settings.closable) {\r\n this.settings.swipeToClose = false;\r\n }\r\n // And reset it on close to get the correct value next time\r\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\r\n // At the moment, Zoom from image doesn't support dynamic options\r\n // @todo add zoomFromOrigin support for dynamic images\r\n if (this.settings.dynamic) {\r\n this.zoomFromOrigin = false;\r\n }\r\n if (!this.settings.container) {\r\n this.settings.container = document.body;\r\n }\r\n // settings.preload should not be grater than $item.length\r\n this.settings.preload = Math.min(this.settings.preload, this.galleryItems.length);\r\n };\r\n LightGallery.prototype.init = function () {\r\n var _this = this;\r\n this.addSlideVideoInfo(this.galleryItems);\r\n this.buildStructure();\r\n this.LGel.trigger(lGEvents.init, {\r\n instance: this,\r\n });\r\n if (this.settings.keyPress) {\r\n this.keyPress();\r\n }\r\n setTimeout(function () {\r\n _this.enableDrag();\r\n _this.enableSwipe();\r\n _this.triggerPosterClick();\r\n }, 50);\r\n this.arrow();\r\n if (this.settings.mousewheel) {\r\n this.mousewheel();\r\n }\r\n if (!this.settings.dynamic) {\r\n this.openGalleryOnItemClick();\r\n }\r\n };\r\n LightGallery.prototype.openGalleryOnItemClick = function () {\r\n var _this = this;\r\n var _loop_1 = function (index) {\r\n var element = this_1.items[index];\r\n var $element = $LG(element);\r\n // Using different namespace for click because click event should not unbind if selector is same object('this')\r\n // @todo manage all event listners - should have namespace that represent element\r\n var uuid = lgQuery.generateUUID();\r\n $element\r\n .attr('data-lg-id', uuid)\r\n .on(\"click.lgcustom-item-\" + uuid, function (e) {\r\n e.preventDefault();\r\n var currentItemIndex = _this.settings.index || index;\r\n _this.openGallery(currentItemIndex, element);\r\n });\r\n };\r\n var this_1 = this;\r\n // Using for loop instead of using bubbling as the items can be any html element.\r\n for (var index = 0; index < this.items.length; index++) {\r\n _loop_1(index);\r\n }\r\n };\r\n /**\r\n * Module constructor\r\n * Modules are build incrementally.\r\n * Gallery should be opened only once all the modules are initialized.\r\n * use moduleBuildTimeout to make sure this\r\n */\r\n LightGallery.prototype.buildModules = function () {\r\n var _this = this;\r\n this.settings.plugins.forEach(function (plugin) {\r\n _this.plugins.push(new plugin(_this, $LG));\r\n });\r\n };\r\n LightGallery.prototype.validateLicense = function () {\r\n if (!this.settings.licenseKey) {\r\n console.error('Please provide a valid license key');\r\n }\r\n else if (this.settings.licenseKey === '0000-0000-000-0000') {\r\n console.warn(\"lightGallery: \" + this.settings.licenseKey + \" license key is not valid for production use\");\r\n }\r\n };\r\n LightGallery.prototype.getSlideItem = function (index) {\r\n return $LG(this.getSlideItemId(index));\r\n };\r\n LightGallery.prototype.getSlideItemId = function (index) {\r\n return \"#lg-item-\" + this.lgId + \"-\" + index;\r\n };\r\n LightGallery.prototype.getIdName = function (id) {\r\n return id + \"-\" + this.lgId;\r\n };\r\n LightGallery.prototype.getElementById = function (id) {\r\n return $LG(\"#\" + this.getIdName(id));\r\n };\r\n LightGallery.prototype.manageSingleSlideClassName = function () {\r\n if (this.galleryItems.length < 2) {\r\n this.outer.addClass('lg-single-item');\r\n }\r\n else {\r\n this.outer.removeClass('lg-single-item');\r\n }\r\n };\r\n LightGallery.prototype.buildStructure = function () {\r\n var _this = this;\r\n var container = this.$container && this.$container.get();\r\n if (container) {\r\n return;\r\n }\r\n var controls = '';\r\n var subHtmlCont = '';\r\n // Create controls\r\n if (this.settings.controls) {\r\n controls = \"\\n \";\r\n }\r\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\r\n subHtmlCont =\r\n '
';\r\n }\r\n var addClasses = '';\r\n if (this.settings.allowMediaOverlap) {\r\n // Do not remove space before last single quote\r\n addClasses += 'lg-media-overlap ';\r\n }\r\n var ariaLabelledby = this.settings.ariaLabelledby\r\n ? 'aria-labelledby=\"' + this.settings.ariaLabelledby + '\"'\r\n : '';\r\n var ariaDescribedby = this.settings.ariaDescribedby\r\n ? 'aria-describedby=\"' + this.settings.ariaDescribedby + '\"'\r\n : '';\r\n var containerClassName = \"lg-container \" + this.settings.addClass + \" \" + (document.body !== this.settings.container ? 'lg-inline' : '');\r\n var closeIcon = this.settings.closable && this.settings.showCloseIcon\r\n ? \"\"\r\n : '';\r\n var maximizeIcon = this.settings.showMaximizeIcon\r\n ? \"\"\r\n : '';\r\n var template = \"\\n
\\n
\\n\\n
\\n\\n
\\n
\\n
\\n \" + controls + \"\\n
\\n
\\n \" + maximizeIcon + \"\\n \" + closeIcon + \"\\n
\\n \" + (this.settings.appendSubHtmlTo === '.lg-outer'\r\n ? subHtmlCont\r\n : '') + \"\\n
\\n \" + (this.settings.appendSubHtmlTo === '.lg-sub-html'\r\n ? subHtmlCont\r\n : '') + \"\\n
\\n
\\n
\\n \";\r\n $LG(this.settings.container).append(template);\r\n if (document.body !== this.settings.container) {\r\n $LG(this.settings.container).css('position', 'relative');\r\n }\r\n this.outer = this.getElementById('lg-outer');\r\n this.$lgComponents = this.getElementById('lg-components');\r\n this.$backdrop = this.getElementById('lg-backdrop');\r\n this.$container = this.getElementById('lg-container');\r\n this.$inner = this.getElementById('lg-inner');\r\n this.$content = this.getElementById('lg-content');\r\n this.$toolbar = this.getElementById('lg-toolbar');\r\n this.$backdrop.css('transition-duration', this.settings.backdropDuration + 'ms');\r\n var outerClassNames = this.settings.mode + \" \";\r\n this.manageSingleSlideClassName();\r\n if (this.settings.enableDrag) {\r\n outerClassNames += 'lg-grab ';\r\n }\r\n this.outer.addClass(outerClassNames);\r\n this.$inner.css('transition-timing-function', this.settings.easing);\r\n this.$inner.css('transition-duration', this.settings.speed + 'ms');\r\n if (this.settings.download) {\r\n this.$toolbar.append(\"\");\r\n }\r\n this.counter();\r\n $LG(window).on(\"resize.lg.global\" + this.lgId + \" orientationchange.lg.global\" + this.lgId, function () {\r\n _this.refreshOnResize();\r\n });\r\n this.hideBars();\r\n this.manageCloseGallery();\r\n this.toggleMaximize();\r\n this.initModules();\r\n };\r\n LightGallery.prototype.refreshOnResize = function () {\r\n if (this.lgOpened) {\r\n var currentGalleryItem = this.galleryItems[this.index];\r\n var __slideVideoInfo = currentGalleryItem.__slideVideoInfo;\r\n this.mediaContainerPosition = this.getMediaContainerPosition();\r\n var _a = this.mediaContainerPosition, top_1 = _a.top, bottom = _a.bottom;\r\n this.currentImageSize = utils.getSize(this.items[this.index], this.outer, top_1 + bottom, __slideVideoInfo && this.settings.videoMaxSize);\r\n if (__slideVideoInfo) {\r\n this.resizeVideoSlide(this.index, this.currentImageSize);\r\n }\r\n if (this.zoomFromOrigin && !this.isDummyImageRemoved) {\r\n var imgStyle = this.getDummyImgStyles(this.currentImageSize);\r\n this.outer\r\n .find('.lg-current .lg-dummy-img')\r\n .first()\r\n .attr('style', imgStyle);\r\n }\r\n this.LGel.trigger(lGEvents.containerResize);\r\n }\r\n };\r\n LightGallery.prototype.resizeVideoSlide = function (index, imageSize) {\r\n var lgVideoStyle = this.getVideoContStyle(imageSize);\r\n var currentSlide = this.getSlideItem(index);\r\n currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle);\r\n };\r\n /**\r\n * Update slides dynamically.\r\n * Add, edit or delete slides dynamically when lightGallery is opened.\r\n * Modify the current gallery items and pass it via updateSlides method\r\n * @note\r\n * - Do not mutate existing lightGallery items directly.\r\n * - Always pass new list of gallery items\r\n * - You need to take care of thumbnails outside the gallery if any\r\n * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method.\r\n * @param items Gallery items\r\n * @param index After the update operation, which slide gallery should navigate to\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n *\r\n * // Adding slides dynamically\r\n * let galleryItems = [\r\n * // Access existing lightGallery items\r\n * // galleryItems are automatically generated internally from the gallery HTML markup\r\n * // or directly from galleryItems when dynamic gallery is used\r\n * ...plugin.galleryItems,\r\n * ...[\r\n * {\r\n * src: 'img/img-1.png',\r\n * thumb: 'img/thumb1.png',\r\n * },\r\n * ],\r\n * ];\r\n * plugin.updateSlides(\r\n * galleryItems,\r\n * plugin.index,\r\n * );\r\n *\r\n *\r\n * // Remove slides dynamically\r\n * galleryItems = JSON.parse(\r\n * JSON.stringify(updateSlideInstance.galleryItems),\r\n * );\r\n * galleryItems.shift();\r\n * updateSlideInstance.updateSlides(galleryItems, 1);\r\n * @see Demo\r\n */\r\n LightGallery.prototype.updateSlides = function (items, index) {\r\n if (this.index > items.length - 1) {\r\n this.index = items.length - 1;\r\n }\r\n if (items.length === 1) {\r\n this.index = 0;\r\n }\r\n if (!items.length) {\r\n this.closeGallery();\r\n return;\r\n }\r\n var currentSrc = this.galleryItems[index].src;\r\n this.galleryItems = items;\r\n this.updateControls();\r\n this.$inner.empty();\r\n this.currentItemsInDom = [];\r\n var _index = 0;\r\n // Find the current index based on source value of the slide\r\n this.galleryItems.some(function (galleryItem, itemIndex) {\r\n if (galleryItem.src === currentSrc) {\r\n _index = itemIndex;\r\n return true;\r\n }\r\n return false;\r\n });\r\n this.currentItemsInDom = this.organizeSlideItems(_index, -1);\r\n this.loadContent(_index, true);\r\n this.getSlideItem(_index).addClass('lg-current');\r\n this.index = _index;\r\n this.updateCurrentCounter(_index);\r\n this.LGel.trigger(lGEvents.updateSlides);\r\n };\r\n // Get gallery items based on multiple conditions\r\n LightGallery.prototype.getItems = function () {\r\n // Gallery items\r\n this.items = [];\r\n if (!this.settings.dynamic) {\r\n if (this.settings.selector === 'this') {\r\n this.items.push(this.el);\r\n }\r\n else if (this.settings.selector) {\r\n if (typeof this.settings.selector === 'string') {\r\n if (this.settings.selectWithin) {\r\n var selectWithin = $LG(this.settings.selectWithin);\r\n this.items = selectWithin\r\n .find(this.settings.selector)\r\n .get();\r\n }\r\n else {\r\n this.items = this.el.querySelectorAll(this.settings.selector);\r\n }\r\n }\r\n else {\r\n this.items = this.settings.selector;\r\n }\r\n }\r\n else {\r\n this.items = this.el.children;\r\n }\r\n return utils.getDynamicOptions(this.items, this.settings.extraProps, this.settings.getCaptionFromTitleOrAlt, this.settings.exThumbImage);\r\n }\r\n else {\r\n return this.settings.dynamicEl || [];\r\n }\r\n };\r\n LightGallery.prototype.shouldHideScrollbar = function () {\r\n return (this.settings.hideScrollbar &&\r\n document.body === this.settings.container);\r\n };\r\n LightGallery.prototype.hideScrollbar = function () {\r\n if (!this.shouldHideScrollbar()) {\r\n return;\r\n }\r\n this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);\r\n var bodyRect = document.documentElement.getBoundingClientRect();\r\n var scrollbarWidth = window.innerWidth - bodyRect.width;\r\n $LG(document.body).css('padding-right', scrollbarWidth + this.bodyPaddingRight + 'px');\r\n $LG(document.body).addClass('lg-overlay-open');\r\n };\r\n LightGallery.prototype.resetScrollBar = function () {\r\n if (!this.shouldHideScrollbar()) {\r\n return;\r\n }\r\n $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');\r\n $LG(document.body).removeClass('lg-overlay-open');\r\n };\r\n /**\r\n * Open lightGallery.\r\n * Open gallery with specific slide by passing index of the slide as parameter.\r\n * @category lGPublicMethods\r\n * @param {Number} index - index of the slide\r\n * @param {HTMLElement} element - Which image lightGallery should zoom from\r\n *\r\n * @example\r\n * const $dynamicGallery = document.getElementById('dynamic-gallery-demo');\r\n * const dynamicGallery = lightGallery($dynamicGallery, {\r\n * dynamic: true,\r\n * dynamicEl: [\r\n * {\r\n * src: 'img/1.jpg',\r\n * thumb: 'img/thumb-1.jpg',\r\n * subHtml: '

Image 1 title

Image 1 descriptions.

',\r\n * },\r\n * ...\r\n * ],\r\n * });\r\n * $dynamicGallery.addEventListener('click', function () {\r\n * // Starts with third item.(Optional).\r\n * // This is useful if you want use dynamic mode with\r\n * // custom thumbnails (thumbnails outside gallery),\r\n * dynamicGallery.openGallery(2);\r\n * });\r\n *\r\n */\r\n LightGallery.prototype.openGallery = function (index, element) {\r\n var _this = this;\r\n if (index === void 0) { index = this.settings.index; }\r\n // prevent accidental double execution\r\n if (this.lgOpened)\r\n return;\r\n this.lgOpened = true;\r\n this.outer.removeClass('lg-hide-items');\r\n this.hideScrollbar();\r\n // Add display block, but still has opacity 0\r\n this.$container.addClass('lg-show');\r\n var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, index);\r\n this.currentItemsInDom = itemsToBeInsertedToDom;\r\n var items = '';\r\n itemsToBeInsertedToDom.forEach(function (item) {\r\n items = items + (\"
\");\r\n });\r\n this.$inner.append(items);\r\n this.addHtml(index);\r\n var transform = '';\r\n this.mediaContainerPosition = this.getMediaContainerPosition();\r\n var _a = this.mediaContainerPosition, top = _a.top, bottom = _a.bottom;\r\n if (!this.settings.allowMediaOverlap) {\r\n this.setMediaContainerPosition(top, bottom);\r\n }\r\n var __slideVideoInfo = this.galleryItems[index].__slideVideoInfo;\r\n if (this.zoomFromOrigin && element) {\r\n this.currentImageSize = utils.getSize(element, this.outer, top + bottom, __slideVideoInfo && this.settings.videoMaxSize);\r\n transform = utils.getTransform(element, this.outer, top, bottom, this.currentImageSize);\r\n }\r\n if (!this.zoomFromOrigin || !transform) {\r\n this.outer.addClass(this.settings.startClass);\r\n this.getSlideItem(index).removeClass('lg-complete');\r\n }\r\n var timeout = this.settings.zoomFromOrigin\r\n ? 100\r\n : this.settings.backdropDuration;\r\n setTimeout(function () {\r\n _this.outer.addClass('lg-components-open');\r\n }, timeout);\r\n this.index = index;\r\n this.LGel.trigger(lGEvents.beforeOpen);\r\n // add class lg-current to remove initial transition\r\n this.getSlideItem(index).addClass('lg-current');\r\n this.lGalleryOn = false;\r\n // Store the current scroll top value to scroll back after closing the gallery..\r\n this.prevScrollTop = $LG(window).scrollTop();\r\n setTimeout(function () {\r\n // Need to check both zoomFromOrigin and transform values as we need to set set the\r\n // default opening animation if user missed to add the lg-size attribute\r\n if (_this.zoomFromOrigin && transform) {\r\n var currentSlide_1 = _this.getSlideItem(index);\r\n currentSlide_1.css('transform', transform);\r\n setTimeout(function () {\r\n currentSlide_1\r\n .addClass('lg-start-progress lg-start-end-progress')\r\n .css('transition-duration', _this.settings.startAnimationDuration + 'ms');\r\n _this.outer.addClass('lg-zoom-from-image');\r\n });\r\n setTimeout(function () {\r\n currentSlide_1.css('transform', 'translate3d(0, 0, 0)');\r\n }, 100);\r\n }\r\n setTimeout(function () {\r\n _this.$backdrop.addClass('in');\r\n _this.$container.addClass('lg-show-in');\r\n }, 10);\r\n setTimeout(function () {\r\n if (_this.settings.trapFocus &&\r\n document.body === _this.settings.container) {\r\n _this.trapFocus();\r\n }\r\n }, _this.settings.backdropDuration + 50);\r\n // lg-visible class resets gallery opacity to 1\r\n if (!_this.zoomFromOrigin || !transform) {\r\n setTimeout(function () {\r\n _this.outer.addClass('lg-visible');\r\n }, _this.settings.backdropDuration);\r\n }\r\n // initiate slide function\r\n _this.slide(index, false, false, false);\r\n _this.LGel.trigger(lGEvents.afterOpen);\r\n });\r\n if (document.body === this.settings.container) {\r\n $LG('html').addClass('lg-on');\r\n }\r\n };\r\n /**\r\n * Note - Changing the position of the media on every slide transition creates a flickering effect.\r\n * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption.\r\n * if you have dynamic captions for each media,\r\n * you can provide an appropriate height for the captions via allowMediaOverlap option\r\n */\r\n LightGallery.prototype.getMediaContainerPosition = function () {\r\n if (this.settings.allowMediaOverlap) {\r\n return {\r\n top: 0,\r\n bottom: 0,\r\n };\r\n }\r\n var top = this.$toolbar.get().clientHeight || 0;\r\n var subHtml = this.outer.find('.lg-components .lg-sub-html').get();\r\n var captionHeight = this.settings.defaultCaptionHeight ||\r\n (subHtml && subHtml.clientHeight) ||\r\n 0;\r\n var thumbContainer = this.outer.find('.lg-thumb-outer').get();\r\n var thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0;\r\n var bottom = thumbHeight + captionHeight;\r\n return {\r\n top: top,\r\n bottom: bottom,\r\n };\r\n };\r\n LightGallery.prototype.setMediaContainerPosition = function (top, bottom) {\r\n if (top === void 0) { top = 0; }\r\n if (bottom === void 0) { bottom = 0; }\r\n this.$content.css('top', top + 'px').css('bottom', bottom + 'px');\r\n };\r\n LightGallery.prototype.hideBars = function () {\r\n var _this = this;\r\n // Hide controllers if mouse doesn't move for some period\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-hide-items');\r\n if (_this.settings.hideBarsDelay > 0) {\r\n _this.outer.on('mousemove.lg click.lg touchstart.lg', function () {\r\n _this.outer.removeClass('lg-hide-items');\r\n clearTimeout(_this.hideBarTimeout);\r\n // Timeout will be cleared on each slide movement also\r\n _this.hideBarTimeout = setTimeout(function () {\r\n _this.outer.addClass('lg-hide-items');\r\n }, _this.settings.hideBarsDelay);\r\n });\r\n _this.outer.trigger('mousemove.lg');\r\n }\r\n }, this.settings.showBarsAfter);\r\n };\r\n LightGallery.prototype.initPictureFill = function ($img) {\r\n if (this.settings.supportLegacyBrowser) {\r\n try {\r\n picturefill({\r\n elements: [$img.get()],\r\n });\r\n }\r\n catch (e) {\r\n console.warn('lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.');\r\n }\r\n }\r\n };\r\n /**\r\n * @desc Create image counter\r\n * Ex: 1/10\r\n */\r\n LightGallery.prototype.counter = function () {\r\n if (this.settings.counter) {\r\n var counterHtml = \"
\\n \" + (this.index + 1) + \" /\\n \" + this.galleryItems.length + \"
\";\r\n this.outer.find(this.settings.appendCounterTo).append(counterHtml);\r\n }\r\n };\r\n /**\r\n * @desc add sub-html into the slide\r\n * @param {Number} index - index of the slide\r\n */\r\n LightGallery.prototype.addHtml = function (index) {\r\n var subHtml;\r\n var subHtmlUrl;\r\n if (this.galleryItems[index].subHtmlUrl) {\r\n subHtmlUrl = this.galleryItems[index].subHtmlUrl;\r\n }\r\n else {\r\n subHtml = this.galleryItems[index].subHtml;\r\n }\r\n if (!subHtmlUrl) {\r\n if (subHtml) {\r\n // get first letter of sub-html\r\n // if first letter starts with . or # get the html form the jQuery object\r\n var fL = subHtml.substring(0, 1);\r\n if (fL === '.' || fL === '#') {\r\n if (this.settings.subHtmlSelectorRelative &&\r\n !this.settings.dynamic) {\r\n subHtml = $LG(this.items)\r\n .eq(index)\r\n .find(subHtml)\r\n .first()\r\n .html();\r\n }\r\n else {\r\n subHtml = $LG(subHtml).first().html();\r\n }\r\n }\r\n }\r\n else {\r\n subHtml = '';\r\n }\r\n }\r\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\r\n if (subHtmlUrl) {\r\n this.outer.find('.lg-sub-html').load(subHtmlUrl);\r\n }\r\n else {\r\n this.outer.find('.lg-sub-html').html(subHtml);\r\n }\r\n }\r\n else {\r\n var currentSlide = $LG(this.getSlideItemId(index));\r\n if (subHtmlUrl) {\r\n currentSlide.load(subHtmlUrl);\r\n }\r\n else {\r\n currentSlide.append(\"
\" + subHtml + \"
\");\r\n }\r\n }\r\n // Add lg-empty-html class if title doesn't exist\r\n if (typeof subHtml !== 'undefined' && subHtml !== null) {\r\n if (subHtml === '') {\r\n this.outer\r\n .find(this.settings.appendSubHtmlTo)\r\n .addClass('lg-empty-html');\r\n }\r\n else {\r\n this.outer\r\n .find(this.settings.appendSubHtmlTo)\r\n .removeClass('lg-empty-html');\r\n }\r\n }\r\n this.LGel.trigger(lGEvents.afterAppendSubHtml, {\r\n index: index,\r\n });\r\n };\r\n /**\r\n * @desc Preload slides\r\n * @param {Number} index - index of the slide\r\n * @todo preload not working for the first slide, Also, should work for the first and last slide as well\r\n */\r\n LightGallery.prototype.preload = function (index) {\r\n for (var i = 1; i <= this.settings.preload; i++) {\r\n if (i >= this.galleryItems.length - index) {\r\n break;\r\n }\r\n this.loadContent(index + i, false);\r\n }\r\n for (var j = 1; j <= this.settings.preload; j++) {\r\n if (index - j < 0) {\r\n break;\r\n }\r\n this.loadContent(index - j, false);\r\n }\r\n };\r\n LightGallery.prototype.getDummyImgStyles = function (imageSize) {\r\n if (!imageSize)\r\n return '';\r\n return \"width:\" + imageSize.width + \"px;\\n margin-left: -\" + imageSize.width / 2 + \"px;\\n margin-top: -\" + imageSize.height / 2 + \"px;\\n height:\" + imageSize.height + \"px\";\r\n };\r\n LightGallery.prototype.getVideoContStyle = function (imageSize) {\r\n if (!imageSize)\r\n return '';\r\n return \"width:\" + imageSize.width + \"px;\\n height:\" + imageSize.height + \"px\";\r\n };\r\n LightGallery.prototype.getDummyImageContent = function ($currentSlide, index, alt) {\r\n var $currentItem;\r\n if (!this.settings.dynamic) {\r\n $currentItem = $LG(this.items).eq(index);\r\n }\r\n if ($currentItem) {\r\n var _dummyImgSrc = void 0;\r\n if (!this.settings.exThumbImage) {\r\n _dummyImgSrc = $currentItem.find('img').first().attr('src');\r\n }\r\n else {\r\n _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage);\r\n }\r\n if (!_dummyImgSrc)\r\n return '';\r\n var imgStyle = this.getDummyImgStyles(this.currentImageSize);\r\n var dummyImgContent = \"\";\r\n $currentSlide.addClass('lg-first-slide');\r\n this.outer.addClass('lg-first-slide-loading');\r\n return dummyImgContent;\r\n }\r\n return '';\r\n };\r\n LightGallery.prototype.setImgMarkup = function (src, $currentSlide, index) {\r\n var currentGalleryItem = this.galleryItems[index];\r\n var alt = currentGalleryItem.alt, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources;\r\n // Use the thumbnail as dummy image which will be resized to actual image size and\r\n // displayed on top of actual image\r\n var imgContent = '';\r\n var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n if (this.isFirstSlideWithZoomAnimation()) {\r\n imgContent = this.getDummyImageContent($currentSlide, index, altAttr);\r\n }\r\n else {\r\n imgContent = utils.getImgMarkup(index, src, altAttr, srcset, sizes, sources);\r\n }\r\n var imgMarkup = \" \" + imgContent + \"\";\r\n $currentSlide.prepend(imgMarkup);\r\n };\r\n LightGallery.prototype.onSlideObjectLoad = function ($slide, isHTML5VideoWithoutPoster, onLoad, onError) {\r\n var mediaObject = $slide.find('.lg-object').first();\r\n if (utils.isImageLoaded(mediaObject.get()) ||\r\n isHTML5VideoWithoutPoster) {\r\n onLoad();\r\n }\r\n else {\r\n mediaObject.on('load.lg error.lg', function () {\r\n onLoad && onLoad();\r\n });\r\n mediaObject.on('error.lg', function () {\r\n onError && onError();\r\n });\r\n }\r\n };\r\n /**\r\n *\r\n * @param $el Current slide item\r\n * @param index\r\n * @param delay Delay is 0 except first time\r\n * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin\r\n * @param isFirstSlide\r\n */\r\n LightGallery.prototype.onLgObjectLoad = function (currentSlide, index, delay, speed, isFirstSlide, isHTML5VideoWithoutPoster) {\r\n var _this = this;\r\n this.onSlideObjectLoad(currentSlide, isHTML5VideoWithoutPoster, function () {\r\n _this.triggerSlideItemLoad(currentSlide, index, delay, speed, isFirstSlide);\r\n }, function () {\r\n currentSlide.addClass('lg-complete lg-complete_');\r\n currentSlide.html('Oops... Failed to load content...');\r\n });\r\n };\r\n LightGallery.prototype.triggerSlideItemLoad = function ($currentSlide, index, delay, speed, isFirstSlide) {\r\n var _this = this;\r\n var currentGalleryItem = this.galleryItems[index];\r\n // Adding delay for video slides without poster for better performance and user experience\r\n // Videos should start playing once once the gallery is completely loaded\r\n var _speed = isFirstSlide &&\r\n this.getSlideType(currentGalleryItem) === 'video' &&\r\n !currentGalleryItem.poster\r\n ? speed\r\n : 0;\r\n setTimeout(function () {\r\n $currentSlide.addClass('lg-complete lg-complete_');\r\n _this.LGel.trigger(lGEvents.slideItemLoad, {\r\n index: index,\r\n delay: delay || 0,\r\n isFirstSlide: isFirstSlide,\r\n });\r\n }, _speed);\r\n };\r\n LightGallery.prototype.isFirstSlideWithZoomAnimation = function () {\r\n return !!(!this.lGalleryOn &&\r\n this.zoomFromOrigin &&\r\n this.currentImageSize);\r\n };\r\n // Add video slideInfo\r\n LightGallery.prototype.addSlideVideoInfo = function (items) {\r\n var _this = this;\r\n items.forEach(function (element, index) {\r\n element.__slideVideoInfo = utils.isVideo(element.src, !!element.video, index);\r\n if (element.__slideVideoInfo &&\r\n _this.settings.loadYouTubePoster &&\r\n !element.poster &&\r\n element.__slideVideoInfo.youtube) {\r\n element.poster = \"//img.youtube.com/vi/\" + element.__slideVideoInfo.youtube[1] + \"/maxresdefault.jpg\";\r\n }\r\n });\r\n };\r\n /**\r\n * Load slide content into slide.\r\n * This is used to load content into slides that is not visible too\r\n * @param {Number} index - index of the slide.\r\n * @param {Boolean} rec - if true call loadcontent() function again.\r\n */\r\n LightGallery.prototype.loadContent = function (index, rec) {\r\n var _this = this;\r\n var currentGalleryItem = this.galleryItems[index];\r\n var $currentSlide = $LG(this.getSlideItemId(index));\r\n var poster = currentGalleryItem.poster, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources;\r\n var src = currentGalleryItem.src;\r\n var video = currentGalleryItem.video;\r\n var _html5Video = video && typeof video === 'string' ? JSON.parse(video) : video;\r\n if (currentGalleryItem.responsive) {\r\n var srcDyItms = currentGalleryItem.responsive.split(',');\r\n src = utils.getResponsiveSrc(srcDyItms) || src;\r\n }\r\n var videoInfo = currentGalleryItem.__slideVideoInfo;\r\n var lgVideoStyle = '';\r\n var iframe = !!currentGalleryItem.iframe;\r\n var isFirstSlide = !this.lGalleryOn;\r\n // delay for adding complete class. it is 0 except first time.\r\n var delay = 0;\r\n if (isFirstSlide) {\r\n if (this.zoomFromOrigin && this.currentImageSize) {\r\n delay = this.settings.startAnimationDuration + 10;\r\n }\r\n else {\r\n delay = this.settings.backdropDuration + 10;\r\n }\r\n }\r\n if (!$currentSlide.hasClass('lg-loaded')) {\r\n if (videoInfo) {\r\n var _a = this.mediaContainerPosition, top_2 = _a.top, bottom = _a.bottom;\r\n var videoSize = utils.getSize(this.items[index], this.outer, top_2 + bottom, videoInfo && this.settings.videoMaxSize);\r\n lgVideoStyle = this.getVideoContStyle(videoSize);\r\n }\r\n if (iframe) {\r\n var markup = utils.getIframeMarkup(this.settings.iframeWidth, this.settings.iframeHeight, this.settings.iframeMaxWidth, this.settings.iframeMaxHeight, src, currentGalleryItem.iframeTitle);\r\n $currentSlide.prepend(markup);\r\n }\r\n else if (poster) {\r\n var dummyImg = '';\r\n var hasStartAnimation = isFirstSlide &&\r\n this.zoomFromOrigin &&\r\n this.currentImageSize;\r\n if (hasStartAnimation) {\r\n dummyImg = this.getDummyImageContent($currentSlide, index, '');\r\n }\r\n var markup = utils.getVideoPosterMarkup(poster, dummyImg || '', lgVideoStyle, this.settings.strings['playVideo'], videoInfo);\r\n $currentSlide.prepend(markup);\r\n }\r\n else if (videoInfo) {\r\n var markup = \"
\";\r\n $currentSlide.prepend(markup);\r\n }\r\n else {\r\n this.setImgMarkup(src, $currentSlide, index);\r\n if (srcset || sources) {\r\n var $img = $currentSlide.find('.lg-object');\r\n this.initPictureFill($img);\r\n }\r\n }\r\n if (poster || videoInfo) {\r\n this.LGel.trigger(lGEvents.hasVideo, {\r\n index: index,\r\n src: src,\r\n html5Video: _html5Video,\r\n hasPoster: !!poster,\r\n });\r\n }\r\n this.LGel.trigger(lGEvents.afterAppendSlide, { index: index });\r\n if (this.lGalleryOn &&\r\n this.settings.appendSubHtmlTo === '.lg-item') {\r\n this.addHtml(index);\r\n }\r\n }\r\n // For first time add some delay for displaying the start animation.\r\n var _speed = 0;\r\n // Do not change the delay value because it is required for zoom plugin.\r\n // If gallery opened from direct url (hash) speed value should be 0\r\n if (delay && !$LG(document.body).hasClass('lg-from-hash')) {\r\n _speed = delay;\r\n }\r\n // Only for first slide and zoomFromOrigin is enabled\r\n if (this.isFirstSlideWithZoomAnimation()) {\r\n setTimeout(function () {\r\n $currentSlide\r\n .removeClass('lg-start-end-progress lg-start-progress')\r\n .removeAttr('style');\r\n }, this.settings.startAnimationDuration + 100);\r\n if (!$currentSlide.hasClass('lg-loaded')) {\r\n setTimeout(function () {\r\n if (_this.getSlideType(currentGalleryItem) === 'image') {\r\n var alt = currentGalleryItem.alt;\r\n var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n $currentSlide\r\n .find('.lg-img-wrap')\r\n .append(utils.getImgMarkup(index, src, altAttr, srcset, sizes, currentGalleryItem.sources));\r\n if (srcset || sources) {\r\n var $img = $currentSlide.find('.lg-object');\r\n _this.initPictureFill($img);\r\n }\r\n }\r\n if (_this.getSlideType(currentGalleryItem) === 'image' ||\r\n (_this.getSlideType(currentGalleryItem) === 'video' &&\r\n poster)) {\r\n _this.onLgObjectLoad($currentSlide, index, delay, _speed, true, false);\r\n // load remaining slides once the slide is completely loaded\r\n _this.onSlideObjectLoad($currentSlide, !!(videoInfo && videoInfo.html5 && !poster), function () {\r\n _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed);\r\n }, function () {\r\n _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed);\r\n });\r\n }\r\n }, this.settings.startAnimationDuration + 100);\r\n }\r\n }\r\n // SLide content has been added to dom\r\n $currentSlide.addClass('lg-loaded');\r\n if (!this.isFirstSlideWithZoomAnimation() ||\r\n (this.getSlideType(currentGalleryItem) === 'video' && !poster)) {\r\n this.onLgObjectLoad($currentSlide, index, delay, _speed, isFirstSlide, !!(videoInfo && videoInfo.html5 && !poster));\r\n }\r\n // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling\r\n if ((!this.zoomFromOrigin || !this.currentImageSize) &&\r\n $currentSlide.hasClass('lg-complete_') &&\r\n !this.lGalleryOn) {\r\n setTimeout(function () {\r\n $currentSlide.addClass('lg-complete');\r\n }, this.settings.backdropDuration);\r\n }\r\n // Content loaded\r\n // Need to set lGalleryOn before calling preload function\r\n this.lGalleryOn = true;\r\n if (rec === true) {\r\n if (!$currentSlide.hasClass('lg-complete_')) {\r\n $currentSlide\r\n .find('.lg-object')\r\n .first()\r\n .on('load.lg error.lg', function () {\r\n _this.preload(index);\r\n });\r\n }\r\n else {\r\n this.preload(index);\r\n }\r\n }\r\n };\r\n /**\r\n * @desc Remove dummy image content and load next slides\r\n * Called only for the first time if zoomFromOrigin animation is enabled\r\n * @param index\r\n * @param $currentSlide\r\n * @param speed\r\n */\r\n LightGallery.prototype.loadContentOnFirstSlideLoad = function (index, $currentSlide, speed) {\r\n var _this = this;\r\n setTimeout(function () {\r\n $currentSlide.find('.lg-dummy-img').remove();\r\n $currentSlide.removeClass('lg-first-slide');\r\n _this.outer.removeClass('lg-first-slide-loading');\r\n _this.isDummyImageRemoved = true;\r\n _this.preload(index);\r\n }, speed + 300);\r\n };\r\n LightGallery.prototype.getItemsToBeInsertedToDom = function (index, prevIndex, numberOfItems) {\r\n var _this = this;\r\n if (numberOfItems === void 0) { numberOfItems = 0; }\r\n var itemsToBeInsertedToDom = [];\r\n // Minimum 2 items should be there\r\n var possibleNumberOfItems = Math.max(numberOfItems, 3);\r\n possibleNumberOfItems = Math.min(possibleNumberOfItems, this.galleryItems.length);\r\n var prevIndexItem = \"lg-item-\" + this.lgId + \"-\" + prevIndex;\r\n if (this.galleryItems.length <= 3) {\r\n this.galleryItems.forEach(function (_element, index) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + _this.lgId + \"-\" + index);\r\n });\r\n return itemsToBeInsertedToDom;\r\n }\r\n if (index < (this.galleryItems.length - 1) / 2) {\r\n for (var idx = index; idx > index - possibleNumberOfItems / 2 && idx >= 0; idx--) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + idx);\r\n }\r\n var numberOfExistingItems = itemsToBeInsertedToDom.length;\r\n for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (index + idx + 1));\r\n }\r\n }\r\n else {\r\n for (var idx = index; idx <= this.galleryItems.length - 1 &&\r\n idx < index + possibleNumberOfItems / 2; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + idx);\r\n }\r\n var numberOfExistingItems = itemsToBeInsertedToDom.length;\r\n for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (index - idx - 1));\r\n }\r\n }\r\n if (this.settings.loop) {\r\n if (index === this.galleryItems.length - 1) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + 0);\r\n }\r\n else if (index === 0) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (this.galleryItems.length - 1));\r\n }\r\n }\r\n if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + prevIndex);\r\n }\r\n return itemsToBeInsertedToDom;\r\n };\r\n LightGallery.prototype.organizeSlideItems = function (index, prevIndex) {\r\n var _this = this;\r\n var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, prevIndex, this.settings.numberOfSlideItemsInDom);\r\n itemsToBeInsertedToDom.forEach(function (item) {\r\n if (_this.currentItemsInDom.indexOf(item) === -1) {\r\n _this.$inner.append(\"
\");\r\n }\r\n });\r\n this.currentItemsInDom.forEach(function (item) {\r\n if (itemsToBeInsertedToDom.indexOf(item) === -1) {\r\n $LG(\"#\" + item).remove();\r\n }\r\n });\r\n return itemsToBeInsertedToDom;\r\n };\r\n /**\r\n * Get previous index of the slide\r\n */\r\n LightGallery.prototype.getPreviousSlideIndex = function () {\r\n var prevIndex = 0;\r\n try {\r\n var currentItemId = this.outer\r\n .find('.lg-current')\r\n .first()\r\n .attr('id');\r\n prevIndex = parseInt(currentItemId.split('-')[3]) || 0;\r\n }\r\n catch (error) {\r\n prevIndex = 0;\r\n }\r\n return prevIndex;\r\n };\r\n LightGallery.prototype.setDownloadValue = function (index) {\r\n if (this.settings.download) {\r\n var currentGalleryItem = this.galleryItems[index];\r\n var hideDownloadBtn = currentGalleryItem.downloadUrl === false ||\r\n currentGalleryItem.downloadUrl === 'false';\r\n if (hideDownloadBtn) {\r\n this.outer.addClass('lg-hide-download');\r\n }\r\n else {\r\n var $download = this.getElementById('lg-download');\r\n this.outer.removeClass('lg-hide-download');\r\n $download.attr('href', currentGalleryItem.downloadUrl ||\r\n currentGalleryItem.src);\r\n if (currentGalleryItem.download) {\r\n $download.attr('download', currentGalleryItem.download);\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.makeSlideAnimation = function (direction, currentSlideItem, previousSlideItem) {\r\n var _this = this;\r\n if (this.lGalleryOn) {\r\n previousSlideItem.addClass('lg-slide-progress');\r\n }\r\n setTimeout(function () {\r\n // remove all transitions\r\n _this.outer.addClass('lg-no-trans');\r\n _this.outer\r\n .find('.lg-item')\r\n .removeClass('lg-prev-slide lg-next-slide');\r\n if (direction === 'prev') {\r\n //prevslide\r\n currentSlideItem.addClass('lg-prev-slide');\r\n previousSlideItem.addClass('lg-next-slide');\r\n }\r\n else {\r\n // next slide\r\n currentSlideItem.addClass('lg-next-slide');\r\n previousSlideItem.addClass('lg-prev-slide');\r\n }\r\n // give 50 ms for browser to add/remove class\r\n setTimeout(function () {\r\n _this.outer.find('.lg-item').removeClass('lg-current');\r\n currentSlideItem.addClass('lg-current');\r\n // reset all transitions\r\n _this.outer.removeClass('lg-no-trans');\r\n }, 50);\r\n }, this.lGalleryOn ? this.settings.slideDelay : 0);\r\n };\r\n /**\r\n * Goto a specific slide.\r\n * @param {Number} index - index of the slide\r\n * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag\r\n * @param {Boolean} fromThumb - true if slide function called via thumbnail click\r\n * @param {String} direction - Direction of the slide(next/prev)\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * // to go to 3rd slide\r\n * plugin.slide(2);\r\n *\r\n */\r\n LightGallery.prototype.slide = function (index, fromTouch, fromThumb, direction) {\r\n var _this = this;\r\n var prevIndex = this.getPreviousSlideIndex();\r\n this.currentItemsInDom = this.organizeSlideItems(index, prevIndex);\r\n // Prevent multiple call, Required for hsh plugin\r\n if (this.lGalleryOn && prevIndex === index) {\r\n return;\r\n }\r\n var numberOfGalleryItems = this.galleryItems.length;\r\n if (!this.lgBusy) {\r\n if (this.settings.counter) {\r\n this.updateCurrentCounter(index);\r\n }\r\n var currentSlideItem = this.getSlideItem(index);\r\n var previousSlideItem_1 = this.getSlideItem(prevIndex);\r\n var currentGalleryItem = this.galleryItems[index];\r\n var videoInfo = currentGalleryItem.__slideVideoInfo;\r\n this.outer.attr('data-lg-slide-type', this.getSlideType(currentGalleryItem));\r\n this.setDownloadValue(index);\r\n if (videoInfo) {\r\n var _a = this.mediaContainerPosition, top_3 = _a.top, bottom = _a.bottom;\r\n var videoSize = utils.getSize(this.items[index], this.outer, top_3 + bottom, videoInfo && this.settings.videoMaxSize);\r\n this.resizeVideoSlide(index, videoSize);\r\n }\r\n this.LGel.trigger(lGEvents.beforeSlide, {\r\n prevIndex: prevIndex,\r\n index: index,\r\n fromTouch: !!fromTouch,\r\n fromThumb: !!fromThumb,\r\n });\r\n this.lgBusy = true;\r\n clearTimeout(this.hideBarTimeout);\r\n this.arrowDisable(index);\r\n if (!direction) {\r\n if (index < prevIndex) {\r\n direction = 'prev';\r\n }\r\n else if (index > prevIndex) {\r\n direction = 'next';\r\n }\r\n }\r\n if (!fromTouch) {\r\n this.makeSlideAnimation(direction, currentSlideItem, previousSlideItem_1);\r\n }\r\n else {\r\n this.outer\r\n .find('.lg-item')\r\n .removeClass('lg-prev-slide lg-current lg-next-slide');\r\n var touchPrev = void 0;\r\n var touchNext = void 0;\r\n if (numberOfGalleryItems > 2) {\r\n touchPrev = index - 1;\r\n touchNext = index + 1;\r\n if (index === 0 && prevIndex === numberOfGalleryItems - 1) {\r\n // next slide\r\n touchNext = 0;\r\n touchPrev = numberOfGalleryItems - 1;\r\n }\r\n else if (index === numberOfGalleryItems - 1 &&\r\n prevIndex === 0) {\r\n // prev slide\r\n touchNext = 0;\r\n touchPrev = numberOfGalleryItems - 1;\r\n }\r\n }\r\n else {\r\n touchPrev = 0;\r\n touchNext = 1;\r\n }\r\n if (direction === 'prev') {\r\n this.getSlideItem(touchNext).addClass('lg-next-slide');\r\n }\r\n else {\r\n this.getSlideItem(touchPrev).addClass('lg-prev-slide');\r\n }\r\n currentSlideItem.addClass('lg-current');\r\n }\r\n // Do not put load content in set timeout as it needs to load immediately when the gallery is opened\r\n if (!this.lGalleryOn) {\r\n this.loadContent(index, true);\r\n }\r\n else {\r\n setTimeout(function () {\r\n _this.loadContent(index, true);\r\n // Add title if this.settings.appendSubHtmlTo === lg-sub-html\r\n if (_this.settings.appendSubHtmlTo !== '.lg-item') {\r\n _this.addHtml(index);\r\n }\r\n }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay));\r\n }\r\n setTimeout(function () {\r\n _this.lgBusy = false;\r\n previousSlideItem_1.removeClass('lg-slide-progress');\r\n _this.LGel.trigger(lGEvents.afterSlide, {\r\n prevIndex: prevIndex,\r\n index: index,\r\n fromTouch: fromTouch,\r\n fromThumb: fromThumb,\r\n });\r\n }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay));\r\n }\r\n this.index = index;\r\n };\r\n LightGallery.prototype.updateCurrentCounter = function (index) {\r\n this.getElementById('lg-counter-current').html(index + 1 + '');\r\n };\r\n LightGallery.prototype.updateCounterTotal = function () {\r\n this.getElementById('lg-counter-all').html(this.galleryItems.length + '');\r\n };\r\n LightGallery.prototype.getSlideType = function (item) {\r\n if (item.__slideVideoInfo) {\r\n return 'video';\r\n }\r\n else if (item.iframe) {\r\n return 'iframe';\r\n }\r\n else {\r\n return 'image';\r\n }\r\n };\r\n LightGallery.prototype.touchMove = function (startCoords, endCoords, e) {\r\n var distanceX = endCoords.pageX - startCoords.pageX;\r\n var distanceY = endCoords.pageY - startCoords.pageY;\r\n var allowSwipe = false;\r\n if (this.swipeDirection) {\r\n allowSwipe = true;\r\n }\r\n else {\r\n if (Math.abs(distanceX) > 15) {\r\n this.swipeDirection = 'horizontal';\r\n allowSwipe = true;\r\n }\r\n else if (Math.abs(distanceY) > 15) {\r\n this.swipeDirection = 'vertical';\r\n allowSwipe = true;\r\n }\r\n }\r\n if (!allowSwipe) {\r\n return;\r\n }\r\n var $currentSlide = this.getSlideItem(this.index);\r\n if (this.swipeDirection === 'horizontal') {\r\n e === null || e === void 0 ? void 0 : e.preventDefault();\r\n // reset opacity and transition duration\r\n this.outer.addClass('lg-dragging');\r\n // move current slide\r\n this.setTranslate($currentSlide, distanceX, 0);\r\n // move next and prev slide with current slide\r\n var width = $currentSlide.get().offsetWidth;\r\n var slideWidthAmount = (width * 15) / 100;\r\n var gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100);\r\n this.setTranslate(this.outer.find('.lg-prev-slide').first(), -width + distanceX - gutter, 0);\r\n this.setTranslate(this.outer.find('.lg-next-slide').first(), width + distanceX + gutter, 0);\r\n }\r\n else if (this.swipeDirection === 'vertical') {\r\n if (this.settings.swipeToClose) {\r\n e === null || e === void 0 ? void 0 : e.preventDefault();\r\n this.$container.addClass('lg-dragging-vertical');\r\n var opacity = 1 - Math.abs(distanceY) / window.innerHeight;\r\n this.$backdrop.css('opacity', opacity);\r\n var scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2);\r\n this.setTranslate($currentSlide, 0, distanceY, scale, scale);\r\n if (Math.abs(distanceY) > 100) {\r\n this.outer\r\n .addClass('lg-hide-items')\r\n .removeClass('lg-components-open');\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.touchEnd = function (endCoords, startCoords, event) {\r\n var _this = this;\r\n var distance;\r\n // keep slide animation for any mode while dragg/swipe\r\n if (this.settings.mode !== 'lg-slide') {\r\n this.outer.addClass('lg-slide');\r\n }\r\n // set transition duration\r\n setTimeout(function () {\r\n _this.$container.removeClass('lg-dragging-vertical');\r\n _this.outer\r\n .removeClass('lg-dragging lg-hide-items')\r\n .addClass('lg-components-open');\r\n var triggerClick = true;\r\n if (_this.swipeDirection === 'horizontal') {\r\n distance = endCoords.pageX - startCoords.pageX;\r\n var distanceAbs = Math.abs(endCoords.pageX - startCoords.pageX);\r\n if (distance < 0 &&\r\n distanceAbs > _this.settings.swipeThreshold) {\r\n _this.goToNextSlide(true);\r\n triggerClick = false;\r\n }\r\n else if (distance > 0 &&\r\n distanceAbs > _this.settings.swipeThreshold) {\r\n _this.goToPrevSlide(true);\r\n triggerClick = false;\r\n }\r\n }\r\n else if (_this.swipeDirection === 'vertical') {\r\n distance = Math.abs(endCoords.pageY - startCoords.pageY);\r\n if (_this.settings.closable &&\r\n _this.settings.swipeToClose &&\r\n distance > 100) {\r\n _this.closeGallery();\r\n return;\r\n }\r\n else {\r\n _this.$backdrop.css('opacity', 1);\r\n }\r\n }\r\n _this.outer.find('.lg-item').removeAttr('style');\r\n if (triggerClick &&\r\n Math.abs(endCoords.pageX - startCoords.pageX) < 5) {\r\n // Trigger click if distance is less than 5 pix\r\n var target = $LG(event.target);\r\n if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n }\r\n _this.swipeDirection = undefined;\r\n });\r\n // remove slide class once drag/swipe is completed if mode is not slide\r\n setTimeout(function () {\r\n if (!_this.outer.hasClass('lg-dragging') &&\r\n _this.settings.mode !== 'lg-slide') {\r\n _this.outer.removeClass('lg-slide');\r\n }\r\n }, this.settings.speed + 100);\r\n };\r\n LightGallery.prototype.enableSwipe = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isMoved = false;\r\n var isSwiping = false;\r\n if (this.settings.enableSwipe) {\r\n this.$inner.on('touchstart.lg', function (e) {\r\n _this.dragOrSwipeEnabled = true;\r\n var $item = _this.getSlideItem(_this.index);\r\n if (($LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) &&\r\n !_this.outer.hasClass('lg-zoomed') &&\r\n !_this.lgBusy &&\r\n e.touches.length === 1) {\r\n isSwiping = true;\r\n _this.touchAction = 'swipe';\r\n _this.manageSwipeClass();\r\n startCoords = {\r\n pageX: e.touches[0].pageX,\r\n pageY: e.touches[0].pageY,\r\n };\r\n }\r\n });\r\n this.$inner.on('touchmove.lg', function (e) {\r\n if (isSwiping &&\r\n _this.touchAction === 'swipe' &&\r\n e.touches.length === 1) {\r\n endCoords = {\r\n pageX: e.touches[0].pageX,\r\n pageY: e.touches[0].pageY,\r\n };\r\n _this.touchMove(startCoords, endCoords, e);\r\n isMoved = true;\r\n }\r\n });\r\n this.$inner.on('touchend.lg', function (event) {\r\n if (_this.touchAction === 'swipe') {\r\n if (isMoved) {\r\n isMoved = false;\r\n _this.touchEnd(endCoords, startCoords, event);\r\n }\r\n else if (isSwiping) {\r\n var target = $LG(event.target);\r\n if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n }\r\n _this.touchAction = undefined;\r\n isSwiping = false;\r\n }\r\n });\r\n }\r\n };\r\n LightGallery.prototype.enableDrag = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isDraging = false;\r\n var isMoved = false;\r\n if (this.settings.enableDrag) {\r\n this.outer.on('mousedown.lg', function (e) {\r\n _this.dragOrSwipeEnabled = true;\r\n var $item = _this.getSlideItem(_this.index);\r\n if ($LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) {\r\n if (!_this.outer.hasClass('lg-zoomed') && !_this.lgBusy) {\r\n e.preventDefault();\r\n if (!_this.lgBusy) {\r\n _this.manageSwipeClass();\r\n startCoords = {\r\n pageX: e.pageX,\r\n pageY: e.pageY,\r\n };\r\n isDraging = true;\r\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\r\n _this.outer.get().scrollLeft += 1;\r\n _this.outer.get().scrollLeft -= 1;\r\n // *\r\n _this.outer\r\n .removeClass('lg-grab')\r\n .addClass('lg-grabbing');\r\n _this.LGel.trigger(lGEvents.dragStart);\r\n }\r\n }\r\n }\r\n });\r\n $LG(window).on(\"mousemove.lg.global\" + this.lgId, function (e) {\r\n if (isDraging && _this.lgOpened) {\r\n isMoved = true;\r\n endCoords = {\r\n pageX: e.pageX,\r\n pageY: e.pageY,\r\n };\r\n _this.touchMove(startCoords, endCoords);\r\n _this.LGel.trigger(lGEvents.dragMove);\r\n }\r\n });\r\n $LG(window).on(\"mouseup.lg.global\" + this.lgId, function (event) {\r\n if (!_this.lgOpened) {\r\n return;\r\n }\r\n var target = $LG(event.target);\r\n if (isMoved) {\r\n isMoved = false;\r\n _this.touchEnd(endCoords, startCoords, event);\r\n _this.LGel.trigger(lGEvents.dragEnd);\r\n }\r\n else if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n // Prevent execution on click\r\n if (isDraging) {\r\n isDraging = false;\r\n _this.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n }\r\n });\r\n }\r\n };\r\n LightGallery.prototype.triggerPosterClick = function () {\r\n var _this = this;\r\n this.$inner.on('click.lg', function (event) {\r\n if (!_this.dragOrSwipeEnabled &&\r\n _this.isPosterElement($LG(event.target))) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n });\r\n };\r\n LightGallery.prototype.manageSwipeClass = function () {\r\n var _touchNext = this.index + 1;\r\n var _touchPrev = this.index - 1;\r\n if (this.settings.loop && this.galleryItems.length > 2) {\r\n if (this.index === 0) {\r\n _touchPrev = this.galleryItems.length - 1;\r\n }\r\n else if (this.index === this.galleryItems.length - 1) {\r\n _touchNext = 0;\r\n }\r\n }\r\n this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide');\r\n if (_touchPrev > -1) {\r\n this.getSlideItem(_touchPrev).addClass('lg-prev-slide');\r\n }\r\n this.getSlideItem(_touchNext).addClass('lg-next-slide');\r\n };\r\n /**\r\n * Go to next slide\r\n * @param {Boolean} fromTouch - true if slide function called via touch event\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.goToNextSlide();\r\n * @see Demo\r\n */\r\n LightGallery.prototype.goToNextSlide = function (fromTouch) {\r\n var _this = this;\r\n var _loop = this.settings.loop;\r\n if (fromTouch && this.galleryItems.length < 3) {\r\n _loop = false;\r\n }\r\n if (!this.lgBusy) {\r\n if (this.index + 1 < this.galleryItems.length) {\r\n this.index++;\r\n this.LGel.trigger(lGEvents.beforeNextSlide, {\r\n index: this.index,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'next');\r\n }\r\n else {\r\n if (_loop) {\r\n this.index = 0;\r\n this.LGel.trigger(lGEvents.beforeNextSlide, {\r\n index: this.index,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'next');\r\n }\r\n else if (this.settings.slideEndAnimation && !fromTouch) {\r\n this.outer.addClass('lg-right-end');\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-right-end');\r\n }, 400);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Go to previous slides\r\n * @param {Boolean} fromTouch - true if slide function called via touch event\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery({});\r\n * plugin.goToPrevSlide();\r\n * @see Demo\r\n *\r\n */\r\n LightGallery.prototype.goToPrevSlide = function (fromTouch) {\r\n var _this = this;\r\n var _loop = this.settings.loop;\r\n if (fromTouch && this.galleryItems.length < 3) {\r\n _loop = false;\r\n }\r\n if (!this.lgBusy) {\r\n if (this.index > 0) {\r\n this.index--;\r\n this.LGel.trigger(lGEvents.beforePrevSlide, {\r\n index: this.index,\r\n fromTouch: fromTouch,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'prev');\r\n }\r\n else {\r\n if (_loop) {\r\n this.index = this.galleryItems.length - 1;\r\n this.LGel.trigger(lGEvents.beforePrevSlide, {\r\n index: this.index,\r\n fromTouch: fromTouch,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'prev');\r\n }\r\n else if (this.settings.slideEndAnimation && !fromTouch) {\r\n this.outer.addClass('lg-left-end');\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-left-end');\r\n }, 400);\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.keyPress = function () {\r\n var _this = this;\r\n $LG(window).on(\"keydown.lg.global\" + this.lgId, function (e) {\r\n if (_this.lgOpened &&\r\n _this.settings.escKey === true &&\r\n e.keyCode === 27) {\r\n e.preventDefault();\r\n if (_this.settings.allowMediaOverlap &&\r\n _this.outer.hasClass('lg-can-toggle') &&\r\n _this.outer.hasClass('lg-components-open')) {\r\n _this.outer.removeClass('lg-components-open');\r\n }\r\n else {\r\n _this.closeGallery();\r\n }\r\n }\r\n if (_this.lgOpened && _this.galleryItems.length > 1) {\r\n if (e.keyCode === 37) {\r\n e.preventDefault();\r\n _this.goToPrevSlide();\r\n }\r\n if (e.keyCode === 39) {\r\n e.preventDefault();\r\n _this.goToNextSlide();\r\n }\r\n }\r\n });\r\n };\r\n LightGallery.prototype.arrow = function () {\r\n var _this = this;\r\n this.getElementById('lg-prev').on('click.lg', function () {\r\n _this.goToPrevSlide();\r\n });\r\n this.getElementById('lg-next').on('click.lg', function () {\r\n _this.goToNextSlide();\r\n });\r\n };\r\n LightGallery.prototype.arrowDisable = function (index) {\r\n // Disable arrows if settings.hideControlOnEnd is true\r\n if (!this.settings.loop && this.settings.hideControlOnEnd) {\r\n var $prev = this.getElementById('lg-prev');\r\n var $next = this.getElementById('lg-next');\r\n if (index + 1 === this.galleryItems.length) {\r\n $next.attr('disabled', 'disabled').addClass('disabled');\r\n }\r\n else {\r\n $next.removeAttr('disabled').removeClass('disabled');\r\n }\r\n if (index === 0) {\r\n $prev.attr('disabled', 'disabled').addClass('disabled');\r\n }\r\n else {\r\n $prev.removeAttr('disabled').removeClass('disabled');\r\n }\r\n }\r\n };\r\n LightGallery.prototype.setTranslate = function ($el, xValue, yValue, scaleX, scaleY) {\r\n if (scaleX === void 0) { scaleX = 1; }\r\n if (scaleY === void 0) { scaleY = 1; }\r\n $el.css('transform', 'translate3d(' +\r\n xValue +\r\n 'px, ' +\r\n yValue +\r\n 'px, 0px) scale3d(' +\r\n scaleX +\r\n ', ' +\r\n scaleY +\r\n ', 1)');\r\n };\r\n LightGallery.prototype.mousewheel = function () {\r\n var _this = this;\r\n var lastCall = 0;\r\n this.outer.on('wheel.lg', function (e) {\r\n if (!e.deltaY || _this.galleryItems.length < 2) {\r\n return;\r\n }\r\n e.preventDefault();\r\n var now = new Date().getTime();\r\n if (now - lastCall < 1000) {\r\n return;\r\n }\r\n lastCall = now;\r\n if (e.deltaY > 0) {\r\n _this.goToNextSlide();\r\n }\r\n else if (e.deltaY < 0) {\r\n _this.goToPrevSlide();\r\n }\r\n });\r\n };\r\n LightGallery.prototype.isSlideElement = function (target) {\r\n return (target.hasClass('lg-outer') ||\r\n target.hasClass('lg-item') ||\r\n target.hasClass('lg-img-wrap'));\r\n };\r\n LightGallery.prototype.isPosterElement = function (target) {\r\n var playButton = this.getSlideItem(this.index)\r\n .find('.lg-video-play-button')\r\n .get();\r\n return (target.hasClass('lg-video-poster') ||\r\n target.hasClass('lg-video-play-button') ||\r\n (playButton && playButton.contains(target.get())));\r\n };\r\n /**\r\n * Maximize minimize inline gallery.\r\n * @category lGPublicMethods\r\n */\r\n LightGallery.prototype.toggleMaximize = function () {\r\n var _this = this;\r\n this.getElementById('lg-maximize').on('click.lg', function () {\r\n _this.$container.toggleClass('lg-inline');\r\n _this.refreshOnResize();\r\n });\r\n };\r\n LightGallery.prototype.invalidateItems = function () {\r\n for (var index = 0; index < this.items.length; index++) {\r\n var element = this.items[index];\r\n var $element = $LG(element);\r\n $element.off(\"click.lgcustom-item-\" + $element.attr('data-lg-id'));\r\n }\r\n };\r\n LightGallery.prototype.trapFocus = function () {\r\n var _this = this;\r\n this.$container.get().focus({\r\n preventScroll: true,\r\n });\r\n $LG(window).on(\"keydown.lg.global\" + this.lgId, function (e) {\r\n if (!_this.lgOpened) {\r\n return;\r\n }\r\n var isTabPressed = e.key === 'Tab' || e.keyCode === 9;\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n var focusableEls = utils.getFocusableElements(_this.$container.get());\r\n var firstFocusableEl = focusableEls[0];\r\n var lastFocusableEl = focusableEls[focusableEls.length - 1];\r\n if (e.shiftKey) {\r\n if (document.activeElement === firstFocusableEl) {\r\n lastFocusableEl.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n else {\r\n if (document.activeElement === lastFocusableEl) {\r\n firstFocusableEl.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n });\r\n };\r\n LightGallery.prototype.manageCloseGallery = function () {\r\n var _this = this;\r\n if (!this.settings.closable)\r\n return;\r\n var mousedown = false;\r\n this.getElementById('lg-close').on('click.lg', function () {\r\n _this.closeGallery();\r\n });\r\n if (this.settings.closeOnTap) {\r\n // If you drag the slide and release outside gallery gets close on chrome\r\n // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer\r\n this.outer.on('mousedown.lg', function (e) {\r\n var target = $LG(e.target);\r\n if (_this.isSlideElement(target)) {\r\n mousedown = true;\r\n }\r\n else {\r\n mousedown = false;\r\n }\r\n });\r\n this.outer.on('mousemove.lg', function () {\r\n mousedown = false;\r\n });\r\n this.outer.on('mouseup.lg', function (e) {\r\n var target = $LG(e.target);\r\n if (_this.isSlideElement(target) && mousedown) {\r\n if (!_this.outer.hasClass('lg-dragging')) {\r\n _this.closeGallery();\r\n }\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Close lightGallery if it is opened.\r\n *\r\n * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery\r\n * @return returns the estimated time to close gallery completely including the close animation duration\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.closeGallery();\r\n *\r\n */\r\n LightGallery.prototype.closeGallery = function (force) {\r\n var _this = this;\r\n if (!this.lgOpened || (!this.settings.closable && !force)) {\r\n return 0;\r\n }\r\n this.LGel.trigger(lGEvents.beforeClose);\r\n if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {\r\n $LG(window).scrollTop(this.prevScrollTop);\r\n }\r\n var currentItem = this.items[this.index];\r\n var transform;\r\n if (this.zoomFromOrigin && currentItem) {\r\n var _a = this.mediaContainerPosition, top_4 = _a.top, bottom = _a.bottom;\r\n var _b = this.galleryItems[this.index], __slideVideoInfo = _b.__slideVideoInfo, poster = _b.poster;\r\n var imageSize = utils.getSize(currentItem, this.outer, top_4 + bottom, __slideVideoInfo && poster && this.settings.videoMaxSize);\r\n transform = utils.getTransform(currentItem, this.outer, top_4, bottom, imageSize);\r\n }\r\n if (this.zoomFromOrigin && transform) {\r\n this.outer.addClass('lg-closing lg-zoom-from-image');\r\n this.getSlideItem(this.index)\r\n .addClass('lg-start-end-progress')\r\n .css('transition-duration', this.settings.startAnimationDuration + 'ms')\r\n .css('transform', transform);\r\n }\r\n else {\r\n this.outer.addClass('lg-hide-items');\r\n // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true\r\n // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts\r\n this.outer.removeClass('lg-zoom-from-image');\r\n }\r\n // Unbind all events added by lightGallery\r\n // @todo\r\n //this.$el.off('.lg.tm');\r\n this.destroyModules();\r\n this.lGalleryOn = false;\r\n this.isDummyImageRemoved = false;\r\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\r\n clearTimeout(this.hideBarTimeout);\r\n this.hideBarTimeout = false;\r\n $LG('html').removeClass('lg-on');\r\n this.outer.removeClass('lg-visible lg-components-open');\r\n // Resetting opacity to 0 isd required as vertical swipe to close function adds inline opacity.\r\n this.$backdrop.removeClass('in').css('opacity', 0);\r\n var removeTimeout = this.zoomFromOrigin && transform\r\n ? Math.max(this.settings.startAnimationDuration, this.settings.backdropDuration)\r\n : this.settings.backdropDuration;\r\n this.$container.removeClass('lg-show-in');\r\n // Once the closign animation is completed and gallery is invisible\r\n setTimeout(function () {\r\n if (_this.zoomFromOrigin && transform) {\r\n _this.outer.removeClass('lg-zoom-from-image');\r\n }\r\n _this.$container.removeClass('lg-show');\r\n // Reset scrollbar\r\n _this.resetScrollBar();\r\n // Need to remove inline opacity as it is used in the stylesheet as well\r\n _this.$backdrop\r\n .removeAttr('style')\r\n .css('transition-duration', _this.settings.backdropDuration + 'ms');\r\n _this.outer.removeClass(\"lg-closing \" + _this.settings.startClass);\r\n _this.getSlideItem(_this.index).removeClass('lg-start-end-progress');\r\n _this.$inner.empty();\r\n if (_this.lgOpened) {\r\n _this.LGel.trigger(lGEvents.afterClose, {\r\n instance: _this,\r\n });\r\n }\r\n if (_this.$container.get()) {\r\n _this.$container.get().blur();\r\n }\r\n _this.lgOpened = false;\r\n }, removeTimeout + 100);\r\n return removeTimeout + 100;\r\n };\r\n LightGallery.prototype.initModules = function () {\r\n this.plugins.forEach(function (module) {\r\n try {\r\n module.init();\r\n }\r\n catch (err) {\r\n console.warn(\"lightGallery:- make sure lightGallery module is properly initiated\");\r\n }\r\n });\r\n };\r\n LightGallery.prototype.destroyModules = function (destroy) {\r\n this.plugins.forEach(function (module) {\r\n try {\r\n if (destroy) {\r\n module.destroy();\r\n }\r\n else {\r\n module.closeGallery && module.closeGallery();\r\n }\r\n }\r\n catch (err) {\r\n console.warn(\"lightGallery:- make sure lightGallery module is properly destroyed\");\r\n }\r\n });\r\n };\r\n /**\r\n * Refresh lightGallery with new set of children.\r\n *\r\n * @description This is useful to update the gallery when the child elements are changed without calling destroy method.\r\n *\r\n * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery\r\n * @see Demo\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * // Delete or add children, then call\r\n * plugin.refresh();\r\n *\r\n */\r\n LightGallery.prototype.refresh = function (galleryItems) {\r\n if (!this.settings.dynamic) {\r\n this.invalidateItems();\r\n }\r\n if (galleryItems) {\r\n this.galleryItems = galleryItems;\r\n }\r\n else {\r\n this.galleryItems = this.getItems();\r\n }\r\n this.updateControls();\r\n this.openGalleryOnItemClick();\r\n this.LGel.trigger(lGEvents.updateSlides);\r\n };\r\n LightGallery.prototype.updateControls = function () {\r\n this.addSlideVideoInfo(this.galleryItems);\r\n this.updateCounterTotal();\r\n this.manageSingleSlideClassName();\r\n };\r\n LightGallery.prototype.destroyGallery = function () {\r\n this.destroyModules(true);\r\n if (!this.settings.dynamic) {\r\n this.invalidateItems();\r\n }\r\n $LG(window).off(\".lg.global\" + this.lgId);\r\n this.LGel.off('.lg');\r\n this.$container.remove();\r\n };\r\n /**\r\n * Destroy lightGallery.\r\n * Destroy lightGallery and its plugin instances completely\r\n *\r\n * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance.\r\n * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed.\r\n * You can use refresh method most of the times.\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.destroy();\r\n *\r\n */\r\n LightGallery.prototype.destroy = function () {\r\n var closeTimeout = this.closeGallery(true);\r\n if (closeTimeout) {\r\n setTimeout(this.destroyGallery.bind(this), closeTimeout);\r\n }\r\n else {\r\n this.destroyGallery();\r\n }\r\n return closeTimeout;\r\n };\r\n return LightGallery;\r\n}());\n\nfunction lightGallery(el, options) {\r\n return new LightGallery(el, options);\r\n}\n\nexport default lightGallery;\n//# sourceMappingURL=lightgallery.es5.js.map\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/lightgallery/lightgallery.es5.js","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = ['orderInput', 'removeInput']\n\n orderInputTargetConnected(e) {\n // Ensure newly added form fields get positions set when added to the form\n if (e.value == \"\") {\n this.reOrderListOrderValues()\n }\n }\n\n removeToggle(e) {\n let nestedFormContainer = e.currentTarget.closest('.nestedFormContainer')\n let hiddenDestroyField\n if (this.hasRemoveInputTarget) {\n hiddenDestroyField = this.removeInputTarget\n } else {\n hiddenDestroyField = e.currentTarget.parentNode.children[1].querySelectorAll('input')[0]\n }\n\n if (nestedFormContainer.classList.toggle('disabledFormContainer')) {\n hiddenDestroyField.value = true\n } else {\n hiddenDestroyField.value = false\n }\n }\n\n moveUp(e) {\n let currentNode = e.currentTarget.closest('.nestedFormContainer')\n let parentNode = currentNode.parentNode\n let siblings = this.siblings(parentNode, '.nestedFormContainer')\n let previousSibling = null\n\n for (var i = 0; i < siblings.length; i++) {\n if (siblings[i] === currentNode) {\n if (i === 0) {\n return\n }\n previousSibling = siblings[i - 1]\n break\n }\n }\n previousSibling.insertAdjacentElement('beforebegin', currentNode)\n this.reOrderListOrderValues()\n }\n\n moveDown(e) {\n let currentNode = e.currentTarget.closest('.nestedFormContainer')\n let parentNode = currentNode.parentNode\n let siblings = this.siblings(parentNode, '.nestedFormContainer')\n let nextSibling = null\n\n for (var i = 0; i < siblings.length; i++) {\n if (siblings[i] === currentNode) {\n if ((i + 1) === (siblings.length)) {\n return\n }\n nextSibling = siblings[i + 1]\n break\n }\n }\n nextSibling.insertAdjacentElement('afterend', currentNode)\n this.reOrderListOrderValues()\n }\n\n reOrderListOrderValues() {\n for (var i = 0; i < this.orderInputTargets.length; i++) {\n this.orderInputTargets[i].value = i + 1\n }\n }\n\n siblings(parentNode, selector) {\n let siblings = []\n let el = parentNode.firstElementChild\n do {\n if (!selector || el.matches(selector)) {\n siblings.push(el)\n }\n el = el.nextElementSibling\n } while (el);\n return siblings;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/nested_form_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nconst getCSRFToken = () => {\n return Array.from(document.getElementsByTagName('meta')).find(meta => meta.name === 'csrf-token').content\n}\n\nexport default class extends Controller {\n static targets = [\"modal\", \"title\", \"body\", \"closeButton\"]\n\n\n connect(){\n document.addEventListener(\"turbolinks:load\", () => {\n if (window.ttScrollPosition !== undefined){\n window.scroll(window.ttScrollPosition.x, window.ttScrollPosition.y)\n delete window.ttScrollPosition\n }\n })\n }\n\n openModal(e){\n if (e.currentTarget.closest('.anchor')){\n this.anchor = e.currentTarget.closest('.anchor').previousElementSibling.id\n }\n let endpoint = e.currentTarget.dataset.path\n this.modalTarget.classList.remove('hidden')\n\n fetch(endpoint, {credentials: 'include'}).\n then(r => r.text()).\n then(b => {\n this.bodyTarget.insertAdjacentHTML('beforeend', b)\n if (!this.bodyTarget.querySelector('[data-action*=closeModal]')){\n this.closeButtonTarget.classList.remove('hidden')\n }\n })\n }\n\n closeModal(e) {\n if(e.type === 'click' || e.keyCode === 27) {\n this.bodyTarget.innerHTML = null\n this.modalTarget.classList.add('hidden')\n this.closeButtonTarget.classList.add('hidden')\n }\n }\n\n link(e){\n let endpoint = e.currentTarget.dataset.path\n window.location = endpoint\n }\n\n delete(e){\n let verb = 'delete'\n if (e.currentTarget.innerText === 'Archive'){\n verb = 'archive'\n }\n let shouldDelete = confirm(`Are you sure you want to ${verb} this resource?`)\n if (shouldDelete){\n let endpoint = e.currentTarget.dataset.path\n let options = {\n credentials: 'include',\n method: 'DELETE',\n headers: {\n 'X-CSRF-TOKEN': getCSRFToken()\n }\n }\n fetch(endpoint, options).then(r => window.location.reload())\n }\n }\n\n parentSelection(e) {\n let endpoint = e.target.value\n fetch(endpoint, {credentials: 'include'}).\n then(r => r.text()).then(b => {\n this.bodyTarget.innerHTML = null\n this.bodyTarget.insertAdjacentHTML('afterbegin', b)\n })\n }\n\n appendAnchor(e){\n let form = e.target\n form.action = form.action + `?anchor=${this.anchor}`\n }\n\n print(e) {\n let anchor = e.currentTarget.closest('.anchor')\n let hideForPrintClasses = [\n '.copyright',\n '.site-header',\n '.breadcrumb',\n '.global-navigation',\n '.global-right-side-panel',\n '.pull-right'\n ]\n if (anchor) {\n hideForPrintClasses = ['.page']\n }\n const toggleHidden = n => n.classList.toggle('hidden')\n let elementsToHide = document.querySelectorAll(hideForPrintClasses.join(','))\n\n // Prepare page / component for print\n if (anchor) {\n var clone = anchor.cloneNode(true)\n clone.style.margin = 'auto'\n document.body.append(clone)\n }\n elementsToHide.forEach(toggleHidden)\n document.body.style.zoom = '55%'\n\n window.print()\n\n // Undo changes made for print\n if (anchor) {\n clone.remove()\n }\n elementsToHide.forEach(toggleHidden)\n document.body.style.zoom = ''\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/page_controller.js","import { Controller } from \"@hotwired/stimulus\"\nimport Sortable from \"sortablejs\"\n\nexport default class extends Controller {\n static targets = ['sortable', 'position']\n\n connect(){\n this.sortable = Sortable.create(this.sortableTarget, {\n animation: 150,\n onEnd: this.update.bind(this)\n })\n }\n\n update(event){\n this.positionTargets.forEach((e, i) => e.value = i)\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/property_list_drag_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nconst getCSRFToken = () => {\n return Array.from(document.getElementsByTagName('meta')).find(meta => meta.name === 'csrf-token').content\n}\n\nexport default class extends Controller {\n static targets = [\"input\"]\n\n refresh(e) {\n let url = new URL(window.location.toString())\n let formData = new FormData(e.currentTarget.form)\n let searchParams = new URLSearchParams(formData)\n url.search = searchParams\n window.location = url\n }\n\n refreshPartial(e) {\n let url = new URL(this.element.dataset['url'])\n let method = this.element.dataset['method'] || 'GET'\n let options = {\n method: method,\n credentials: 'include'\n }\n let subForm = new FormData()\n\n for (const input of this.inputTargets) {\n subForm.append(input.dataset.inputName, input.value)\n }\n\n if (method == \"GET\") {\n url.search = new URLSearchParams(subForm)\n } else {\n options[\"body\"] = subForm\n options[\"headers\"] = { 'X-CSRF-TOKEN': getCSRFToken() }\n }\n\n let that = this\n fetch(url, options).then(r => r.text()).then(function(b) {\n let parser = new DOMParser()\n let html = parser.parseFromString(b, 'text/html')\n let content = html.querySelector('[data-replace-content]')\n that.element.outerHTML = content.innerHTML\n })\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/refresh_form_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\n 'searchbar', 'suggestions', 'suggestionTemplate',\n 'partialFilter', 'filters', 'previousSuggestions',\n 'apply'\n ]\n\n initialize() {\n this.currentIndex = -1\n this.startingFiltersCount = this.filters.length\n this.modified = false\n }\n\n // Actions\n navigateSuggestions(e) {\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n e.preventDefault()\n this.moveHighlight(e.key.substring(5))\n return\n case 'Enter':\n e.preventDefault()\n if (this.selectedSuggestion === undefined) {\n this.hideSuggestions()\n this.submitFilters()\n } else {\n this.selectSuggestion() &&\n this.displaySuggestions()\n }\n return\n case 'Backspace':\n if (this.selectedSuggestion === undefined && this.searchbarTarget.value === '') {\n e.preventDefault()\n if (this.buildingFilter) {\n this.resetPartial()\n } else {\n this.removeFilter()\n }\n }\n }\n }\n\n submitFilters() {\n this.hideSuggestions()\n this.searchbarTarget.value = ''\n this.searchbarTarget.disabled = true\n let u = new URL(window.location.toString())\n let toDelete = []\n u.searchParams.forEach((v, e) => {\n if (e.startsWith(`${this.id}[fs]`)) {\n toDelete.push(e)\n }\n })\n toDelete.forEach(e => u.searchParams.delete(e))\n this.filters.forEach(f => {\n for (let [k, v] of Object.entries(f)) {\n u.searchParams.append(`${this.id}[fs][][${k}]`, v)\n }\n })\n window.ttScrollPosition = { x: window.scrollX, y: window.scrollY }\n u.searchParams.delete(`${this.id}[page]`)\n Turbolinks.visit(u.toString())\n }\n\n displaySuggestions() {\n const input = this.searchbarTarget.value\n this.suggestionsTarget.style.visibility = 'visible'\n\n let resetHighlight = true\n this.suggestions.forEach((s, i) => {\n let show\n if (s.dataset.suggestionTerminal === 'regexp') {\n show = input.match(new RegExp(s.dataset.allowed))\n if (show && input.match(new RegExp(s.dataset.fullValue))) {\n s.innerText = input\n s.dataset.name = input\n this.displayHighlight(i)\n resetHighlight = false\n } else {\n s.innerText = s.dataset.help\n }\n } else {\n show = s.innerText.match(new RegExp(input, 'i'))\n }\n s.classList.toggle('hidden', !show)\n })\n // If not terminal and only one suggestion, automatically select it?\n let vissibleSuggestions = this.suggestions.filter(s => !s.classList.contains('hidden'))\n if (vissibleSuggestions.length === 1 && !('suggestionTerminal' in vissibleSuggestions[0].dataset)) {\n this.displayHighlight(0)\n this.selectSuggestion()\n this.displaySuggestions()\n return\n }\n if (resetHighlight) {\n this.displayHighlight(-1)\n }\n }\n\n hideSuggestions(e) {\n if (e && this.element.contains(e.relatedTarget)) {\n return\n }\n this.suggestionsTarget.style.visibility = ''\n }\n\n moveHighlight(direction) {\n if (direction === 'Up' && this.currentIndex > -1) {\n this.displayHighlight(this.currentIndex - 1)\n } else if (direction === 'Down' && this.currentIndex < this.suggestions.length - 1) {\n this.displayHighlight(this.currentIndex + 1)\n }\n }\n\n displayHighlight(index) {\n this.suggestions.filter(e => !e.classList.contains('hidden')).forEach((e, i) => {\n e.classList.toggle('suggestion--highlighted', i === index)\n if (i === index) {\n this.suggestionsTarget.scrollTop = e.offsetTop - e.clientHeight\n }\n })\n this.currentIndex = index\n }\n\n selectSuggestion(e) {\n let suggestion\n if (e) {\n suggestion = e.target\n } else {\n suggestion = this.selectedSuggestion\n }\n this.addPartial(suggestion)\n suggestion.classList.toggle('suggestion--highlighted')\n this.suggestionsTarget.style.visibility = 'hidden'\n\n if ('suggestionTerminal' in suggestion.dataset) {\n if ('help' in suggestion.dataset) {\n suggestion.innerText = suggestion.dataset.help\n }\n this.addFilter()\n this.submitFilters()\n return false\n } else {\n let currentSuggestions = this.suggestionsTarget\n let newSuggestions = suggestion.firstElementChild\n newSuggestions.dataset.searchAndFilterTarget = 'suggestions'\n currentSuggestions.dataset.searchAndFilterTarget = 'previousSuggestions'\n }\n\n this.currentIndex = -1\n this.searchbarTarget.value = ''\n this.searchbarTarget.focus()\n return true\n }\n\n clickSuggestion(e) {\n this.selectedSuggestion = e.target\n this.searchbarTarget.focus()\n this.selectSuggestion()\n }\n\n addPartial(suggestion) {\n let partialFilter = this.partialFilterTarget.children[0].cloneNode()\n partialFilter.innerText = suggestion.innerText\n partialFilter.dataset.name = suggestion.dataset.name\n partialFilter.classList.remove('hidden')\n this.partialFilterTarget.append(partialFilter)\n }\n\n resetPartial() {\n let suggestion = this.suggestions[0]\n if (suggestion !== undefined && 'help' in suggestion.dataset) {\n suggestion.innerText = suggestion.dataset.help\n }\n Array.from(this.partialFilterTarget.children).slice(1).map(e => e.remove())\n this.hideSuggestions()\n this.suggestionsTarget.dataset.target = ''\n this.previousSuggestionsTargets[0].dataset.target = 'search-and-filter.suggestions'\n this.previousSuggestionsTargets.forEach(e => { e.dataset.target = '' })\n }\n\n addFilter() {\n let partials = Array.from(this.partialFilterTarget.children).slice(1)\n let filter = this.filtersTarget.children[0].cloneNode(true)\n let label = partials.map(e => e.innerText.trim()).join(' ')\n\n filter.insertAdjacentText('afterbegin', label)\n filter.dataset.queryname = partials[0].dataset.name\n filter.dataset.comparison = partials[1].dataset.name\n filter.dataset.value = partials[2].dataset.name\n\n this.resetPartial()\n filter.classList.remove('hidden')\n this.filtersTarget.append(filter)\n }\n\n removeFilter(e) {\n if (e === undefined) {\n this.filtersTarget.lastElementChild.remove()\n this.displaySuggestions()\n } else {\n e.currentTarget.closest('.filter').remove()\n }\n this.submitFilters()\n }\n\n filtersModified() {\n return this.modified || this.startingFiltersCount != this.filters.length\n }\n\n // Getters and Setters\n get suggestions() {\n return Array.from(\n this.suggestionsTarget.querySelectorAll(':scope > .suggestion')\n )\n }\n\n get selectedSuggestion() {\n return this.suggestions.find(\n e => e.classList.contains('suggestion--highlighted')\n )\n }\n\n get buildingFilter() {\n return this.partialFilterTarget.children.length > 1\n }\n\n get filters() {\n const to_obj = (f) => {\n let o = { name: f.innerText }\n for (let [k, v] of Object.entries(f.dataset)) {\n o[k] = v\n }\n return o\n }\n let fs = Array.from(this.filtersTarget.children).slice(1)\n let query = fs.map(to_obj)\n return query\n }\n\n get id() {\n return this.data.get(\"id\")\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/search_and_filter_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"formSection\", \"multiSelect\", \"conditionalOn\"]\n\n\n initialize(){\n this.select2mount($(this.multiSelectTargets))\n let that = this\n // Handle FormFields that display conditionally on another FormField value.\n $(this.conditionalOnTargets).each((i,e) => {\n let name = e.dataset.conditionalOnName\n let value = e.dataset.conditionalValue\n // Ensure we are scoped to just our form.\n let conditionalOn = $(`[name*=${name}]`, that.element)\n // Set initial show / hide state based on value\n if (conditionalOn.val() != value) {\n $(e).parent().hide()\n }\n // Setup change callback to toggle state\n conditionalOn.on(\"change\", (f) => {\n if (f.currentTarget.value === value) {\n $(e).parent().show()\n } else {\n $(e).parent().hide()\n }\n })\n })\n this.showForm(1)\n }\n\n select2mount(targetsToMount) {\n return (targetsToMount.select2({\n minimumResultsForSearch: 5,\n width: '100%'\n }))\n }\n\n previousFormSection(e) {\n this.showForm(this.position - 1)\n }\n\n nextFormSection(e) {\n this.showForm(this.position + 1)\n }\n\n showForm(position) {\n this.position = Math.min(Math.max(1, position), this.formSectionTargets.length)\n let index = this.position - 1\n\n this.formSectionTargets.forEach((el, i) => {\n el.classList.toggle('hidden', i !== index)\n })\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/tabbed_form_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nconst getCSRFToken = () => {\n return Array.from(document.getElementsByTagName('meta')).find(meta => meta.name === 'csrf-token').content\n}\n\nexport default class extends Controller {\n static targets = [\n 'percentage'\n ]\n\n connect(){\n this.updatePercentageClasses()\n }\n\n updatePercentage(e){\n e.preventDefault()\n let input = e.currentTarget.querySelector('input')\n input.checked = true\n const percent = input.value\n let endpoint = `/tasks/${this.data.get('id')}`\n let options = {\n body: JSON.stringify({percentage_complete: percent}),\n method: 'PATCH',\n credentials: 'include',\n headers: {\n \"Content-Type\": \"application/json\",\n 'X-CSRF-TOKEN': getCSRFToken()\n }\n }\n var elem = this.element\n fetch(endpoint, options).then(r => r.json()).then(function(j){\n var completion = j['task_process_completion']\n elem.dispatchEvent(new CustomEvent('task-update', { bubbles: true, detail: {completion}}))\n })\n this.updatePercentageClasses()\n }\n\n updatePercentageClasses(){\n let passedChecked = false\n this.percentageTargets.reverse().forEach((e,i) => {\n e.classList.remove('ttGreenBg', 'ttRedBg', 'ttGreenText')\n let checked = e.querySelector('input').checked\n if (checked && i !== 4){\n e.classList.add('ttGreenBg')\n } else if (i === 4 && checked) {\n e.classList.add('ttRedBg')\n } else if (passedChecked){\n e.classList.add('ttGreenBg')\n e.classList.add('ttGreenText')\n }\n passedChecked = passedChecked || checked\n })\n }\n\n delete(e){\n e.preventDefault()\n if(confirm('Are you sure you want to delete?')) {\n let endpoint = `/tasks/${this.data.get('id')}`\n let options = {\n method: 'DELETE',\n credentials: 'include',\n headers: {\n \"Content-Type\": \"application/json\",\n 'X-CSRF-TOKEN': getCSRFToken()\n }\n }\n var elem = this.element\n fetch(endpoint, options).then(r => r.json()).then(function(j){\n var completion = j['task_process_completion']\n elem.dispatchEvent(new CustomEvent('task-delete', { bubbles: true, detail: {completion, elem}}))\n })\n elem.classList.add('hidden')\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/task_controller.js","import { Controller } from \"@hotwired/stimulus\"\n\nconst getCSRFToken = () => {\n return Array.from(document.getElementsByTagName('meta')).find(meta => meta.name === 'csrf-token').content\n}\n\nexport default class extends Controller {\n static targets = ['percentage', 'progressBar', 'task']\n\n connect(){\n this._progressBarFillColor = '#a5b924';\n this._progressBarChunkColor = '#FFF'\n this._progressBarChunkWidth = 1;\n\n this.percentage = parseInt(this.data.get('percentage'), 10)\n this.chunks = parseInt(this.data.get('chunks'), 10)\n\n this.drawProgressBar()\n }\n\n newTask(e){\n console.log(e)\n e.preventDefault()\n let [data, status, xhr] = e.detail\n let content = xhr.response\n this.element.querySelector('.tasks').insertAdjacentHTML('beforeend', content)\n }\n\n update(e){\n this.percentage = parseInt(e.detail.completion, 10)\n this.data.set('percentage', e.detail.completion)\n this.percentageTarget.innerText = e.detail.completion + '%'\n this.drawProgressBar()\n if (e.detail.elem){\n e.detail.elem.remove()\n }\n }\n\n drawProgressBar() {\n // Set initial variables & context\n const width = this.progressBarTarget.width\n const height = this.progressBarTarget.height\n\n var normalizedCompletion = width * (this.percentage / 100)\n var ctx = this.progressBarTarget.getContext(\"2d\")\n\n // Ensure we're working with a blank canvas\n ctx.clearRect(0, 0, width, height);\n\n // Draw our progress bar\n ctx.fillStyle = this._progressBarFillColor\n ctx.fillRect(0, 0, normalizedCompletion, height)\n\n // Draw our chunked dash marks\n var chunkWidth = width / this.chunks;\n ctx.fillStyle = this._progressBarChunkColor;\n for(var i = chunkWidth; i < width; i += chunkWidth) {\n ctx.fillRect(i, 0, this._progressBarChunkWidth, height);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/stimulus/task_process_controller.js"],"sourceRoot":""}