{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack:///./node_modules/flickity/js/core.js","webpack:///./app/frontend/javascript/utilities/animations.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/plyr/dist/plyr.min.js","webpack:///./app/frontend/javascript/controllers sync \\.js$","webpack:///./app/frontend/javascript/controllers/form_controller.js","webpack:///./app/frontend/javascript/controllers/lazy_load.js","webpack:///./app/frontend/javascript/controllers/replay_controller.js","webpack:///./app/frontend/javascript/controllers/search_controller.js","webpack:///./app/frontend/javascript/controllers/select_controller.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/flickity/js/prev-next-button.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity/js/imagesloaded.js","webpack:///./node_modules/imagesloaded/imagesloaded.js","webpack:///(webpack)/buildin/global.js","webpack:///./app/frontend/images/favicons/favicon.ico","webpack:///./app/frontend/images/favicons/favicon-16x16.png","webpack:///./app/frontend/images/favicons/favicon-32x32.png","webpack:///./app/frontend/images/favicons/apple-touch-icon.png","webpack:///./app/frontend/javascript/tfi_app.js","webpack:///./app/frontend/javascript/utilities/index.js","webpack:///./app/frontend/javascript/components/generic_carousel.js","webpack:///./app/frontend/javascript/components/generic_flickity_carousel.js","webpack:///./app/frontend/javascript/components/crossfade_carousel.js","webpack:///./app/frontend/javascript/magic_modules/carousel_module.js","webpack:///./app/frontend/javascript/magic_modules/video_module.js","webpack:///./app/frontend/javascript/magic_modules/video_grid_module.js","webpack:///./app/frontend/javascript/magic_modules/vitrine_module.js","webpack:///./app/frontend/javascript/components/accordion.js","webpack:///./app/frontend/javascript/components/audio_module.js","webpack:///./app/frontend/javascript/components/filter_button.js","webpack:///./app/frontend/javascript/utilities/url_search_params.js","webpack:///./app/frontend/javascript/components/filter_drop_down.js","webpack:///./app/frontend/javascript/components/focus_lock.js","webpack:///./app/frontend/javascript/components/header.js","webpack:///./app/frontend/javascript/components/load_more.js","webpack:///./app/frontend/javascript/components/param_links.js","webpack:///./app/frontend/javascript/components/sub_menu.js","webpack:///./app/frontend/javascript/components/truncate_list.js","webpack:///./app/frontend/javascript/components/video_player.js","webpack:///./app/frontend/javascript/components/media_stack.js","webpack:///./app/frontend/javascript/components/prevent_scroll_link_handler.js","webpack:///./app/frontend/javascript/components/browsing_history.js","webpack:///./app/frontend/javascript/index.js","webpack:///./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack:///./node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","webpack:///./app/frontend/javascript/components/lazy_images.js","webpack:///./app/frontend/javascript/controllers/refresh_controller.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_slicedToArray","arr","Array","isArray","_arrayWithHoles","_i","iterator","_s","_e","_arr","_n","_d","next","done","push","length","err","_iterableToArrayLimit","minLen","_arrayLikeToArray","toString","slice","constructor","from","test","_unsupportedIterableToArray","TypeError","_nonIterableRest","len","arr2","EventListener","eventTarget","eventName","eventOptions","this","unorderedBindings","Set","connect","addEventListener","disconnect","removeEventListener","bindingConnected","binding","add","bindingDisconnected","delete","handleEvent","event","extendedEvent","stopImmediatePropagation","assign","immediatePropagationStopped","extendEvent","bindings","sort","left","right","leftIndex","index","rightIndex","Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","forEach","eventListener","stop","values","reduce","listeners","map","concat","fetchEventListenerForBinding","handleError","error","message","detail","arguments","undefined","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","createEventListener","set","parts","keys","join","descriptorPattern","parseEventTarget","eventTargetName","window","document","camelize","replace","_","char","toUpperCase","capitalize","charAt","dasherize","toLowerCase","defaultEventNames","e","getAttribute","Error","typecast","JSON","parse","o_O","Binding","context","action","identifier","willBeInvokedByEvent","shouldBeInvokedPerSelf","processStopPropagation","processPreventDefault","invokeWithEvent","method","controller","methodName","stopPropagation","prevent","preventDefault","target","currentTarget","params","actionEvent","logDebugActivity","element","self","Element","contains","scope","containsElement","ElementObserver","delegate","mutationObserverInit","attributes","childList","subtree","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","refresh","pause","callback","takeRecords","matches","matchElementsInTree","has","removeElement","addElement","mutation","processMutation","type","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","node","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","selector","hasAttribute","match","querySelectorAll","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","StringMapObserver","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","fetch","del","size","prune","Multimap","valuesByKey","hasKey","hasValue","some","getValuesForKey","getKeysForValue","filter","_ref2","_ref3","_ref4","_ref5","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","_this$refreshTokensFo2","refreshTokensForElement","unmatchedTokens","matchedTokens","tokensUnmatched","tokens","token","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","Math","max","zip","findIndex","_ref6","_ref7","previousToken","currentToken","content","tokenString","trim","split","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","clear","descriptor","tagName","getDefaultEventNameForElement","static","descriptorString","options","parseActionDescriptorString","eventNameSuffix","pattern","RegExp","_ref","forToken","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","_ref8","valueDescriptors","data","rawValue","rawOldValue","changedMethodName","changedMethod","reader","descriptors","hasMethodName","TargetObserver","targetsByName","disconnectAllTargets","_ref9","connectTarget","_ref10","disconnectTarget","_a","targetConnected","targetDisconnected","Context","_this","functionName","controllerConstructor","bindingObserver","dispatcher","valueObserver","targetObserver","initialize","parentElement","invokeControllerMethod","_len","args","_key","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","definition","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","getOwnStaticObjectPairs","getPrototypeOf","reverse","bless","properties","shadowConstructor","extend","shadowProperties","getOwnKeys","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","defineProperties","shadow","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","getOwnPropertyNames","extendWithReflect","extended","Reflect","construct","setPrototypeOf","b","a","testReflectExtension","Module","blessDefinition","contextsByScope","connectedContexts","contexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","DataMap","setAttribute","removeAttribute","Guide","logger","warnedKeysByObject","warn","warnedKeys","attributeValueContainsToken","TargetSet","targetName","find","_len2","targetNames","_key2","findTarget","findLegacyTarget","findAll","_len3","_key3","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","Scope","classes","closest","controllerSelector","queryElements","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","Application","_this2","documentElement","console","debug","logFormattedMessage","router","async","Promise","resolve","readyState","register","load","head","_len4","rest","_key4","shouldLoad","unload","_len5","_key5","controllers","getControllerForElementAndIdentifier","onerror","groupCollapsed","log","groupEnd","parseValueDefinitionPair","_ref11","_ref12","payload","typeFromObject","parseValueTypeConstant","typeObject","defaultValueType","parseValueTypeDefault","default","propertyPath","parseValueTypeObject","typeDefinition","typeFromDefaultValue","typeFromConstant","parseValueTypeDefinition","constant","defaultValuesByType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","Boolean","Number","String","array","boolean","number","string","writeJSON","stringify","Controller","dispatch","_ref13","_ref13$target","_ref13$detail","_ref13$prefix","prefix","_ref13$bubbles","bubbles","_ref13$cancelable","cancelable","CustomEvent","dispatchEvent","blessings","classDefinition","targetDefinition","valueDefinitionPairs","propertyDescriptorMap","result","valueDefinitionPair","valueDescriptor","read","write","propertiesForValueDefinitionPair","ownKeys","enumerableOnly","symbols","sym","apply","_defineProperty","obj","configurable","writable","factory","_Flickity","Flickity","EvEmitter","getSize","fizzyUIUtils","Cell","Slide","animatePrototype","utils","getComputedStyle","jQuery","GUID","instances","queryElement","getQueryElement","flickityGUID","instance","option","$element","source","getOwnPropertyDescriptors","_objectSpread","defaults","_create","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","percentPosition","resize","selectedAttraction","setGallerySize","proto","_this$options","watchCSS","rightToLeft","id","guid","selectedIndex","restingFrames","x","velocity","beginMargin","endMargin","viewport","createElement","className","_createSlider","focusableElems","on","listener","activate","opts","isActive","classList","cellElems","_filterFindCellElements","children","slider","append","reloadCells","tabIndex","emitEvent","selectInitialIndex","isInitActivated","elems","filterFindElements","cellSelector","cells","_makeCells","positionCells","_updateWrapShiftCells","cellElem","getLastCell","getLastSlide","slides","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","outerWidth","cell","_renderCellPosition","outerHeight","slideableWidth","updateSlides","_containSlides","slidesWidth","renderX","innerWidth","width","positionValue","getPositionValue","style","transform","slide","canCellFit","_getCanCellFit","addCell","slideWidth","firstMargin","updateTarget","updateSelectedSlide","groupCells","parseInt","percent","percentMatch","groupWidth","_init","reposition","positionSliderAtSelected","setCellAlign","cursorPosition","cellAlignShorthands","center","_this$options2","shorthand","height","adaptiveHeight","selectedSlide","isWrapping","getIsWrapping","_unshiftCells","beforeShiftCells","afterShiftCells","beforeGapX","lastIndex","_getGapCells","afterGapX","wrapAround","gapWidth","gapX","cellIndex","increment","contain","contentWidth","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","trigger","unidraggerEvents","_emitEvent","clickedCell","getParentCell","indexOf","includes","shift","select","isWrap","isInstant","_wrapSelect","modulo","prevIndex","startAnimation","isDragSelect","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","previous","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","getCellSlideIndex","cellSlide","getCell","elem","getCells","makeArray","getAdjacentCellElements","adjCount","slideIndex","querySelector","uiChange","onresize","debounceMethod","isAnimating","isDragging","deactivate","onkeydown","activeElement","handler","keyboardHandlers","ArrowLeft","ArrowRight","focus","preventScroll","remove","destroy","allOff","removeData","htmlInit","jQueryBridget","setJQuery","jq","fadeOutElement","duration","easing","setProperty","offsetWidth","fadeInElement","global","num","div","ary","splice","parentNode","body","HTMLElement","ffElems","childElems","_class","threshold","timeoutName","clearTimeout","setTimeout","onDocReady","str","$1","$2","WidgetClass","namespace","docReady","dataAttr","toDashed","dataAttrElems","attr","events","_events","once","onceEvents","_onceEvents","off","onceListeners","getStyleSize","parseFloat","isNaN","measurements","display","innerHeight","measurement","getZeroSize","offsetHeight","isBorderBox","boxSizing","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderWidth","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","styleWidth","styleHeight","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","navigator","addCSS","thumbWidth","watch","h","u","NodeList","g","f","y","v","w","toFixed","round","T","rangeTouch","config","init","enabled","userSelect","webKitUserSelect","touchAction","changedTouches","getBoundingClientRect","clientX","disabled","k","C","A","S","E","P","Function","M","N","I","L","$","O","j","D","q","H","ownerDocument","R","F","KeyboardEvent","V","TextTrack","kind","B","then","U","URL","startsWith","hostname","W","z","WebkitTransition","MozTransition","OTransition","transition","K","hidden","Y","isIE","documentMode","isEdge","userAgent","isWebkit","isIPhone","platform","isIos","maxTouchPoints","Q","X","J","cloneNode","nextSibling","appendChild","insertBefore","G","entries","Z","innerText","ee","te","removeChild","ie","childNodes","lastChild","se","replaceChild","ne","class","ae","le","oe","re","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","ce","container","he","ue","classNames","tabFocus","de","me","audio","video","check","playsinline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","pe","ge","passive","capture","fe","be","ye","ve","plyr","we","Te","ready","ke","Ce","Ae","Se","CSS","supports","Ee","Pe","every","Me","_e2","Ne","ratio","embed","_this$media","videoWidth","videoHeight","xe","isVideo","wrapper","_Me2","aspectRatio","isVimeo","vimeo","premium","supported","fullscreen","active","videoFixedRatio","padding","Ie","Le","getSources","getQualityOptions","quality","forced","setup","speed","onChange","_e$media","currentTime","paused","preload","playbackRate","src","play","cancelRequests","blankVideo","$e","Oe","je","De","innerHTML","qe","html5","youtube","He","i18n","seekTime","title","Re","localStorage","getItem","setItem","storage","removeItem","Fe","XMLHttpRequest","responseText","response","status","open","responseType","send","Ve","getElementById","insertAdjacentElement","catch","Be","trunc","Ue","We","getIconUrl","iconUrl","location","host","top","svg4everybody","url","cors","findElements","controls","selectors","buttons","restart","rewind","fastForward","mute","settings","captions","progress","inputs","seek","volume","buffer","seekTooltip","tooltip","toggleNativeControls","createIcon","iconPrefix","createElementNS","focusable","setAttributeNS","createLabel","createBadge","menu","badge","createButton","toggle","label","icon","labelPressed","iconPressed","control","createRange","step","autocomplete","role","updateRangeFill","createProgress","played","createTime","time","bindMenuItemShortcuts","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","_ref9$badge","_ref9$checked","checked","currentTrack","formatTime","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","getElementsByTagName","nodeValue","buffered","updateSeekTooltip","tooltips","pageX","markers","points","insertAdjacentHTML","timeUpdate","invertTime","seeking","durationUpdate","displayDuration","setMarkers","toggleMenuButton","updateSetting","panels","getLabel","Ye","setQualityMenu","checkMenu","setCaptionsMenu","getTracks","toggled","language","unshift","setSpeedMenu","minimumSpeed","maximumSpeed","popup","toggleMenu","composedPath","getMenuSize","position","opacity","scrollWidth","scrollHeight","setDownloadUrl","download","home","href","urls","isEmbed","provider","inject","loadSprite","floor","random","seektime","controlPressed","_this$config","labels","setMediaMetadata","mediaSession","metadata","MediaMetadata","mediaMetadata","artist","album","artwork","createDocumentFragment","marker","tip","ze","Ke","URLSearchParams","_ref14","_ref15","isYouTube","protocol","createObjectURL","languages","userLanguage","update","_this$captions","meta","currentTrackNode","updateCues","setLanguage","findTrack","enableTextTrack","getCurrentTrack","activeCues","getCueAsHTML","caption","Qe","autoplay","autopause","toggleInvert","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","cues","isTouch","uiSupported","noTransition","previewThumbnails","thumbContainer","thumbContainerShown","imageContainer","timeContainer","scrubbingContainer","scrubbingContainerShown","hash","publisherId","tagUrl","byline","portrait","transparent","customControls","referrerPolicy","rel","showinfo","iv_load_policy","modestbranding","noCookie","Xe","Je","Ge","Ze","et","tt","it","st","player","scrollPosition","scrollX","scrollY","scrollTo","overflow","cleanupViewport","shiftKey","forceFallback","native","requestFullscreen","webkitEnterFullscreen","toggleFallback","navigationUI","webkitExitFullscreen","cancelFullScreen","exit","enter","proxy","trapFocus","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","usingNative","getRootNode","fullscreenElement","shadowRoot","nt","Image","onload","naturalWidth","at","addStyleHook","build","checkPlaying","setTitle","setPoster","togglePoster","backgroundImage","backgroundSize","reject","toggleControls","checkLoading","timers","lastSeekTime","Date","now","migrateStyles","getPropertyValue","removeProperty","lt","_this3","timeStamp","focusTimer","lastKeyDown","handleKey","firstTouch","setTabFocus","_Ne$call2","maxWidth","margin","_ref17","clientWidth","clientHeight","resized","isAudio","ended","togglePlay","_i$detail","forward","toggleCaptions","loaded","startMove","endMove","startScrubbing","endScrubbing","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","sign","increaseVolume","lastKey","altKey","ctrlKey","metaKey","decreaseVolume","globalThis","ot","success","numRetries","before","relList","as","onbeforeload","sheet","cssText","code","defaultPrevented","returnPromise","isDefined","rt","ct","hasPlayed","ht","Vimeo","_excluded","sidedock","gesture","thumbnail_url","Player","disableTextTrack","setVolume","setCurrentTime","setPlaybackRate","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","_t","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref18","_ref18$cues","firstChild","text","getPaused","seconds","ut","dt","mt","YT","onYouTubeIframeAPIReady","getTitle","videoId","playerVars","hl","disablekb","cc_load_policy","cc_lang_pref","widget_referrer","onError","onPlaybackRateChange","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","seekTo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","pt","gt","_this4","google","ima","manager","displayContainer","startSafetyTimer","managerPromise","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","setDisableCustomPlaybackForIOS10Plus","AdDisplayContainer","loader","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","requestAds","AdsRequest","adTagUrl","linearAdSlotWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","countdownTimer","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","cuePoints","getCuePoints","AdEvent","onAdEvent","getAd","getAdData","LOADED","pollCountdown","isLinear","STARTED","ALL_ADS_COMPLETED","loadAds","contentComplete","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","LOG","adError","getMessage","cancel","addCuePoints","discardAdBreak","ViewMode","NORMAL","initialized","zIndex","safetyTimer","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","ft","bt","startTime","_t2","_t$1$split","_t$1$split2","endTime","yt","vt","_this5","getThumbnails","render","determineContainerAutoSizing","thumbnails","getThumbnail","frames","urlPrefix","substring","lastIndexOf","naturalHeight","mousePosX","thumb","_ref19","showImageAtCurrentTime","toggleThumbContainer","button","mouseDown","toggleScrubbingContainer","ceil","lastTime","scrubbing","setScrubbingContainerSize","setThumbContainerSizeAndPos","loadedImages","showingThumb","loadImage","currentImageElement","dataset","filename","showImage","removeOldImages","loadingImage","usingSprites","showingThumbFilename","setImageSizeAndOffset","currentImageContainer","preloadNearby","getHigherQuality","deleting","thumbContainerHeight","sizeSpecifiedInCSS","thumbAspectRatio","setThumbContainerPos","_yt","lastMouseMoveTime","currentScrubbingImageElement","currentThumbnailImageElement","wt","insertElements","change","sources","_t3$","_t3$$provider","crossorigin","tracks","Tt","_this6","webkitShowPlaybackTargetPicker","original","failed","search","searchParams","tabindex","hasAudio","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","currentSrc","_this$captions2","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","setPreviewThumbnails","kt","webpackContext","req","webpackContextResolve","filterType","findSelected","newParam","formattedParams","pathname","Turbolinks","clearCache","visit","filterTargets","targetValue","hasMatch","ariaChecked","selectTitle","replayWeb","timeout","hasIframe","nodeName","reload","state","input","inputTarget","revealButton","cellClassName","lastCell","lastMargin","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","translateX","firstSlide","positionX","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","afterGap","gap","cellShift","_wrapShiftCell","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","Unidragger","draggable","dragThreshold","getScrollPosition","pageXOffset","pageYOffset","touchActionValue","drag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handlePointerDown","handlePointerUp","handlePointerDone","handleDragStart","handleDragMove","handleDragEnd","handleStaticClick","handles","bindHandles","unbindHandles","bindActivePointerEvents","isTouchStart","isTouchPointer","pointerType","isFocusNode","blur","pointerDownScroll","hasDragStarted","moveVector","isTouchScrolling","dragStartPosition","pointer","previousDragX","direction","originBound","dragMoveTime","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","wrap","onscroll","scroll","scrollMoveX","scrollMoveY","pointerDone","startEvent","activeEvents","PointerEvent","_bindHandles","bindMethod","handle","unbindActivePointerEvents","withPointer","pointerId","pointerIdentifier","withTouch","changedTouch","onmousedown","pointerDown","ontouchstart","onpointerdown","cursorNodes","clickTypes","isCursorNode","isClickType","isOkayElement","pointerDownPointer","pageY","onmousemove","pointerMove","onpointermove","ontouchmove","dragStart","dragMove","isPreventingClicks","onmouseup","pointerUp","onpointerup","ontouchend","dragEnd","staticClick","onpointercancel","ontouchcancel","pointerCancel","onclick","isMouseup","isIgnoringMouseUp","svgURI","PrevNextButton","arrowShape","isPrevious","isLeft","disable","svg","createSVG","path","pathMovements","shape","x0","x1","x2","x3","y1","y2","getArrowMovements","enable","prevNextButtons","prevDirection","nextDirection","prevButton","nextButton","handlePrevButtonClick","handleNextButtonClick","activatePrevNextButtons","updatePrevNextButtons","updatePrevNextButton","disabledIndex","isEnabled","deactivatePrevNextButtons","PageDots","holder","dots","setDots","slidesLength","addDots","removeDots","count","newDots","fill","item","dot","textContent","updateSelected","selectedDot","pageDots","handlePageDotsClick","onPageDotsClick","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","removeFrom","autoPlay","onTick","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","tick","unpause","pauseAutoPlayOnHover","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","insert","fragment","getCellsFragment","isAppend","insertCellElement","endCells","cellChange","prepend","minCellIndex","cellSizeChange","changedCellIndex","prevSelectedElem","lazyAttr","lazySrcAttr","lazySrcsetAttr","imgSelector","lazyLoad","handleLazyLoadComplete","onLazyLoadComplete","getCellLazyImages","cellAttr","cellSrcAttr","cellSrcsetAttr","LazyLoader","img","onComplete","flat","srcset","complete","imagesLoaded","image","ImagesLoaded","onAlways","queryElem","getImages","jqDeferred","Deferred","images","addElementImages","elementNodeTypes","addImage","background","addElementBackgroundImages","childImgs","child","reURL","LoadingImage","Background","exec","addBackground","progressedCount","hasAnyBroken","onProgress","isLoaded","notify","isComplete","jqMethod","getIsImageComplete","confirm","proxyImage","crossOrigin","unbindEvents","makeJQueryPlugin","fn","promise","rootFontSize","App","getRootFontSize","breakpoints","xl","lg","md","sm","xs","breakpoint","getBreakpoint","parent","throttle","debounce","acc","eventConfig","originalEvent","previousBreakpoint","currentBreakpoint","current","fontSize","viewportWidth","minViewportSize","loopAround","val","isDescendant","getFirstKeyboardFocusableElement","focusableElements","el","getKeyboardFocusableElements","GenericCarousel","defaultConfig","setElements","setupAccessibility","beforeInit","defaultState","setUpEvents","slideWrapper","selectorPrefix","previousControl","nextControl","maxIndex","canGoNext","canGoPrevious","announcements","previousLabel","nextLabel","layout","currentIndex","updateControls","previousIndex","nextIndex","formattedArgs","promises","imageElement","allSettled","previousState","renderPreviousControl","renderNextControl","renderAnnouncements","Util","refreshLayout","app","destroyAll","refreshAll","GenericFlickityCarousel","sized","flickity","changeHandler","updatedIndex","parentDefaultState","skipFlickitySelect","sizedClassName","INITIALIZED_CLASS_NAME","CrossfadeCarousel","afterImagesLoad","carouselHeight","maxHeight","runningMaxHeight","slideHeight","renderCurrentSlide","renderCarouselHeight","currentSlide","previousSlide","animations","CarouselModule","hasCaptionCarousel","captionCarousel","slideSizers","sizer","setSlideSizes","scaleFactor","isMobile","constrainWidth","carouselModules","EmbeddedVideo","embedCode","autoInit","initializeIframe","embeddedVideos","VideoGridModule","grid","TRUNCATED","HIDDEN","truncated","showAll","videoGridModules","ACTIVE_CLASS","VitrineModule","activeSlide","setActiveSlide","vitrineModules","Accordion","toggler","closed","close","accordions","AudioModule","playPauseButton","playhead","scrubber","progressBar","timeRemainingLabel","timeRemaining","timeElapsed","progressBarWidth","progressBarOffset","isScrubbing","PAUSED","PLAYING","offsetLeft","_render","_recordDuration","_update","numberOfDecimals","_getTimeRemaining","_getTimeElapsed","playPauseHandler","togglePlayPause","pointerDownHandler","_handleScrubStart","pointerUpHandler","_handleScrubEnd","pointerMoveHandler","_handleScrubSeek","one","globalPauseHandler","_renderDuration","_renderPlayPause","_setPlayheadPosition","_renderTimeRemaining","secondsToReadableTime","clamp","seekedTime","translation","pauseAll","minutes","audioModules","FilterButton","keepKey","urlSearchParams","filterButton","FilterDropDown","filters","activeFilter","openFilter","resetFilters","ariaExpanded","filterDropDown","FocusLock","handleFocusChange","unlockAll","entry","loopTarget","parsedEntry","unlockTarget","lockTarget","locked","focusElementOrFunction","unlock","entryToUse","focusToReturnTo","activeEntry","pop","isPermissible","Header","main","primaryRow","searchButtons","searchInput","expanded","collapsed","searchActive","searchButton","root","rootMargin","observer","IntersectionObserver","sentinel","snapIntoPlaceDelay","intersectionRatio","boundingClientRect","windowHeight","collapse","expand","openSearch","closeSearch","setFocusLock","unlockFocus","focusLock","lock","header","LoadMore","scrollPos","limit","extendLimit","hideButton","loadMore","ParamLinks","links","classRoot","link","isDefault","currentPath","isMatch","paramLinks","Submenu","submenus","previousSubMenu","currentSubMenu","submenu","toggleSubMenu","isOpen","listenerToRemove","TruncateList","gridItems","truncate","truncateList","DEFAULT_CONFIG","VideoPlayer","initButton","Plyr","videoPlayer","MediaStack","slideImages","matte","modal","enterStackButton","hoverImg","activeImg","leftOffset","leftTranslate","stackTabbable","slideImage","clickedOutsideSlide","pointerEvents","linkUrl","translateImages","isTablet","renderMobileModal","highlightImage","getLeftOffset","translateLeft","focusFirstElement","imageWidth","resetImages","activeCard","centerline","newOffset","translateRight","offsets","boundary","rightOffset","newRightOffset","clone","resetMobileModal","firstElement","mediaStack","PreventScroll","triggerPageReload","BrowsingHistory","showHistory","trimParam","paramsString","newSrc","browsingHistory","Stimulus","_templateObject","_templateObject2","require","_taggedTemplateLiteral","strings","raw","freeze","logicalName","identifierForContextKey","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","definitionsFromContext","customElements","polyfillWrapFlushCallback","BuiltInHTMLElement","wrapperForTheName","raise","errorConstructor","requestSubmit","submitter","form","DOMException","validateSubmitter","click","HTMLFormElement","submittersByForm","clickCaptured","candidate","findSubmitterFromClickTarget","FrameLoadingStyle","FetchMethod","FormSubmissionState","FormEnctype","TimingMetric","VisitState","vendor","SubmitEvent","FrameElement","super","delegateConstructor","observedAttributes","connectedCallback","disconnectedCallback","attributeChangedCallback","loadingStyleChanged","sourceURLChanged","disabledChanged","lazy","eager","frameLoadingStyleFromString","autoscroll","isLoading","isPreview","_b","expandURL","locatable","baseURI","getAnchor","anchorMatch","getAction","getExtension","getPathComponents","getLastPathComponent","isPrefixedBy","baseURL","origin","endsWith","getPrefix","locationIsVisitable","rootLocation","getRequestURL","anchor","toCacheKey","FetchResponse","succeeded","ok","clientError","statusCode","serverError","redirected","isHTML","contentType","responseHTML","headers","nextAnimationFrame","parseHTMLDocument","html","DOMParser","parseFromString","unindent","lines","indent","line","uuid","markAsBusy","localName","clearBusyState","FetchRequest","abortController","AbortController","resolveRequestPromise","defaultHeaders","abort","fetchOptions","prepareHeadersForRequest","allowRequestToBeIntercepted","requestStarted","receive","requestErrored","requestFinished","fetchResponse","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","credentials","redirect","isIdempotent","signal","abortSignal","referrer","requestInterception","resume","AppearanceObserver","intersect","lastEntry","isIntersecting","elementAppearedInViewport","intersectionObserver","unobserve","StreamMessage","templateElement","foreignElements","importNode","templateChildren","streamElements","FormSubmission","formElement","mustRedirect","formData","FormData","buildFormData","File","mergeFormDataEntries","fetchRequest","post","put","patch","fetchMethodFromString","formElementAction","enctype","urlEncoded","stringFormData","encoding","multipart","plain","formEnctypeFromString","confirmationMessage","needsConfirmation","_FormSubmissionState","requesting","confirmMethod","perform","_FormSubmissionState2","stopping","request","cookieName","cookie","decodeURIComponent","getCookieValue","getMetaContent","waiting","formSubmission","formSubmissionStarted","formSubmissionFailedWithResponse","requestMustRedirect","responseSucceededWithoutRedirect","formSubmissionErrored","receiving","formSubmissionSucceededWithResponse","formSubmissionFinished","Snapshot","hasAnchor","getElementForAnchor","firstAutofocusableElement","permanentElements","getPermanentElementById","getPermanentElementMapForSnapshot","snapshot","permanentElementMap","currentPermanentElement","newPermanentElement","FormInterceptor","submitBubbled","shouldInterceptFormSubmission","formSubmissionIntercepted","View","resolveRenderPromise","resolveInterceptionPromise","scrollToAnchor","scrollToElement","focusElement","scrollToPosition","scrollToAnchorFromLocation","scrollIntoView","scrollRoot","scrollToTop","renderer","shouldRender","newSnapshot","renderPromise","prepareToRenderSnapshot","renderInterception","allowsImmediateRender","renderSnapshot","viewRenderedSnapshot","finishRenderingSnapshot","invalidate","viewInvalidated","markAsPreview","prepareToRender","finishRendering","FrameView","LinkInterceptor","clickBubbled","respondsToEventTarget","clickEvent","linkClicked","shouldInterceptLinkClick","linkClickIntercepted","willVisit","Renderer","currentSnapshot","willRender","resolvingFunctions","createScriptElement","createdScriptElement","cspNonce","nonce","destinationElement","sourceElement","copyElementAttributes","preservingPermanentElements","bardo","leave","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","permanentElement","placeholder","createPlaceholderForPermanentElement","replaceWith","getPlaceholderById","placeholders","focusFirstAutofocusableElement","connectedSnapshot","elementIsFocusable","currentElement","newElement","FrameRenderer","loadFrameElement","scrollFrameIntoView","activateScriptElements","destinationRange","selectNodeContents","deleteContents","frameElement","sourceRange","extractContents","block","inertScriptElement","newScriptElements","activatedScriptElement","ProgressBar","hiding","visible","trickle","setValue","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","installStylesheetElement","defaultCSS","animationDuration","show","installProgressElement","startTrickling","hide","fadeProgressElement","uninstallProgressElement","stopTrickling","trickleInterval","HeadSnapshot","detailsByOuterHTML","elementIsNoscript","elementWithoutNonce","outerHTML","details","elementType","tracked","elementIsTracked","trackedElementSignature","getScriptElementsNotInSnapshot","getElementsMatchingTypeNotInSnapshot","getStylesheetElementsNotInSnapshot","matchedType","provisionalElements","_this$detailsByOuterH","getMetaValue","findMetaElementByName","elementIsMetaElementWithName","elementIsScript","elementIsStylesheet","PageSnapshot","headSnapshot","fromDocument","headElement","getSetting","cacheControlValue","isPreviewable","isCacheable","isVisitable","defaultOptions","historyChanged","visitCachedSnapshot","SystemStatusCode","PageStage","Visit","restorationIdentifier","timingMetrics","followedRedirect","scrolled","snapshotCached","_Object$assign","snapshotHTML","isSamePage","locationWithActionIsSamePage","adapter","view","history","restorationData","getRestorationDataForIdentifier","silent","recordTimingMetric","visitStart","visitStarted","cancelRender","canceled","visitEnd","completed","visitCompleted","followRedirect","fail","visitFailed","changeHistory","actionForHistory","getHistoryMethodForAction","issueRequest","hasPreloadedResponse","simulateRequest","shouldIssueRequest","startRequest","recordResponse","finishRequest","requestStart","visitRequestStarted","isSuccessful","visitRequestCompleted","visitRequestFailedWithStatusCode","requestEnd","visitRequestFinished","loadResponse","_this$response","cacheSnapshot","renderPage","fromHTMLString","visitRendered","renderError","getCachedSnapshot","getCachedSnapshotForLocation","getPreloadedSnapshot","hasCachedSnapshot","loadCachedSnapshot","redirectedToLocation","visitProposedToLocation","goToSamePageAnchor","contentTypeMismatch","networkFailure","performScroll","scrollToRestoredPosition","visitScrolledToSamePageLocation","lastRenderedLocation","metric","getTime","getTimingMetrics","replaceState","pushState","frame","cancelAnimationFrame","BrowserAdapter","session","showProgressBar","startVisit","showVisitProgressBarAfterDelay","timeoutFailure","hideVisitProgressBar","pageInvalidated","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","progressBarDelay","formProgressBarTimeout","CacheObserver","removeStaleElements","staleElements","FormSubmitObserver","submitCaptured","willSubmitForm","formSubmitted","FrameRedirector","linkInterceptor","formInterceptor","shouldRedirect","findFrameElement","shouldSubmit","History","pageLoaded","onPopState","shouldHandlePopState","turbo","historyPoppedToLocationWithRestorationIdentifier","onPageLoad","updateRestorationData","additionalData","assumeControlOfScrollRestoration","previousScrollRestoration","scrollRestoration","relinquishControlOfScrollRestoration","pageIsLoaded","LinkClickObserver","clickEventIsSignificant","findLinkFromClickTarget","getLocationForLink","willFollowLinkToLocation","followedLinkToLocation","isContentEditable","which","isAction","Navigator","proposeVisit","allowsVisitingLocationWithAction","currentVisit","submitForm","clearSnapshotCache","visitOptions","getActionForFormSubmission","currentAnchor","isRestorationToTop","oldURL","newURL","PageObserver","stage","initial","interpretReadyState","pageIsInteractive","pageIsComplete","pageWillUnload","interactive","pageBecameInteractive","ScrollObserver","onScroll","updatePosition","scrollPositionChanged","StreamObserver","inspectFetchResponse","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageEvent","receiveMessageHTML","connectStreamSource","streamSourceIsConnected","disconnectStreamSource","receivedMessageFromStream","ErrorRenderer","replaceHeadAndBody","_document","newHead","replaceableElement","scriptElements","PageRenderer","trackedElementsAreIdentical","mergeHead","replaceBody","currentHeadSnapshot","newHeadSnapshot","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","activateNewBody","assignNewBody","newHeadStylesheetElements","newHeadScriptElements","currentHeadProvisionalElements","newHeadProvisionalElements","adoptNode","activateNewBodyScriptElements","newBodyScriptElements","HTMLBodyElement","SnapshotCache","snapshots","PageView","snapshotCache","shouldCacheSnapshot","viewWillCacheSnapshot","cachedSnapshot","fromElement","extendURLWithDeprecatedProperties","deprecatedLocationPropertyDescriptors","absoluteURL","pageObserver","cacheObserver","linkClickObserver","formSubmitObserver","scrollObserver","streamObserver","frameRedirector","drive","registerAdapter","renderStreamMessage","setProgressBarDelay","delay","elementDriveEnabled","applicationAllowsFollowingLinkToLocation","getActionForLink","convertLinkWithMethodClickToFormSubmission","linkMethod","getTargetFrameForLink","applicationAllowsVisitingLocation","notifyApplicationAfterVisitingLocation","notifyApplicationAfterPageLoad","notifyApplicationAfterVisitingSamePageLocation","notifyApplicationBeforeCachingSnapshot","notifyApplicationBeforeRender","notifyApplicationAfterRender","frameLoaded","notifyApplicationAfterFrameLoad","frameRendered","notifyApplicationAfterFrameRender","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","newBody","timing","HashChangeEvent","navigator$1","Turbo","__proto__","setConfirmMethod","SnapshotSubstitution","getFrameElementById","activateElement","currentURL","StreamActions","after","targetElements","templateContent","removeDuplicateTargetChildren","StreamElement","beforeRenderEvent","performAction","duplicateChildren","existingChildren","flatMap","newChildrenIds","actionFunction","targetElementsById","targetElementsByQuery","HTMLTemplateElement","description","fetchResponseLoaded","currentFetchRequest","resolveVisitPromise","connected","hasBeenLoaded","settingSourceURL","appearanceObserver","reloadable","loadingStyle","loadSourceURL","sourceURL","previousURL","extractForeignFrameElement","shouldInterceptNavigation","navigateFrame","proposeVisitIfNavigatedWithAction","escape","formActionIsVisitable","define","currentScript","LazyImages","lowResImg","highResImg","inview","highResLoaded","handleInview","renderHighResImage","nextPageFrame","lazy_load","param","nextPage","recordType","frameParams","has_param","query","reset_src","related","record_id","record_type","jsonParams","filterParams","format_filters","page","highResImages","lazyImages"],"mappings":"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","file":"js/application-ee9c82fbe8f5404b9e07.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://d2xda5fikm7vtb.cloudfront.net/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 32);\n","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n/*\nStimulus 3.1.0\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\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n } else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index,\n rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n\n}\n\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n } else {\n const stopImmediatePropagation = event.stopImmediatePropagation;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n }\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\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach(eventListener => eventListener.connect());\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach(eventListener => eventListener.disconnect());\n }\n }\n\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n\n bindingDisconnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n }\n\n handleError(error, message) {\n let detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.application.handleError(error, \"Error \".concat(message), detail);\n }\n\n fetchEventListenerForBinding(binding) {\n const eventTarget = binding.eventTarget,\n eventName = binding.eventName,\n eventOptions = binding.eventOptions;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\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\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n\n return eventListener;\n }\n\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n\n if (this.started) {\n eventListener.connect();\n }\n\n return eventListener;\n }\n\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n\n return eventListenerMap;\n }\n\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions).sort().forEach(key => {\n parts.push(\"\".concat(eventOptions[key] ? \"\" : \"!\").concat(key));\n });\n return parts.join(\":\");\n }\n\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\n\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n identifier: matches[5],\n methodName: matches[7]\n };\n}\n\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n } else if (eventTargetName == \"document\") {\n return document;\n }\n}\n\nfunction parseEventOptions(eventOptions) {\n return eventOptions.split(\":\").reduce((options, token) => Object.assign(options, {\n [token.replace(/^!/, \"\")]: !/^!/.test(token)\n }), {});\n}\n\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\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}\n\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => \"-\".concat(char.toLowerCase()));\n}\n\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n constructor(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n\n static forToken(token) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content));\n }\n\n toString() {\n const eventNameSuffix = this.eventTargetName ? \"@\".concat(this.eventTargetName) : \"\";\n return \"\".concat(this.eventName).concat(eventNameSuffix, \"->\").concat(this.identifier, \"#\").concat(this.methodName);\n }\n\n get params() {\n const params = {};\n const pattern = new RegExp(\"^data-\".concat(this.identifier, \"-(.+)-param$\"));\n\n for (const _ref of Array.from(this.element.attributes)) {\n const name = _ref.name;\n const value = _ref.value;\n const match = name.match(pattern);\n const key = match && match[1];\n\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n\n return params;\n }\n\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n\n}\n\nconst defaultEventNames = {\n \"a\": e => \"click\",\n \"button\": e => \"click\",\n \"form\": e => \"submit\",\n \"details\": e => \"toggle\",\n \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n \"select\": e => \"change\",\n \"textarea\": e => \"input\"\n};\n\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\n\nfunction error(message) {\n throw new Error(message);\n}\n\nfunction typecast(value) {\n try {\n return JSON.parse(value);\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\n get index() {\n return this.action.index;\n }\n\n get eventTarget() {\n return this.action.eventTarget;\n }\n\n get eventOptions() {\n return this.action.eventOptions;\n }\n\n get identifier() {\n return this.context.identifier;\n }\n\n handleEvent(event) {\n if (this.willBeInvokedByEvent(event) && this.shouldBeInvokedPerSelf(event)) {\n this.processStopPropagation(event);\n this.processPreventDefault(event);\n this.invokeWithEvent(event);\n }\n }\n\n get eventName() {\n return this.action.eventName;\n }\n\n get method() {\n const method = this.controller[this.methodName];\n\n if (typeof method == \"function\") {\n return method;\n }\n\n throw new Error(\"Action \\\"\".concat(this.action, \"\\\" references undefined method \\\"\").concat(this.methodName, \"\\\"\"));\n }\n\n processStopPropagation(event) {\n if (this.eventOptions.stop) {\n event.stopPropagation();\n }\n }\n\n processPreventDefault(event) {\n if (this.eventOptions.prevent) {\n event.preventDefault();\n }\n }\n\n invokeWithEvent(event) {\n const target = event.target,\n currentTarget = event.currentTarget;\n\n try {\n const params = this.action.params;\n const actionEvent = Object.assign(event, {\n params\n });\n this.method.call(this.controller, actionEvent);\n this.context.logDebugActivity(this.methodName, {\n event,\n target,\n currentTarget,\n action: this.methodName\n });\n } catch (error) {\n const identifier = this.identifier,\n controller = this.controller,\n element = this.element,\n index = this.index;\n const detail = {\n identifier,\n controller,\n element,\n index,\n event\n };\n this.context.handleError(error, \"invoking action \\\"\".concat(this.action, \"\\\"\"), detail);\n }\n }\n\n shouldBeInvokedPerSelf(event) {\n if (this.action.eventOptions.self === true) {\n return this.action.element === event.target;\n } else {\n return true;\n }\n }\n\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n\n if (this.element === eventTarget) {\n return true;\n } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n } else {\n return this.scope.containsElement(this.action.element);\n }\n }\n\n get controller() {\n return this.context.controller;\n }\n\n get methodName() {\n return this.action.methodName;\n }\n\n get element() {\n return this.scope.element;\n }\n\n get scope() {\n return this.context.scope;\n }\n\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = {\n attributes: true,\n childList: true,\n subtree: true\n };\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\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n\n callback();\n\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n } else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n\n processAttributeChange(node, attributeName) {\n const element = node;\n\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n } else {\n this.removeElement(element);\n }\n } else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n\n matchElementsInTree() {\n let tree = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.element;\n return this.delegate.matchElementsInTree(tree);\n }\n\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n } else {\n return this.element.contains(element);\n }\n }\n\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\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\n get element() {\n return this.elementObserver.element;\n }\n\n get selector() {\n return \"[\".concat(this.attributeName, \"]\");\n }\n\n start() {\n this.elementObserver.start();\n }\n\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n\n stop() {\n this.elementObserver.stop();\n }\n\n refresh() {\n this.elementObserver.refresh();\n }\n\n get started() {\n return this.elementObserver.started;\n }\n\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\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\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\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\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, {\n attributes: true,\n attributeOldValue: true\n });\n this.refresh();\n }\n }\n\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n\n const value = this.element.getAttribute(attributeName);\n\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue) this.stringMapKeyRemoved(key, attributeName, oldValue);\n } else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map(attribute => attribute.name);\n }\n\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\n\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\n\nfunction fetch(map, key) {\n let values = map.get(key);\n\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n\n return values;\n}\n\nfunction prune(map, key) {\n const values = map.get(key);\n\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\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\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\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some(set => set.has(value));\n }\n\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n\n getKeysForValue(value) {\n return Array.from(this.valuesByKey).filter(_ref2 => {\n let _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n values = _ref3[1];\n\n return values.has(value);\n }).map(_ref4 => {\n let _ref5 = _slicedToArray(_ref4, 2),\n key = _ref5[0],\n values = _ref5[1];\n\n return key;\n });\n }\n\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\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\n get started() {\n return this.attributeObserver.started;\n }\n\n start() {\n this.attributeObserver.start();\n }\n\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n\n stop() {\n this.attributeObserver.stop();\n }\n\n refresh() {\n this.attributeObserver.refresh();\n }\n\n get element() {\n return this.attributeObserver.element;\n }\n\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n\n elementAttributeValueChanged(element) {\n const _this$refreshTokensFo = this.refreshTokensForElement(element),\n _this$refreshTokensFo2 = _slicedToArray(_this$refreshTokensFo, 2),\n unmatchedTokens = _this$refreshTokensFo2[0],\n matchedTokens = _this$refreshTokensFo2[1];\n\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n\n tokensMatched(tokens) {\n tokens.forEach(token => this.tokenMatched(token));\n }\n\n tokensUnmatched(tokens) {\n tokens.forEach(token => this.tokenUnmatched(token));\n }\n\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(_ref6 => {\n let _ref7 = _slicedToArray(_ref6, 2),\n previousToken = _ref7[0],\n currentToken = _ref7[1];\n\n return !tokensAreEqual(previousToken, currentToken);\n });\n\n if (firstDifferingIndex == -1) {\n return [[], []];\n } else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n\n}\n\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter(content => content.length).map((content, index) => ({\n element,\n attributeName,\n content,\n index\n }));\n}\n\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({\n length\n }, (_, index) => [left[index], right[index]]);\n}\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\n get started() {\n return this.tokenListObserver.started;\n }\n\n start() {\n this.tokenListObserver.start();\n }\n\n stop() {\n this.tokenListObserver.stop();\n }\n\n refresh() {\n this.tokenListObserver.refresh();\n }\n\n get element() {\n return this.tokenListObserver.element;\n }\n\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n\n tokenMatched(token) {\n const element = token.element;\n\n const _this$fetchParseResul = this.fetchParseResultForToken(token),\n value = _this$fetchParseResul.value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n\n tokenUnmatched(token) {\n const element = token.element;\n\n const _this$fetchParseResul2 = this.fetchParseResultForToken(token),\n value = _this$fetchParseResul2.value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n\n return parseResult;\n }\n\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n\n return valuesByToken;\n }\n\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return {\n value\n };\n } catch (error) {\n return {\n error\n };\n }\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\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n\n get element() {\n return this.context.element;\n }\n\n get identifier() {\n return this.context.identifier;\n }\n\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n\n get schema() {\n return this.context.schema;\n }\n\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\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\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n\n disconnectAllActions() {\n this.bindings.forEach(binding => this.delegate.bindingDisconnected(binding));\n this.bindingsByAction.clear();\n }\n\n parseValueForToken(token) {\n const action = Action.forToken(token);\n\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\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\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n\n stop() {\n this.stringMapObserver.stop();\n }\n\n get element() {\n return this.context.element;\n }\n\n get controller() {\n return this.context.controller;\n }\n\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null) return;\n\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n\n this.invokeChangedCallback(name, value, oldValue);\n }\n\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n } else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n\n invokeChangedCallbacksForDefaultValues() {\n for (const _ref8 of this.valueDescriptors) {\n const key = _ref8.key;\n const name = _ref8.name;\n const defaultValue = _ref8.defaultValue;\n const writer = _ref8.writer;\n\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = \"\".concat(name, \"Changed\");\n const changedMethod = this.receiver[changedMethodName];\n\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n\n changedMethod.call(this.receiver, value, oldValue);\n } catch (error) {\n if (!(error instanceof TypeError)) throw error;\n throw new TypeError(\"Stimulus Value \\\"\".concat(this.context.identifier, \".\").concat(descriptor.name, \"\\\" - \").concat(error.message));\n }\n }\n }\n\n get valueDescriptors() {\n const valueDescriptorMap = this.valueDescriptorMap;\n return Object.keys(valueDescriptorMap).map(key => valueDescriptorMap[key]);\n }\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\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = \"has\".concat(capitalize(descriptor.name));\n return this.receiver[hasMethodName];\n }\n\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n\n tokenMatched(_ref9) {\n let element = _ref9.element,\n name = _ref9.content;\n\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n\n tokenUnmatched(_ref10) {\n let element = _ref10.element,\n name = _ref10.content;\n this.disconnectTarget(element, name);\n }\n\n connectTarget(element, name) {\n var _a;\n\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\n disconnectTarget(element, name) {\n var _a;\n\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\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\n get attributeName() {\n return \"data-\".concat(this.context.identifier, \"-target\");\n }\n\n get element() {\n return this.context.element;\n }\n\n get scope() {\n return this.context.scope;\n }\n\n}\n\nclass Context {\n constructor(module, scope) {\n var _this = this;\n\n this.logDebugActivity = function (functionName) {\n let detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const identifier = _this.identifier,\n controller = _this.controller,\n element = _this.element;\n detail = Object.assign({\n identifier,\n controller,\n element\n }, detail);\n\n _this.application.logDebugActivity(_this.identifier, functionName, detail);\n };\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\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n } catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n } catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n } catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n\n get application() {\n return this.module.application;\n }\n\n get identifier() {\n return this.module.identifier;\n }\n\n get schema() {\n return this.application.schema;\n }\n\n get dispatcher() {\n return this.application.dispatcher;\n }\n\n get element() {\n return this.scope.element;\n }\n\n get parentElement() {\n return this.element.parentElement;\n }\n\n handleError(error, message) {\n let detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const identifier = this.identifier,\n controller = this.controller,\n element = this.element;\n detail = Object.assign({\n identifier,\n controller,\n element\n }, detail);\n this.application.handleError(error, \"Error \".concat(message), detail);\n }\n\n targetConnected(element, name) {\n this.invokeControllerMethod(\"\".concat(name, \"TargetConnected\"), element);\n }\n\n targetDisconnected(element, name) {\n this.invokeControllerMethod(\"\".concat(name, \"TargetDisconnected\"), element);\n }\n\n invokeControllerMethod(methodName) {\n const controller = this.controller;\n\n if (typeof controller[methodName] == \"function\") {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n controller[methodName](...args);\n }\n }\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}\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}\n\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n\n return ancestors.reverse();\n}\n\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\n\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map(key => [key, definition[key]]) : [];\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\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}\n\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n\n return blessedProperties;\n }, {});\n}\n\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n\n if (descriptor) {\n Object.assign(shadowProperties, {\n [key]: descriptor\n });\n }\n\n return shadowProperties;\n }, {});\n}\n\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n\n return descriptor;\n }\n}\n\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return object => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n } else {\n return Object.getOwnPropertyNames;\n }\n})();\n\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n\n extended.prototype = Object.create(constructor.prototype, {\n constructor: {\n value: extended\n }\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n\n const b = extendWithReflect(a);\n\n b.prototype.a = function () {};\n\n return new b();\n }\n\n try {\n testReflectExtension();\n return extendWithReflect;\n } catch (error) {\n return constructor => class extended extends constructor {};\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\n get identifier() {\n return this.definition.identifier;\n }\n\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n\n return context;\n }\n\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n\n get(name) {\n return this.getAll(name)[0];\n }\n\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n\n getDataKey(name) {\n return \"\".concat(name, \"-class\");\n }\n\n get data() {\n return this.scope.data;\n }\n\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n\n get element() {\n return this.scope.element;\n }\n\n get identifier() {\n return this.scope.identifier;\n }\n\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n } else {\n return false;\n }\n }\n\n getAttributeNameForKey(key) {\n return \"data-\".concat(this.identifier, \"-\").concat(dasherize(key));\n }\n\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return \"[\".concat(attributeName, \"~=\\\"\").concat(token, \"\\\"]\");\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n\n get element() {\n return this.scope.element;\n }\n\n get identifier() {\n return this.scope.identifier;\n }\n\n get schema() {\n return this.scope.schema;\n }\n\n has(targetName) {\n return this.find(targetName) != null;\n }\n\n find() {\n for (var _len2 = arguments.length, targetNames = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n targetNames[_key2] = arguments[_key2];\n }\n\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n\n findAll() {\n for (var _len3 = arguments.length, targetNames = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n targetNames[_key3] = arguments[_key3];\n }\n\n return targetNames.reduce((targets, targetName) => [...targets, ...this.findAllTargets(targetName), ...this.findAllLegacyTargets(targetName)], []);\n }\n\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map(element => this.deprecate(element, targetName));\n }\n\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = \"\".concat(this.identifier, \".\").concat(targetName);\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n\n deprecate(element, targetName) {\n if (element) {\n const identifier = this.identifier;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, \"target:\".concat(targetName), \"Please replace \".concat(attributeName, \"=\\\"\").concat(identifier, \".\").concat(targetName, \"\\\" with \").concat(revisedAttributeName, \"=\\\"\").concat(targetName, \"\\\". \") + \"The \".concat(attributeName, \" attribute is deprecated and will be removed in a future version of Stimulus.\"));\n }\n\n return element;\n }\n\n get guide() {\n return this.scope.guide;\n }\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\n this.containsElement = element => {\n return element.closest(this.controllerSelector) === this.element;\n };\n\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n }\n\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n\n findAllElements(selector) {\n return [...(this.element.matches(selector) ? [this.element] : []), ...this.queryElements(selector).filter(this.containsElement)];\n }\n\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\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\n start() {\n this.valueListObserver.start();\n }\n\n stop() {\n this.valueListObserver.stop();\n }\n\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n\n parseValueForToken(token) {\n const element = token.element,\n identifier = token.content;\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n\n return scope;\n }\n\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n\n return scopesByIdentifier;\n }\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\n get element() {\n return this.application.element;\n }\n\n get schema() {\n return this.application.schema;\n }\n\n get logger() {\n return this.application.logger;\n }\n\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n\n start() {\n this.scopeObserver.start();\n }\n\n stop() {\n this.scopeObserver.stop();\n }\n\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n }\n\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n this.disconnectModule(module);\n }\n }\n\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n return module.contexts.find(context => context.element == element);\n }\n }\n\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.disconnectContextForScope(scope);\n }\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\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}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: identifier => \"data-\".concat(identifier, \"-target\")\n};\n\nclass Application {\n constructor() {\n var _this2 = this;\n\n let element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.documentElement;\n let schema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultSchema;\n this.logger = console;\n this.debug = false;\n\n this.logDebugActivity = function (identifier, functionName) {\n let detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_this2.debug) {\n _this2.logFormattedMessage(identifier, functionName, detail);\n }\n };\n\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n\n static start(element, schema) {\n const application = new Application(element, schema);\n application.start();\n return application;\n }\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\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n\n register(identifier, controllerConstructor) {\n this.load({\n identifier,\n controllerConstructor\n });\n }\n\n load(head) {\n for (var _len4 = arguments.length, rest = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n rest[_key4 - 1] = arguments[_key4];\n }\n\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\n unload(head) {\n for (var _len5 = arguments.length, rest = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n rest[_key5 - 1] = arguments[_key5];\n }\n\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach(identifier => this.router.unloadIdentifier(identifier));\n }\n\n get controllers() {\n return this.router.contexts.map(context => context.controller);\n }\n\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n\n handleError(error, message, detail) {\n var _a;\n\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\n logFormattedMessage(identifier, functionName) {\n let detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n detail = Object.assign({\n application: this\n }, detail);\n this.logger.groupCollapsed(\"\".concat(identifier, \" #\").concat(functionName));\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n\n}\n\nfunction domReady() {\n return new Promise(resolve => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\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}\n\nfunction propertiesForClassDefinition(key) {\n return {\n [\"\".concat(key, \"Class\")]: {\n get() {\n const classes = this.classes;\n\n if (classes.has(key)) {\n return classes.get(key);\n } else {\n const attribute = classes.getAttributeName(key);\n throw new Error(\"Missing attribute \\\"\".concat(attribute, \"\\\"\"));\n }\n }\n\n },\n [\"\".concat(key, \"Classes\")]: {\n get() {\n return this.classes.getAll(key);\n }\n\n },\n [\"has\".concat(capitalize(key), \"Class\")]: {\n get() {\n return this.classes.has(key);\n }\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}\n\nfunction propertiesForTargetDefinition(name) {\n return {\n [\"\".concat(name, \"Target\")]: {\n get() {\n const target = this.targets.find(name);\n\n if (target) {\n return target;\n } else {\n throw new Error(\"Missing target element \\\"\".concat(name, \"\\\" for \\\"\").concat(this.identifier, \"\\\" controller\"));\n }\n }\n\n },\n [\"\".concat(name, \"Targets\")]: {\n get() {\n return this.targets.findAll(name);\n }\n\n },\n [\"has\".concat(capitalize(name), \"Target\")]: {\n get() {\n return this.targets.has(name);\n }\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, {\n [attributeName]: valueDescriptor\n });\n }, {});\n }\n\n }\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\n\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const key = definition.key,\n name = definition.name,\n read = definition.reader,\n write = definition.writer;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n\n if (value !== null) {\n return read(value);\n } else {\n return definition.defaultValue;\n }\n },\n\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n } else {\n this.data.set(key, write(value));\n }\n }\n\n },\n [\"has\".concat(capitalize(name))]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n }\n\n }\n };\n}\n\nfunction parseValueDefinitionPair(_ref11, controller) {\n let _ref12 = _slicedToArray(_ref11, 2),\n token = _ref12[0],\n typeDefinition = _ref12[1];\n\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition\n });\n}\n\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n\n case Boolean:\n return \"boolean\";\n\n case Number:\n return \"number\";\n\n case Object:\n return \"object\";\n\n case String:\n return \"string\";\n }\n}\n\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n\n case \"number\":\n return \"number\";\n\n case \"string\":\n return \"string\";\n }\n\n if (Array.isArray(defaultValue)) return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\") return \"object\";\n}\n\nfunction parseValueTypeObject(payload) {\n const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n if (!typeFromObject) return;\n const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n\n if (typeFromObject !== defaultValueType) {\n const propertyPath = payload.controller ? \"\".concat(payload.controller, \".\").concat(payload.token) : payload.token;\n throw new Error(\"The specified default value for the Stimulus Value \\\"\".concat(propertyPath, \"\\\" must match the defined type \\\"\").concat(typeFromObject, \"\\\". The provided default value of \\\"\").concat(payload.typeObject.default, \"\\\" is of type \\\"\").concat(defaultValueType, \"\\\".\"));\n }\n\n return typeFromObject;\n}\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) return type;\n const propertyPath = payload.controller ? \"\".concat(payload.controller, \".\").concat(payload.typeDefinition) : payload.token;\n throw new Error(\"Unknown value type \\\"\".concat(propertyPath, \"\\\" for \\\"\").concat(payload.token, \"\\\" value\"));\n}\n\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant) return defaultValuesByType[constant];\n const defaultValue = typeDefinition.default;\n if (defaultValue !== undefined) return defaultValue;\n return typeDefinition;\n}\n\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const key = \"\".concat(dasherize(payload.token), \"-value\");\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n\n get defaultValue() {\n return defaultValueForDefinition(payload.typeDefinition);\n },\n\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(payload.typeDefinition) !== undefined;\n },\n\n reader: readers[type],\n writer: writers[type] || writers.default\n };\n}\n\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n\n boolean: false,\n number: 0,\n\n get object() {\n return {};\n },\n\n string: \"\"\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n\n if (!Array.isArray(array)) {\n throw new TypeError(\"expected value of type \\\"array\\\" but instead got value \\\"\".concat(value, \"\\\" of type \\\"\").concat(parseValueTypeDefault(array), \"\\\"\"));\n }\n\n return array;\n },\n\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n\n number(value) {\n return Number(value);\n },\n\n object(value) {\n const object = JSON.parse(value);\n\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(\"expected value of type \\\"object\\\" but instead got value \\\"\".concat(value, \"\\\" of type \\\"\").concat(parseValueTypeDefault(object), \"\\\"\"));\n }\n\n return object;\n },\n\n string(value) {\n return value;\n }\n\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON\n};\n\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\n\nfunction writeString(value) {\n return \"\".concat(value);\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n\n static get shouldLoad() {\n return true;\n }\n\n get application() {\n return this.context.application;\n }\n\n get scope() {\n return this.context.scope;\n }\n\n get element() {\n return this.scope.element;\n }\n\n get identifier() {\n return this.scope.identifier;\n }\n\n get targets() {\n return this.scope.targets;\n }\n\n get classes() {\n return this.scope.classes;\n }\n\n get data() {\n return this.scope.data;\n }\n\n initialize() {}\n\n connect() {}\n\n disconnect() {}\n\n dispatch(eventName) {\n let _ref13 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref13$target = _ref13.target,\n target = _ref13$target === void 0 ? this.element : _ref13$target,\n _ref13$detail = _ref13.detail,\n detail = _ref13$detail === void 0 ? {} : _ref13$detail,\n _ref13$prefix = _ref13.prefix,\n prefix = _ref13$prefix === void 0 ? this.identifier : _ref13$prefix,\n _ref13$bubbles = _ref13.bubbles,\n bubbles = _ref13$bubbles === void 0 ? true : _ref13$bubbles,\n _ref13$cancelable = _ref13.cancelable,\n cancelable = _ref13$cancelable === void 0 ? true : _ref13$cancelable;\n\n const type = prefix ? \"\".concat(prefix, \":\").concat(eventName) : eventName;\n const event = new CustomEvent(type, {\n detail,\n bubbles,\n cancelable\n });\n target.dispatchEvent(event);\n return event;\n }\n\n}\n\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// Flickity main\n\n/* eslint-disable max-params */\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('ev-emitter'), require('get-size'), require('fizzy-ui-utils'), require('./cell'), require('./slide'), require('./animate'));\n } else {\n // browser global\n let _Flickity = window.Flickity;\n window.Flickity = factory(window, window.EvEmitter, window.getSize, window.fizzyUIUtils, _Flickity.Cell, _Flickity.Slide, _Flickity.animatePrototype);\n }\n})(typeof window != 'undefined' ? window : this, function factory(window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype) {\n /* eslint-enable max-params */\n // vars\n const getComputedStyle = window.getComputedStyle,\n console = window.console;\n let jQuery = window.jQuery; // -------------------------- Flickity -------------------------- //\n // globally unique identifiers\n\n let GUID = 0; // internal store of all Flickity intances\n\n let instances = {};\n\n function Flickity(element, options) {\n let queryElement = utils.getQueryElement(element);\n\n if (!queryElement) {\n if (console) console.error(\"Bad element for Flickity: \".concat(queryElement || element));\n return;\n }\n\n this.element = queryElement; // do not initialize twice on same element\n\n if (this.element.flickityGUID) {\n let instance = instances[this.element.flickityGUID];\n if (instance) instance.option(options);\n return instance;\n } // add jQuery\n\n\n if (jQuery) {\n this.$element = jQuery(this.element);\n } // options\n\n\n this.options = _objectSpread({}, this.constructor.defaults);\n this.option(options); // kick things off\n\n this._create();\n }\n\n Flickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075,\n // friction when free-scrolling\n friction: 0.28,\n // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true // watchCSS: false,\n // wrapAround: false\n\n }; // hash of methods triggered on _create()\n\n Flickity.create = {};\n let proto = Flickity.prototype; // inherit EventEmitter\n\n Object.assign(proto, EvEmitter.prototype);\n\n proto._create = function () {\n let _this$options = this.options,\n resize = _this$options.resize,\n watchCSS = _this$options.watchCSS,\n rightToLeft = _this$options.rightToLeft; // add id for Flickity.data\n\n let id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n\n instances[id] = this; // associate via id\n // initial properties\n\n this.selectedIndex = 0; // how many frames slider has been in same position\n\n this.restingFrames = 0; // initial physics properties\n\n this.x = 0;\n this.velocity = 0;\n this.beginMargin = rightToLeft ? 'marginRight' : 'marginLeft';\n this.endMargin = rightToLeft ? 'marginLeft' : 'marginRight'; // create viewport & slider\n\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n\n this._createSlider(); // used for keyboard navigation\n\n\n this.focusableElems = [this.element];\n\n if (resize || watchCSS) {\n window.addEventListener('resize', this);\n } // add listeners from on option\n\n\n for (let eventName in this.options.on) {\n let listener = this.options.on[eventName];\n this.on(eventName, listener);\n }\n\n for (let method in Flickity.create) {\n Flickity.create[method].call(this);\n }\n\n if (watchCSS) {\n this.watchCSS();\n } else {\n this.activate();\n }\n };\n /**\n * set options\n * @param {Object} opts - options to extend\n */\n\n\n proto.option = function (opts) {\n Object.assign(this.options, opts);\n };\n\n proto.activate = function () {\n if (this.isActive) return;\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n\n if (this.options.rightToLeft) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize(); // move initial cell elements so they can be loaded as cells\n\n let cellElems = this._filterFindCellElements(this.element.children);\n\n this.slider.append(...cellElems);\n this.viewport.append(this.slider);\n this.element.append(this.viewport); // get cells from children\n\n this.reloadCells();\n\n if (this.options.accessibility) {\n // allow element to focusable\n this.element.tabIndex = 0; // listen for key presses\n\n this.element.addEventListener('keydown', this);\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex(); // flag for initial activation, for using initialIndex\n\n this.isInitActivated = true; // ready event. #493\n\n this.dispatchEvent('ready');\n }; // slider positions the cells\n\n\n proto._createSlider = function () {\n // slider element does all the positioning\n let slider = document.createElement('div');\n slider.className = 'flickity-slider';\n this.slider = slider;\n };\n\n proto._filterFindCellElements = function (elems) {\n return utils.filterFindElements(elems, this.options.cellSelector);\n }; // goes through all children\n\n\n proto.reloadCells = function () {\n // collection of item elements\n this.cells = this._makeCells(this.slider.children);\n this.positionCells();\n\n this._updateWrapShiftCells();\n\n this.setGallerySize();\n };\n /**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\n\n\n proto._makeCells = function (elems) {\n let cellElems = this._filterFindCellElements(elems); // create new Cells for collection\n\n\n return cellElems.map(cellElem => new Cell(cellElem));\n };\n\n proto.getLastCell = function () {\n return this.cells[this.cells.length - 1];\n };\n\n proto.getLastSlide = function () {\n return this.slides[this.slides.length - 1];\n }; // positions all cells\n\n\n proto.positionCells = function () {\n // size all cells\n this._sizeCells(this.cells); // position all cells\n\n\n this._positionCells(0);\n };\n /**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\n\n\n proto._positionCells = function (index) {\n index = index || 0; // also measure maxCellHeight\n // start 0 if positioning all cells\n\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n let cellX = 0; // get cellX\n\n if (index > 0) {\n let startCell = this.cells[index - 1];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n\n this.cells.slice(index).forEach(cell => {\n cell.x = cellX;\n\n this._renderCellPosition(cell, cellX);\n\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max(cell.size.outerHeight, this.maxCellHeight);\n }); // keep track of cellX for wrap-around\n\n this.slideableWidth = cellX; // slides\n\n this.updateSlides(); // contain slides target\n\n this._containSlides(); // update slidesWidth\n\n\n this.slidesWidth = this.cells.length ? this.getLastSlide().target - this.slides[0].target : 0;\n };\n\n proto._renderCellPosition = function (cell, x) {\n // render position of cell with in slider\n let sideOffset = this.options.rightToLeft ? -1 : 1;\n let renderX = x * sideOffset;\n if (this.options.percentPosition) renderX *= this.size.innerWidth / cell.size.width;\n let positionValue = this.getPositionValue(renderX);\n cell.element.style.transform = \"translateX( \".concat(positionValue, \" )\");\n };\n /**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\n\n\n proto._sizeCells = function (cells) {\n cells.forEach(cell => cell.getSize());\n }; // -------------------------- -------------------------- //\n\n\n proto.updateSlides = function () {\n this.slides = [];\n if (!this.cells.length) return;\n let beginMargin = this.beginMargin,\n endMargin = this.endMargin;\n let slide = new Slide(beginMargin, endMargin, this.cellAlign);\n this.slides.push(slide);\n\n let canCellFit = this._getCanCellFit();\n\n this.cells.forEach((cell, i) => {\n // just add cell if first cell in slide\n if (!slide.cells.length) {\n slide.addCell(cell);\n return;\n }\n\n let slideWidth = slide.outerWidth - slide.firstMargin + (cell.size.outerWidth - cell.size[endMargin]);\n\n if (canCellFit(i, slideWidth)) {\n slide.addCell(cell);\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n slide = new Slide(beginMargin, endMargin, this.cellAlign);\n this.slides.push(slide);\n slide.addCell(cell);\n }\n }); // last slide\n\n slide.updateTarget(); // update .selectedSlide\n\n this.updateSelectedSlide();\n };\n\n proto._getCanCellFit = function () {\n let groupCells = this.options.groupCells;\n if (!groupCells) return () => false;\n\n if (typeof groupCells == 'number') {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n let number = parseInt(groupCells, 10);\n return i => i % number !== 0;\n } // default, group by width of slide\n\n\n let percent = 1; // parse '75%\n\n let percentMatch = typeof groupCells == 'string' && groupCells.match(/^(\\d+)%$/);\n if (percentMatch) percent = parseInt(percentMatch[1], 10) / 100;\n let groupWidth = (this.size.innerWidth + 1) * percent;\n return (i, slideWidth) => slideWidth <= groupWidth;\n }; // alias _init for jQuery plugin .flickity()\n\n\n proto._init = proto.reposition = function () {\n this.positionCells();\n this.positionSliderAtSelected();\n };\n\n proto.getSize = function () {\n this.size = getSize(this.element);\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n };\n\n let cellAlignShorthands = {\n left: 0,\n center: 0.5,\n right: 1\n };\n\n proto.setCellAlign = function () {\n let _this$options2 = this.options,\n cellAlign = _this$options2.cellAlign,\n rightToLeft = _this$options2.rightToLeft;\n let shorthand = cellAlignShorthands[cellAlign];\n this.cellAlign = shorthand !== undefined ? shorthand : cellAlign;\n if (rightToLeft) this.cellAlign = 1 - this.cellAlign;\n };\n\n proto.setGallerySize = function () {\n if (!this.options.setGallerySize) return;\n let height = this.options.adaptiveHeight && this.selectedSlide ? this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = \"\".concat(height, \"px\");\n };\n\n proto._updateWrapShiftCells = function () {\n // update isWrapping\n this.isWrapping = this.getIsWrapping(); // only for wrap-around\n\n if (!this.isWrapping) return; // unshift previous cells\n\n this._unshiftCells(this.beforeShiftCells);\n\n this._unshiftCells(this.afterShiftCells); // get before cells\n // initial gap\n\n\n let beforeGapX = this.cursorPosition;\n let lastIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells(beforeGapX, lastIndex, -1); // get after cells\n // ending gap between last cell and end of gallery viewport\n\n let afterGapX = this.size.innerWidth - this.cursorPosition; // start cloning at first cell, working forwards\n\n this.afterShiftCells = this._getGapCells(afterGapX, 0, 1);\n };\n\n proto.getIsWrapping = function () {\n let wrapAround = this.options.wrapAround;\n if (!wrapAround || this.slides.length < 2) return false;\n if (wrapAround !== 'fill') return true; // check that slides can fit\n\n let gapWidth = this.slideableWidth - this.size.innerWidth;\n if (gapWidth > this.size.innerWidth) return true; // gap * 2x big, all good\n // check that content width - shifting cell is bigger than viewport width\n\n for (let cell of this.cells) {\n if (cell.size.outerWidth > gapWidth) return false;\n }\n\n return true;\n };\n\n proto._getGapCells = function (gapX, cellIndex, increment) {\n // keep adding cells until the cover the initial gap\n let cells = [];\n\n while (gapX > 0) {\n let cell = this.cells[cellIndex];\n if (!cell) break;\n cells.push(cell);\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n\n return cells;\n }; // ----- contain & wrap ----- //\n // contain cell targets so no excess sliding\n\n\n proto._containSlides = function () {\n let isContaining = this.options.contain && !this.isWrapping && this.cells.length;\n if (!isContaining) return;\n let contentWidth = this.slideableWidth - this.getLastCell().size[this.endMargin]; // content is less than gallery size\n\n let isContentSmaller = contentWidth < this.size.innerWidth;\n\n if (isContentSmaller) {\n // all cells fit inside gallery\n this.slides.forEach(slide => {\n slide.target = contentWidth * this.cellAlign;\n });\n } else {\n // contain to bounds\n let beginBound = this.cursorPosition + this.cells[0].size[this.beginMargin];\n let endBound = contentWidth - this.size.innerWidth * (1 - this.cellAlign);\n this.slides.forEach(slide => {\n slide.target = Math.max(slide.target, beginBound);\n slide.target = Math.min(slide.target, endBound);\n });\n }\n }; // ----- events ----- //\n\n /**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\n\n\n proto.dispatchEvent = function (type, event, args) {\n let emitArgs = event ? [event].concat(args) : args;\n this.emitEvent(type, emitArgs);\n\n if (jQuery && this.$element) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let $event = type;\n\n if (event) {\n // create jQuery event\n let jQEvent = new jQuery.Event(event);\n jQEvent.type = type;\n $event = jQEvent;\n }\n\n this.$element.trigger($event, args);\n }\n };\n\n const unidraggerEvents = ['dragStart', 'dragMove', 'dragEnd', 'pointerDown', 'pointerMove', 'pointerEnd', 'staticClick'];\n let _emitEvent = proto.emitEvent;\n\n proto.emitEvent = function (eventName, args) {\n if (eventName === 'staticClick') {\n // add cellElem and cellIndex args to staticClick\n let clickedCell = this.getParentCell(args[0].target);\n let cellElem = clickedCell && clickedCell.element;\n let cellIndex = clickedCell && this.cells.indexOf(clickedCell);\n args = args.concat(cellElem, cellIndex);\n } // do regular thing\n\n\n _emitEvent.call(this, eventName, args); // duck-punch in jQuery events for Unidragger events\n\n\n let isUnidraggerEvent = unidraggerEvents.includes(eventName);\n if (!isUnidraggerEvent || !jQuery || !this.$element) return;\n eventName += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let event = args.shift(0);\n let jQEvent = new jQuery.Event(event);\n jQEvent.type = eventName;\n this.$element.trigger(jQEvent, args);\n }; // -------------------------- select -------------------------- //\n\n /**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\n\n\n proto.select = function (index, isWrap, isInstant) {\n if (!this.isActive) return;\n index = parseInt(index, 10);\n\n this._wrapSelect(index);\n\n if (this.isWrapping || isWrap) {\n index = utils.modulo(index, this.slides.length);\n } // bail if invalid index\n\n\n if (!this.slides[index]) return;\n let prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n\n if (isInstant) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n\n if (this.options.adaptiveHeight) {\n this.setGallerySize();\n } // events\n\n\n this.dispatchEvent('select', null, [index]); // change event if new index\n\n if (index !== prevIndex) {\n this.dispatchEvent('change', null, [index]);\n }\n }; // wraps position for wrapAround, to move to closest slide. #113\n\n\n proto._wrapSelect = function (index) {\n if (!this.isWrapping) return;\n const selectedIndex = this.selectedIndex,\n slideableWidth = this.slideableWidth,\n length = this.slides.length; // shift index for wrap, do not wrap dragSelect\n\n if (!this.isDragSelect) {\n let wrapIndex = utils.modulo(index, length); // go to shortest\n\n let delta = Math.abs(wrapIndex - selectedIndex);\n let backWrapDelta = Math.abs(wrapIndex + length - selectedIndex);\n let forewardWrapDelta = Math.abs(wrapIndex - length - selectedIndex);\n\n if (backWrapDelta < delta) {\n index += length;\n } else if (forewardWrapDelta < delta) {\n index -= length;\n }\n } // wrap position so slider is within normal area\n\n\n if (index < 0) {\n this.x -= slideableWidth;\n } else if (index >= length) {\n this.x += slideableWidth;\n }\n };\n\n proto.previous = function (isWrap, isInstant) {\n this.select(this.selectedIndex - 1, isWrap, isInstant);\n };\n\n proto.next = function (isWrap, isInstant) {\n this.select(this.selectedIndex + 1, isWrap, isInstant);\n };\n\n proto.updateSelectedSlide = function () {\n let slide = this.slides[this.selectedIndex]; // selectedIndex could be outside of slides, if triggered before resize()\n\n if (!slide) return; // unselect previous selected slide\n\n this.unselectSelectedSlide(); // update new selected slide\n\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements(); // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n };\n\n proto.unselectSelectedSlide = function () {\n if (this.selectedSlide) this.selectedSlide.unselect();\n };\n\n proto.selectInitialIndex = function () {\n let initialIndex = this.options.initialIndex; // already activated, select previous selectedIndex\n\n if (this.isInitActivated) {\n this.select(this.selectedIndex, false, true);\n return;\n } // select with selector string\n\n\n if (initialIndex && typeof initialIndex == 'string') {\n let cell = this.queryCell(initialIndex);\n\n if (cell) {\n this.selectCell(initialIndex, false, true);\n return;\n }\n }\n\n let index = 0; // select with number\n\n if (initialIndex && this.slides[initialIndex]) {\n index = initialIndex;\n } // select instantly\n\n\n this.select(index, false, true);\n };\n /**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\n\n\n proto.selectCell = function (value, isWrap, isInstant) {\n // get cell\n let cell = this.queryCell(value);\n if (!cell) return;\n let index = this.getCellSlideIndex(cell);\n this.select(index, isWrap, isInstant);\n };\n\n proto.getCellSlideIndex = function (cell) {\n // get index of slide that has cell\n let cellSlide = this.slides.find(slide => slide.cells.includes(cell));\n return this.slides.indexOf(cellSlide);\n }; // -------------------------- get cells -------------------------- //\n\n /**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\n\n\n proto.getCell = function (elem) {\n // loop through cells to get the one that matches\n for (let cell of this.cells) {\n if (cell.element === elem) return cell;\n }\n };\n /**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\n\n\n proto.getCells = function (elems) {\n elems = utils.makeArray(elems);\n return elems.map(elem => this.getCell(elem)).filter(Boolean);\n };\n /**\n * get cell elements\n * @returns {Array} cellElems\n */\n\n\n proto.getCellElements = function () {\n return this.cells.map(cell => cell.element);\n };\n /**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\n\n\n proto.getParentCell = function (elem) {\n // first check if elem is cell\n let cell = this.getCell(elem);\n if (cell) return cell; // try to get parent cell elem\n\n let closest = elem.closest('.flickity-slider > *');\n return this.getCell(closest);\n };\n /**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\n\n\n proto.getAdjacentCellElements = function (adjCount, index) {\n if (!adjCount) return this.selectedSlide.getCellElements();\n index = index === undefined ? this.selectedIndex : index;\n let len = this.slides.length;\n\n if (1 + adjCount * 2 >= len) {\n return this.getCellElements(); // get all\n }\n\n let cellElems = [];\n\n for (let i = index - adjCount; i <= index + adjCount; i++) {\n let slideIndex = this.isWrapping ? utils.modulo(i, len) : i;\n let slide = this.slides[slideIndex];\n\n if (slide) {\n cellElems = cellElems.concat(slide.getCellElements());\n }\n }\n\n return cellElems;\n };\n /**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\n\n\n proto.queryCell = function (selector) {\n if (typeof selector == 'number') {\n // use number as index\n return this.cells[selector];\n } // do not select invalid selectors from hash: #123, #/. #791\n\n\n let isSelectorString = typeof selector == 'string' && !selector.match(/^[#.]?[\\d/]/);\n\n if (isSelectorString) {\n // use string as selector, get element\n selector = this.element.querySelector(selector);\n } // get cell from element\n\n\n return this.getCell(selector);\n }; // -------------------------- events -------------------------- //\n\n\n proto.uiChange = function () {\n this.emitEvent('uiChange');\n }; // ----- resize ----- //\n\n\n proto.onresize = function () {\n this.watchCSS();\n this.resize();\n };\n\n utils.debounceMethod(Flickity, 'onresize', 150);\n\n proto.resize = function () {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if (!this.isActive || this.isAnimating || this.isDragging) return;\n this.getSize(); // wrap values\n\n if (this.isWrapping) {\n this.x = utils.modulo(this.x, this.slideableWidth);\n }\n\n this.positionCells();\n\n this._updateWrapShiftCells();\n\n this.setGallerySize();\n this.emitEvent('resize'); // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n\n let selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell(selectedElement, false, true);\n }; // watches the :after property, activates/deactivates\n\n\n proto.watchCSS = function () {\n if (!this.options.watchCSS) return;\n let afterContent = getComputedStyle(this.element, ':after').content; // activate if :after { content: 'flickity' }\n\n if (afterContent.includes('flickity')) {\n this.activate();\n } else {\n this.deactivate();\n }\n }; // ----- keydown ----- //\n // go previous/next if left/right keys pressed\n\n\n proto.onkeydown = function (event) {\n let _document = document,\n activeElement = _document.activeElement;\n let handler = Flickity.keyboardHandlers[event.key]; // only work if element is in focus\n\n if (!this.options.accessibility || !activeElement || !handler) return;\n let isFocused = this.focusableElems.some(elem => activeElement === elem);\n if (isFocused) handler.call(this);\n };\n\n Flickity.keyboardHandlers = {\n ArrowLeft: function () {\n this.uiChange();\n let leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this[leftMethod]();\n },\n ArrowRight: function () {\n this.uiChange();\n let rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this[rightMethod]();\n }\n }; // ----- focus ----- //\n\n proto.focus = function () {\n this.element.focus({\n preventScroll: true\n });\n }; // -------------------------- destroy -------------------------- //\n // deactivate all Flickity functionality, but keep stuff available\n\n\n proto.deactivate = function () {\n if (!this.isActive) return;\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide(); // destroy cells\n\n this.cells.forEach(cell => cell.destroy());\n this.viewport.remove(); // move child elements back into element\n\n this.element.append(...this.slider.children);\n\n if (this.options.accessibility) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener('keydown', this);\n } // set flags\n\n\n this.isActive = false;\n this.emitEvent('deactivate');\n };\n\n proto.destroy = function () {\n this.deactivate();\n window.removeEventListener('resize', this);\n this.allOff();\n this.emitEvent('destroy');\n\n if (jQuery && this.$element) {\n jQuery.removeData(this.element, 'flickity');\n }\n\n delete this.element.flickityGUID;\n delete instances[this.guid];\n }; // -------------------------- prototype -------------------------- //\n\n\n Object.assign(proto, animatePrototype); // -------------------------- extras -------------------------- //\n\n /**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\n\n Flickity.data = function (elem) {\n elem = utils.getQueryElement(elem);\n if (elem) return instances[elem.flickityGUID];\n };\n\n utils.htmlInit(Flickity, 'flickity');\n let jQueryBridget = window.jQueryBridget;\n\n if (jQuery && jQueryBridget) {\n jQueryBridget('flickity', Flickity, jQuery);\n } // set internal jQuery, for Webpack + jQuery v3, #478\n\n\n Flickity.setJQuery = function (jq) {\n jQuery = jq;\n };\n\n Flickity.Cell = Cell;\n Flickity.Slide = Slide;\n return Flickity;\n});","export const fadeOutElement = (element, options = {}) => {\n const { duration = 600, easing = \"ease-in\" } = options;\n return new Promise((resolve) => {\n // Set pre-transition state\n element.style.setProperty(\"display\", \"block\");\n element.style.setProperty(\"opacity\", 1);\n // Trigger a reflow so that we can then use a transition\n element.offsetWidth; // eslint-disable-line no-unused-expressions\n\n // Clean up after the transition ends\n const handler = () => {\n element.removeEventListener(\"transitionend\", handler);\n element.style.setProperty(\"display\", \"none\");\n resolve();\n };\n element.addEventListener(\"transitionend\", handler);\n\n // Set the end state styles\n element.style.setProperty(\"transition\", `opacity ${duration}ms ${easing}`);\n element.style.setProperty(\"opacity\", 0);\n });\n};\n\nexport const fadeInElement = (element, options = {}) => {\n const { duration = 600, easing = \"ease-in\" } = options;\n return new Promise((resolve) => {\n // Set pre-transition state\n element.style.setProperty(\"display\", \"block\");\n element.style.setProperty(\"opacity\", 0);\n\n // Trigger a reflow so that we can then use a transition\n element.offsetWidth; // eslint-disable-line no-unused-expressions\n\n // Clean up after the transition ends\n const handler = () => {\n element.removeEventListener(\"transitionend\", handler);\n resolve();\n };\n element.addEventListener(\"transitionend\", handler);\n\n // Set the end state styles\n element.style.setProperty(\"transition\", `opacity ${duration}ms ${easing}`);\n element.style.setProperty(\"opacity\", 1);\n });\n};\n","/**\n * Fizzy UI utils v3.0.0\n * MIT license\n */\n(function (global, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(global);\n } else {\n // browser global\n global.fizzyUIUtils = factory(global);\n }\n})(this, function factory(global) {\n let utils = {}; // ----- extend ----- //\n // extends objects\n\n utils.extend = function (a, b) {\n return Object.assign(a, b);\n }; // ----- modulo ----- //\n\n\n utils.modulo = function (num, div) {\n return (num % div + div) % div;\n }; // ----- makeArray ----- //\n // turn element or nodeList into an array\n\n\n utils.makeArray = function (obj) {\n // use object if already an array\n if (Array.isArray(obj)) return obj; // return empty array if undefined or null. #6\n\n if (obj === null || obj === undefined) return [];\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number'; // convert nodeList to array\n\n if (isArrayLike) return [...obj]; // array of single index\n\n return [obj];\n }; // ----- removeFrom ----- //\n\n\n utils.removeFrom = function (ary, obj) {\n let index = ary.indexOf(obj);\n\n if (index != -1) {\n ary.splice(index, 1);\n }\n }; // ----- getParent ----- //\n\n\n utils.getParent = function (elem, selector) {\n while (elem.parentNode && elem != document.body) {\n elem = elem.parentNode;\n if (elem.matches(selector)) return elem;\n }\n }; // ----- getQueryElement ----- //\n // use element as selector string\n\n\n utils.getQueryElement = function (elem) {\n if (typeof elem == 'string') {\n return document.querySelector(elem);\n }\n\n return elem;\n }; // ----- handleEvent ----- //\n // enable .ontype to trigger from .addEventListener( elem, 'type' )\n\n\n utils.handleEvent = function (event) {\n let method = 'on' + event.type;\n\n if (this[method]) {\n this[method](event);\n }\n }; // ----- filterFindElements ----- //\n\n\n utils.filterFindElements = function (elems, selector) {\n // make array of elems\n elems = utils.makeArray(elems);\n return elems // check that elem is an actual element\n .filter(elem => elem instanceof HTMLElement).reduce((ffElems, elem) => {\n // add elem if no selector\n if (!selector) {\n ffElems.push(elem);\n return ffElems;\n } // filter & find items if we have a selector\n // filter\n\n\n if (elem.matches(selector)) {\n ffElems.push(elem);\n } // find children\n\n\n let childElems = elem.querySelectorAll(selector); // concat childElems to filterFound array\n\n ffElems = ffElems.concat(...childElems);\n return ffElems;\n }, []);\n }; // ----- debounceMethod ----- //\n\n\n utils.debounceMethod = function (_class, methodName, threshold) {\n threshold = threshold || 100; // original method\n\n let method = _class.prototype[methodName];\n let timeoutName = methodName + 'Timeout';\n\n _class.prototype[methodName] = function () {\n clearTimeout(this[timeoutName]);\n let args = arguments;\n this[timeoutName] = setTimeout(() => {\n method.apply(this, args);\n delete this[timeoutName];\n }, threshold);\n };\n }; // ----- docReady ----- //\n\n\n utils.docReady = function (onDocReady) {\n let readyState = document.readyState;\n\n if (readyState == 'complete' || readyState == 'interactive') {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout(onDocReady);\n } else {\n document.addEventListener('DOMContentLoaded', onDocReady);\n }\n }; // ----- htmlInit ----- //\n // http://bit.ly/3oYLusc\n\n\n utils.toDashed = function (str) {\n return str.replace(/(.)([A-Z])/g, function (match, $1, $2) {\n return $1 + '-' + $2;\n }).toLowerCase();\n };\n\n let console = global.console; // allow user to initialize classes via [data-namespace] or .js-namespace class\n // htmlInit( Widget, 'widgetName' )\n // options are parsed from data-namespace-options\n\n utils.htmlInit = function (WidgetClass, namespace) {\n utils.docReady(function () {\n let dashedNamespace = utils.toDashed(namespace);\n let dataAttr = 'data-' + dashedNamespace;\n let dataAttrElems = document.querySelectorAll(\"[\".concat(dataAttr, \"]\"));\n let jQuery = global.jQuery;\n [...dataAttrElems].forEach(elem => {\n let attr = elem.getAttribute(dataAttr);\n let options;\n\n try {\n options = attr && JSON.parse(attr);\n } catch (error) {\n // log error, do not initialize\n if (console) {\n console.error(\"Error parsing \".concat(dataAttr, \" on \").concat(elem.className, \": \").concat(error));\n }\n\n return;\n } // initialize\n\n\n let instance = new WidgetClass(elem, options); // make available via $().data('namespace')\n\n if (jQuery) {\n jQuery.data(elem, namespace, instance);\n }\n });\n });\n }; // ----- ----- //\n\n\n return utils;\n});","/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n(function (global, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n})(typeof window != 'undefined' ? window : this, function () {\n function EvEmitter() {}\n\n let proto = EvEmitter.prototype;\n\n proto.on = function (eventName, listener) {\n if (!eventName || !listener) return this; // set events hash\n\n let events = this._events = this._events || {}; // set listeners array\n\n let listeners = events[eventName] = events[eventName] || []; // only add once\n\n if (!listeners.includes(listener)) {\n listeners.push(listener);\n }\n\n return this;\n };\n\n proto.once = function (eventName, listener) {\n if (!eventName || !listener) return this; // add event\n\n this.on(eventName, listener); // set once flag\n // set onceEvents hash\n\n let onceEvents = this._onceEvents = this._onceEvents || {}; // set onceListeners object\n\n let onceListeners = onceEvents[eventName] = onceEvents[eventName] || {}; // set flag\n\n onceListeners[listener] = true;\n return this;\n };\n\n proto.off = function (eventName, listener) {\n let listeners = this._events && this._events[eventName];\n if (!listeners || !listeners.length) return this;\n let index = listeners.indexOf(listener);\n\n if (index != -1) {\n listeners.splice(index, 1);\n }\n\n return this;\n };\n\n proto.emitEvent = function (eventName, args) {\n let listeners = this._events && this._events[eventName];\n if (!listeners || !listeners.length) return this; // copy over to avoid interference if .off() in listener\n\n listeners = listeners.slice(0);\n args = args || []; // once stuff\n\n let onceListeners = this._onceEvents && this._onceEvents[eventName];\n\n for (let listener of listeners) {\n let isOnce = onceListeners && onceListeners[listener];\n\n if (isOnce) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off(eventName, listener); // unset once flag\n\n delete onceListeners[listener];\n } // trigger listener\n\n\n listener.apply(this, args);\n }\n\n return this;\n };\n\n proto.allOff = function () {\n delete this._events;\n delete this._onceEvents;\n return this;\n };\n\n return EvEmitter;\n});","/*!\n * Infinite Scroll v2.0.4\n * measure size of elements\n * MIT license\n */\n(function (window, factory) {\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n})(window, function factory() {\n // -------------------------- helpers -------------------------- //\n // get a number from a string, not a percentage\n function getStyleSize(value) {\n let num = parseFloat(value); // not a percent like '100%', and a number\n\n let isValid = value.indexOf('%') == -1 && !isNaN(num);\n return isValid && num;\n } // -------------------------- measurements -------------------------- //\n\n\n let measurements = ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'borderBottomWidth'];\n let measurementsLength = measurements.length;\n\n function getZeroSize() {\n let size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n measurements.forEach(measurement => {\n size[measurement] = 0;\n });\n return size;\n } // -------------------------- getSize -------------------------- //\n\n\n function getSize(elem) {\n // use querySeletor if elem is string\n if (typeof elem == 'string') elem = document.querySelector(elem); // do not proceed on non-objects\n\n let isElement = elem && typeof elem == 'object' && elem.nodeType;\n if (!isElement) return;\n let style = getComputedStyle(elem); // if hidden, everything is 0\n\n if (style.display == 'none') return getZeroSize();\n let size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n let isBorderBox = size.isBorderBox = style.boxSizing == 'border-box'; // get all measurements\n\n measurements.forEach(measurement => {\n let value = style[measurement];\n let num = parseFloat(value); // any 'auto', 'medium' value will be 0\n\n size[measurement] = !isNaN(num) ? num : 0;\n });\n let paddingWidth = size.paddingLeft + size.paddingRight;\n let paddingHeight = size.paddingTop + size.paddingBottom;\n let marginWidth = size.marginLeft + size.marginRight;\n let marginHeight = size.marginTop + size.marginBottom;\n let borderWidth = size.borderLeftWidth + size.borderRightWidth;\n let borderHeight = size.borderTopWidth + size.borderBottomWidth; // overwrite width and height if we can get it from style\n\n let styleWidth = getStyleSize(style.width);\n\n if (styleWidth !== false) {\n size.width = styleWidth + ( // add padding and border unless it's already including it\n isBorderBox ? 0 : paddingWidth + borderWidth);\n }\n\n let styleHeight = getStyleSize(style.height);\n\n if (styleHeight !== false) {\n size.height = styleHeight + ( // add padding and border unless it's already including it\n isBorderBox ? 0 : paddingHeight + borderHeight);\n }\n\n size.innerWidth = size.width - (paddingWidth + borderWidth);\n size.innerHeight = size.height - (paddingHeight + borderHeight);\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n return size;\n }\n\n return getSize;\n});","/*!\n * Flickity v3.0.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2022 Metafizzy\n */\nif (typeof module == 'object' && module.exports) {\n const Flickity = require('./core');\n\n require('./drag');\n\n require('./prev-next-button');\n\n require('./page-dots');\n\n require('./player');\n\n require('./add-remove-cell');\n\n require('./lazyload');\n\n require('./imagesloaded');\n\n module.exports = Flickity;\n}","const _excluded = [\"premium\", \"referrerPolicy\"];\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\"object\" == typeof navigator && function (e, t) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(\"Plyr\", t) : (e = \"undefined\" != typeof globalThis ? globalThis : e || self).Plyr = t();\n}(this, function () {\n \"use strict\";\n\n function e(e, t, i) {\n return t in e ? Object.defineProperty(e, t, {\n value: i,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[t] = i, e;\n }\n\n function t(e, t) {\n for (var i = 0; i < t.length; i++) {\n var s = t[i];\n s.enumerable = s.enumerable || !1, s.configurable = !0, \"value\" in s && (s.writable = !0), Object.defineProperty(e, s.key, s);\n }\n }\n\n function i(e, t, i) {\n return t in e ? Object.defineProperty(e, t, {\n value: i,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[t] = i, e;\n }\n\n function s(e, t) {\n var i = Object.keys(e);\n\n if (Object.getOwnPropertySymbols) {\n var s = Object.getOwnPropertySymbols(e);\n t && (s = s.filter(function (t) {\n return Object.getOwnPropertyDescriptor(e, t).enumerable;\n })), i.push.apply(i, s);\n }\n\n return i;\n }\n\n function n(e) {\n for (var t = 1; t < arguments.length; t++) {\n var n = null != arguments[t] ? arguments[t] : {};\n t % 2 ? s(Object(n), !0).forEach(function (t) {\n i(e, t, n[t]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : s(Object(n)).forEach(function (t) {\n Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));\n });\n }\n\n return e;\n }\n\n var a = {\n addCSS: !0,\n thumbWidth: 15,\n watch: !0\n };\n\n function l(e, t) {\n return function () {\n return Array.from(document.querySelectorAll(t)).includes(this);\n }.call(e, t);\n }\n\n var o = function (e) {\n return null != e ? e.constructor : null;\n },\n r = function (e, t) {\n return !!(e && t && e instanceof t);\n },\n c = function (e) {\n return null == e;\n },\n h = function (e) {\n return o(e) === Object;\n },\n u = function (e) {\n return o(e) === String;\n },\n d = function (e) {\n return Array.isArray(e);\n },\n m = function (e) {\n return r(e, NodeList);\n },\n p = u,\n g = d,\n f = m,\n b = function (e) {\n return r(e, Element);\n },\n y = function (e) {\n return r(e, Event);\n },\n v = function (e) {\n return c(e) || (u(e) || d(e) || m(e)) && !e.length || h(e) && !Object.keys(e).length;\n };\n\n function w(e, t) {\n if (1 > t) {\n var i = function (e) {\n var t = \"\".concat(e).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n return t ? Math.max(0, (t[1] ? t[1].length : 0) - (t[2] ? +t[2] : 0)) : 0;\n }(t);\n\n return parseFloat(e.toFixed(i));\n }\n\n return Math.round(e / t) * t;\n }\n\n var T = function () {\n function e(t, i) {\n (function (e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n })(this, e), b(t) ? this.element = t : p(t) && (this.element = document.querySelector(t)), b(this.element) && v(this.element.rangeTouch) && (this.config = n({}, a, {}, i), this.init());\n }\n\n return function (e, i, s) {\n i && t(e.prototype, i), s && t(e, s);\n }(e, [{\n key: \"init\",\n value: function () {\n e.enabled && (this.config.addCSS && (this.element.style.userSelect = \"none\", this.element.style.webKitUserSelect = \"none\", this.element.style.touchAction = \"manipulation\"), this.listeners(!0), this.element.rangeTouch = this);\n }\n }, {\n key: \"destroy\",\n value: function () {\n e.enabled && (this.config.addCSS && (this.element.style.userSelect = \"\", this.element.style.webKitUserSelect = \"\", this.element.style.touchAction = \"\"), this.listeners(!1), this.element.rangeTouch = null);\n }\n }, {\n key: \"listeners\",\n value: function (e) {\n var t = this,\n i = e ? \"addEventListener\" : \"removeEventListener\";\n [\"touchstart\", \"touchmove\", \"touchend\"].forEach(function (e) {\n t.element[i](e, function (e) {\n return t.set(e);\n }, !1);\n });\n }\n }, {\n key: \"get\",\n value: function (t) {\n if (!e.enabled || !y(t)) return null;\n var i,\n s = t.target,\n n = t.changedTouches[0],\n a = parseFloat(s.getAttribute(\"min\")) || 0,\n l = parseFloat(s.getAttribute(\"max\")) || 100,\n o = parseFloat(s.getAttribute(\"step\")) || 1,\n r = s.getBoundingClientRect(),\n c = 100 / r.width * (this.config.thumbWidth / 2) / 100;\n return 0 > (i = 100 / r.width * (n.clientX - r.left)) ? i = 0 : 100 < i && (i = 100), 50 > i ? i -= (100 - 2 * i) * c : 50 < i && (i += 2 * (i - 50) * c), a + w(i / 100 * (l - a), o);\n }\n }, {\n key: \"set\",\n value: function (t) {\n e.enabled && y(t) && !t.target.disabled && (t.preventDefault(), t.target.value = this.get(t), function (e, t) {\n if (e && t) {\n var i = new Event(t, {\n bubbles: !0\n });\n e.dispatchEvent(i);\n }\n }(t.target, \"touchend\" === t.type ? \"change\" : \"input\"));\n }\n }], [{\n key: \"setup\",\n value: function (t) {\n var i = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {},\n s = null;\n if (v(t) || p(t) ? s = Array.from(document.querySelectorAll(p(t) ? t : 'input[type=\"range\"]')) : b(t) ? s = [t] : f(t) ? s = Array.from(t) : g(t) && (s = t.filter(b)), v(s)) return null;\n var o = n({}, a, {}, i);\n\n if (p(t) && o.watch) {\n var r = new MutationObserver(function (i) {\n Array.from(i).forEach(function (i) {\n Array.from(i.addedNodes).forEach(function (i) {\n b(i) && l(i, t) && new e(i, o);\n });\n });\n });\n r.observe(document.body, {\n childList: !0,\n subtree: !0\n });\n }\n\n return s.map(function (t) {\n return new e(t, i);\n });\n }\n }, {\n key: \"enabled\",\n get: function () {\n return \"ontouchstart\" in document.documentElement;\n }\n }]), e;\n }();\n\n const k = e => null != e ? e.constructor : null,\n C = (e, t) => Boolean(e && t && e instanceof t),\n A = e => null == e,\n S = e => k(e) === Object,\n E = e => k(e) === String,\n P = e => k(e) === Function,\n M = e => Array.isArray(e),\n N = e => C(e, NodeList),\n x = e => A(e) || (E(e) || M(e) || N(e)) && !e.length || S(e) && !Object.keys(e).length;\n\n var I = A,\n L = S,\n $ = e => k(e) === Number && !Number.isNaN(e),\n _ = E,\n O = e => k(e) === Boolean,\n j = P,\n D = M,\n q = N,\n H = e => null !== e && \"object\" == typeof e && 1 === e.nodeType && \"object\" == typeof e.style && \"object\" == typeof e.ownerDocument,\n R = e => C(e, Event),\n F = e => C(e, KeyboardEvent),\n V = e => C(e, TextTrack) || !A(e) && E(e.kind),\n B = e => C(e, Promise) && P(e.then),\n U = e => {\n if (C(e, window.URL)) return !0;\n if (!E(e)) return !1;\n let t = e;\n e.startsWith(\"http://\") && e.startsWith(\"https://\") || (t = \"http://\".concat(e));\n\n try {\n return !x(new URL(t).hostname);\n } catch (e) {\n return !1;\n }\n },\n W = x;\n\n const z = (() => {\n const e = document.createElement(\"span\"),\n t = {\n WebkitTransition: \"webkitTransitionEnd\",\n MozTransition: \"transitionend\",\n OTransition: \"oTransitionEnd otransitionend\",\n transition: \"transitionend\"\n },\n i = Object.keys(t).find(t => void 0 !== e.style[t]);\n return !!_(i) && t[i];\n })();\n\n function K(e, t) {\n setTimeout(() => {\n try {\n e.hidden = !0, e.offsetHeight, e.hidden = !1;\n } catch (e) {}\n }, t);\n }\n\n const Y = {\n isIE: Boolean(window.document.documentMode),\n isEdge: window.navigator.userAgent.includes(\"Edge\"),\n isWebkit: \"WebkitAppearance\" in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: \"MacIntel\" === navigator.platform && navigator.maxTouchPoints > 1 || /(iPad|iPhone|iPod)/gi.test(navigator.platform)\n };\n\n function Q(e, t) {\n return t.split(\".\").reduce((e, t) => e && e[t], e);\n }\n\n function X() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n for (var _len = arguments.length, t = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n t[_key - 1] = arguments[_key];\n }\n\n if (!t.length) return e;\n const i = t.shift();\n return L(i) ? (Object.keys(i).forEach(t => {\n L(i[t]) ? (Object.keys(e).includes(t) || Object.assign(e, {\n [t]: {}\n }), X(e[t], i[t])) : Object.assign(e, {\n [t]: i[t]\n });\n }), X(e, ...t)) : e;\n }\n\n function J(e, t) {\n const i = e.length ? e : [e];\n Array.from(i).reverse().forEach((e, i) => {\n const s = i > 0 ? t.cloneNode(!0) : t,\n n = e.parentNode,\n a = e.nextSibling;\n s.appendChild(e), a ? n.insertBefore(s, a) : n.appendChild(s);\n });\n }\n\n function G(e, t) {\n H(e) && !W(t) && Object.entries(t).filter(_ref => {\n let _ref2 = _slicedToArray(_ref, 2),\n e = _ref2[1];\n\n return !I(e);\n }).forEach(_ref3 => {\n let _ref4 = _slicedToArray(_ref3, 2),\n t = _ref4[0],\n i = _ref4[1];\n\n return e.setAttribute(t, i);\n });\n }\n\n function Z(e, t, i) {\n const s = document.createElement(e);\n return L(t) && G(s, t), _(i) && (s.innerText = i), s;\n }\n\n function ee(e, t, i, s) {\n H(t) && t.appendChild(Z(e, i, s));\n }\n\n function te(e) {\n q(e) || D(e) ? Array.from(e).forEach(te) : H(e) && H(e.parentNode) && e.parentNode.removeChild(e);\n }\n\n function ie(e) {\n if (!H(e)) return;\n let t = e.childNodes.length;\n\n for (; t > 0;) e.removeChild(e.lastChild), t -= 1;\n }\n\n function se(e, t) {\n return H(t) && H(t.parentNode) && H(e) ? (t.parentNode.replaceChild(e, t), e) : null;\n }\n\n function ne(e, t) {\n if (!_(e) || W(e)) return {};\n const i = {},\n s = X({}, t);\n return e.split(\",\").forEach(e => {\n const t = e.trim(),\n n = t.replace(\".\", \"\"),\n a = t.replace(/[[\\]]/g, \"\").split(\"=\"),\n _a = _slicedToArray(a, 1),\n l = _a[0],\n o = a.length > 1 ? a[1].replace(/[\"']/g, \"\") : \"\";\n\n switch (t.charAt(0)) {\n case \".\":\n _(s.class) ? i.class = \"\".concat(s.class, \" \").concat(n) : i.class = n;\n break;\n\n case \"#\":\n i.id = t.replace(\"#\", \"\");\n break;\n\n case \"[\":\n i[l] = o;\n }\n }), X(s, i);\n }\n\n function ae(e, t) {\n if (!H(e)) return;\n let i = t;\n O(i) || (i = !e.hidden), e.hidden = i;\n }\n\n function le(e, t, i) {\n if (q(e)) return Array.from(e).map(e => le(e, t, i));\n\n if (H(e)) {\n let s = \"toggle\";\n return void 0 !== i && (s = i ? \"add\" : \"remove\"), e.classList[s](t), e.classList.contains(t);\n }\n\n return !1;\n }\n\n function oe(e, t) {\n return H(e) && e.classList.contains(t);\n }\n\n function re(e, t) {\n const _Element = Element,\n i = _Element.prototype;\n return (i.matches || i.webkitMatchesSelector || i.mozMatchesSelector || i.msMatchesSelector || function () {\n return Array.from(document.querySelectorAll(t)).includes(this);\n }).call(e, t);\n }\n\n function ce(e) {\n return this.elements.container.querySelectorAll(e);\n }\n\n function he(e) {\n return this.elements.container.querySelector(e);\n }\n\n function ue() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;\n H(e) && (e.focus({\n preventScroll: !0\n }), t && le(e, this.config.classNames.tabFocus));\n }\n\n const de = {\n \"audio/ogg\": \"vorbis\",\n \"audio/wav\": \"1\",\n \"video/webm\": \"vp8, vorbis\",\n \"video/mp4\": \"avc1.42E01E, mp4a.40.2\",\n \"video/ogg\": \"theora\"\n },\n me = {\n audio: \"canPlayType\" in document.createElement(\"audio\"),\n video: \"canPlayType\" in document.createElement(\"video\"),\n\n check(e, t, i) {\n const s = Y.isIPhone && i && me.playsinline,\n n = me[e] || \"html5\" !== t;\n return {\n api: n,\n ui: n && me.rangeInput && (\"video\" !== e || !Y.isIPhone || s)\n };\n },\n\n pip: !(Y.isIPhone || !j(Z(\"video\").webkitSetPresentationMode) && (!document.pictureInPictureEnabled || Z(\"video\").disablePictureInPicture)),\n airplay: j(window.WebKitPlaybackTargetAvailabilityEvent),\n playsinline: \"playsInline\" in document.createElement(\"video\"),\n\n mime(e) {\n if (W(e)) return !1;\n\n const _e$split = e.split(\"/\"),\n _e$split2 = _slicedToArray(_e$split, 1),\n t = _e$split2[0];\n\n let i = e;\n if (!this.isHTML5 || t !== this.type) return !1;\n Object.keys(de).includes(i) && (i += \"; codecs=\\\"\".concat(de[e], \"\\\"\"));\n\n try {\n return Boolean(i && this.media.canPlayType(i).replace(/no/, \"\"));\n } catch (e) {\n return !1;\n }\n },\n\n textTracks: \"textTracks\" in document.createElement(\"video\"),\n rangeInput: (() => {\n const e = document.createElement(\"input\");\n return e.type = \"range\", \"range\" === e.type;\n })(),\n touch: \"ontouchstart\" in document.documentElement,\n transitions: !1 !== z,\n reducedMotion: \"matchMedia\" in window && window.matchMedia(\"(prefers-reduced-motion)\").matches\n },\n pe = (() => {\n let e = !1;\n\n try {\n const t = Object.defineProperty({}, \"passive\", {\n get: () => (e = !0, null)\n });\n window.addEventListener(\"test\", null, t), window.removeEventListener(\"test\", null, t);\n } catch (e) {}\n\n return e;\n })();\n\n function ge(e, t, i) {\n let s = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : !1;\n let n = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : !0;\n let a = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : !1;\n if (!e || !(\"addEventListener\" in e) || W(t) || !j(i)) return;\n const l = t.split(\" \");\n let o = a;\n pe && (o = {\n passive: n,\n capture: a\n }), l.forEach(t => {\n this && this.eventListeners && s && this.eventListeners.push({\n element: e,\n type: t,\n callback: i,\n options: o\n }), e[s ? \"addEventListener\" : \"removeEventListener\"](t, i, o);\n });\n }\n\n function fe(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n let i = arguments.length > 2 ? arguments[2] : undefined;\n let s = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : !0;\n let n = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : !1;\n ge.call(this, e, t, i, !0, s, n);\n }\n\n function be(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n let i = arguments.length > 2 ? arguments[2] : undefined;\n let s = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : !0;\n let n = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : !1;\n ge.call(this, e, t, i, !1, s, n);\n }\n\n function ye(e) {\n var _this = this;\n\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n let i = arguments.length > 2 ? arguments[2] : undefined;\n let s = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : !0;\n let n = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : !1;\n\n const a = function () {\n for (var _len2 = arguments.length, l = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n l[_key2] = arguments[_key2];\n }\n\n be(e, t, a, s, n), i.apply(_this, l);\n };\n\n ge.call(this, e, t, a, !0, s, n);\n }\n\n function ve(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1;\n let s = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (!H(e) || W(t)) return;\n const n = new CustomEvent(t, {\n bubbles: i,\n detail: _objectSpread(_objectSpread({}, s), {}, {\n plyr: this\n })\n });\n e.dispatchEvent(n);\n }\n\n function we() {\n this && this.eventListeners && (this.eventListeners.forEach(e => {\n const t = e.element,\n i = e.type,\n s = e.callback,\n n = e.options;\n t.removeEventListener(i, s, n);\n }), this.eventListeners = []);\n }\n\n function Te() {\n return new Promise(e => this.ready ? setTimeout(e, 0) : fe.call(this, this.elements.container, \"ready\", e)).then(() => {});\n }\n\n function ke(e) {\n B(e) && e.then(null, () => {});\n }\n\n function Ce(e) {\n return D(e) ? e.filter((t, i) => e.indexOf(t) === i) : e;\n }\n\n function Ae(e, t) {\n return D(e) && e.length ? e.reduce((e, i) => Math.abs(i - t) < Math.abs(e - t) ? i : e) : null;\n }\n\n function Se(e) {\n return !(!window || !window.CSS) && window.CSS.supports(e);\n }\n\n const Ee = [[1, 1], [4, 3], [3, 4], [5, 4], [4, 5], [3, 2], [2, 3], [16, 10], [10, 16], [16, 9], [9, 16], [21, 9], [9, 21], [32, 9], [9, 32]].reduce((e, _ref5) => {\n let _ref6 = _slicedToArray(_ref5, 2),\n t = _ref6[0],\n i = _ref6[1];\n\n return _objectSpread(_objectSpread({}, e), {}, {\n [t / i]: [t, i]\n });\n }, {});\n\n function Pe(e) {\n if (!(D(e) || _(e) && e.includes(\":\"))) return !1;\n return (D(e) ? e : e.split(\":\")).map(Number).every($);\n }\n\n function Me(e) {\n if (!D(e) || !e.every($)) return null;\n\n const _e2 = _slicedToArray(e, 2),\n t = _e2[0],\n i = _e2[1],\n s = (e, t) => 0 === t ? e : s(t, e % t),\n n = s(t, i);\n\n return [t / n, i / n];\n }\n\n function Ne(e) {\n var _this$embed;\n\n const t = e => Pe(e) ? e.split(\":\").map(Number) : null;\n\n let i = t(e);\n\n if (null === i && (i = t(this.config.ratio)), null === i && !W(this.embed) && D(this.embed.ratio) && (_this$embed = this.embed, i = _this$embed.ratio, _this$embed), null === i && this.isHTML5) {\n const _this$media = this.media,\n e = _this$media.videoWidth,\n t = _this$media.videoHeight;\n i = [e, t];\n }\n\n return Me(i);\n }\n\n function xe(e) {\n if (!this.isVideo) return {};\n const t = this.elements.wrapper,\n i = Ne.call(this, e);\n if (!D(i)) return {};\n\n const _Me = Me(i),\n _Me2 = _slicedToArray(_Me, 2),\n s = _Me2[0],\n n = _Me2[1],\n a = 100 / s * n;\n\n if (Se(\"aspect-ratio: \".concat(s, \"/\").concat(n)) ? t.style.aspectRatio = \"\".concat(s, \"/\").concat(n) : t.style.paddingBottom = \"\".concat(a, \"%\"), this.isVimeo && !this.config.vimeo.premium && this.supported.ui) {\n const e = 100 / this.media.offsetWidth * parseInt(window.getComputedStyle(this.media).paddingBottom, 10),\n i = (e - a) / (e / 50);\n this.fullscreen.active ? t.style.paddingBottom = null : this.media.style.transform = \"translateY(-\".concat(i, \"%)\");\n } else this.isHTML5 && t.classList.add(this.config.classNames.videoFixedRatio);\n\n return {\n padding: a,\n ratio: i\n };\n }\n\n function Ie(e, t) {\n let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : .05;\n const s = e / t,\n n = Ae(Object.keys(Ee), s);\n return Math.abs(n - s) <= i ? Ee[n] : [e, t];\n }\n\n const Le = {\n getSources() {\n if (!this.isHTML5) return [];\n return Array.from(this.media.querySelectorAll(\"source\")).filter(e => {\n const t = e.getAttribute(\"type\");\n return !!W(t) || me.mime.call(this, t);\n });\n },\n\n getQualityOptions() {\n return this.config.quality.forced ? this.config.quality.options : Le.getSources.call(this).map(e => Number(e.getAttribute(\"size\"))).filter(Boolean);\n },\n\n setup() {\n if (!this.isHTML5) return;\n const e = this;\n e.options.speed = e.config.speed.options, W(this.config.ratio) || xe.call(e), Object.defineProperty(e.media, \"quality\", {\n get() {\n const t = Le.getSources.call(e).find(t => t.getAttribute(\"src\") === e.source);\n return t && Number(t.getAttribute(\"size\"));\n },\n\n set(t) {\n if (e.quality !== t) {\n if (e.config.quality.forced && j(e.config.quality.onChange)) e.config.quality.onChange(t);else {\n const i = Le.getSources.call(e).find(e => Number(e.getAttribute(\"size\")) === t);\n if (!i) return;\n const _e$media = e.media,\n s = _e$media.currentTime,\n n = _e$media.paused,\n a = _e$media.preload,\n l = _e$media.readyState,\n o = _e$media.playbackRate;\n e.media.src = i.getAttribute(\"src\"), (\"none\" !== a || l) && (e.once(\"loadedmetadata\", () => {\n e.speed = o, e.currentTime = s, n || ke(e.play());\n }), e.media.load());\n }\n ve.call(e, e.media, \"qualitychange\", !1, {\n quality: t\n });\n }\n }\n\n });\n },\n\n cancelRequests() {\n this.isHTML5 && (te(Le.getSources.call(this)), this.media.setAttribute(\"src\", this.config.blankVideo), this.media.load(), this.debug.log(\"Cancelled network requests\"));\n }\n\n };\n\n function $e(e) {\n for (var _len3 = arguments.length, t = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n t[_key3 - 1] = arguments[_key3];\n }\n\n return W(e) ? e : e.toString().replace(/{(\\d+)}/g, (e, i) => t[i].toString());\n }\n\n const _e = function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"\";\n return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, \"\\\\$1\"), \"g\"), i.toString());\n },\n Oe = function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n return e.toString().replace(/\\w\\S*/g, e => e.charAt(0).toUpperCase() + e.slice(1).toLowerCase());\n };\n\n function je() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n let t = e.toString();\n return t = function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n let t = e.toString();\n return t = _e(t, \"-\", \" \"), t = _e(t, \"_\", \" \"), t = Oe(t), _e(t, \" \", \"\");\n }(t), t.charAt(0).toLowerCase() + t.slice(1);\n }\n\n function De(e) {\n const t = document.createElement(\"div\");\n return t.appendChild(e), t.innerHTML;\n }\n\n const qe = {\n pip: \"PIP\",\n airplay: \"AirPlay\",\n html5: \"HTML5\",\n vimeo: \"Vimeo\",\n youtube: \"YouTube\"\n },\n He = {\n get() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (W(e) || W(t)) return \"\";\n let i = Q(t.i18n, e);\n if (W(i)) return Object.keys(qe).includes(e) ? qe[e] : \"\";\n const s = {\n \"{seektime}\": t.seekTime,\n \"{title}\": t.title\n };\n return Object.entries(s).forEach(_ref7 => {\n let _ref8 = _slicedToArray(_ref7, 2),\n e = _ref8[0],\n t = _ref8[1];\n\n i = _e(i, e, t);\n }), i;\n }\n\n };\n\n class Re {\n constructor(t) {\n e(this, \"get\", e => {\n if (!Re.supported || !this.enabled) return null;\n const t = window.localStorage.getItem(this.key);\n if (W(t)) return null;\n const i = JSON.parse(t);\n return _(e) && e.length ? i[e] : i;\n }), e(this, \"set\", e => {\n if (!Re.supported || !this.enabled) return;\n if (!L(e)) return;\n let t = this.get();\n W(t) && (t = {}), X(t, e);\n\n try {\n window.localStorage.setItem(this.key, JSON.stringify(t));\n } catch (e) {}\n }), this.enabled = t.config.storage.enabled, this.key = t.config.storage.key;\n }\n\n static get supported() {\n try {\n if (!(\"localStorage\" in window)) return !1;\n const e = \"___test\";\n return window.localStorage.setItem(e, e), window.localStorage.removeItem(e), !0;\n } catch (e) {\n return !1;\n }\n }\n\n }\n\n function Fe(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"text\";\n return new Promise((i, s) => {\n try {\n const s = new XMLHttpRequest();\n if (!(\"withCredentials\" in s)) return;\n s.addEventListener(\"load\", () => {\n if (\"text\" === t) try {\n i(JSON.parse(s.responseText));\n } catch (e) {\n i(s.responseText);\n } else i(s.response);\n }), s.addEventListener(\"error\", () => {\n throw new Error(s.status);\n }), s.open(\"GET\", e, !0), s.responseType = t, s.send();\n } catch (e) {\n s(e);\n }\n });\n }\n\n function Ve(e, t) {\n if (!_(e)) return;\n\n const i = _(t);\n\n let s = !1;\n\n const n = () => null !== document.getElementById(t),\n a = (e, t) => {\n e.innerHTML = t, i && n() || document.body.insertAdjacentElement(\"afterbegin\", e);\n };\n\n if (!i || !n()) {\n const n = Re.supported,\n l = document.createElement(\"div\");\n\n if (l.setAttribute(\"hidden\", \"\"), i && l.setAttribute(\"id\", t), n) {\n const e = window.localStorage.getItem(\"cache-\".concat(t));\n\n if (s = null !== e, s) {\n const t = JSON.parse(e);\n a(l, t.content);\n }\n }\n\n Fe(e).then(e => {\n if (!W(e)) {\n if (n) try {\n window.localStorage.setItem(\"cache-\".concat(t), JSON.stringify({\n content: e\n }));\n } catch (e) {}\n a(l, e);\n }\n }).catch(() => {});\n }\n }\n\n const Be = e => Math.trunc(e / 60 / 60 % 60, 10);\n\n function Ue() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;\n let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1;\n if (!$(e)) return Ue(void 0, t, i);\n\n const s = e => \"0\".concat(e).slice(-2);\n\n let n = Be(e);\n const a = (l = e, Math.trunc(l / 60 % 60, 10));\n var l;\n\n const o = (e => Math.trunc(e % 60, 10))(e);\n\n return n = t || n > 0 ? \"\".concat(n, \":\") : \"\", \"\".concat(i && e > 0 ? \"-\" : \"\").concat(n).concat(s(a), \":\").concat(s(o));\n }\n\n const We = {\n getIconUrl() {\n const e = new URL(this.config.iconUrl, window.location),\n t = window.location.host ? window.location.host : window.top.location.host,\n i = e.host !== t || Y.isIE && !window.svg4everybody;\n return {\n url: this.config.iconUrl,\n cors: i\n };\n },\n\n findElements() {\n try {\n return this.elements.controls = he.call(this, this.config.selectors.controls.wrapper), this.elements.buttons = {\n play: ce.call(this, this.config.selectors.buttons.play),\n pause: he.call(this, this.config.selectors.buttons.pause),\n restart: he.call(this, this.config.selectors.buttons.restart),\n rewind: he.call(this, this.config.selectors.buttons.rewind),\n fastForward: he.call(this, this.config.selectors.buttons.fastForward),\n mute: he.call(this, this.config.selectors.buttons.mute),\n pip: he.call(this, this.config.selectors.buttons.pip),\n airplay: he.call(this, this.config.selectors.buttons.airplay),\n settings: he.call(this, this.config.selectors.buttons.settings),\n captions: he.call(this, this.config.selectors.buttons.captions),\n fullscreen: he.call(this, this.config.selectors.buttons.fullscreen)\n }, this.elements.progress = he.call(this, this.config.selectors.progress), this.elements.inputs = {\n seek: he.call(this, this.config.selectors.inputs.seek),\n volume: he.call(this, this.config.selectors.inputs.volume)\n }, this.elements.display = {\n buffer: he.call(this, this.config.selectors.display.buffer),\n currentTime: he.call(this, this.config.selectors.display.currentTime),\n duration: he.call(this, this.config.selectors.display.duration)\n }, H(this.elements.progress) && (this.elements.display.seekTooltip = this.elements.progress.querySelector(\".\".concat(this.config.classNames.tooltip))), !0;\n } catch (e) {\n return this.debug.warn(\"It looks like there is a problem with your custom controls HTML\", e), this.toggleNativeControls(!0), !1;\n }\n },\n\n createIcon(e, t) {\n const i = \"http://www.w3.org/2000/svg\",\n s = We.getIconUrl.call(this),\n n = \"\".concat(s.cors ? \"\" : s.url, \"#\").concat(this.config.iconPrefix),\n a = document.createElementNS(i, \"svg\");\n G(a, X(t, {\n \"aria-hidden\": \"true\",\n focusable: \"false\"\n }));\n const l = document.createElementNS(i, \"use\"),\n o = \"\".concat(n, \"-\").concat(e);\n return \"href\" in l && l.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", o), l.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", o), a.appendChild(l), a;\n },\n\n createLabel(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const i = He.get(e, this.config);\n return Z(\"span\", _objectSpread(_objectSpread({}, t), {}, {\n class: [t.class, this.config.classNames.hidden].filter(Boolean).join(\" \")\n }), i);\n },\n\n createBadge(e) {\n if (W(e)) return null;\n const t = Z(\"span\", {\n class: this.config.classNames.menu.value\n });\n return t.appendChild(Z(\"span\", {\n class: this.config.classNames.menu.badge\n }, e)), t;\n },\n\n createButton(e, t) {\n const i = X({}, t);\n let s = je(e);\n const n = {\n element: \"button\",\n toggle: !1,\n label: null,\n icon: null,\n labelPressed: null,\n iconPressed: null\n };\n\n switch ([\"element\", \"icon\", \"label\"].forEach(e => {\n Object.keys(i).includes(e) && (n[e] = i[e], delete i[e]);\n }), \"button\" !== n.element || Object.keys(i).includes(\"type\") || (i.type = \"button\"), Object.keys(i).includes(\"class\") ? i.class.split(\" \").some(e => e === this.config.classNames.control) || X(i, {\n class: \"\".concat(i.class, \" \").concat(this.config.classNames.control)\n }) : i.class = this.config.classNames.control, e) {\n case \"play\":\n n.toggle = !0, n.label = \"play\", n.labelPressed = \"pause\", n.icon = \"play\", n.iconPressed = \"pause\";\n break;\n\n case \"mute\":\n n.toggle = !0, n.label = \"mute\", n.labelPressed = \"unmute\", n.icon = \"volume\", n.iconPressed = \"muted\";\n break;\n\n case \"captions\":\n n.toggle = !0, n.label = \"enableCaptions\", n.labelPressed = \"disableCaptions\", n.icon = \"captions-off\", n.iconPressed = \"captions-on\";\n break;\n\n case \"fullscreen\":\n n.toggle = !0, n.label = \"enterFullscreen\", n.labelPressed = \"exitFullscreen\", n.icon = \"enter-fullscreen\", n.iconPressed = \"exit-fullscreen\";\n break;\n\n case \"play-large\":\n i.class += \" \".concat(this.config.classNames.control, \"--overlaid\"), s = \"play\", n.label = \"play\", n.icon = \"play\";\n break;\n\n default:\n W(n.label) && (n.label = s), W(n.icon) && (n.icon = e);\n }\n\n const a = Z(n.element);\n return n.toggle ? (a.appendChild(We.createIcon.call(this, n.iconPressed, {\n class: \"icon--pressed\"\n })), a.appendChild(We.createIcon.call(this, n.icon, {\n class: \"icon--not-pressed\"\n })), a.appendChild(We.createLabel.call(this, n.labelPressed, {\n class: \"label--pressed\"\n })), a.appendChild(We.createLabel.call(this, n.label, {\n class: \"label--not-pressed\"\n }))) : (a.appendChild(We.createIcon.call(this, n.icon)), a.appendChild(We.createLabel.call(this, n.label))), X(i, ne(this.config.selectors.buttons[s], i)), G(a, i), \"play\" === s ? (D(this.elements.buttons[s]) || (this.elements.buttons[s] = []), this.elements.buttons[s].push(a)) : this.elements.buttons[s] = a, a;\n },\n\n createRange(e, t) {\n const i = Z(\"input\", X(ne(this.config.selectors.inputs[e]), {\n type: \"range\",\n min: 0,\n max: 100,\n step: .01,\n value: 0,\n autocomplete: \"off\",\n role: \"slider\",\n \"aria-label\": He.get(e, this.config),\n \"aria-valuemin\": 0,\n \"aria-valuemax\": 100,\n \"aria-valuenow\": 0\n }, t));\n return this.elements.inputs[e] = i, We.updateRangeFill.call(this, i), T.setup(i), i;\n },\n\n createProgress(e, t) {\n const i = Z(\"progress\", X(ne(this.config.selectors.display[e]), {\n min: 0,\n max: 100,\n value: 0,\n role: \"progressbar\",\n \"aria-hidden\": !0\n }, t));\n\n if (\"volume\" !== e) {\n i.appendChild(Z(\"span\", null, \"0\"));\n const t = {\n played: \"played\",\n buffer: \"buffered\"\n }[e],\n s = t ? He.get(t, this.config) : \"\";\n i.innerText = \"% \".concat(s.toLowerCase());\n }\n\n return this.elements.display[e] = i, i;\n },\n\n createTime(e, t) {\n const i = ne(this.config.selectors.display[e], t),\n s = Z(\"div\", X(i, {\n class: \"\".concat(i.class ? i.class : \"\", \" \").concat(this.config.classNames.display.time, \" \").trim(),\n \"aria-label\": He.get(e, this.config)\n }), \"00:00\");\n return this.elements.display[e] = s, s;\n },\n\n bindMenuItemShortcuts(e, t) {\n fe.call(this, e, \"keydown keyup\", i => {\n if (![\"Space\", \"ArrowUp\", \"ArrowDown\", \"ArrowRight\"].includes(i.key)) return;\n if (i.preventDefault(), i.stopPropagation(), \"keydown\" === i.type) return;\n const s = re(e, '[role=\"menuitemradio\"]');\n if (!s && [\"Space\", \"ArrowRight\"].includes(i.key)) We.showMenuPanel.call(this, t, !0);else {\n let t;\n \"Space\" !== i.key && (\"ArrowDown\" === i.key || s && \"ArrowRight\" === i.key ? (t = e.nextElementSibling, H(t) || (t = e.parentNode.firstElementChild)) : (t = e.previousElementSibling, H(t) || (t = e.parentNode.lastElementChild)), ue.call(this, t, !0));\n }\n }, !1), fe.call(this, e, \"keyup\", e => {\n \"Return\" === e.key && We.focusFirstMenuItem.call(this, null, !0);\n });\n },\n\n createMenuItem(_ref9) {\n let e = _ref9.value,\n t = _ref9.list,\n i = _ref9.type,\n s = _ref9.title,\n _ref9$badge = _ref9.badge,\n n = _ref9$badge === void 0 ? null : _ref9$badge,\n _ref9$checked = _ref9.checked,\n a = _ref9$checked === void 0 ? !1 : _ref9$checked;\n const l = ne(this.config.selectors.inputs[i]),\n o = Z(\"button\", X(l, {\n type: \"button\",\n role: \"menuitemradio\",\n class: \"\".concat(this.config.classNames.control, \" \").concat(l.class ? l.class : \"\").trim(),\n \"aria-checked\": a,\n value: e\n })),\n r = Z(\"span\");\n r.innerHTML = s, H(n) && r.appendChild(n), o.appendChild(r), Object.defineProperty(o, \"checked\", {\n enumerable: !0,\n get: () => \"true\" === o.getAttribute(\"aria-checked\"),\n\n set(e) {\n e && Array.from(o.parentNode.children).filter(e => re(e, '[role=\"menuitemradio\"]')).forEach(e => e.setAttribute(\"aria-checked\", \"false\")), o.setAttribute(\"aria-checked\", e ? \"true\" : \"false\");\n }\n\n }), this.listeners.bind(o, \"click keyup\", t => {\n if (!F(t) || \"Space\" === t.key) {\n switch (t.preventDefault(), t.stopPropagation(), o.checked = !0, i) {\n case \"language\":\n this.currentTrack = Number(e);\n break;\n\n case \"quality\":\n this.quality = e;\n break;\n\n case \"speed\":\n this.speed = parseFloat(e);\n }\n\n We.showMenuPanel.call(this, \"home\", F(t));\n }\n }, i, !1), We.bindMenuItemShortcuts.call(this, o, i), t.appendChild(o);\n },\n\n formatTime() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;\n if (!$(e)) return e;\n return Ue(e, Be(this.duration) > 0, t);\n },\n\n updateTimeDisplay() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !1;\n H(e) && $(t) && (e.innerText = We.formatTime(t, i));\n },\n\n updateVolume() {\n this.supported.ui && (H(this.elements.inputs.volume) && We.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume), H(this.elements.buttons.mute) && (this.elements.buttons.mute.pressed = this.muted || 0 === this.volume));\n },\n\n setRange(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n H(e) && (e.value = t, We.updateRangeFill.call(this, e));\n },\n\n updateProgress(e) {\n if (!this.supported.ui || !R(e)) return;\n let t = 0;\n\n const i = (e, t) => {\n const i = $(t) ? t : 0,\n s = H(e) ? e : this.elements.display.buffer;\n\n if (H(s)) {\n s.value = i;\n const e = s.getElementsByTagName(\"span\")[0];\n H(e) && (e.childNodes[0].nodeValue = i);\n }\n };\n\n if (e) switch (e.type) {\n case \"timeupdate\":\n case \"seeking\":\n case \"seeked\":\n s = this.currentTime, n = this.duration, t = 0 === s || 0 === n || Number.isNaN(s) || Number.isNaN(n) ? 0 : (s / n * 100).toFixed(2), \"timeupdate\" === e.type && We.setRange.call(this, this.elements.inputs.seek, t);\n break;\n\n case \"playing\":\n case \"progress\":\n i(this.elements.display.buffer, 100 * this.buffered);\n }\n var s, n;\n },\n\n updateRangeFill(e) {\n const t = R(e) ? e.target : e;\n\n if (H(t) && \"range\" === t.getAttribute(\"type\")) {\n if (re(t, this.config.selectors.inputs.seek)) {\n t.setAttribute(\"aria-valuenow\", this.currentTime);\n const e = We.formatTime(this.currentTime),\n i = We.formatTime(this.duration),\n s = He.get(\"seekLabel\", this.config);\n t.setAttribute(\"aria-valuetext\", s.replace(\"{currentTime}\", e).replace(\"{duration}\", i));\n } else if (re(t, this.config.selectors.inputs.volume)) {\n const e = 100 * t.value;\n t.setAttribute(\"aria-valuenow\", e), t.setAttribute(\"aria-valuetext\", \"\".concat(e.toFixed(1), \"%\"));\n } else t.setAttribute(\"aria-valuenow\", t.value);\n\n Y.isWebkit && t.style.setProperty(\"--value\", t.value / t.max * 100 + \"%\");\n }\n },\n\n updateSeekTooltip(e) {\n var t, i;\n if (!this.config.tooltips.seek || !H(this.elements.inputs.seek) || !H(this.elements.display.seekTooltip) || 0 === this.duration) return;\n\n const s = this.elements.display.seekTooltip,\n n = \"\".concat(this.config.classNames.tooltip, \"--visible\"),\n a = e => le(s, n, e);\n\n if (this.touch) return void a(!1);\n let l = 0;\n const o = this.elements.progress.getBoundingClientRect();\n if (R(e)) l = 100 / o.width * (e.pageX - o.left);else {\n if (!oe(s, n)) return;\n l = parseFloat(s.style.left, 10);\n }\n l < 0 ? l = 0 : l > 100 && (l = 100);\n const r = this.duration / 100 * l;\n s.innerText = We.formatTime(r);\n const c = null === (t = this.config.markers) || void 0 === t || null === (i = t.points) || void 0 === i ? void 0 : i.find(_ref10 => {\n let e = _ref10.time;\n return e === Math.round(r);\n });\n c && s.insertAdjacentHTML(\"afterbegin\", \"\".concat(c.label, \"
\")), s.style.left = \"\".concat(l, \"%\"), R(e) && [\"mouseenter\", \"mouseleave\"].includes(e.type) && a(\"mouseenter\" === e.type);\n },\n\n timeUpdate(e) {\n const t = !H(this.elements.display.duration) && this.config.invertTime;\n We.updateTimeDisplay.call(this, this.elements.display.currentTime, t ? this.duration - this.currentTime : this.currentTime, t), e && \"timeupdate\" === e.type && this.media.seeking || We.updateProgress.call(this, e);\n },\n\n durationUpdate() {\n if (!this.supported.ui || !this.config.invertTime && this.currentTime) return;\n if (this.duration >= 2 ** 32) return ae(this.elements.display.currentTime, !0), void ae(this.elements.progress, !0);\n H(this.elements.inputs.seek) && this.elements.inputs.seek.setAttribute(\"aria-valuemax\", this.duration);\n const e = H(this.elements.display.duration);\n !e && this.config.displayDuration && this.paused && We.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration), e && We.updateTimeDisplay.call(this, this.elements.display.duration, this.duration), this.config.markers.enabled && We.setMarkers.call(this), We.updateSeekTooltip.call(this);\n },\n\n toggleMenuButton(e, t) {\n ae(this.elements.settings.buttons[e], !t);\n },\n\n updateSetting(e, t, i) {\n const s = this.elements.settings.panels[e];\n let n = null,\n a = t;\n if (\"captions\" === e) n = this.currentTrack;else {\n if (n = W(i) ? this[e] : i, W(n) && (n = this.config[e].default), !W(this.options[e]) && !this.options[e].includes(n)) return void this.debug.warn(\"Unsupported value of '\".concat(n, \"' for \").concat(e));\n if (!this.config[e].options.includes(n)) return void this.debug.warn(\"Disabled value of '\".concat(n, \"' for \").concat(e));\n }\n if (H(a) || (a = s && s.querySelector('[role=\"menu\"]')), !H(a)) return;\n this.elements.settings.buttons[e].querySelector(\".\".concat(this.config.classNames.menu.value)).innerHTML = We.getLabel.call(this, e, n);\n const l = a && a.querySelector(\"[value=\\\"\".concat(n, \"\\\"]\"));\n H(l) && (l.checked = !0);\n },\n\n getLabel(e, t) {\n switch (e) {\n case \"speed\":\n return 1 === t ? He.get(\"normal\", this.config) : \"\".concat(t, \"×\");\n\n case \"quality\":\n if ($(t)) {\n const e = He.get(\"qualityLabel.\".concat(t), this.config);\n return e.length ? e : \"\".concat(t, \"p\");\n }\n\n return Oe(t);\n\n case \"captions\":\n return Ye.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n setQualityMenu(e) {\n if (!H(this.elements.settings.panels.quality)) return;\n const t = \"quality\",\n i = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n D(e) && (this.options.quality = Ce(e).filter(e => this.config.quality.options.includes(e)));\n const s = !W(this.options.quality) && this.options.quality.length > 1;\n if (We.toggleMenuButton.call(this, t, s), ie(i), We.checkMenu.call(this), !s) return;\n\n const n = e => {\n const t = He.get(\"qualityBadge.\".concat(e), this.config);\n return t.length ? We.createBadge.call(this, t) : null;\n };\n\n this.options.quality.sort((e, t) => {\n const i = this.config.quality.options;\n return i.indexOf(e) > i.indexOf(t) ? 1 : -1;\n }).forEach(e => {\n We.createMenuItem.call(this, {\n value: e,\n list: i,\n type: t,\n title: We.getLabel.call(this, \"quality\", e),\n badge: n(e)\n });\n }), We.updateSetting.call(this, t, i);\n },\n\n setCaptionsMenu() {\n if (!H(this.elements.settings.panels.captions)) return;\n const e = \"captions\",\n t = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]'),\n i = Ye.getTracks.call(this),\n s = Boolean(i.length);\n if (We.toggleMenuButton.call(this, e, s), ie(t), We.checkMenu.call(this), !s) return;\n const n = i.map((e, i) => ({\n value: i,\n checked: this.captions.toggled && this.currentTrack === i,\n title: Ye.getLabel.call(this, e),\n badge: e.language && We.createBadge.call(this, e.language.toUpperCase()),\n list: t,\n type: \"language\"\n }));\n n.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: He.get(\"disabled\", this.config),\n list: t,\n type: \"language\"\n }), n.forEach(We.createMenuItem.bind(this)), We.updateSetting.call(this, e, t);\n },\n\n setSpeedMenu() {\n if (!H(this.elements.settings.panels.speed)) return;\n const e = \"speed\",\n t = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n this.options.speed = this.options.speed.filter(e => e >= this.minimumSpeed && e <= this.maximumSpeed);\n const i = !W(this.options.speed) && this.options.speed.length > 1;\n We.toggleMenuButton.call(this, e, i), ie(t), We.checkMenu.call(this), i && (this.options.speed.forEach(i => {\n We.createMenuItem.call(this, {\n value: i,\n list: t,\n type: e,\n title: We.getLabel.call(this, \"speed\", i)\n });\n }), We.updateSetting.call(this, e, t));\n },\n\n checkMenu() {\n const e = this.elements.settings.buttons,\n t = !W(e) && Object.values(e).some(e => !e.hidden);\n ae(this.elements.settings.menu, !t);\n },\n\n focusFirstMenuItem(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;\n if (this.elements.settings.popup.hidden) return;\n let i = e;\n H(i) || (i = Object.values(this.elements.settings.panels).find(e => !e.hidden));\n const s = i.querySelector('[role^=\"menuitem\"]');\n ue.call(this, s, t);\n },\n\n toggleMenu(e) {\n const t = this.elements.settings.popup,\n i = this.elements.buttons.settings;\n if (!H(t) || !H(i)) return;\n const s = t.hidden;\n let n = s;\n if (O(e)) n = e;else if (F(e) && \"Escape\" === e.key) n = !1;else if (R(e)) {\n const s = j(e.composedPath) ? e.composedPath()[0] : e.target,\n a = t.contains(s);\n if (a || !a && e.target !== i && n) return;\n }\n i.setAttribute(\"aria-expanded\", n), ae(t, !n), le(this.elements.container, this.config.classNames.menu.open, n), n && F(e) ? We.focusFirstMenuItem.call(this, null, !0) : n || s || ue.call(this, i, F(e));\n },\n\n getMenuSize(e) {\n const t = e.cloneNode(!0);\n t.style.position = \"absolute\", t.style.opacity = 0, t.removeAttribute(\"hidden\"), e.parentNode.appendChild(t);\n const i = t.scrollWidth,\n s = t.scrollHeight;\n return te(t), {\n width: i,\n height: s\n };\n },\n\n showMenuPanel() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;\n const i = this.elements.container.querySelector(\"#plyr-settings-\".concat(this.id, \"-\").concat(e));\n if (!H(i)) return;\n const s = i.parentNode,\n n = Array.from(s.children).find(e => !e.hidden);\n\n if (me.transitions && !me.reducedMotion) {\n s.style.width = \"\".concat(n.scrollWidth, \"px\"), s.style.height = \"\".concat(n.scrollHeight, \"px\");\n\n const e = We.getMenuSize.call(this, i),\n t = e => {\n e.target === s && [\"width\", \"height\"].includes(e.propertyName) && (s.style.width = \"\", s.style.height = \"\", be.call(this, s, z, t));\n };\n\n fe.call(this, s, z, t), s.style.width = \"\".concat(e.width, \"px\"), s.style.height = \"\".concat(e.height, \"px\");\n }\n\n ae(n, !0), ae(i, !1), We.focusFirstMenuItem.call(this, i, t);\n },\n\n setDownloadUrl() {\n const e = this.elements.buttons.download;\n H(e) && e.setAttribute(\"href\", this.download);\n },\n\n create(e) {\n const t = We.bindMenuItemShortcuts,\n i = We.createButton,\n s = We.createProgress,\n n = We.createRange,\n a = We.createTime,\n l = We.setQualityMenu,\n o = We.setSpeedMenu,\n r = We.showMenuPanel;\n this.elements.controls = null, D(this.config.controls) && this.config.controls.includes(\"play-large\") && this.elements.container.appendChild(i.call(this, \"play-large\"));\n const c = Z(\"div\", ne(this.config.selectors.controls.wrapper));\n this.elements.controls = c;\n const h = {\n class: \"plyr__controls__item\"\n };\n return Ce(D(this.config.controls) ? this.config.controls : []).forEach(l => {\n if (\"restart\" === l && c.appendChild(i.call(this, \"restart\", h)), \"rewind\" === l && c.appendChild(i.call(this, \"rewind\", h)), \"play\" === l && c.appendChild(i.call(this, \"play\", h)), \"fast-forward\" === l && c.appendChild(i.call(this, \"fast-forward\", h)), \"progress\" === l) {\n const t = Z(\"div\", {\n class: \"\".concat(h.class, \" plyr__progress__container\")\n }),\n i = Z(\"div\", ne(this.config.selectors.progress));\n\n if (i.appendChild(n.call(this, \"seek\", {\n id: \"plyr-seek-\".concat(e.id)\n })), i.appendChild(s.call(this, \"buffer\")), this.config.tooltips.seek) {\n const e = Z(\"span\", {\n class: this.config.classNames.tooltip\n }, \"00:00\");\n i.appendChild(e), this.elements.display.seekTooltip = e;\n }\n\n this.elements.progress = i, t.appendChild(this.elements.progress), c.appendChild(t);\n }\n\n if (\"current-time\" === l && c.appendChild(a.call(this, \"currentTime\", h)), \"duration\" === l && c.appendChild(a.call(this, \"duration\", h)), \"mute\" === l || \"volume\" === l) {\n let t = this.elements.volume;\n\n if (H(t) && c.contains(t) || (t = Z(\"div\", X({}, h, {\n class: \"\".concat(h.class, \" plyr__volume\").trim()\n })), this.elements.volume = t, c.appendChild(t)), \"mute\" === l && t.appendChild(i.call(this, \"mute\")), \"volume\" === l && !Y.isIos) {\n const i = {\n max: 1,\n step: .05,\n value: this.config.volume\n };\n t.appendChild(n.call(this, \"volume\", X(i, {\n id: \"plyr-volume-\".concat(e.id)\n })));\n }\n }\n\n if (\"captions\" === l && c.appendChild(i.call(this, \"captions\", h)), \"settings\" === l && !W(this.config.settings)) {\n const s = Z(\"div\", X({}, h, {\n class: \"\".concat(h.class, \" plyr__menu\").trim(),\n hidden: \"\"\n }));\n s.appendChild(i.call(this, \"settings\", {\n \"aria-haspopup\": !0,\n \"aria-controls\": \"plyr-settings-\".concat(e.id),\n \"aria-expanded\": !1\n }));\n const n = Z(\"div\", {\n class: \"plyr__menu__container\",\n id: \"plyr-settings-\".concat(e.id),\n hidden: \"\"\n }),\n a = Z(\"div\"),\n l = Z(\"div\", {\n id: \"plyr-settings-\".concat(e.id, \"-home\")\n }),\n o = Z(\"div\", {\n role: \"menu\"\n });\n l.appendChild(o), a.appendChild(l), this.elements.settings.panels.home = l, this.config.settings.forEach(i => {\n const s = Z(\"button\", X(ne(this.config.selectors.buttons.settings), {\n type: \"button\",\n class: \"\".concat(this.config.classNames.control, \" \").concat(this.config.classNames.control, \"--forward\"),\n role: \"menuitem\",\n \"aria-haspopup\": !0,\n hidden: \"\"\n }));\n t.call(this, s, i), fe.call(this, s, \"click\", () => {\n r.call(this, i, !1);\n });\n const n = Z(\"span\", null, He.get(i, this.config)),\n l = Z(\"span\", {\n class: this.config.classNames.menu.value\n });\n l.innerHTML = e[i], n.appendChild(l), s.appendChild(n), o.appendChild(s);\n const c = Z(\"div\", {\n id: \"plyr-settings-\".concat(e.id, \"-\").concat(i),\n hidden: \"\"\n }),\n h = Z(\"button\", {\n type: \"button\",\n class: \"\".concat(this.config.classNames.control, \" \").concat(this.config.classNames.control, \"--back\")\n });\n h.appendChild(Z(\"span\", {\n \"aria-hidden\": !0\n }, He.get(i, this.config))), h.appendChild(Z(\"span\", {\n class: this.config.classNames.hidden\n }, He.get(\"menuBack\", this.config))), fe.call(this, c, \"keydown\", e => {\n \"ArrowLeft\" === e.key && (e.preventDefault(), e.stopPropagation(), r.call(this, \"home\", !0));\n }, !1), fe.call(this, h, \"click\", () => {\n r.call(this, \"home\", !1);\n }), c.appendChild(h), c.appendChild(Z(\"div\", {\n role: \"menu\"\n })), a.appendChild(c), this.elements.settings.buttons[i] = s, this.elements.settings.panels[i] = c;\n }), n.appendChild(a), s.appendChild(n), c.appendChild(s), this.elements.settings.popup = n, this.elements.settings.menu = s;\n }\n\n if (\"pip\" === l && me.pip && c.appendChild(i.call(this, \"pip\", h)), \"airplay\" === l && me.airplay && c.appendChild(i.call(this, \"airplay\", h)), \"download\" === l) {\n const e = X({}, h, {\n element: \"a\",\n href: this.download,\n target: \"_blank\"\n });\n this.isHTML5 && (e.download = \"\");\n const t = this.config.urls.download;\n !U(t) && this.isEmbed && X(e, {\n icon: \"logo-\".concat(this.provider),\n label: this.provider\n }), c.appendChild(i.call(this, \"download\", e));\n }\n\n \"fullscreen\" === l && c.appendChild(i.call(this, \"fullscreen\", h));\n }), this.isHTML5 && l.call(this, Le.getQualityOptions.call(this)), o.call(this), c;\n },\n\n inject() {\n if (this.config.loadSprite) {\n const e = We.getIconUrl.call(this);\n e.cors && Ve(e.url, \"sprite-plyr\");\n }\n\n this.id = Math.floor(1e4 * Math.random());\n let e = null;\n this.elements.controls = null;\n const t = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title\n };\n let i = !0;\n j(this.config.controls) && (this.config.controls = this.config.controls.call(this, t)), this.config.controls || (this.config.controls = []), H(this.config.controls) || _(this.config.controls) ? e = this.config.controls : (e = We.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: Ye.getLabel.call(this)\n }), i = !1);\n let s;\n i && _(this.config.controls) && (e = (e => {\n let i = e;\n return Object.entries(t).forEach(_ref11 => {\n let _ref12 = _slicedToArray(_ref11, 2),\n e = _ref12[0],\n t = _ref12[1];\n\n i = _e(i, \"{\".concat(e, \"}\"), t);\n }), i;\n })(e)), _(this.config.selectors.controls.container) && (s = document.querySelector(this.config.selectors.controls.container)), H(s) || (s = this.elements.container);\n\n if (s[H(e) ? \"insertAdjacentElement\" : \"insertAdjacentHTML\"](\"afterbegin\", e), H(this.elements.controls) || We.findElements.call(this), !W(this.elements.buttons)) {\n const e = e => {\n const t = this.config.classNames.controlPressed;\n Object.defineProperty(e, \"pressed\", {\n enumerable: !0,\n get: () => oe(e, t),\n\n set() {\n let i = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1;\n le(e, t, i);\n }\n\n });\n };\n\n Object.values(this.elements.buttons).filter(Boolean).forEach(t => {\n D(t) || q(t) ? Array.from(t).filter(Boolean).forEach(e) : e(t);\n });\n }\n\n if (Y.isEdge && K(s), this.config.tooltips.controls) {\n const _this$config = this.config,\n e = _this$config.classNames,\n t = _this$config.selectors,\n i = \"\".concat(t.controls.wrapper, \" \").concat(t.labels, \" .\").concat(e.hidden),\n s = ce.call(this, i);\n Array.from(s).forEach(e => {\n le(e, this.config.classNames.hidden, !1), le(e, this.config.classNames.tooltip, !0);\n });\n }\n },\n\n setMediaMetadata() {\n try {\n \"mediaSession\" in navigator && (navigator.mediaSession.metadata = new window.MediaMetadata({\n title: this.config.mediaMetadata.title,\n artist: this.config.mediaMetadata.artist,\n album: this.config.mediaMetadata.album,\n artwork: this.config.mediaMetadata.artwork\n }));\n } catch (e) {}\n },\n\n setMarkers() {\n var e, t;\n if (!this.duration || this.elements.markers) return;\n const i = null === (e = this.config.markers) || void 0 === e || null === (t = e.points) || void 0 === t ? void 0 : t.filter(_ref13 => {\n let e = _ref13.time;\n return e > 0 && e < this.duration;\n });\n if (null == i || !i.length) return;\n const s = document.createDocumentFragment(),\n n = document.createDocumentFragment();\n let a = null;\n\n const l = \"\".concat(this.config.classNames.tooltip, \"--visible\"),\n o = e => le(a, l, e);\n\n i.forEach(e => {\n const t = Z(\"span\", {\n class: this.config.classNames.marker\n }, \"\"),\n i = e.time / this.duration * 100 + \"%\";\n a && (t.addEventListener(\"mouseenter\", () => {\n e.label || (a.style.left = i, a.innerHTML = e.label, o(!0));\n }), t.addEventListener(\"mouseleave\", () => {\n o(!1);\n })), t.addEventListener(\"click\", () => {\n this.currentTime = e.time;\n }), t.style.left = i, n.appendChild(t);\n }), s.appendChild(n), this.config.tooltips.seek || (a = Z(\"span\", {\n class: this.config.classNames.tooltip\n }, \"\"), s.appendChild(a)), this.elements.markers = {\n points: n,\n tip: a\n }, this.elements.progress.appendChild(s);\n }\n\n };\n\n function ze(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0;\n let i = e;\n\n if (t) {\n const e = document.createElement(\"a\");\n e.href = i, i = e.href;\n }\n\n try {\n return new URL(i);\n } catch (e) {\n return null;\n }\n }\n\n function Ke(e) {\n const t = new URLSearchParams();\n return L(e) && Object.entries(e).forEach(_ref14 => {\n let _ref15 = _slicedToArray(_ref14, 2),\n e = _ref15[0],\n i = _ref15[1];\n\n t.set(e, i);\n }), t;\n }\n\n const Ye = {\n setup() {\n var _i2, _i3, _this$config$captions;\n\n if (!this.supported.ui) return;\n if (!this.isVideo || this.isYouTube || this.isHTML5 && !me.textTracks) return void (D(this.config.controls) && this.config.controls.includes(\"settings\") && this.config.settings.includes(\"captions\") && We.setCaptionsMenu.call(this));\n var e, t;\n\n if (H(this.elements.captions) || (this.elements.captions = Z(\"div\", ne(this.config.selectors.captions)), e = this.elements.captions, t = this.elements.wrapper, H(e) && H(t) && t.parentNode.insertBefore(e, t.nextSibling)), Y.isIE && window.URL) {\n const e = this.media.querySelectorAll(\"track\");\n Array.from(e).forEach(e => {\n const t = e.getAttribute(\"src\"),\n i = ze(t);\n null !== i && i.hostname !== window.location.href.hostname && [\"http:\", \"https:\"].includes(i.protocol) && Fe(t, \"blob\").then(t => {\n e.setAttribute(\"src\", window.URL.createObjectURL(t));\n }).catch(() => {\n te(e);\n });\n });\n }\n\n const i = Ce((navigator.languages || [navigator.language || navigator.userLanguage || \"en\"]).map(e => e.split(\"-\")[0]));\n let s = (this.storage.get(\"language\") || this.config.captions.language || \"auto\").toLowerCase();\n \"auto\" === s && (_i2 = i, _i3 = _slicedToArray(_i2, 1), s = _i3[0], _i2);\n let n = this.storage.get(\"captions\");\n\n if (O(n) || (_this$config$captions = this.config.captions, n = _this$config$captions.active, _this$config$captions), Object.assign(this.captions, {\n toggled: !1,\n active: n,\n language: s,\n languages: i\n }), this.isHTML5) {\n const e = this.config.captions.update ? \"addtrack removetrack\" : \"removetrack\";\n fe.call(this, this.media.textTracks, e, Ye.update.bind(this));\n }\n\n setTimeout(Ye.update.bind(this), 0);\n },\n\n update() {\n const e = Ye.getTracks.call(this, !0),\n _this$captions = this.captions,\n t = _this$captions.active,\n i = _this$captions.language,\n s = _this$captions.meta,\n n = _this$captions.currentTrackNode,\n a = Boolean(e.find(e => e.language === i));\n this.isHTML5 && this.isVideo && e.filter(e => !s.get(e)).forEach(e => {\n this.debug.log(\"Track added\", e), s.set(e, {\n default: \"showing\" === e.mode\n }), \"showing\" === e.mode && (e.mode = \"hidden\"), fe.call(this, e, \"cuechange\", () => Ye.updateCues.call(this));\n }), (a && this.language !== i || !e.includes(n)) && (Ye.setLanguage.call(this, i), Ye.toggle.call(this, t && a)), this.elements && le(this.elements.container, this.config.classNames.captions.enabled, !W(e)), D(this.config.controls) && this.config.controls.includes(\"settings\") && this.config.settings.includes(\"captions\") && We.setCaptionsMenu.call(this);\n },\n\n toggle(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0;\n if (!this.supported.ui) return;\n const i = this.captions.toggled,\n s = this.config.classNames.captions.active,\n n = I(e) ? !i : e;\n\n if (n !== i) {\n if (t || (this.captions.active = n, this.storage.set({\n captions: n\n })), !this.language && n && !t) {\n const e = Ye.getTracks.call(this),\n t = Ye.findTrack.call(this, [this.captions.language, ...this.captions.languages], !0);\n return this.captions.language = t.language, void Ye.set.call(this, e.indexOf(t));\n }\n\n this.elements.buttons.captions && (this.elements.buttons.captions.pressed = n), le(this.elements.container, s, n), this.captions.toggled = n, We.updateSetting.call(this, \"captions\"), ve.call(this, this.media, n ? \"captionsenabled\" : \"captionsdisabled\");\n }\n\n setTimeout(() => {\n n && this.captions.toggled && (this.captions.currentTrackNode.mode = \"hidden\");\n });\n },\n\n set(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0;\n const i = Ye.getTracks.call(this);\n if (-1 !== e) {\n if ($(e)) {\n if (e in i) {\n if (this.captions.currentTrack !== e) {\n this.captions.currentTrack = e;\n\n const s = i[e],\n _ref16 = s || {},\n n = _ref16.language;\n\n this.captions.currentTrackNode = s, We.updateSetting.call(this, \"captions\"), t || (this.captions.language = n, this.storage.set({\n language: n\n })), this.isVimeo && this.embed.enableTextTrack(n), ve.call(this, this.media, \"languagechange\");\n }\n\n Ye.toggle.call(this, !0, t), this.isHTML5 && this.isVideo && Ye.updateCues.call(this);\n } else this.debug.warn(\"Track not found\", e);\n } else this.debug.warn(\"Invalid caption argument\", e);\n } else Ye.toggle.call(this, !1, t);\n },\n\n setLanguage(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0;\n if (!_(e)) return void this.debug.warn(\"Invalid language argument\", e);\n const i = e.toLowerCase();\n this.captions.language = i;\n const s = Ye.getTracks.call(this),\n n = Ye.findTrack.call(this, [i]);\n Ye.set.call(this, s.indexOf(n), t);\n },\n\n getTracks() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1;\n return Array.from((this.media || {}).textTracks || []).filter(t => !this.isHTML5 || e || this.captions.meta.has(t)).filter(e => [\"captions\", \"subtitles\"].includes(e.kind));\n },\n\n findTrack(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;\n\n const i = Ye.getTracks.call(this),\n s = e => Number((this.captions.meta.get(e) || {}).default),\n n = Array.from(i).sort((e, t) => s(t) - s(e));\n\n let a;\n return e.every(e => (a = n.find(t => t.language === e), !a)), a || (t ? n[0] : void 0);\n },\n\n getCurrentTrack() {\n return Ye.getTracks.call(this)[this.currentTrack];\n },\n\n getLabel(e) {\n let t = e;\n return !V(t) && me.textTracks && this.captions.toggled && (t = Ye.getCurrentTrack.call(this)), V(t) ? W(t.label) ? W(t.language) ? He.get(\"enabled\", this.config) : e.language.toUpperCase() : t.label : He.get(\"disabled\", this.config);\n },\n\n updateCues(e) {\n if (!this.supported.ui) return;\n if (!H(this.elements.captions)) return void this.debug.warn(\"No captions element to render to\");\n if (!I(e) && !Array.isArray(e)) return void this.debug.warn(\"updateCues: Invalid input\", e);\n let t = e;\n\n if (!t) {\n const e = Ye.getCurrentTrack.call(this);\n t = Array.from((e || {}).activeCues || []).map(e => e.getCueAsHTML()).map(De);\n }\n\n const i = t.map(e => e.trim()).join(\"\\n\");\n\n if (i !== this.elements.captions.innerHTML) {\n ie(this.elements.captions);\n const e = Z(\"span\", ne(this.config.selectors.caption));\n e.innerHTML = i, this.elements.captions.appendChild(e), ve.call(this, this.media, \"cuechange\");\n }\n }\n\n },\n Qe = {\n enabled: !0,\n title: \"\",\n debug: !1,\n autoplay: !1,\n autopause: !0,\n playsinline: !0,\n seekTime: 10,\n volume: 1,\n muted: !1,\n duration: null,\n displayDuration: !0,\n invertTime: !0,\n toggleInvert: !0,\n ratio: null,\n clickToPlay: !0,\n hideControls: !0,\n resetOnEnd: !1,\n disableContextMenu: !0,\n loadSprite: !0,\n iconPrefix: \"plyr\",\n iconUrl: \"https://cdn.plyr.io/3.7.2/plyr.svg\",\n blankVideo: \"https://cdn.plyr.io/static/blank.mp4\",\n quality: {\n default: 576,\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n forced: !1,\n onChange: null\n },\n loop: {\n active: !1\n },\n speed: {\n selected: 1,\n options: [.5, .75, 1, 1.25, 1.5, 1.75, 2, 4]\n },\n keyboard: {\n focused: !0,\n global: !1\n },\n tooltips: {\n controls: !1,\n seek: !0\n },\n captions: {\n active: !1,\n language: \"auto\",\n update: !1\n },\n fullscreen: {\n enabled: !0,\n fallback: !0,\n iosNative: !1\n },\n storage: {\n enabled: !0,\n key: \"plyr\"\n },\n controls: [\"play-large\", \"play\", \"progress\", \"current-time\", \"mute\", \"volume\", \"captions\", \"settings\", \"pip\", \"airplay\", \"fullscreen\"],\n settings: [\"captions\", \"quality\", \"speed\"],\n i18n: {\n restart: \"Restart\",\n rewind: \"Rewind {seektime}s\",\n play: \"Play\",\n pause: \"Pause\",\n fastForward: \"Forward {seektime}s\",\n seek: \"Seek\",\n seekLabel: \"{currentTime} of {duration}\",\n played: \"Played\",\n buffered: \"Buffered\",\n currentTime: \"Current time\",\n duration: \"Duration\",\n volume: \"Volume\",\n mute: \"Mute\",\n unmute: \"Unmute\",\n enableCaptions: \"Enable captions\",\n disableCaptions: \"Disable captions\",\n download: \"Download\",\n enterFullscreen: \"Enter fullscreen\",\n exitFullscreen: \"Exit fullscreen\",\n frameTitle: \"Player for {title}\",\n captions: \"Captions\",\n settings: \"Settings\",\n pip: \"PIP\",\n menuBack: \"Go back to previous menu\",\n speed: \"Speed\",\n normal: \"Normal\",\n quality: \"Quality\",\n loop: \"Loop\",\n start: \"Start\",\n end: \"End\",\n all: \"All\",\n reset: \"Reset\",\n disabled: \"Disabled\",\n enabled: \"Enabled\",\n advertisement: \"Ad\",\n qualityBadge: {\n 2160: \"4K\",\n 1440: \"HD\",\n 1080: \"HD\",\n 720: \"HD\",\n 576: \"SD\",\n 480: \"SD\"\n }\n },\n urls: {\n download: null,\n vimeo: {\n sdk: \"https://player.vimeo.com/api/player.js\",\n iframe: \"https://player.vimeo.com/video/{0}?{1}\",\n api: \"https://vimeo.com/api/oembed.json?url={0}\"\n },\n youtube: {\n sdk: \"https://www.youtube.com/iframe_api\",\n api: \"https://noembed.com/embed?url=https://www.youtube.com/watch?v={0}\"\n },\n googleIMA: {\n sdk: \"https://imasdk.googleapis.com/js/sdkloader/ima3.js\"\n }\n },\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null\n },\n events: [\"ended\", \"progress\", \"stalled\", \"playing\", \"waiting\", \"canplay\", \"canplaythrough\", \"loadstart\", \"loadeddata\", \"loadedmetadata\", \"timeupdate\", \"volumechange\", \"play\", \"pause\", \"error\", \"seeking\", \"seeked\", \"emptied\", \"ratechange\", \"cuechange\", \"download\", \"enterfullscreen\", \"exitfullscreen\", \"captionsenabled\", \"captionsdisabled\", \"languagechange\", \"controlshidden\", \"controlsshown\", \"ready\", \"statechange\", \"qualitychange\", \"adsloaded\", \"adscontentpause\", \"adscontentresume\", \"adstarted\", \"adsmidpoint\", \"adscomplete\", \"adsallcomplete\", \"adsimpression\", \"adsclick\"],\n selectors: {\n editable: \"input, textarea, select, [contenteditable]\",\n container: \".plyr\",\n controls: {\n container: null,\n wrapper: \".plyr__controls\"\n },\n labels: \"[data-plyr]\",\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]'\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]'\n },\n display: {\n currentTime: \".plyr__time--current\",\n duration: \".plyr__time--duration\",\n buffer: \".plyr__progress__buffer\",\n loop: \".plyr__progress__loop\",\n volume: \".plyr__volume--display\"\n },\n progress: \".plyr__progress\",\n captions: \".plyr__captions\",\n caption: \".plyr__caption\"\n },\n classNames: {\n type: \"plyr--{0}\",\n provider: \"plyr--{0}\",\n video: \"plyr__video-wrapper\",\n embed: \"plyr__video-embed\",\n videoFixedRatio: \"plyr__video-wrapper--fixed-ratio\",\n embedContainer: \"plyr__video-embed__container\",\n poster: \"plyr__poster\",\n posterEnabled: \"plyr__poster-enabled\",\n ads: \"plyr__ads\",\n control: \"plyr__control\",\n controlPressed: \"plyr__control--pressed\",\n playing: \"plyr--playing\",\n paused: \"plyr--paused\",\n stopped: \"plyr--stopped\",\n loading: \"plyr--loading\",\n hover: \"plyr--hover\",\n tooltip: \"plyr__tooltip\",\n cues: \"plyr__cues\",\n marker: \"plyr__progress__marker\",\n hidden: \"plyr__sr-only\",\n hideControls: \"plyr--hide-controls\",\n isIos: \"plyr--is-ios\",\n isTouch: \"plyr--is-touch\",\n uiSupported: \"plyr--full-ui\",\n noTransition: \"plyr--no-transition\",\n display: {\n time: \"plyr__time\"\n },\n menu: {\n value: \"plyr__menu__value\",\n badge: \"plyr__badge\",\n open: \"plyr--menu-open\"\n },\n captions: {\n enabled: \"plyr--captions-enabled\",\n active: \"plyr--captions-active\"\n },\n fullscreen: {\n enabled: \"plyr--fullscreen-enabled\",\n fallback: \"plyr--fullscreen-fallback\"\n },\n pip: {\n supported: \"plyr--pip-supported\",\n active: \"plyr--pip-active\"\n },\n airplay: {\n supported: \"plyr--airplay-supported\",\n active: \"plyr--airplay-active\"\n },\n tabFocus: \"plyr__tab-focus\",\n previewThumbnails: {\n thumbContainer: \"plyr__preview-thumb\",\n thumbContainerShown: \"plyr__preview-thumb--is-shown\",\n imageContainer: \"plyr__preview-thumb__image-container\",\n timeContainer: \"plyr__preview-thumb__time-container\",\n scrubbingContainer: \"plyr__preview-scrubbing\",\n scrubbingContainerShown: \"plyr__preview-scrubbing--is-shown\"\n }\n },\n attributes: {\n embed: {\n provider: \"data-plyr-provider\",\n id: \"data-plyr-embed-id\",\n hash: \"data-plyr-embed-hash\"\n }\n },\n ads: {\n enabled: !1,\n publisherId: \"\",\n tagUrl: \"\"\n },\n previewThumbnails: {\n enabled: !1,\n src: \"\"\n },\n vimeo: {\n byline: !1,\n portrait: !1,\n title: !1,\n speed: !0,\n transparent: !1,\n customControls: !0,\n referrerPolicy: null,\n premium: !1\n },\n youtube: {\n rel: 0,\n showinfo: 0,\n iv_load_policy: 3,\n modestbranding: 1,\n customControls: !0,\n noCookie: !1\n },\n mediaMetadata: {\n title: \"\",\n artist: \"\",\n album: \"\",\n artwork: []\n },\n markers: {\n enabled: !1,\n points: []\n }\n },\n Xe = \"picture-in-picture\",\n Je = \"inline\",\n Ge = {\n html5: \"html5\",\n youtube: \"youtube\",\n vimeo: \"vimeo\"\n },\n Ze = \"audio\",\n et = \"video\";\n\n const tt = () => {};\n\n class it {\n constructor() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1;\n this.enabled = window.console && e, this.enabled && this.log(\"Debugging enabled\");\n }\n\n get log() {\n return this.enabled ? Function.prototype.bind.call(console.log, console) : tt;\n }\n\n get warn() {\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : tt;\n }\n\n get error() {\n return this.enabled ? Function.prototype.bind.call(console.error, console) : tt;\n }\n\n }\n\n class st {\n constructor(t) {\n var _this2 = this;\n\n e(this, \"onChange\", () => {\n if (!this.enabled) return;\n const e = this.player.elements.buttons.fullscreen;\n H(e) && (e.pressed = this.active);\n const t = this.target === this.player.media ? this.target : this.player.elements.container;\n ve.call(this.player, t, this.active ? \"enterfullscreen\" : \"exitfullscreen\", !0);\n }), e(this, \"toggleFallback\", function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1;\n\n if (e ? _this2.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0\n } : window.scrollTo(_this2.scrollPosition.x, _this2.scrollPosition.y), document.body.style.overflow = e ? \"hidden\" : \"\", le(_this2.target, _this2.player.config.classNames.fullscreen.fallback, e), Y.isIos) {\n let t = document.head.querySelector('meta[name=\"viewport\"]');\n const i = \"viewport-fit=cover\";\n t || (t = document.createElement(\"meta\"), t.setAttribute(\"name\", \"viewport\"));\n const s = _(t.content) && t.content.includes(i);\n e ? (_this2.cleanupViewport = !s, s || (t.content += \",\".concat(i))) : _this2.cleanupViewport && (t.content = t.content.split(\",\").filter(e => e.trim() !== i).join(\",\"));\n }\n\n _this2.onChange();\n }), e(this, \"trapFocus\", e => {\n if (Y.isIos || !this.active || \"Tab\" !== e.key) return;\n\n const t = document.activeElement,\n i = ce.call(this.player, \"a[href], button:not(:disabled), input:not(:disabled), [tabindex]\"),\n _i4 = _slicedToArray(i, 1),\n s = _i4[0],\n n = i[i.length - 1];\n\n t !== n || e.shiftKey ? t === s && e.shiftKey && (n.focus(), e.preventDefault()) : (s.focus(), e.preventDefault());\n }), e(this, \"update\", () => {\n if (this.enabled) {\n let e;\n e = this.forceFallback ? \"Fallback (forced)\" : st.native ? \"Native\" : \"Fallback\", this.player.debug.log(\"\".concat(e, \" fullscreen enabled\"));\n } else this.player.debug.log(\"Fullscreen not supported and fallback disabled\");\n\n le(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }), e(this, \"enter\", () => {\n this.enabled && (Y.isIos && this.player.config.fullscreen.iosNative ? this.player.isVimeo ? this.player.embed.requestFullscreen() : this.target.webkitEnterFullscreen() : !st.native || this.forceFallback ? this.toggleFallback(!0) : this.prefix ? W(this.prefix) || this.target[\"\".concat(this.prefix, \"Request\").concat(this.property)]() : this.target.requestFullscreen({\n navigationUI: \"hide\"\n }));\n }), e(this, \"exit\", () => {\n if (this.enabled) if (Y.isIos && this.player.config.fullscreen.iosNative) this.target.webkitExitFullscreen(), ke(this.player.play());else if (!st.native || this.forceFallback) this.toggleFallback(!1);else if (this.prefix) {\n if (!W(this.prefix)) {\n const e = \"moz\" === this.prefix ? \"Cancel\" : \"Exit\";\n document[\"\".concat(this.prefix).concat(e).concat(this.property)]();\n }\n } else (document.cancelFullScreen || document.exitFullscreen).call(document);\n }), e(this, \"toggle\", () => {\n this.active ? this.exit() : this.enter();\n }), this.player = t, this.prefix = st.prefix, this.property = st.property, this.scrollPosition = {\n x: 0,\n y: 0\n }, this.forceFallback = \"force\" === t.config.fullscreen.fallback, this.player.elements.fullscreen = t.config.fullscreen.container && function (e, t) {\n const _Element2 = Element,\n i = _Element2.prototype;\n return (i.closest || function () {\n let e = this;\n\n do {\n if (re.matches(e, t)) return e;\n e = e.parentElement || e.parentNode;\n } while (null !== e && 1 === e.nodeType);\n\n return null;\n }).call(e, t);\n }(this.player.elements.container, t.config.fullscreen.container), fe.call(this.player, document, \"ms\" === this.prefix ? \"MSFullscreenChange\" : \"\".concat(this.prefix, \"fullscreenchange\"), () => {\n this.onChange();\n }), fe.call(this.player, this.player.elements.container, \"dblclick\", e => {\n H(this.player.elements.controls) && this.player.elements.controls.contains(e.target) || this.player.listeners.proxy(e, this.toggle, \"fullscreen\");\n }), fe.call(this, this.player.elements.container, \"keydown\", e => this.trapFocus(e)), this.update();\n }\n\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n get usingNative() {\n return st.native && !this.forceFallback;\n }\n\n static get prefix() {\n if (j(document.exitFullscreen)) return \"\";\n let e = \"\";\n return [\"webkit\", \"moz\", \"ms\"].some(t => !(!j(document[\"\".concat(t, \"ExitFullscreen\")]) && !j(document[\"\".concat(t, \"CancelFullScreen\")])) && (e = t, !0)), e;\n }\n\n static get property() {\n return \"moz\" === this.prefix ? \"FullScreen\" : \"Fullscreen\";\n }\n\n get enabled() {\n return (st.native || this.player.config.fullscreen.fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n get active() {\n if (!this.enabled) return !1;\n if (!st.native || this.forceFallback) return oe(this.target, this.player.config.classNames.fullscreen.fallback);\n const e = this.prefix ? this.target.getRootNode()[\"\".concat(this.prefix).concat(this.property, \"Element\")] : this.target.getRootNode().fullscreenElement;\n return e && e.shadowRoot ? e === this.target.getRootNode().host : e === this.target;\n }\n\n get target() {\n return Y.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.fullscreen || this.player.elements.container;\n }\n\n }\n\n function nt(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return new Promise((i, s) => {\n const n = new Image(),\n a = () => {\n delete n.onload, delete n.onerror, (n.naturalWidth >= t ? i : s)(n);\n };\n\n Object.assign(n, {\n onload: a,\n onerror: a,\n src: e\n });\n });\n }\n\n const at = {\n addStyleHook() {\n le(this.elements.container, this.config.selectors.container.replace(\".\", \"\"), !0), le(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n toggleNativeControls() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1;\n e && this.isHTML5 ? this.media.setAttribute(\"controls\", \"\") : this.media.removeAttribute(\"controls\");\n },\n\n build() {\n if (this.listeners.media(), !this.supported.ui) return this.debug.warn(\"Basic support only for \".concat(this.provider, \" \").concat(this.type)), void at.toggleNativeControls.call(this, !0);\n H(this.elements.controls) || (We.inject.call(this), this.listeners.controls()), at.toggleNativeControls.call(this), this.isHTML5 && Ye.setup.call(this), this.volume = null, this.muted = null, this.loop = null, this.quality = null, this.speed = null, We.updateVolume.call(this), We.timeUpdate.call(this), We.durationUpdate.call(this), at.checkPlaying.call(this), le(this.elements.container, this.config.classNames.pip.supported, me.pip && this.isHTML5 && this.isVideo), le(this.elements.container, this.config.classNames.airplay.supported, me.airplay && this.isHTML5), le(this.elements.container, this.config.classNames.isIos, Y.isIos), le(this.elements.container, this.config.classNames.isTouch, this.touch), this.ready = !0, setTimeout(() => {\n ve.call(this, this.media, \"ready\");\n }, 0), at.setTitle.call(this), this.poster && at.setPoster.call(this, this.poster, !1).catch(() => {}), this.config.duration && We.durationUpdate.call(this), this.config.mediaMetadata && We.setMediaMetadata.call(this);\n },\n\n setTitle() {\n let e = He.get(\"play\", this.config);\n\n if (_(this.config.title) && !W(this.config.title) && (e += \", \".concat(this.config.title)), Array.from(this.elements.buttons.play || []).forEach(t => {\n t.setAttribute(\"aria-label\", e);\n }), this.isEmbed) {\n const e = he.call(this, \"iframe\");\n if (!H(e)) return;\n const t = W(this.config.title) ? \"video\" : this.config.title,\n i = He.get(\"frameTitle\", this.config);\n e.setAttribute(\"title\", i.replace(\"{title}\", t));\n }\n },\n\n togglePoster(e) {\n le(this.elements.container, this.config.classNames.posterEnabled, e);\n },\n\n setPoster(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0;\n return t && this.poster ? Promise.reject(new Error(\"Poster already set\")) : (this.media.setAttribute(\"data-poster\", e), this.elements.poster.removeAttribute(\"hidden\"), Te.call(this).then(() => nt(e)).catch(t => {\n throw e === this.poster && at.togglePoster.call(this, !1), t;\n }).then(() => {\n if (e !== this.poster) throw new Error(\"setPoster cancelled by later call to setPoster\");\n }).then(() => (Object.assign(this.elements.poster.style, {\n backgroundImage: \"url('\".concat(e, \"')\"),\n backgroundSize: \"\"\n }), at.togglePoster.call(this, !0), e)));\n },\n\n checkPlaying(e) {\n le(this.elements.container, this.config.classNames.playing, this.playing), le(this.elements.container, this.config.classNames.paused, this.paused), le(this.elements.container, this.config.classNames.stopped, this.stopped), Array.from(this.elements.buttons.play || []).forEach(e => {\n Object.assign(e, {\n pressed: this.playing\n }), e.setAttribute(\"aria-label\", He.get(this.playing ? \"pause\" : \"play\", this.config));\n }), R(e) && \"timeupdate\" === e.type || at.toggleControls.call(this);\n },\n\n checkLoading(e) {\n this.loading = [\"stalled\", \"waiting\"].includes(e.type), clearTimeout(this.timers.loading), this.timers.loading = setTimeout(() => {\n le(this.elements.container, this.config.classNames.loading, this.loading), at.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n toggleControls(e) {\n const t = this.elements.controls;\n\n if (t && this.config.hideControls) {\n const i = this.touch && this.lastSeekTime + 2e3 > Date.now();\n this.toggleControls(Boolean(e || this.loading || this.paused || t.pressed || t.hover || i));\n }\n },\n\n migrateStyles() {\n Object.values(_objectSpread({}, this.media.style)).filter(e => !W(e) && _(e) && e.startsWith(\"--plyr\")).forEach(e => {\n this.elements.container.style.setProperty(e, this.media.style.getPropertyValue(e)), this.media.style.removeProperty(e);\n }), W(this.media.style) && this.media.removeAttribute(\"style\");\n }\n\n };\n\n class lt {\n constructor(t) {\n var _this3 = this;\n\n e(this, \"firstTouch\", () => {\n const e = this.player,\n t = e.elements;\n e.touch = !0, le(t.container, e.config.classNames.isTouch, !0);\n }), e(this, \"setTabFocus\", e => {\n const t = this.player,\n i = t.elements,\n s = e.key,\n n = e.type,\n a = e.timeStamp;\n if (clearTimeout(this.focusTimer), \"keydown\" === n && \"Tab\" !== s) return;\n \"keydown\" === n && (this.lastKeyDown = a);\n const l = a - this.lastKeyDown <= 20;\n (\"focus\" !== n || l) && ((() => {\n const e = t.config.classNames.tabFocus;\n le(ce.call(t, \".\".concat(e)), e, !1);\n })(), \"focusout\" !== n && (this.focusTimer = setTimeout(() => {\n const e = document.activeElement;\n i.container.contains(e) && le(document.activeElement, t.config.classNames.tabFocus, !0);\n }, 10)));\n }), e(this, \"global\", function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !0;\n const t = _this3.player;\n t.config.keyboard.global && ge.call(t, window, \"keydown keyup\", _this3.handleKey, e, !1), ge.call(t, document.body, \"click\", _this3.toggleMenu, e), ye.call(t, document.body, \"touchstart\", _this3.firstTouch), ge.call(t, document.body, \"keydown focus blur focusout\", _this3.setTabFocus, e, !1, !0);\n }), e(this, \"container\", () => {\n const e = this.player,\n t = e.config,\n i = e.elements,\n s = e.timers;\n !t.keyboard.global && t.keyboard.focused && fe.call(e, i.container, \"keydown keyup\", this.handleKey, !1), fe.call(e, i.container, \"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen\", t => {\n const n = i.controls;\n n && \"enterfullscreen\" === t.type && (n.pressed = !1, n.hover = !1);\n let a = 0;\n [\"touchstart\", \"touchmove\", \"mousemove\"].includes(t.type) && (at.toggleControls.call(e, !0), a = e.touch ? 3e3 : 2e3), clearTimeout(s.controls), s.controls = setTimeout(() => at.toggleControls.call(e, !1), a);\n });\n\n const n = () => {\n if (!e.isVimeo || e.config.vimeo.premium) return;\n\n const t = i.wrapper,\n s = e.fullscreen.active,\n _Ne$call = Ne.call(e),\n _Ne$call2 = _slicedToArray(_Ne$call, 2),\n n = _Ne$call2[0],\n a = _Ne$call2[1],\n l = Se(\"aspect-ratio: \".concat(n, \" / \").concat(a));\n\n if (!s) return void (l ? (t.style.width = null, t.style.height = null) : (t.style.maxWidth = null, t.style.margin = null));\n const _ref17 = [Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0), Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)],\n o = _ref17[0],\n r = _ref17[1],\n c = o / r > n / a;\n l ? (t.style.width = c ? \"auto\" : \"100%\", t.style.height = c ? \"100%\" : \"auto\") : (t.style.maxWidth = c ? r / a * n + \"px\" : null, t.style.margin = c ? \"0 auto\" : null);\n },\n a = () => {\n clearTimeout(s.resized), s.resized = setTimeout(n, 50);\n };\n\n fe.call(e, i.container, \"enterfullscreen exitfullscreen\", t => {\n const s = e.fullscreen.target;\n if (s !== i.container) return;\n if (!e.isEmbed && W(e.config.ratio)) return;\n n();\n (\"enterfullscreen\" === t.type ? fe : be).call(e, window, \"resize\", a);\n });\n }), e(this, \"media\", () => {\n const e = this.player,\n t = e.elements;\n\n if (fe.call(e, e.media, \"timeupdate seeking seeked\", t => We.timeUpdate.call(e, t)), fe.call(e, e.media, \"durationchange loadeddata loadedmetadata\", t => We.durationUpdate.call(e, t)), fe.call(e, e.media, \"ended\", () => {\n e.isHTML5 && e.isVideo && e.config.resetOnEnd && (e.restart(), e.pause());\n }), fe.call(e, e.media, \"progress playing seeking seeked\", t => We.updateProgress.call(e, t)), fe.call(e, e.media, \"volumechange\", t => We.updateVolume.call(e, t)), fe.call(e, e.media, \"playing play pause ended emptied timeupdate\", t => at.checkPlaying.call(e, t)), fe.call(e, e.media, \"waiting canplay seeked playing\", t => at.checkLoading.call(e, t)), e.supported.ui && e.config.clickToPlay && !e.isAudio) {\n const i = he.call(e, \".\".concat(e.config.classNames.video));\n if (!H(i)) return;\n fe.call(e, t.container, \"click\", s => {\n ([t.container, i].includes(s.target) || i.contains(s.target)) && (e.touch && e.config.hideControls || (e.ended ? (this.proxy(s, e.restart, \"restart\"), this.proxy(s, () => {\n ke(e.play());\n }, \"play\")) : this.proxy(s, () => {\n ke(e.togglePlay());\n }, \"play\")));\n });\n }\n\n e.supported.ui && e.config.disableContextMenu && fe.call(e, t.wrapper, \"contextmenu\", e => {\n e.preventDefault();\n }, !1), fe.call(e, e.media, \"volumechange\", () => {\n e.storage.set({\n volume: e.volume,\n muted: e.muted\n });\n }), fe.call(e, e.media, \"ratechange\", () => {\n We.updateSetting.call(e, \"speed\"), e.storage.set({\n speed: e.speed\n });\n }), fe.call(e, e.media, \"qualitychange\", t => {\n We.updateSetting.call(e, \"quality\", null, t.detail.quality);\n }), fe.call(e, e.media, \"ready qualitychange\", () => {\n We.setDownloadUrl.call(e);\n });\n const i = e.config.events.concat([\"keyup\", \"keydown\"]).join(\" \");\n fe.call(e, e.media, i, i => {\n let _i$detail = i.detail,\n s = _i$detail === void 0 ? {} : _i$detail;\n \"error\" === i.type && (s = e.media.error), ve.call(e, t.container, i.type, !0, s);\n });\n }), e(this, \"proxy\", (e, t, i) => {\n const s = this.player,\n n = s.config.listeners[i];\n let a = !0;\n j(n) && (a = n.call(s, e)), !1 !== a && j(t) && t.call(s, e);\n }), e(this, \"bind\", function (e, t, i, s) {\n let n = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : !0;\n const a = _this3.player,\n l = a.config.listeners[s],\n o = j(l);\n fe.call(a, e, t, e => _this3.proxy(e, i, s), n && !o);\n }), e(this, \"controls\", () => {\n const e = this.player,\n t = e.elements,\n i = Y.isIE ? \"change\" : \"input\";\n\n if (t.buttons.play && Array.from(t.buttons.play).forEach(t => {\n this.bind(t, \"click\", () => {\n ke(e.togglePlay());\n }, \"play\");\n }), this.bind(t.buttons.restart, \"click\", e.restart, \"restart\"), this.bind(t.buttons.rewind, \"click\", () => {\n e.lastSeekTime = Date.now(), e.rewind();\n }, \"rewind\"), this.bind(t.buttons.fastForward, \"click\", () => {\n e.lastSeekTime = Date.now(), e.forward();\n }, \"fastForward\"), this.bind(t.buttons.mute, \"click\", () => {\n e.muted = !e.muted;\n }, \"mute\"), this.bind(t.buttons.captions, \"click\", () => e.toggleCaptions()), this.bind(t.buttons.download, \"click\", () => {\n ve.call(e, e.media, \"download\");\n }, \"download\"), this.bind(t.buttons.fullscreen, \"click\", () => {\n e.fullscreen.toggle();\n }, \"fullscreen\"), this.bind(t.buttons.pip, \"click\", () => {\n e.pip = \"toggle\";\n }, \"pip\"), this.bind(t.buttons.airplay, \"click\", e.airplay, \"airplay\"), this.bind(t.buttons.settings, \"click\", t => {\n t.stopPropagation(), t.preventDefault(), We.toggleMenu.call(e, t);\n }, null, !1), this.bind(t.buttons.settings, \"keyup\", t => {\n [\"Space\", \"Enter\"].includes(t.key) && (\"Enter\" !== t.key ? (t.preventDefault(), t.stopPropagation(), We.toggleMenu.call(e, t)) : We.focusFirstMenuItem.call(e, null, !0));\n }, null, !1), this.bind(t.settings.menu, \"keydown\", t => {\n \"Escape\" === t.key && We.toggleMenu.call(e, t);\n }), this.bind(t.inputs.seek, \"mousedown mousemove\", e => {\n const i = t.progress.getBoundingClientRect(),\n s = 100 / i.width * (e.pageX - i.left);\n e.currentTarget.setAttribute(\"seek-value\", s);\n }), this.bind(t.inputs.seek, \"mousedown mouseup keydown keyup touchstart touchend\", t => {\n const i = t.currentTarget,\n s = \"play-on-seeked\";\n if (F(t) && ![\"ArrowLeft\", \"ArrowRight\"].includes(t.key)) return;\n e.lastSeekTime = Date.now();\n const n = i.hasAttribute(s),\n a = [\"mouseup\", \"touchend\", \"keyup\"].includes(t.type);\n n && a ? (i.removeAttribute(s), ke(e.play())) : !a && e.playing && (i.setAttribute(s, \"\"), e.pause());\n }), Y.isIos) {\n const t = ce.call(e, 'input[type=\"range\"]');\n Array.from(t).forEach(e => this.bind(e, i, e => K(e.target)));\n }\n\n this.bind(t.inputs.seek, i, t => {\n const i = t.currentTarget;\n let s = i.getAttribute(\"seek-value\");\n W(s) && (s = i.value), i.removeAttribute(\"seek-value\"), e.currentTime = s / i.max * e.duration;\n }, \"seek\"), this.bind(t.progress, \"mouseenter mouseleave mousemove\", t => We.updateSeekTooltip.call(e, t)), this.bind(t.progress, \"mousemove touchmove\", t => {\n const i = e.previewThumbnails;\n i && i.loaded && i.startMove(t);\n }), this.bind(t.progress, \"mouseleave touchend click\", () => {\n const t = e.previewThumbnails;\n t && t.loaded && t.endMove(!1, !0);\n }), this.bind(t.progress, \"mousedown touchstart\", t => {\n const i = e.previewThumbnails;\n i && i.loaded && i.startScrubbing(t);\n }), this.bind(t.progress, \"mouseup touchend\", t => {\n const i = e.previewThumbnails;\n i && i.loaded && i.endScrubbing(t);\n }), Y.isWebkit && Array.from(ce.call(e, 'input[type=\"range\"]')).forEach(t => {\n this.bind(t, \"input\", t => We.updateRangeFill.call(e, t.target));\n }), e.config.toggleInvert && !H(t.display.duration) && this.bind(t.display.currentTime, \"click\", () => {\n 0 !== e.currentTime && (e.config.invertTime = !e.config.invertTime, We.timeUpdate.call(e));\n }), this.bind(t.inputs.volume, i, t => {\n e.volume = t.target.value;\n }, \"volume\"), this.bind(t.controls, \"mouseenter mouseleave\", i => {\n t.controls.hover = !e.touch && \"mouseenter\" === i.type;\n }), t.fullscreen && Array.from(t.fullscreen.children).filter(e => !e.contains(t.container)).forEach(i => {\n this.bind(i, \"mouseenter mouseleave\", i => {\n t.controls && (t.controls.hover = !e.touch && \"mouseenter\" === i.type);\n });\n }), this.bind(t.controls, \"mousedown mouseup touchstart touchend touchcancel\", e => {\n t.controls.pressed = [\"mousedown\", \"touchstart\"].includes(e.type);\n }), this.bind(t.controls, \"focusin\", () => {\n const i = e.config,\n s = e.timers;\n le(t.controls, i.classNames.noTransition, !0), at.toggleControls.call(e, !0), setTimeout(() => {\n le(t.controls, i.classNames.noTransition, !1);\n }, 0);\n const n = this.touch ? 3e3 : 4e3;\n clearTimeout(s.controls), s.controls = setTimeout(() => at.toggleControls.call(e, !1), n);\n }), this.bind(t.inputs.volume, \"wheel\", t => {\n const i = t.webkitDirectionInvertedFromDevice,\n _map = [t.deltaX, -t.deltaY].map(e => i ? -e : e),\n _map2 = _slicedToArray(_map, 2),\n s = _map2[0],\n n = _map2[1],\n a = Math.sign(Math.abs(s) > Math.abs(n) ? s : n);\n\n e.increaseVolume(a / 50);\n const l = e.media.volume;\n (1 === a && l < 1 || -1 === a && l > 0) && t.preventDefault();\n }, \"volume\", !1);\n }), this.player = t, this.lastKey = null, this.focusTimer = null, this.lastKeyDown = null, this.handleKey = this.handleKey.bind(this), this.toggleMenu = this.toggleMenu.bind(this), this.setTabFocus = this.setTabFocus.bind(this), this.firstTouch = this.firstTouch.bind(this);\n }\n\n handleKey(e) {\n const t = this.player,\n i = t.elements,\n s = e.key,\n n = e.type,\n a = e.altKey,\n l = e.ctrlKey,\n o = e.metaKey,\n r = e.shiftKey,\n c = \"keydown\" === n,\n h = c && s === this.lastKey;\n if (a || l || o || r) return;\n if (!s) return;\n\n if (c) {\n const n = document.activeElement;\n\n if (H(n)) {\n const s = t.config.selectors.editable,\n a = i.inputs.seek;\n if (n !== a && re(n, s)) return;\n if (\"Space\" === e.key && re(n, 'button, [role^=\"menuitem\"]')) return;\n }\n\n switch ([\"Space\", \"ArrowLeft\", \"ArrowUp\", \"ArrowRight\", \"ArrowDown\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"c\", \"f\", \"k\", \"l\", \"m\"].includes(s) && (e.preventDefault(), e.stopPropagation()), s) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n h || (u = parseInt(s, 10), t.currentTime = t.duration / 10 * u);\n break;\n\n case \"Space\":\n case \"k\":\n h || ke(t.togglePlay());\n break;\n\n case \"ArrowUp\":\n t.increaseVolume(.1);\n break;\n\n case \"ArrowDown\":\n t.decreaseVolume(.1);\n break;\n\n case \"m\":\n h || (t.muted = !t.muted);\n break;\n\n case \"ArrowRight\":\n t.forward();\n break;\n\n case \"ArrowLeft\":\n t.rewind();\n break;\n\n case \"f\":\n t.fullscreen.toggle();\n break;\n\n case \"c\":\n h || t.toggleCaptions();\n break;\n\n case \"l\":\n t.loop = !t.loop;\n }\n\n \"Escape\" === s && !t.fullscreen.usingNative && t.fullscreen.active && t.fullscreen.toggle(), this.lastKey = s;\n } else this.lastKey = null;\n\n var u;\n }\n\n toggleMenu(e) {\n We.toggleMenu.call(this.player, e);\n }\n\n }\n\n \"undefined\" != typeof globalThis ? globalThis : \"undefined\" != typeof window ? window : \"undefined\" != typeof global ? global : \"undefined\" != typeof self && self;\n\n var ot = function (e, t) {\n return e(t = {\n exports: {}\n }, t.exports), t.exports;\n }(function (e, t) {\n e.exports = function () {\n var e = function () {},\n t = {},\n i = {},\n s = {};\n\n function n(e, t) {\n e = e.push ? e : [e];\n var n,\n a,\n l,\n o = [],\n r = e.length,\n c = r;\n\n for (n = function (e, i) {\n i.length && o.push(e), --c || t(o);\n }; r--;) a = e[r], (l = i[a]) ? n(a, l) : (s[a] = s[a] || []).push(n);\n }\n\n function a(e, t) {\n if (e) {\n var n = s[e];\n if (i[e] = t, n) for (; n.length;) n[0](e, t), n.splice(0, 1);\n }\n }\n\n function l(t, i) {\n t.call && (t = {\n success: t\n }), i.length ? (t.error || e)(i) : (t.success || e)(t);\n }\n\n function o(t, i, s, n) {\n var a,\n l,\n r = document,\n c = s.async,\n h = (s.numRetries || 0) + 1,\n u = s.before || e,\n d = t.replace(/[\\?|#].*$/, \"\"),\n m = t.replace(/^(css|img)!/, \"\");\n n = n || 0, /(^css!|\\.css$)/.test(d) ? ((l = r.createElement(\"link\")).rel = \"stylesheet\", l.href = m, (a = \"hideFocus\" in l) && l.relList && (a = 0, l.rel = \"preload\", l.as = \"style\")) : /(^img!|\\.(png|gif|jpg|svg|webp)$)/.test(d) ? (l = r.createElement(\"img\")).src = m : ((l = r.createElement(\"script\")).src = t, l.async = void 0 === c || c), l.onload = l.onerror = l.onbeforeload = function (e) {\n var r = e.type[0];\n if (a) try {\n l.sheet.cssText.length || (r = \"e\");\n } catch (e) {\n 18 != e.code && (r = \"e\");\n }\n\n if (\"e\" == r) {\n if ((n += 1) < h) return o(t, i, s, n);\n } else if (\"preload\" == l.rel && \"style\" == l.as) return l.rel = \"stylesheet\";\n\n i(t, r, e.defaultPrevented);\n }, !1 !== u(t, l) && r.head.appendChild(l);\n }\n\n function r(e, t, i) {\n var s,\n n,\n a = (e = e.push ? e : [e]).length,\n l = a,\n r = [];\n\n for (s = function (e, i, s) {\n if (\"e\" == i && r.push(e), \"b\" == i) {\n if (!s) return;\n r.push(e);\n }\n\n --a || t(r);\n }, n = 0; n < l; n++) o(e[n], s, i);\n }\n\n function c(e, i, s) {\n var n, o;\n\n if (i && i.trim && (n = i), o = (n ? s : i) || {}, n) {\n if (n in t) throw \"LoadJS\";\n t[n] = !0;\n }\n\n function c(t, i) {\n r(e, function (e) {\n l(o, e), t && l({\n success: t,\n error: i\n }, e), a(n, e);\n }, o);\n }\n\n if (o.returnPromise) return new Promise(c);\n c();\n }\n\n return c.ready = function (e, t) {\n return n(e, function (e) {\n l(t, e);\n }), c;\n }, c.done = function (e) {\n a(e, []);\n }, c.reset = function () {\n t = {}, i = {}, s = {};\n }, c.isDefined = function (e) {\n return e in t;\n }, c;\n }();\n });\n\n function rt(e) {\n return new Promise((t, i) => {\n ot(e, {\n success: t,\n error: i\n });\n });\n }\n\n function ct(e) {\n e && !this.embed.hasPlayed && (this.embed.hasPlayed = !0), this.media.paused === e && (this.media.paused = !e, ve.call(this, this.media, e ? \"play\" : \"pause\"));\n }\n\n const ht = {\n setup() {\n const e = this;\n le(e.elements.wrapper, e.config.classNames.embed, !0), e.options.speed = e.config.speed.options, xe.call(e), L(window.Vimeo) ? ht.ready.call(e) : rt(e.config.urls.vimeo.sdk).then(() => {\n ht.ready.call(e);\n }).catch(t => {\n e.debug.warn(\"Vimeo SDK (player.js) failed to load\", t);\n });\n },\n\n ready() {\n const e = this,\n t = e.config.vimeo,\n i = t.premium,\n s = t.referrerPolicy,\n n = _objectWithoutProperties(t, _excluded);\n\n let a = e.media.getAttribute(\"src\"),\n l = \"\";\n W(a) ? (a = e.media.getAttribute(e.config.attributes.embed.id), l = e.media.getAttribute(e.config.attributes.embed.hash)) : l = function (e) {\n const t = e.match(/^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*&*h=|\\/)+([\\d,a-f]+)/);\n return t && 5 === t.length ? t[4] : null;\n }(a);\n const o = l ? {\n h: l\n } : {};\n i && Object.assign(n, {\n controls: !1,\n sidedock: !1\n });\n const r = Ke(_objectSpread(_objectSpread({\n loop: e.config.loop.active,\n autoplay: e.autoplay,\n muted: e.muted,\n gesture: \"media\",\n playsinline: !this.config.fullscreen.iosNative\n }, o), n)),\n c = W(h = a) ? null : $(Number(h)) ? h : h.match(/^.*(vimeo.com\\/|video\\/)(\\d+).*/) ? RegExp.$2 : h;\n var h;\n const u = Z(\"iframe\"),\n d = $e(e.config.urls.vimeo.iframe, c, r);\n if (u.setAttribute(\"src\", d), u.setAttribute(\"allowfullscreen\", \"\"), u.setAttribute(\"allow\", [\"autoplay\", \"fullscreen\", \"picture-in-picture\", \"encrypted-media\", \"accelerometer\", \"gyroscope\"].join(\"; \")), W(s) || u.setAttribute(\"referrerPolicy\", s), i || !t.customControls) u.setAttribute(\"data-poster\", e.poster), e.media = se(u, e.media);else {\n const t = Z(\"div\", {\n class: e.config.classNames.embedContainer,\n \"data-poster\": e.poster\n });\n t.appendChild(u), e.media = se(t, e.media);\n }\n t.customControls || Fe($e(e.config.urls.vimeo.api, d)).then(t => {\n !W(t) && t.thumbnail_url && at.setPoster.call(e, t.thumbnail_url).catch(() => {});\n }), e.embed = new window.Vimeo.Player(u, {\n autopause: e.config.autopause,\n muted: e.muted\n }), e.media.paused = !0, e.media.currentTime = 0, e.supported.ui && e.embed.disableTextTrack(), e.media.play = () => (ct.call(e, !0), e.embed.play()), e.media.pause = () => (ct.call(e, !1), e.embed.pause()), e.media.stop = () => {\n e.pause(), e.currentTime = 0;\n };\n let m = e.media.currentTime;\n Object.defineProperty(e.media, \"currentTime\", {\n get: () => m,\n\n set(t) {\n const i = e.embed,\n s = e.media,\n n = e.paused,\n a = e.volume,\n l = n && !i.hasPlayed;\n s.seeking = !0, ve.call(e, s, \"seeking\"), Promise.resolve(l && i.setVolume(0)).then(() => i.setCurrentTime(t)).then(() => l && i.pause()).then(() => l && i.setVolume(a)).catch(() => {});\n }\n\n });\n let p = e.config.speed.selected;\n Object.defineProperty(e.media, \"playbackRate\", {\n get: () => p,\n\n set(t) {\n e.embed.setPlaybackRate(t).then(() => {\n p = t, ve.call(e, e.media, \"ratechange\");\n }).catch(() => {\n e.options.speed = [1];\n });\n }\n\n });\n let g = e.config.volume;\n Object.defineProperty(e.media, \"volume\", {\n get: () => g,\n\n set(t) {\n e.embed.setVolume(t).then(() => {\n g = t, ve.call(e, e.media, \"volumechange\");\n });\n }\n\n });\n let f = e.config.muted;\n Object.defineProperty(e.media, \"muted\", {\n get: () => f,\n\n set(t) {\n const i = !!O(t) && t;\n e.embed.setVolume(i ? 0 : e.config.volume).then(() => {\n f = i, ve.call(e, e.media, \"volumechange\");\n });\n }\n\n });\n let b,\n y = e.config.loop;\n Object.defineProperty(e.media, \"loop\", {\n get: () => y,\n\n set(t) {\n const i = O(t) ? t : e.config.loop.active;\n e.embed.setLoop(i).then(() => {\n y = i;\n });\n }\n\n }), e.embed.getVideoUrl().then(t => {\n b = t, We.setDownloadUrl.call(e);\n }).catch(e => {\n this.debug.warn(e);\n }), Object.defineProperty(e.media, \"currentSrc\", {\n get: () => b\n }), Object.defineProperty(e.media, \"ended\", {\n get: () => e.currentTime === e.duration\n }), Promise.all([e.embed.getVideoWidth(), e.embed.getVideoHeight()]).then(t => {\n const _t = _slicedToArray(t, 2),\n i = _t[0],\n s = _t[1];\n\n e.embed.ratio = Ie(i, s), xe.call(this);\n }), e.embed.setAutopause(e.config.autopause).then(t => {\n e.config.autopause = t;\n }), e.embed.getVideoTitle().then(t => {\n e.config.title = t, at.setTitle.call(this);\n }), e.embed.getCurrentTime().then(t => {\n m = t, ve.call(e, e.media, \"timeupdate\");\n }), e.embed.getDuration().then(t => {\n e.media.duration = t, ve.call(e, e.media, \"durationchange\");\n }), e.embed.getTextTracks().then(t => {\n e.media.textTracks = t, Ye.setup.call(e);\n }), e.embed.on(\"cuechange\", _ref18 => {\n let _ref18$cues = _ref18.cues,\n t = _ref18$cues === void 0 ? [] : _ref18$cues;\n const i = t.map(e => function (e) {\n const t = document.createDocumentFragment(),\n i = document.createElement(\"div\");\n return t.appendChild(i), i.innerHTML = e, t.firstChild.innerText;\n }(e.text));\n Ye.updateCues.call(e, i);\n }), e.embed.on(\"loaded\", () => {\n if (e.embed.getPaused().then(t => {\n ct.call(e, !t), t || ve.call(e, e.media, \"playing\");\n }), H(e.embed.element) && e.supported.ui) {\n e.embed.element.setAttribute(\"tabindex\", -1);\n }\n }), e.embed.on(\"bufferstart\", () => {\n ve.call(e, e.media, \"waiting\");\n }), e.embed.on(\"bufferend\", () => {\n ve.call(e, e.media, \"playing\");\n }), e.embed.on(\"play\", () => {\n ct.call(e, !0), ve.call(e, e.media, \"playing\");\n }), e.embed.on(\"pause\", () => {\n ct.call(e, !1);\n }), e.embed.on(\"timeupdate\", t => {\n e.media.seeking = !1, m = t.seconds, ve.call(e, e.media, \"timeupdate\");\n }), e.embed.on(\"progress\", t => {\n e.media.buffered = t.percent, ve.call(e, e.media, \"progress\"), 1 === parseInt(t.percent, 10) && ve.call(e, e.media, \"canplaythrough\"), e.embed.getDuration().then(t => {\n t !== e.media.duration && (e.media.duration = t, ve.call(e, e.media, \"durationchange\"));\n });\n }), e.embed.on(\"seeked\", () => {\n e.media.seeking = !1, ve.call(e, e.media, \"seeked\");\n }), e.embed.on(\"ended\", () => {\n e.media.paused = !0, ve.call(e, e.media, \"ended\");\n }), e.embed.on(\"error\", t => {\n e.media.error = t, ve.call(e, e.media, \"error\");\n }), t.customControls && setTimeout(() => at.build.call(e), 0);\n }\n\n };\n\n function ut(e) {\n e && !this.embed.hasPlayed && (this.embed.hasPlayed = !0), this.media.paused === e && (this.media.paused = !e, ve.call(this, this.media, e ? \"play\" : \"pause\"));\n }\n\n function dt(e) {\n return e.noCookie ? \"https://www.youtube-nocookie.com\" : \"http:\" === window.location.protocol ? \"http://www.youtube.com\" : void 0;\n }\n\n const mt = {\n setup() {\n if (le(this.elements.wrapper, this.config.classNames.embed, !0), L(window.YT) && j(window.YT.Player)) mt.ready.call(this);else {\n const e = window.onYouTubeIframeAPIReady;\n window.onYouTubeIframeAPIReady = () => {\n j(e) && e(), mt.ready.call(this);\n }, rt(this.config.urls.youtube.sdk).catch(e => {\n this.debug.warn(\"YouTube API failed to load\", e);\n });\n }\n },\n\n getTitle(e) {\n Fe($e(this.config.urls.youtube.api, e)).then(e => {\n if (L(e)) {\n const t = e.title,\n i = e.height,\n s = e.width;\n this.config.title = t, at.setTitle.call(this), this.embed.ratio = Ie(s, i);\n }\n\n xe.call(this);\n }).catch(() => {\n xe.call(this);\n });\n },\n\n ready() {\n const e = this,\n t = e.config.youtube,\n i = e.media && e.media.getAttribute(\"id\");\n if (!W(i) && i.startsWith(\"youtube-\")) return;\n let s = e.media.getAttribute(\"src\");\n W(s) && (s = e.media.getAttribute(this.config.attributes.embed.id));\n const n = W(a = s) ? null : a.match(/^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/) ? RegExp.$2 : a;\n var a;\n const l = Z(\"div\", {\n id: \"\".concat(e.provider, \"-\").concat(Math.floor(1e4 * Math.random())),\n \"data-poster\": t.customControls ? e.poster : void 0\n });\n\n if (e.media = se(l, e.media), t.customControls) {\n const t = e => \"https://i.ytimg.com/vi/\".concat(n, \"/\").concat(e, \"default.jpg\");\n\n nt(t(\"maxres\"), 121).catch(() => nt(t(\"sd\"), 121)).catch(() => nt(t(\"hq\"))).then(t => at.setPoster.call(e, t.src)).then(t => {\n t.includes(\"maxres\") || (e.elements.poster.style.backgroundSize = \"cover\");\n }).catch(() => {});\n }\n\n e.embed = new window.YT.Player(e.media, {\n videoId: n,\n host: dt(t),\n playerVars: X({}, {\n autoplay: e.config.autoplay ? 1 : 0,\n hl: e.config.hl,\n controls: e.supported.ui && t.customControls ? 0 : 1,\n disablekb: 1,\n playsinline: e.config.fullscreen.iosNative ? 0 : 1,\n cc_load_policy: e.captions.active ? 1 : 0,\n cc_lang_pref: e.config.captions.language,\n widget_referrer: window ? window.location.href : null\n }, t),\n events: {\n onError(t) {\n if (!e.media.error) {\n const i = t.data,\n s = {\n 2: \"The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.\",\n 5: \"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.\",\n 100: \"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.\",\n 101: \"The owner of the requested video does not allow it to be played in embedded players.\",\n 150: \"The owner of the requested video does not allow it to be played in embedded players.\"\n }[i] || \"An unknown error occured\";\n e.media.error = {\n code: i,\n message: s\n }, ve.call(e, e.media, \"error\");\n }\n },\n\n onPlaybackRateChange(t) {\n const i = t.target;\n e.media.playbackRate = i.getPlaybackRate(), ve.call(e, e.media, \"ratechange\");\n },\n\n onReady(i) {\n if (j(e.media.play)) return;\n const s = i.target;\n mt.getTitle.call(e, n), e.media.play = () => {\n ut.call(e, !0), s.playVideo();\n }, e.media.pause = () => {\n ut.call(e, !1), s.pauseVideo();\n }, e.media.stop = () => {\n s.stopVideo();\n }, e.media.duration = s.getDuration(), e.media.paused = !0, e.media.currentTime = 0, Object.defineProperty(e.media, \"currentTime\", {\n get: () => Number(s.getCurrentTime()),\n\n set(t) {\n e.paused && !e.embed.hasPlayed && e.embed.mute(), e.media.seeking = !0, ve.call(e, e.media, \"seeking\"), s.seekTo(t);\n }\n\n }), Object.defineProperty(e.media, \"playbackRate\", {\n get: () => s.getPlaybackRate(),\n\n set(e) {\n s.setPlaybackRate(e);\n }\n\n });\n let a = e.config.volume;\n Object.defineProperty(e.media, \"volume\", {\n get: () => a,\n\n set(t) {\n a = t, s.setVolume(100 * a), ve.call(e, e.media, \"volumechange\");\n }\n\n });\n let l = e.config.muted;\n Object.defineProperty(e.media, \"muted\", {\n get: () => l,\n\n set(t) {\n const i = O(t) ? t : l;\n l = i, s[i ? \"mute\" : \"unMute\"](), s.setVolume(100 * a), ve.call(e, e.media, \"volumechange\");\n }\n\n }), Object.defineProperty(e.media, \"currentSrc\", {\n get: () => s.getVideoUrl()\n }), Object.defineProperty(e.media, \"ended\", {\n get: () => e.currentTime === e.duration\n });\n const o = s.getAvailablePlaybackRates();\n e.options.speed = o.filter(t => e.config.speed.options.includes(t)), e.supported.ui && t.customControls && e.media.setAttribute(\"tabindex\", -1), ve.call(e, e.media, \"timeupdate\"), ve.call(e, e.media, \"durationchange\"), clearInterval(e.timers.buffering), e.timers.buffering = setInterval(() => {\n e.media.buffered = s.getVideoLoadedFraction(), (null === e.media.lastBuffered || e.media.lastBuffered < e.media.buffered) && ve.call(e, e.media, \"progress\"), e.media.lastBuffered = e.media.buffered, 1 === e.media.buffered && (clearInterval(e.timers.buffering), ve.call(e, e.media, \"canplaythrough\"));\n }, 200), t.customControls && setTimeout(() => at.build.call(e), 50);\n },\n\n onStateChange(i) {\n const s = i.target;\n clearInterval(e.timers.playing);\n\n switch (e.media.seeking && [1, 2].includes(i.data) && (e.media.seeking = !1, ve.call(e, e.media, \"seeked\")), i.data) {\n case -1:\n ve.call(e, e.media, \"timeupdate\"), e.media.buffered = s.getVideoLoadedFraction(), ve.call(e, e.media, \"progress\");\n break;\n\n case 0:\n ut.call(e, !1), e.media.loop ? (s.stopVideo(), s.playVideo()) : ve.call(e, e.media, \"ended\");\n break;\n\n case 1:\n t.customControls && !e.config.autoplay && e.media.paused && !e.embed.hasPlayed ? e.media.pause() : (ut.call(e, !0), ve.call(e, e.media, \"playing\"), e.timers.playing = setInterval(() => {\n ve.call(e, e.media, \"timeupdate\");\n }, 50), e.media.duration !== s.getDuration() && (e.media.duration = s.getDuration(), ve.call(e, e.media, \"durationchange\")));\n break;\n\n case 2:\n e.muted || e.embed.unMute(), ut.call(e, !1);\n break;\n\n case 3:\n ve.call(e, e.media, \"waiting\");\n }\n\n ve.call(e, e.elements.container, \"statechange\", !1, {\n code: i.data\n });\n }\n\n }\n });\n }\n\n },\n pt = {\n setup() {\n this.media ? (le(this.elements.container, this.config.classNames.type.replace(\"{0}\", this.type), !0), le(this.elements.container, this.config.classNames.provider.replace(\"{0}\", this.provider), !0), this.isEmbed && le(this.elements.container, this.config.classNames.type.replace(\"{0}\", \"video\"), !0), this.isVideo && (this.elements.wrapper = Z(\"div\", {\n class: this.config.classNames.video\n }), J(this.media, this.elements.wrapper), this.elements.poster = Z(\"div\", {\n class: this.config.classNames.poster\n }), this.elements.wrapper.appendChild(this.elements.poster)), this.isHTML5 ? Le.setup.call(this) : this.isYouTube ? mt.setup.call(this) : this.isVimeo && ht.setup.call(this)) : this.debug.warn(\"No media element found!\");\n }\n\n };\n\n class gt {\n constructor(t) {\n var _this4 = this;\n\n e(this, \"load\", () => {\n this.enabled && (L(window.google) && L(window.google.ima) ? this.ready() : rt(this.player.config.urls.googleIMA.sdk).then(() => {\n this.ready();\n }).catch(() => {\n this.trigger(\"error\", new Error(\"Google IMA SDK failed to load\"));\n }));\n }), e(this, \"ready\", () => {\n var e;\n this.enabled || ((e = this).manager && e.manager.destroy(), e.elements.displayContainer && e.elements.displayContainer.destroy(), e.elements.container.remove()), this.startSafetyTimer(12e3, \"ready()\"), this.managerPromise.then(() => {\n this.clearSafetyTimer(\"onAdsManagerLoaded()\");\n }), this.listeners(), this.setupIMA();\n }), e(this, \"setupIMA\", () => {\n this.elements.container = Z(\"div\", {\n class: this.player.config.classNames.ads\n }), this.player.elements.container.appendChild(this.elements.container), google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED), google.ima.settings.setLocale(this.player.config.ads.language), google.ima.settings.setDisableCustomPlaybackForIOS10Plus(this.player.config.playsinline), this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media), this.loader = new google.ima.AdsLoader(this.elements.displayContainer), this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, e => this.onAdsManagerLoaded(e), !1), this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, e => this.onAdError(e), !1), this.requestAds();\n }), e(this, \"requestAds\", () => {\n const e = this.player.elements.container;\n\n try {\n const t = new google.ima.AdsRequest();\n t.adTagUrl = this.tagUrl, t.linearAdSlotWidth = e.offsetWidth, t.linearAdSlotHeight = e.offsetHeight, t.nonLinearAdSlotWidth = e.offsetWidth, t.nonLinearAdSlotHeight = e.offsetHeight, t.forceNonLinearFullSlot = !1, t.setAdWillPlayMuted(!this.player.muted), this.loader.requestAds(t);\n } catch (e) {\n this.onAdError(e);\n }\n }), e(this, \"pollCountdown\", function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1;\n if (!e) return clearInterval(_this4.countdownTimer), void _this4.elements.container.removeAttribute(\"data-badge-text\");\n _this4.countdownTimer = setInterval(() => {\n const e = Ue(Math.max(_this4.manager.getRemainingTime(), 0)),\n t = \"\".concat(He.get(\"advertisement\", _this4.player.config), \" - \").concat(e);\n\n _this4.elements.container.setAttribute(\"data-badge-text\", t);\n }, 100);\n }), e(this, \"onAdsManagerLoaded\", e => {\n if (!this.enabled) return;\n const t = new google.ima.AdsRenderingSettings();\n t.restoreCustomPlaybackStateOnAdBreakComplete = !0, t.enablePreloading = !0, this.manager = e.getAdsManager(this.player, t), this.cuePoints = this.manager.getCuePoints(), this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, e => this.onAdError(e)), Object.keys(google.ima.AdEvent.Type).forEach(e => {\n this.manager.addEventListener(google.ima.AdEvent.Type[e], e => this.onAdEvent(e));\n }), this.trigger(\"loaded\");\n }), e(this, \"addCuePoints\", () => {\n W(this.cuePoints) || this.cuePoints.forEach(e => {\n if (0 !== e && -1 !== e && e < this.player.duration) {\n const t = this.player.elements.progress;\n\n if (H(t)) {\n const i = 100 / this.player.duration * e,\n s = Z(\"span\", {\n class: this.player.config.classNames.cues\n });\n s.style.left = \"\".concat(i.toString(), \"%\"), t.appendChild(s);\n }\n }\n });\n }), e(this, \"onAdEvent\", e => {\n const t = this.player.elements.container,\n i = e.getAd(),\n s = e.getAdData();\n\n switch ((e => {\n ve.call(this.player, this.player.media, \"ads\".concat(e.replace(/_/g, \"\").toLowerCase()));\n })(e.type), e.type) {\n case google.ima.AdEvent.Type.LOADED:\n this.trigger(\"loaded\"), this.pollCountdown(!0), i.isLinear() || (i.width = t.offsetWidth, i.height = t.offsetHeight);\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n this.manager.setVolume(this.player.volume);\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n this.player.ended ? this.loadAds() : this.loader.contentComplete();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n this.pauseContent();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n this.pollCountdown(), this.resumeContent();\n break;\n\n case google.ima.AdEvent.Type.LOG:\n s.adError && this.player.debug.warn(\"Non-fatal ad error: \".concat(s.adError.getMessage()));\n }\n }), e(this, \"onAdError\", e => {\n this.cancel(), this.player.debug.warn(\"Ads error\", e);\n }), e(this, \"listeners\", () => {\n const e = this.player.elements.container;\n let t;\n this.player.on(\"canplay\", () => {\n this.addCuePoints();\n }), this.player.on(\"ended\", () => {\n this.loader.contentComplete();\n }), this.player.on(\"timeupdate\", () => {\n t = this.player.currentTime;\n }), this.player.on(\"seeked\", () => {\n const e = this.player.currentTime;\n W(this.cuePoints) || this.cuePoints.forEach((i, s) => {\n t < i && i < e && (this.manager.discardAdBreak(), this.cuePoints.splice(s, 1));\n });\n }), window.addEventListener(\"resize\", () => {\n this.manager && this.manager.resize(e.offsetWidth, e.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }), e(this, \"play\", () => {\n const e = this.player.elements.container;\n this.managerPromise || this.resumeContent(), this.managerPromise.then(() => {\n this.manager.setVolume(this.player.volume), this.elements.displayContainer.initialize();\n\n try {\n this.initialized || (this.manager.init(e.offsetWidth, e.offsetHeight, google.ima.ViewMode.NORMAL), this.manager.start()), this.initialized = !0;\n } catch (e) {\n this.onAdError(e);\n }\n }).catch(() => {});\n }), e(this, \"resumeContent\", () => {\n this.elements.container.style.zIndex = \"\", this.playing = !1, ke(this.player.media.play());\n }), e(this, \"pauseContent\", () => {\n this.elements.container.style.zIndex = 3, this.playing = !0, this.player.media.pause();\n }), e(this, \"cancel\", () => {\n this.initialized && this.resumeContent(), this.trigger(\"error\"), this.loadAds();\n }), e(this, \"loadAds\", () => {\n this.managerPromise.then(() => {\n this.manager && this.manager.destroy(), this.managerPromise = new Promise(e => {\n this.on(\"loaded\", e), this.player.debug.log(this.manager);\n }), this.initialized = !1, this.requestAds();\n }).catch(() => {});\n }), e(this, \"trigger\", function (e) {\n for (var _len4 = arguments.length, t = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n t[_key4 - 1] = arguments[_key4];\n }\n\n const i = _this4.events[e];\n D(i) && i.forEach(e => {\n j(e) && e.apply(_this4, t);\n });\n }), e(this, \"on\", (e, t) => (D(this.events[e]) || (this.events[e] = []), this.events[e].push(t), this)), e(this, \"startSafetyTimer\", (e, t) => {\n this.player.debug.log(\"Safety timer invoked from: \".concat(t)), this.safetyTimer = setTimeout(() => {\n this.cancel(), this.clearSafetyTimer(\"startSafetyTimer()\");\n }, e);\n }), e(this, \"clearSafetyTimer\", e => {\n I(this.safetyTimer) || (this.player.debug.log(\"Safety timer cleared from: \".concat(e)), clearTimeout(this.safetyTimer), this.safetyTimer = null);\n }), this.player = t, this.config = t.config.ads, this.playing = !1, this.initialized = !1, this.elements = {\n container: null,\n displayContainer: null\n }, this.manager = null, this.loader = null, this.cuePoints = null, this.events = {}, this.safetyTimer = null, this.countdownTimer = null, this.managerPromise = new Promise((e, t) => {\n this.on(\"loaded\", e), this.on(\"error\", t);\n }), this.load();\n }\n\n get enabled() {\n const e = this.config;\n return this.player.isHTML5 && this.player.isVideo && e.enabled && (!W(e.publisherId) || U(e.tagUrl));\n }\n\n get tagUrl() {\n const e = this.config;\n if (U(e.tagUrl)) return e.tagUrl;\n return \"https://go.aniview.com/api/adserver6/vast/?\".concat(Ke({\n AV_PUBLISHERID: \"58c25bb0073ef448b1087ad6\",\n AV_CHANNELID: \"5a0458dc28a06145e4519d21\",\n AV_URL: window.location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: e.publisherId\n }));\n }\n\n }\n\n function ft() {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 255;\n return Math.min(Math.max(e, t), i);\n }\n\n const bt = e => {\n const t = [];\n return e.split(/\\r\\n\\r\\n|\\n\\n|\\r\\r/).forEach(e => {\n const i = {};\n e.split(/\\r\\n|\\n|\\r/).forEach(e => {\n if ($(i.startTime)) {\n if (!W(e.trim()) && W(i.text)) {\n var _t2, _t$1$split, _t$1$split2;\n\n const t = e.trim().split(\"#xywh=\");\n (_t2 = _slicedToArray(t, 1), i.text = _t2[0]), t[1] && (_t$1$split = t[1].split(\",\"), _t$1$split2 = _slicedToArray(_t$1$split, 4), i.x = _t$1$split2[0], i.y = _t$1$split2[1], i.w = _t$1$split2[2], i.h = _t$1$split2[3], _t$1$split);\n }\n } else {\n const t = e.match(/([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})( ?--> ?)([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})/);\n t && (i.startTime = 60 * Number(t[1] || 0) * 60 + 60 * Number(t[2]) + Number(t[3]) + Number(\"0.\".concat(t[4])), i.endTime = 60 * Number(t[6] || 0) * 60 + 60 * Number(t[7]) + Number(t[8]) + Number(\"0.\".concat(t[9])));\n }\n }), i.text && t.push(i);\n }), t;\n },\n yt = (e, t) => {\n const i = {};\n return e > t.width / t.height ? (i.width = t.width, i.height = 1 / e * t.width) : (i.height = t.height, i.width = e * t.height), i;\n };\n\n class vt {\n constructor(t) {\n var _this5 = this;\n\n e(this, \"load\", () => {\n this.player.elements.display.seekTooltip && (this.player.elements.display.seekTooltip.hidden = this.enabled), this.enabled && this.getThumbnails().then(() => {\n this.enabled && (this.render(), this.determineContainerAutoSizing(), this.loaded = !0);\n });\n }), e(this, \"getThumbnails\", () => new Promise(e => {\n const t = this.player.config.previewThumbnails.src;\n if (W(t)) throw new Error(\"Missing previewThumbnails.src config attribute\");\n\n const i = () => {\n this.thumbnails.sort((e, t) => e.height - t.height), this.player.debug.log(\"Preview thumbnails\", this.thumbnails), e();\n };\n\n if (j(t)) t(e => {\n this.thumbnails = e, i();\n });else {\n const e = (_(t) ? [t] : t).map(e => this.getThumbnail(e));\n Promise.all(e).then(i);\n }\n })), e(this, \"getThumbnail\", e => new Promise(t => {\n Fe(e).then(i => {\n const s = {\n frames: bt(i),\n height: null,\n urlPrefix: \"\"\n };\n s.frames[0].text.startsWith(\"/\") || s.frames[0].text.startsWith(\"http://\") || s.frames[0].text.startsWith(\"https://\") || (s.urlPrefix = e.substring(0, e.lastIndexOf(\"/\") + 1));\n const n = new Image();\n n.onload = () => {\n s.height = n.naturalHeight, s.width = n.naturalWidth, this.thumbnails.push(s), t();\n }, n.src = s.urlPrefix + s.frames[0].text;\n });\n })), e(this, \"startMove\", e => {\n if (this.loaded && R(e) && [\"touchmove\", \"mousemove\"].includes(e.type) && this.player.media.duration) {\n if (\"touchmove\" === e.type) this.seekTime = this.player.media.duration * (this.player.elements.inputs.seek.value / 100);else {\n var t, i;\n const s = this.player.elements.progress.getBoundingClientRect(),\n n = 100 / s.width * (e.pageX - s.left);\n this.seekTime = this.player.media.duration * (n / 100), this.seekTime < 0 && (this.seekTime = 0), this.seekTime > this.player.media.duration - 1 && (this.seekTime = this.player.media.duration - 1), this.mousePosX = e.pageX, this.elements.thumb.time.innerText = Ue(this.seekTime);\n const a = null === (t = this.player.config.markers) || void 0 === t || null === (i = t.points) || void 0 === i ? void 0 : i.find(_ref19 => {\n let e = _ref19.time;\n return e === Math.round(this.seekTime);\n });\n a && this.elements.thumb.time.insertAdjacentHTML(\"afterbegin\", \"\".concat(a.label, \"
\"));\n }\n this.showImageAtCurrentTime();\n }\n }), e(this, \"endMove\", () => {\n this.toggleThumbContainer(!1, !0);\n }), e(this, \"startScrubbing\", e => {\n (I(e.button) || !1 === e.button || 0 === e.button) && (this.mouseDown = !0, this.player.media.duration && (this.toggleScrubbingContainer(!0), this.toggleThumbContainer(!1, !0), this.showImageAtCurrentTime()));\n }), e(this, \"endScrubbing\", () => {\n this.mouseDown = !1, Math.ceil(this.lastTime) === Math.ceil(this.player.media.currentTime) ? this.toggleScrubbingContainer(!1) : ye.call(this.player, this.player.media, \"timeupdate\", () => {\n this.mouseDown || this.toggleScrubbingContainer(!1);\n });\n }), e(this, \"listeners\", () => {\n this.player.on(\"play\", () => {\n this.toggleThumbContainer(!1, !0);\n }), this.player.on(\"seeked\", () => {\n this.toggleThumbContainer(!1);\n }), this.player.on(\"timeupdate\", () => {\n this.lastTime = this.player.media.currentTime;\n });\n }), e(this, \"render\", () => {\n this.elements.thumb.container = Z(\"div\", {\n class: this.player.config.classNames.previewThumbnails.thumbContainer\n }), this.elements.thumb.imageContainer = Z(\"div\", {\n class: this.player.config.classNames.previewThumbnails.imageContainer\n }), this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer);\n const e = Z(\"div\", {\n class: this.player.config.classNames.previewThumbnails.timeContainer\n });\n this.elements.thumb.time = Z(\"span\", {}, \"00:00\"), e.appendChild(this.elements.thumb.time), this.elements.thumb.imageContainer.appendChild(e), H(this.player.elements.progress) && this.player.elements.progress.appendChild(this.elements.thumb.container), this.elements.scrubbing.container = Z(\"div\", {\n class: this.player.config.classNames.previewThumbnails.scrubbingContainer\n }), this.player.elements.wrapper.appendChild(this.elements.scrubbing.container);\n }), e(this, \"destroy\", () => {\n this.elements.thumb.container && this.elements.thumb.container.remove(), this.elements.scrubbing.container && this.elements.scrubbing.container.remove();\n }), e(this, \"showImageAtCurrentTime\", () => {\n this.mouseDown ? this.setScrubbingContainerSize() : this.setThumbContainerSizeAndPos();\n const e = this.thumbnails[0].frames.findIndex(e => this.seekTime >= e.startTime && this.seekTime <= e.endTime),\n t = e >= 0;\n let i = 0;\n this.mouseDown || this.toggleThumbContainer(t), t && (this.thumbnails.forEach((t, s) => {\n this.loadedImages.includes(t.frames[e].text) && (i = s);\n }), e !== this.showingThumb && (this.showingThumb = e, this.loadImage(i)));\n }), e(this, \"loadImage\", function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n const t = _this5.showingThumb,\n i = _this5.thumbnails[e],\n s = i.urlPrefix,\n n = i.frames[t],\n a = i.frames[t].text,\n l = s + a;\n if (_this5.currentImageElement && _this5.currentImageElement.dataset.filename === a) _this5.showImage(_this5.currentImageElement, n, e, t, a, !1), _this5.currentImageElement.dataset.index = t, _this5.removeOldImages(_this5.currentImageElement);else {\n _this5.loadingImage && _this5.usingSprites && (_this5.loadingImage.onload = null);\n const i = new Image();\n i.src = l, i.dataset.index = t, i.dataset.filename = a, _this5.showingThumbFilename = a, _this5.player.debug.log(\"Loading image: \".concat(l)), i.onload = () => _this5.showImage(i, n, e, t, a, !0), _this5.loadingImage = i, _this5.removeOldImages(i);\n }\n }), e(this, \"showImage\", function (e, t, i, s, n) {\n let a = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : !0;\n _this5.player.debug.log(\"Showing thumb: \".concat(n, \". num: \").concat(s, \". qual: \").concat(i, \". newimg: \").concat(a)), _this5.setImageSizeAndOffset(e, t), a && (_this5.currentImageContainer.appendChild(e), _this5.currentImageElement = e, _this5.loadedImages.includes(n) || _this5.loadedImages.push(n)), _this5.preloadNearby(s, !0).then(_this5.preloadNearby(s, !1)).then(_this5.getHigherQuality(i, e, t, n));\n }), e(this, \"removeOldImages\", e => {\n Array.from(this.currentImageContainer.children).forEach(t => {\n if (\"img\" !== t.tagName.toLowerCase()) return;\n const i = this.usingSprites ? 500 : 1e3;\n\n if (t.dataset.index !== e.dataset.index && !t.dataset.deleting) {\n t.dataset.deleting = !0;\n const e = this.currentImageContainer;\n setTimeout(() => {\n e.removeChild(t), this.player.debug.log(\"Removing thumb: \".concat(t.dataset.filename));\n }, i);\n }\n });\n }), e(this, \"preloadNearby\", function (e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0;\n return new Promise(i => {\n setTimeout(() => {\n const s = _this5.thumbnails[0].frames[e].text;\n\n if (_this5.showingThumbFilename === s) {\n let n;\n n = t ? _this5.thumbnails[0].frames.slice(e) : _this5.thumbnails[0].frames.slice(0, e).reverse();\n let a = !1;\n n.forEach(e => {\n const t = e.text;\n\n if (t !== s && !_this5.loadedImages.includes(t)) {\n a = !0, _this5.player.debug.log(\"Preloading thumb filename: \".concat(t));\n const e = _this5.thumbnails[0].urlPrefix,\n s = e + t,\n n = new Image();\n n.src = s, n.onload = () => {\n _this5.player.debug.log(\"Preloaded thumb filename: \".concat(t)), _this5.loadedImages.includes(t) || _this5.loadedImages.push(t), i();\n };\n }\n }), a || i();\n }\n }, 300);\n });\n }), e(this, \"getHigherQuality\", (e, t, i, s) => {\n if (e < this.thumbnails.length - 1) {\n let n = t.naturalHeight;\n this.usingSprites && (n = i.h), n < this.thumbContainerHeight && setTimeout(() => {\n this.showingThumbFilename === s && (this.player.debug.log(\"Showing higher quality thumb for: \".concat(s)), this.loadImage(e + 1));\n }, 300);\n }\n }), e(this, \"toggleThumbContainer\", function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1;\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;\n const i = _this5.player.config.classNames.previewThumbnails.thumbContainerShown;\n _this5.elements.thumb.container.classList.toggle(i, e), !e && t && (_this5.showingThumb = null, _this5.showingThumbFilename = null);\n }), e(this, \"toggleScrubbingContainer\", function () {\n let e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !1;\n const t = _this5.player.config.classNames.previewThumbnails.scrubbingContainerShown;\n _this5.elements.scrubbing.container.classList.toggle(t, e), e || (_this5.showingThumb = null, _this5.showingThumbFilename = null);\n }), e(this, \"determineContainerAutoSizing\", () => {\n (this.elements.thumb.imageContainer.clientHeight > 20 || this.elements.thumb.imageContainer.clientWidth > 20) && (this.sizeSpecifiedInCSS = !0);\n }), e(this, \"setThumbContainerSizeAndPos\", () => {\n const e = this.elements.thumb.imageContainer;\n\n if (this.sizeSpecifiedInCSS) {\n if (e.clientHeight > 20 && e.clientWidth < 20) {\n const t = Math.floor(e.clientHeight * this.thumbAspectRatio);\n e.style.width = \"\".concat(t, \"px\");\n } else if (e.clientHeight < 20 && e.clientWidth > 20) {\n const t = Math.floor(e.clientWidth / this.thumbAspectRatio);\n e.style.height = \"\".concat(t, \"px\");\n }\n } else {\n const t = Math.floor(this.thumbContainerHeight * this.thumbAspectRatio);\n e.style.height = \"\".concat(this.thumbContainerHeight, \"px\"), e.style.width = \"\".concat(t, \"px\");\n }\n\n this.setThumbContainerPos();\n }), e(this, \"setThumbContainerPos\", () => {\n const e = this.player.elements.progress.getBoundingClientRect(),\n t = this.player.elements.container.getBoundingClientRect(),\n i = this.elements.thumb.container,\n s = t.left - e.left + 10,\n n = t.right - e.left - i.clientWidth - 10,\n a = this.mousePosX - e.left - i.clientWidth / 2,\n l = ft(a, s, n);\n i.style.left = \"\".concat(l, \"px\"), i.style.setProperty(\"--preview-arrow-offset\", a - l + \"px\");\n }), e(this, \"setScrubbingContainerSize\", () => {\n const _yt = yt(this.thumbAspectRatio, {\n width: this.player.media.clientWidth,\n height: this.player.media.clientHeight\n }),\n e = _yt.width,\n t = _yt.height;\n\n this.elements.scrubbing.container.style.width = \"\".concat(e, \"px\"), this.elements.scrubbing.container.style.height = \"\".concat(t, \"px\");\n }), e(this, \"setImageSizeAndOffset\", (e, t) => {\n if (!this.usingSprites) return;\n const i = this.thumbContainerHeight / t.h;\n e.style.height = e.naturalHeight * i + \"px\", e.style.width = e.naturalWidth * i + \"px\", e.style.left = \"-\".concat(t.x * i, \"px\"), e.style.top = \"-\".concat(t.y * i, \"px\");\n }), this.player = t, this.thumbnails = [], this.loaded = !1, this.lastMouseMoveTime = Date.now(), this.mouseDown = !1, this.loadedImages = [], this.elements = {\n thumb: {},\n scrubbing: {}\n }, this.load();\n }\n\n get enabled() {\n return this.player.isHTML5 && this.player.isVideo && this.player.config.previewThumbnails.enabled;\n }\n\n get currentImageContainer() {\n return this.mouseDown ? this.elements.scrubbing.container : this.elements.thumb.imageContainer;\n }\n\n get usingSprites() {\n return Object.keys(this.thumbnails[0].frames[0]).includes(\"w\");\n }\n\n get thumbAspectRatio() {\n return this.usingSprites ? this.thumbnails[0].frames[0].w / this.thumbnails[0].frames[0].h : this.thumbnails[0].width / this.thumbnails[0].height;\n }\n\n get thumbContainerHeight() {\n if (this.mouseDown) {\n const _yt2 = yt(this.thumbAspectRatio, {\n width: this.player.media.clientWidth,\n height: this.player.media.clientHeight\n }),\n e = _yt2.height;\n\n return e;\n }\n\n return this.sizeSpecifiedInCSS ? this.elements.thumb.imageContainer.clientHeight : Math.floor(this.player.media.clientWidth / this.thumbAspectRatio / 4);\n }\n\n get currentImageElement() {\n return this.mouseDown ? this.currentScrubbingImageElement : this.currentThumbnailImageElement;\n }\n\n set currentImageElement(e) {\n this.mouseDown ? this.currentScrubbingImageElement = e : this.currentThumbnailImageElement = e;\n }\n\n }\n\n const wt = {\n insertElements(e, t) {\n _(t) ? ee(e, this.media, {\n src: t\n }) : D(t) && t.forEach(t => {\n ee(e, this.media, t);\n });\n },\n\n change(e) {\n Q(e, \"sources.length\") ? (Le.cancelRequests.call(this), this.destroy.call(this, () => {\n this.options.quality = [], te(this.media), this.media = null, H(this.elements.container) && this.elements.container.removeAttribute(\"class\");\n\n const t = e.sources,\n i = e.type,\n _t3 = _slicedToArray(t, 1),\n _t3$ = _t3[0],\n _t3$$provider = _t3$.provider,\n s = _t3$$provider === void 0 ? Ge.html5 : _t3$$provider,\n n = _t3$.src,\n a = \"html5\" === s ? i : \"div\",\n l = \"html5\" === s ? {} : {\n src: n\n };\n\n Object.assign(this, {\n provider: s,\n type: i,\n supported: me.check(i, s, this.config.playsinline),\n media: Z(a, l)\n }), this.elements.container.appendChild(this.media), O(e.autoplay) && (this.config.autoplay = e.autoplay), this.isHTML5 && (this.config.crossorigin && this.media.setAttribute(\"crossorigin\", \"\"), this.config.autoplay && this.media.setAttribute(\"autoplay\", \"\"), W(e.poster) || (this.poster = e.poster), this.config.loop.active && this.media.setAttribute(\"loop\", \"\"), this.config.muted && this.media.setAttribute(\"muted\", \"\"), this.config.playsinline && this.media.setAttribute(\"playsinline\", \"\")), at.addStyleHook.call(this), this.isHTML5 && wt.insertElements.call(this, \"source\", t), this.config.title = e.title, pt.setup.call(this), this.isHTML5 && Object.keys(e).includes(\"tracks\") && wt.insertElements.call(this, \"track\", e.tracks), (this.isHTML5 || this.isEmbed && !this.supported.ui) && at.build.call(this), this.isHTML5 && this.media.load(), W(e.previewThumbnails) || (Object.assign(this.config.previewThumbnails, e.previewThumbnails), this.previewThumbnails && this.previewThumbnails.loaded && (this.previewThumbnails.destroy(), this.previewThumbnails = null), this.config.previewThumbnails.enabled && (this.previewThumbnails = new vt(this))), this.fullscreen.update();\n }, !0)) : this.debug.warn(\"Invalid source format\");\n }\n\n };\n\n class Tt {\n constructor(t, i) {\n var _this6 = this;\n\n if (e(this, \"play\", () => j(this.media.play) ? (this.ads && this.ads.enabled && this.ads.managerPromise.then(() => this.ads.play()).catch(() => ke(this.media.play())), this.media.play()) : null), e(this, \"pause\", () => this.playing && j(this.media.pause) ? this.media.pause() : null), e(this, \"togglePlay\", e => (O(e) ? e : !this.playing) ? this.play() : this.pause()), e(this, \"stop\", () => {\n this.isHTML5 ? (this.pause(), this.restart()) : j(this.media.stop) && this.media.stop();\n }), e(this, \"restart\", () => {\n this.currentTime = 0;\n }), e(this, \"rewind\", e => {\n this.currentTime -= $(e) ? e : this.config.seekTime;\n }), e(this, \"forward\", e => {\n this.currentTime += $(e) ? e : this.config.seekTime;\n }), e(this, \"increaseVolume\", e => {\n const t = this.media.muted ? 0 : this.volume;\n this.volume = t + ($(e) ? e : 0);\n }), e(this, \"decreaseVolume\", e => {\n this.increaseVolume(-e);\n }), e(this, \"airplay\", () => {\n me.airplay && this.media.webkitShowPlaybackTargetPicker();\n }), e(this, \"toggleControls\", e => {\n if (this.supported.ui && !this.isAudio) {\n const t = oe(this.elements.container, this.config.classNames.hideControls),\n i = void 0 === e ? void 0 : !e,\n s = le(this.elements.container, this.config.classNames.hideControls, i);\n\n if (s && D(this.config.controls) && this.config.controls.includes(\"settings\") && !W(this.config.settings) && We.toggleMenu.call(this, !1), s !== t) {\n const e = s ? \"controlshidden\" : \"controlsshown\";\n ve.call(this, this.media, e);\n }\n\n return !s;\n }\n\n return !1;\n }), e(this, \"on\", (e, t) => {\n fe.call(this, this.elements.container, e, t);\n }), e(this, \"once\", (e, t) => {\n ye.call(this, this.elements.container, e, t);\n }), e(this, \"off\", (e, t) => {\n be(this.elements.container, e, t);\n }), e(this, \"destroy\", function (e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !1;\n if (!_this6.ready) return;\n\n const i = () => {\n document.body.style.overflow = \"\", _this6.embed = null, t ? (Object.keys(_this6.elements).length && (te(_this6.elements.buttons.play), te(_this6.elements.captions), te(_this6.elements.controls), te(_this6.elements.wrapper), _this6.elements.buttons.play = null, _this6.elements.captions = null, _this6.elements.controls = null, _this6.elements.wrapper = null), j(e) && e()) : (we.call(_this6), Le.cancelRequests.call(_this6), se(_this6.elements.original, _this6.elements.container), ve.call(_this6, _this6.elements.original, \"destroyed\", !0), j(e) && e.call(_this6.elements.original), _this6.ready = !1, setTimeout(() => {\n _this6.elements = null, _this6.media = null;\n }, 200));\n };\n\n _this6.stop(), clearTimeout(_this6.timers.loading), clearTimeout(_this6.timers.controls), clearTimeout(_this6.timers.resized), _this6.isHTML5 ? (at.toggleNativeControls.call(_this6, !0), i()) : _this6.isYouTube ? (clearInterval(_this6.timers.buffering), clearInterval(_this6.timers.playing), null !== _this6.embed && j(_this6.embed.destroy) && _this6.embed.destroy(), i()) : _this6.isVimeo && (null !== _this6.embed && _this6.embed.unload().then(i), setTimeout(i, 200));\n }), e(this, \"supports\", e => me.mime.call(this, e)), this.timers = {}, this.ready = !1, this.loading = !1, this.failed = !1, this.touch = me.touch, this.media = t, _(this.media) && (this.media = document.querySelectorAll(this.media)), (window.jQuery && this.media instanceof jQuery || q(this.media) || D(this.media)) && (this.media = this.media[0]), this.config = X({}, Qe, Tt.defaults, i || {}, (() => {\n try {\n return JSON.parse(this.media.getAttribute(\"data-plyr-config\"));\n } catch (e) {\n return {};\n }\n })()), this.elements = {\n container: null,\n fullscreen: null,\n captions: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n popup: null,\n menu: null,\n panels: {},\n buttons: {}\n }\n }, this.captions = {\n active: null,\n currentTrack: -1,\n meta: new WeakMap()\n }, this.fullscreen = {\n active: !1\n }, this.options = {\n speed: [],\n quality: []\n }, this.debug = new it(this.config.debug), this.debug.log(\"Config\", this.config), this.debug.log(\"Support\", me), I(this.media) || !H(this.media)) return void this.debug.error(\"Setup failed: no suitable element passed\");\n if (this.media.plyr) return void this.debug.warn(\"Target already setup\");\n if (!this.config.enabled) return void this.debug.error(\"Setup failed: disabled by config\");\n if (!me.check().api) return void this.debug.error(\"Setup failed: no support\");\n const s = this.media.cloneNode(!0);\n s.autoplay = !1, this.elements.original = s;\n const n = this.media.tagName.toLowerCase();\n let a = null,\n l = null;\n\n switch (n) {\n case \"div\":\n if (a = this.media.querySelector(\"iframe\"), H(a)) {\n if (l = ze(a.getAttribute(\"src\")), this.provider = function (e) {\n return /^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(e) ? Ge.youtube : /^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(e) ? Ge.vimeo : null;\n }(l.toString()), this.elements.container = this.media, this.media = a, this.elements.container.className = \"\", l.search.length) {\n const e = [\"1\", \"true\"];\n e.includes(l.searchParams.get(\"autoplay\")) && (this.config.autoplay = !0), e.includes(l.searchParams.get(\"loop\")) && (this.config.loop.active = !0), this.isYouTube ? (this.config.playsinline = e.includes(l.searchParams.get(\"playsinline\")), this.config.youtube.hl = l.searchParams.get(\"hl\")) : this.config.playsinline = !0;\n }\n } else this.provider = this.media.getAttribute(this.config.attributes.embed.provider), this.media.removeAttribute(this.config.attributes.embed.provider);\n\n if (W(this.provider) || !Object.values(Ge).includes(this.provider)) return void this.debug.error(\"Setup failed: Invalid provider\");\n this.type = et;\n break;\n\n case \"video\":\n case \"audio\":\n this.type = n, this.provider = Ge.html5, this.media.hasAttribute(\"crossorigin\") && (this.config.crossorigin = !0), this.media.hasAttribute(\"autoplay\") && (this.config.autoplay = !0), (this.media.hasAttribute(\"playsinline\") || this.media.hasAttribute(\"webkit-playsinline\")) && (this.config.playsinline = !0), this.media.hasAttribute(\"muted\") && (this.config.muted = !0), this.media.hasAttribute(\"loop\") && (this.config.loop.active = !0);\n break;\n\n default:\n return void this.debug.error(\"Setup failed: unsupported type\");\n }\n\n this.supported = me.check(this.type, this.provider, this.config.playsinline), this.supported.api ? (this.eventListeners = [], this.listeners = new lt(this), this.storage = new Re(this), this.media.plyr = this, H(this.elements.container) || (this.elements.container = Z(\"div\", {\n tabindex: 0\n }), J(this.media, this.elements.container)), at.migrateStyles.call(this), at.addStyleHook.call(this), pt.setup.call(this), this.config.debug && fe.call(this, this.elements.container, this.config.events.join(\" \"), e => {\n this.debug.log(\"event: \".concat(e.type));\n }), this.fullscreen = new st(this), (this.isHTML5 || this.isEmbed && !this.supported.ui) && at.build.call(this), this.listeners.container(), this.listeners.global(), this.config.ads.enabled && (this.ads = new gt(this)), this.isHTML5 && this.config.autoplay && this.once(\"canplay\", () => ke(this.play())), this.lastSeekTime = 0, this.config.previewThumbnails.enabled && (this.previewThumbnails = new vt(this))) : this.debug.error(\"Setup failed: no support\");\n }\n\n get isHTML5() {\n return this.provider === Ge.html5;\n }\n\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n\n get isYouTube() {\n return this.provider === Ge.youtube;\n }\n\n get isVimeo() {\n return this.provider === Ge.vimeo;\n }\n\n get isVideo() {\n return this.type === et;\n }\n\n get isAudio() {\n return this.type === Ze;\n }\n\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n get paused() {\n return Boolean(this.media.paused);\n }\n\n get stopped() {\n return Boolean(this.paused && 0 === this.currentTime);\n }\n\n get ended() {\n return Boolean(this.media.ended);\n }\n\n set currentTime(e) {\n if (!this.duration) return;\n const t = $(e) && e > 0;\n this.media.currentTime = t ? Math.min(e, this.duration) : 0, this.debug.log(\"Seeking to \".concat(this.currentTime, \" seconds\"));\n }\n\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n get buffered() {\n const e = this.media.buffered;\n return $(e) ? e : e && e.length && this.duration > 0 ? e.end(0) / this.duration : 0;\n }\n\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n get duration() {\n const e = parseFloat(this.config.duration),\n t = (this.media || {}).duration,\n i = $(t) && t !== 1 / 0 ? t : 0;\n return e || i;\n }\n\n set volume(e) {\n var _this$config2;\n\n let t = e;\n _(t) && (t = Number(t)), $(t) || (t = this.storage.get(\"volume\")), $(t) || (_this$config2 = this.config, t = _this$config2.volume, _this$config2), t > 1 && (t = 1), t < 0 && (t = 0), this.config.volume = t, this.media.volume = t, !W(e) && this.muted && t > 0 && (this.muted = !1);\n }\n\n get volume() {\n return Number(this.media.volume);\n }\n\n set muted(e) {\n let t = e;\n O(t) || (t = this.storage.get(\"muted\")), O(t) || (t = this.config.muted), this.config.muted = t, this.media.muted = t;\n }\n\n get muted() {\n return Boolean(this.media.muted);\n }\n\n get hasAudio() {\n return !this.isHTML5 || !!this.isAudio || Boolean(this.media.mozHasAudio) || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n set speed(e) {\n let t = null;\n $(e) && (t = e), $(t) || (t = this.storage.get(\"speed\")), $(t) || (t = this.config.speed.selected);\n const i = this.minimumSpeed,\n s = this.maximumSpeed;\n t = ft(t, i, s), this.config.speed.selected = t, setTimeout(() => {\n this.media && (this.media.playbackRate = t);\n }, 0);\n }\n\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n get minimumSpeed() {\n return this.isYouTube ? Math.min(...this.options.speed) : this.isVimeo ? .5 : .0625;\n }\n\n get maximumSpeed() {\n return this.isYouTube ? Math.max(...this.options.speed) : this.isVimeo ? 2 : 16;\n }\n\n set quality(e) {\n const t = this.config.quality,\n i = this.options.quality;\n if (!i.length) return;\n let s = [!W(e) && Number(e), this.storage.get(\"quality\"), t.selected, t.default].find($),\n n = !0;\n\n if (!i.includes(s)) {\n const e = Ae(i, s);\n this.debug.warn(\"Unsupported quality option: \".concat(s, \", using \").concat(e, \" instead\")), s = e, n = !1;\n }\n\n t.selected = s, this.media.quality = s, n && this.storage.set({\n quality: s\n });\n }\n\n get quality() {\n return this.media.quality;\n }\n\n set loop(e) {\n const t = O(e) ? e : this.config.loop.active;\n this.config.loop.active = t, this.media.loop = t;\n }\n\n get loop() {\n return Boolean(this.media.loop);\n }\n\n set source(e) {\n wt.change.call(this, e);\n }\n\n get source() {\n return this.media.currentSrc;\n }\n\n get download() {\n const e = this.config.urls.download;\n return U(e) ? e : this.source;\n }\n\n set download(e) {\n U(e) && (this.config.urls.download = e, We.setDownloadUrl.call(this));\n }\n\n set poster(e) {\n this.isVideo ? at.setPoster.call(this, e, !1).catch(() => {}) : this.debug.warn(\"Poster can only be set for video\");\n }\n\n get poster() {\n return this.isVideo ? this.media.getAttribute(\"poster\") || this.media.getAttribute(\"data-poster\") : null;\n }\n\n get ratio() {\n if (!this.isVideo) return null;\n const e = Me(Ne.call(this));\n return D(e) ? e.join(\":\") : e;\n }\n\n set ratio(e) {\n this.isVideo ? _(e) && Pe(e) ? (this.config.ratio = Me(e), xe.call(this)) : this.debug.error(\"Invalid aspect ratio specified (\".concat(e, \")\")) : this.debug.warn(\"Aspect ratio can only be set for video\");\n }\n\n set autoplay(e) {\n this.config.autoplay = O(e) ? e : this.config.autoplay;\n }\n\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n toggleCaptions(e) {\n Ye.toggle.call(this, e, !1);\n }\n\n set currentTrack(e) {\n Ye.set.call(this, e, !1), Ye.setup.call(this);\n }\n\n get currentTrack() {\n const _this$captions2 = this.captions,\n e = _this$captions2.toggled,\n t = _this$captions2.currentTrack;\n return e ? t : -1;\n }\n\n set language(e) {\n Ye.setLanguage.call(this, e, !1);\n }\n\n get language() {\n return (Ye.getCurrentTrack.call(this) || {}).language;\n }\n\n set pip(e) {\n if (!me.pip) return;\n const t = O(e) ? e : !this.pip;\n j(this.media.webkitSetPresentationMode) && this.media.webkitSetPresentationMode(t ? Xe : Je), j(this.media.requestPictureInPicture) && (!this.pip && t ? this.media.requestPictureInPicture() : this.pip && !t && document.exitPictureInPicture());\n }\n\n get pip() {\n return me.pip ? W(this.media.webkitPresentationMode) ? this.media === document.pictureInPictureElement : this.media.webkitPresentationMode === Xe : null;\n }\n\n setPreviewThumbnails(e) {\n this.previewThumbnails && this.previewThumbnails.loaded && (this.previewThumbnails.destroy(), this.previewThumbnails = null), Object.assign(this.config.previewThumbnails, e), this.config.previewThumbnails.enabled && (this.previewThumbnails = new vt(this));\n }\n\n static supported(e, t, i) {\n return me.check(e, t, i);\n }\n\n static loadSprite(e, t) {\n return Ve(e, t);\n }\n\n static setup(e) {\n let t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let i = null;\n return _(e) ? i = Array.from(document.querySelectorAll(e)) : q(e) ? i = Array.from(e) : D(e) && (i = e.filter(H)), W(i) ? null : i.map(e => new Tt(e, t));\n }\n\n }\n\n var kt;\n return Tt.defaults = (kt = Qe, JSON.parse(JSON.stringify(kt))), Tt;\n});","var map = {\n\t\"./form_controller.js\": 10,\n\t\"./lazy_load.js\": 11,\n\t\"./refresh_controller.js\": 33,\n\t\"./replay_controller.js\": 12,\n\t\"./search_controller.js\": 13,\n\t\"./select_controller.js\": 14\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 9;","import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"form\"\nexport default class extends Controller {\n static targets = [\"filter\"];\n\n connect() {\n this.filterType = this.element.getAttribute(\"data-param\").toLowerCase();\n this.params = new URLSearchParams(window.location.search);\n this.findSelected(this.filterType, this.params);\n }\n\n filter() {\n let newParam = this.element.querySelector(`input:checked`).value;\n if (newParam === `${this.filterType}_unset`) {\n newParam = \"\";\n }\n this.params.set(this.filterType, newParam);\n const formattedParams = this.params\n .toString()\n .toLowerCase()\n .replace(/\\+/g, \"-\");\n const url = `${window.location.pathname}?${formattedParams}`;\n Turbolinks.clearCache();\n Turbolinks.visit(url);\n }\n\n findSelected(filterType, params) {\n // For each filter target, find any that are currently selected\n this.filterTargets.forEach((target) => {\n // check selected status of input\n const targetValue = target.querySelector(\"input\").value.toLowerCase();\n let hasMatch = null;\n // check if active search param matches an input\n if (params.get(filterType)) {\n hasMatch = targetValue === params.get(filterType).toLowerCase();\n } else if (targetValue === `${this.filterType}_unset`) {\n hasMatch = target;\n }\n\n if (hasMatch) {\n target.querySelector(\"input\").checked = true;\n target.querySelector(\"input\").ariaChecked = true;\n target.classList.add(\"filter-button--selected\");\n this.selectTitle = this.element.querySelector(\".title-active\");\n // If a dropdown with a title placehoder is present, update to match active selection\n if (this.selectTitle) {\n this.selectTitle.innerHTML =\n target.querySelector(\"label span\").innerHTML;\n }\n }\n });\n }\n\n resetFilters() {\n // reset all variables expect omitted var\n const values = Array.from(this.params.keys());\n values.forEach((value) => {\n this.params.delete(value);\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n// import * as animations from \"../utilities/animations\";\n\nexport default class extends Controller {\n static targets = [\"card\"];\n\n connect() {\n console.log(\"hello\", this.element);\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n connect() {\n this.replayWeb = this.element.querySelector(\"replay-web-page\");\n // Sometimes when arriving to the archived website page by navigating through the site the iframe doesn't load\n // In these cases we should trigger a hard refresh\n this.timeout = setTimeout(() => {\n if (\n this.replayWeb.shadowRoot &&\n this.replayWeb.shadowRoot.childNodes &&\n this.replayWeb.shadowRoot.childNodes.length\n ) {\n const nodes = Array.prototype.slice.call(\n this.replayWeb.shadowRoot.childNodes,\n 0\n );\n this.hasIframe = nodes.filter((node) => {\n return node.nodeName === \"IFRAME\";\n });\n if (!this.hasIframe.length) {\n location.reload();\n }\n } else {\n location.reload();\n }\n }, 300);\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"input\"];\n\n connect() {\n this.state.active = false;\n this.pathname = this.element.getAttribute(\"data-path\").toLowerCase();\n this.params = new URLSearchParams(window.location.search);\n this.input = this.inputTarget.querySelector(\"input\");\n this.button = this.inputTarget.querySelector(\".search__button\");\n this.input.value = this.params.get(\"query\");\n this.revealButton();\n }\n\n revealButton() {\n if (this.input.value.length >= 1) {\n this.button.classList.add(\"search__button--active\");\n } else {\n this.button.classList.remove(\"search__button--active\");\n }\n }\n\n preventDefault(e) {\n e.preventDefault();\n // remove \"search\" param which is only used to display the search bar on the homepage\n this.params.delete(\"search\");\n this.params.set(\"query\", this.input.value);\n const url = `${this.pathname}?${this.params.toString().toLowerCase()}`;\n Turbolinks.clearCache();\n Turbolinks.visit(url);\n }\n\n close() {\n console.log(\"close\");\n }\n\n state() {\n if (this.input.value && !this.state.active) {\n this.input.classList.add(\"input-container--active\");\n this.state.active = true;\n } else if (!this.input.value && this.state.active) {\n this.input.classList.remove(\"input-container--active\");\n this.state.active = false;\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"form\"\nexport default class extends Controller {\n connect() {\n this.filterType = this.element.getAttribute(\"data-param\").toLowerCase();\n this.params = new URLSearchParams(window.location.search);\n this.select = this.element.querySelector(\"select\");\n\n this.findSelected(this.filterType, this.params);\n }\n\n filter() {\n const select = this.element.querySelector(\"select\");\n const { value } = select.options[select.selectedIndex];\n\n const newParam = value;\n this.params.set(this.filterType, newParam);\n const url = `${window.location.pathname}?${this.params\n .toString()\n .toLowerCase()}`;\n Turbolinks.clearCache();\n Turbolinks.visit(url);\n }\n\n findSelected(filterType, params) {\n const options = this.select.querySelectorAll(\"option\");\n options.forEach((option) => {\n const targetValue = option.value;\n let hasMatch = null;\n if (params.get(filterType)) {\n hasMatch = targetValue === params.get(filterType).toLowerCase();\n }\n\n if (hasMatch) {\n this.select.value = targetValue;\n }\n });\n }\n}\n","// Flickity.Cell\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('get-size'));\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(window.getSize);\n }\n})(typeof window != 'undefined' ? window : this, function factory(getSize) {\n const cellClassName = 'flickity-cell';\n\n function Cell(elem) {\n this.element = elem;\n this.element.classList.add(cellClassName);\n this.x = 0;\n this.unselect();\n }\n\n let proto = Cell.prototype;\n\n proto.destroy = function () {\n // reset style\n this.unselect();\n this.element.classList.remove(cellClassName);\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n };\n\n proto.getSize = function () {\n this.size = getSize(this.element);\n };\n\n proto.select = function () {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n };\n\n proto.unselect = function () {\n this.element.classList.remove('is-selected');\n this.element.setAttribute('aria-hidden', 'true');\n };\n\n proto.remove = function () {\n this.element.remove();\n };\n\n return Cell;\n});","// slide\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n})(typeof window != 'undefined' ? window : this, function factory() {\n function Slide(beginMargin, endMargin, cellAlign) {\n this.beginMargin = beginMargin;\n this.endMargin = endMargin;\n this.cellAlign = cellAlign;\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n }\n\n let proto = Slide.prototype;\n\n proto.addCell = function (cell) {\n this.cells.push(cell);\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max(cell.size.outerHeight, this.height); // first cell stuff\n\n if (this.cells.length === 1) {\n this.x = cell.x; // x comes from first cell\n\n this.firstMargin = cell.size[this.beginMargin];\n }\n };\n\n proto.updateTarget = function () {\n let lastCell = this.getLastCell();\n let lastMargin = lastCell ? lastCell.size[this.endMargin] : 0;\n let slideWidth = this.outerWidth - (this.firstMargin + lastMargin);\n this.target = this.x + this.firstMargin + slideWidth * this.cellAlign;\n };\n\n proto.getLastCell = function () {\n return this.cells[this.cells.length - 1];\n };\n\n proto.select = function () {\n this.cells.forEach(cell => cell.select());\n };\n\n proto.unselect = function () {\n this.cells.forEach(cell => cell.unselect());\n };\n\n proto.getCellElements = function () {\n return this.cells.map(cell => cell.element);\n };\n\n return Slide;\n});","// animate\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('fizzy-ui-utils'));\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(window.fizzyUIUtils);\n }\n})(typeof window != 'undefined' ? window : this, function factory(utils) {\n // -------------------------- animate -------------------------- //\n let proto = {};\n\n proto.startAnimation = function () {\n if (this.isAnimating) return;\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n };\n\n proto.animate = function () {\n this.applyDragForce();\n this.applySelectedAttraction();\n let previousX = this.x;\n this.integratePhysics();\n this.positionSlider();\n this.settle(previousX); // animate next frame\n\n if (this.isAnimating) requestAnimationFrame(() => this.animate());\n };\n\n proto.positionSlider = function () {\n let x = this.x; // wrap position around\n\n if (this.isWrapping) {\n x = utils.modulo(x, this.slideableWidth) - this.slideableWidth;\n this.shiftWrapCells(x);\n }\n\n this.setTranslateX(x, this.isAnimating);\n this.dispatchScrollEvent();\n };\n\n proto.setTranslateX = function (x, is3d) {\n x += this.cursorPosition; // reverse if right-to-left and using transform\n\n if (this.options.rightToLeft) x = -x;\n let translateX = this.getPositionValue(x); // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n\n this.slider.style.transform = is3d ? \"translate3d(\".concat(translateX, \",0,0)\") : \"translateX(\".concat(translateX, \")\");\n };\n\n proto.dispatchScrollEvent = function () {\n let firstSlide = this.slides[0];\n if (!firstSlide) return;\n let positionX = -this.x - firstSlide.target;\n let progress = positionX / this.slidesWidth;\n this.dispatchEvent('scroll', null, [progress, positionX]);\n };\n\n proto.positionSliderAtSelected = function () {\n if (!this.cells.length) return;\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n\n this.positionSlider();\n };\n\n proto.getPositionValue = function (position) {\n if (this.options.percentPosition) {\n // percent position, round to 2 digits, like 12.34%\n return Math.round(position / this.size.innerWidth * 10000) * 0.01 + '%';\n } else {\n // pixel positioning\n return Math.round(position) + 'px';\n }\n };\n\n proto.settle = function (previousX) {\n // keep track of frames where x hasn't moved\n let isResting = !this.isPointerDown && Math.round(this.x * 100) === Math.round(previousX * 100);\n if (isResting) this.restingFrames++; // stop animating if resting for 3 or more frames\n\n if (this.restingFrames > 2) {\n this.isAnimating = false;\n delete this.isFreeScrolling; // render position with translateX when settled\n\n this.positionSlider();\n this.dispatchEvent('settle', null, [this.selectedIndex]);\n }\n };\n\n proto.shiftWrapCells = function (x) {\n // shift before cells\n let beforeGap = this.cursorPosition + x;\n\n this._shiftCells(this.beforeShiftCells, beforeGap, -1); // shift after cells\n\n\n let afterGap = this.size.innerWidth - (x + this.slideableWidth + this.cursorPosition);\n\n this._shiftCells(this.afterShiftCells, afterGap, 1);\n };\n\n proto._shiftCells = function (cells, gap, shift) {\n cells.forEach(cell => {\n let cellShift = gap > 0 ? shift : 0;\n\n this._wrapShiftCell(cell, cellShift);\n\n gap -= cell.size.outerWidth;\n });\n };\n\n proto._unshiftCells = function (cells) {\n if (!cells || !cells.length) return;\n cells.forEach(cell => this._wrapShiftCell(cell, 0));\n }; // @param {Integer} shift - 0, 1, or -1\n\n\n proto._wrapShiftCell = function (cell, shift) {\n this._renderCellPosition(cell, cell.x + this.slideableWidth * shift);\n }; // -------------------------- physics -------------------------- //\n\n\n proto.integratePhysics = function () {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n };\n\n proto.applyForce = function (force) {\n this.velocity += force;\n };\n\n proto.getFrictionFactor = function () {\n return 1 - this.options[this.isFreeScrolling ? 'freeScrollFriction' : 'friction'];\n };\n\n proto.getRestingPosition = function () {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / (1 - this.getFrictionFactor());\n };\n\n proto.applyDragForce = function () {\n if (!this.isDraggable || !this.isPointerDown) return; // change the position to drag position by applying force\n\n let dragVelocity = this.dragX - this.x;\n let dragForce = dragVelocity - this.velocity;\n this.applyForce(dragForce);\n };\n\n proto.applySelectedAttraction = function () {\n // do not attract if pointer down or no slides\n let dragDown = this.isDraggable && this.isPointerDown;\n if (dragDown || this.isFreeScrolling || !this.slides.length) return;\n let distance = this.selectedSlide.target * -1 - this.x;\n let force = distance * this.options.selectedAttraction;\n this.applyForce(force);\n };\n\n return proto;\n});","// drag\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('./core'), require('unidragger'), require('fizzy-ui-utils'));\n } else {\n // browser global\n window.Flickity = factory(window, window.Flickity, window.Unidragger, window.fizzyUIUtils);\n }\n})(typeof window != 'undefined' ? window : this, function factory(window, Flickity, Unidragger, utils) {\n // ----- defaults ----- //\n Object.assign(Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3\n }); // -------------------------- drag prototype -------------------------- //\n\n let proto = Flickity.prototype;\n Object.assign(proto, Unidragger.prototype); // inherit Unidragger\n\n proto.touchActionValue = ''; // -------------------------- -------------------------- //\n\n Flickity.create.drag = function () {\n this.on('activate', this.onActivateDrag);\n this.on('uiChange', this._uiChangeDrag);\n this.on('deactivate', this.onDeactivateDrag);\n this.on('cellChange', this.updateDraggable);\n this.on('pointerDown', this.handlePointerDown);\n this.on('pointerUp', this.handlePointerUp);\n this.on('pointerDown', this.handlePointerDone);\n this.on('dragStart', this.handleDragStart);\n this.on('dragMove', this.handleDragMove);\n this.on('dragEnd', this.handleDragEnd);\n this.on('staticClick', this.handleStaticClick); // TODO updateDraggable on resize? if groupCells & slides change\n };\n\n proto.onActivateDrag = function () {\n this.handles = [this.viewport];\n this.bindHandles();\n this.updateDraggable();\n };\n\n proto.onDeactivateDrag = function () {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n };\n\n proto.updateDraggable = function () {\n // disable dragging if less than 2 slides. #278\n if (this.options.draggable === '>1') {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n\n this.element.classList.toggle('is-draggable', this.isDraggable);\n };\n\n proto._uiChangeDrag = function () {\n delete this.isFreeScrolling;\n }; // -------------------------- pointer events -------------------------- //\n\n\n proto.handlePointerDown = function (event) {\n if (!this.isDraggable) {\n // proceed for staticClick\n this.bindActivePointerEvents(event);\n return;\n }\n\n let isTouchStart = event.type === 'touchstart';\n let isTouchPointer = event.pointerType === 'touch';\n let isFocusNode = event.target.matches('input, textarea, select');\n if (!isTouchStart && !isTouchPointer && !isFocusNode) event.preventDefault();\n if (!isFocusNode) this.focus(); // blur\n\n if (document.activeElement !== this.element) document.activeElement.blur(); // stop if it was moving\n\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down'); // track scrolling\n\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener('scroll', this);\n this.bindActivePointerEvents(event);\n }; // ----- move ----- //\n\n\n proto.hasDragStarted = function (moveVector) {\n return Math.abs(moveVector.x) > this.options.dragThreshold;\n }; // ----- up ----- //\n\n\n proto.handlePointerUp = function () {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n };\n\n proto.handlePointerDone = function () {\n window.removeEventListener('scroll', this);\n delete this.pointerDownScroll;\n }; // -------------------------- dragging -------------------------- //\n\n\n proto.handleDragStart = function () {\n if (!this.isDraggable) return;\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener('scroll', this);\n };\n\n proto.handleDragMove = function (event, pointer, moveVector) {\n if (!this.isDraggable) return;\n event.preventDefault();\n this.previousDragX = this.dragX; // reverse if right-to-left\n\n let direction = this.options.rightToLeft ? -1 : 1; // wrap around move. #589\n\n if (this.isWrapping) moveVector.x %= this.slideableWidth;\n let dragX = this.dragStartPosition + moveVector.x * direction;\n\n if (!this.isWrapping) {\n // slow drag\n let originBound = Math.max(-this.slides[0].target, this.dragStartPosition);\n dragX = dragX > originBound ? (dragX + originBound) * 0.5 : dragX;\n let endBound = Math.min(-this.getLastSlide().target, this.dragStartPosition);\n dragX = dragX < endBound ? (dragX + endBound) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n this.dragMoveTime = new Date();\n };\n\n proto.handleDragEnd = function () {\n if (!this.isDraggable) return;\n let freeScroll = this.options.freeScroll;\n if (freeScroll) this.isFreeScrolling = true; // set selectedIndex based on where flick will end up\n\n let index = this.dragEndRestingSelect();\n\n if (freeScroll && !this.isWrapping) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n let restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target && -restingX < this.getLastSlide().target;\n } else if (!freeScroll && index === this.selectedIndex) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n\n delete this.previousDragX; // apply selection\n // HACK, set flag so dragging stays in correct direction\n\n this.isDragSelect = this.isWrapping;\n this.select(index);\n delete this.isDragSelect;\n };\n\n proto.dragEndRestingSelect = function () {\n let restingX = this.getRestingPosition(); // how far away from selected slide\n\n let distance = Math.abs(this.getSlideDistance(-restingX, this.selectedIndex)); // get closet resting going up and going down\n\n let positiveResting = this._getClosestResting(restingX, distance, 1);\n\n let negativeResting = this._getClosestResting(restingX, distance, -1); // use closer resting for wrap-around\n\n\n return positiveResting.distance < negativeResting.distance ? positiveResting.index : negativeResting.index;\n };\n /**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\n\n\n proto._getClosestResting = function (restingX, distance, increment) {\n let index = this.selectedIndex;\n let minDistance = Infinity;\n let condition = this.options.contain && !this.isWrapping ? // if containing, keep going if distance is equal to minDistance\n (dist, minDist) => dist <= minDist : (dist, minDist) => dist < minDist;\n\n while (condition(distance, minDistance)) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance(-restingX, index);\n if (distance === null) break;\n distance = Math.abs(distance);\n }\n\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n };\n /**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\n\n\n proto.getSlideDistance = function (x, index) {\n let len = this.slides.length; // wrap around if at least 2 slides\n\n let isWrapAround = this.options.wrapAround && len > 1;\n let slideIndex = isWrapAround ? utils.modulo(index, len) : index;\n let slide = this.slides[slideIndex];\n if (!slide) return null; // add distance for wrap-around slides\n\n let wrap = isWrapAround ? this.slideableWidth * Math.floor(index / len) : 0;\n return x - (slide.target + wrap);\n };\n\n proto.dragEndBoostSelect = function () {\n // do not boost if no previousDragX or dragMoveTime\n if (this.previousDragX === undefined || !this.dragMoveTime || // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100) {\n return 0;\n }\n\n let distance = this.getSlideDistance(-this.dragX, this.selectedIndex);\n let delta = this.previousDragX - this.dragX;\n\n if (distance > 0 && delta > 0) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if (distance < 0 && delta < 0) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n\n return 0;\n }; // ----- scroll ----- //\n\n\n proto.onscroll = function () {\n let scroll = getScrollPosition();\n let scrollMoveX = this.pointerDownScroll.x - scroll.x;\n let scrollMoveY = this.pointerDownScroll.y - scroll.y; // cancel click/tap if scroll is too much\n\n if (Math.abs(scrollMoveX) > 3 || Math.abs(scrollMoveY) > 3) {\n this.pointerDone();\n }\n }; // ----- utils ----- //\n\n\n function getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n } // ----- ----- //\n\n\n return Flickity;\n});","/*!\n * Unidragger v3.0.1\n * Draggable base class\n * MIT license\n */\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('ev-emitter'));\n } else {\n // browser global\n window.Unidragger = factory(window, window.EvEmitter);\n }\n})(typeof window != 'undefined' ? window : this, function factory(window, EvEmitter) {\n function Unidragger() {} // inherit EvEmitter\n\n\n let proto = Unidragger.prototype = Object.create(EvEmitter.prototype); // ----- bind start ----- //\n // trigger handler methods for events\n\n proto.handleEvent = function (event) {\n let method = 'on' + event.type;\n\n if (this[method]) {\n this[method](event);\n }\n };\n\n let startEvent, activeEvents;\n\n if ('ontouchstart' in window) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n activeEvents = ['touchmove', 'touchend', 'touchcancel'];\n } else if (window.PointerEvent) {\n // Pointer Events\n startEvent = 'pointerdown';\n activeEvents = ['pointermove', 'pointerup', 'pointercancel'];\n } else {\n // mouse events\n startEvent = 'mousedown';\n activeEvents = ['mousemove', 'mouseup'];\n } // prototype so it can be overwriteable by Flickity\n\n\n proto.touchActionValue = 'none';\n\n proto.bindHandles = function () {\n this._bindHandles('addEventListener', this.touchActionValue);\n };\n\n proto.unbindHandles = function () {\n this._bindHandles('removeEventListener', '');\n };\n /**\n * Add or remove start event\n * @param {String} bindMethod - addEventListener or removeEventListener\n * @param {String} touchAction - value for touch-action CSS property\n */\n\n\n proto._bindHandles = function (bindMethod, touchAction) {\n this.handles.forEach(handle => {\n handle[bindMethod](startEvent, this);\n handle[bindMethod]('click', this); // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n\n if (window.PointerEvent) handle.style.touchAction = touchAction;\n });\n };\n\n proto.bindActivePointerEvents = function () {\n activeEvents.forEach(eventName => {\n window.addEventListener(eventName, this);\n });\n };\n\n proto.unbindActivePointerEvents = function () {\n activeEvents.forEach(eventName => {\n window.removeEventListener(eventName, this);\n });\n }; // ----- event handler helpers ----- //\n // trigger method with matching pointer\n\n\n proto.withPointer = function (methodName, event) {\n if (event.pointerId === this.pointerIdentifier) {\n this[methodName](event, event);\n }\n }; // trigger method with matching touch\n\n\n proto.withTouch = function (methodName, event) {\n let touch;\n\n for (let changedTouch of event.changedTouches) {\n if (changedTouch.identifier === this.pointerIdentifier) {\n touch = changedTouch;\n }\n }\n\n if (touch) this[methodName](event, touch);\n }; // ----- start event ----- //\n\n\n proto.onmousedown = function (event) {\n this.pointerDown(event, event);\n };\n\n proto.ontouchstart = function (event) {\n this.pointerDown(event, event.changedTouches[0]);\n };\n\n proto.onpointerdown = function (event) {\n this.pointerDown(event, event);\n }; // nodes that have text fields\n\n\n const cursorNodes = ['TEXTAREA', 'INPUT', 'SELECT', 'OPTION']; // input types that do not have text fields\n\n const clickTypes = ['radio', 'checkbox', 'button', 'submit', 'image', 'file'];\n /**\n * any time you set `event, pointer` it refers to:\n * @param {Event} event\n * @param {Event | Touch} pointer\n */\n\n proto.pointerDown = function (event, pointer) {\n // dismiss multi-touch taps, right clicks, and clicks on text fields\n let isCursorNode = cursorNodes.includes(event.target.nodeName);\n let isClickType = clickTypes.includes(event.target.type);\n let isOkayElement = !isCursorNode || isClickType;\n let isOkay = !this.isPointerDown && !event.button && isOkayElement;\n if (!isOkay) return;\n this.isPointerDown = true; // save pointer identifier to match up touch events\n\n this.pointerIdentifier = pointer.pointerId !== undefined ? // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier; // track position for move\n\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY\n };\n this.bindActivePointerEvents();\n this.emitEvent('pointerDown', [event, pointer]);\n }; // ----- move ----- //\n\n\n proto.onmousemove = function (event) {\n this.pointerMove(event, event);\n };\n\n proto.onpointermove = function (event) {\n this.withPointer('pointerMove', event);\n };\n\n proto.ontouchmove = function (event) {\n this.withTouch('pointerMove', event);\n };\n\n proto.pointerMove = function (event, pointer) {\n let moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n this.emitEvent('pointerMove', [event, pointer, moveVector]); // start drag if pointer has moved far enough to start drag\n\n let isDragStarting = !this.isDragging && this.hasDragStarted(moveVector);\n if (isDragStarting) this.dragStart(event, pointer);\n if (this.isDragging) this.dragMove(event, pointer, moveVector);\n }; // condition if pointer has moved far enough to start drag\n\n\n proto.hasDragStarted = function (moveVector) {\n return Math.abs(moveVector.x) > 3 || Math.abs(moveVector.y) > 3;\n }; // ----- drag ----- //\n\n\n proto.dragStart = function (event, pointer) {\n this.isDragging = true;\n this.isPreventingClicks = true; // set flag to prevent clicks\n\n this.emitEvent('dragStart', [event, pointer]);\n };\n\n proto.dragMove = function (event, pointer, moveVector) {\n this.emitEvent('dragMove', [event, pointer, moveVector]);\n }; // ----- end ----- //\n\n\n proto.onmouseup = function (event) {\n this.pointerUp(event, event);\n };\n\n proto.onpointerup = function (event) {\n this.withPointer('pointerUp', event);\n };\n\n proto.ontouchend = function (event) {\n this.withTouch('pointerUp', event);\n };\n\n proto.pointerUp = function (event, pointer) {\n this.pointerDone();\n this.emitEvent('pointerUp', [event, pointer]);\n\n if (this.isDragging) {\n this.dragEnd(event, pointer);\n } else {\n // pointer didn't move enough for drag to start\n this.staticClick(event, pointer);\n }\n };\n\n proto.dragEnd = function (event, pointer) {\n this.isDragging = false; // reset flag\n // re-enable clicking async\n\n setTimeout(() => delete this.isPreventingClicks);\n this.emitEvent('dragEnd', [event, pointer]);\n }; // triggered on pointer up & pointer cancel\n\n\n proto.pointerDone = function () {\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n this.unbindActivePointerEvents();\n this.emitEvent('pointerDone');\n }; // ----- cancel ----- //\n\n\n proto.onpointercancel = function (event) {\n this.withPointer('pointerCancel', event);\n };\n\n proto.ontouchcancel = function (event) {\n this.withTouch('pointerCancel', event);\n };\n\n proto.pointerCancel = function (event, pointer) {\n this.pointerDone();\n this.emitEvent('pointerCancel', [event, pointer]);\n }; // ----- click ----- //\n // handle all clicks and prevent clicks when dragging\n\n\n proto.onclick = function (event) {\n if (this.isPreventingClicks) event.preventDefault();\n }; // triggered after pointer down & up with no/tiny movement\n\n\n proto.staticClick = function (event, pointer) {\n // ignore emulated mouse up clicks\n let isMouseup = event.type === 'mouseup';\n if (isMouseup && this.isIgnoringMouseUp) return;\n this.emitEvent('staticClick', [event, pointer]); // set flag for emulated clicks 300ms after touchend\n\n if (isMouseup) {\n this.isIgnoringMouseUp = true; // reset flag after 400ms\n\n setTimeout(() => {\n delete this.isIgnoringMouseUp;\n }, 400);\n }\n }; // ----- ----- //\n\n\n return Unidragger;\n});","// prev/next buttons\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('./core'));\n } else {\n // browser global\n factory(window.Flickity);\n }\n})(typeof window != 'undefined' ? window : this, function factory(Flickity) {\n const svgURI = 'http://www.w3.org/2000/svg'; // -------------------------- PrevNextButton -------------------------- //\n\n function PrevNextButton(increment, direction, arrowShape) {\n this.increment = increment;\n this.direction = direction;\n this.isPrevious = increment === 'previous';\n this.isLeft = direction === 'left';\n\n this._create(arrowShape);\n }\n\n PrevNextButton.prototype._create = function (arrowShape) {\n // properties\n let element = this.element = document.createElement('button');\n element.className = \"flickity-button flickity-prev-next-button \".concat(this.increment);\n let label = this.isPrevious ? 'Previous' : 'Next'; // prevent button from submitting form https://stackoverflow.com/a/10836076/182183\n\n element.setAttribute('type', 'button');\n element.setAttribute('aria-label', label); // init as disabled\n\n this.disable(); // create arrow\n\n let svg = this.createSVG(label, arrowShape);\n element.append(svg);\n };\n\n PrevNextButton.prototype.createSVG = function (label, arrowShape) {\n let svg = document.createElementNS(svgURI, 'svg');\n svg.setAttribute('class', 'flickity-button-icon');\n svg.setAttribute('viewBox', '0 0 100 100'); // add title #1189\n\n let title = document.createElementNS(svgURI, 'title');\n title.append(label); // add path\n\n let path = document.createElementNS(svgURI, 'path');\n let pathMovements = getArrowMovements(arrowShape);\n path.setAttribute('d', pathMovements);\n path.setAttribute('class', 'arrow'); // rotate arrow\n\n if (!this.isLeft) {\n path.setAttribute('transform', 'translate(100, 100) rotate(180)');\n }\n\n svg.append(title, path);\n return svg;\n }; // get SVG path movmement\n\n\n function getArrowMovements(shape) {\n // use shape as movement if string\n if (typeof shape == 'string') return shape;\n let x0 = shape.x0,\n x1 = shape.x1,\n x2 = shape.x2,\n x3 = shape.x3,\n y1 = shape.y1,\n y2 = shape.y2; // create movement string\n\n return \"M \".concat(x0, \", 50\\n L \").concat(x1, \", \").concat(y1 + 50, \"\\n L \").concat(x2, \", \").concat(y2 + 50, \"\\n L \").concat(x3, \", 50\\n L \").concat(x2, \", \").concat(50 - y2, \"\\n L \").concat(x1, \", \").concat(50 - y1, \"\\n Z\");\n } // ----- ----- //\n\n\n PrevNextButton.prototype.enable = function () {\n this.element.removeAttribute('disabled');\n };\n\n PrevNextButton.prototype.disable = function () {\n this.element.setAttribute('disabled', true);\n }; // -------------------------- Flickity prototype -------------------------- //\n\n\n Object.assign(Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60,\n y1: 50,\n x2: 70,\n y2: 40,\n x3: 30\n }\n });\n\n Flickity.create.prevNextButtons = function () {\n if (!this.options.prevNextButtons) return;\n let _this$options = this.options,\n rightToLeft = _this$options.rightToLeft,\n arrowShape = _this$options.arrowShape;\n let prevDirection = rightToLeft ? 'right' : 'left';\n let nextDirection = rightToLeft ? 'left' : 'right';\n this.prevButton = new PrevNextButton('previous', prevDirection, arrowShape);\n this.nextButton = new PrevNextButton('next', nextDirection, arrowShape);\n this.focusableElems.push(this.prevButton.element);\n this.focusableElems.push(this.nextButton.element);\n\n this.handlePrevButtonClick = () => {\n this.uiChange();\n this.previous();\n };\n\n this.handleNextButtonClick = () => {\n this.uiChange();\n this.next();\n };\n\n this.on('activate', this.activatePrevNextButtons);\n this.on('select', this.updatePrevNextButtons);\n };\n\n let proto = Flickity.prototype;\n\n proto.updatePrevNextButtons = function () {\n let lastIndex = this.slides.length ? this.slides.length - 1 : 0;\n this.updatePrevNextButton(this.prevButton, 0);\n this.updatePrevNextButton(this.nextButton, lastIndex);\n };\n\n proto.updatePrevNextButton = function (button, disabledIndex) {\n // enable is wrapAround and at least 2 slides\n if (this.isWrapping && this.slides.length > 1) {\n button.enable();\n return;\n }\n\n let isEnabled = this.selectedIndex !== disabledIndex;\n button[isEnabled ? 'enable' : 'disable'](); // if disabling button that is focused,\n // shift focus to element to maintain keyboard accessibility\n\n let isDisabledFocused = !isEnabled && document.activeElement === button.element;\n if (isDisabledFocused) this.focus();\n };\n\n proto.activatePrevNextButtons = function () {\n this.prevButton.element.addEventListener('click', this.handlePrevButtonClick);\n this.nextButton.element.addEventListener('click', this.handleNextButtonClick);\n this.element.append(this.prevButton.element, this.nextButton.element);\n this.on('deactivate', this.deactivatePrevNextButtons);\n };\n\n proto.deactivatePrevNextButtons = function () {\n this.prevButton.element.remove();\n this.nextButton.element.remove();\n this.prevButton.element.removeEventListener('click', this.handlePrevButtonClick);\n this.nextButton.element.removeEventListener('click', this.handleNextButtonClick);\n this.off('deactivate', this.deactivatePrevNextButtons);\n }; // -------------------------- -------------------------- //\n\n\n Flickity.PrevNextButton = PrevNextButton;\n return Flickity;\n});","// page dots\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('./core'), require('fizzy-ui-utils'));\n } else {\n // browser global\n factory(window.Flickity, window.fizzyUIUtils);\n }\n})(typeof window != 'undefined' ? window : this, function factory(Flickity, utils) {\n // -------------------------- PageDots -------------------------- //\n function PageDots() {\n // create holder element\n this.holder = document.createElement('div');\n this.holder.className = 'flickity-page-dots'; // create dots, array of elements\n\n this.dots = [];\n }\n\n PageDots.prototype.setDots = function (slidesLength) {\n // get difference between number of slides and number of dots\n let delta = slidesLength - this.dots.length;\n\n if (delta > 0) {\n this.addDots(delta);\n } else if (delta < 0) {\n this.removeDots(-delta);\n }\n };\n\n PageDots.prototype.addDots = function (count) {\n let newDots = new Array(count).fill().map((item, i) => {\n let dot = document.createElement('button');\n dot.setAttribute('type', 'button');\n let num = i + 1 + this.dots.length;\n dot.className = 'flickity-page-dot';\n dot.textContent = \"View slide \".concat(num);\n return dot;\n });\n this.holder.append(...newDots);\n this.dots = this.dots.concat(newDots);\n };\n\n PageDots.prototype.removeDots = function (count) {\n // remove from this.dots collection\n let removeDots = this.dots.splice(this.dots.length - count, count); // remove from DOM\n\n removeDots.forEach(dot => dot.remove());\n };\n\n PageDots.prototype.updateSelected = function (index) {\n // remove selected class on previous\n if (this.selectedDot) {\n this.selectedDot.classList.remove('is-selected');\n this.selectedDot.removeAttribute('aria-current');\n } // don't proceed if no dots\n\n\n if (!this.dots.length) return;\n this.selectedDot = this.dots[index];\n this.selectedDot.classList.add('is-selected');\n this.selectedDot.setAttribute('aria-current', 'step');\n };\n\n Flickity.PageDots = PageDots; // -------------------------- Flickity -------------------------- //\n\n Object.assign(Flickity.defaults, {\n pageDots: true\n });\n\n Flickity.create.pageDots = function () {\n if (!this.options.pageDots) return;\n this.pageDots = new PageDots();\n this.handlePageDotsClick = this.onPageDotsClick.bind(this); // events\n\n this.on('activate', this.activatePageDots);\n this.on('select', this.updateSelectedPageDots);\n this.on('cellChange', this.updatePageDots);\n this.on('resize', this.updatePageDots);\n this.on('deactivate', this.deactivatePageDots);\n };\n\n let proto = Flickity.prototype;\n\n proto.activatePageDots = function () {\n this.pageDots.setDots(this.slides.length);\n this.focusableElems.push(...this.pageDots.dots);\n this.pageDots.holder.addEventListener('click', this.handlePageDotsClick);\n this.element.append(this.pageDots.holder);\n };\n\n proto.onPageDotsClick = function (event) {\n let index = this.pageDots.dots.indexOf(event.target);\n if (index === -1) return; // only dot clicks\n\n this.uiChange();\n this.select(index);\n };\n\n proto.updateSelectedPageDots = function () {\n this.pageDots.updateSelected(this.selectedIndex);\n };\n\n proto.updatePageDots = function () {\n this.pageDots.dots.forEach(dot => {\n utils.removeFrom(this.focusableElems, dot);\n });\n this.pageDots.setDots(this.slides.length);\n this.focusableElems.push(...this.pageDots.dots);\n };\n\n proto.deactivatePageDots = function () {\n this.pageDots.holder.remove();\n this.pageDots.holder.removeEventListener('click', this.handlePageDotsClick);\n }; // ----- ----- //\n\n\n Flickity.PageDots = PageDots;\n return Flickity;\n});","// player & autoPlay\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('./core'));\n } else {\n // browser global\n factory(window.Flickity);\n }\n})(typeof window != 'undefined' ? window : this, function factory(Flickity) {\n // -------------------------- Player -------------------------- //\n function Player(autoPlay, onTick) {\n this.autoPlay = autoPlay;\n this.onTick = onTick;\n this.state = 'stopped'; // visibility change event handler\n\n this.onVisibilityChange = this.visibilityChange.bind(this);\n this.onVisibilityPlay = this.visibilityPlay.bind(this);\n } // start play\n\n\n Player.prototype.play = function () {\n if (this.state === 'playing') return; // do not play if page is hidden, start playing when page is visible\n\n let isPageHidden = document.hidden;\n\n if (isPageHidden) {\n document.addEventListener('visibilitychange', this.onVisibilityPlay);\n return;\n }\n\n this.state = 'playing'; // listen to visibility change\n\n document.addEventListener('visibilitychange', this.onVisibilityChange); // start ticking\n\n this.tick();\n };\n\n Player.prototype.tick = function () {\n // do not tick if not playing\n if (this.state !== 'playing') return; // default to 3 seconds\n\n let time = typeof this.autoPlay == 'number' ? this.autoPlay : 3000; // HACK: reset ticks if stopped and started within interval\n\n this.clear();\n this.timeout = setTimeout(() => {\n this.onTick();\n this.tick();\n }, time);\n };\n\n Player.prototype.stop = function () {\n this.state = 'stopped';\n this.clear(); // remove visibility change event\n\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n };\n\n Player.prototype.clear = function () {\n clearTimeout(this.timeout);\n };\n\n Player.prototype.pause = function () {\n if (this.state === 'playing') {\n this.state = 'paused';\n this.clear();\n }\n };\n\n Player.prototype.unpause = function () {\n // re-start play if paused\n if (this.state === 'paused') this.play();\n }; // pause if page visibility is hidden, unpause if visible\n\n\n Player.prototype.visibilityChange = function () {\n let isPageHidden = document.hidden;\n this[isPageHidden ? 'pause' : 'unpause']();\n };\n\n Player.prototype.visibilityPlay = function () {\n this.play();\n document.removeEventListener('visibilitychange', this.onVisibilityPlay);\n }; // -------------------------- Flickity -------------------------- //\n\n\n Object.assign(Flickity.defaults, {\n pauseAutoPlayOnHover: true\n });\n\n Flickity.create.player = function () {\n this.player = new Player(this.options.autoPlay, () => {\n this.next(true);\n });\n this.on('activate', this.activatePlayer);\n this.on('uiChange', this.stopPlayer);\n this.on('pointerDown', this.stopPlayer);\n this.on('deactivate', this.deactivatePlayer);\n };\n\n let proto = Flickity.prototype;\n\n proto.activatePlayer = function () {\n if (!this.options.autoPlay) return;\n this.player.play();\n this.element.addEventListener('mouseenter', this);\n }; // Player API, don't hate the ... thanks I know where the door is\n\n\n proto.playPlayer = function () {\n this.player.play();\n };\n\n proto.stopPlayer = function () {\n this.player.stop();\n };\n\n proto.pausePlayer = function () {\n this.player.pause();\n };\n\n proto.unpausePlayer = function () {\n this.player.unpause();\n };\n\n proto.deactivatePlayer = function () {\n this.player.stop();\n this.element.removeEventListener('mouseenter', this);\n }; // ----- mouseenter/leave ----- //\n // pause auto-play on hover\n\n\n proto.onmouseenter = function () {\n if (!this.options.pauseAutoPlayOnHover) return;\n this.player.pause();\n this.element.addEventListener('mouseleave', this);\n }; // resume auto-play on hover off\n\n\n proto.onmouseleave = function () {\n this.player.unpause();\n this.element.removeEventListener('mouseleave', this);\n }; // ----- ----- //\n\n\n Flickity.Player = Player;\n return Flickity;\n});","// add, remove cell\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('./core'), require('fizzy-ui-utils'));\n } else {\n // browser global\n factory(window.Flickity, window.fizzyUIUtils);\n }\n})(typeof window != 'undefined' ? window : this, function factory(Flickity, utils) {\n // append cells to a document fragment\n function getCellsFragment(cells) {\n let fragment = document.createDocumentFragment();\n cells.forEach(cell => fragment.appendChild(cell.element));\n return fragment;\n } // -------------------------- add/remove cell prototype -------------------------- //\n\n\n let proto = Flickity.prototype;\n /**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\n\n proto.insert = function (elems, index) {\n let cells = this._makeCells(elems);\n\n if (!cells || !cells.length) return;\n let len = this.cells.length; // default to append\n\n index = index === undefined ? len : index; // add cells with document fragment\n\n let fragment = getCellsFragment(cells); // append to slider\n\n let isAppend = index === len;\n\n if (isAppend) {\n this.slider.appendChild(fragment);\n } else {\n let insertCellElement = this.cells[index].element;\n this.slider.insertBefore(fragment, insertCellElement);\n } // add to this.cells\n\n\n if (index === 0) {\n // prepend, add to start\n this.cells = cells.concat(this.cells);\n } else if (isAppend) {\n // append, add to end\n this.cells = this.cells.concat(cells);\n } else {\n // insert in this.cells\n let endCells = this.cells.splice(index, len - index);\n this.cells = this.cells.concat(cells).concat(endCells);\n }\n\n this._sizeCells(cells);\n\n this.cellChange(index);\n this.positionSliderAtSelected();\n };\n\n proto.append = function (elems) {\n this.insert(elems, this.cells.length);\n };\n\n proto.prepend = function (elems) {\n this.insert(elems, 0);\n };\n /**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\n\n\n proto.remove = function (elems) {\n let cells = this.getCells(elems);\n if (!cells || !cells.length) return;\n let minCellIndex = this.cells.length - 1; // remove cells from collection & DOM\n\n cells.forEach(cell => {\n cell.remove();\n let index = this.cells.indexOf(cell);\n minCellIndex = Math.min(index, minCellIndex);\n utils.removeFrom(this.cells, cell);\n });\n this.cellChange(minCellIndex);\n this.positionSliderAtSelected();\n };\n /**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\n\n\n proto.cellSizeChange = function (elem) {\n let cell = this.getCell(elem);\n if (!cell) return;\n cell.getSize();\n let index = this.cells.indexOf(cell);\n this.cellChange(index); // do not position slider after lazy load\n };\n /**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\n\n\n proto.cellChange = function (changedCellIndex) {\n let prevSelectedElem = this.selectedElement;\n\n this._positionCells(changedCellIndex);\n\n this._updateWrapShiftCells();\n\n this.setGallerySize(); // update selectedIndex, try to maintain position & select previous selected element\n\n let cell = this.getCell(prevSelectedElem);\n if (cell) this.selectedIndex = this.getCellSlideIndex(cell);\n this.selectedIndex = Math.min(this.slides.length - 1, this.selectedIndex);\n this.emitEvent('cellChange', [changedCellIndex]); // position slider\n\n this.select(this.selectedIndex);\n }; // ----- ----- //\n\n\n return Flickity;\n});","// lazyload\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('./core'), require('fizzy-ui-utils'));\n } else {\n // browser global\n factory(window.Flickity, window.fizzyUIUtils);\n }\n})(typeof window != 'undefined' ? window : this, function factory(Flickity, utils) {\n const lazyAttr = 'data-flickity-lazyload';\n const lazySrcAttr = \"\".concat(lazyAttr, \"-src\");\n const lazySrcsetAttr = \"\".concat(lazyAttr, \"-srcset\");\n const imgSelector = \"img[\".concat(lazyAttr, \"], img[\").concat(lazySrcAttr, \"], \") + \"img[\".concat(lazySrcsetAttr, \"], source[\").concat(lazySrcsetAttr, \"]\");\n\n Flickity.create.lazyLoad = function () {\n this.on('select', this.lazyLoad);\n this.handleLazyLoadComplete = this.onLazyLoadComplete.bind(this);\n };\n\n let proto = Flickity.prototype;\n\n proto.lazyLoad = function () {\n let lazyLoad = this.options.lazyLoad;\n if (!lazyLoad) return; // get adjacent cells, use lazyLoad option for adjacent count\n\n let adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0; // lazy load images\n\n this.getAdjacentCellElements(adjCount).map(getCellLazyImages).flat().forEach(img => new LazyLoader(img, this.handleLazyLoadComplete));\n };\n\n function getCellLazyImages(cellElem) {\n // check if cell element is lazy image\n if (cellElem.matches('img')) {\n let cellAttr = cellElem.getAttribute(lazyAttr);\n let cellSrcAttr = cellElem.getAttribute(lazySrcAttr);\n let cellSrcsetAttr = cellElem.getAttribute(lazySrcsetAttr);\n\n if (cellAttr || cellSrcAttr || cellSrcsetAttr) {\n return cellElem;\n }\n } // select lazy images in cell\n\n\n return [...cellElem.querySelectorAll(imgSelector)];\n }\n\n proto.onLazyLoadComplete = function (img, event) {\n let cell = this.getParentCell(img);\n let cellElem = cell && cell.element;\n this.cellSizeChange(cellElem);\n this.dispatchEvent('lazyLoad', event, cellElem);\n }; // -------------------------- LazyLoader -------------------------- //\n\n /**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Function} onComplete - callback function\n */\n\n\n function LazyLoader(img, onComplete) {\n this.img = img;\n this.onComplete = onComplete;\n this.load();\n }\n\n LazyLoader.prototype.handleEvent = utils.handleEvent;\n\n LazyLoader.prototype.load = function () {\n this.img.addEventListener('load', this);\n this.img.addEventListener('error', this); // get src & srcset\n\n let src = this.img.getAttribute(lazyAttr) || this.img.getAttribute(lazySrcAttr);\n let srcset = this.img.getAttribute(lazySrcsetAttr); // set src & serset\n\n this.img.src = src;\n if (srcset) this.img.setAttribute('srcset', srcset); // remove attr\n\n this.img.removeAttribute(lazyAttr);\n this.img.removeAttribute(lazySrcAttr);\n this.img.removeAttribute(lazySrcsetAttr);\n };\n\n LazyLoader.prototype.onload = function (event) {\n this.complete(event, 'flickity-lazyloaded');\n };\n\n LazyLoader.prototype.onerror = function (event) {\n this.complete(event, 'flickity-lazyerror');\n };\n\n LazyLoader.prototype.complete = function (event, className) {\n // unbind events\n this.img.removeEventListener('load', this);\n this.img.removeEventListener('error', this);\n let mediaElem = this.img.parentNode.matches('picture') ? this.img.parentNode : this.img;\n mediaElem.classList.add(className);\n this.onComplete(this.img, event);\n }; // ----- ----- //\n\n\n Flickity.LazyLoader = LazyLoader;\n return Flickity;\n});","// imagesloaded\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('./core'), require('imagesloaded'));\n } else {\n // browser global\n factory(window.Flickity, window.imagesLoaded);\n }\n})(typeof window != 'undefined' ? window : this, function factory(Flickity, imagesLoaded) {\n Flickity.create.imagesLoaded = function () {\n this.on('activate', this.imagesLoaded);\n };\n\n Flickity.prototype.imagesLoaded = function () {\n if (!this.options.imagesLoaded) return;\n\n let onImagesLoadedProgress = (instance, image) => {\n let cell = this.getParentCell(image.img);\n this.cellSizeChange(cell && cell.element);\n if (!this.options.freeScroll) this.positionSliderAtSelected();\n };\n\n imagesLoaded(this.slider).on('progress', onImagesLoadedProgress);\n };\n\n return Flickity;\n});","/*!\n * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(window, require('ev-emitter'));\n } else {\n // browser global\n window.imagesLoaded = factory(window, window.EvEmitter);\n }\n})(typeof window !== 'undefined' ? window : this, function factory(window, EvEmitter) {\n let $ = window.jQuery;\n let console = window.console; // -------------------------- helpers -------------------------- //\n // turn element or nodeList into an array\n\n function makeArray(obj) {\n // use object if already an array\n if (Array.isArray(obj)) return obj;\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number'; // convert nodeList to array\n\n if (isArrayLike) return [...obj]; // array of single index\n\n return [obj];\n } // -------------------------- imagesLoaded -------------------------- //\n\n /**\n * @param {[Array, Element, NodeList, String]} elem\n * @param {[Object, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\n */\n\n\n function ImagesLoaded(elem, options, onAlways) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if (!(this instanceof ImagesLoaded)) {\n return new ImagesLoaded(elem, options, onAlways);\n } // use elem as selector string\n\n\n let queryElem = elem;\n\n if (typeof elem == 'string') {\n queryElem = document.querySelectorAll(elem);\n } // bail if bad element\n\n\n if (!queryElem) {\n console.error(\"Bad element for imagesLoaded \".concat(queryElem || elem));\n return;\n }\n\n this.elements = makeArray(queryElem);\n this.options = {}; // shift arguments if no options set\n\n if (typeof options == 'function') {\n onAlways = options;\n } else {\n Object.assign(this.options, options);\n }\n\n if (onAlways) this.on('always', onAlways);\n this.getImages(); // add jQuery Deferred object\n\n if ($) this.jqDeferred = new $.Deferred(); // HACK check async to allow time to bind listeners\n\n setTimeout(this.check.bind(this));\n }\n\n ImagesLoaded.prototype = Object.create(EvEmitter.prototype);\n\n ImagesLoaded.prototype.getImages = function () {\n this.images = []; // filter & find items if we have an item selector\n\n this.elements.forEach(this.addElementImages, this);\n };\n\n const elementNodeTypes = [1, 9, 11];\n /**\n * @param {Node} elem\n */\n\n ImagesLoaded.prototype.addElementImages = function (elem) {\n // filter siblings\n if (elem.nodeName === 'IMG') {\n this.addImage(elem);\n } // get background image on element\n\n\n if (this.options.background === true) {\n this.addElementBackgroundImages(elem);\n } // find children\n // no non-element nodes, #143\n\n\n let nodeType = elem.nodeType;\n if (!nodeType || !elementNodeTypes.includes(nodeType)) return;\n let childImgs = elem.querySelectorAll('img'); // concat childElems to filterFound array\n\n for (let img of childImgs) {\n this.addImage(img);\n } // get child background images\n\n\n if (typeof this.options.background == 'string') {\n let children = elem.querySelectorAll(this.options.background);\n\n for (let child of children) {\n this.addElementBackgroundImages(child);\n }\n }\n };\n\n const reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\n ImagesLoaded.prototype.addElementBackgroundImages = function (elem) {\n let style = getComputedStyle(elem); // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n\n if (!style) return; // get url inside url(\"...\")\n\n let matches = reURL.exec(style.backgroundImage);\n\n while (matches !== null) {\n let url = matches && matches[2];\n\n if (url) {\n this.addBackground(url, elem);\n }\n\n matches = reURL.exec(style.backgroundImage);\n }\n };\n /**\n * @param {Image} img\n */\n\n\n ImagesLoaded.prototype.addImage = function (img) {\n let loadingImage = new LoadingImage(img);\n this.images.push(loadingImage);\n };\n\n ImagesLoaded.prototype.addBackground = function (url, elem) {\n let background = new Background(url, elem);\n this.images.push(background);\n };\n\n ImagesLoaded.prototype.check = function () {\n this.progressedCount = 0;\n this.hasAnyBroken = false; // complete if no images\n\n if (!this.images.length) {\n this.complete();\n return;\n }\n /* eslint-disable-next-line func-style */\n\n\n let onProgress = (image, elem, message) => {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout(() => {\n this.progress(image, elem, message);\n });\n };\n\n this.images.forEach(function (loadingImage) {\n loadingImage.once('progress', onProgress);\n loadingImage.check();\n });\n };\n\n ImagesLoaded.prototype.progress = function (image, elem, message) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded; // progress event\n\n this.emitEvent('progress', [this, image, elem]);\n\n if (this.jqDeferred && this.jqDeferred.notify) {\n this.jqDeferred.notify(this, image);\n } // check if completed\n\n\n if (this.progressedCount === this.images.length) {\n this.complete();\n }\n\n if (this.options.debug && console) {\n console.log(\"progress: \".concat(message), image, elem);\n }\n };\n\n ImagesLoaded.prototype.complete = function () {\n let eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent(eventName, [this]);\n this.emitEvent('always', [this]);\n\n if (this.jqDeferred) {\n let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[jqMethod](this);\n }\n }; // -------------------------- -------------------------- //\n\n\n function LoadingImage(img) {\n this.img = img;\n }\n\n LoadingImage.prototype = Object.create(EvEmitter.prototype);\n\n LoadingImage.prototype.check = function () {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n let isComplete = this.getIsImageComplete();\n\n if (isComplete) {\n // report based on naturalWidth\n this.confirm(this.img.naturalWidth !== 0, 'naturalWidth');\n return;\n } // If none of the checks above matched, simulate loading on detached element.\n\n\n this.proxyImage = new Image(); // add crossOrigin attribute. #204\n\n if (this.img.crossOrigin) {\n this.proxyImage.crossOrigin = this.img.crossOrigin;\n }\n\n this.proxyImage.addEventListener('load', this);\n this.proxyImage.addEventListener('error', this); // bind to image as well for Firefox. #191\n\n this.img.addEventListener('load', this);\n this.img.addEventListener('error', this);\n this.proxyImage.src = this.img.currentSrc || this.img.src;\n };\n\n LoadingImage.prototype.getIsImageComplete = function () {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n };\n\n LoadingImage.prototype.confirm = function (isLoaded, message) {\n this.isLoaded = isLoaded;\n let parentNode = this.img.parentNode; // emit progress with parent or self
\n\n let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;\n this.emitEvent('progress', [this, elem, message]);\n }; // ----- events ----- //\n // trigger specified handler for event type\n\n\n LoadingImage.prototype.handleEvent = function (event) {\n let method = 'on' + event.type;\n\n if (this[method]) {\n this[method](event);\n }\n };\n\n LoadingImage.prototype.onload = function () {\n this.confirm(true, 'onload');\n this.unbindEvents();\n };\n\n LoadingImage.prototype.onerror = function () {\n this.confirm(false, 'onerror');\n this.unbindEvents();\n };\n\n LoadingImage.prototype.unbindEvents = function () {\n this.proxyImage.removeEventListener('load', this);\n this.proxyImage.removeEventListener('error', this);\n this.img.removeEventListener('load', this);\n this.img.removeEventListener('error', this);\n }; // -------------------------- Background -------------------------- //\n\n\n function Background(url, element) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n } // inherit LoadingImage prototype\n\n\n Background.prototype = Object.create(LoadingImage.prototype);\n\n Background.prototype.check = function () {\n this.img.addEventListener('load', this);\n this.img.addEventListener('error', this);\n this.img.src = this.url; // check if image is already complete\n\n let isComplete = this.getIsImageComplete();\n\n if (isComplete) {\n this.confirm(this.img.naturalWidth !== 0, 'naturalWidth');\n this.unbindEvents();\n }\n };\n\n Background.prototype.unbindEvents = function () {\n this.img.removeEventListener('load', this);\n this.img.removeEventListener('error', this);\n };\n\n Background.prototype.confirm = function (isLoaded, message) {\n this.isLoaded = isLoaded;\n this.emitEvent('progress', [this, this.element, message]);\n }; // -------------------------- jQuery -------------------------- //\n\n\n ImagesLoaded.makeJQueryPlugin = function (jQuery) {\n jQuery = jQuery || window.jQuery;\n if (!jQuery) return; // set local variable\n\n $ = jQuery; // $().imagesLoaded()\n\n $.fn.imagesLoaded = function (options, onAlways) {\n let instance = new ImagesLoaded(this, options, onAlways);\n return instance.jqDeferred.promise($(this));\n };\n }; // try making plugin\n\n\n ImagesLoaded.makeJQueryPlugin(); // -------------------------- -------------------------- //\n\n return ImagesLoaded;\n});","var g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if (typeof window === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-3ef39ebb07486beaa27bcd8a262e87a5.ico\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-16x16-52c3bbe56d0a54a55f9ed4533c97c3f6.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-32x32-58177d9eddb9bfc21158ffe33ee3d162.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/apple-touch-icon-7b00f321a2b6db903e61c5d092498d7c.png\";","/* global $ */\n// UNCOMMENT FOR DEBOUNCE OR THROTTLE SUPPORT. NOTE: REQUIRES LODASH TO BE INSTALLED\n// import debounce from \"lodash/debounce\";\n// import throttle from \"lodash/throttle\";\n\nclass App {\n constructor() {\n this.rootFontSize = App.getRootFontSize();\n\n // NOTE: breakpoints in rem units\n // NOTE: MAKE THIS MATCH YOUR SCSS BREAKPOINTS\n this.breakpoints = {\n xl: 100, // 1600px+\n lg: 75, // 1200px – 1599px\n md: 57, // 900px – 1199px\n sm: 50, // 576px – 900px\n xs: 0, // 0px – 575px\n };\n\n // Initial state\n this.state = {\n breakpoint: this.getBreakpoint(),\n };\n\n // Recognized events\n const config = [\n { parent: document, type: \"DOMContentLoaded\" },\n { parent: document, type: \"turbolinks:load\" },\n { parent: document, type: \"turbolinks:before-cache\" },\n { parent: document, type: \"turbolinks:before-visit\" },\n { parent: document, type: \"focusin\" },\n { parent: document, type: \"focusout\" },\n { parent: document, type: \"click\" },\n { parent: document, type: \"change\" },\n { parent: document, type: \"keydown\" },\n { parent: document, type: \"keyup\" },\n { parent: window, type: \"scroll\", throttle: 100 },\n { parent: window, type: \"resize\", debounce: 200 },\n { parent: window, type: \"breakpoint\" },\n { parent: document, type: \"pageLoad\" },\n ];\n\n // Build standardized events object\n this.events = config.reduce((acc, { type }) => {\n acc[type] = {};\n return acc;\n }, {});\n\n // Attach a listener for each registered event type,\n // optionally debouncing the handlers.\n config.forEach((eventConfig) => {\n const executeAllHandlers = (originalEvent) => {\n this.trigger(eventConfig.type, originalEvent);\n };\n\n // UNCOMMENT FOR DEBOUNCE OR THROTTLE SUPPORT. NOTE: REQUIRES LODASH TO BE INSTALLED\n // if (eventConfig.debounce) {\n // executeAllHandlers = debounce(executeAllHandlers, eventConfig.debounce);\n // } else if (eventConfig.throttle) {\n // executeAllHandlers = throttle(executeAllHandlers, eventConfig.throttle);\n // }\n\n eventConfig.parent.addEventListener(eventConfig.type, executeAllHandlers);\n });\n\n // Setup custom events\n this.addEventListener(\"resize\", {\n name: \"breakpoint-checker\",\n handler: () => {\n const previousBreakpoint = this.state.breakpoint;\n const currentBreakpoint = this.getBreakpoint();\n if (currentBreakpoint !== this.state.breakpoint) {\n this.state.breakpoint = currentBreakpoint;\n this.trigger(\"breakpoint\", {\n previous: previousBreakpoint,\n current: currentBreakpoint,\n });\n }\n },\n });\n\n this.addEventListener(\"turbolinks:load\", () => {\n this.trigger(\"pageLoad\", {\n target: document.body,\n originalEvent: \"turbolinks:load\",\n });\n });\n\n $(window).on(\"economy:magic_module_updated\", (e) => {\n this.trigger(\"pageLoad\", {\n target: e.target,\n originalEvent: \"economy:magic_module_updated\",\n });\n\n this.trigger(\"economy:magic_module_updated\", {\n target: e.target,\n });\n });\n }\n\n addEventListener(type, e) {\n if (!type || !this.events[type]) {\n /* eslint-disable no-console */\n console.warn(\n `Could not add event listener because \"${type}\" is not one of the expected events. Expected:`,\n Object.keys(this.events)\n );\n return false;\n }\n\n const name = e.name || Object.keys(this.events[type]).length;\n const handler = e instanceof Function ? e : e.handler;\n this.events[type][name] = handler;\n\n return this.removeEventListener.bind(this, type, name);\n }\n\n removeEventListener(type, data) {\n const name = typeof data === \"string\" ? data : data.name;\n if (this.events[type] && this.events[type][name]) {\n delete this.events[type][name];\n }\n }\n\n trigger(type, originalEvent) {\n if (!this.events[type]) {\n return;\n }\n\n Object.values(this.events[type]).forEach((handler) => {\n if (handler instanceof Function) {\n handler(originalEvent);\n }\n });\n }\n\n updateState(update) {\n this.state = Object.assign({}, this.state, update);\n }\n\n // NOTE: do not call this method directly. Opt instead to use `this.state.breakpoint`\n getBreakpoint() {\n const viewportWidth = window.innerWidth / this.rootFontSize;\n const [breakpoint] = Object.entries(this.breakpoints).find(\n ([_, minViewportSize]) => viewportWidth >= minViewportSize // eslint-disable-line no-unused-vars\n );\n return breakpoint;\n }\n\n isMobile() {\n return this.state.breakpoint === \"xs\" || this.state.breakpoint === \"sm\";\n }\n\n isTablet() {\n return (\n this.state.breakpoint === \"xs\" ||\n this.state.breakpoint === \"sm\" ||\n this.state.breakpoint === \"md\"\n );\n }\n\n // NOTE: css media queries use rem units, so our js recreation of breakpoint should too.\n // We need the root font size in pixels to convert `window.innerWidth` to rem units.\n // `getComputedStyle` causes DOM reflow, though, so we want to minimize how often we check it.\n static getRootFontSize() {\n return parseFloat(getComputedStyle(document.documentElement).fontSize);\n }\n}\nexport default new App();\n","export const isEconomyEditMode = () =>\n document.documentElement.classList.contains(\"edit\") ||\n document.documentElement.classList.contains(\"record\");\n\n// TODO: we dont support IE11, so maybe we don't need this?\nexport const forEachNodelist = (nodeList, callback) => {\n Array.prototype.forEach.call(nodeList, callback);\n};\n\n// TODO: we dont support IE11, so maybe we don't need this?\nexport const mapNodelist = (nodeList, callback) => {\n Array.prototype.map.call(nodeList, callback);\n};\n\nexport const interpolate = (min, max, progress) => {\n return progress * (max - min) + min;\n};\n\nexport const clamp = (val, min, max) => Math.min(Math.max(val, min), max);\n\nexport const loopAround = (val, min, max) => {\n if (val > max) {\n return min;\n }\n if (val < min) {\n return max;\n }\n return val;\n};\n\nexport const isSplitContent = (element) => {\n return Boolean(element.closest(\".split-content\"));\n};\n\nexport const fetchPageMarkup = (url) => {\n return fetch(url, {\n headers: {\n \"X-Requested-With\": \"XMLHttpRequest\",\n },\n })\n .then((res) => res.text())\n .catch((err) => {\n console.error(\"Could not load the requested page.\", err); // eslint-disable-line no-console\n });\n};\n\nexport const fetchJson = (url) => {\n return fetch(url, {\n headers: {\n \"X-Requested-With\": \"XMLHttpRequest\",\n },\n })\n .then((res) => res.json())\n .catch((err) => {\n console.error(\"Could not load the requested page.\", err); // eslint-disable-line no-console\n });\n};\n\nexport const cookiePrefix = \"_economy_ps1_\";\n\n// Copied from https://stackoverflow.com/questions/14573223/set-cookie-and-get-cookie-with-javascript#24103596\nexport const setCookie = (name, value, days) => {\n let expires = \"\";\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = `; expires=${date.toUTCString()}`;\n }\n document.cookie = `${cookiePrefix}${name}=${value}${expires}; SameSite=Lax; path=/`;\n};\n\n// Copied from https://stackoverflow.com/questions/14573223/set-cookie-and-get-cookie-with-javascript#24103596\nexport const getCookie = (name) => {\n const nameEQ = `${cookiePrefix}${name}=`;\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === \" \") c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n};\n\nexport const editSearchParams = (url, cb) => {\n // The URL interface treats relative URLs as invalid unless we pass in a base.\n const formatted =\n url.startsWith(\"/\") || url.startsWith(\"?\")\n ? new URL(url, window.location.origin)\n : new URL(url);\n const params = new URLSearchParams(formatted.search);\n cb(params, url);\n formatted.search = params.toString();\n return formatted.href;\n};\n\n// Fisher-Yates shuffle from Mike Bostock. See this article for documentation:\n// https://bost.ocks.org/mike/shuffle/\nexport const shuffleArray = (array) => {\n const shuffled = array;\n let currentIndex = shuffled.length;\n let randomIndex;\n\n while (currentIndex !== 0) {\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n [shuffled[currentIndex], shuffled[randomIndex]] = [\n shuffled[randomIndex],\n shuffled[currentIndex],\n ];\n }\n\n return shuffled;\n};\n\nexport const markupToDocumentFragment = (markup) => {\n return document.createRange().createContextualFragment(markup);\n};\n\nexport const getDistanceBetweenTwoCoordinates = ([x1, y1], [x2, y2]) => {\n const a = x2 - x1;\n const b = y2 - y1;\n return Math.sqrt(a ** 2 + b ** 2);\n};\n\nexport const isDescendant = (parent, child) => {\n let node = child.parentNode;\n while (node != null) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n};\n\nexport const getKeyboardFocusableElements = (element) => {\n return [\n ...element.querySelectorAll(\n 'a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])'\n ),\n ].filter(\n (el) => !el.hasAttribute(\"disabled\") && !el.getAttribute(\"aria-hidden\")\n );\n};\n\nexport const getFirstKeyboardFocusableElement = (element) => {\n const focusableElements = getKeyboardFocusableElements(element);\n return focusableElements[0];\n};\n","import * as Util from \"../utilities\";\nimport app from \"../tfi_app\";\n\n/*\n This javascript provides an interface for Flickity to work in a\n Linked by Air type of way. It includes:\n - accessible buttons\n - screen reader announcements\n - turbolinks cacheing behavior\n\n This js should handle all of the default functionality for carousels.\n If you need to interact with a specific instance, you can either crawl\n the `GenericCarousel.current` array, or you can use the static\n `getInstance` method. Otherwise, we provide static methods for performing\n actions on all active carousels.\n\n Example:\n import { GenericCarousel } from \"../scripts/generic_carousel\";\n GenericCarousel.current.forEach(c => c.next());\n\n Example:\n import { GenericCarousel } from \"../scripts/generic_carousel\";\n const element = document.getElementById('some-id')\n const carousel = GenericCarousel.getInstance(element);\n carousel.refreshLayout();\n\n Example:\n import { GenericCarousel } from \"../scripts/generic_carousel\";\n GenericCarousel.refreshAll();\n\n You may extend this class to provide custom functionality or controls.\n By default, instances of class extensions will still accumulate in the\n GenericCarousel.current array.\n\n Certain elements are needed to build out functionality. You may pass\n them in via the `elements` argument, or use the default CSS class names.\n If using the latter path, make sure you elements exist within element.\n If the elements are found, functionality will be added. In that sense,\n they are all optional, but the you ought to include them for accessibility.\n See the `elements` option below.\n\n @param {HTMLNode} element The containing element\n @param {object} options Any options that should be passed to Flickity\n @param {GenericCarousel ~ Elements} elements Named references to elements that build out carousel functionality\n\n @typedef {Object} GenericCarousel ~ Elements\n @property {HTMLNode} slideWrapper=\".js-carousel-slide-wrapper\" The element that contains all the slides, which will be the target of the flickity initialization\n @property {HTMLNode} [previousControl=\".js-carousel-previous\"] A button to select the carousel's previous slide\n @property {HTMLNode} [nextControl=\".js-carousel-next\"] A button to select the carousel's next slide\n*/\n\nexport class GenericCarousel {\n static current = [];\n\n static selectorPrefix = \"js-carousel\";\n\n static defaultConfig = {\n wrapAround: true,\n accessibility: true,\n };\n\n constructor(element, options = {}, elements = {}) {\n // CONFIG\n this.config = Object.assign(this.constructor.defaultConfig, options);\n\n // ELEMENTS\n this.setElements(element, elements);\n\n // ACCESSIBILITY CONCERNS\n this.setupAccessibility();\n\n // PRE-INITIALIZE HOOKS\n this.beforeInit();\n\n // STATE\n this.state = this.defaultState;\n\n // EVENTS\n this.setUpEvents();\n\n // INITIAL RENDER\n this.update(this.state);\n\n // KEEP TRACK OF IT\n GenericCarousel.current.push(this);\n\n // HOOKS\n this.trigger(\"initialize\");\n }\n\n /* Constructor helpers (broken out so they can be overwritten) */\n setElements(element, elements = {}) {\n this.element = element;\n this.slideWrapper =\n elements.slideWrapper ||\n element.querySelector(\n `.${this.constructor.selectorPrefix}-slide-wrapper`\n ) ||\n element;\n this.slides =\n elements.slides ||\n element.querySelectorAll(`.${this.constructor.selectorPrefix}-slide`);\n // Convert from nodeList to Array\n this.slides = [...this.slides];\n this.previousControl =\n elements.previousControl ||\n element.querySelector(`.${this.constructor.selectorPrefix}-previous`) ||\n element.querySelector(\".js-previous-control\");\n this.nextControl =\n elements.nextControl ||\n element.querySelector(`.${this.constructor.selectorPrefix}-next`) ||\n element.querySelector(\".js-next-control\");\n }\n\n get defaultState() {\n return {\n index: 0,\n maxIndex: this.slides.length - 1,\n canGoNext: true,\n canGoPrevious: this.config.wrapAround,\n };\n }\n\n setupAccessibility() {\n if (!this.config.accessibility) {\n return;\n }\n\n // Announcements\n this.announcements = document.createElement(\"div\");\n this.announcements.className = \"visually-hidden js-carousel-announcements\";\n this.announcements.setAttribute(\"aria-live\", \"polite\");\n this.element.appendChild(this.announcements);\n\n // Control labels\n if (this.previousControl) {\n this.previousLabel = document.createElement(\"div\");\n this.previousLabel.className = \"visually-hidden\";\n this.previousControl.appendChild(this.previousLabel);\n }\n\n if (this.nextControl) {\n this.nextLabel = document.createElement(\"div\");\n this.nextLabel.className = \"visually-hidden\";\n this.nextControl.appendChild(this.nextLabel);\n }\n }\n\n beforeInit() {\n // Leaving blank so it can overwritten\n }\n\n setUpEvents() {\n if (this.nextControl) {\n this.nextControl.addEventListener(\"click\", () => {\n this.next();\n });\n }\n if (this.previousControl) {\n this.previousControl.addEventListener(\"click\", () => {\n this.previous();\n });\n }\n\n // Allow for event tie-ins\n this.events = {};\n this.events.initialize = [];\n this.events.layout = [];\n this.events.change = [];\n }\n\n /* Public methods */\n select(index) {\n const currentIndex = this.state.index;\n this.update({ index });\n this.updateControls();\n this.trigger(\"change\", {\n index: this.state.index,\n previousIndex: currentIndex,\n });\n }\n\n next() {\n const currentIndex = this.state.index;\n const { nextIndex } = this;\n const shouldChange = typeof nextIndex === \"number\";\n if (shouldChange) {\n this.update({\n index: nextIndex,\n });\n this.updateControls();\n this.trigger(\"change\", {\n index: this.state.index,\n previousIndex: currentIndex,\n });\n }\n }\n\n previous() {\n const currentIndex = this.state.index;\n const { previousIndex } = this;\n const shouldChange = typeof previousIndex === \"number\";\n if (shouldChange) {\n this.update({\n index: previousIndex,\n });\n this.updateControls();\n this.trigger(\"change\", {\n index: this.state.index,\n previousIndex: currentIndex,\n });\n }\n }\n\n destroy() {\n GenericCarousel.current = GenericCarousel.current.filter((c) => c !== this);\n }\n\n refreshLayout() {\n this.trigger(\"layout\");\n }\n\n on(event, handler) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event].push(handler);\n\n return this.off.bind(this, event, handler);\n }\n\n off(event, handler) {\n this.events[event] = this.events[event].filter((e) => e !== handler);\n }\n\n trigger(event, args = {}) {\n if (!this.events[event]) {\n return;\n }\n\n const formattedArgs = Object.assign({}, args, {\n target: this,\n });\n this.events[event].forEach((cb) => cb.call(this, formattedArgs));\n }\n\n afterImagesLoad() {\n const images = this.element.querySelectorAll(\"img\");\n if (!images) {\n return Promise.resolve();\n }\n\n const promises = [...images].map((imageElement) => {\n return new Promise((resolve, reject) => {\n if (imageElement.complete) {\n resolve();\n } else {\n /* eslint-disable no-param-reassign */\n imageElement.onload = resolve;\n imageElement.onerror = reject;\n /* eslint-enable no-param-reassign */\n }\n });\n });\n return Promise.allSettled(promises);\n }\n\n /* Public helper methods */\n static getInstance(element) {\n return GenericCarousel.current.find((i) => {\n return i.element === element;\n });\n }\n\n static refreshAll() {\n GenericCarousel.current.forEach((i) => i.refreshLayout());\n }\n\n static destroyAll() {\n GenericCarousel.current.forEach((i) => i.destroy());\n }\n\n /* State management functions */\n update(update) {\n const previousState = Object.assign({}, this.state);\n Object.assign(this.state, update);\n this.render(update, previousState);\n return previousState;\n }\n\n updateControls() {\n const canGoPrevious = typeof this.previousIndex === \"number\";\n const canGoNext = typeof this.nextIndex === \"number\";\n this.update({ canGoPrevious, canGoNext });\n }\n\n /* Render functions */\n /* eslint-disable no-unused-vars */\n render(update, previousState) {\n if (update.hasOwnProperty(\"canGoPrevious\")) {\n this.renderPreviousControl();\n }\n if (update.hasOwnProperty(\"canGoNext\")) {\n this.renderNextControl();\n }\n if (update.hasOwnProperty(\"index\")) {\n this.renderAnnouncements();\n }\n }\n /* eslint-enable no-unused-vars */\n\n renderPreviousControl() {\n if (!this.previousControl) {\n return;\n }\n if (this.state.canGoPrevious) {\n this.previousControl.removeAttribute(\"disabled\");\n } else {\n this.previousControl.setAttribute(\"disabled\", \"\");\n }\n\n if (this.previousLabel) {\n this.previousLabel.innerHTML = `Go to slide #${this.previousIndex + 1}`;\n }\n }\n\n renderNextControl() {\n if (!this.nextControl) {\n return;\n }\n if (this.state.canGoNext) {\n this.nextControl.removeAttribute(\"disabled\");\n } else {\n this.nextControl.setAttribute(\"disabled\", \"\");\n }\n\n if (this.nextLabel) {\n this.nextLabel.innerHTML = `Go to slide #${this.nextIndex + 1}`;\n }\n }\n\n renderAnnouncements() {\n if (!this.announcements) {\n return;\n }\n this.announcements.innerHTML = `Now viewing slide #${\n this.state.index + 1\n } of ${this.state.maxIndex + 1}`;\n }\n\n /* Helper functions */\n get previousIndex() {\n if (this.state.maxIndex === 0) {\n return false;\n }\n if (this.config.wrapAround) {\n return Util.loopAround(this.state.index - 1, 0, this.state.maxIndex);\n }\n if (this.state.index === 0) {\n return false;\n }\n return this.state.index - 1;\n }\n\n get nextIndex() {\n if (this.state.maxIndex === 0) {\n return false;\n }\n if (this.config.wrapAround && this.state.maxIndex > 0) {\n return Util.loopAround(this.state.index + 1, 0, this.state.maxIndex);\n }\n if (this.state.index === this.state.maxIndex) {\n return false;\n }\n return this.state.index + 1;\n }\n}\n\n// // NOTE: we give these listeners a name so that they don't accumulate\napp.addEventListener(\"turbolinks:before-cache\", {\n name: \"carousel-destroyer\",\n handler: () => {\n GenericCarousel.destroyAll();\n },\n});\n\napp.addEventListener(\"resize\", {\n name: \"carousel-resizer\",\n handler: () => {\n GenericCarousel.refreshAll();\n },\n});\n","import Flickity from \"flickity\";\nimport { GenericCarousel } from \"./generic_carousel\";\n\nexport class GenericFlickityCarousel extends GenericCarousel {\n static selectorPrefix = \"js-carousel\";\n\n static sizedClassName = `${this.selectorPrefix}--sized`;\n\n static defaultConfig = Object.assign({}, GenericCarousel.defaultConfig, {\n wrapAround: false,\n draggable: false,\n prevNextButtons: false,\n pageDots: false,\n });\n\n constructor(element, options, elements) {\n super(element, options, elements);\n\n this.update({ sized: true });\n\n this.flickity.on(\"dragStart\", () => {\n const changeHandler = (updatedIndex) => {\n this.select(updatedIndex, true);\n this.flickity.off(\"change\", changeHandler);\n };\n this.flickity.on(\"change\", changeHandler);\n });\n\n GenericFlickityCarousel.current.push(this);\n }\n\n get defaultState() {\n const parentDefaultState = super.defaultState;\n return Object.assign({}, parentDefaultState, {\n maxIndex: this.flickity.slides.length - 1,\n sized: false,\n });\n }\n\n beforeInit() {\n this.flickity = new Flickity(this.slideWrapper, this.config);\n }\n\n /* Public methods */\n select(index, skipFlickitySelect = false) {\n super.select(index);\n\n if (skipFlickitySelect) {\n return;\n }\n\n this.flickity.select(index);\n }\n\n next() {\n super.next();\n this.flickity.next();\n }\n\n previous() {\n super.previous();\n this.flickity.previous();\n }\n\n destroy() {\n super.destroy();\n GenericFlickityCarousel.current = GenericFlickityCarousel.current.filter(\n (c) => c !== this\n );\n this.flickity.destroy();\n }\n\n refreshLayout() {\n this.update({ sized: false });\n this.flickity.resize();\n this.update({ sized: true });\n this.trigger(\"layout\");\n }\n\n render(update, previousState) {\n super.render(update, previousState);\n\n if (update.hasOwnProperty(\"sized\")) {\n if (this.state.sized) {\n this.element.classList.add(this.constructor.sizedClassName);\n } else {\n this.element.classList.remove(this.constructor.sizedClassName);\n }\n }\n }\n\n /* Public helper methods */\n static getInstance(element) {\n return GenericCarousel.current.find((i) => {\n return i.element === element || i.flickity === element;\n });\n }\n}\n\nGenericFlickityCarousel.current = [];\n","import app from \"../tfi_app\";\nimport * as animations from \"../utilities/animations\";\nimport { GenericCarousel } from \"./generic_carousel\";\n\nconst INITIALIZED_CLASS_NAME = \"crossfade-carousel--initialized\";\n\n/*\n NOTE: \n At its core, this component handles two tasks:\n\n 1. Fade in/out slides on demand\n 2. Make sure the carousel's height matches the tallest slide\n\n Additionally, this component inherits some accessibility concerns from GenericCarousel,\n such as announcing the current slide to screen readers. Worth noting that the accessibility\n features can be turned off with any GenericCarousel instance or subclass instance.\n You may want to do this if you have two carousels working in conjunction:\n otherwise you would end up with redundant screen reader announcements.\n*/\nexport class CrossfadeCarousel extends GenericCarousel {\n static selectorPrefix = \"js-crossfade-carousel\";\n\n constructor(element, options) {\n super(element, options);\n\n this.afterImagesLoad().then(() => {\n this.refreshLayout();\n });\n }\n\n get defaultState() {\n return Object.assign({}, super.defaultState, {\n carouselHeight: 0,\n });\n }\n\n refreshLayout() {\n this.update({\n carouselHeight: false,\n });\n const maxHeight = [...this.slides].reduce((runningMaxHeight, slide) => {\n const slideHeight = slide.offsetHeight;\n return slideHeight > runningMaxHeight ? slideHeight : runningMaxHeight;\n }, 0);\n this.update({\n carouselHeight: maxHeight,\n });\n this.trigger(\"layout\");\n }\n\n render(update, previousState) {\n super.render(update, previousState);\n\n if (update.hasOwnProperty(\"index\")) {\n this.renderCurrentSlide(this.state.index, previousState.index);\n }\n\n if (update.hasOwnProperty(\"carouselHeight\")) {\n this.renderCarouselHeight(this.state.carouselHeight);\n }\n }\n\n renderCurrentSlide(currentIndex, previousIndex) {\n if (currentIndex === previousIndex) {\n return;\n }\n\n const currentSlide = this.slides[currentIndex];\n const previousSlide = this.slides[previousIndex];\n\n animations.fadeOutElement(previousSlide).then(() => {\n animations.fadeInElement(currentSlide);\n });\n }\n\n renderCarouselHeight(height) {\n if (height) {\n this.slideWrapper.style.height = `${height}px`;\n this.element.classList.add(INITIALIZED_CLASS_NAME);\n } else {\n this.slideWrapper.style.removeProperty(\"height\");\n this.element.classList.remove(INITIALIZED_CLASS_NAME);\n }\n }\n\n /* Public methods */\n resize() {\n this.refreshLayout();\n }\n}\n\nexport const init = () => {\n app.addEventListener(\"pageLoad\", (e) => {\n // NOTE: the Image Carousel component initializes its own Crossfade Carousel.\n // This initialization is inteneded for standalone instances of the Crossfade Carousel.\n [...e.target.querySelectorAll(\".js-crossfade-carousel\")].map(\n (instance) => new CrossfadeCarousel(instance)\n );\n });\n};\n","/* JavaScript for CarouselModule */\n\nimport app from \"../tfi_app\";\nimport { GenericFlickityCarousel } from \"../components/generic_flickity_carousel\";\nimport { CrossfadeCarousel } from \"../components/crossfade_carousel\";\n\n// Export the class itself\nexport class CarouselModule extends GenericFlickityCarousel {\n static defaultConfig = Object.assign(\n {},\n GenericFlickityCarousel.defaultConfig,\n {\n cellAlign: \"left\",\n draggable: true,\n // lazy load images to make sure the carousel doesn't initiate before the images have\n // load two images at a time to accommodate the design\n lazyLoad: 2,\n }\n );\n\n constructor(element) {\n super(element);\n this.hasCaptionCarousel = element.querySelector(\".js-carousel-captions\");\n if (this.hasCaptionCarousel) {\n this.captionCarousel = new CrossfadeCarousel(\n element.querySelector(\".js-carousel-captions\"),\n {\n accessibility: false,\n }\n );\n }\n\n this.slideSizers = [...this.slides].map((slide) => {\n const sizer = slide.querySelector(\".js-carousel-slide-sizer\");\n const { naturalWidth } = sizer.dataset;\n const { naturalHeight } = sizer.dataset;\n return {\n slide,\n sizer,\n naturalWidth,\n naturalHeight,\n };\n });\n\n this.setSlideSizes();\n this.flickity.resize();\n }\n\n select(index) {\n super.select(index);\n if (this.hasCaptionCarousel) {\n this.captionCarousel.select(index);\n }\n }\n\n next() {\n super.next();\n if (this.hasCaptionCarousel) {\n this.captionCarousel.next();\n }\n }\n\n previous() {\n super.previous();\n if (this.hasCaptionCarousel) {\n this.captionCarousel.previous();\n }\n }\n\n destroy() {\n super.destroy();\n if (this.hasCaptionCarousel) {\n this.captionCarousel.destroy();\n }\n }\n\n refreshLayout() {\n this.setSlideSizes();\n this.flickity.resize();\n if (this.hasCaptionCarousel) {\n this.captionCarousel.refreshLayout();\n }\n this.trigger(\"layout\");\n }\n\n setSlideSizes() {\n const carouselHeight =\n this.element.querySelector(\".js-carousel-slide\").offsetHeight;\n // Each slide's maximum width, as measured by a factor of the component's display width\n const isMobile = app.isMobile();\n const scaleFactor = isMobile ? 0.9 : 0.7;\n const maxWidth = window.innerWidth * scaleFactor;\n this.slideSizers.forEach(({ sizer, naturalWidth, naturalHeight }) => {\n const scaledWidth = naturalWidth * scaleFactor;\n const constrainWidth = scaledWidth > window.innerWidth;\n const constrainHeight = naturalHeight * scaleFactor > carouselHeight;\n\n let width;\n let height;\n\n if (!constrainHeight && constrainWidth) {\n width = `${maxWidth}px`;\n height = \"auto\";\n } else {\n width = \"auto\";\n height = \"100%\";\n }\n\n sizer.style.setProperty(\"width\", `${width}`);\n sizer.style.setProperty(\"height\", `${height}`);\n });\n }\n}\n\n// Exports an array of all the current instances\nexport const carouselModules = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the CarouselModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n carouselModules.current = [\n ...e.target.querySelectorAll(\".js-carousel-module\"),\n ].map((instance) => new CarouselModule(instance));\n });\n};\n","/* JavaScript for WallpaperModule */\nimport app from \"../tfi_app\";\n\n// Export the class itself\nexport class EmbeddedVideo {\n constructor(element) {\n this.element = element;\n this.module = this.element.closest(\".magic-module\");\n this.embedCode = this.element.getAttribute(\"data-embed-code\");\n this.autoInit = this.element.getAttribute(\"data-auto-init\");\n\n if (this.autoInit) {\n this.initializeIframe();\n }\n\n this.element.addEventListener(\"click\", () => {\n this.initializeIframe();\n });\n }\n\n initializeIframe() {\n this.element.innerHTML = this.embedCode;\n if (this.module) {\n this.module.classList.add(\"video-module--embed-code-initialized\");\n }\n }\n}\n\n// Exports an array of all the current instances\nexport const embeddedVideos = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the WallpaperModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n embeddedVideos.current = [\n ...e.target.querySelectorAll(\".video-module__video-wrapper\"),\n ].map((instance) => new EmbeddedVideo(instance));\n });\n};\n","/* JavaScript for VideoGridModule */\n\nimport app from \"../tfi_app\";\n\n// Export the class itself\nexport class VideoGridModule {\n constructor(element) {\n this.element = element;\n this.buttons = element.querySelectorAll(\".js-video-grid-module__show-more\");\n this.grid = element.querySelector(\".js-video-grid__container\");\n\n // Constants\n this.classes = {\n TRUNCATED: \"video-grid__container--truncate\",\n HIDDEN: \"hidden\",\n };\n\n // State\n this.state = {};\n this.state.truncated = this.grid.classList.contains(this.classes.TRUNCATED);\n\n // Events\n if (this.buttons) {\n this.buttons.forEach((button) => {\n button.addEventListener(\"click\", () => {\n if (this.state.truncated) {\n this.showAll();\n }\n });\n });\n }\n }\n\n // Public methods\n\n update(update) {\n Object.assign(this.state, update);\n this.render(update);\n }\n\n render(update) {\n if (update.hasOwnProperty(\"truncated\")) {\n if (!this.state.truncated) {\n this.grid.classList.remove(this.classes.TRUNCATED);\n this.buttons.forEach((button) => {\n button.classList.add(this.classes.HIDDEN);\n });\n }\n }\n }\n\n showAll() {\n this.update({ truncated: false });\n }\n}\n\n// Exports an array of all the current instances\nexport const videoGridModules = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the VideoGridModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n videoGridModules.current = [\n ...e.target.querySelectorAll(\".js-video-grid-module\"),\n ].map((instance) => new VideoGridModule(instance));\n });\n};\n","/* JavaScript for VitrineModule */\nimport app from \"../tfi_app\";\n\nconst ACTIVE_CLASS = \"vitrine-module__grid-item--active\";\n\n// Export the class itself\nexport class VitrineModule {\n constructor(element) {\n this.element = element;\n this.slides = this.element.querySelectorAll(\".vitrine-module__grid-item\");\n this.state = {\n activeSlide: null,\n };\n\n const isMobile = app.isMobile();\n\n this.slides.forEach((slide) => {\n if (!isMobile) {\n slide.addEventListener(\"mouseover\", () => {\n this.setActiveSlide(slide);\n });\n slide.addEventListener(\"mouseout\", () => {\n this.setActiveSlide(slide);\n });\n } else {\n slide.addEventListener(\"click\", () => {\n this.setActiveSlide(slide);\n });\n }\n });\n }\n\n setActiveSlide(slide) {\n if (this.state.activeSlide !== slide) {\n this.update({ activeSlide: slide });\n } else {\n this.update({ activeSlide: null });\n }\n }\n\n update(update) {\n Object.assign(this.state, update);\n this.render(update);\n }\n\n render(update) {\n if (update.hasOwnProperty(\"activeSlide\")) {\n this.slides.forEach((slide) => {\n slide.classList.remove(ACTIVE_CLASS);\n });\n if (this.state.activeSlide) {\n this.state.activeSlide.classList.add(ACTIVE_CLASS);\n }\n }\n }\n}\n\n// Exports an array of all the current instances\nexport const vitrineModules = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the VitrineModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n vitrineModules.current = [\n ...e.target.querySelectorAll(\".js-vitrine-module\"),\n ].map((instance) => new VitrineModule(instance));\n });\n};\n","/* JavaScript for AccordionModule */\nimport app from \"../tfi_app\";\n\n// Export the class itself\nexport class Accordion {\n constructor(element) {\n // Elements\n this.element = element;\n this.toggler = element.querySelector(\".js-accordion-toggler\");\n\n // Constants\n this.classes = {\n open: \"accordion--open\",\n closed: \"accordion--closed\",\n };\n\n // State\n this.state = {};\n this.state.open = element.classList.contains(this.classes.open);\n\n // Events\n if (this.toggler) {\n this.toggler.addEventListener(\"click\", () => {\n if (this.state.open) {\n this.close();\n } else {\n this.open();\n }\n });\n }\n }\n\n update(update) {\n Object.assign(this.state, update);\n this.render(update);\n }\n\n render(update) {\n if (update.hasOwnProperty(\"open\")) {\n if (this.state.open) {\n this.element.classList.add(this.classes.open);\n this.element.classList.remove(this.classes.closed);\n } else {\n this.element.classList.remove(this.classes.open);\n this.element.classList.add(this.classes.closed);\n }\n }\n }\n\n // Public methods\n open() {\n this.update({ open: true });\n }\n\n close() {\n this.update({ open: false });\n }\n\n toggle() {\n if (this.state.open) {\n this.close();\n } else {\n this.open();\n }\n }\n}\n\n// Exports an array of all the current instances\nexport const accordions = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the AccordionModule on any given page\n app.addEventListener(\"pageLoad\", () => {\n accordions.current = [...document.querySelectorAll(\".js-accordion\")].map(\n (instance) => new Accordion(instance)\n );\n });\n};\n","/* eslint-disable no-use-before-define */\n/* eslint-disable no-underscore-dangle */\n/* JavaScript for AudioModule */\n\nimport app from \"../tfi_app\";\n\nexport class AudioModule {\n constructor(element) {\n this.element = element;\n this.playPauseButton = this.element.querySelector(\n \".js-audio-player-play-pause-button\"\n );\n this.playhead = this.element.querySelector(\".js-audio-player-playhead\");\n this.scrubber = this.element.querySelector(\".js-audio-player-scrubber\");\n this.progressBar = this.element.querySelector(\n \".js-audio-player-progress-bar\"\n );\n this.timeRemainingLabel = this.element.querySelector(\n \".js-audio-player-time-remaining\"\n );\n\n this.player = this.element.querySelector(\".js-audio-player-player\");\n\n // State\n this.state = {\n paused: true,\n progress: 0,\n duration: null,\n timeRemaining: null,\n timeElapsed: null,\n progressBarWidth: null,\n progressBarOffset: null,\n isScrubbing: false,\n };\n\n // Classes\n this.classes = {\n PAUSED: \"audio-player--paused\",\n PLAYING: \"audio-player--playing\",\n };\n\n // sets progress bar dimensions once css has had a chance to load\n setTimeout(() => {\n this.state.progressBarWidth = this.progressBar.offsetWidth;\n this.state.progressBarOffset = this.progressBar.offsetLeft;\n }, 500);\n\n // Initial render\n this._render(this.state);\n\n // Set duration when ready\n if (this.player.readyState > 0) {\n this._recordDuration();\n } else {\n this.player.addEventListener(\"loadedmetadata\", () => {\n this._recordDuration();\n });\n }\n\n // State tracks the native player's state\n this.player.addEventListener(\"play\", () => {\n this._update({ paused: false });\n });\n\n // State tracks the native player's state\n this.player.addEventListener(\"pause\", () => {\n this._update({ paused: true });\n });\n\n // State tracks the native player's state\n this.player.addEventListener(\"timeupdate\", () => {\n const progress = roundTo(\n this.player.currentTime / this.player.duration,\n 4\n );\n const timeRemaining = this._getTimeRemaining();\n const timeElapsed = this._getTimeElapsed();\n\n this._update({\n progress,\n timeRemaining,\n timeElapsed,\n });\n });\n\n // clicking play pause toggles paused state\n this.playPauseHandler = this.togglePlayPause.bind(this);\n this.playPauseButton.addEventListener(\"click\", this.playPauseHandler);\n\n // Pressing down on the pointer within the scrubber will start listening for scrub events\n this.pointerDownHandler = this._handleScrubStart.bind(this);\n this.scrubber.addEventListener(\"mousedown\", this.pointerDownHandler);\n this.scrubber.addEventListener(\"touchstart\", this.pointerDownHandler);\n\n // Simply releasing the mouse anywhere (like a click) will seek the audio, if the mousedown started within the scrubber\n this.pointerUpHandler = this._handleScrubEnd.bind(this);\n document.addEventListener(\"mouseup\", this.pointerUpHandler);\n document.addEventListener(\"touchend\", this.pointerUpHandler);\n\n // Moving the pointer will scrub through the audio\n this.pointerMoveHandler = this._handleScrubSeek.bind(this);\n document.addEventListener(\"mousemove\", this.pointerMoveHandler);\n document.addEventListener(\"touchmove\", this.pointerMoveHandler);\n\n // Navigating elsewhere destroys the instance\n $(document).one(\"turbo:before-cache\", function () {\n this.destroy();\n });\n\n // Other components should be able to pause all present audio modules via AudioModule.pauseAll()\n this.globalPauseHandler = this.pause.bind(this);\n $(document).on(\"app:audio-player-pause\", this.globalPauseHandler);\n }\n\n /*\n ::::::::::::::::::::::::\n :: CORE FUNCTIONALITY ::\n ::::::::::::::::::::::::\n */\n\n _update(update) {\n this.state = Object.assign(this.state, update);\n this._render(update);\n }\n\n _render(update) {\n if (update.hasOwnProperty(\"duration\")) {\n this._renderDuration();\n }\n\n if (update.hasOwnProperty(\"paused\")) {\n this._renderPlayPause();\n }\n\n if (update.hasOwnProperty(\"progress\")) {\n this._setPlayheadPosition();\n this._renderTimeRemaining();\n }\n }\n\n /*\n :::::::::::::::::::\n :: STATE HELPERS ::\n :::::::::::::::::::\n */\n\n _recordDuration() {\n const duration = secondsToReadableTime(this.player.duration);\n this._update({ duration });\n }\n\n _getTimeRemaining() {\n const timeRemaining = secondsToReadableTime(\n this.player.duration - this.player.currentTime\n );\n return timeRemaining;\n }\n\n _getTimeElapsed() {\n const timeRemaining = secondsToReadableTime(this.player.currentTime);\n return timeRemaining;\n }\n\n // Safari does not support Pointer events, so we must use both `mouse` and `touch` events\n _handleScrubStart() {\n if (!this.player.readyState === 0) {\n return;\n }\n\n this._update({ isScrubbing: true });\n }\n\n // Safari does not support Pointer events, so we must use both `mouse` and `touch` events\n _handleScrubEnd(e) {\n if (this.state.isScrubbing) {\n let progress =\n (e.pageX - this.state.progressBarOffset) / this.state.progressBarWidth;\n progress = clamp(progress, 0, 1);\n const seekedTime = Math.round(progress * this.player.duration);\n this.player.currentTime = seekedTime;\n }\n this._update({ isScrubbing: false });\n }\n\n // Safari does not support Pointer events, so we must use both `mouse` and `touch` events\n _handleScrubSeek(e) {\n if (!this.state.isScrubbing || !this.player.readyState === 0) {\n return;\n }\n\n let progress =\n (e.pageX - this.state.progressBarOffset) / this.state.progressBarWidth;\n progress = clamp(progress, 0, 1);\n const seekedTime = Math.round(progress * this.player.duration);\n this.player.currentTime = seekedTime;\n }\n\n /*\n ::::::::::::::::::::\n :: RENDER HELPERS ::\n ::::::::::::::::::::\n */\n\n _renderPlayPause() {\n if (this.state.paused) {\n this.element.classList.remove(this.classes.PLAYING);\n this.element.classList.add(this.classes.PAUSED);\n } else {\n this.element.classList.remove(this.classes.PAUSED);\n this.element.classList.add(this.classes.PLAYING);\n }\n }\n\n _renderDuration() {\n if (!this.state.duration) {\n return;\n }\n this.timeRemainingLabel.innerText = this.state.duration;\n }\n\n _setPlayheadPosition() {\n const translation = `translateX(calc((${this.state.progressBarWidth}px - 100%) * ${this.state.progress}))`;\n this.playhead.style.transform = translation;\n }\n\n _renderTimeRemaining() {\n if (!this.state.timeRemaining) {\n return;\n }\n\n this.timeRemainingLabel.innerText = `${this.state.timeElapsed} / ${this.state.duration}`;\n }\n\n /*\n ::::::::::::::::::::\n :: PUBLIC METHODS ::\n ::::::::::::::::::::\n */\n\n play() {\n this.pauseAll();\n this.player.play();\n }\n\n pause() {\n this.player.pause();\n }\n\n togglePlayPause() {\n if (this.state.paused) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n destroy() {\n this.pause();\n this.playPauseButton.removeEventListener(\"click\", this.playPauseHandler);\n this.scrubber.removeEventListener(\"mousedown\", this.pointerDownHandler);\n this.scrubber.removeEventListener(\"touchstart\", this.pointerDownHandler);\n document.removeEventListener(\"mouseup\", this.pointerUpHandler);\n document.removeEventListener(\"touchend\", this.pointerUpHandler);\n document.removeEventListener(\"mousemove\", this.pointerMoveHandler);\n document.removeEventListener(\"touchmove\", this.pointerMoveHandler);\n $(document).off(\"app:audio-player-pause\", this.globalPauseHandler);\n }\n\n pauseAll() {\n $(document).trigger(\"app:audio-player-pause\");\n }\n}\n\n/*\n:::::::::::::::\n:: UTILITIES ::\n:::::::::::::::\n*/\n\nfunction secondsToReadableTime(seconds) {\n const minutes = Math.floor(seconds / 60);\n seconds = Math.round(seconds % 60);\n if (seconds < 10) {\n seconds = `0${seconds}`;\n }\n return [minutes, seconds].join(\":\");\n}\n\nfunction wrapInParens(str) {\n return `(${str})`;\n}\n\nfunction roundTo(input, numberOfDecimals) {\n return Math.round(input * 10 ** numberOfDecimals) / 10 ** numberOfDecimals;\n}\n\nfunction clamp(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n\nexport const audioModules = {\n current: [],\n};\n\nexport const init = () => {\n // Initialize any instances of the AudioModule on any given page\n app.addEventListener(\"pageLoad\", () => {\n audioModules.current = [\n ...document.querySelectorAll(\".js-audio-player\"),\n ].map((instance) => new AudioModule(instance));\n });\n};\n","/* JavaScript for FilterButton */\n\nimport app from \"../tfi_app\";\nimport * as urlSearchParams from \"../utilities/url_search_params\";\n\n// Export the class itself\nexport class FilterButton {\n constructor(element) {\n this.element = element;\n const button = this.element;\n this.target = this.element.dataset.target;\n // this.params = new URLSearchParams(window.location.search);\n\n if (window.location.hash === `#${this.target}`) {\n button.classList.add(\"filter-button--selected\");\n }\n\n if (window.location.pathname.search(this.target) >= 0) {\n button.classList.add(\"filter-button--selected\");\n }\n\n button.addEventListener(\"click\", (e) => {\n if (e.target.classList.contains(\"js-filter-button--clear\")) {\n urlSearchParams.resetFilters(\"record_type\");\n }\n });\n }\n}\n\n// Exports an array of all the current instances\nexport const filterButton = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the ImageGridModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n filterButton.current = [\n ...e.target.querySelectorAll(\".js-filter-button\"),\n ].map((instance) => new FilterButton(instance));\n });\n};\n","export const resetFilters = (keepKey) => {\n const params = new URLSearchParams(window.location.search);\n const values = Array.from(params.keys());\n values.forEach((value) => {\n if (value !== keepKey) {\n params.delete(value);\n }\n });\n const url = `${window.location.pathname}?${params.toString().toLowerCase()}`;\n Turbolinks.clearCache();\n Turbolinks.visit(url);\n};\n","/* JavaScript for FilterOptions */\n\n// TODO //\n// Build out multi-item filtering\n// Priority should go to building out tfi_app and turbolinks\n// before more work goes into filtering\n\nimport app from \"../tfi_app\";\n\n// Export the class itself\nexport class FilterDropDown {\n constructor(element) {\n this.element = element;\n this.filters = this.element.querySelectorAll(\".js-filter-drop-down\");\n this.state = {\n activeFilter: null,\n };\n\n this.filters.forEach((filter, index) => {\n const button = filter.querySelector(\".filter-button--title\");\n button.addEventListener(\"click\", (event) => {\n if (this.state.activeFilter !== index) {\n this.update({ activeFilter: index });\n event.preventDefault();\n } else {\n this.update({ activeFilter: null });\n event.preventDefault();\n }\n });\n });\n }\n\n update(update) {\n Object.assign(this.state, update);\n this.render(update);\n }\n\n render(update) {\n if (update.hasOwnProperty(\"activeFilter\")) {\n this.openFilter();\n }\n }\n\n openFilter() {\n this.resetFilters();\n if (this.state.activeFilter === null) {\n return;\n }\n const activeFilter = this.filters[this.state.activeFilter];\n const button = activeFilter.querySelector(\".filter-button--title\");\n activeFilter.classList.add(\"filter-row--drop-down--active\");\n button.ariaExpanded = \"true\";\n this.state.open = true;\n }\n\n resetFilters() {\n this.filters.forEach((filter) => {\n filter.classList.remove(\"filter-row--drop-down--active\");\n const button = filter.querySelector(\".filter-button--title\");\n button.ariaExpanded = \"false\";\n this.state.open = false;\n });\n }\n}\n\n// Exports an array of all the current instances\nexport const filterDropDown = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the ImageGridModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n filterDropDown.current = [\n ...e.target.querySelectorAll(\".js-archive-filters\"),\n ].map((instance) => new FilterDropDown(instance));\n });\n};\n","/*\n This class is used to control keyboard focus and keep it contained\n within a set of constraints. It is used to add accessibility to dialogs,\n so that users are not focusing elements that are outside of the dialog.\n\n \"Constraints\" are enforced whenever the users changes focus. If the currently focused\n element does not meet the constraints, then focus is redirected back to the `loopTarget`.\n \n Constraints can either be selectors that the element must match, or they can be\n HTML elements that must either *be* the currently focused element or *contain* it.\n\n This class has support for a tracked \"history\" of constraints (each of which is called an \"entry\").\n This allows you open a second focus lock while one is already open. When the second one is\n unlocked, the first one will be made active again.\n\n This class is exported as a singleton so that its state can be shared\n across several parts of the app.\n\n Example:\n const focusableElements = document.querySelectorAll(\".focusable-element\");\n // Locks the focus\n const unlock = focusLock.lock({\n elements: [...focusableElements],\n loopTarget: focusableElements[0]\n })\n\n // Unlocks the focus\n unlock();\n\n Example:\n focusLock.lock({\n selectors: [\".modal *\", \".some-other-selector\"],\n loopTarget: document.getElementById(\"modal-close-button\")\n })\n\n Using Conditional a Loop Target:\n The loopTarget parameter can accept a function, which is useful in circumstances\n where you want to set a target vlaue depending on a condition.\n\n Example:\n getloopTarget = () => {\n const someOtherElement = document.querySelectorAll(\".other-element\");\n if (document.activeElement.matches(\"#application-yield *\")) {\n return someOtherElement;\n }\n return focusableElements[0];\n };\n\n focusLock.lock({\n selectors: [\".selector *\"],\n loopTarget: this.getloopTarget,\n });\n\n TODO:\n - Support moving in reverse with shift+tab\n - If you call `unlock` on a entry that isn't the currently active, everything blows up\n*/\nimport app from \"../tfi_app\";\n\nclass FocusLock {\n constructor() {\n this.state = Object.assign({}, this.constructor.defaultState);\n\n app.addEventListener(\"focusin\", {\n name: \"focus-lock-handler\",\n handler: () => {\n this.handleFocusChange();\n },\n });\n\n app.addEventListener(\"turbolinks:before-cache\", {\n name: \"focus-lock-teardown\",\n handler: () => {\n this.unlockAll();\n },\n });\n }\n\n /**\n * @param {FocusLock~Entry} entry A configuration object that describes how the lock should be enforced\n * @returns {Function} A function that will unlock this lock and remove it from the history\n * @typedef {Object} FocusLock~Entry\n * @property {[string]} [selectors] Selectors that the currently focused element must match in order for focus to be permissible. If it's not permissible, the `loopTarget` will be focused. Required if `elements` is not present\n * @property {[HTMLElement]} [elements] Elements that the currently focused element must match or be a child to in order for focus to be permissible. If it's not permissible, the `loopTarget` will be focused. Required if `selectors` is not present\n * @property {HTMLElement|Function} loopTarget An element that will receive focus when the user hits tab and ends up on an unpermitted focus (i.e. where should we redirect focus when the user tabs past the end of the available options). Alternatively, pass in a function that returns an element.\n * @property {HTMLElement|Function} [lockTarget] An element that will receive focus when the lock is set. Alternatively, pass in a function that returns an element.\n * @property {HTMLElement|Function} [unlockTarget] An element that will receive focus when the lock is unset. If the lock is unset and another entry exists, the focus will not be directed here, but rather to the newly active entry's `lockTarget`. Alternatively, pass in a function that returns an element.\n\n */\n lock(entry) {\n // Validate the entry\n if (!entry.loopTarget) {\n throw new Error(\"Focus Lock: expected parameter `loopTarget`\");\n }\n\n if (!entry.elements && !entry.selectors) {\n throw new Error(\n \"Focus Lock: expected parameter `elements` or `selectors`\"\n );\n }\n\n if (\n entry.elements &&\n (!Array.isArray(entry.elements) ||\n entry.elements.some((element) => element.nodeType !== 1))\n ) {\n throw new Error(\n \"Focus Lock: `elements` parameter must be an array of HTML nodes\"\n );\n }\n\n if (\n entry.selectors &&\n (!Array.isArray(entry.selectors) ||\n entry.selectors.some((selector) => typeof selector !== \"string\"))\n ) {\n throw new Error(\n \"Focus Lock: `selectors` parameter must be an array of strings\"\n );\n }\n\n const parsedEntry = Object.assign({}, entry);\n if (!parsedEntry.unlockTarget) {\n parsedEntry.unlockTarget = document.activeElement;\n }\n\n if (!parsedEntry.lockTarget) {\n parsedEntry.lockTarget = entry.loopTarget;\n }\n\n // Add it to our saved list of entries\n this.update({\n entries: [...this.state.entries, parsedEntry],\n });\n\n // Totally clear out the previously active entry\n this.update({\n locked: false,\n selectors: [],\n elements: [],\n loopTarget: null,\n unlockTarget: null,\n lockTarget: null,\n });\n\n // Set the current lock\n this.update({\n locked: true,\n ...parsedEntry,\n });\n\n // Set the initial focus\n this.constructor.focusElementOrFunction(this.state.lockTarget);\n\n // Make it easy for devs to remove this lock by returning a function they can call\n return this.unlock.bind(this, parsedEntry);\n }\n\n unlock(entry) {\n if (!this.state.locked || !this.state.entries.length) {\n return;\n }\n\n let entryToUse = entry;\n if (!entry) {\n entryToUse = this.state.entries[this.state.entries.length - 1];\n } else if (!this.state.entries.some((e) => e === entry)) {\n // Don't do anything if this entry isn't in our store\n return;\n }\n\n // Remove the entry from our store and update the current lock.\n // If there's another entry to use, lock to that.\n this.update({\n entries: this.state.entries.filter((e) => e !== entryToUse),\n });\n\n if (this.state.entries.length) {\n // Totally clear out the previously active entry\n this.update({\n locked: false,\n selectors: [],\n elements: [],\n loopTarget: null,\n focusToReturnTo: null,\n });\n\n // Get the most recently added entry from the store\n const activeEntry = this.state.entries.slice().pop();\n this.update({\n locked: true,\n ...activeEntry,\n });\n\n this.constructor.focusElementOrFunction(this.state.lockTarget);\n } else {\n this.constructor.focusElementOrFunction(this.state.unlockTarget);\n this.update(this.constructor.defaultState);\n }\n }\n\n unlockAll() {\n if (!this.state.locked || !this.state.entries.length) {\n return;\n }\n\n const { unlockTarget } = this.state.entries[0];\n this.update(this.constructor.defaultState);\n this.constructor.focusElementOrFunction(unlockTarget);\n }\n\n handleFocusChange() {\n if (!this.state.locked) {\n return;\n }\n\n let isPermissible = true;\n if (this.state.selectors.length) {\n isPermissible = this.state.selectors.some((selector) =>\n document.activeElement.matches(selector)\n );\n } else if (this.state.elements.length) {\n isPermissible = this.state.elements.some(\n (element) =>\n element === document.activeElement ||\n element.contains(document.activeElement)\n );\n }\n\n if (isPermissible) {\n return;\n }\n this.constructor.focusElementOrFunction(this.state.loopTarget);\n }\n\n update(update) {\n Object.assign(this.state, update);\n }\n\n static defaultState = {\n entries: [],\n locked: false,\n selectors: [],\n elements: [],\n loopTarget: null,\n lockTarget: null,\n unlockTarget: null,\n };\n\n static focusElementOrFunction(target) {\n if (target instanceof Function) {\n const element = target();\n if (element && element.nodeType === 1) {\n element.focus();\n }\n } else if (target.nodeType === 1) {\n target.focus();\n }\n }\n}\n\n// Export a singleton\nexport default new FocusLock();\n","/* JavaScript for AccordionModule */\nimport app from \"../tfi_app\";\nimport * as animations from \"../utilities/animations\";\nimport { isDescendant } from \"../utilities\";\n\nimport focusLock from \"./focus_lock\";\n\n// Export the class itself\nexport class Header {\n constructor(element) {\n // Elements\n this.element = element;\n this.main = document.body;\n this.menu = this.element.querySelector(\".js-menu\");\n this.button = this.element.querySelector(\".js-menu-button\");\n this.primaryRow = this.element.querySelector(\".js-site-header__row\");\n this.search = this.element.querySelector(\".js-site-header__search\");\n this.searchButtons = this.search.querySelectorAll(\".search-icon\");\n this.searchInput = this.search.querySelector(\".search-input\");\n\n // Constants\n this.classes = {\n open: \"--open\",\n closed: \"--closed\",\n expanded: \"--expanded\",\n collapsed: \"--collapsed\",\n searchActive: \"--active\",\n };\n\n // State\n this.state = {};\n this.state.open = element.classList.contains(this.classes.open);\n this.state.expanded = true;\n this.state.search = false;\n\n const isSearchPage = window.location.pathname === \"/search\";\n if (isSearchPage) {\n this.update({ search: true });\n }\n\n // Events\n if (this.button) {\n this.button.addEventListener(\"click\", () => {\n if (this.state.open) {\n this.update({ open: false });\n } else {\n this.update({ open: true });\n }\n });\n\n this.searchButtons.forEach((searchButton) => {\n searchButton.addEventListener(\"click\", (e) => {\n if (this.state.search && isDescendant(searchButton, e.target)) {\n this.update({ search: false });\n } else {\n this.update({ search: true });\n }\n });\n });\n }\n\n document.addEventListener(\"click\", (event) => {\n const insideHeader = isDescendant(this.primaryRow, event.target);\n if (!insideHeader) {\n this.update({ search: false });\n }\n });\n\n const handleIntersect = ([sentinel]) => {\n clearTimeout(this.snapIntoPlaceDelay);\n\n const { intersectionRatio } = sentinel;\n\n const distanceFromViewportTopEdge = sentinel.boundingClientRect.top;\n const isPassingThroughViewportTopEdge =\n distanceFromViewportTopEdge < app.state.windowHeight / 2;\n if (isPassingThroughViewportTopEdge) {\n return;\n }\n if (intersectionRatio <= 0 && this.state.expanded) {\n this.collapse();\n } else if (intersectionRatio > 0 && !this.state.expanded) {\n this.expand();\n }\n };\n // Sets threshold to include 100 steps in animation\n const options = {\n root: null,\n rootMargin: \"0px\",\n threshold: Array.from({ length: 100 }).map((_, index) => index / 100),\n };\n this.observer = new IntersectionObserver(handleIntersect, options);\n this.observer.observe(this.element);\n }\n\n expand() {\n this.element.classList.add(`site-header${this.classes.expanded}`);\n this.element.classList.remove(`site-header${this.classes.collapsed}`);\n this.update({\n expanded: true,\n });\n }\n\n collapse() {\n this.element.classList.add(`site-header${this.classes.collapsed}`);\n this.element.classList.remove(`site-header${this.classes.expanded}`);\n this.update({\n expanded: false,\n });\n }\n\n update(update) {\n Object.assign(this.state, update);\n this.render(update);\n }\n\n render(update) {\n if (update.hasOwnProperty(\"open\")) {\n if (this.state.open) {\n this.open();\n } else {\n this.close();\n }\n }\n\n if (update.hasOwnProperty(\"search\")) {\n if (this.state.search) {\n this.openSearch();\n } else {\n this.closeSearch();\n }\n }\n }\n\n // Public methods\n open() {\n animations.fadeInElement(this.menu, { duration: 150 });\n this.element.classList.add(`menu${this.classes.open}`);\n this.element.classList.remove(`menu${this.classes.closed}`);\n this.element.classList.add(\"color-pink\");\n this.main.classList.add(`modal${this.classes.open}`);\n this.button.ariaExpanded = true;\n this.setFocusLock();\n }\n\n close() {\n animations.fadeOutElement(this.menu, { duration: 150 });\n this.element.classList.remove(`menu${this.classes.open}`);\n this.element.classList.add(`menu${this.classes.closed}`);\n this.element.classList.remove(\"color-pink\");\n this.main.classList.remove(`modal${this.classes.open}`);\n this.button.ariaExpanded = false;\n this.setFocusLock();\n }\n\n openSearch() {\n this.search.classList.add(\n `site-header__column-search${this.classes.searchActive}`\n );\n this.searchButtons.forEach((searchButton) => {\n searchButton.ariaExpanded = true;\n });\n this.searchInput.focus();\n }\n\n closeSearch() {\n // const searchButton = this.search.querySelector(\".search-icon\");\n this.search.classList.remove(\n `site-header__column-search${this.classes.searchActive}`\n );\n this.searchButtons.forEach((searchButton) => {\n searchButton.ariaExpanded = false;\n });\n }\n\n setFocusLock() {\n if (this.state.open) {\n this.unlockFocus = focusLock.lock({\n selectors: [\".js-menu *\", \".js-site-header__row *\"],\n loopTarget: this.button,\n });\n } else {\n this.unlockFocus();\n }\n }\n}\n\n// Exports an array of all the current instances\nexport const header = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the AccordionModule on any given page\n app.addEventListener(\"pageLoad\", () => {\n header.current = [...document.querySelectorAll(\".js-site-header\")].map(\n (instance) => new Header(instance)\n );\n });\n};\n","/* JavaScript for FilterButton */\n\nimport app from \"../tfi_app\";\n\nconst INCREMENT = 1;\n\n// Export the class itself\nexport class LoadMore {\n constructor(element, scrollPos) {\n this.element = element;\n this.button = this.element;\n this.count = Number(this.element.dataset.count);\n this.params = new URLSearchParams(window.location.search);\n this.state = {\n limit: Number(this.params.get(\"page\")) || INCREMENT,\n truncated: true,\n };\n\n // Onload, scroll the page to the previous position\n window.scrollTo(0, scrollPos);\n\n if (this.count === this.state.limit) {\n this.update({ truncated: false });\n }\n\n this.button.addEventListener(\"click\", () => {\n if (this.state.limit + INCREMENT < this.count) {\n this.update({ limit: this.state.limit + INCREMENT });\n } else {\n this.update({ limit: this.count });\n this.update({ truncated: false });\n }\n });\n }\n\n update(update) {\n Object.assign(this.state, update);\n this.render(update);\n }\n\n render(update) {\n if (update.hasOwnProperty(\"limit\")) {\n this.extendLimit();\n }\n if (update.hasOwnProperty(\"truncated\")) {\n this.hideButton();\n }\n }\n\n // Set the new limit in the Search Params obj and trigger a reload\n extendLimit() {\n this.params.set(\"page\", this.state.limit);\n const url = `${window.location.pathname}?${this.params\n .toString()\n .toLowerCase()}`;\n Turbolinks.clearCache();\n Turbolinks.visit(url);\n Turbolinks.scroll = {};\n }\n\n hideButton() {\n this.button.style.display = \"none\";\n }\n}\n\n// Exports an array of all the current instances\nexport const loadMore = {\n current: [],\n};\n\nconst scrollPosition = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Capture the pages scroll position before triggering a reload\n app.addEventListener(\"turbolinks:before-visit\", () => {\n scrollPosition.current = window.scrollY;\n });\n\n // Pass the scroll position to the new instance\n app.addEventListener(\"pageLoad\", (e) => {\n loadMore.current = [\n ...e.target.querySelectorAll(\".js-load-more-button\"),\n ].map((instance) => new LoadMore(instance, scrollPosition.current));\n });\n};\n","/* eslint-disable max-classes-per-file */\n/* JavaScript for Menu Sub Menus */\nimport app from \"../tfi_app\";\n\nexport class ParamLinks {\n constructor(element) {\n this.element = element;\n this.links = this.element.querySelectorAll(\"a\");\n this.classRoot = this.element.getAttribute(\"data-class\");\n this.classes = {\n selected: `${this.classRoot}--selected`,\n };\n\n this.links.forEach((link) => {\n const isDefault = link.getAttribute(\"data-default\") === \"true\";\n const linkHasQuery = link.search !== \"\";\n const target = linkHasQuery ? link.pathname + link.search : link.pathname;\n const locationHasQuery = window.location.search !== \"\";\n const currentPath = locationHasQuery\n ? window.location.pathname + window.location.search\n : window.location.pathname;\n const isMatch = currentPath.includes(target) || currentPath === target;\n const isIndexPage = currentPath === target;\n // console.log(isDefault);\n if (isMatch && !isDefault) {\n link.classList.add(this.classes.selected);\n } else if (isMatch && isIndexPage && isDefault) {\n link.classList.add(this.classes.selected);\n }\n });\n }\n}\n\n// Exports an array of all the current instances\nexport const paramLinks = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the AccordionModule on any given page\n app.addEventListener(\"pageLoad\", () => {\n paramLinks.current = [...document.querySelectorAll(\".js-param-links\")].map(\n (instance) => new ParamLinks(instance)\n );\n });\n};\n","/* eslint-disable no-use-before-define */\n/* eslint-disable max-classes-per-file */\n/* JavaScript for Menu Sub Menus */\nimport app from \"../tfi_app\";\n\nexport class Submenu {\n constructor() {\n this.submenus = document.querySelectorAll(\".js-sub-menu\");\n this.button = document.querySelector(\".js-sub-menu--toggle\");\n this.events = {};\n this.state = {\n previousSubMenu: null,\n currentSubMenu: null,\n };\n this.submenus.forEach((submenu) => {\n submenu.addEventListener(\"click\", (event) => {\n this.toggleSubMenu(submenu, event);\n });\n submenu.addEventListener(\"keydown\", (event) => {\n this.toggleSubMenu(submenu, event);\n });\n });\n }\n\n toggleSubMenu(submenu, data) {\n const isOpen = submenu === this.state.currentSubMenu;\n if (this.state.currentSubMenu) {\n this.state.previousSubMenu = this.state.currentSubMenu;\n }\n if (!isOpen) {\n this.expand(submenu);\n this.state.open = true;\n this.state.currentSubMenu = submenu;\n } else if (isOpen && data.type === \"click\") {\n this.collapse(submenu);\n this.state.open = false;\n this.state.currentSubMenu = null;\n this.state.previousSubMenu = null;\n }\n }\n\n expand(submenu) {\n submenu.classList.add(\"sub-menu--expanded\");\n if (this.state.previousSubMenu) {\n this.state.previousSubMenu.classList.remove(\"sub-menu--expanded\");\n }\n this.button.setAttribute(\"aria-expanded\", true);\n }\n\n collapse(submenu) {\n submenu.classList.remove(\"sub-menu--expanded\");\n this.button.setAttribute(\"aria-expanded\", false);\n }\n\n on(name, handler) {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n\n this.events[name].push(handler);\n }\n\n removeListener(name, listenerToRemove) {\n if (!this.events[name]) {\n return;\n }\n\n const filterListeners = (listener) => listener !== listenerToRemove;\n this.events[name] = this.events[name].filter(filterListeners);\n }\n\n emit(name, data) {\n if (!this.events[name]) {\n return;\n }\n\n this.events[name].forEach((handler) => handler(data));\n }\n}\n\n// Exports an array of all the current instances\nexport const submenu = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the AccordionModule on any given page\n app.addEventListener(\"pageLoad\", () => {\n submenu.current = [\n ...document.querySelectorAll(\".js-sub-menu--toggle\"),\n ].map((instance) => new Submenu(instance));\n });\n};\n","/* JavaScript for FilterButton */\n\nimport app from \"../tfi_app\";\n\n// Export the class itself\nexport class TruncateList {\n constructor(element) {\n this.element = element;\n this.button = this.element.querySelector(\".js-truncate-button\");\n this.gridItems = this.element.querySelectorAll(\".ca-rail__contents > *\");\n this.state = {\n truncate: true,\n };\n\n this.button.addEventListener(\"click\", () => {\n this.state.truncate = false;\n this.truncateList();\n });\n }\n\n truncateList() {\n if (this.state.truncate) {\n this.gridItems.forEach((element, index) => {\n if (index >= 4) {\n element.classList.add(\"hidden\");\n }\n });\n } else {\n this.gridItems.forEach((element) => {\n element.classList.remove(\"hidden\");\n this.button.classList.add(\"visually-hidden\");\n });\n }\n }\n}\n\n// Exports an array of all the current instances\nexport const truncateList = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the ImageGridModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n truncateList.current = [\n ...e.target.querySelectorAll(\".js-ca-rail--truncate\"),\n ].map((instance) => new TruncateList(instance));\n });\n};\n","/* JavaScript for VideoPlayer */\n\nimport Plyr from \"plyr\";\nimport app from \"../tfi_app\";\n\nconst DEFAULT_CONFIG = {\n autoplay: true,\n autopause: true,\n muted: false,\n};\n\n// Export the class itself\nexport class VideoPlayer {\n constructor(element) {\n this.element = element;\n this.initButton = this.element.querySelector(\".js-plyr__button\");\n this.video = this.element.querySelector(\".js-plyr__video\");\n this.poster = this.element.querySelector(\".js-plyr__poster\");\n const config = Object.assign({}, DEFAULT_CONFIG);\n config.ratio = \"16:9\";\n this.initButton.addEventListener(\"click\", () => {\n this.poster.classList.add(\"visually-hidden\");\n this.video.classList.remove(\"visually-hidden\");\n this.player = new Plyr(this.video, config);\n this.player.play();\n });\n }\n}\n\n// Exports an array of all the current instances\nexport const videoPlayer = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the ImageGridModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n videoPlayer.current = [\n ...e.target.querySelectorAll(\".js-plyr__container\"),\n ].map((instance) => new VideoPlayer(instance));\n });\n};\n","/* JavaScript for LazyImages */\n\nimport app from \"../tfi_app\";\nimport { getFirstKeyboardFocusableElement } from \"../utilities\";\n\nconst LEFT_PADDING = 300;\n\n// Export the class itself\nexport class MediaStack {\n constructor(element) {\n this.element = element;\n this.slides = this.element.querySelectorAll(\".slide\");\n this.slideImages = this.element.querySelectorAll(\".js-slide-image\");\n this.matte = this.element.querySelector(\".media-stack-matte\");\n this.modal = this.element.querySelector(\n \".js-collection-stack__mobile-modal\"\n );\n this.enterStackButton = this.element.querySelector(\".js-enter-stack\");\n\n this.state = {\n activeSlide: null,\n hoverImg: null,\n activeImg: null,\n leftOffset: null,\n leftTranslate: null,\n stackTabbable: false,\n };\n\n this.slides.forEach((slide, index) => {\n slide.addEventListener(\"mouseover\", () => {\n this.update({ hoverImg: index });\n });\n\n slide.addEventListener(\"click\", (e) => {\n const slideImage = slide.querySelector(\".js-slide-image\");\n const button = slide.querySelector(\".js-image-card-close\");\n const activeSlide = this.slides[this.state.activeImg];\n const clickedOutsideSlide = !this.isDescendant(activeSlide, e.target);\n if (\n this.isDescendant(slideImage, e.target) ||\n slideImage === e.target\n ) {\n this.update({ activeImg: index });\n } else if (this.isDescendant(button, e.target) || clickedOutsideSlide) {\n this.update({ activeImg: null });\n this.update({ hoverImg: null });\n // Once the close button is clicked we should wait until\n // the slides have reset before allowing interactions again\n this.element.style.pointerEvents = \"none\";\n setTimeout(() => {\n this.element.style.pointerEvents = \"all\";\n }, 1000);\n }\n });\n });\n\n this.slideImages.forEach((image) => {\n // Clicking on an active image should result in a link to the record\n image.addEventListener(\"click\", () => {\n if (image === this.activeImg) {\n window.location = image.dataset.linkUrl;\n }\n });\n });\n\n this.modal.addEventListener(\"click\", (e) => {\n const button = this.modal.querySelector(\".js-image-card-close\");\n // Check if e.target is a childnode of close button\n // if so, reset state\n if (this.isDescendant(button, e.target)) {\n this.update({ activeImg: null });\n this.update({ hoverImg: null });\n }\n\n const slideImage = this.modal.querySelector(\".js-slide-image\");\n if (this.isDescendant(slideImage, e.target) || slideImage === e.target) {\n window.location = slideImage.dataset.linkUrl;\n }\n });\n\n // Reset when mouse leaves frame\n this.matte.addEventListener(\"mouseout\", () => {\n this.update({ hoverImg: null });\n });\n\n // Reset when clicks fall outside slides\n this.matte.addEventListener(\"click\", () => {\n this.update({ activeImg: null });\n this.update({ hoverImg: null });\n });\n\n this.enterStackButton.addEventListener(\"focus\", () => {\n this.element.querySelectorAll(\"a, button\").forEach((item) => {\n item.tabIndex = \"-1\";\n });\n // this.update({ stackTabbable: true });\n // this.firstElement = getFirstKeyboardFocusableElement(this.element);\n // this.firstElement.focus();\n });\n\n // Allow users using keyboard enter the stack\n this.enterStackButton.addEventListener(\"click\", () => {\n this.element.querySelectorAll(\"a, button\").forEach((item) => {\n item.tabIndex = \"0\";\n });\n this.update({ stackTabbable: true });\n // this.firstElement = getFirstKeyboardFocusableElement(this.element);\n // this.firstElement.focus();\n });\n }\n\n isDescendant(parent, child) {\n let node = child.parentNode;\n while (node != null) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n }\n\n isButton(element) {\n element.classList.contains(\"js-image-card-close\");\n }\n\n update(update) {\n Object.assign(this.state, update);\n this.render(update);\n }\n\n render(update) {\n if (update.hasOwnProperty(\"hoverImg\")) {\n this.translateImages();\n }\n\n if (update.hasOwnProperty(\"activeImg\")) {\n if (app.isTablet()) {\n this.renderMobileModal();\n } else {\n this.highlightImage();\n }\n }\n\n if (update.hasOwnProperty(\"leftOffset\")) {\n this.getLeftOffset();\n }\n\n if (update.hasOwnProperty(\"leftTranslate\")) {\n this.translateLeft();\n }\n\n if (update.hasOwnProperty(\"stackTabbable\")) {\n this.focusFirstElement();\n }\n }\n\n // Translate images on the condition that there is no active image\n translateImages() {\n if (this.state.hoverImg === null && this.state.activeImg === null) {\n this.resetImages();\n return;\n }\n if (this.state.activeImg !== null) {\n return;\n }\n // To expose a hovered image, translate images to the right in a block\n this.hoverImg = this.slides[this.state.hoverImg];\n if (this.hoverImg) {\n const imageWidth = this.hoverImg.offsetWidth / 2;\n\n this.slides.forEach((image, index) => {\n image.style.transform = `translateX(0)`;\n if (index > this.state.hoverImg) {\n image.style.transform = `translateX(${imageWidth}px)`;\n }\n });\n }\n }\n\n highlightImage() {\n if (this.state.activeImg === null) {\n this.resetImages();\n return;\n }\n\n this.activeSlide = this.slides[this.state.activeImg];\n this.activeImg = this.activeSlide.querySelector(\"img\");\n this.activeCard = this.activeSlide.querySelector(\".image-card\");\n\n // This could be edited to be more specific to the selected media\n const centerline = window.innerWidth / 2;\n\n this.slides.forEach((slide, index) => {\n // Hide all image cards and reset transform\n slide.querySelector(\".image-card\").style.opacity = 0;\n slide.querySelector(\".js-image-card-close\").style.opacity = 0;\n slide.style.transform = 0;\n if (index === this.state.activeImg) {\n // If left edge of selected image is past centerline, align to center\n if (this.activeSlide.offsetLeft >= centerline) {\n const newOffset = centerline - this.activeSlide.offsetLeft;\n slide.style.transform = `translateX(${newOffset}px)`;\n this.update({ leftOffset: centerline });\n }\n // If left edge is before centerline, edge forward relative to position\n else {\n const imageWidth = this.activeImg.offsetWidth;\n const newOffset = imageWidth * 0.25;\n slide.style.transform = `translateX(${newOffset}px)`;\n this.update({ leftOffset: this.activeSlide.offsetLeft + newOffset });\n }\n this.activeCard.style.opacity = 1;\n slide.querySelector(\".js-image-card-close\").style.opacity = 1;\n } else if (index > this.state.activeImg) {\n this.translateRight(slide);\n }\n });\n }\n\n translateRight(slide) {\n const newOffset = this.activeSlide.offsetWidth + 100;\n slide.style.transform = `translateX(${newOffset}px)`;\n }\n\n getLeftOffset() {\n const offsets = [];\n this.slides.forEach((slide, index) => {\n if (index < this.state.activeImg) {\n const img = slide.querySelector(\"img\");\n const boundary = this.state.leftOffset;\n // calculate offset position of the slides right edge\n const rightOffset = slide.offsetLeft + img.offsetWidth;\n // calculate the new offset position relative to starting offset\n const newRightOffset = boundary - rightOffset - LEFT_PADDING;\n offsets.push(newRightOffset);\n // update translate value after iterating\n if (offsets.length === this.state.activeImg) {\n this.update({ leftTranslate: Math.min(...offsets) });\n }\n if (rightOffset > boundary) {\n slide.style.transform = `translateX(${newRightOffset}px)`;\n }\n }\n });\n }\n\n translateLeft() {\n this.slides.forEach((slide, index) => {\n if (index < this.state.activeImg) {\n slide.style.transform = `translateX(${this.state.leftTranslate}px)`;\n }\n });\n }\n\n resetImages() {\n this.slides.forEach((image) => {\n image.style.transform = \"translateX(0)\";\n image.querySelector(\".image-card\").style.opacity = 0;\n image.querySelector(\".js-image-card-close\").style.opacity = 0;\n });\n }\n\n resetMobileModal() {\n this.modal.classList.remove(\"collection-stack__mobile-modal--active\");\n this.modal.removeChild(this.modal.firstChild);\n }\n\n renderMobileModal() {\n if (this.state.activeImg === null) {\n this.resetMobileModal();\n return;\n }\n this.activeSlide = this.slides[this.state.activeImg];\n const clone = this.activeSlide.cloneNode(true);\n clone.style.transform = \"translateX(0)\";\n clone.style.height = \"100%\";\n this.modal.classList.add(\"collection-stack__mobile-modal--active\");\n this.modal.appendChild(clone);\n }\n\n focusFirstElement() {\n this.firstElement = getFirstKeyboardFocusableElement(this.slides[0]);\n this.firstElement.focus();\n }\n\n destroy() {\n this.observer.disconnect();\n }\n}\n\n// Exports an array of all the current instances\nexport const mediaStack = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the ImageGridModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n mediaStack.current = [...e.target.querySelectorAll(\".js-media-stack\")].map(\n (instance) => new MediaStack(instance)\n );\n });\n};\n","/* JavaScript for FilterButton */\n\nimport app from \"../tfi_app\";\n\n// Export the class itself\nexport class PreventScroll {\n constructor(element, scrollPos) {\n this.element = element;\n this.params = new URLSearchParams(window.location.search);\n // Onload, scroll the page to the previous position\n window.scrollTo(0, scrollPos);\n\n this.element.addEventListener(\"click\", () => {\n this.triggerPageReload();\n });\n }\n\n // Set the new limit in the Search Params obj and trigger a reload\n triggerPageReload() {\n // this.params.set(\"page\", this.state.limit);\n const url = `${window.location.pathname}?${this.params\n .toString()\n .toLowerCase()}`;\n Turbolinks.clearCache();\n Turbolinks.visit(url);\n Turbolinks.scroll = {};\n }\n}\n\n// Exports an array of all the current instances\nexport const preventScroll = {\n current: [],\n};\n\nconst scrollPosition = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Capture the pages scroll position before triggering a reload\n app.addEventListener(\"turbolinks:before-visit\", () => {\n scrollPosition.current = window.scrollY;\n });\n\n // Pass the scroll position to the new instance\n app.addEventListener(\"pageLoad\", (e) => {\n preventScroll.current = [\n ...e.target.querySelectorAll(\".js-no-scroll-link\"),\n ].map((instance) => new PreventScroll(instance, scrollPosition.current));\n });\n};\n","/* JavaScript for VitrineModule */\nimport app from \"../tfi_app\";\n\n// Export the class itself\nexport class BrowsingHistory {\n constructor(element) {\n this.element = element;\n this.params = new URLSearchParams(window.location.search);\n this.state = {\n showHistory: true,\n };\n if (this.params.get(\"clear_log\")) {\n this.update({ showHistory: false });\n }\n }\n\n update(update) {\n Object.assign(this.state, update);\n this.render(update);\n }\n\n render(update) {\n if (update.hasOwnProperty(\"showHistory\")) {\n if (!this.state.showHistory) {\n this.trimParam();\n }\n }\n }\n\n // Removes \"clear_log\" param from url\n trimParam() {\n this.params.delete(\"clear_log\");\n const params = this.params.toString();\n const paramsString = params ? `?${this.params.toString()}` : \"\";\n const newSrc = `${window.location.pathname}${paramsString}`;\n window.location.href = newSrc;\n }\n}\n\n// Exports an array of all the current instances\nexport const browsingHistory = {\n current: [],\n};\n\n// Export an init function that looks for and instantiates the module on pageload\nexport const init = () => {\n // Initialize any instances of the VitrineModule on any given page\n app.addEventListener(\"pageLoad\", (e) => {\n browsingHistory.current = [\n ...e.target.querySelectorAll(\".js-browsing-history__container\"),\n ].map((instance) => new BrowsingHistory(instance));\n });\n};\n","/* eslint-disable import/first */\n// BEGIN MAGIC_MODULE_IMPORT\n\nimport { Application } from \"@hotwired/stimulus\";\nimport { definitionsFromContext } from \"@hotwired/stimulus-webpack-helpers\";\n\n// Stimulus Init\nwindow.Stimulus = Application.start();\nconst context = require.context(\"./controllers\", true, /\\.js$/);\nStimulus.load(definitionsFromContext(context));\n\nimport * as carouselModule from \"./magic_modules/carousel_module\";\nimport * as videoModule from \"./magic_modules/video_module\";\nimport * as videoGridModule from \"./magic_modules/video_grid_module\";\nimport * as vitrineModule from \"./magic_modules/vitrine_module\";\nimport * as digitalExhibitionsModule from \"./magic_modules/digital_exhibitions_module\";\n\nimport * as homepageArchiveModule from './magic_modules/homepage_archive_module';\nimport * as pressModule from './magic_modules/press_module';\n// END MAGIC_MODULE_IMPORT\n\n// BEGIN MAGIC_MODULE_INIT\n\ncarouselModule.init();\nvideoModule.init();\nvideoGridModule.init();\nvitrineModule.init();\n\ndigitalExhibitionsModule.init();\nhomepageArchiveModule.init();\npressModule.init();\n// END MAGIC_MODULE_INIT\n\nimport * as accordion from \"./components/accordion\";\nimport * as audioModule from \"./components/audio_module\";\nimport * as filterButton from \"./components/filter_button\";\nimport * as filterDropDown from \"./components/filter_drop_down\";\nimport * as header from \"./components/header\";\n// import * as lazyImages from \"./components/lazy_images\";\nimport * as loadMore from \"./components/load_more\";\nimport * as paramLinks from \"./components/param_links\";\nimport * as submenu from \"./components/sub_menu\";\nimport * as truncateList from \"./components/truncate_list\";\nimport * as videoPlayer from \"./components/video_player\";\nimport * as mediaStack from \"./components/media_stack\";\nimport * as preventScroll from \"./components/prevent_scroll_link_handler\";\nimport * as browsingHistory from \"./components/browsing_history\";\n\naudioModule.init();\naccordion.init();\nfilterButton.init();\nfilterDropDown.init();\nheader.init();\nparamLinks.init();\n// lazyImages.init();\nloadMore.init();\nsubmenu.init();\ntruncateList.init();\nvideoPlayer.init();\nmediaStack.init();\npreventScroll.init();\nbrowsingHistory.init();\n","var _templateObject, _templateObject2;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n/*\nTurbo 7.1.0\nCopyright © 2021 Basecamp, LLC\n */\n(function () {\n if (window.Reflect === undefined || window.customElements === undefined || window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n\n const BuiltInHTMLElement = HTMLElement;\n const wrapperForTheName = {\n 'HTMLElement': function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n }\n };\n window.HTMLElement = wrapperForTheName['HTMLElement'];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return;\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name);\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return;\n let prototype;\n\n if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n prototype = window.SubmitEvent.prototype;\n } else if (\"SubmitEvent\" in window) {\n return;\n } else {\n prototype = window.Event.prototype;\n }\n\n addEventListener(\"click\", clickCaptured, true);\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target);\n }\n }\n\n });\n})();\n\nvar FrameLoadingStyle;\n\n(function (FrameLoadingStyle) {\n FrameLoadingStyle[\"eager\"] = \"eager\";\n FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\n\nclass FrameElement extends HTMLElement {\n constructor() {\n super();\n this.loaded = Promise.resolve();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"];\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n const src = this.src;\n this.src = null;\n this.src = src;\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else {\n this.delegate.disabledChanged();\n }\n }\n\n get src() {\n return this.getAttribute(\"src\");\n }\n\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n }\n\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\");\n }\n\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n get complete() {\n return !this.delegate.isLoading;\n }\n\n get isActive() {\n return this.ownerDocument === document && !this.isPreview;\n }\n\n get isPreview() {\n var _a, _b;\n\n return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n }\n\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy;\n\n default:\n return FrameLoadingStyle.eager;\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI);\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n\n if (url.hash) {\n return url.hash.slice(1);\n } else if (anchorMatch = url.href.match(/#(.*)$/)) {\n return anchorMatch[1];\n }\n}\n\nfunction getAction(form, submitter) {\n const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n return expandURL(action);\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\n\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml))$/);\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url);\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href;\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1);\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0];\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname);\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok;\n }\n\n get failed() {\n return !this.succeeded;\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499;\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n\n get redirected() {\n return this.response.redirected;\n }\n\n get location() {\n return expandURL(this.response.url);\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n }\n\n get statusCode() {\n return this.response.status;\n }\n\n get contentType() {\n return this.header(\"Content-Type\");\n }\n\n get responseText() {\n return this.response.clone().text();\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text();\n } else {\n return Promise.resolve(undefined);\n }\n }\n\n header(name) {\n return this.response.headers.get(name);\n }\n\n}\n\nfunction dispatch(eventName) {\n let _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n cancelable = _ref.cancelable,\n detail = _ref.detail;\n\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event;\n}\n\nfunction nextAnimationFrame() {\n return new Promise(resolve => requestAnimationFrame(() => resolve()));\n}\n\nfunction nextEventLoopTick() {\n return new Promise(resolve => setTimeout(() => resolve(), 0));\n}\n\nfunction nextMicrotask() {\n return Promise.resolve();\n}\n\nfunction parseHTMLDocument() {\n let html = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n return new DOMParser().parseFromString(html, \"text/html\");\n}\n\nfunction unindent(strings) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map(line => line.slice(indent)).join(\"\\n\");\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value;\n }, \"\");\n}\n\nfunction uuid() {\n return Array.apply(null, {\n length: 36\n }).map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n } else if (i == 14) {\n return \"4\";\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n } else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n }).join(\"\");\n}\n\nfunction getAttribute(attributeName) {\n for (var _len2 = arguments.length, elements = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n elements[_key2 - 1] = arguments[_key2];\n }\n\n for (const value of elements.map(element => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value;\n }\n\n return null;\n}\n\nfunction markAsBusy() {\n for (var _len3 = arguments.length, elements = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n elements[_key3] = arguments[_key3];\n }\n\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState() {\n for (var _len4 = arguments.length, elements = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n elements[_key4] = arguments[_key4];\n }\n\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nvar FetchMethod;\n\n(function (FetchMethod) {\n FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get;\n\n case \"post\":\n return FetchMethod.post;\n\n case \"put\":\n return FetchMethod.put;\n\n case \"patch\":\n return FetchMethod.patch;\n\n case \"delete\":\n return FetchMethod.delete;\n }\n}\n\nclass FetchRequest {\n constructor(delegate, method, location) {\n let body = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new URLSearchParams();\n let target = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n this.abortController = new AbortController();\n\n this.resolveRequestPromise = value => {};\n\n this.delegate = delegate;\n this.method = method;\n this.headers = this.defaultHeaders;\n this.body = body;\n this.url = location;\n this.target = target;\n }\n\n get location() {\n return this.url;\n }\n\n get params() {\n return this.url.searchParams;\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : [];\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n var _a, _b;\n\n const fetchOptions = this.fetchOptions;\n (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, this);\n await this.allowRequestToBeIntercepted(fetchOptions);\n\n try {\n this.delegate.requestStarted(this);\n const response = await fetch(this.url.href, fetchOptions);\n return await this.receive(response);\n } catch (error) {\n if (error.name !== 'AbortError') {\n this.delegate.requestErrored(this, error);\n throw error;\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: {\n fetchResponse\n },\n target: this.target\n });\n\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n\n return fetchResponse;\n }\n\n get fetchOptions() {\n var _a;\n\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.isIdempotent ? null : this.body,\n signal: this.abortSignal,\n referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href\n };\n }\n\n get defaultHeaders() {\n return {\n \"Accept\": \"text/html, application/xhtml+xml\"\n };\n }\n\n get isIdempotent() {\n return this.method == FetchMethod.get;\n }\n\n get abortSignal() {\n return this.abortController.signal;\n }\n\n async allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise(resolve => this.resolveRequestPromise = resolve);\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.resolveRequestPromise\n },\n target: this.target\n });\n if (event.defaultPrevented) await requestInterception;\n }\n\n}\n\nclass AppearanceObserver {\n constructor(delegate, element) {\n this.started = false;\n\n this.intersect = entries => {\n const lastEntry = entries.slice(-1)[0];\n\n if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n };\n\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n}\n\nclass StreamMessage {\n constructor(html) {\n this.templateElement = document.createElement(\"template\");\n this.templateElement.innerHTML = html;\n }\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(message);\n } else {\n return message;\n }\n }\n\n get fragment() {\n const fragment = document.createDocumentFragment();\n\n for (const element of this.foreignElements) {\n fragment.appendChild(document.importNode(element, true));\n }\n\n return fragment;\n }\n\n get foreignElements() {\n return this.templateChildren.reduce((streamElements, child) => {\n if (child.tagName.toLowerCase() == \"turbo-stream\") {\n return [...streamElements, child];\n } else {\n return streamElements;\n }\n }, []);\n }\n\n get templateChildren() {\n return Array.from(this.templateElement.content.children);\n }\n\n}\n\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nvar FormSubmissionState;\n\n(function (FormSubmissionState) {\n FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\n\nvar FormEnctype;\n\n(function (FormEnctype) {\n FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n FormEnctype[\"multipart\"] = \"multipart/form-data\";\n FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\n\nfunction formEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FormEnctype.multipart:\n return FormEnctype.multipart;\n\n case FormEnctype.plain:\n return FormEnctype.plain;\n\n default:\n return FormEnctype.urlEncoded;\n }\n}\n\nclass FormSubmission {\n constructor(delegate, formElement, submitter) {\n let mustRedirect = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n this.state = FormSubmissionState.initialized;\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.formData = buildFormData(formElement, submitter);\n this.location = expandURL(this.action);\n\n if (this.method == FetchMethod.get) {\n mergeFormDataEntries(this.location, [...this.body.entries()]);\n }\n\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n this.mustRedirect = mustRedirect;\n }\n\n static confirmMethod(message, element) {\n return confirm(message);\n }\n\n get method() {\n var _a;\n\n const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n }\n\n get action() {\n var _a;\n\n const formElementAction = typeof this.formElement.action === 'string' ? this.formElement.action : null;\n return ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formaction\")) || this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n }\n\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData);\n } else {\n return this.formData;\n }\n }\n\n get enctype() {\n var _a;\n\n return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n }\n\n get isIdempotent() {\n return this.fetchRequest.isIdempotent;\n }\n\n get stringFormData() {\n return [...this.formData].reduce((entries, _ref2) => {\n let _ref3 = _slicedToArray(_ref2, 2),\n name = _ref3[0],\n value = _ref3[1];\n\n return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n }, []);\n }\n\n get confirmationMessage() {\n return this.formElement.getAttribute(\"data-turbo-confirm\");\n }\n\n get needsConfirmation() {\n return this.confirmationMessage !== null;\n }\n\n async start() {\n const _FormSubmissionState = FormSubmissionState,\n initialized = _FormSubmissionState.initialized,\n requesting = _FormSubmissionState.requesting;\n\n if (this.needsConfirmation) {\n const answer = FormSubmission.confirmMethod(this.confirmationMessage, this.formElement);\n\n if (!answer) {\n return;\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform();\n }\n }\n\n stop() {\n const _FormSubmissionState2 = FormSubmissionState,\n stopping = _FormSubmissionState2.stopping,\n stopped = _FormSubmissionState2.stopped;\n\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true;\n }\n }\n\n prepareHeadersForRequest(headers, request) {\n if (!request.isIdempotent) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n\n if (token) {\n headers[\"X-CSRF-Token\"] = token;\n }\n\n headers[\"Accept\"] = [StreamMessage.contentType, headers[\"Accept\"]].join(\", \");\n }\n }\n\n requestStarted(request) {\n var _a;\n\n this.state = FormSubmissionState.waiting;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: {\n formSubmission: this\n }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n this.result = {\n success: response.succeeded,\n fetchResponse: response\n };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = {\n success: true,\n fetchResponse: response\n };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = {\n success: false,\n fetchResponse: response\n };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = {\n success: false,\n error\n };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(request) {\n var _a;\n\n this.state = FormSubmissionState.stopped;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: Object.assign({\n formSubmission: this\n }, this.result)\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n requestMustRedirect(request) {\n return !request.isIdempotent && this.mustRedirect;\n }\n\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n\n if (name && value != null && formData.get(name) != value) {\n formData.append(name, value);\n }\n\n return formData;\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find(cookie => cookie.startsWith(cookieName));\n\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined;\n }\n }\n}\n\nfunction getMetaContent(name) {\n const element = document.querySelector(\"meta[name=\\\"\".concat(name, \"\\\"]\"));\n return element && element.content;\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected;\n}\n\nfunction mergeFormDataEntries(url, entries) {\n const searchParams = new URLSearchParams();\n\n for (const _ref4 of entries) {\n var _ref5 = _slicedToArray(_ref4, 2);\n\n const name = _ref5[0];\n const value = _ref5[1];\n if (value instanceof File) continue;\n searchParams.append(name, value);\n }\n\n url.search = searchParams.toString();\n return url;\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get children() {\n return [...this.element.children];\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null;\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(\"[id='\".concat(anchor, \"'], a[name='\").concat(anchor, \"']\")) : null;\n }\n\n get isConnected() {\n return this.element.isConnected;\n }\n\n get firstAutofocusableElement() {\n return this.element.querySelector(\"[autofocus]\");\n }\n\n get permanentElements() {\n return [...this.element.querySelectorAll(\"[id][data-turbo-permanent]\")];\n }\n\n getPermanentElementById(id) {\n return this.element.querySelector(\"#\".concat(id, \"[data-turbo-permanent]\"));\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const id = currentPermanentElement.id;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap;\n }\n\n}\n\nclass FormInterceptor {\n constructor(delegate, element) {\n this.submitBubbled = event => {\n const form = event.target;\n\n if (!event.defaultPrevented && form instanceof HTMLFormElement && form.closest(\"turbo-frame, html\") == this.element) {\n const submitter = event.submitter || undefined;\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.method;\n\n if (method != \"dialog\" && this.delegate.shouldInterceptFormSubmission(form, submitter)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmissionIntercepted(form, submitter);\n }\n }\n };\n\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"submit\", this.submitBubbled);\n }\n\n stop() {\n this.element.removeEventListener(\"submit\", this.submitBubbled);\n }\n\n}\n\nclass View {\n constructor(delegate, element) {\n this.resolveRenderPromise = value => {};\n\n this.resolveInterceptionPromise = value => {};\n\n this.delegate = delegate;\n this.element = element;\n }\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({\n x: 0,\n y: 0\n });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition(_ref6) {\n let x = _ref6.x,\n y = _ref6.y;\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({\n x: 0,\n y: 0\n });\n }\n\n get scrollRoot() {\n return window;\n }\n\n async render(renderer) {\n const isPreview = renderer.isPreview,\n shouldRender = renderer.shouldRender,\n snapshot = renderer.newSnapshot;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise(resolve => this.resolveRenderPromise = resolve);\n this.renderer = renderer;\n this.prepareToRenderSnapshot(renderer);\n const renderInterception = new Promise(resolve => this.resolveInterceptionPromise = resolve);\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, this.resolveInterceptionPromise);\n if (!immediateRender) await renderInterception;\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else {\n this.invalidate();\n }\n }\n\n invalidate() {\n this.delegate.viewInvalidated();\n }\n\n prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n\n}\n\nclass FrameView extends View {\n invalidate() {\n this.element.innerHTML = \"\";\n }\n\n get snapshot() {\n return new Snapshot(this.element);\n }\n\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.clickBubbled = event => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n };\n\n this.linkClicked = event => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url);\n }\n }\n\n delete this.clickEvent;\n };\n\n this.willVisit = () => {\n delete this.clickEvent;\n };\n\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n respondsToEventTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element;\n }\n\n}\n\nclass Bardo {\n constructor(permanentElementMap) {\n this.permanentElementMap = permanentElementMap;\n }\n\n static preservingPermanentElements(permanentElementMap, callback) {\n const bardo = new this(permanentElementMap);\n bardo.enter();\n callback();\n bardo.leave();\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const _this$permanentElemen = _slicedToArray(this.permanentElementMap[id], 2),\n newPermanentElement = _this$permanentElemen[1];\n\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const _this$permanentElemen2 = _slicedToArray(this.permanentElementMap[id], 1),\n currentPermanentElement = _this$permanentElemen2[0];\n\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find(element => element.content == id);\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n }\n\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element;\n}\n\nclass Renderer {\n constructor(currentSnapshot, newSnapshot, isPreview) {\n let willRender = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.promise = new Promise((resolve, reject) => this.resolvingFunctions = {\n resolve,\n reject\n });\n }\n\n get shouldRender() {\n return true;\n }\n\n prepareToRender() {\n return;\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n createScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element;\n } else {\n const createdScriptElement = document.createElement(\"script\");\n\n if (this.cspNonce) {\n createdScriptElement.nonce = this.cspNonce;\n }\n\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement;\n }\n }\n\n preservingPermanentElements(callback) {\n Bardo.preservingPermanentElements(this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n\n if (elementIsFocusable(element)) {\n element.focus();\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n }\n\n get currentElement() {\n return this.currentSnapshot.element;\n }\n\n get newElement() {\n return this.newSnapshot.element;\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n }\n\n get cspNonce() {\n var _a;\n\n return (_a = document.head.querySelector('meta[name=\"csp-nonce\"]')) === null || _a === void 0 ? void 0 : _a.getAttribute(\"content\");\n }\n\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const _ref7 of [...sourceElement.attributes]) {\n const name = _ref7.name;\n const value = _ref7.value;\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction elementIsFocusable(element) {\n return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n get shouldRender() {\n return true;\n }\n\n async render() {\n await nextAnimationFrame();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextAnimationFrame();\n this.focusFirstAutofocusableElement();\n await nextAnimationFrame();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n var _a;\n\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(this.currentElement);\n destinationRange.deleteContents();\n const frameElement = this.newElement;\n const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n this.currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n\n if (element) {\n element.scrollIntoView({\n block\n });\n return true;\n }\n }\n\n return false;\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = this.createScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\");\n }\n\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value;\n } else {\n return defaultValue;\n }\n}\n\nclass ProgressBar {\n constructor() {\n this.hiding = false;\n this.value = 0;\n this.visible = false;\n\n this.trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n };\n\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n static get defaultCSS() {\n return unindent(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n .turbo-progress-bar {\\n position: fixed;\\n display: block;\\n top: 0;\\n left: 0;\\n height: 3px;\\n background: #0076ff;\\n z-index: 9999;\\n transition:\\n width \", \"ms ease-out,\\n opacity \", \"ms \", \"ms ease-in;\\n transform: translate3d(0, 0, 0);\\n }\\n \"])), ProgressBar.animationDuration, ProgressBar.animationDuration / 2, ProgressBar.animationDuration / 2);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = \"\".concat(10 + this.value * 90, \"%\");\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n return element;\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element;\n }\n\n}\n\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n constructor() {\n super(...arguments);\n this.detailsByOuterHTML = this.children.filter(element => !elementIsNoscript(element)).map(element => elementWithoutNonce(element)).reduce((result, element) => {\n const outerHTML = element.outerHTML;\n const details = outerHTML in result ? result[outerHTML] : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return Object.assign(Object.assign({}, result), {\n [outerHTML]: Object.assign(Object.assign({}, details), {\n elements: [...details.elements, element]\n })\n });\n }, {});\n }\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML).filter(outerHTML => this.detailsByOuterHTML[outerHTML].tracked).join(\"\");\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML).filter(outerHTML => !(outerHTML in snapshot.detailsByOuterHTML)).map(outerHTML => this.detailsByOuterHTML[outerHTML]).filter(_ref8 => {\n let type = _ref8.type;\n return type == matchedType;\n }).map(_ref9 => {\n let _ref9$elements = _slicedToArray(_ref9.elements, 1),\n element = _ref9$elements[0];\n\n return element;\n });\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const _this$detailsByOuterH = this.detailsByOuterHTML[outerHTML],\n type = _this$detailsByOuterH.type,\n tracked = _this$detailsByOuterH.tracked,\n elements = _this$detailsByOuterH.elements;\n\n if (type == null && !tracked) {\n return [...result, ...elements];\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)];\n } else {\n return result;\n }\n }, []);\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null;\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const _this$detailsByOuterH2 = _slicedToArray(this.detailsByOuterHTML[outerHTML].elements, 1),\n element = _this$detailsByOuterH2[0];\n\n return elementIsMetaElementWithName(element, name) ? element : result;\n }, undefined);\n }\n\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\";\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\";\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\n\nfunction elementIsScript(element) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"script\";\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"noscript\";\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"style\" || tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\";\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element;\n}\n\nclass PageSnapshot extends Snapshot {\n constructor(element, headSnapshot) {\n super(element);\n this.headSnapshot = headSnapshot;\n }\n\n static fromHTMLString() {\n let html = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n return this.fromDocument(parseHTMLDocument(html));\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument);\n }\n\n static fromDocument(_ref10) {\n let head = _ref10.head,\n body = _ref10.body;\n return new this(body, new HeadSnapshot(head));\n }\n\n clone() {\n return new PageSnapshot(this.element.cloneNode(true), this.headSnapshot);\n }\n\n get headElement() {\n return this.headSnapshot.element;\n }\n\n get rootLocation() {\n var _a;\n\n const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\");\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\";\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\";\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\";\n }\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(\"turbo-\".concat(name));\n }\n\n}\n\nvar TimingMetric;\n\n(function (TimingMetric) {\n TimingMetric[\"visitStart\"] = \"visitStart\";\n TimingMetric[\"requestStart\"] = \"requestStart\";\n TimingMetric[\"requestEnd\"] = \"requestEnd\";\n TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\n\nvar VisitState;\n\n(function (VisitState) {\n VisitState[\"initialized\"] = \"initialized\";\n VisitState[\"started\"] = \"started\";\n VisitState[\"canceled\"] = \"canceled\";\n VisitState[\"failed\"] = \"failed\";\n VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true\n};\nvar SystemStatusCode;\n\n(function (SystemStatusCode) {\n SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\n\nclass Visit {\n constructor(delegate, location, restorationIdentifier) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n this.identifier = uuid();\n this.timingMetrics = {};\n this.followedRedirect = false;\n this.historyChanged = false;\n this.scrolled = false;\n this.snapshotCached = false;\n this.state = VisitState.initialized;\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const _Object$assign = Object.assign(Object.assign({}, defaultOptions), options),\n action = _Object$assign.action,\n historyChanged = _Object$assign.historyChanged,\n referrer = _Object$assign.referrer,\n snapshotHTML = _Object$assign.snapshotHTML,\n response = _Object$assign.response,\n visitCachedSnapshot = _Object$assign.visitCachedSnapshot,\n willRender = _Object$assign.willRender;\n\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.scrolled = !willRender;\n }\n\n get adapter() {\n return this.delegate.adapter;\n }\n\n get view() {\n return this.delegate.view;\n }\n\n get history() {\n return this.delegate.history;\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n }\n\n get silent() {\n return this.isSamePage;\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.adapter.visitCompleted(this);\n this.delegate.visitCompleted(this);\n this.followRedirect();\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n\n changeHistory() {\n var _a;\n\n if (!this.historyChanged) {\n const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n const method = this.getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse() {\n let response = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.response;\n this.response = response;\n\n if (response) {\n const statusCode = response.statusCode;\n\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const _this$response = this.response,\n statusCode = _this$response.statusCode,\n responseHTML = _this$response.responseHTML;\n this.render(async () => {\n this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender);\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML));\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot;\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML);\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n\n if (this.isSamePage) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n await this.view.renderPage(snapshot, isPreview, this.willRender);\n this.adapter.visitRendered(this);\n\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n var _a;\n\n if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: 'replace',\n response: this.response\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(request, response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const redirected = response.redirected,\n statusCode = response.statusCode;\n\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({\n statusCode: statusCode,\n responseHTML,\n redirected\n });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const redirected = response.redirected,\n statusCode = response.statusCode;\n\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({\n statusCode: statusCode,\n responseHTML,\n redirected\n });\n }\n }\n\n requestErrored(request, error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n performScroll() {\n if (!this.scrolled) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const scrollPosition = this.restorationData.scrollPosition;\n\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true;\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true;\n }\n }\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return Object.assign({}, this.timingMetrics);\n }\n\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\";\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false;\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot();\n } else {\n return this.willRender;\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot().then(snapshot => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n await new Promise(resolve => {\n this.frame = requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n this.performScroll();\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n constructor(session) {\n this.progressBar = new ProgressBar();\n\n this.showProgressBar = () => {\n this.progressBar.show();\n };\n\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n this.navigator.startVisit(location, uuid(), options);\n }\n\n visitStarted(visit) {\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.changeHistory();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload();\n\n default:\n return visit.loadResponse();\n }\n }\n\n visitRequestFinished(visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitCompleted(visit) {}\n\n pageInvalidated() {\n this.reload();\n }\n\n visitFailed(visit) {}\n\n visitRendered(visit) {}\n\n formSubmissionStarted(formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n get navigator() {\n return this.session.navigator;\n }\n\n}\n\nclass CacheObserver {\n constructor() {\n this.started = false;\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n\n removeStaleElements() {\n const staleElements = [...document.querySelectorAll('[data-turbo-cache=\"false\"]')];\n\n for (const element of staleElements) {\n element.remove();\n }\n }\n\n}\n\nclass FormSubmitObserver {\n constructor(delegate) {\n this.started = false;\n\n this.submitCaptured = () => {\n removeEventListener(\"submit\", this.submitBubbled, false);\n addEventListener(\"submit\", this.submitBubbled, false);\n };\n\n this.submitBubbled = event => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (form) {\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n\n if (method != \"dialog\" && this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n };\n\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n}\n\nclass FrameRedirector {\n constructor(element) {\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formInterceptor = new FormInterceptor(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formInterceptor.stop();\n }\n\n shouldInterceptLinkClick(element, url) {\n return this.shouldRedirect(element);\n }\n\n linkClickIntercepted(element, url) {\n const frame = this.findFrameElement(element);\n\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url);\n }\n }\n\n shouldInterceptFormSubmission(element, submitter) {\n return this.shouldSubmit(element, submitter);\n }\n\n formSubmissionIntercepted(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n\n if (frame) {\n frame.removeAttribute(\"reloadable\");\n frame.delegate.formSubmissionIntercepted(element, submitter);\n }\n }\n\n shouldSubmit(form, submitter) {\n var _a;\n\n const action = getAction(form, submitter);\n const meta = this.element.ownerDocument.querySelector(\"meta[name=\\\"turbo-root\\\"]\");\n const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n }\n\n shouldRedirect(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false;\n }\n\n findFrameElement(element, submitter) {\n const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(\"#\".concat(id, \":not([disabled])\"));\n\n if (frame instanceof FrameElement) {\n return frame;\n }\n }\n }\n\n}\n\nclass History {\n constructor(delegate) {\n this.restorationIdentifier = uuid();\n this.restorationData = {};\n this.started = false;\n this.pageLoaded = false;\n\n this.onPopState = event => {\n if (this.shouldHandlePopState()) {\n const _ref11 = event.state || {},\n turbo = _ref11.turbo;\n\n if (turbo) {\n this.location = new URL(window.location.href);\n const restorationIdentifier = turbo.restorationIdentifier;\n this.restorationIdentifier = restorationIdentifier;\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n }\n }\n };\n\n this.onPageLoad = async event => {\n await nextMicrotask();\n this.pageLoaded = true;\n };\n\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location) {\n let restorationIdentifier = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : uuid();\n const state = {\n turbo: {\n restorationIdentifier\n }\n };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {};\n }\n\n updateRestorationData(additionalData) {\n const restorationIdentifier = this.restorationIdentifier;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n }\n\n assumeControlOfScrollRestoration() {\n var _a;\n\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n shouldHandlePopState() {\n return this.pageIsLoaded();\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\";\n }\n\n}\n\nclass LinkClickObserver {\n constructor(delegate) {\n this.started = false;\n\n this.clickCaptured = () => {\n removeEventListener(\"click\", this.clickBubbled, false);\n addEventListener(\"click\", this.clickBubbled, false);\n };\n\n this.clickBubbled = event => {\n if (this.clickEventIsSignificant(event)) {\n const target = event.composedPath && event.composedPath()[0] || event.target;\n const link = this.findLinkFromClickTarget(target);\n\n if (link) {\n const location = this.getLocationForLink(link);\n\n if (this.delegate.willFollowLinkToLocation(link, location)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n };\n\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickEventIsSignificant(event) {\n return !(event.target && event.target.isContentEditable || event.defaultPrevented || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);\n }\n\n findLinkFromClickTarget(target) {\n if (target instanceof Element) {\n return target.closest(\"a[href]:not([target^=_]):not([download])\");\n }\n }\n\n getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n this.delegate.visitProposedToLocation(location, options);\n } else {\n window.location.href = location.toString();\n }\n }\n }\n\n startVisit(locatable, restorationIdentifier) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({\n referrer: this.location\n }, options));\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter;\n }\n\n get view() {\n return this.delegate.view;\n }\n\n get history() {\n return this.delegate.history;\n }\n\n formSubmissionStarted(formSubmission) {\n if (typeof this.adapter.formSubmissionStarted === 'function') {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n if (formSubmission.method != FetchMethod.get) {\n this.view.clearSnapshotCache();\n }\n\n const statusCode = fetchResponse.statusCode,\n redirected = fetchResponse.redirected;\n const action = this.getActionForFormSubmission(formSubmission);\n const visitOptions = {\n action,\n response: {\n statusCode,\n responseHTML,\n redirected\n }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot);\n } else {\n await this.view.renderPage(snapshot);\n }\n\n this.view.scrollToTop();\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n if (typeof this.adapter.formSubmissionFinished === 'function') {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === 'restore' && typeof anchor === 'undefined';\n return action !== \"replace\" && getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) && (isRestorationToTop || anchor != null && anchor !== currentAnchor);\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n get location() {\n return this.history.location;\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n\n getActionForFormSubmission(formSubmission) {\n const formElement = formSubmission.formElement,\n submitter = formSubmission.submitter;\n const action = getAttribute(\"data-turbo-action\", submitter, formElement);\n return isAction(action) ? action : \"advance\";\n }\n\n}\n\nvar PageStage;\n\n(function (PageStage) {\n PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\n\nclass PageObserver {\n constructor(delegate) {\n this.stage = PageStage.initial;\n this.started = false;\n\n this.interpretReadyState = () => {\n const readyState = this.readyState;\n\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n };\n\n this.pageWillUnload = () => {\n this.delegate.pageWillUnload();\n };\n\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n get readyState() {\n return document.readyState;\n }\n\n}\n\nclass ScrollObserver {\n constructor(delegate) {\n this.started = false;\n\n this.onScroll = () => {\n this.updatePosition({\n x: window.pageXOffset,\n y: window.pageYOffset\n });\n };\n\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n\n}\n\nclass StreamObserver {\n constructor(delegate) {\n this.sources = new Set();\n this.started = false;\n\n this.inspectFetchResponse = event => {\n const response = fetchResponseFromEvent(event);\n\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n };\n\n this.receiveMessageEvent = event => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n };\n\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source);\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(new StreamMessage(html));\n }\n\n}\n\nfunction fetchResponseFromEvent(event) {\n var _a;\n\n const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse;\n }\n}\n\nfunction fetchResponseIsStream(response) {\n var _a;\n\n const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const _document = document,\n documentElement = _document.documentElement,\n head = _document.head,\n body = _document.body;\n documentElement.replaceChild(this.newHead, head);\n documentElement.replaceChild(this.newElement, body);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n\n if (parentNode) {\n const element = this.createScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element;\n }\n\n get scriptElements() {\n return [...document.documentElement.querySelectorAll(\"script\")];\n }\n\n}\n\nclass PageRenderer extends Renderer {\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n }\n\n prepareToRender() {\n this.mergeHead();\n }\n\n async render() {\n if (this.willRender) {\n this.replaceBody();\n }\n }\n\n finishRendering() {\n super.finishRendering();\n\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot;\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot;\n }\n\n get newElement() {\n return this.newSnapshot.element;\n }\n\n mergeHead() {\n this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n this.removeCurrentHeadProvisionalElements();\n this.copyNewHeadProvisionalElements();\n }\n\n replaceBody() {\n this.preservingPermanentElements(() => {\n this.activateNewBody();\n this.assignNewBody();\n });\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n }\n\n copyNewHeadStylesheetElements() {\n for (const element of this.newHeadStylesheetElements) {\n document.head.appendChild(element);\n }\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(this.createScriptElement(element));\n }\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = this.createScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n assignNewBody() {\n if (document.body && this.newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(this.newElement);\n } else {\n document.documentElement.appendChild(this.newElement);\n }\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements;\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements;\n }\n\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\");\n }\n\n}\n\nclass SnapshotCache {\n constructor(size) {\n this.keys = [];\n this.snapshots = {};\n this.size = size;\n }\n\n has(location) {\n return toCacheKey(location) in this.snapshots;\n }\n\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot;\n }\n }\n\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot;\n }\n\n clear() {\n this.snapshots = {};\n }\n\n read(location) {\n return this.snapshots[toCacheKey(location)];\n }\n\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n\n}\n\nclass PageView extends View {\n constructor() {\n super(...arguments);\n this.snapshotCache = new SnapshotCache(10);\n this.lastRenderedLocation = new URL(location.href);\n }\n\n renderPage(snapshot) {\n let isPreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n let willRender = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n const renderer = new PageRenderer(this.snapshot, snapshot, isPreview, willRender);\n return this.render(renderer);\n }\n\n renderError(snapshot) {\n const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n return this.render(renderer);\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n\n async cacheSnapshot() {\n if (this.shouldCacheSnapshot) {\n this.delegate.viewWillCacheSnapshot();\n const snapshot = this.snapshot,\n location = this.lastRenderedLocation;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot;\n }\n }\n\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location);\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element);\n }\n\n get shouldCacheSnapshot() {\n return this.snapshot.isCacheable;\n }\n\n}\n\nclass Session {\n constructor() {\n this.navigator = new Navigator(this);\n this.history = new History(this);\n this.view = new PageView(this, document.documentElement);\n this.adapter = new BrowserAdapter(this);\n this.pageObserver = new PageObserver(this);\n this.cacheObserver = new CacheObserver();\n this.linkClickObserver = new LinkClickObserver(this);\n this.formSubmitObserver = new FormSubmitObserver(this);\n this.scrollObserver = new ScrollObserver(this);\n this.streamObserver = new StreamObserver(this);\n this.frameRedirector = new FrameRedirector(document.documentElement);\n this.drive = true;\n this.enabled = true;\n this.progressBarDelay = 500;\n this.started = false;\n }\n\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.started = true;\n this.enabled = true;\n }\n }\n\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.started = false;\n }\n }\n\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n\n visit(location) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.navigator.proposeVisit(expandURL(location), options);\n }\n\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n\n renderStreamMessage(message) {\n document.documentElement.appendChild(StreamMessage.wrap(message).fragment);\n }\n\n clearCache() {\n this.view.clearSnapshotCache();\n }\n\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n\n get location() {\n return this.history.location;\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n\n historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true\n });\n } else {\n this.adapter.pageInvalidated();\n }\n }\n\n scrollPositionChanged(position) {\n this.history.updateRestorationData({\n scrollPosition: position\n });\n }\n\n willFollowLinkToLocation(link, location) {\n return this.elementDriveEnabled(link) && locationIsVisitable(location, this.snapshot.rootLocation) && this.applicationAllowsFollowingLinkToLocation(link, location);\n }\n\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n this.convertLinkWithMethodClickToFormSubmission(link) || this.visit(location.href, {\n action\n });\n }\n\n convertLinkWithMethodClickToFormSubmission(link) {\n const linkMethod = link.getAttribute(\"data-turbo-method\");\n\n if (linkMethod) {\n const form = document.createElement(\"form\");\n form.method = linkMethod;\n form.action = link.getAttribute(\"href\") || \"undefined\";\n form.hidden = true;\n\n if (link.hasAttribute(\"data-turbo-confirm\")) {\n form.setAttribute(\"data-turbo-confirm\", link.getAttribute(\"data-turbo-confirm\"));\n }\n\n const frame = this.getTargetFrameForLink(link);\n\n if (frame) {\n form.setAttribute(\"data-turbo-frame\", frame);\n form.addEventListener(\"turbo:submit-start\", () => form.remove());\n } else {\n form.addEventListener(\"submit\", () => form.remove());\n }\n\n document.body.appendChild(form);\n return dispatch(\"submit\", {\n cancelable: true,\n target: form\n });\n } else {\n return false;\n }\n }\n\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n }\n\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n\n visitStarted(visit) {\n extendURLWithDeprecatedProperties(visit.location);\n\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n\n visitCompleted(visit) {\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action);\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n\n willSubmitForm(form, submitter) {\n const action = getAction(form, submitter);\n return this.elementDriveEnabled(form) && (!submitter || this.elementDriveEnabled(submitter)) && locationIsVisitable(expandURL(action), this.snapshot.rootLocation);\n }\n\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n\n viewWillCacheSnapshot() {\n var _a;\n\n if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n\n allowsImmediateRender(_ref12, resume) {\n let element = _ref12.element;\n const event = this.notifyApplicationBeforeRender(element, resume);\n return !event.defaultPrevented;\n }\n\n viewRenderedSnapshot(snapshot, isPreview) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender();\n }\n\n viewInvalidated() {\n this.adapter.pageInvalidated();\n }\n\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n\n applicationAllowsFollowingLinkToLocation(link, location) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location);\n return !event.defaultPrevented;\n }\n\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n\n notifyApplicationAfterClickingLinkToLocation(link, location) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: {\n url: location.href\n },\n cancelable: true\n });\n }\n\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: {\n url: location.href\n },\n cancelable: true\n });\n }\n\n notifyApplicationAfterVisitingLocation(location, action) {\n markAsBusy(document.documentElement);\n return dispatch(\"turbo:visit\", {\n detail: {\n url: location.href,\n action\n }\n });\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\");\n }\n\n notifyApplicationBeforeRender(newBody, resume) {\n return dispatch(\"turbo:before-render\", {\n detail: {\n newBody,\n resume\n },\n cancelable: true\n });\n }\n\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\");\n }\n\n notifyApplicationAfterPageLoad() {\n let timing = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n clearBusyState(document.documentElement);\n return dispatch(\"turbo:load\", {\n detail: {\n url: this.location.href,\n timing\n }\n });\n }\n\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n }));\n }\n\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", {\n target: frame\n });\n }\n\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: {\n fetchResponse\n },\n target: frame,\n cancelable: true\n });\n }\n\n elementDriveEnabled(element) {\n const container = element === null || element === void 0 ? void 0 : element.closest(\"[data-turbo]\");\n\n if (this.drive) {\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\";\n } else {\n return true;\n }\n } else {\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\";\n } else {\n return false;\n }\n }\n }\n\n getActionForLink(link) {\n const action = link.getAttribute(\"data-turbo-action\");\n return isAction(action) ? action : \"advance\";\n }\n\n getTargetFrameForLink(link) {\n const frame = link.getAttribute(\"data-turbo-frame\");\n\n if (frame) {\n return frame;\n } else {\n const container = link.closest(\"turbo-frame\");\n\n if (container) {\n return container.id;\n }\n }\n }\n\n get snapshot() {\n return this.view.snapshot;\n }\n\n}\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString();\n }\n\n }\n};\nconst session = new Session();\nconst navigator$1 = session.navigator;\n\nfunction start() {\n session.start();\n}\n\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\nfunction clearCache() {\n session.clearCache();\n}\n\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\n\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod\n});\n\nclass FrameController {\n constructor(element) {\n this.fetchResponseLoaded = fetchResponse => {};\n\n this.currentFetchRequest = null;\n\n this.resolveVisitPromise = () => {};\n\n this.connected = false;\n this.hasBeenLoaded = false;\n this.settingSourceURL = false;\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.formInterceptor = new FormInterceptor(this, this.element);\n }\n\n connect() {\n if (!this.connected) {\n this.connected = true;\n this.reloadable = false;\n\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n\n this.linkInterceptor.start();\n this.formInterceptor.start();\n this.sourceURLChanged();\n }\n }\n\n disconnect() {\n if (this.connected) {\n this.connected = false;\n this.appearanceObserver.stop();\n this.linkInterceptor.stop();\n this.formInterceptor.stop();\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL();\n }\n }\n\n sourceURLChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL();\n }\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.loadSourceURL();\n }\n }\n\n async loadSourceURL() {\n if (!this.settingSourceURL && this.enabled && this.isActive && (this.reloadable || this.sourceURL != this.currentURL)) {\n const previousURL = this.currentURL;\n this.currentURL = this.sourceURL;\n\n if (this.sourceURL) {\n try {\n this.element.loaded = this.visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.hasBeenLoaded = true;\n } catch (error) {\n this.currentURL = previousURL;\n throw error;\n }\n }\n }\n }\n\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || fetchResponse.succeeded && fetchResponse.isHTML) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n try {\n const html = await fetchResponse.responseHTML;\n\n if (html) {\n const _parseHTMLDocument = parseHTMLDocument(html),\n body = _parseHTMLDocument.body;\n\n const snapshot = new Snapshot(await this.extractForeignFrameElement(body));\n const renderer = new FrameRenderer(this.view.snapshot, snapshot, false, false);\n if (this.view.renderPromise) await this.view.renderPromise;\n await this.view.render(renderer);\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n this.fetchResponseLoaded(fetchResponse);\n }\n } catch (error) {\n console.error(error);\n this.view.invalidate();\n } finally {\n this.fetchResponseLoaded = () => {};\n }\n }\n\n elementAppearedInViewport(element) {\n this.loadSourceURL();\n }\n\n shouldInterceptLinkClick(element, url) {\n if (element.hasAttribute(\"data-turbo-method\")) {\n return false;\n } else {\n return this.shouldInterceptNavigation(element);\n }\n }\n\n linkClickIntercepted(element, url) {\n this.reloadable = true;\n this.navigateFrame(element, url);\n }\n\n shouldInterceptFormSubmission(element, submitter) {\n return this.shouldInterceptNavigation(element, submitter);\n }\n\n formSubmissionIntercepted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.reloadable = false;\n this.formSubmission = new FormSubmission(this, element, submitter);\n const fetchRequest = this.formSubmission.fetchRequest;\n this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n this.formSubmission.start();\n }\n\n prepareHeadersForRequest(headers, request) {\n headers[\"Turbo-Frame\"] = this.id;\n }\n\n requestStarted(request) {\n markAsBusy(this.element);\n }\n\n requestPreventedHandlingResponse(request, response) {\n this.resolveVisitPromise();\n }\n\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n\n requestFailedWithResponse(request, response) {\n console.error(response);\n this.resolveVisitPromise();\n }\n\n requestErrored(request, error) {\n console.error(error);\n this.resolveVisitPromise();\n }\n\n requestFinished(request) {\n clearBusyState(this.element);\n }\n\n formSubmissionStarted(_ref13) {\n let formElement = _ref13.formElement;\n markAsBusy(formElement, this.findFrameElement(formElement));\n }\n\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n this.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n frame.delegate.loadResponse(response);\n }\n\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(_ref14) {\n let formElement = _ref14.formElement;\n clearBusyState(formElement, this.findFrameElement(formElement));\n }\n\n allowsImmediateRender(snapshot, resume) {\n return true;\n }\n\n viewRenderedSnapshot(snapshot, isPreview) {}\n\n viewInvalidated() {}\n\n async visit(url) {\n var _a;\n\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n this.currentFetchRequest = request;\n return new Promise(resolve => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => {};\n\n this.currentFetchRequest = null;\n resolve();\n };\n\n request.perform();\n });\n }\n\n navigateFrame(element, url, submitter) {\n const frame = this.findFrameElement(element, submitter);\n this.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n frame.setAttribute(\"reloadable\", \"\");\n frame.src = url;\n }\n\n proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n const action = getAttribute(\"data-turbo-action\", submitter, element, frame);\n\n if (isAction(action)) {\n const _SnapshotSubstitution = new SnapshotSubstitution(frame),\n visitCachedSnapshot = _SnapshotSubstitution.visitCachedSnapshot;\n\n frame.delegate.fetchResponseLoaded = fetchResponse => {\n if (frame.src) {\n const statusCode = fetchResponse.statusCode,\n redirected = fetchResponse.redirected;\n const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n const response = {\n statusCode,\n redirected,\n responseHTML\n };\n session.visit(frame.src, {\n action,\n response,\n visitCachedSnapshot,\n willRender: false\n });\n }\n };\n }\n }\n\n findFrameElement(element, submitter) {\n var _a;\n\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n }\n\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n\n try {\n if (element = activateElement(container.querySelector(\"turbo-frame#\".concat(id)), this.currentURL)) {\n return element;\n }\n\n if (element = activateElement(container.querySelector(\"turbo-frame[src][recurse~=\".concat(id, \"]\")), this.currentURL)) {\n await element.loaded;\n return await this.extractForeignFrameElement(element);\n }\n\n console.error(\"Response has no matching element\"));\n } catch (error) {\n console.error(error);\n }\n\n return new FrameElement();\n }\n\n formActionIsVisitable(form, submitter) {\n const action = getAction(form, submitter);\n return locationIsVisitable(expandURL(action), this.rootLocation);\n }\n\n shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n return false;\n }\n\n if (!this.enabled || id == \"_top\") {\n return false;\n }\n\n if (id) {\n const frameElement = getFrameElementById(id);\n\n if (frameElement) {\n return !frameElement.disabled;\n }\n }\n\n if (!session.elementDriveEnabled(element)) {\n return false;\n }\n\n if (submitter && !session.elementDriveEnabled(submitter)) {\n return false;\n }\n\n return true;\n }\n\n get id() {\n return this.element.id;\n }\n\n get enabled() {\n return !this.element.disabled;\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src;\n }\n }\n\n get reloadable() {\n const frame = this.findFrameElement(this.element);\n return frame.hasAttribute(\"reloadable\");\n }\n\n set reloadable(value) {\n const frame = this.findFrameElement(this.element);\n\n if (value) {\n frame.setAttribute(\"reloadable\", \"\");\n } else {\n frame.removeAttribute(\"reloadable\");\n }\n }\n\n set sourceURL(sourceURL) {\n this.settingSourceURL = true;\n this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n this.currentURL = this.element.src;\n this.settingSourceURL = false;\n }\n\n get loadingStyle() {\n return this.element.loading;\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n }\n\n get isActive() {\n return this.element.isActive && this.connected;\n }\n\n get rootLocation() {\n var _a;\n\n const meta = this.element.ownerDocument.querySelector(\"meta[name=\\\"turbo-root\\\"]\");\n const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n\n}\n\nclass SnapshotSubstitution {\n constructor(element) {\n this.visitCachedSnapshot = _ref15 => {\n let element = _ref15.element;\n\n var _a;\n\n const id = this.id,\n clone = this.clone;\n (_a = element.querySelector(\"#\" + id)) === null || _a === void 0 ? void 0 : _a.replaceWith(clone);\n };\n\n this.clone = element.cloneNode(true);\n this.id = element.id;\n }\n\n}\n\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n\n if (element instanceof FrameElement) {\n return element;\n }\n }\n}\n\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(\"Matching element has a source URL which references itself\"));\n }\n\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element;\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach(e => {\n var _a;\n\n return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling);\n });\n },\n\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach(e => e.append(this.templateContent));\n },\n\n before() {\n this.targetElements.forEach(e => {\n var _a;\n\n return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e);\n });\n },\n\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach(e => e.prepend(this.templateContent));\n },\n\n remove() {\n this.targetElements.forEach(e => e.remove());\n },\n\n replace() {\n this.targetElements.forEach(e => e.replaceWith(this.templateContent));\n },\n\n update() {\n this.targetElements.forEach(e => {\n e.innerHTML = \"\";\n e.append(this.templateContent);\n });\n }\n\n};\n\nclass StreamElement extends HTMLElement {\n async connectedCallback() {\n try {\n await this.render();\n } catch (error) {\n console.error(error);\n } finally {\n this.disconnect();\n }\n }\n\n async render() {\n var _a;\n\n return (_a = this.renderPromise) !== null && _a !== void 0 ? _a : this.renderPromise = (async () => {\n if (this.dispatchEvent(this.beforeRenderEvent)) {\n await nextAnimationFrame();\n this.performAction();\n }\n })();\n }\n\n disconnect() {\n try {\n this.remove();\n } catch (_a) {}\n }\n\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach(c => c.remove());\n }\n\n get duplicateChildren() {\n var _a;\n\n const existingChildren = this.targetElements.flatMap(e => [...e.children]).filter(c => !!c.id);\n const newChildrenIds = [...((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children)].filter(c => !!c.id).map(c => c.id);\n return existingChildren.filter(c => newChildrenIds.includes(c.id));\n }\n\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n\n if (actionFunction) {\n return actionFunction;\n }\n\n this.raise(\"unknown action\");\n }\n\n this.raise(\"action attribute is missing\");\n }\n\n get targetElements() {\n if (this.target) {\n return this.targetElementsById;\n } else if (this.targets) {\n return this.targetElementsByQuery;\n } else {\n this.raise(\"target or targets attribute is missing\");\n }\n }\n\n get templateContent() {\n return this.templateElement.content.cloneNode(true);\n }\n\n get templateElement() {\n if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild;\n }\n\n this.raise(\"first child element must be a element\");\n }\n\n get action() {\n return this.getAttribute(\"action\");\n }\n\n get target() {\n return this.getAttribute(\"target\");\n }\n\n get targets() {\n return this.getAttribute(\"targets\");\n }\n\n raise(message) {\n throw new Error(\"\".concat(this.description, \": \").concat(message));\n }\n\n get description() {\n var _a, _b;\n\n return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"\";\n }\n\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true\n });\n }\n\n get targetElementsById() {\n var _a;\n\n const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n\n if (element !== null) {\n return [element];\n } else {\n return [];\n }\n }\n\n get targetElementsByQuery() {\n var _a;\n\n const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements);\n } else {\n return [];\n }\n }\n\n}\n\nFrameElement.delegateConstructor = FrameController;\ncustomElements.define(\"turbo-frame\", FrameElement);\ncustomElements.define(\"turbo-stream\", StreamElement);\n\n(() => {\n let element = document.currentScript;\n if (!element) return;\n if (element.hasAttribute(\"data-turbo-suppress-warning\")) return;\n\n while (element = element.parentElement) {\n if (element == document.body) {\n return console.warn(unindent(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral([\"\\n You are loading Turbo from a