{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack:///./node_modules/flickity/js/core.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./app/frontend/javascript/utilities/cookies.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/get-size/get-size.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:///./node_modules/flickity-as-nav-for/as-nav-for.js","webpack:///./app/frontend/javascript/controllers sync \\.js$","webpack:///./app/frontend/javascript/controllers/accordion_controller.js","webpack:///./app/frontend/javascript/controllers/homepage_splash_controller.js","webpack:///./app/frontend/javascript/controllers/modal_controller.js","webpack:///./app/frontend/javascript/controllers/recaptcha_v2_controller.js","webpack:///./app/frontend/images/favicons/apple-touch-icon.png","webpack:///./app/frontend/images/favicons/favicon-friday-16x16.png","webpack:///./app/frontend/images/favicons/favicon-friday-32x32.png","webpack:///./app/frontend/images/favicons/favicon-friday.ico","webpack:///./app/frontend/images/favicons/favicon-monday-16x16.png","webpack:///./app/frontend/images/favicons/favicon-monday-32x32.png","webpack:///./app/frontend/images/favicons/favicon-monday.ico","webpack:///./app/frontend/images/favicons/favicon-saturday-16x16.png","webpack:///./app/frontend/images/favicons/favicon-saturday-32x32.png","webpack:///./app/frontend/images/favicons/favicon-saturday.ico","webpack:///./app/frontend/images/favicons/favicon-sunday-16x16.png","webpack:///./app/frontend/images/favicons/favicon-sunday-32x32.png","webpack:///./app/frontend/images/favicons/favicon-sunday.ico","webpack:///./app/frontend/images/favicons/favicon-thursday-16x16.png","webpack:///./app/frontend/images/favicons/favicon-thursday-32x32.png","webpack:///./app/frontend/images/favicons/favicon-thursday.ico","webpack:///./app/frontend/images/favicons/favicon-tuesday-16x16.png","webpack:///./app/frontend/images/favicons/favicon-tuesday-32x32.png","webpack:///./app/frontend/images/favicons/favicon-tuesday.ico","webpack:///./app/frontend/images/favicons/favicon-wednesday-16x16.png","webpack:///./app/frontend/images/favicons/favicon-wednesday-32x32.png","webpack:///./app/frontend/images/favicons/favicon-wednesday.ico","webpack:///./app/frontend/images/favicons/favicon.ico","webpack:///./app/frontend/images/png/logo.png","webpack:///./app/frontend/javascript/lockdown_app.js","webpack:///./node_modules/timezones-ical-library/dist/mjs/index.js","webpack:///./node_modules/add-to-calendar-button/npm_dist/mjs/index.js","webpack:///./app/frontend/javascript/components/calendar_button.js","webpack:///./app/frontend/javascript/components/newsletter_signup_form.js","webpack:///./app/frontend/javascript/components/panel_fader.js","webpack:///./app/frontend/javascript/components/carousel.js","webpack:///./app/frontend/javascript/components/nav_carousel.js","webpack:///./app/frontend/javascript/magic_modules/carousel_module.js","webpack:///./app/frontend/javascript/magic_modules/lecture_playlist_module.js","webpack:///./app/frontend/javascript/magic_modules/upcoming_lecture_module.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"],"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","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","getCookie","encodedName","encodeURIComponent","cookies","cookie","startsWith","decodeURIComponent","substring","setCookie","encodedValue","events","_events","once","onceEvents","_onceEvents","off","onceListeners","getStyleSize","parseFloat","isNaN","measurements","display","innerHeight","measurement","getZeroSize","offsetWidth","offsetHeight","isBorderBox","boxSizing","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderWidth","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","styleWidth","styleHeight","cellClassName","lastCell","lastMargin","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","translateX","firstSlide","positionX","progress","position","round","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","afterGap","gap","cellShift","_wrapShiftCell","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","Unidragger","draggable","dragThreshold","getScrollPosition","pageXOffset","y","pageYOffset","touchActionValue","drag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handlePointerDown","handlePointerUp","handlePointerDone","handleDragStart","handleDragMove","handleDragEnd","handleStaticClick","handles","bindHandles","unbindHandles","toggle","bindActivePointerEvents","isTouchStart","isTouchPointer","pointerType","isFocusNode","blur","pointerDownScroll","hasDragStarted","moveVector","isTouchScrolling","dragStartPosition","pointer","previousDragX","direction","originBound","dragMoveTime","Date","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","wrap","floor","onscroll","scroll","scrollMoveX","scrollMoveY","pointerDone","startEvent","activeEvents","PointerEvent","_bindHandles","bindMethod","touchAction","handle","unbindActivePointerEvents","withPointer","pointerId","pointerIdentifier","withTouch","touch","changedTouch","changedTouches","onmousedown","pointerDown","ontouchstart","onpointerdown","cursorNodes","clickTypes","isCursorNode","nodeName","isClickType","isOkayElement","button","pointerDownPointer","pageX","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","label","disable","svg","createSVG","createElementNS","title","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","Player","autoPlay","onTick","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","timeout","unpause","pauseAutoPlayOnHover","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","insert","fragment","createDocumentFragment","appendChild","getCellsFragment","isAppend","insertCellElement","insertBefore","endCells","cellChange","prepend","minCellIndex","cellSizeChange","changedCellIndex","prevSelectedElem","lazyAttr","lazySrcAttr","lazySrcsetAttr","imgSelector","lazyLoad","handleLazyLoadComplete","onLazyLoadComplete","getCellLazyImages","cellAttr","cellSrcAttr","cellSrcsetAttr","LazyLoader","img","onComplete","flat","src","srcset","onload","complete","imagesLoaded","image","$","ImagesLoaded","onAlways","queryElem","getImages","jqDeferred","Deferred","check","images","addElementImages","elementNodeTypes","addImage","background","addElementBackgroundImages","childImgs","child","reURL","LoadingImage","Background","url","Image","exec","backgroundImage","addBackground","loadingImage","progressedCount","hasAnyBroken","onProgress","isLoaded","notify","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","crossOrigin","currentSrc","unbindEvents","makeJQueryPlugin","fn","promise","asNavFor","activateAsNavFor","deactivateAsNavFor","destroyAsNavFor","asNavForOption","setNavCompanion","companion","navCompanion","onNavCompanionSelect","navCompanionSelect","onNavStaticClick","companionCells","firstIndex","selectIndex","removeNavSelectedElements","navSelectedElements","changeNavSelectedClass","navElem","cellElement","webpackContext","req","webpackContextResolve","code","openValue","togglerTarget","checked","open","today","toDateString","wrapperTarget","move","closeButtonTarget","dataset","frame","hasCurrentCookie","close","backButton","internalFrameLinks","link","reload","with_cookie","recaptchaV2","grecaptcha","render","sitekey","siteKey","rootFontSize","App","getRootFontSize","breakpoints","breakpoint","getBreakpoint","builtInEvents","parent","throttle","debounce","eventConfig","originalEvent","emit","previousBreakpoint","currentBreakpoint","current","container","getElementById","magicModules","fontSize","Function","update","viewportWidth","entries","minViewportSize","tzlibZonesDB","tzlibZonesDetailsDB","tzlib_get_content","tzName","nameParts","tzlib_enrich_data","shortenerMap","replaceAll","tzlib_get_ical_block","jsonType","tzBlock","location","tzidLine","output","tzlib_get_offset","isoDate","isoTime","date","dateYear","getFullYear","dateMonth","getMonth","dateDay","getDate","dateHour","getHours","timezoneData","tzBreakpoints","breakpointCount","offset","hour","substr","rruleParts","rruleMonth","month","day","theCase","helperArrayWeekdays","numberDays","weekdayCount","getDay","weekdays","SU","MO","TU","WE","TH","FR","SA","occurence","actualDay","breakpointWeekday","dayIndex","tzlibZoneNames","isBrowser","isiOS","navigator","userAgent","vendor","opera","MSStream","platform","maxTouchPoints","isAndroid","isChrome","isMobile","isWebView","isProblematicWebView","atcbDefaultTarget","atcbOptions","atcbValidRecurrOptions","atcbInvalidSubscribeOptions","atcbiOSInvalidOptions","atcbStates","atcbIcon","apple","google","ical","msteams","ms365","outlookcom","yahoo","atcb","warning","checkmark","atcb_patch_config","configData","keyChanges","dateStart","dateEnd","timeStart","timeEnd","atcb_decorate_data","atcb_decorate_data_identifier","subscribe","atcb_decorate_data_subscribe","newOptions","optionLabels","cleanOption","optionName","optionLabel","recurrence","recurrence_until","atcb_decorate_data_options","rruleObj","rule","UNTIL","recurrence_count","COUNT","recurrence_byDay","BYDAY","recurrence_byMonth","BYMONTH","recurrence_byMonthDay","BYMONTHDAY","recurrence_interval","INTERVAL","recurrence_frequency","FREQ","recurrence_weekstart","endTime","atcb_decorate_data_rrule","richData","atcb_decorate_data_rich_data","atcb_decorate_data_checkmark","atcb_decorate_data_background","mindScrolling","atcb_decorate_data_mind_scrolling","branding","atcb_decorate_data_branding","dates","atcb_decorate_data_description","status","sequence","organizer","availability","uid","atcb_generate_uuid","timestamp","atcb_decorate_data_extend","atcb_decorate_data_meta","timeZone","cleanedUpDates","atcb_date_cleanup","startTime","startTimestamp","startDate","atcb_date_calculation","endDate","now","created","atcb_format_datetime","updated","atcb_decorate_data_dates","language","rtl","atcb_decorate_data_i18n","listStyle","buttonStyle","sizes","sizeParts","lightMode","prefersDarkScheme","matchMedia","iconButton","iconList","iconModal","icons","iconsConfig","textLabelButton","textLabelList","textLabels","textLabelsConfig","atcb_decorate_data_style","description","descriptionHtmlFree","atcb_rewrite_html_elements","dateTimeData","point","tmpSplitStartDate","timeStr","tmpDate","Intl","DateTimeFormat","resolvedOptions","getTime","dateString","todayString","getUTCFullYear","getUTCMonth","getUTCDate","dateStringParts","dateParts","newDate","UTC","setDate","toISOString","atcb_check_required","requiredMultiFieldFlex","every","field","atcb_validate","msgPrefix","atcb_validate_icsFile","icsFile","atcb_validate_subscribe","atcb_validate_created","atcb_validate_updated","atcb_validate_options","msgSuffix","atcb_validate_status","atcb_validate_availability","atcb_validate_organizer","atcb_validate_uid","atcb_validate_sequence","atcb_validate_timezone","atcb_validate_datetime","atcb_validate_date_blocks","atcb_validate_rrule","icsFileStr","atcb_secure_url","organizerParts","email","mx","atcb_validEmail","validTimeZones","namesArr","key2","value2","key3","tzlib_get_timezones","timeParts","atcb_toggle","keyboardTrigger","generatedButton","atcb_open","atcb_close","list","atcb_generate_dropdown_list","listWrapper","bgOverlay","atcb_generate_bg_overlay","atcb_create_atcbl","atcb_set_sizes","atcb_manage_body_scroll","positionWrapper","top","bottom","atcb_position_list","atcb_set_fullsize","firstChild","allModals","nextModal","focusEl","availableButtons","getElementsByTagName","newFocusEl","el","atcb_generate_label","icon","text","oneOption","atcb_debounce_leading","atcb_debounce","atcb_generate_links","atcb_generate_label_content","defaultTriggerText","atcb_translate_hook","iconEl","innerHTML","textEl","atcb_generate_button","schemaEl","schemaContentMulti","schemaContentFull","schemaContent","formattedDate","atcb_generate_time","duration","atcb_generate_rich_data_recurrence","end","imageData","atcb_generate_rich_data","buttonTriggerWrapper","buttonTrigger","atcb_generate_date_button","buttonDropdownAnchor","btnCheck","inline","schemaRecurrenceContent","repeatFrequency","byDayString","byDays","helperMap","byMonthString","byMonthDayString","optionsList","listCount","optionItem","optionNumber","darken","fingerMoved","passive","atcb_create_modal","headline","buttons","subEvents","modalWrapper","modalCount","modalNr","parentButton","modal","modalIcon","modalHeadline","modalContent","modalsubEventsContent","modalSubEventButton","modalButtons","modalButton","href","primary","atcb_subscribe_yahoo_modal_switch","atcb_set_fully_successful","subEvent","fullTimeInfo","startDateInfo","endDateInfo","timeZoneInfoStart","timeZoneInfoEnd","formattedTimeStart","formattedTimeEnd","allday","timeString","timeZoneInfoStringStart","timeZoneInfoStringEnd","formatOptionsStart","get_format_options","formatOptionsEnd","toLocaleDateString","DateLong","DateShort","toLocaleString","DateTimeShort","toLocaleTimeString","Time","DateTimeLong","hoverText","cancelledInfo","btnLeft","btnDay","btnMonth","btnRight","btnDetails","btnHeadline","btnLocation","fontWeight","color","btnLocationIcon","btnLocationText","btnDateTime","btnDateTimeIcon","btnDateTimeText","recurSign","btnHover","timeZoneInfo","year","minute","hourCycle","multiDateModal","atcb_generate_subscribe_links","atcb_generate_multidate_links","atcb_generate_ical","atcb_generate_google","atcb_generate_msteams","atcb_generate_microsoft","atcb_generate_yahoo","subEventButton","theSubEvent","individualButtons","adjustedFileUrl","atcb_open_cal_url","fileUrl","atcb_subscribe_google","atcb_subscribe_microsoft","atcb_copy_to_clipboard","calName","urlParts","baseUrl","tmpDataDescription","availabilityPart","basePath","locationString","filename","atcb_determine_ical_filename","givenIcsFile","atcb_save_file","ics_lines","usedTimeZones","loopStart","loopEnd","timeAddon","timeZoneBlock","transpVal","dataUrl","atcb_ical_copy_note","filenameSuffix","iCalFileName","filenamePart","pop","file","save","rel","download","evt","MouseEvent","view","URL","webkitURL","revokeObjectURL","targetCal","addTimeZoneOffset","newStartDate","newEndDate","durationMS","durationHours","durationMinutes","durationString","offsetStart","offsetEnd","formattedOffsetStart","formattedOffsetEnd","calcOffsetStart","calcOffsetEnd","setTime","datetime","includeTime","removeZ","regex","atcb_secure_content","isJSON","toClean","cleanedUp","throwError","p1","urlText","blockUpwards","anchorSet","originalTrigger","triggerDim","getBoundingClientRect","listDim","btnDim","viewportHeight","clientHeight","posWrapper","minWidth","scrollY","atcbL","modalObj","modalDim","setProperty","crypto","getRandomValues","Uint8Array","dataString","tmpInput","editable","contentEditable","readOnly","range","createRange","selectNodeContents","selection","getSelection","removeAllRanges","addRange","setSelectionRange","clipboard","writeText","execCommand","func","timer","atcb_throttle","_this3","delay","later","remaining","i18nStrings","en","Close","Cancel","de","es","pt","fr","nl","tr","zh","ar","hi","pl","no","fi","sv","cs","ja","it","ko","vi","searchKey","customLabels","atcb_translate","atcbInitialInit","atcb_update_state_management","singleDates","atcb_init_log_msg","atcb_get_pro_data","proKey","atcb_set_global_event_listener","targetFocus","currFocusOption","optionListCount","activeOverlay","activeButton","activeList","CalendarButton","atcButtons","btnIDs","atcButtonsInitialized","atcbInputData","atcb_init","innerText","calendarButtons","INPUT_SCREEN","ERROR_SCREEN","SUCCESS_SCREEN","NewsletterSignupForm","root","form","emailInput","screens","errorMessage","screen","apiEndpointBase","ajax","serialize","dataType","contentType","res","success","handleSuccess","handleReset","msg","previousState","renderScreenState","renderErrorMessageState","previousScreen","nextScreen","endFadeInHandler","endFadeOutHandler","newsletterSignupForms","PanelFader","frontPanel","backPanel","accessibleAnnouncer","videoThumbnailLink","handleFade","makeAccessible","app","ariaHidden","opacity","zIndex","visibility","click","ariaLive","panelFaders","Carousel","flickity","currentSlide","previousSlide","carouselElement","caption","makeCarousel","handleChange","require","NavCarousel","navCarouselElement","CarouselModule","carouselModules","LecturePlaylistModule","lecturePlaylistModules","UpcomingLectureModule","dateSpan","countdownDate","countdown","future","h","calculateTime","setTimeText","setInterval","upcomingLectureModules","Stimulus","_templateObject","_templateObject2","_taggedTemplateLiteral","strings","raw","freeze","logicalName","identifierForContextKey","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","definitionsFromContext","customElements","polyfillWrapFlushCallback","BuiltInHTMLElement","wrapperForTheName","raise","errorConstructor","requestSubmit","submitter","DOMException","validateSubmitter","removeChild","HTMLFormElement","submittersByForm","clickCaptured","candidate","findSubmitterFromClickTarget","FrameLoadingStyle","FetchMethod","FormSubmissionState","FormEnctype","TimingMetric","VisitState","SubmitEvent","FrameElement","super","loaded","delegateConstructor","observedAttributes","connectedCallback","disconnectedCallback","attributeChangedCallback","loadingStyleChanged","sourceURLChanged","disabledChanged","loading","lazy","eager","frameLoadingStyleFromString","disabled","autoscroll","isLoading","ownerDocument","isPreview","_b","expandURL","locatable","baseURI","getAnchor","anchorMatch","hash","getAction","getExtension","pathname","getPathComponents","getLastPathComponent","isPrefixedBy","baseURL","origin","endsWith","getPrefix","locationIsVisitable","rootLocation","getRequestURL","anchor","toCacheKey","FetchResponse","response","succeeded","ok","failed","clientError","statusCode","serverError","redirected","isHTML","header","responseText","clone","responseHTML","headers","nextAnimationFrame","parseHTMLDocument","html","DOMParser","parseFromString","unindent","lines","interpolate","indent","line","uuid","random","markAsBusy","localName","clearBusyState","FetchRequest","URLSearchParams","abortController","AbortController","resolveRequestPromise","defaultHeaders","searchParams","cancel","abort","fetchOptions","prepareHeadersForRequest","allowRequestToBeIntercepted","requestStarted","receive","requestErrored","requestFinished","fetchResponse","defaultPrevented","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","credentials","redirect","isIdempotent","signal","abortSignal","referrer","requestInterception","resume","AppearanceObserver","intersect","lastEntry","isIntersecting","elementAppearedInViewport","intersectionObserver","IntersectionObserver","unobserve","StreamMessage","templateElement","foreignElements","importNode","templateChildren","streamElements","FormSubmission","formElement","mustRedirect","initialized","formData","FormData","buildFormData","File","search","mergeFormDataEntries","fetchRequest","post","put","patch","fetchMethodFromString","formElementAction","enctype","urlEncoded","stringFormData","encoding","multipart","plain","formEnctypeFromString","confirmationMessage","needsConfirmation","_FormSubmissionState","requesting","confirmMethod","perform","_FormSubmissionState2","stopping","stopped","request","cookieName","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","scrollTo","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","reject","resolvingFunctions","createScriptElement","createdScriptElement","cspNonce","nonce","destinationElement","sourceElement","copyElementAttributes","preservingPermanentElements","bardo","enter","leave","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","permanentElement","placeholder","createPlaceholderForPermanentElement","replaceWith","cloneNode","getPlaceholderById","placeholders","focusFirstAutofocusableElement","connectedSnapshot","elementIsFocusable","currentElement","newElement","FrameRenderer","loadFrameElement","scrollFrameIntoView","activateScriptElements","destinationRange","deleteContents","frameElement","sourceRange","extractContents","firstElementChild","block","inertScriptElement","newScriptElements","activatedScriptElement","ProgressBar","hiding","visible","trickle","setValue","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","installStylesheetElement","defaultCSS","animationDuration","show","installProgressElement","startTrickling","hide","fadeProgressElement","uninstallProgressElement","stopTrickling","trickleInterval","clearInterval","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","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","scrollPosition","metric","getTimingMetrics","replaceState","pushState","then","cancelAnimationFrame","BrowserAdapter","session","progressBar","showProgressBar","startVisit","visit","showVisitProgressBarAfterDelay","timeoutFailure","hideVisitProgressBar","pageInvalidated","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","progressBarDelay","formProgressBarTimeout","CacheObserver","removeStaleElements","staleElements","FormSubmitObserver","submitCaptured","willSubmitForm","formSubmitted","FrameRedirector","linkInterceptor","formInterceptor","shouldRedirect","findFrameElement","shouldSubmit","meta","History","pageLoaded","onPopState","shouldHandlePopState","turbo","historyPoppedToLocationWithRestorationIdentifier","onPageLoad","updateRestorationData","additionalData","assumeControlOfScrollRestoration","previousScrollRestoration","scrollRestoration","relinquishControlOfScrollRestoration","pageIsLoaded","LinkClickObserver","clickEventIsSignificant","composedPath","findLinkFromClickTarget","getLocationForLink","willFollowLinkToLocation","followedLinkToLocation","isContentEditable","which","altKey","ctrlKey","metaKey","shiftKey","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","sources","inspectFetchResponse","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageEvent","receiveMessageHTML","connectStreamSource","streamSourceIsConnected","disconnectStreamSource","receivedMessageFromStream","ErrorRenderer","replaceHeadAndBody","_document","replaceChild","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","unshift","PageView","snapshotCache","shouldCacheSnapshot","viewWillCacheSnapshot","cachedSnapshot","fromElement","extendURLWithDeprecatedProperties","deprecatedLocationPropertyDescriptors","absoluteURL","pageObserver","cacheObserver","linkClickObserver","formSubmitObserver","scrollObserver","streamObserver","frameRedirector","drive","enabled","registerAdapter","renderStreamMessage","clearCache","setProgressBarDelay","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","_ref15","getFrameElementById","activateElement","currentURL","StreamActions","after","targetElements","templateContent","nextSibling","removeDuplicateTargetChildren","before","StreamElement","beforeRenderEvent","performAction","duplicateChildren","existingChildren","flatMap","newChildrenIds","actionFunction","targetElementsById","targetElementsByQuery","HTMLTemplateElement","fetchResponseLoaded","currentFetchRequest","resolveVisitPromise","connected","hasBeenLoaded","settingSourceURL","appearanceObserver","reloadable","loadingStyle","loadSourceURL","sourceURL","previousURL","extractForeignFrameElement","shouldInterceptNavigation","navigateFrame","proposeVisitIfNavigatedWithAction","_ref14","CSS","escape","formActionIsVisitable","define","currentScript"],"mappings":"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","file":"js/application-510257eb9921af239bc5.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://d2q7yiqiwidxbd.cloudfront.net/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 50);\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});","/**\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 * Retrieves the value of a cookie with the specified name.\n *\n * @param {string} name - The name of the cookie to retrieve.\n * @returns {string|null} The value of the cookie, or null if the cookie is not found.\n */\nexport const getCookie = (name) => {\n const encodedName = encodeURIComponent(name);\n const cookies = document.cookie.split(\";\");\n\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n\n if (cookie.startsWith(encodedName + \"=\")) {\n const value = decodeURIComponent(cookie.substring(encodedName.length + 1));\n return value;\n }\n }\n\n return null;\n};\n\n/**\n * Set a new cookie with the given name, value, and expiration in days.\n * @param {string} name - The name of the cookie.\n * @param {string} value - The value to set for the cookie. If string, assume that it is a date string.\n */\nexport const setCookie = (name, value) => {\n const encodedName = encodeURIComponent(name);\n const encodedValue = encodeURIComponent(value);\n\n document.cookie = `${encodedName}=${encodedValue}; path=/; max-age=31536000;`;\n};\n\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}","/**\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});","// 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});","/*!\n * Flickity asNavFor v3.0.0\n * enable asNavFor for Flickity\n */\n(function (window, factory) {\n // universal module definition\n if (typeof module == 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('flickity'), require('fizzy-ui-utils'));\n } else {\n // browser global\n window.Flickity = factory(window.Flickity, window.fizzyUIUtils);\n }\n})(window, function factory(Flickity, utils) {\n // -------------------------- asNavFor prototype -------------------------- //\n // Flickity.defaults.asNavFor = null;\n Flickity.create.asNavFor = function () {\n this.on('activate', this.activateAsNavFor);\n this.on('deactivate', this.deactivateAsNavFor);\n this.on('destroy', this.destroyAsNavFor);\n let asNavForOption = this.options.asNavFor;\n if (!asNavForOption) return; // HACK do async, give time for other flickity to be initalized\n\n setTimeout(() => {\n this.setNavCompanion(asNavForOption);\n });\n };\n\n let proto = Flickity.prototype;\n\n proto.setNavCompanion = function (elem) {\n elem = utils.getQueryElement(elem);\n let companion = Flickity.data(elem); // stop if no companion or companion is self\n\n if (!companion || companion === this) return;\n this.navCompanion = companion; // companion select\n\n this.onNavCompanionSelect = () => {\n this.navCompanionSelect();\n };\n\n companion.on('select', this.onNavCompanionSelect); // click\n\n this.on('staticClick', this.onNavStaticClick);\n this.navCompanionSelect(true);\n };\n\n proto.navCompanionSelect = function (isInstant) {\n // wait for companion & selectedCells first. #8\n let companionCells = this.navCompanion && this.navCompanion.selectedCells;\n if (!companionCells) return; // select slide that matches first cell of slide\n\n let selectedCell = companionCells[0];\n let firstIndex = this.navCompanion.cells.indexOf(selectedCell);\n let lastIndex = firstIndex + companionCells.length - 1;\n let selectIndex = Math.floor(lerp(firstIndex, lastIndex, this.navCompanion.cellAlign));\n this.selectCell(selectIndex, false, isInstant); // set nav selected class\n\n this.removeNavSelectedElements(); // stop if companion has more cells than this one\n\n if (selectIndex >= this.cells.length) return;\n let selectedCells = this.cells.slice(firstIndex, lastIndex + 1);\n this.navSelectedElements = selectedCells.map(cell => cell.element);\n this.changeNavSelectedClass('add');\n };\n\n function lerp(a, b, t) {\n return (b - a) * t + a;\n }\n\n proto.changeNavSelectedClass = function (method) {\n this.navSelectedElements.forEach(function (navElem) {\n navElem.classList[method]('is-nav-selected');\n });\n };\n\n proto.activateAsNavFor = function () {\n this.navCompanionSelect(true);\n };\n\n proto.removeNavSelectedElements = function () {\n if (!this.navSelectedElements) return;\n this.changeNavSelectedClass('remove');\n delete this.navSelectedElements;\n };\n\n proto.onNavStaticClick = function (event, pointer, cellElement, cellIndex) {\n if (typeof cellIndex == 'number') {\n this.navCompanion.selectCell(cellIndex);\n }\n };\n\n proto.deactivateAsNavFor = function () {\n this.removeNavSelectedElements();\n };\n\n proto.destroyAsNavFor = function () {\n if (!this.navCompanion) return;\n this.navCompanion.off('select', this.onNavCompanionSelect);\n this.off('staticClick', this.onNavStaticClick);\n delete this.navCompanion;\n }; // ----- ----- //\n\n\n return Flickity;\n});","var map = {\n\t\"./accordion_controller.js\": 22,\n\t\"./homepage_splash_controller.js\": 23,\n\t\"./modal_controller.js\": 24,\n\t\"./recaptcha_v2_controller.js\": 25\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 = 21;","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"toggler\"];\n static values = { open: Boolean };\n\n toggle() {\n this.openValue ? this.element.classList.remove(\"accordion--open\") : this.element.classList.add(\"accordion--open\");\n this.togglerTarget.attributes.checked ? this.togglerTarget.removeAttribute(\"checked\") : this.togglerTarget.setAttribute(\"checked\", \"true\");\n this.openValue = this.openValue === true ? false : true;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport * as cookies from \"../utilities/cookies.js\";\n\n/**\n * This controller activates the homepage animation after a delay.\n * Connects to data-controller=\"homepage-splash\"\n*/\nexport default class extends Controller {\n static targets = [\"wrapper\"];\n today = new Date().toDateString();\n\n /**\n * The animation should only ever run once per day, after the homepage popup has been dismissed.\n * Thus, if the \"homepage_popup_dismissed\" cookie is not set to today's date, the animation should run.\n */\n connect() {\n // If homepage modal doesn't exist, we aren't using it.\n // Trigger move and set cookie so animation doesn't run again.\n if (!document.querySelector(\".modal\")) {\n if (cookies.getCookie(\"homepage_popup_dismissed\") !== this.today) {\n this.wrapperTarget.classList.remove(\"homepage-has-moved\");\n this.move();\n cookies.setCookie(\"homepage_popup_dismissed\", this.today);\n }\n }\n else {\n if (cookies.getCookie(\"homepage_popup_dismissed\") !== this.today) {\n this.wrapperTarget.classList.remove(\"homepage-has-moved\");\n }\n }\n }\n\n /**\n * This is activated by the homepage popup's \"close\" button, but can be called from anywhere.\n * That close button also sets a cookie with today's date, so the animation will not run again until tomorrow.\n */\n move() {\n setTimeout(() => {\n this.wrapperTarget.classList.add(\"homepage-has-moved\");\n }, 1200);\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport * as cookies from \"../utilities/cookies.js\";\n\n/**\n * General-purpose modal controller.\n * Connects to data-controller=\"modal\"\n *\n * properties:\n * @property {string} today - Today's date in the format \"Mon Jan 01 2021\".\n * @property {string} [cookie] - The name of the cookie to set when the modal is closed. Pass in the cookie name from the view as, e.g. local_assigns[:cookie] = \"homepage_popup_dismissed\".\n *\n * methods:\n * @function connect - Connects to data-controller=\"modal\"\n * @function setCookie - When the modal is closed, sets a cookie with today's date. Only when cookie is specified.\n * @function back - Reloads the wrapper element.\n * @function close - Removes the modal from the DOM and sets a cookie with today's date\n * @param {boolean} [with_cookie=true] - Whether or not to set the cookie. Defaults to true.\n * @function hasCurrentCookie - Checks if the cookie exists and is set to today's date.\n*/\nexport default class extends Controller {\n static targets = [\"closeButton\"];\n today = new Date().toDateString();\n cookie = this.closeButtonTarget.dataset.cookie;\n\n /**\n * @property {HTMLElement} frame - The wrapper element that contains the modal.\n * @property {HTMLElement} backButton - The back button element.\n * @property {HTMLElement} internalFrameLinks - The links inside the modal that should not open in a new tab.\n */\n connect() {\n this.frame = this.element.parentElement; // This needs to be initialized first so that we can remove everything from the DOM if the modal isn't needed.\n document.body.classList.add(\"modal-open\");\n\n if ( !this.hasCurrentCookie() ) {\n this.element.classList.remove(\"hidden\");\n } else {\n this.close(false);\n }\n\n // The below code is not related to the cookie functionality, but is necessary for the modal to work.\n this.backButton = this.element.querySelector(\".modal__back\");\n this.internalFrameLinks = this.element.querySelectorAll(\"a[data-turbo-frame='_self']\");\n\n if (this.backButton && this.internalFrameLinks) {\n this.internalFrameLinks.forEach((link) => {\n link.addEventListener(\"click\", (e) => {\n this.backButton.classList.remove(\"js-hidden\");\n });\n });\n }\n }\n\n setCookie() {\n if (this.cookie) {\n cookies.setCookie(this.cookie, this.today);\n }\n }\n\n back() {\n this.frame.reload();\n }\n\n close(with_cookie = true) {\n this.frame.removeAttribute(\"src\");\n this.element.remove();\n document.body.classList.remove(\"modal-open\");\n if (with_cookie) {\n this.setCookie();\n }\n }\n\n hasCurrentCookie() {\n return this.cookie && cookies.getCookie(this.cookie) === this.today;\n }\n}\n","\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { siteKey: String }\n\n initialize() {\n window.recaptchaV2 = this;\n this.element.setAttribute(\"id\", this.id)\n try {\n grecaptcha.render(this.id, { sitekey: this.siteKey } )\n } catch (e) {\n console.error(\"Recaptcha failed to initialize\")\n }\n }\n\n get id() {\n return this.data.get('id') || \"recaptchaV2\"\n }\n\n get siteKey() {\n return this.data.get('site-key');\n }\n}","module.exports = __webpack_public_path__ + \"media/images/favicons/apple-touch-icon-340c3ebcf274156a85a5fdd997e0f26c.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-friday-16x16-20d3c181b9880bee12fc9264c394fb1d.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-friday-32x32-d06150db61f74c13674014b64b901ae0.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-friday-86d78ff07d45458d17051a1c40aa6f9d.ico\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-monday-16x16-67049492c4d25119cd9f7bf65ceaa7be.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-monday-32x32-3aa1eb3bd329bfb8109121586a33f8a2.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-monday-24cd60da14fd34c351e6ed966114a68f.ico\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-saturday-16x16-1fa335be6b633f76c23f9f77a2bb6bab.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-saturday-32x32-65650c138337dc8b939a95f834d497b9.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-saturday-fd2d3c7e7dab86819914d5836bb1f81e.ico\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-sunday-16x16-0ecc67f934b797b2462b4692e40a90f1.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-sunday-32x32-fa19830546ae1eca10d64d679fc17add.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-sunday-21cfe686ae6071e3d7adde6db90fca18.ico\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-thursday-16x16-29e0892a29569ff9ee358df413d2cfe1.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-thursday-32x32-5e838008957fac31a6b5f579ee6b189e.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-thursday-c2ea7cc316e1722e4ae60b13a3edbac8.ico\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-tuesday-16x16-2decfbf205c4b873ebd61922cbc0477e.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-tuesday-32x32-9640f1d4c8fdee0a3459eba4dd508b75.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-tuesday-548da0b353713aa063bb3d7e0bddf57d.ico\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-wednesday-16x16-86bf58c4679e21e5259929d135470ac5.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-wednesday-32x32-73fc4e3f4397b46fc2859a5a416e3990.png\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-wednesday-93d144fe0ca97a9234b9f17ab9144ceb.ico\";","module.exports = __webpack_public_path__ + \"media/images/favicons/favicon-5031ac74dc285848117d4dff60031a85.ico\";","module.exports = __webpack_public_path__ + \"media/images/png/logo-b8a7182206c248c18834b12366c18723.png\";","class App {\n constructor() {\n this.rootFontSize = App.getRootFontSize();\n\n // NOTE: breakpoints in rem units\n // NOTE: MAKE THIS MATCH YOUR SCSS BREAKPOINTS\n // NOTE: this must be largest to smallest for isMobile() to work. Needs fix.\n this.breakpoints = {\n \"xxl\": 87.5,\n \"xl\": 75,\n \"lg\": 62,\n \"md\": 48,\n \"sm\": 36,\n \"xs\": 0,\n };\n\n // Initial state\n this.state = {\n breakpoint: this.getBreakpoint(),\n };\n\n // Out-of-the-box events\n // NOTE: turbo:* events won't fire unless Turbo is enabled\n const builtInEvents = [\n { parent: document, type: \"turbo:load\" },\n { parent: document, type: \"turbo:visit\" },\n { parent: document, type: \"turbo:before-visit\" },\n { parent: document, type: \"turbo:before-render\" },\n { parent: document, type: \"turbo:before-cache\" },\n { parent: document, type: \"turbo:frame-render\" },\n { parent: document, type: \"DOMContentLoaded\" },\n { parent: document, type: \"focusin\" },\n { parent: document, type: \"focusout\" },\n { parent: document, type: \"mouseenter\" },\n { parent: document, type: \"mouseleave\" },\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: \"page-load\" },\n { parent: window, type: \"popstate\" },\n { parent: document, type: \"economy:magic_module_updated\" },\n { parent: document, type: \"economy:magic_module_order_updated\" },\n { parent: document, type: \"economy:magic_module_edit\" },\n ];\n\n // Build standardized events object\n this.events = []\n\n // Attach a listener for each registered event type,\n // optionally debouncing the handlers.\n builtInEvents.forEach((eventConfig) => {\n let executeAllHandlers = (originalEvent) => {\n this.emit(eventConfig.type, originalEvent);\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.emit(\"breakpoint\", {\n previous: previousBreakpoint,\n current: currentBreakpoint,\n });\n }\n },\n });\n\n this.addEventListener(\"turbo:load\", () => {\n this.emit(\"page-load\", {\n target: document.body,\n originalEvent: \"turbo:load\"\n });\n });\n\n $(window).on(\"economy:magic_module_updated\", (e) => {\n this.emit(\"page-load\", {\n target: e.target,\n originalEvent: \"economy:magic_module_updated\"\n });\n\n this.emit(\"economy:magic_module_updated\", {\n target: e.target,\n });\n });\n\n $(window).on(\"economy:magic_module_order_updated\", () => {\n const container = document.getElementById(\"magic-modules\");\n this.emit(\"economy:magic_module_order_updated\", {\n target: container,\n magicModules: container.querySelectorAll(\".mm\"),\n });\n });\n\n $(window).on(\"economy:init:fields\", (e) => {\n this.emit(\"economy:magic_module_edit\", {\n target: e.target,\n });\n });\n\n this.addEventListener('main-nav:load', (e) => {\n this.emit(\"page-load\", e);\n });\n\n // Turbo Frame modal events\n this.addEventListener(\"turbo:frame-render\", (e) => {\n if (e.target.id == \"modal\") {\n document.body.classList.add(\"modal-open\");\n }\n });\n }\n\n addEventListener(type, e) {\n if (!this.events[type]) {\n this.events[type] = {};\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 emit(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\";\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}\n\nexport default new App();\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/*!\n * @preserve\n *\n * ++++++++++++++++++++++++++++++++++++++\n * Add to Calendar TimeZones iCal Library\n * ++++++++++++++++++++++++++++++++++++++\n *\n * Version: 1.6.0\n * Creator: Jens Kuerschner (https://jenskuerschner.de)\n * Project: https://github.com/add2cal/timezones-ical-library\n * License: Apache-2.0\n *\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst tzlibVersion = '1.6.0';\nconst tzlibZonesDB = {\n \"Africa\": {\n \"Abidjan\": [\"\", 0],\n \"Accra\": [\"Africa/Abidjan\", 0],\n \"Addis_Ababa\": [\"Africa/Nairobi\", 1],\n \"Algiers\": [\"\", 2],\n \"Asmara\": [\"Africa/Nairobi\", 1],\n \"Asmera\": [\"Africa/Nairobi\", 1],\n \"Bamako\": [\"Africa/Abidjan\", 0],\n \"Bangui\": [\"Africa/Lagos\", 3],\n \"Banjul\": [\"Africa/Abidjan\", 0],\n \"Bissau\": [\"\", 0],\n \"Blantyre\": [\"Africa/Maputo\", 4],\n \"Brazzaville\": [\"Africa/Lagos\", 3],\n \"Bujumbura\": [\"Africa/Maputo\", 4],\n \"Cairo\": [\"\", 5],\n \"Casablanca\": [\"\", 6],\n \"Ceuta\": [\"\", 7],\n \"Conakry\": [\"Africa/Abidjan\", 0],\n \"Dakar\": [\"Africa/Abidjan\", 0],\n \"Dar_es_Salaam\": [\"Africa/Nairobi\", 1],\n \"Djibouti\": [\"Africa/Nairobi\", 1],\n \"Douala\": [\"Africa/Lagos\", 3],\n \"El_Aaiun\": [\"\", 6],\n \"Freetown\": [\"Africa/Abidjan\", 0],\n \"Gaborone\": [\"Africa/Maputo\", 4],\n \"Harare\": [\"Africa/Maputo\", 4],\n \"Johannesburg\": [\"\", 8],\n \"Juba\": [\"\", 4],\n \"Kampala\": [\"Africa/Nairobi\", 1],\n \"Khartoum\": [\"\", 4],\n \"Kigali\": [\"Africa/Maputo\", 4],\n \"Kinshasa\": [\"Africa/Lagos\", 3],\n \"Lagos\": [\"\", 3],\n \"Libreville\": [\"Africa/Lagos\", 3],\n \"Lome\": [\"Africa/Abidjan\", 0],\n \"Luanda\": [\"Africa/Lagos\", 3],\n \"Lubumbashi\": [\"Africa/Maputo\", 4],\n \"Lusaka\": [\"Africa/Maputo\", 4],\n \"Malabo\": [\"Africa/Lagos\", 3],\n \"Maputo\": [\"\", 4],\n \"Maseru\": [\"Africa/Johannesburg\", 8],\n \"Mbabane\": [\"Africa/Johannesburg\", 8],\n \"Mogadishu\": [\"Africa/Nairobi\", 1],\n \"Monrovia\": [\"\", 0],\n \"Nairobi\": [\"\", 1],\n \"Ndjamena\": [\"\", 3],\n \"Niamey\": [\"Africa/Lagos\", 3],\n \"Nouakchott\": [\"Africa/Abidjan\", 0],\n \"Ouagadougou\": [\"Africa/Abidjan\", 0],\n \"Porto-Novo\": [\"Africa/Lagos\", 3],\n \"Sao_Tome\": [\"\", 0],\n \"Timbuktu\": [\"Africa/Abidjan\", 0],\n \"Tripoli\": [\"\", 5],\n \"Tunis\": [\"\", 2],\n \"Windhoek\": [\"\", 4]\n },\n \"America\": {\n \"Adak\": [\"\", 9],\n \"Anchorage\": [\"\", 10],\n \"Anguilla\": [\"America/Puerto_Rico\", 11],\n \"Antigua\": [\"America/Puerto_Rico\", 11],\n \"Araguaina\": [\"\", 12],\n \"Argentina\": {\n \"Buenos_Aires\": [\"\", 12],\n \"Catamarca\": [\"\", 12],\n \"ComodRivadavia\": [\"America/Argentina/Catamarca\", 12],\n \"Cordoba\": [\"\", 12],\n \"Jujuy\": [\"\", 12],\n \"La_Rioja\": [\"\", 12],\n \"Mendoza\": [\"\", 12],\n \"Rio_Gallegos\": [\"\", 12],\n \"Salta\": [\"\", 12],\n \"San_Juan\": [\"\", 12],\n \"San_Luis\": [\"\", 12],\n \"Tucuman\": [\"\", 12],\n \"Ushuaia\": [\"\", 12]\n },\n \"Aruba\": [\"America/Puerto_Rico\", 11],\n \"Asuncion\": [\"\", 13],\n \"Atikokan\": [\"America/Panama\", 14],\n \"Atka\": [\"America/Adak\", 9],\n \"Bahia_Banderas\": [\"\", 15],\n \"Bahia\": [\"\", 12],\n \"Barbados\": [\"\", 11],\n \"Belem\": [\"\", 12],\n \"Belize\": [\"\", 15],\n \"Blanc-Sablon\": [\"America/Puerto_Rico\", 11],\n \"Boa_Vista\": [\"\", 16],\n \"Bogota\": [\"\", 17],\n \"Boise\": [\"\", 18],\n \"Buenos_Aires\": [\"America/Argentina/Buenos_Aires\", 12],\n \"Cambridge_Bay\": [\"\", 18],\n \"Campo_Grande\": [\"\", 16],\n \"Cancun\": [\"\", 14],\n \"Caracas\": [\"\", 16],\n \"Catamarca\": [\"America/Argentina/Catamarca\", 12],\n \"Cayenne\": [\"\", 12],\n \"Cayman\": [\"America/Panama\", 14],\n \"Chicago\": [\"\", 19],\n \"Chihuahua\": [\"\", 15],\n \"Ciudad_Juarez\": [\"\", 18],\n \"Coral_Harbour\": [\"America/Panama\", 14],\n \"Cordoba\": [\"America/Argentina/Cordoba\", 12],\n \"Costa_Rica\": [\"\", 15],\n \"Creston\": [\"America/Phoenix\", 20],\n \"Cuiaba\": [\"\", 16],\n \"Curacao\": [\"America/Puerto_Rico\", 11],\n \"Danmarkshavn\": [\"\", 0],\n \"Dawson_Creek\": [\"\", 20],\n \"Dawson\": [\"\", 20],\n \"Denver\": [\"\", 18],\n \"Detroit\": [\"\", 21],\n \"Dominica\": [\"America/Puerto_Rico\", 11],\n \"Edmonton\": [\"\", 18],\n \"Eirunepe\": [\"\", 17],\n \"El_Salvador\": [\"\", 15],\n \"Ensenada\": [\"America/Tijuana\", 22],\n \"Fort_Nelson\": [\"\", 20],\n \"Fort_Wayne\": [\"America/Indiana/Indianapolis\", 21],\n \"Fortaleza\": [\"\", 12],\n \"Glace_Bay\": [\"\", 23],\n \"Godthab\": [\"America/Nuuk\", 24],\n \"Goose_Bay\": [\"\", 25],\n \"Grand_Turk\": [\"\", 26],\n \"Grenada\": [\"America/Puerto_Rico\", 11],\n \"Guadeloupe\": [\"America/Puerto_Rico\", 11],\n \"Guatemala\": [\"\", 15],\n \"Guayaquil\": [\"\", 17],\n \"Guyana\": [\"\", 16],\n \"Halifax\": [\"\", 23],\n \"Havana\": [\"\", 27],\n \"Hermosillo\": [\"\", 20],\n \"Indiana\": {\n \"Indianapolis\": [\"\", 21],\n \"Knox\": [\"\", 19],\n \"Marengo\": [\"\", 21],\n \"Petersburg\": [\"\", 21],\n \"Tell_City\": [\"\", 19],\n \"Vevay\": [\"\", 21],\n \"Vincennes\": [\"\", 21],\n \"Winamac\": [\"\", 26]\n },\n \"Indianapolis\": [\"America/Indiana/Indianapolis\", 21],\n \"Inuvik\": [\"\", 18],\n \"Iqaluit\": [\"\", 21],\n \"Jamaica\": [\"\", 14],\n \"Jujuy\": [\"America/Argentina/Jujuy\", 12],\n \"Juneau\": [\"\", 10],\n \"Kentucky\": {\n \"Louisville\": [\"\", 21],\n \"Monticello\": [\"\", 21]\n },\n \"Knox_IN\": [\"America/Indiana/Knox\", 19],\n \"Kralendijk\": [\"America/Puerto_Rico\", 11],\n \"La_Paz\": [\"\", 16],\n \"Lima\": [\"\", 17],\n \"Los_Angeles\": [\"\", 22],\n \"Louisville\": [\"America/Kentucky/Louisville\", 21],\n \"Lower_Princes\": [\"America/Puerto_Rico\", 11],\n \"Maceio\": [\"\", 12],\n \"Managua\": [\"\", 15],\n \"Manaus\": [\"\", 16],\n \"Marigot\": [\"America/Puerto_Rico\", 11],\n \"Martinique\": [\"\", 11],\n \"Matamoros\": [\"\", 19],\n \"Mazatlan\": [\"\", 20],\n \"Mendoza\": [\"America/Argentina/Mendoza\", 12],\n \"Menominee\": [\"\", 19],\n \"Merida\": [\"\", 15],\n \"Metlakatla\": [\"\", 10],\n \"Mexico_City\": [\"\", 15],\n \"Miquelon\": [\"\", 28],\n \"Moncton\": [\"\", 23],\n \"Monterrey\": [\"\", 15],\n \"Montevideo\": [\"\", 12],\n \"Montreal\": [\"America/Toronto\", 21],\n \"Montserrat\": [\"America/Puerto_Rico\", 11],\n \"Nassau\": [\"America/Toronto\", 21],\n \"New_York\": [\"\", 21],\n \"Nipigon\": [\"America/Toronto\", 21],\n \"Nome\": [\"\", 10],\n \"Noronha\": [\"\", 24],\n \"North_Dakota\": {\n \"Beulah\": [\"\", 19],\n \"Center\": [\"\", 19],\n \"New_Salem\": [\"\", 19]\n },\n \"Nuuk\": [\"\", 24],\n \"Ojinaga\": [\"\", 19],\n \"Panama\": [\"\", 14],\n \"Pangnirtung\": [\"America/Iqaluit\", 21],\n \"Paramaribo\": [\"\", 12],\n \"Phoenix\": [\"\", 20],\n \"Port_of_Spain\": [\"America/Puerto_Rico\", 11],\n \"Port-au-Prince\": [\"\", 21],\n \"Porto_Acre\": [\"America/Rio_Branco\", 17],\n \"Porto_Velho\": [\"\", 16],\n \"Puerto_Rico\": [\"\", 11],\n \"Punta_Arenas\": [\"\", 12],\n \"Rainy_River\": [\"America/Winnipeg\", 19],\n \"Rankin_Inlet\": [\"\", 19],\n \"Recife\": [\"\", 12],\n \"Regina\": [\"\", 15],\n \"Resolute\": [\"\", 29],\n \"Rio_Branco\": [\"\", 17],\n \"Rosario\": [\"America/Argentina/Cordoba\", 12],\n \"Santa_Isabel\": [\"America/Tijuana\", 22],\n \"Santarem\": [\"\", 12],\n \"Santiago\": [\"\", 30],\n \"Santo_Domingo\": [\"\", 11],\n \"Sao_Paulo\": [\"\", 12],\n \"Scoresbysund\": [\"\", 31],\n \"Shiprock\": [\"America/Denver\", 18],\n \"Sitka\": [\"\", 10],\n \"St_Barthelemy\": [\"America/Puerto_Rico\", 11],\n \"St_Johns\": [\"\", 32],\n \"St_Kitts\": [\"America/Puerto_Rico\", 11],\n \"St_Lucia\": [\"America/Puerto_Rico\", 11],\n \"St_Thomas\": [\"America/Puerto_Rico\", 11],\n \"St_Vincent\": [\"America/Puerto_Rico\", 11],\n \"Swift_Current\": [\"\", 15],\n \"Tegucigalpa\": [\"\", 15],\n \"Thule\": [\"\", 23],\n \"Thunder_Bay\": [\"America/Toronto\", 21],\n \"Tijuana\": [\"\", 22],\n \"Toronto\": [\"\", 21],\n \"Tortola\": [\"America/Puerto_Rico\", 11],\n \"Vancouver\": [\"\", 22],\n \"Virgin\": [\"America/Puerto_Rico\", 11],\n \"Whitehorse\": [\"\", 20],\n \"Winnipeg\": [\"\", 19],\n \"Yakutat\": [\"\", 10],\n \"Yellowknife\": [\"\", 18]\n },\n \"Antarctica\": {\n \"Casey\": [\"\", 33],\n \"Davis\": [\"\", 34],\n \"DumontDUrville\": [\"Pacific/Port_Moresby\", 35],\n \"Macquarie\": [\"\", 36],\n \"Mawson\": [\"\", 37],\n \"McMurdo\": [\"Pacific/Auckland\", 38],\n \"Palmer\": [\"\", 12],\n \"Rothera\": [\"\", 12],\n \"South_Pole\": [\"Pacific/Auckland\", 38],\n \"Syowa\": [\"Asia/Riyadh\", 39],\n \"Troll\": [\"\", 40],\n \"Vostok\": [\"Asia/Urumqi\", 41]\n },\n \"Arctic\": {\n \"Longyearbyen\": [\"Europe/Berlin\", 7]\n },\n \"Asia\": {\n \"Aden\": [\"Asia/Riyadh\", 39],\n \"Almaty\": [\"\", 41],\n \"Amman\": [\"\", 39],\n \"Anadyr\": [\"\", 42],\n \"Aqtau\": [\"\", 37],\n \"Aqtobe\": [\"\", 37],\n \"Ashgabat\": [\"\", 37],\n \"Ashkhabad\": [\"Asia/Ashgabat\", 37],\n \"Atyrau\": [\"\", 37],\n \"Baghdad\": [\"\", 39],\n \"Bahrain\": [\"Asia/Qatar\", 39],\n \"Baku\": [\"\", 43],\n \"Bangkok\": [\"\", 34],\n \"Barnaul\": [\"\", 34],\n \"Beirut\": [\"\", 44],\n \"Bishkek\": [\"\", 41],\n \"Brunei\": [\"Asia/Kuching\", 45],\n \"Calcutta\": [\"Asia/Kolkata\", 46],\n \"Chita\": [\"\", 47],\n \"Choibalsan\": [\"\", 45],\n \"Chongqing\": [\"Asia/Shanghai\", 48],\n \"Chungking\": [\"Asia/Shanghai\", 48],\n \"Colombo\": [\"\", 49],\n \"Dacca\": [\"Asia/Dhaka\", 41],\n \"Damascus\": [\"\", 39],\n \"Dhaka\": [\"\", 41],\n \"Dili\": [\"\", 47],\n \"Dubai\": [\"\", 43],\n \"Dushanbe\": [\"\", 37],\n \"Famagusta\": [\"\", 50],\n \"Gaza\": [\"\", 51],\n \"Harbin\": [\"Asia/Shanghai\", 48],\n \"Hebron\": [\"\", 51],\n \"Ho_Chi_Minh\": [\"\", 34],\n \"Hong_Kong\": [\"\", 52],\n \"Hovd\": [\"\", 34],\n \"Irkutsk\": [\"\", 45],\n \"Istanbul\": [\"Europe/Istanbul\", 39],\n \"Jakarta\": [\"\", 53],\n \"Jayapura\": [\"\", 54],\n \"Jerusalem\": [\"\", 55],\n \"Kabul\": [\"\", 56],\n \"Kamchatka\": [\"\", 42],\n \"Karachi\": [\"\", 57],\n \"Kashgar\": [\"Asia/Urumqi\", 41],\n \"Kathmandu\": [\"\", 58],\n \"Katmandu\": [\"Asia/Kathmandu\", 58],\n \"Khandyga\": [\"\", 47],\n \"Kolkata\": [\"\", 46],\n \"Krasnoyarsk\": [\"\", 34],\n \"Kuala_Lumpur\": [\"Asia/Singapore\", 45],\n \"Kuching\": [\"\", 45],\n \"Kuwait\": [\"Asia/Riyadh\", 39],\n \"Macao\": [\"Asia/Macau\", 48],\n \"Macau\": [\"\", 48],\n \"Magadan\": [\"\", 33],\n \"Makassar\": [\"\", 59],\n \"Manila\": [\"\", 60],\n \"Muscat\": [\"Asia/Dubai\", 43],\n \"Nicosia\": [\"\", 61],\n \"Novokuznetsk\": [\"\", 34],\n \"Novosibirsk\": [\"\", 34],\n \"Omsk\": [\"\", 41],\n \"Oral\": [\"\", 37],\n \"Phnom_Penh\": [\"Asia/Bangkok\", 34],\n \"Pontianak\": [\"\", 53],\n \"Pyongyang\": [\"\", 62],\n \"Qatar\": [\"\", 39],\n \"Qostanay\": [\"\", 41],\n \"Qyzylorda\": [\"\", 37],\n \"Rangoon\": [\"Asia/Yangon\", 63],\n \"Riyadh\": [\"\", 39],\n \"Saigon\": [\"Asia/Ho_Chi_Minh\", 34],\n \"Sakhalin\": [\"\", 33],\n \"Samarkand\": [\"\", 37],\n \"Seoul\": [\"\", 62],\n \"Shanghai\": [\"\", 48],\n \"Singapore\": [\"\", 45],\n \"Srednekolymsk\": [\"\", 33],\n \"Taipei\": [\"\", 48],\n \"Tashkent\": [\"\", 37],\n \"Tbilisi\": [\"\", 43],\n \"Tehran\": [\"\", 64],\n \"Tel_Aviv\": [\"Asia/Jerusalem\", 55],\n \"Thimbu\": [\"Asia/Thimphu\", 41],\n \"Thimphu\": [\"\", 41],\n \"Tokyo\": [\"\", 65],\n \"Tomsk\": [\"\", 34],\n \"Ujung_Pandang\": [\"Asia/Makassar\", 59],\n \"Ulaanbaatar\": [\"\", 45],\n \"Ulan_Bator\": [\"Asia/Ulaanbaatar\", 45],\n \"Urumqi\": [\"\", 41],\n \"Ust-Nera\": [\"\", 35],\n \"Vientiane\": [\"Asia/Bangkok\", 34],\n \"Vladivostok\": [\"\", 35],\n \"Yakutsk\": [\"\", 47],\n \"Yangon\": [\"\", 63],\n \"Yekaterinburg\": [\"\", 37],\n \"Yerevan\": [\"\", 43]\n },\n \"Atlantic\": {\n \"Azores\": [\"\", 31],\n \"Bermuda\": [\"\", 23],\n \"Canary\": [\"\", 66],\n \"Cape_Verde\": [\"\", 67],\n \"Faeroe\": [\"Atlantic/Faroe\", 66],\n \"Faroe\": [\"\", 66],\n \"Jan_Mayen\": [\"Europe/Berlin\", 7],\n \"Madeira\": [\"\", 66],\n \"Reykjavik\": [\"Africa/Abidjan\", 0],\n \"South_Georgia\": [\"\", 24],\n \"St_Helena\": [\"Africa/Abidjan\", 0],\n \"Stanley\": [\"\", 12]\n },\n \"Australia\": {\n \"ACT\": [\"Australia/Sydney\", 36],\n \"Adelaide\": [\"\", 68],\n \"Brisbane\": [\"\", 69],\n \"Broken_Hill\": [\"\", 68],\n \"Canberra\": [\"Australia/Sydney\", 36],\n \"Currie\": [\"Australia/Hobart\", 70],\n \"Darwin\": [\"\", 71],\n \"Eucla\": [\"\", 72],\n \"Hobart\": [\"\", 70],\n \"LHI\": [\"Australia/Lord_Howe\", 73],\n \"Lindeman\": [\"\", 69],\n \"Lord_Howe\": [\"\", 73],\n \"Melbourne\": [\"\", 36],\n \"North\": [\"Australia/Darwin\", 71],\n \"NSW\": [\"Australia/Sydney\", 36],\n \"Perth\": [\"\", 74],\n \"Queensland\": [\"Australia/Brisbane\", 69],\n \"South\": [\"Australia/Adelaide\", 68],\n \"Sydney\": [\"\", 36],\n \"Tasmania\": [\"Australia/Hobart\", 70],\n \"Victoria\": [\"Australia/Melbourne\", 36],\n \"West\": [\"Australia/Perth\", 74],\n \"Yancowinna\": [\"Australia/Broken_Hill\", 68]\n },\n \"Brazil\": {\n \"Acre\": [\"America/Rio_Branco\", 17],\n \"DeNoronha\": [\"America/Noronha\", 24],\n \"East\": [\"America/Sao_Paulo\", 12],\n \"West\": [\"America/Manaus\", 16]\n },\n \"Canada\": {\n \"Atlantic\": [\"America/Halifax\", 23],\n \"Central\": [\"America/Winnipeg\", 19],\n \"Eastern\": [\"America/Toronto\", 21],\n \"Mountain\": [\"America/Edmonton\", 18],\n \"Newfoundland\": [\"America/St_Johns\", 32],\n \"Pacific\": [\"America/Vancouver\", 22],\n \"Saskatchewan\": [\"America/Regina\", 15],\n \"Yukon\": [\"America/Whitehorse\", 20]\n },\n \"CET\": [\"\", 7],\n \"Chile\": {\n \"Continental\": [\"America/Santiago\", 30],\n \"EasterIsland\": [\"Pacific/Easter\", 75]\n },\n \"CST6CDT\": [\"\", 19],\n \"Cuba\": [\"America/Havana\", 27],\n \"EET\": [\"\", 50],\n \"Egypt\": [\"Africa/Cairo\", 5],\n \"Eire\": [\"Europe/Dublin\", 76],\n \"EST\": [\"\", 14],\n \"EST5EDT\": [\"\", 21],\n \"Etc\": {\n \"GMT-0\": [\"Etc/GMT\", 0],\n \"GMT-1\": [\"\", 6],\n \"GMT-10\": [\"\", 35],\n \"GMT-11\": [\"\", 33],\n \"GMT-12\": [\"\", 42],\n \"GMT-13\": [\"\", 77],\n \"GMT-14\": [\"\", 78],\n \"GMT-2\": [\"\", 79],\n \"GMT-3\": [\"\", 39],\n \"GMT-4\": [\"\", 43],\n \"GMT-5\": [\"\", 37],\n \"GMT-6\": [\"\", 41],\n \"GMT-7\": [\"\", 34],\n \"GMT-8\": [\"\", 45],\n \"GMT-9\": [\"\", 47],\n \"GMT\": [\"\", 0],\n \"GMT+0\": [\"Etc/GMT\", 0],\n \"GMT+1\": [\"\", 67],\n \"GMT+10\": [\"\", 80],\n \"GMT+11\": [\"\", 81],\n \"GMT+12\": [\"\", 82],\n \"GMT+2\": [\"\", 24],\n \"GMT+3\": [\"\", 12],\n \"GMT+4\": [\"\", 16],\n \"GMT+5\": [\"\", 17],\n \"GMT+6\": [\"\", 83],\n \"GMT+7\": [\"\", 84],\n \"GMT+8\": [\"\", 85],\n \"GMT+9\": [\"\", 86],\n \"GMT0\": [\"Etc/GMT\", 0],\n \"Greenwich\": [\"Etc/GMT\", 0],\n \"UCT\": [\"Etc/UTC\", 87],\n \"Universal\": [\"Etc/UTC\", 87],\n \"UTC\": [\"\", 87],\n \"Zulu\": [\"Etc/UTC\", 87]\n },\n \"Europe\": {\n \"Amsterdam\": [\"Europe/Brussels\", 7],\n \"Andorra\": [\"\", 7],\n \"Astrakhan\": [\"\", 43],\n \"Athens\": [\"\", 50],\n \"Belfast\": [\"Europe/London\", 88],\n \"Belgrade\": [\"\", 7],\n \"Berlin\": [\"\", 7],\n \"Bratislava\": [\"Europe/Prague\", 7],\n \"Brussels\": [\"\", 7],\n \"Bucharest\": [\"\", 50],\n \"Budapest\": [\"\", 7],\n \"Busingen\": [\"Europe/Zurich\", 7],\n \"Chisinau\": [\"\", 89],\n \"Copenhagen\": [\"Europe/Berlin\", 7],\n \"Dublin\": [\"\", 76],\n \"Gibraltar\": [\"\", 7],\n \"Guernsey\": [\"Europe/London\", 88],\n \"Helsinki\": [\"\", 50],\n \"Isle_of_Man\": [\"Europe/London\", 88],\n \"Istanbul\": [\"\", 39],\n \"Jersey\": [\"Europe/London\", 88],\n \"Kaliningrad\": [\"\", 5],\n \"Kiev\": [\"Europe/Kyiv\", 61],\n \"Kirov\": [\"\", 39],\n \"Kyiv\": [\"\", 61],\n \"Lisbon\": [\"\", 90],\n \"Ljubljana\": [\"Europe/Belgrade\", 7],\n \"London\": [\"\", 88],\n \"Luxembourg\": [\"Europe/Brussels\", 7],\n \"Madrid\": [\"\", 7],\n \"Malta\": [\"\", 7],\n \"Mariehamn\": [\"Europe/Helsinki\", 50],\n \"Minsk\": [\"\", 39],\n \"Monaco\": [\"Europe/Paris\", 7],\n \"Moscow\": [\"\", 91],\n \"Nicosia\": [\"Asia/Nicosia\", 61],\n \"Oslo\": [\"Europe/Berlin\", 7],\n \"Paris\": [\"\", 7],\n \"Podgorica\": [\"Europe/Belgrade\", 7],\n \"Prague\": [\"\", 7],\n \"Riga\": [\"\", 50],\n \"Rome\": [\"\", 7],\n \"Samara\": [\"\", 43],\n \"San_Marino\": [\"Europe/Rome\", 7],\n \"Sarajevo\": [\"Europe/Belgrade\", 7],\n \"Saratov\": [\"\", 43],\n \"Simferopol\": [\"\", 91],\n \"Skopje\": [\"Europe/Belgrade\", 7],\n \"Sofia\": [\"\", 50],\n \"Stockholm\": [\"Europe/Berlin\", 7],\n \"Tallinn\": [\"\", 50],\n \"Tirane\": [\"\", 7],\n \"Tiraspol\": [\"Europe/Chisinau\", 89],\n \"Ulyanovsk\": [\"\", 43],\n \"Uzhgorod\": [\"Europe/Kyiv\", 61],\n \"Vaduz\": [\"Europe/Zurich\", 7],\n \"Vatican\": [\"Europe/Rome\", 7],\n \"Vienna\": [\"\", 7],\n \"Vilnius\": [\"\", 50],\n \"Volgograd\": [\"\", 39],\n \"Warsaw\": [\"\", 7],\n \"Zagreb\": [\"Europe/Belgrade\", 7],\n \"Zaporozhye\": [\"Europe/Kyiv\", 61],\n \"Zurich\": [\"\", 7]\n },\n \"GB-Eire\": [\"Europe/London\", 88],\n \"GB\": [\"Europe/London\", 88],\n \"GMT-0\": [\"Etc/GMT\", 0],\n \"GMT\": [\"Etc/GMT\", 0],\n \"GMT+0\": [\"Etc/GMT\", 0],\n \"GMT0\": [\"Etc/GMT\", 0],\n \"Greenwich\": [\"Etc/GMT\", 0],\n \"Hongkong\": [\"Asia/Hong_Kong\", 52],\n \"HST\": [\"\", 92],\n \"Iceland\": [\"Africa/Abidjan\", 0],\n \"Indian\": {\n \"Antananarivo\": [\"Africa/Nairobi\", 1],\n \"Chagos\": [\"\", 41],\n \"Christmas\": [\"Asia/Bangkok\", 34],\n \"Cocos\": [\"Asia/Yangon\", 63],\n \"Comoro\": [\"Africa/Nairobi\", 1],\n \"Kerguelen\": [\"Indian/Maldives\", 37],\n \"Mahe\": [\"Asia/Dubai\", 43],\n \"Maldives\": [\"\", 37],\n \"Mauritius\": [\"\", 43],\n \"Mayotte\": [\"Africa/Nairobi\", 1],\n \"Reunion\": [\"Asia/Dubai\", 43]\n },\n \"Iran\": [\"Asia/Tehran\", 64],\n \"Israel\": [\"Asia/Jerusalem\", 55],\n \"Jamaica\": [\"America/Jamaica\", 14],\n \"Japan\": [\"Asia/Tokyo\", 65],\n \"Kwajalein\": [\"Pacific/Kwajalein\", 42],\n \"Libya\": [\"Africa/Tripoli\", 5],\n \"MET\": [\"\", 93],\n \"Mexico\": {\n \"BajaNorte\": [\"America/Tijuana\", 22],\n \"BajaSur\": [\"America/Mazatlan\", 20],\n \"General\": [\"America/Mexico_City\", 15]\n },\n \"MST\": [\"\", 20],\n \"MST7MDT\": [\"\", 18],\n \"Navajo\": [\"America/Denver\", 18],\n \"NZ-CHAT\": [\"Pacific/Chatham\", 94],\n \"NZ\": [\"Pacific/Auckland\", 38],\n \"Pacific\": {\n \"Apia\": [\"\", 77],\n \"Auckland\": [\"\", 38],\n \"Bougainville\": [\"\", 33],\n \"Chatham\": [\"\", 94],\n \"Chuuk\": [\"Pacific/Port_Moresby\", 35],\n \"Easter\": [\"\", 75],\n \"Efate\": [\"\", 33],\n \"Enderbury\": [\"Pacific/Kanton\", 77],\n \"Fakaofo\": [\"\", 77],\n \"Fiji\": [\"\", 42],\n \"Funafuti\": [\"Pacific/Tarawa\", 42],\n \"Galapagos\": [\"\", 83],\n \"Gambier\": [\"\", 86],\n \"Guadalcanal\": [\"\", 33],\n \"Guam\": [\"\", 95],\n \"Honolulu\": [\"\", 92],\n \"Johnston\": [\"Pacific/Honolulu\", 92],\n \"Kanton\": [\"\", 77],\n \"Kiritimati\": [\"\", 78],\n \"Kosrae\": [\"\", 33],\n \"Kwajalein\": [\"\", 42],\n \"Majuro\": [\"Pacific/Tarawa\", 42],\n \"Marquesas\": [\"\", 96],\n \"Midway\": [\"Pacific/Pago_Pago\", 97],\n \"Nauru\": [\"\", 42],\n \"Niue\": [\"\", 81],\n \"Norfolk\": [\"\", 98],\n \"Noumea\": [\"\", 33],\n \"Pago_Pago\": [\"\", 97],\n \"Palau\": [\"\", 47],\n \"Pitcairn\": [\"\", 85],\n \"Pohnpei\": [\"Pacific/Guadalcanal\", 33],\n \"Ponape\": [\"Pacific/Guadalcanal\", 33],\n \"Port_Moresby\": [\"\", 35],\n \"Rarotonga\": [\"\", 80],\n \"Saipan\": [\"Pacific/Guam\", 95],\n \"Samoa\": [\"Pacific/Pago_Pago\", 97],\n \"Tahiti\": [\"\", 80],\n \"Tarawa\": [\"\", 42],\n \"Tongatapu\": [\"\", 77],\n \"Truk\": [\"Pacific/Port_Moresby\", 35],\n \"Wake\": [\"Pacific/Tarawa\", 42],\n \"Wallis\": [\"Pacific/Tarawa\", 42],\n \"Yap\": [\"Pacific/Port_Moresby\", 35]\n },\n \"Poland\": [\"Europe/Warsaw\", 7],\n \"Portugal\": [\"Europe/Lisbon\", 90],\n \"PRC\": [\"Asia/Shanghai\", 48],\n \"PST8PDT\": [\"\", 22],\n \"ROC\": [\"Asia/Taipei\", 48],\n \"ROK\": [\"Asia/Seoul\", 62],\n \"Singapore\": [\"Asia/Singapore\", 45],\n \"Turkey\": [\"Europe/Istanbul\", 39],\n \"UCT\": [\"Etc/UTC\", 87],\n \"Universal\": [\"Etc/UTC\", 87],\n \"US\": {\n \"Alaska\": [\"America/Anchorage\", 10],\n \"Aleutian\": [\"America/Adak\", 9],\n \"Arizona\": [\"America/Phoenix\", 20],\n \"Central\": [\"America/Chicago\", 19],\n \"East-Indiana\": [\"America/Indiana/Indianapolis\", 21],\n \"Eastern\": [\"America/New_York\", 21],\n \"Hawaii\": [\"Pacific/Honolulu\", 92],\n \"Indiana-Starke\": [\"America/Indiana/Knox\", 19],\n \"Michigan\": [\"America/Detroit\", 21],\n \"Mountain\": [\"America/Denver\", 18],\n \"Pacific\": [\"America/Los_Angeles\", 22],\n \"Samoa\": [\"Pacific/Pago_Pago\", 97]\n },\n \"UTC\": [\"Etc/UTC\", 87],\n \"W-SU\": [\"Europe/Moscow\", 91],\n \"WET\": [\"\", 66],\n \"Zulu\": [\"Etc/UTC\", 87]\n};\nconst tzlibZonesDetailsDB = [\"20230103T195358ZGMT+0000+000019700101T000000\", \"20230103T195358ZEAT+0300+030019700101T000000\", \"20230103T195358ZCET+0100+010019700101T000000\", \"20230103T195358ZWAT+0100+010019700101T000000\", \"20230103T195358ZCAT+0200+020019700101T000000\", \"20230103T195358ZEET+0200+020019700101T000000\", \"20230103T195358Z+01+0100+010019700101T000000\", \"20230103T195358ZCEST+0100+020019700329T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUCET+0200+010019701025T030000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358ZSAST+0200+020019700101T000000\", \"20230103T195358ZHDT-1000-090019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUHST-0900-100019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\", \"20230103T195358ZAKDT-0900-080019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUAKST-0800-090019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\", \"20230103T195358ZAST-0400-040019700101T000000\", \"20230103T195358Z-03-0300-030019700101T000000\", \"20230103T195358Z-03-0400-030019701004T000000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU-04-0300-040019700322T000000FREQ=YEARLY;BYMONTH=3;BYDAY=4SU\", \"20230103T195358ZEST-0500-050019700101T000000\", \"20230103T195358ZCST-0600-060019700101T000000\", \"20230103T195358Z-04-0400-040019700101T000000\", \"20230103T195358Z-05-0500-050019700101T000000\", \"20230103T195358ZMDT-0700-060019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUMST-0600-070019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\", \"20230103T195358ZCDT-0600-050019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUCST-0500-060019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\", \"20230103T195358ZMST-0700-070019700101T000000\", \"20230103T195358ZEDT-0500-040019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUEST-0400-050019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\", \"20230103T195358ZPDT-0800-070019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUPST-0700-080019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\", \"20230103T195358ZADT-0400-030019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUAST-0300-040019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\", \"20230103T195358Z-02-0200-020019700101T000000\", \"20230103T195358ZAST-0300-040019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUADT-0400-030019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\", \"20230103T195358ZEST-0400-050019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUEDT-0500-040019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\", \"20230103T195358ZCST-0400-050019701101T010000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUCDT-0500-040019700308T000000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\", \"20230103T195358Z-02-0300-020019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU-03-0200-030019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\", \"20230103T195358ZCST-0500-060019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUCDT-0600-050019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\", \"20230103T195358Z-04-0300-040019700405T000000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU-03-0400-030019700906T000000FREQ=YEARLY;BYMONTH=9;BYDAY=1SU\", \"20230103T195358Z+00-0100+000019700329T000000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU-01+0000-010019701025T010000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358ZNST-0230-033019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUNDT-0330-023019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\", \"20230103T195358Z+11+1100+110019700101T000000\", \"20230103T195358Z+07+0700+070019700101T000000\", \"20230103T195358Z+10+1000+100019700101T000000\", \"20230103T195358ZAEST+1100+100019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SUAEDT+1000+110019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\", \"20230103T195358Z+05+0500+050019700101T000000\", \"20230103T195358ZNZDT+1200+130019700927T020000FREQ=YEARLY;BYMONTH=9;BYDAY=-1SUNZST+1300+120019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\", \"20230103T195358Z+03+0300+030019700101T000000\", \"20230103T195358Z+02+0000+020019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU+00+0200+000019701025T030000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358Z+06+0600+060019700101T000000\", \"20230103T195358Z+12+1200+120019700101T000000\", \"20230103T195358Z+04+0400+040019700101T000000\", \"20230103T195358ZEEST+0200+030019700329T000000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUEET+0300+020019701025T000000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358Z+08+0800+080019700101T000000\", \"20230103T195358ZIST+0530+053019700101T000000\", \"20230103T195358Z+09+0900+090019700101T000000\", \"20230103T195358ZCST+0800+080019700101T000000\", \"20230103T195358Z+0530+0530+053019700101T000000\", \"20230103T195358ZEEST+0200+030019700329T030000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUEET+0300+020019701025T040000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358ZEET+0300+020019701024T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SAEEST+0200+030019700328T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\", \"20230103T195358ZHKT+0800+080019700101T000000\", \"20230103T195358ZWIB+0700+070019700101T000000\", \"20230103T195358ZWIT+0900+090019700101T000000\", \"20230103T195358ZIDT+0200+030019700327T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1FRIST+0300+020019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358Z+0430+0430+043019700101T000000\", \"20230103T195358ZPKT+0500+050019700101T000000\", \"20230103T195358Z+0545+0545+054519700101T000000\", \"20230103T195358ZWITA+0800+080019700101T000000\", \"20230103T195358ZPST+0800+080019700101T000000\", \"20230103T195358ZEET+0300+020019701025T040000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SUEEST+0200+030019700329T030000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\", \"20230103T195358ZKST+0900+090019700101T000000\", \"20230103T195358Z+0630+0630+063019700101T000000\", \"20230103T195358Z+0330+0330+033019700101T000000\", \"20230103T195358ZJST+0900+090019700101T000000\", \"20230103T195358ZWEST+0000+010019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUWET+0100+000019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358Z-01-0100-010019700101T000000\", \"20230103T195358ZACST+1030+093019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SUACDT+0930+103019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\", \"20230103T195358ZAEST+1000+100019700101T000000\", \"20230103T195358ZAEDT+1000+110019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SUAEST+1100+100019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\", \"20230103T195358ZACST+0930+093019700101T000000\", \"20230103T195358Z+0845+0845+084519700101T000000\", \"20230103T195358Z+1030+1100+103019700405T020000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU+11+1030+110019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\", \"20230103T195358ZAWST+0800+080019700101T000000\", \"20230103T195358Z-06-0500-060019700404T220000FREQ=YEARLY;BYMONTH=4;BYDAY=1SA-05-0600-050019700905T220000FREQ=YEARLY;BYMONTH=9;BYDAY=1SA\", \"20230103T195358ZIST+0000+010019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUGMT+0100+000019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358Z+13+1300+130019700101T000000\", \"20230103T195358Z+14+1400+140019700101T000000\", \"20230103T195358Z+02+0200+020019700101T000000\", \"20230103T195358Z-10-1000-100019700101T000000\", \"20230103T195358Z-11-1100-110019700101T000000\", \"20230103T195358Z-12-1200-120019700101T000000\", \"20230103T195358Z-06-0600-060019700101T000000\", \"20230103T195358Z-07-0700-070019700101T000000\", \"20230103T195358Z-08-0800-080019700101T000000\", \"20230103T195358Z-09-0900-090019700101T000000\", \"20230103T195358ZUTC+0000+000019700101T000000\", \"20230103T195358ZBST+0000+010019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUGMT+0100+000019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358ZEEST+0200+030019700329T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUEET+0300+020019701025T030000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358ZWET+0100+000019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SUWEST+0000+010019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\", \"20230103T195358ZMSK+0300+030019700101T000000\", \"20230103T195358ZHST-1000-100019700101T000000\", \"20230103T195358ZMEST+0100+020019700329T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUMET+0200+010019701025T030000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\", \"20230103T195358Z+1345+1245+134519700927T024500FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU+1245+1345+124519700405T034500FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\", \"20230103T195358ZChST+1000+100019700101T000000\", \"20230103T195358Z-0930-0930-093019700101T000000\", \"20230103T195358ZSST-1100-110019700101T000000\", \"20230103T195358Z+12+1100+120019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU+11+1200+110019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\"];\n\nfunction tzlib_get_content(tzName) {\n const nameParts = tzName.split('/');\n\n if (nameParts.length === 3 && (!tzlibZonesDB[\"\".concat(nameParts[0])] || !tzlibZonesDB[\"\".concat(nameParts[0])][\"\".concat(nameParts[1])] || !tzlibZonesDB[\"\".concat(nameParts[0])][\"\".concat(nameParts[1])][\"\".concat(nameParts[2])]) || nameParts.length === 2 && (!tzlibZonesDB[\"\".concat(nameParts[0])] || !tzlibZonesDB[\"\".concat(nameParts[0])][\"\".concat(nameParts[1])]) || nameParts.length === 1 && !tzlibZonesDB[\"\".concat(nameParts[0])]) {\n console.error('Given timezone not valid.');\n return '';\n }\n\n if (nameParts.length === 3) {\n return [tzlibZonesDB[\"\".concat(nameParts[0])][\"\".concat(nameParts[1])][\"\".concat(nameParts[2])][0], tzlib_enrich_data(tzlibZonesDetailsDB[tzlibZonesDB[\"\".concat(nameParts[0])][\"\".concat(nameParts[1])][\"\".concat(nameParts[2])][1]])];\n }\n\n if (nameParts.length === 2) {\n return [tzlibZonesDB[\"\".concat(nameParts[0])][\"\".concat(nameParts[1])][0], tzlib_enrich_data(tzlibZonesDetailsDB[tzlibZonesDB[\"\".concat(nameParts[0])][\"\".concat(nameParts[1])][1]])];\n }\n\n return [tzlibZonesDB[\"\".concat(nameParts[0])][0], tzlib_enrich_data(tzlibZonesDetailsDB[tzlibZonesDB[\"\".concat(nameParts[0])][1]])];\n}\n\nfunction tzlib_enrich_data(string) {\n const shortenerMap = {\n '
': '',\n 'TZNAME:': '',\n 'TZOFFSETFROM:': '',\n 'TZOFFSETTO:': '',\n 'DTSTART:': '',\n 'RRULE:': '',\n 'BEGIN:DAYLIGHT': '',\n 'END:DAYLIGHT': '',\n 'BEGIN:STANDARD': '',\n 'END:STANDARD': ''\n };\n\n for (const _ref of Object.entries(shortenerMap)) {\n var _ref2 = _slicedToArray(_ref, 2);\n\n const key = _ref2[0];\n const value = _ref2[1];\n string = string.replaceAll(value, key);\n }\n\n return string;\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\nfunction tzlib_get_ical_block(tzName) {\n let jsonType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n const tzBlock = tzlib_get_content(tzName);\n\n if (tzBlock[1] == null || tzBlock[1] == '') {\n return '';\n }\n\n const location = function () {\n if (tzBlock[0] == '') {\n return tzName;\n } else {\n return tzBlock[0];\n }\n }();\n\n const tzidLine = 'TZID=' + location;\n const output = ['BEGIN:VTIMEZONE\\r\\nTZID:' + location + '\\r\\nX-LIC-LOCATION:' + location + '\\r\\nLAST-MODIFIED:' + tzBlock[1].replace(/[^\\w_\\-:,;=+/
]/g, '').replace(/
/g, '\\r\\n') + 'END:VTIMEZONE', tzidLine];\n\n if (jsonType) {\n return JSON.stringify(output);\n }\n\n return output;\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\nfunction tzlib_get_offset(tzName, isoDate, isoTime) {\n const tzBlock = tzlib_get_content(tzName);\n\n if (tzBlock[1] == null || tzBlock[1] == '') {\n return '';\n }\n\n if (!isoDate.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n console.error('offset calculation failed: date misspelled [-> YYYY-MM-DD]');\n return '';\n }\n\n if (!isoTime.match(/^\\d{2}:\\d{2}$/)) {\n console.error('offset calculation failed: time misspelled [-> hh:mm]');\n return '';\n }\n\n if (!tzBlock[1].match(/BEGIN:DAYLIGHT/i)) {\n return tzBlock[1].match(/TZOFFSETTO:([+|-]\\d{4})/i)[1];\n }\n\n const dateString = isoDate + 'T' + isoTime + ':00';\n const date = new Date(dateString);\n const dateYear = date.getFullYear();\n const dateMonth = date.getMonth() + 1;\n const dateDay = date.getDate();\n const dateHour = date.getHours();\n const timezoneData = tzBlock[1].replace(/[^\\w_\\-:,;=+/
]/g, '').split('
');\n const tzBreakpoints = {\n 1: {},\n 2: {}\n };\n let breakpointCount = 0;\n\n for (let i = 0; i < timezoneData.length; i++) {\n if (timezoneData[\"\".concat(i)].startsWith('TZOFFSETTO')) {\n breakpointCount++;\n tzBreakpoints[\"\".concat(breakpointCount)].offset = timezoneData[\"\".concat(i)].split(':')[1];\n }\n\n if (timezoneData[\"\".concat(i)].startsWith('DTSTART')) {\n tzBreakpoints[\"\".concat(breakpointCount)].hour = parseInt(timezoneData[\"\".concat(i)].substr(17, 2));\n }\n\n if (timezoneData[\"\".concat(i)].startsWith('RRULE')) {\n let rruleParts = timezoneData[\"\".concat(i)].split(';');\n let rruleMonth = parseInt(rruleParts[1].split('=')[1]);\n tzBreakpoints[\"\".concat(breakpointCount)].month = parseInt(rruleMonth);\n tzBreakpoints[\"\".concat(breakpointCount)].day = rruleParts[2].split('=')[1];\n }\n }\n\n if (tzBreakpoints[1].month > tzBreakpoints[2].month) {\n var _ref3 = [tzBreakpoints[2], tzBreakpoints[1]];\n tzBreakpoints[1] = _ref3[0];\n tzBreakpoints[2] = _ref3[1];\n }\n\n if (dateMonth != tzBreakpoints[1].month && dateMonth != tzBreakpoints[2].month) {\n if (dateMonth < tzBreakpoints[1].month || dateMonth > tzBreakpoints[2].month) {\n return tzBreakpoints[2].offset;\n } else {\n return tzBreakpoints[1].offset;\n }\n }\n\n const theCase = function () {\n return Object.keys(tzBreakpoints).find(key => tzBreakpoints[\"\".concat(key)].month == dateMonth);\n }();\n\n const helperArrayWeekdays = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n const numberDays = new Date(dateYear, dateMonth, 0).getDate();\n let weekdayCount = new Date(dateYear, dateMonth - 1, 1).getDay();\n const weekdays = {\n SU: {},\n MO: {},\n TU: {},\n WE: {},\n TH: {},\n FR: {},\n SA: {}\n };\n\n for (let d = 1; d <= numberDays; d++) {\n const occurence = Object.keys(weekdays[helperArrayWeekdays[\"\".concat(weekdayCount)]]).length + 1;\n weekdays[helperArrayWeekdays[\"\".concat(weekdayCount)]][\"\".concat(occurence)] = d;\n weekdayCount++;\n\n if (weekdayCount == 7) {\n weekdayCount = 0;\n }\n }\n\n const actualDay = function () {\n if (tzBreakpoints[\"\".concat(theCase)].day[0] == '-') {\n const breakpointWeekday = tzBreakpoints[\"\".concat(theCase)].day.substr(2, 2);\n const dayIndex = Object.keys(weekdays[\"\".concat(breakpointWeekday)]).length + 1 - parseInt(tzBreakpoints[\"\".concat(theCase)].day[1]);\n return weekdays[\"\".concat(breakpointWeekday)][\"\".concat(dayIndex)];\n } else {\n const breakpointWeekday = tzBreakpoints[\"\".concat(theCase)].day.substr(1, 2);\n return weekdays[\"\".concat(breakpointWeekday)][tzBreakpoints[\"\".concat(theCase)].day[0]];\n }\n }();\n\n if (dateDay > actualDay || dateDay == actualDay && dateHour >= tzBreakpoints[\"\".concat(theCase)].hour) {\n return tzBreakpoints[\"\".concat(theCase)].offset;\n }\n\n const fallbackCase = function () {\n if (theCase == 1) {\n return 2;\n } else {\n return 1;\n }\n }();\n\n return tzBreakpoints[\"\".concat(fallbackCase)].offset;\n}\n\nlet tzlibZoneNames = []; // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nfunction tzlib_get_timezones() {\n let jsonType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (tzlibZoneNames.length == 0) {\n tzlibZoneNames = function () {\n let namesArr = [];\n\n for (const _ref4 of Object.entries(tzlibZonesDB)) {\n var _ref5 = _slicedToArray(_ref4, 2);\n\n const key = _ref5[0];\n const value = _ref5[1];\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n for (const _ref6 of Object.entries(value)) {\n var _ref7 = _slicedToArray(_ref6, 2);\n\n const key2 = _ref7[0];\n const value2 = _ref7[1];\n\n if (typeof value2 === 'object' && !Array.isArray(value2)) {\n for (const _ref8 of Object.entries(value2)) {\n var _ref9 = _slicedToArray(_ref8, 1);\n\n const key3 = _ref9[0];\n namesArr.push(key + '/' + key2 + '/' + key3);\n }\n } else {\n namesArr.push(key + '/' + key2);\n }\n }\n } else {\n namesArr.push(key);\n }\n }\n\n return namesArr;\n }();\n }\n\n if (jsonType) {\n return JSON.stringify(tzlibZoneNames);\n }\n\n return tzlibZoneNames;\n}\n\nexport { tzlib_get_ical_block, tzlib_get_offset, tzlib_get_timezones };","import { tzlib_get_ical_block, tzlib_get_offset, tzlib_get_timezones } from 'timezones-ical-library';\n/*!\n * @preserve\n *\n * ++++++++++++++++++++++\n * Add to Calendar Button\n * ++++++++++++++++++++++\n *\n * Version: 1.18.8\n * Creator: Jens Kuerschner (https://jenskuerschner.de)\n * Project: https://github.com/add2cal/add-to-calendar-button\n * License: Apache-2.0 with “Commons Clause” License Condition v1.0\n * Note: DO NOT REMOVE THE COPYRIGHT NOTICE ABOVE!\n *\n */\n\nconst atcbVersion = '1.18.8';\n\nconst isBrowser = () => {\n if (typeof window === 'undefined') {\n return false;\n } else {\n return true;\n }\n};\n\nconst isiOS = isBrowser() ? () => {\n if (/iPad|iPhone|iPod/i.test(navigator.userAgent || navigator.vendor || window.opera) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) {\n return true;\n } else {\n return false;\n }\n} : () => {\n return false;\n};\nconst isAndroid = isBrowser() ? () => {\n if (/android/i.test(navigator.userAgent || navigator.vendor || window.opera) && !window.MSStream) {\n return true;\n } else {\n return false;\n }\n} : () => {\n return false;\n};\nconst isChrome = isBrowser() ? () => {\n if (/chrome|chromium|crios|google inc/i.test(navigator.userAgent || navigator.vendor)) {\n return true;\n } else {\n return false;\n }\n} : () => {\n return false;\n};\n\nconst isMobile = () => {\n if (isAndroid() || isiOS()) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isWebView = isBrowser() ? () => {\n if (/(; ?wv|(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari))/i.test(navigator.userAgent || navigator.vendor)) {\n return true;\n } else {\n return false;\n }\n} : () => {\n return false;\n};\nconst isProblematicWebView = isBrowser() ? () => {\n if (/(Instagram)/i.test(navigator.userAgent || navigator.vendor || window.opera)) {\n return true;\n } else {\n return false;\n }\n} : () => {\n return false;\n};\nconst atcbDefaultTarget = isWebView() ? '_system' : '_blank';\nconst atcbOptions = ['apple', 'google', 'ical', 'ms365', 'outlookcom', 'msteams', 'yahoo'];\nconst atcbValidRecurrOptions = ['apple', 'google', 'ical'];\nconst atcbInvalidSubscribeOptions = ['msteams'];\nconst atcbiOSInvalidOptions = ['ical'];\nconst atcbStates = [];\nconst atcbIcon = {\n trigger: '',\n apple: '',\n google: '',\n ical: '',\n msteams: '',\n ms365: '',\n outlookcom: '',\n yahoo: '',\n atcb: '',\n close: '',\n location: '',\n warning: '',\n checkmark: ''\n};\n\nfunction atcb_patch_config(configData) {\n if (configData.event != null) {\n Object.keys(configData.event).forEach(key => {\n if (key.charAt(0) !== '@') {\n configData[\"\".concat(key)] = configData.event[\"\".concat(key)];\n }\n });\n delete configData.event;\n }\n\n const keyChanges = {\n title: 'name',\n dateStart: 'startDate',\n dateEnd: 'endDate',\n timeStart: 'startTime',\n timeEnd: 'endTime'\n };\n Object.keys(keyChanges).forEach(key => {\n if (configData[keyChanges[\"\".concat(key)]] == null && configData[\"\".concat(key)] != null) {\n configData[keyChanges[\"\".concat(key)]] = configData[\"\".concat(key)];\n }\n });\n return configData;\n}\n\nfunction atcb_decorate_data(data) {\n data = atcb_decorate_data_identifier(data);\n data.subscribe = atcb_decorate_data_subscribe(data);\n data = atcb_decorate_data_rrule(data);\n data = atcb_decorate_data_options(data);\n data.richData = atcb_decorate_data_rich_data(data);\n data.checkmark = atcb_decorate_data_checkmark(data);\n data.background = atcb_decorate_data_background(data);\n data.mindScrolling = atcb_decorate_data_mind_scrolling(data);\n data.branding = atcb_decorate_data_branding(data);\n data = atcb_decorate_data_style(data);\n data = atcb_decorate_data_i18n(data);\n data = atcb_decorate_data_dates(data);\n data = atcb_decorate_data_meta(data);\n data = atcb_decorate_data_extend(data);\n return data;\n}\n\nfunction atcb_decorate_data_identifier(data) {\n if (data.identifier != null && data.identifier != '') {\n data.identifier = 'atcb-btn-' + data.identifier;\n\n if (!/^[\\w-]+$/.test(data.identifier)) {\n data.identifier = '';\n console.warn('Add to Calendar Button generation: identifier invalid - using auto numbers instead');\n }\n }\n\n return data;\n}\n\nfunction atcb_decorate_data_subscribe(data) {\n if (data.subscribe != null && data.subscribe == true) {\n return true;\n }\n\n return false;\n}\n\nfunction atcb_decorate_data_rrule(data) {\n if (data.recurrence != null && data.recurrence != '') {\n data.recurrence = data.recurrence.replace(/\\s+/g, '').toUpperCase();\n\n if (!/^(RRULE:[\\w=;,:+-/\\\\]+|daily|weekly|monthly|yearly)$/im.test(data.recurrence)) {\n data.recurrence = '!wrong rrule format!';\n } else {\n if (/^RRULE:/i.test(data.recurrence)) {\n const rruleParts = data.recurrence.substr(6).split(';');\n const rruleObj = new Object();\n rruleParts.forEach(function (rule) {\n rruleObj[rule.split('=')[0]] = rule.split('=')[1];\n });\n data.recurrence_until = rruleObj.UNTIL ? rruleObj.UNTIL : '';\n data.recurrence_count = rruleObj.COUNT ? rruleObj.COUNT : '';\n data.recurrence_byDay = rruleObj.BYDAY ? rruleObj.BYDAY : '';\n data.recurrence_byMonth = rruleObj.BYMONTH ? rruleObj.BYMONTH : '';\n data.recurrence_byMonthDay = rruleObj.BYMONTHDAY ? rruleObj.BYMONTHDAY : '';\n data.recurrence_interval = rruleObj.INTERVAL ? rruleObj.INTERVAL : 1;\n data.recurrence_frequency = rruleObj.FREQ ? rruleObj.FREQ : '';\n } else {\n if (data.recurrence_interval == null || data.recurrence_interval == '') {\n data.recurrence_interval = 1;\n }\n\n if (data.recurrence_weekstart == null || data.recurrence_weekstart == '' | data.recurrence_weekstart.length > 2) {\n data.recurrence_weekstart = 'MO';\n }\n\n data.recurrence_frequency = data.recurrence;\n data.recurrence = 'RRULE:FREQ=' + data.recurrence + ';WKST=' + data.recurrence_weekstart + ';INTERVAL=' + data.recurrence_interval;\n\n if (data.recurrence_until != null && data.recurrence_until != '') {\n if (data.endTime != null && data.endTime != '') {\n data.recurrence = data.recurrence + ';UNTIL=' + data.recurrence_until.replace(/-/g, '').slice(0, 8) + 'T' + data.endTime.replace(':', '') + '00';\n } else {\n data.recurrence = data.recurrence + ';UNTIL=' + data.recurrence_until.replace(/-/g, '').slice(0, 8);\n }\n }\n\n if (data.recurrence_count != null && data.recurrence_count != '') {\n data.recurrence = data.recurrence + ';COUNT=' + data.recurrence_count;\n }\n\n if (data.recurrence_byDay != null && data.recurrence_byDay != '') {\n data.recurrence = data.recurrence + ';BYDAY=' + data.recurrence_byDay;\n }\n\n if (data.recurrence_byMonth != null && data.recurrence_byMonth != '') {\n data.recurrence = data.recurrence + ';BYMONTH=' + data.recurrence_byMonth;\n }\n\n if (data.recurrence_byMonthDay != null && data.recurrence_byMonthDay != '') {\n data.recurrence = data.recurrence + ';BYMONTHDAY=' + data.recurrence_byMonthDay;\n }\n }\n }\n }\n\n return data;\n}\n\nfunction atcb_decorate_data_options(data) {\n if (isiOS() && data.options.includes('ical') && !data.options.includes('apple')) {\n data.options.push('apple');\n }\n\n const newOptions = [];\n data.optionLabels = [];\n\n for (let i = 0; i < data.options.length; i++) {\n const cleanOption = data.options[\"\".concat(i)].split('|');\n const optionName = cleanOption[0].toLowerCase().replace('microsoft', 'ms').replace('.', '');\n\n const optionLabel = function () {\n if (cleanOption[1] != null) {\n return cleanOption[1];\n }\n\n return '';\n }();\n\n if (isiOS() && atcbiOSInvalidOptions.includes(optionName) || data.recurrence != null && data.recurrence != '' && (!atcbValidRecurrOptions.includes(optionName) || data.recurrence_until != null && data.recurrence_until != '' && (optionName == 'apple' || optionName == 'ical')) || data.subscribe && atcbInvalidSubscribeOptions.includes(optionName)) {\n continue;\n }\n\n newOptions.push(optionName);\n data.optionLabels.push(optionLabel);\n }\n\n data.options = newOptions;\n return data;\n}\n\nfunction atcb_decorate_data_rich_data(data) {\n if (data.richData != null && data.richData == false) {\n return false;\n }\n\n return true;\n}\n\nfunction atcb_decorate_data_checkmark(data) {\n if (data.checkmark != null && data.checkmark == false) {\n return false;\n }\n\n return true;\n}\n\nfunction atcb_decorate_data_background(data) {\n if (data.background != null && data.background == false) {\n return false;\n }\n\n return true;\n}\n\nfunction atcb_decorate_data_branding(data) {\n if (data.branding != null && data.branding == false) {\n return false;\n }\n\n return false;\n}\n\nfunction atcb_decorate_data_mind_scrolling(data) {\n if (data.mindScrolling != null && data.mindScrolling == true) {\n return true;\n }\n\n return false;\n}\n\nfunction atcb_decorate_data_style(data) {\n if (data.listStyle == null || data.listStyle == '') {\n data.listStyle = 'dropdown';\n }\n\n if (data.listStyle === 'modal') {\n data.trigger = 'click';\n }\n\n if (data.buttonStyle != null && data.buttonStyle != '' && data.buttonStyle != 'default') {\n if (data.buttonStyle == 'bubble' || data.buttonStyle == 'text' || data.buttonStyle == 'date') {\n data.trigger = 'click';\n }\n\n if (data.buttonStyle == 'date' && data.listStyle == 'dropdown') {\n data.listStyle = 'overlay';\n }\n } else {\n data.buttonStyle = '';\n }\n\n data.sizes = [];\n data.sizes['l'] = data.sizes['m'] = data.sizes['s'] = 16;\n\n if (data.size != null && data.size != '') {\n const sizeParts = data.size.split('|');\n\n for (let i = 0; i < sizeParts.length; i++) {\n sizeParts[\"\".concat(i)] = parseInt(sizeParts[\"\".concat(i)]);\n }\n\n if (sizeParts[0] >= 0 && sizeParts[0] < 11) {\n data.sizes['l'] = 10 + sizeParts[0];\n }\n\n if (sizeParts.length > 2) {\n if (sizeParts[1] >= 0 && sizeParts[1] < 11) {\n data.sizes['m'] = 10 + sizeParts[1];\n }\n\n if (sizeParts[2] >= 0 && sizeParts[2] < 11) {\n data.sizes['s'] = 10 + sizeParts[2];\n }\n } else if (sizeParts.length == 2) {\n if (sizeParts[1] >= 0 && sizeParts[1] < 11) {\n data.sizes['m'] = data.sizes['s'] = 10 + sizeParts[1];\n }\n }\n }\n\n if (data.lightMode == null || data.lightMode == '') {\n data.lightMode = 'light';\n } else if (data.lightMode != null && data.lightMode != '') {\n const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');\n\n switch (data.lightMode) {\n case 'system':\n if (prefersDarkScheme.matches) {\n data.lightMode = 'dark';\n } else {\n data.lightMode = 'light';\n }\n\n break;\n\n case 'bodyScheme':\n case 'dark':\n break;\n\n default:\n data.lightMode = 'light';\n break;\n }\n }\n\n data.iconButton = true;\n data.iconList = true;\n data.iconModal = true;\n\n if (data.icons != null) {\n data.icons = String(data.icons);\n\n if (data.icons != '') {\n const iconsConfig = data.icons.split('|');\n\n if (iconsConfig[0] == 'false') {\n data.iconButton = false;\n }\n\n if (iconsConfig[1] != null && iconsConfig[1] == 'false') {\n data.iconList = false;\n }\n\n if (iconsConfig[2] != null && iconsConfig[2] == 'false') {\n data.iconModal = false;\n }\n }\n }\n\n data.textLabelButton = true;\n data.textLabelList = true;\n\n if (data.textLabels != null) {\n data.textLabels = String(data.textLabels);\n\n if (data.textLabels != '') {\n const textLabelsConfig = data.textLabels.split('|');\n\n if (textLabelsConfig[0] == 'false') {\n data.textLabelButton = false;\n }\n\n if (textLabelsConfig[1] != null && textLabelsConfig[1] == 'false') {\n data.textLabelList = false;\n }\n }\n }\n\n return data;\n}\n\nfunction atcb_decorate_data_i18n(data) {\n if (data.language == null || data.language == '') {\n data.language = 'en';\n }\n\n if (data.language == 'ar') {\n data.rtl = true;\n } else {\n data.rtl = false;\n }\n\n return data;\n}\n\nfunction atcb_decorate_data_dates(data) {\n if (data.dates != null && data.dates.length > 0) {\n for (let i = 0; i < data.dates.length; i++) {\n if (data.dates[\"\".concat(i)].timeZone == null && data.timeZone != null) {\n data.dates[\"\".concat(i)].timeZone = data.timeZone;\n }\n\n const cleanedUpDates = atcb_date_cleanup(data.dates[\"\".concat(i)]);\n data.dates[\"\".concat(i)].startTime = cleanedUpDates.startTime;\n data.dates[\"\".concat(i)].endTime = cleanedUpDates.endTime;\n data.dates[\"\".concat(i)].timeZone = cleanedUpDates.timeZone;\n data.dates[\"\".concat(i)].timestamp = cleanedUpDates.startTimestamp;\n data.dates[\"\".concat(i)].startDate = atcb_date_calculation(cleanedUpDates.startDate);\n data.dates[\"\".concat(i)].endDate = atcb_date_calculation(cleanedUpDates.endDate);\n }\n } else {\n const cleanedUpDates = atcb_date_cleanup(data);\n data.dates = [];\n data.dates[0] = new Object();\n data.startTime = data.dates[0].startTime = cleanedUpDates.startTime;\n data.endTime = data.dates[0].endTime = cleanedUpDates.endTime;\n data.timeZone = data.dates[0].timeZone = cleanedUpDates.timeZone;\n data.startDate = data.dates[0].startDate = atcb_date_calculation(cleanedUpDates.startDate);\n data.endDate = data.dates[0].endDate = atcb_date_calculation(cleanedUpDates.endDate);\n }\n\n const now = new Date();\n\n if (data.created == null || data.created == '') {\n data.created = atcb_format_datetime(now, 'clean', true);\n }\n\n if (data.updated == null || data.updated == '') {\n data.updated = atcb_format_datetime(now, 'clean', true);\n }\n\n return data;\n}\n\nfunction atcb_decorate_data_meta(data) {\n if (data.status == null || data.status == '') {\n data.status = 'CONFIRMED';\n }\n\n if (data.sequence == null || data.sequence == '') {\n data.sequence = 0;\n }\n\n return data;\n}\n\nfunction atcb_decorate_data_description(data, i) {\n if (data.dates[\"\".concat(i)].description != null && data.dates[\"\".concat(i)].description != '') {\n data.dates[\"\".concat(i)].descriptionHtmlFree = atcb_rewrite_html_elements(data.dates[\"\".concat(i)].description, true);\n data.dates[\"\".concat(i)].description = atcb_rewrite_html_elements(data.dates[\"\".concat(i)].description);\n } else {\n if (data.dates[\"\".concat(i)].description == null && data.description != null && data.description != '') {\n data.dates[\"\".concat(i)].descriptionHtmlFree = atcb_rewrite_html_elements(data.description, true);\n data.dates[\"\".concat(i)].description = atcb_rewrite_html_elements(data.description);\n } else {\n data.dates[\"\".concat(i)].descriptionHtmlFree = data.dates[\"\".concat(i)].description = '';\n }\n }\n\n return data;\n}\n\nfunction atcb_decorate_data_extend(data) {\n for (let i = 0; i < data.dates.length; i++) {\n data = atcb_decorate_data_description(data, i);\n\n if (data.dates[\"\".concat(i)].name == null || data.dates[\"\".concat(i)].name == '') {\n data.dates[\"\".concat(i)].name = data.name;\n }\n\n if (data.dates[\"\".concat(i)].status == null) {\n data.dates[\"\".concat(i)].status = data.status.toUpperCase();\n } else {\n data.dates[\"\".concat(i)].status = data.dates[\"\".concat(i)].status.toUpperCase();\n }\n\n if (data.dates[\"\".concat(i)].sequence == null) {\n data.dates[\"\".concat(i)].sequence = data.sequence;\n }\n\n if (data.dates[\"\".concat(i)].location == null && data.location != null) {\n data.dates[\"\".concat(i)].location = data.location;\n }\n\n if (data.dates[\"\".concat(i)].organizer == null && data.organizer != null) {\n data.dates[\"\".concat(i)].organizer = data.organizer;\n }\n\n if (data.dates[\"\".concat(i)].availability == null && data.availability != null) {\n data.dates[\"\".concat(i)].availability = data.availability.toLowerCase();\n } else if (data.dates[\"\".concat(i)].availability != null) {\n data.dates[\"\".concat(i)].availability = data.dates[\"\".concat(i)].availability.toLowerCase();\n }\n\n if (data.dates[\"\".concat(i)].uid == null) {\n data.dates[\"\".concat(i)].uid = atcb_generate_uuid();\n }\n }\n\n if (data.recurrence != null && data.recurrence != '') {\n data.dates[0].recurrence = data.recurrence;\n }\n\n if (data.dates.length > 1) {\n data.dates.sort((a, b) => a.timestamp - b.timestamp);\n }\n\n return data;\n}\n\nfunction atcb_date_cleanup(dateTimeData) {\n if (dateTimeData.endDate == null || dateTimeData.endDate == '') {\n dateTimeData.endDate = dateTimeData.startDate;\n }\n\n const endpoints = ['start', 'end'];\n endpoints.forEach(function (point) {\n if (dateTimeData[point + 'Date'] != null) {\n dateTimeData[point + 'Date'] = dateTimeData[point + 'Date'].replace(/\\.\\d{3}/, '').replace('Z', '');\n const tmpSplitStartDate = dateTimeData[point + 'Date'].split('T');\n\n if (tmpSplitStartDate[1] != null) {\n dateTimeData[point + 'Date'] = tmpSplitStartDate[0];\n dateTimeData[point + 'Time'] = tmpSplitStartDate[1];\n }\n }\n\n if (dateTimeData[point + 'Time'] != null && dateTimeData[point + 'Time'].length === 8) {\n const timeStr = dateTimeData[point + 'Time'];\n dateTimeData[point + 'Time'] = timeStr.substring(0, timeStr.length - 3);\n }\n\n if (dateTimeData.timeZone == 'currentBrowser') {\n dateTimeData.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n let tmpDate;\n\n if (dateTimeData[point + 'Time'] != null) {\n tmpDate = new Date(dateTimeData[point + 'Date'] + ' ' + dateTimeData[point + 'Time']);\n } else {\n tmpDate = new Date(dateTimeData[point + 'Date']);\n }\n\n dateTimeData[point + 'Timestamp'] = tmpDate.getTime();\n });\n return dateTimeData;\n}\n\nfunction atcb_date_calculation(dateString) {\n const today = new Date();\n const todayString = today.getUTCFullYear() + '-' + (today.getUTCMonth() + 1) + '-' + today.getUTCDate();\n dateString = dateString.replace(/today/gi, todayString);\n const dateStringParts = dateString.split('+');\n const dateParts = dateStringParts[0].split('-');\n\n let newDate = function () {\n if (dateParts[0].length < 4) {\n return new Date(Date.UTC(dateParts[2], dateParts[0] - 1, dateParts[1]));\n }\n\n return new Date(Date.UTC(dateParts[0], dateParts[1] - 1, dateParts[2]));\n }();\n\n if (dateStringParts[1] != null && dateStringParts[1] > 0) {\n newDate.setDate(newDate.getDate() + parseInt(dateStringParts[1]));\n }\n\n return newDate.toISOString().replace(/T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3})Z/g, '');\n}\n\nfunction atcb_check_required(data) {\n if (data.options == null || data.options.length < 1) {\n console.error('Add to Calendar Button generation failed: no valid options set');\n return false;\n }\n\n if (data.name == null || data.name == '') {\n console.error('Add to Calendar Button generation failed: required name information missing');\n return false;\n }\n\n if (data.dates != null && data.dates.length > 0) {\n const requiredMultiField = ['name', 'startDate'];\n const requiredMultiFieldFlex = ['name'];\n return requiredMultiField.every(function (field) {\n for (let i = 0; i < data.dates.length; i++) {\n if (!requiredMultiFieldFlex.includes(\"\".concat(field)) && (data.dates[\"\".concat(i)][\"\".concat(field)] == null || data.dates[\"\".concat(i)][\"\".concat(field)] == '') || requiredMultiFieldFlex.includes(\"\".concat(field)) && (data.dates[\"\".concat(i)][\"\".concat(field)] == null || data.dates[\"\".concat(i)][\"\".concat(field)] == '') && (data[\"\".concat(field)] == null || data[\"\".concat(field)] == '')) {\n console.error('Add to Calendar Button generation failed: required setting missing [dates array object #' + (i + 1) + '/' + data.dates.length + '] => [' + field + ']');\n return false;\n }\n }\n\n return true;\n });\n } else {\n const requiredSingleField = ['startDate'];\n return requiredSingleField.every(function (field) {\n if (data[\"\".concat(field)] == null || data[\"\".concat(field)] == '') {\n console.error('Add to Calendar Button generation failed: required setting missing [' + field + ']');\n return false;\n }\n\n return true;\n });\n }\n}\n\nfunction atcb_validate(data) {\n const msgPrefix = 'Add to Calendar Button generation (' + data.identifier + ')';\n if (!atcb_validate_icsFile(data, msgPrefix)) return false;\n if (!atcb_validate_subscribe(data, msgPrefix)) return false;\n if (!atcb_validate_created(data, msgPrefix)) return false;\n if (!atcb_validate_updated(data, msgPrefix)) return false;\n if (!atcb_validate_options(data, msgPrefix)) return false;\n if (!atcb_validate_date_blocks(data, msgPrefix)) return false;\n if (!atcb_validate_rrule(data, msgPrefix)) return false;\n return true;\n}\n\nfunction atcb_validate_icsFile(data, msgPrefix) {\n let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n let msgSuffix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n\n const icsFileStr = function () {\n if (i != '' && data.dates[\"\".concat(i)].icsFile != null) {\n return data.dates[\"\".concat(i)].icsFile;\n }\n\n if (i == '' && data.icsFile != null) {\n return data.icsFile;\n }\n\n return '';\n }();\n\n if (icsFileStr != '') {\n if (!atcb_secure_url(icsFileStr, false) || !/^https:\\/\\/(.)*\\.ics$/m.test(data.icsFile) && !data.subscribe || !data.icsFile.startsWith('https://') && data.subscribe) {\n console.error(msgPrefix + ' failed: explicit ics file path not valid' + msgSuffix);\n return false;\n }\n }\n\n return true;\n}\n\nfunction atcb_validate_subscribe(data, msgPrefix) {\n if (data.subscribe == true && (data.icsFile == null || data.icsFile == '')) {\n console.error(msgPrefix + ' failed: a subscription calendar requires a valid explicit ics file as well');\n return false;\n }\n\n return true;\n}\n\nfunction atcb_validate_created(data, msgPrefix) {\n if (!/^\\d{8}T\\d{6}Z$/.test(data.created)) {\n console.error(msgPrefix + ' failed: created date format not valid. Needs to be a full ISO-8601 UTC date and time string, formatted YYYYMMDDTHHMMSSZ');\n return false;\n }\n\n return true;\n}\n\nfunction atcb_validate_updated(data, msgPrefix) {\n if (!/^\\d{8}T\\d{6}Z$/.test(data.updated)) {\n console.error(msgPrefix + ' failed: updated date format not valid. Needs to be a full ISO-8601 UTC date and time string, formatted YYYYMMDDTHHMMSSZ');\n return false;\n }\n\n return true;\n}\n\nfunction atcb_validate_options(data, msgPrefix) {\n if (!data.options.every(function (option) {\n if (!atcbOptions.includes(option)) {\n console.error(msgPrefix + ' failed: invalid option [' + option + ']');\n return false;\n }\n\n return true;\n })) {\n return false;\n }\n\n return true;\n}\n\nfunction atcb_validate_date_blocks(data, msgPrefix) {\n for (let i = 0; i < data.dates.length; i++) {\n const msgSuffix = function () {\n if (data.dates.length == 1) {\n return '';\n } else {\n return ' [dates array object #' + (i + 1) + '/' + data.dates.length + '] ';\n }\n }();\n\n if (!atcb_validate_icsFile(data, msgPrefix, i, msgSuffix)) return false;\n if (!atcb_validate_status(data, msgPrefix, i, msgSuffix)) return false;\n if (!atcb_validate_availability(data, msgPrefix, i, msgSuffix)) return false;\n if (!atcb_validate_organizer(data, msgPrefix, i, msgSuffix)) return false;\n if (!atcb_validate_uid(data, msgPrefix, i, msgSuffix)) return false;\n if (!atcb_validate_sequence(data, msgPrefix, i, msgSuffix)) return false;\n if (!atcb_validate_timezone(data, msgPrefix, i, msgSuffix)) return false;\n if (!atcb_validate_datetime(data, msgPrefix, i, msgSuffix)) return false;\n }\n\n return true;\n}\n\nfunction atcb_validate_status(data, msgPrefix, i, msgSuffix) {\n if (data.dates[\"\".concat(i)].status != 'TENTATIVE' && data.dates[\"\".concat(i)].status != 'CONFIRMED' && data.dates[\"\".concat(i)].status != 'CANCELLED') {\n console.error(msgPrefix + ' failed: event status needs to be TENTATIVE, CONFIRMED, or CANCELLED' + msgSuffix);\n return false;\n }\n\n return true;\n}\n\nfunction atcb_validate_availability(data, msgPrefix, i, msgSuffix) {\n if (data.dates[\"\".concat(i)].availability != null && data.dates[\"\".concat(i)].availability != '' && data.dates[\"\".concat(i)].availability != 'free' && data.dates[\"\".concat(i)].availability != 'busy') {\n console.error(msgPrefix + ' failed: event availability needs to be \"free\" or \"busy\"' + msgSuffix);\n return false;\n }\n\n return true;\n}\n\nfunction atcb_validate_organizer(data, msgPrefix, i, msgSuffix) {\n if (data.dates[\"\".concat(i)].organizer != null && data.dates[\"\".concat(i)].organizer != '') {\n const organizerParts = data.dates[\"\".concat(i)].organizer.split('|');\n\n if (organizerParts.length != 2 || organizerParts[0].length > 50 || organizerParts[1].length > 80 || !atcb_validEmail(organizerParts[1])) {\n console.error(msgPrefix + ' failed: organizer needs to match the schema \"NAME|EMAIL\" with a valid email address' + msgSuffix);\n return false;\n }\n }\n\n return true;\n}\n\nfunction atcb_validate_uid(data, msgPrefix, i, msgSuffix) {\n if (!/^(\\w|-){1,254}$/.test(data.dates[\"\".concat(i)].uid)) {\n console.warn(msgPrefix + ': UID not valid. May only contain alpha, digits, and dashes; and be less than 255 characters. Falling back to an automated value!' + msgSuffix);\n data.dates[\"\".concat(i)].uid = atcb_generate_uuid();\n }\n\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(data.dates[\"\".concat(i)].uid)) {\n console.warn(msgPrefix + ': UID is highly recommended to be a hex-encoded random Universally Unique Identifier (UUID)!' + msgSuffix);\n }\n\n return true;\n}\n\nfunction atcb_validate_sequence(data, msgPrefix, i, msgSuffix) {\n if (!/^\\d+$/.test(data.dates[\"\".concat(i)].sequence)) {\n console.log(msgPrefix + ': sequence needs to be a number. Used the default 0 instead' + msgSuffix);\n data.dates[\"\".concat(i)].sequence = 0;\n }\n\n return true;\n}\n\nfunction atcb_validate_timezone(data, msgPrefix, i, msgSuffix) {\n if (data.dates[\"\".concat(i)].timeZone != null && data.dates[\"\".concat(i)].timeZone != '') {\n const validTimeZones = tzlib_get_timezones();\n\n if (!validTimeZones.includes(data.dates[\"\".concat(i)].timeZone)) {\n console.error(msgPrefix + ' failed: invalid time zone given' + msgSuffix);\n return false;\n }\n }\n\n return true;\n}\n\nfunction atcb_validate_datetime(data, msgPrefix, i, msgSuffix) {\n const dates = ['startDate', 'endDate'];\n const newDate = dates;\n\n if (!dates.every(function (date) {\n if (data.dates[\"\".concat(i)][\"\".concat(date)].length !== 10) {\n console.error(msgPrefix + ' failed: date misspelled [-> YYYY-MM-DD]' + msgSuffix);\n return false;\n }\n\n const dateParts = data.dates[\"\".concat(i)][\"\".concat(date)].split('-');\n\n if (dateParts.length < 3 || dateParts.length > 3) {\n console.error(msgPrefix + ' failed: date misspelled [' + date + ': ' + data.dates[\"\".concat(i)][\"\".concat(date)] + ']' + msgSuffix);\n return false;\n }\n\n newDate[\"\".concat(date)] = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);\n return true;\n })) {\n return false;\n }\n\n const times = ['startTime', 'endTime'];\n\n if (!times.every(function (time) {\n if (data.dates[\"\".concat(i)][\"\".concat(time)] != null) {\n if (data.dates[\"\".concat(i)][\"\".concat(time)].length !== 5) {\n console.error(msgPrefix + ' failed: time misspelled [-> HH:MM]' + msgSuffix);\n return false;\n }\n\n const timeParts = data.dates[\"\".concat(i)][\"\".concat(time)].split(':');\n\n if (timeParts.length < 2 || timeParts.length > 2) {\n console.error(msgPrefix + ' failed: time misspelled [' + time + ': ' + data.dates[\"\".concat(i)][\"\".concat(time)] + ']' + msgSuffix);\n return false;\n }\n\n if (timeParts[0] > 23) {\n console.error(msgPrefix + ' failed: time misspelled - hours number too high [' + time + ': ' + timeParts[0] + ']' + msgSuffix);\n return false;\n }\n\n if (timeParts[1] > 59) {\n console.error(msgPrefix + ' failed: time misspelled - minutes number too high [' + time + ': ' + timeParts[1] + ']' + msgSuffix);\n return false;\n }\n\n if (time == 'startTime') {\n newDate.startDate = new Date(newDate.startDate.getTime() + timeParts[0] * 3600000 + timeParts[1] * 60000);\n }\n\n if (time == 'endTime') {\n newDate.endDate = new Date(newDate.endDate.getTime() + timeParts[0] * 3600000 + timeParts[1] * 60000);\n }\n }\n\n return true;\n })) {\n return false;\n }\n\n if (data.dates[\"\".concat(i)].startTime != null && data.dates[\"\".concat(i)].endTime == null || data.dates[\"\".concat(i)].startTime == null && data.dates[\"\".concat(i)].endTime != null) {\n console.error(msgPrefix + ' failed: if you set a starting time, you also need to define an end time' + msgSuffix);\n return false;\n }\n\n if (newDate.endDate < newDate.startDate) {\n console.error(msgPrefix + ' failed: end date before start date' + msgSuffix);\n return false;\n }\n\n return true;\n}\n\nfunction atcb_validate_rrule(data, msgPrefix) {\n if (data.recurrence != null && data.recurrence != '' && data.dates.length > 1) {\n console.error(msgPrefix + ' failed: RRULE and multi-date set at the same time');\n return false;\n }\n\n if (data.recurrence != null && data.recurrence != '' && !/^RRULE:[\\w=;,:+-/\\\\]+$/i.test(data.recurrence)) {\n console.error(msgPrefix + ' failed: RRULE data misspelled');\n return false;\n }\n\n if (data.recurrence_interval != null && data.recurrence_interval != '' && !/^\\d+$/.test(data.recurrence_interval)) {\n console.error(msgPrefix + ' failed: recurrence data (interval) misspelled');\n return false;\n }\n\n if (data.recurrence_until != null && data.recurrence_until != '' && !/^(\\d|-|:)+$/i.test(data.recurrence_until)) {\n console.error(msgPrefix + ' failed: recurrence data (until) misspelled');\n return false;\n }\n\n if (data.recurrence_count != null && data.recurrence_count != '' && !/^\\d+$/.test(data.recurrence_count)) {\n console.error(msgPrefix + ' failed: recurrence data (interval) misspelled');\n return false;\n }\n\n if (data.recurrence_byMonth != null && data.recurrence_byMonth != '' && !/^(\\d|,)+$/.test(data.recurrence_byMonth)) {\n console.error(msgPrefix + ' failed: recurrence data (byMonth) misspelled');\n return false;\n }\n\n if (data.recurrence_byMonthDay != null && data.recurrence_byMonthDay != '' && !/^(\\d|,)+$/.test(data.recurrence_byMonthDay)) {\n console.error(msgPrefix + ' failed: recurrence data (byMonthDay) misspelled');\n return false;\n }\n\n if (data.recurrence_byDay != null && data.recurrence_byDay != '' && !/^(\\d|-|MO|TU|WE|TH|FR|SA|SU|,)+$/im.test(data.recurrence_byDay)) {\n console.error(msgPrefix + ' failed: recurrence data (byDay) misspelled');\n return false;\n }\n\n if (data.recurrence_weekstart != null && data.recurrence_weekstart != '' && !/^(MO|TU|WE|TH|FR|SA|SU)$/im.test(data.recurrence_weekstart)) {\n console.error(msgPrefix + ' failed: recurrence data (weekstart) misspelled');\n return false;\n }\n\n return true;\n}\n\nfunction atcb_toggle(action) {\n let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n let button = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n let keyboardTrigger = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n let generatedButton = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (action == 'open') {\n atcb_open(data, button, keyboardTrigger, generatedButton);\n } else if (action == 'close' || button.classList.contains('atcb-active') || document.querySelector('.atcb-active-modal')) {\n atcb_close(keyboardTrigger);\n } else {\n atcb_open(data, button, keyboardTrigger, generatedButton);\n }\n}\n\nfunction atcb_open(data, button) {\n let keyboardTrigger = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n let generatedButton = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (document.querySelector('.atcb-list') || document.querySelector('.atcb-modal')) return;\n const list = atcb_generate_dropdown_list(data);\n const listWrapper = document.createElement('div');\n listWrapper.classList.add('atcb-list-wrapper');\n\n if (data.textLabelList == false) {\n listWrapper.classList.add('atcb-no-text');\n }\n\n if (button) {\n button.classList.add('atcb-active');\n\n if (data.listStyle === 'modal') {\n button.classList.add('atcb-modal-style');\n list.classList.add('atcb-modal');\n } else {\n listWrapper.appendChild(list);\n listWrapper.classList.add('atcb-dropdown');\n\n if (data.listStyle === 'overlay') {\n listWrapper.classList.add('atcb-dropoverlay');\n }\n\n if (data.mindScrolling) {\n listWrapper.classList.add('atcb-mind-scrolling');\n }\n }\n\n if (generatedButton) {\n list.classList.add('atcb-generated-button');\n }\n } else {\n list.classList.add('atcb-modal');\n }\n\n const bgOverlay = atcb_generate_bg_overlay(data.listStyle, data.trigger, data.lightMode, data.background);\n\n if (data.listStyle === 'modal') {\n document.body.appendChild(bgOverlay);\n bgOverlay.appendChild(list);\n\n if (data.branding) {\n atcb_create_atcbl(false);\n }\n\n atcb_set_sizes(list, data.sizes);\n atcb_manage_body_scroll();\n } else {\n const positionWrapper = document.createElement('div');\n positionWrapper.id = 'atcb-pos-wrapper';\n positionWrapper.style.position = 'absolute';\n positionWrapper.style.top = '0';\n positionWrapper.style.bottom = '0';\n positionWrapper.style.width = '100%';\n document.body.appendChild(positionWrapper);\n positionWrapper.appendChild(listWrapper);\n listWrapper.appendChild(list);\n\n if (data.buttonStyle != '') {\n listWrapper.classList.add('atcb-style-' + data.buttonStyle);\n }\n\n if (data.branding) {\n atcb_create_atcbl();\n }\n\n document.body.appendChild(bgOverlay);\n atcb_set_sizes(list, data.sizes);\n listWrapper.style.display = 'none';\n setTimeout(function () {\n listWrapper.style.display = 'block';\n\n if (data.listStyle === 'dropdown-static') {\n atcb_position_list(button, listWrapper, true);\n } else {\n atcb_position_list(button, listWrapper);\n }\n }, 5);\n }\n\n atcb_set_fullsize(bgOverlay);\n\n if (keyboardTrigger) {\n list.firstChild.focus();\n } else {\n list.firstChild.focus({\n preventScroll: true\n });\n }\n\n list.firstChild.blur();\n}\n\nfunction atcb_close() {\n let keyboardTrigger = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n const allModals = document.querySelectorAll('.atcb-modal[data-modal-nr]');\n\n if (allModals.length > 1) {\n document.querySelectorAll('.atcb-modal[data-modal-nr=\"' + allModals.length + '\"]')[0].remove();\n const nextModal = document.querySelectorAll('.atcb-modal[data-modal-nr=\"' + (allModals.length - 1) + '\"]')[0];\n nextModal.style.display = 'block';\n let focusEl = nextModal;\n const availableButtons = nextModal.getElementsByTagName('button');\n\n if (availableButtons.length > 0) {\n focusEl = availableButtons[0];\n }\n\n focusEl.focus();\n\n if (!keyboardTrigger) {\n focusEl.blur();\n }\n } else {\n const newFocusEl = document.querySelector('.atcb-active, .atcb-active-modal');\n\n if (newFocusEl) {\n newFocusEl.focus({\n preventScroll: true\n });\n\n if (!keyboardTrigger) {\n newFocusEl.blur();\n }\n }\n\n Array.from(document.querySelectorAll('.atcb-active')).forEach(button => {\n button.classList.remove('atcb-active');\n });\n Array.from(document.querySelectorAll('.atcb-active-modal')).forEach(button => {\n button.classList.remove('atcb-active-modal');\n });\n document.body.classList.remove('atcb-modal-no-scroll');\n Array.from(document.querySelectorAll('.atcb-list-wrapper')).concat(Array.from(document.querySelectorAll('.atcb-list'))).concat(Array.from(document.querySelectorAll('.atcb-modal[data-modal-nr]'))).concat(Array.from(document.querySelectorAll('#add-to-calendar-button-reference'))).concat(Array.from(document.querySelectorAll('#atcb-pos-wrapper'))).concat(Array.from(document.querySelectorAll('#atcb-bgoverlay'))).forEach(el => el.remove());\n }\n}\n\nfunction atcb_generate_label(data, parent, type) {\n let icon = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n let text = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';\n let oneOption = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n switch (type) {\n case 'trigger':\n default:\n parent.id = data.identifier;\n\n if (data.trigger === 'click') {\n parent.addEventListener('click', event => {\n event.preventDefault();\n atcb_toggle('auto', data, parent, false, true);\n });\n } else {\n parent.addEventListener('touchend', event => {\n event.preventDefault();\n atcb_toggle('auto', data, parent, false, true);\n });\n parent.addEventListener('mouseenter', atcb_debounce_leading(event => {\n event.preventDefault();\n atcb_toggle('open', data, parent, false, true);\n }));\n }\n\n parent.addEventListener('keyup', function (event) {\n if (event.key == 'Enter') {\n event.preventDefault();\n atcb_toggle('auto', data, parent, true, true);\n }\n });\n break;\n\n case 'apple':\n case 'google':\n case 'ical':\n case 'msteams':\n case 'ms365':\n case 'outlookcom':\n case 'yahoo':\n parent.id = data.identifier + '-' + type;\n parent.addEventListener('click', atcb_debounce(() => {\n oneOption ? parent.blur() : atcb_toggle('close');\n atcb_generate_links(type, data);\n }));\n parent.addEventListener('keyup', function (event) {\n if (event.key == 'Enter') {\n event.preventDefault();\n oneOption ? parent.blur() : atcb_toggle('close');\n atcb_generate_links(type, data, 'all', true);\n }\n });\n break;\n\n case 'close':\n parent.id = data.identifier + '-close';\n parent.addEventListener('click', atcb_debounce(() => {\n atcb_toggle('close');\n }));\n parent.addEventListener('keyup', function (event) {\n if (event.key == 'Enter') {\n event.preventDefault();\n atcb_toggle('close', data, 'all', true);\n }\n });\n break;\n }\n\n if (oneOption) {\n parent.id = data.identifier;\n }\n\n atcb_generate_label_content(data, parent, type, icon, text, oneOption);\n}\n\nfunction atcb_generate_label_content(data, parent, type, icon, text, oneOption) {\n const defaultTriggerText = atcb_translate_hook('Add to Calendar', data);\n\n if (oneOption && text == '') {\n text = defaultTriggerText;\n }\n\n switch (type) {\n case 'trigger':\n default:\n text = text || defaultTriggerText;\n break;\n\n case 'apple':\n text = text || 'Apple';\n break;\n\n case 'google':\n text = text || 'Google';\n break;\n\n case 'ical':\n text = text || atcb_translate_hook('iCal File', data);\n break;\n\n case 'msteams':\n text = text || 'Microsoft Teams';\n break;\n\n case 'ms365':\n text = text || 'Microsoft 365';\n break;\n\n case 'outlookcom':\n text = text || 'Outlook.com';\n break;\n\n case 'yahoo':\n text = text || 'Yahoo';\n break;\n\n case 'close':\n text = atcb_translate_hook('Close', data);\n break;\n }\n\n if (data.buttonStyle == 'date' && (type == 'trigger' || oneOption)) {\n return;\n }\n\n if (icon) {\n const iconEl = document.createElement('span');\n iconEl.classList.add('atcb-icon');\n iconEl.innerHTML = atcbIcon[\"\".concat(type)];\n parent.appendChild(iconEl);\n }\n\n if (type == 'trigger' && data.textLabelButton == true || type != 'trigger' && data.textLabelList == true) {\n const textEl = document.createElement('span');\n textEl.classList.add('atcb-text');\n textEl.textContent = text;\n parent.appendChild(textEl);\n }\n}\n\nfunction atcb_generate_button(button, data) {\n button.textContent = '';\n\n if (data.richData && data.name && data.dates[0].location && data.dates[0].startDate) {\n atcb_generate_rich_data(data, button);\n }\n\n const buttonTriggerWrapper = document.createElement('div');\n buttonTriggerWrapper.classList.add('atcb-button-wrapper');\n buttonTriggerWrapper.classList.add('atcb-' + data.lightMode);\n\n if (data.rtl) {\n buttonTriggerWrapper.classList.add('atcb-rtl');\n }\n\n button.appendChild(buttonTriggerWrapper);\n atcb_set_sizes(buttonTriggerWrapper, data.sizes);\n const buttonTrigger = document.createElement('button');\n buttonTrigger.classList.add('atcb-button');\n\n if (data.textLabelButton == false) {\n buttonTrigger.classList.add('atcb-no-text');\n }\n\n if (data.trigger === 'click') {\n buttonTrigger.classList.add('atcb-click');\n }\n\n if (data.listStyle === 'overlay') {\n buttonTrigger.classList.add('atcb-dropoverlay');\n }\n\n buttonTrigger.type = 'button';\n buttonTriggerWrapper.appendChild(buttonTrigger);\n\n if (data.buttonStyle == 'date') {\n atcb_generate_date_button(data, buttonTrigger);\n }\n\n if (data.options.length === 1) {\n buttonTrigger.classList.add('atcb-single');\n atcb_generate_label(data, buttonTrigger, data.options[0], data.iconButton, data.label, true);\n } else {\n atcb_generate_label(data, buttonTrigger, 'trigger', data.iconButton, data.label);\n const buttonDropdownAnchor = document.createElement('div');\n buttonDropdownAnchor.classList.add('atcb-dropdown-anchor');\n buttonTrigger.appendChild(buttonDropdownAnchor);\n }\n\n if (data.checkmark) {\n const btnCheck = document.createElement('div');\n btnCheck.classList.add('atcb-checkmark');\n btnCheck.innerHTML = atcbIcon['checkmark'];\n buttonTrigger.appendChild(btnCheck);\n }\n\n button.classList.remove('atcb');\n button.classList.add('atcb-initialized');\n\n if (data.inline) {\n button.style.display = 'inline-block';\n } else {\n button.style.display = 'block';\n }\n\n console.log('Add to Calendar Button \"' + data.identifier + '\" created');\n}\n\nfunction atcb_generate_rich_data(data, button) {\n const schemaEl = document.createElement('script');\n schemaEl.type = 'application/ld+json';\n const schemaContentMulti = [];\n\n if (data.dates.length > 1) {\n const parts = [];\n parts.push('\"@context\":\"https://schema.org\"');\n parts.push('\"@type\":\"EventSeries\"');\n parts.push('\"@id\":\"' + data.name.replace(/\\s/g, '') + '\"');\n parts.push('\"name\":\"' + data.name + '\",');\n schemaContentMulti.push('{\\r\\n' + parts.join(',\\r\\n') + '\\r\\n');\n }\n\n const schemaContentFull = [];\n\n for (let i = 0; i < data.dates.length; i++) {\n const schemaContent = [];\n schemaContent.push('\"@context\":\"https://schema.org\"');\n schemaContent.push('\"@type\":\"Event\"');\n\n if (data.dates.length > 1) {\n schemaContent.push('\"@id\":\"' + data.name.replace(/\\s/g, '') + '-' + (i + 1) + '\"');\n }\n\n if (data.dates[\"\".concat(i)].status == 'CANCELLED') {\n schemaContent.push('\"eventStatus\":\"https://schema.org/EventCancelled\"');\n }\n\n schemaContent.push('\"name\":\"' + data.dates[\"\".concat(i)].name + '\"');\n\n if (data.dates[\"\".concat(i)].descriptionHtmlFree) {\n schemaContent.push('\"description\":\"' + data.dates[\"\".concat(i)].descriptionHtmlFree + '\"');\n }\n\n const formattedDate = atcb_generate_time(data.dates[\"\".concat(i)], 'delimiters', 'general', true);\n schemaContent.push('\"startDate\":\"' + formattedDate.start + '\"');\n\n if (formattedDate.duration != null) {\n schemaContent.push('\"duration\":\"' + formattedDate.duration + '\"');\n }\n\n schemaContent.push(data.dates[\"\".concat(i)].location.startsWith('http') ? '\"eventAttendanceMode\":\"https://schema.org/OnlineEventAttendanceMode\",\\r\\n\"location\": {\\r\\n\"@type\":\"VirtualLocation\",\\r\\n\"url\":\"' + data.dates[\"\".concat(i)].location + '\"\\r\\n}' : '\"location\":\"' + data.dates[\"\".concat(i)].location + '\"');\n\n if (data.recurrence != null && data.recurrence != '') {\n schemaContent.push(...atcb_generate_rich_data_recurrence(data, formattedDate));\n } else {\n schemaContent.push('\"endDate\":\"' + formattedDate.end + '\"');\n }\n\n if (data.dates[\"\".concat(i)].organizer != null && data.dates[\"\".concat(i)].organizer != '') {\n const organizerParts = data.dates[\"\".concat(i)].organizer.split('|');\n schemaContent.push('\"organizer\":{\\r\\n\"@type\":\"Person\",\\r\\n\"name\":\"' + organizerParts[0] + '\",\\r\\n\"email\":\"' + organizerParts[1] + '\"\\r\\n}');\n }\n\n const imageData = [];\n\n if (data.images != null) {\n if (Array.isArray(data.images)) {\n for (let i = 0; i < data.images.length; i++) {\n if (atcb_secure_url(data.images[\"\".concat(i)]) && data.images[\"\".concat(i)].startsWith('http')) {\n imageData.push('\"' + data.images[\"\".concat(i)] + '\"');\n }\n }\n }\n } else {\n imageData.push('\"https://add-to-calendar-button.com/demo_assets/img/1x1.png\"');\n imageData.push('\"https://add-to-calendar-button.com/demo_assets/img/4x3.png\"');\n imageData.push('\"https://add-to-calendar-button.com/demo_assets/img/16x9.png\"');\n }\n\n if (imageData.length > 0) {\n schemaContent.push('\"image\":[\\r\\n' + imageData.join(',\\r\\n') + ']');\n }\n\n schemaContentFull.push('{\\r\\n' + schemaContent.join(',\\r\\n') + '\\r\\n}');\n }\n\n if (data.dates.length > 1) {\n schemaEl.textContent = schemaContentMulti.join(',\\r\\n') + '\"subEvents\":[\\r\\n' + schemaContentFull.join(',\\r\\n') + '\\r\\n]\\r\\n}';\n } else {\n schemaEl.textContent = schemaContentFull[0];\n }\n\n button.appendChild(schemaEl);\n}\n\nfunction atcb_generate_rich_data_recurrence(data, formattedDate) {\n const schemaRecurrenceContent = [];\n schemaRecurrenceContent.push('\"eventSchedule\": { \"@type\": \"Schedule\"');\n\n if (data.dates[0].timeZone != null && data.dates[0].timeZone != '') {\n schemaRecurrenceContent.push('\"scheduleTimezone\":\"' + data.dates[0].timeZone + '\"');\n }\n\n const repeatFrequency = 'P' + data.recurrence_interval + data.recurrence_frequency.substr(0, 1);\n schemaRecurrenceContent.push('\"repeatFrequency\":\"' + repeatFrequency + '\"');\n\n if (data.recurrence_byDay != null && data.recurrence_byDay != '') {\n const byDayString = function () {\n if (/\\d/.test(data.recurrence_byDay)) {\n return '\"' + data.recurrence_byDay + '\"';\n } else {\n const byDays = data.recurrence_byDay.split(',');\n const helperMap = {\n MO: 'https://schema.org/Monday',\n TU: 'https://schema.org/Tuesday',\n WE: 'https://schema.org/Wednesday',\n TH: 'https://schema.org/Thursday',\n FR: 'https://schema.org/Friday',\n SA: 'https://schema.org/Saturday',\n SU: 'https://schema.org/Sunday'\n };\n const output = [];\n\n for (let i = 0; i < byDays.length; i++) {\n output.push('\"' + helperMap[byDays[\"\".concat(i)]] + '\"');\n }\n\n return '[' + output.join(',') + ']';\n }\n }();\n\n schemaRecurrenceContent.push('\"byDay\":' + byDayString);\n }\n\n if (data.recurrence_byMonth != null && data.recurrence_byMonth != '') {\n const byMonthString = data.recurrence_byMonth.includes(',') ? '[' + data.recurrence_byMonth + ']' : data.recurrence_byMonth;\n schemaRecurrenceContent.push('\"byMonth\":\"' + byMonthString + '\"');\n }\n\n if (data.recurrence_byMonthDay != null && data.recurrence_byMonthDay != '') {\n const byMonthDayString = data.recurrence_byMonthDay.includes(',') ? '[' + data.recurrence_byMonthDay + ']' : data.recurrence_byMonthDay;\n schemaRecurrenceContent.push('\"byMonthDay\":\"' + byMonthDayString + '\"');\n }\n\n if (data.recurrence_count != null && data.recurrence_count != '') {\n schemaRecurrenceContent.push('\"repeatCount\":\"' + data.recurrence_count + '\"');\n }\n\n if (data.recurrence_until != null && data.recurrence_until != '') {\n schemaRecurrenceContent.push('\"endDate\":\"' + data.recurrence_until + '\"');\n }\n\n if (data.startTime != null && data.startTime != '' && data.endTime != null && data.endTime != '') {\n schemaRecurrenceContent.push('\"startTime\":\"' + data.startTime + ':00\"');\n schemaRecurrenceContent.push('\"endTime\":\"' + data.endTime + ':00\"');\n schemaRecurrenceContent.push('\"duration\":\"' + formattedDate.duration + '\"');\n }\n\n schemaRecurrenceContent.push('\"startDate\":\"' + data.startDate + '\" }');\n return schemaRecurrenceContent;\n}\n\nfunction atcb_generate_dropdown_list(data) {\n const optionsList = document.createElement('div');\n optionsList.classList.add('atcb-list');\n optionsList.classList.add('atcb-' + data.lightMode);\n\n if (data.rtl) {\n optionsList.classList.add('atcb-rtl');\n }\n\n let listCount = 0;\n data.options.forEach(function (option) {\n const optionItem = document.createElement('div');\n optionItem.classList.add('atcb-list-item');\n optionItem.tabIndex = 0;\n listCount++;\n optionItem.dataset.optionNumber = listCount;\n optionsList.appendChild(optionItem);\n atcb_generate_label(data, optionItem, option, data.iconList, data.optionLabels[listCount - 1]);\n });\n\n if (data.listStyle === 'modal') {\n const optionItem = document.createElement('div');\n optionItem.classList.add('atcb-list-item', 'atcb-list-item-close');\n optionItem.tabIndex = 0;\n optionsList.appendChild(optionItem);\n atcb_generate_label(data, optionItem, 'close', data.iconList);\n }\n\n return optionsList;\n}\n\nfunction atcb_generate_bg_overlay() {\n let listStyle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'dropdown';\n let trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n let lightMode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'light';\n let darken = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n const bgOverlay = document.createElement('div');\n bgOverlay.id = 'atcb-bgoverlay';\n\n if (listStyle !== 'modal' && darken) {\n bgOverlay.classList.add('atcb-animate-bg');\n }\n\n if (!darken) {\n bgOverlay.classList.add('atcb-no-bg');\n }\n\n bgOverlay.classList.add('atcb-' + lightMode);\n bgOverlay.tabIndex = 0;\n bgOverlay.addEventListener('click', atcb_debounce(e => {\n if (e.target !== e.currentTarget) return;\n atcb_toggle('close');\n }));\n let fingerMoved = false;\n bgOverlay.addEventListener('touchstart', atcb_debounce_leading(() => fingerMoved = false), {\n passive: true\n });\n bgOverlay.addEventListener('touchmove', atcb_debounce_leading(() => fingerMoved = true), {\n passive: true\n });\n bgOverlay.addEventListener('touchend', atcb_debounce(e => {\n if (fingerMoved !== false || e.target !== e.currentTarget) return;\n atcb_toggle('close');\n }), {\n passive: true\n });\n bgOverlay.addEventListener('focus', atcb_debounce_leading(e => {\n if (e.target !== e.currentTarget) return;\n atcb_toggle('close');\n }));\n\n if (trigger !== 'click') {\n bgOverlay.addEventListener('mousemove', atcb_debounce_leading(e => {\n if (e.target !== e.currentTarget) return;\n atcb_toggle('close');\n }));\n } else {\n bgOverlay.classList.add('atcb-click');\n }\n\n return bgOverlay;\n}\n\nfunction atcb_create_atcbl() {\n /*const atcbL = document.createElement('div');\n atcbL.id = 'add-to-calendar-button-reference';\n atcbL.style.width = '150px';\n atcbL.style.padding = '10px 0';\n atcbL.style.height = 'auto';\n atcbL.style.transform = 'translate3d(0, 0, 0)';\n atcbL.style.zIndex = '15000000';\n setTimeout(() => {\n atcbL.innerHTML =\n '' +\n atcbIcon['atcb'] +\n '';\n }, 500); \n document.body.appendChild(atcbL);\n if (atList) {\n atcbL.style.position = 'absolute';\n } else {\n if (window.innerHeight > 1000 || window.innerWidth > 1000) {\n atcbL.style.position = 'fixed';\n atcbL.style.bottom = '15px';\n atcbL.style.right = '30px';\n }\n }*/\n\n let atList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n}\n\nfunction atcb_create_modal(data) {\n let icon = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n let headline = arguments.length > 2 ? arguments[2] : undefined;\n let content = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n let buttons = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n let subEvents = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n let keyboardTrigger = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;\n\n const bgOverlay = function () {\n const el = document.getElementById('atcb-bgoverlay');\n\n if (!el) {\n return atcb_generate_bg_overlay('modal', 'click', data.lightMode, data.background);\n } else {\n return el;\n }\n }();\n\n bgOverlay.classList.add('atcb-no-animation');\n document.body.appendChild(bgOverlay);\n const modalWrapper = document.createElement('div');\n modalWrapper.classList.add('atcb-modal');\n bgOverlay.appendChild(modalWrapper);\n const modalCount = document.querySelectorAll('.atcb-modal').length;\n modalWrapper.dataset.modalNr = modalCount;\n modalWrapper.tabIndex = 0;\n modalWrapper.focus({\n preventScroll: true\n });\n modalWrapper.blur();\n const parentButton = document.getElementById(data.identifier);\n\n if (parentButton != null) {\n parentButton.classList.add('atcb-active-modal');\n }\n\n const modal = document.createElement('div');\n modal.classList.add('atcb-modal-box');\n modal.classList.add('atcb-' + data.lightMode);\n\n if (data.rtl) {\n modal.classList.add('atcb-rtl');\n }\n\n modalWrapper.appendChild(modal);\n atcb_set_sizes(modal, data.sizes);\n atcb_set_fullsize(bgOverlay);\n\n if (icon != '' && data.iconModal == true) {\n const modalIcon = document.createElement('div');\n modalIcon.classList.add('atcb-modal-icon');\n modalIcon.innerHTML = atcbIcon[\"\".concat(icon)];\n modal.appendChild(modalIcon);\n }\n\n const modalHeadline = document.createElement('div');\n modalHeadline.classList.add('atcb-modal-headline');\n modalHeadline.textContent = headline;\n modal.appendChild(modalHeadline);\n\n if (content != '') {\n const modalContent = document.createElement('div');\n modalContent.classList.add('atcb-modal-content');\n modalContent.innerHTML = content;\n modal.appendChild(modalContent);\n }\n\n if (subEvents.length > 1) {\n if (data.branding) {\n atcb_create_atcbl(false);\n }\n\n const modalsubEventsContent = document.createElement('div');\n modalsubEventsContent.classList.add('atcb-modal-content');\n modal.appendChild(modalsubEventsContent);\n\n for (let i = 1; i < subEvents.length; i++) {\n const modalSubEventButton = document.createElement('button');\n modalSubEventButton.type = 'button';\n modalSubEventButton.id = data.identifier + '-' + subEvents[0] + '-' + i;\n\n if (atcbStates[\"\".concat(data.identifier)][\"\".concat(subEvents[0])][i - 1] > 0) {\n modalSubEventButton.classList.add('atcb-saved');\n }\n\n modalSubEventButton.classList.add('atcb-subevent-btn');\n modalsubEventsContent.appendChild(modalSubEventButton);\n atcb_generate_date_button(data, modalSubEventButton, i);\n\n if (i == 1 && keyboardTrigger) {\n modalSubEventButton.focus();\n }\n\n switch (subEvents[0]) {\n case 'apple':\n case 'google':\n case 'ical':\n case 'msteams':\n case 'ms365':\n case 'outlookcom':\n case 'yahoo':\n modalSubEventButton.addEventListener('click', atcb_debounce(() => {\n atcb_generate_links(subEvents[0], data, subEvents[\"\".concat(i)], keyboardTrigger, true);\n }));\n break;\n }\n }\n }\n\n if (buttons.length == 0) {\n buttons.push({\n type: 'close',\n label: atcb_translate_hook('Close', data)\n });\n }\n\n const modalButtons = document.createElement('div');\n modalButtons.classList.add('atcb-modal-buttons');\n modal.appendChild(modalButtons);\n buttons.forEach((button, index) => {\n let modalButton;\n\n if (button.href != null && button.href != '') {\n modalButton = document.createElement('a');\n modalButton.setAttribute('target', atcbDefaultTarget);\n modalButton.setAttribute('href', button.href);\n modalButton.setAttribute('rel', 'noopener');\n } else {\n modalButton = document.createElement('button');\n modalButton.type = 'button';\n }\n\n modalButton.classList.add('atcb-modal-btn');\n\n if (button.primary) {\n modalButton.classList.add('atcb-modal-btn-primary');\n }\n\n if (button.label == null || button.label == '') {\n button.label = atcb_translate_hook('Click me', data);\n }\n\n modalButton.textContent = button.label;\n modalButtons.appendChild(modalButton);\n\n if (index == 0 && subEvents.length < 2 && keyboardTrigger) {\n modalButton.focus();\n }\n\n switch (button.type) {\n default:\n case 'close':\n modalButton.addEventListener('click', atcb_debounce(() => atcb_close()));\n modalButton.addEventListener('keyup', function (event) {\n if (event.key == 'Enter') {\n atcb_toggle('close', '', '', true);\n }\n });\n break;\n\n case 'yahoo2nd':\n modalButton.addEventListener('click', atcb_debounce(() => {\n atcb_close();\n atcb_subscribe_yahoo_modal_switch(data);\n }));\n modalButton.addEventListener('keyup', function (event) {\n if (event.key == 'Enter') {\n atcb_toggle('close', '', '', true);\n atcb_subscribe_yahoo_modal_switch(data, keyboardTrigger);\n }\n });\n break;\n\n case 'none':\n break;\n }\n });\n\n if (modalCount > 1) {\n const prevModal = document.querySelectorAll('.atcb-modal[data-modal-nr=\"' + (modalCount - 1) + '\"]')[0];\n prevModal.style.display = 'none';\n }\n\n atcb_manage_body_scroll(modalWrapper);\n}\n\nfunction atcb_subscribe_yahoo_modal_switch(data, keyboardTrigger) {\n atcb_set_fully_successful(data.identifier);\n atcb_generate_links('yahoo2nd', data, 'all', keyboardTrigger);\n}\n\nfunction atcb_generate_date_button(data, parent) {\n let subEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'all';\n\n if (subEvent != 'all') {\n subEvent = parseInt(subEvent) - 1;\n } else if (data.dates.length == 1) {\n subEvent = 0;\n }\n\n const fullTimeInfo = function () {\n let startDateInfo, endDateInfo, timeZoneInfoStart, timeZoneInfoEnd;\n let formattedTimeStart = {};\n let formattedTimeEnd = {};\n\n if (subEvent == 'all') {\n formattedTimeStart = atcb_generate_time(data.dates[0]);\n formattedTimeEnd = atcb_generate_time(data.dates[data.dates.length - 1]);\n timeZoneInfoStart = data.dates[0].timeZone;\n timeZoneInfoEnd = data.dates[data.dates.length - 1].timeZone;\n } else {\n formattedTimeStart = atcb_generate_time(data.dates[\"\".concat(subEvent)]);\n formattedTimeEnd = formattedTimeStart;\n timeZoneInfoStart = data.dates[\"\".concat(subEvent)].timeZone;\n timeZoneInfoEnd = timeZoneInfoStart;\n }\n\n startDateInfo = new Date(formattedTimeStart.start);\n endDateInfo = new Date(formattedTimeEnd.end);\n\n if (timeZoneInfoStart == undefined || timeZoneInfoStart == '' || formattedTimeStart.allday) {\n timeZoneInfoStart = 'UTC';\n }\n\n if (timeZoneInfoEnd == undefined || timeZoneInfoEnd == '' || formattedTimeEnd.allday) {\n timeZoneInfoEnd = 'UTC';\n }\n\n let timeString = '';\n let timeZoneInfoStringStart = '';\n let timeZoneInfoStringEnd = '';\n\n if (!formattedTimeStart.allday && Intl.DateTimeFormat().resolvedOptions().timeZone != timeZoneInfoStart && timeZoneInfoStart != timeZoneInfoEnd) {\n timeZoneInfoStringStart = ' (' + timeZoneInfoStart + ')';\n }\n\n if (!formattedTimeEnd.allday && Intl.DateTimeFormat().resolvedOptions().timeZone != timeZoneInfoEnd || timeZoneInfoStart != timeZoneInfoEnd) {\n timeZoneInfoStringEnd = ' (' + timeZoneInfoEnd + ')';\n }\n\n const formatOptionsStart = get_format_options(timeZoneInfoStart);\n const formatOptionsEnd = get_format_options(timeZoneInfoEnd);\n\n if (startDateInfo.toLocaleDateString(data.language, formatOptionsEnd.DateLong) === endDateInfo.toLocaleDateString(data.language, formatOptionsEnd.DateLong)) {\n if (formattedTimeStart.allday) {\n timeString = startDateInfo.toLocaleDateString(data.language, formatOptionsStart.DateShort);\n } else {\n timeString = startDateInfo.toLocaleString(data.language, formatOptionsStart.DateTimeShort) + timeZoneInfoStringStart + ' - ' + endDateInfo.toLocaleTimeString(data.language, formatOptionsEnd.Time) + timeZoneInfoStringEnd;\n }\n } else {\n if (formattedTimeStart.allday) {\n timeString = startDateInfo.toLocaleDateString(data.language, formatOptionsStart.DateShort);\n } else {\n timeString = startDateInfo.toLocaleString(data.language, formatOptionsStart.DateTimeShort);\n }\n\n timeString += timeZoneInfoStringStart + ' - ';\n\n if (formattedTimeEnd.allday) {\n timeString += endDateInfo.toLocaleDateString(data.language, formatOptionsEnd.DateLong);\n } else {\n timeString += endDateInfo.toLocaleString(data.language, formatOptionsEnd.DateTimeLong);\n }\n\n timeString += timeZoneInfoStringEnd;\n }\n\n return timeString;\n }();\n\n const hoverText = function () {\n if (subEvent != 'all' && data.dates[\"\".concat(subEvent)].status == 'CANCELLED') {\n return atcb_translate_hook('Cancelled Date', data) + '
' + atcb_translate_hook('Delete from Calendar', data);\n }\n\n return '+ ' + atcb_translate_hook('Add to Calendar', data);\n }();\n\n const cancelledInfo = function () {\n if (subEvent != 'all' && data.dates[\"\".concat(subEvent)].status == 'CANCELLED') {\n return atcb_translate_hook('Cancelled Date', data);\n }\n\n return '';\n }();\n\n if (subEvent == 'all') {\n subEvent = 0;\n }\n\n const startDate = new Date(atcb_generate_time(data.dates[\"\".concat(subEvent)]).start);\n\n const timeZone = function () {\n if (data.dates[\"\".concat(subEvent)].timeZone != null && data.dates[\"\".concat(subEvent)].timeZone != '') {\n return data.dates[\"\".concat(subEvent)].timeZone;\n } else {\n return 'UTC';\n }\n }();\n\n const btnLeft = document.createElement('div');\n btnLeft.classList.add('atcb-date-btn-left');\n parent.appendChild(btnLeft);\n const btnDay = document.createElement('div');\n btnDay.classList.add('atcb-date-btn-day');\n btnLeft.appendChild(btnDay);\n const btnMonth = document.createElement('div');\n btnMonth.classList.add('atcb-date-btn-month');\n btnDay.textContent = startDate.toLocaleString(data.language, {\n day: 'numeric',\n timeZone: timeZone\n });\n btnMonth.textContent = startDate.toLocaleString(data.language, {\n month: 'short',\n timeZone: timeZone\n });\n btnLeft.appendChild(btnMonth);\n const btnRight = document.createElement('div');\n btnRight.classList.add('atcb-date-btn-right');\n parent.appendChild(btnRight);\n const btnDetails = document.createElement('div');\n btnDetails.classList.add('atcb-date-btn-details');\n btnRight.appendChild(btnDetails);\n const btnHeadline = document.createElement('div');\n btnHeadline.classList.add('atcb-date-btn-headline');\n btnHeadline.textContent = data.dates[\"\".concat(subEvent)].name;\n btnDetails.appendChild(btnHeadline);\n\n if (data.location != null && data.location != '' || cancelledInfo != '') {\n const btnLocation = document.createElement('div');\n btnLocation.classList.add('atcb-date-btn-content');\n btnDetails.appendChild(btnLocation);\n\n if (cancelledInfo != '') {\n btnLocation.textContent = cancelledInfo;\n btnLocation.style.fontWeight = '600';\n btnLocation.style.color = '#9c1a23';\n } else {\n btnLocation.classList.add('atcb-date-btn-content-location');\n const btnLocationIcon = document.createElement('span');\n btnLocationIcon.classList.add('atcb-date-btn-content-icon');\n btnLocationIcon.innerHTML = atcbIcon['location'];\n btnLocation.appendChild(btnLocationIcon);\n const btnLocationText = document.createElement('span');\n btnLocationText.textContent = data.location;\n btnLocation.appendChild(btnLocationText);\n }\n }\n\n const btnDateTime = document.createElement('div');\n btnDateTime.classList.add('atcb-date-btn-content');\n btnDetails.appendChild(btnDateTime);\n const btnDateTimeIcon = document.createElement('span');\n btnDateTimeIcon.classList.add('atcb-date-btn-content-icon');\n btnDateTimeIcon.innerHTML = atcbIcon['ical'];\n btnDateTime.appendChild(btnDateTimeIcon);\n const btnDateTimeText = document.createElement('span');\n btnDateTimeText.textContent = fullTimeInfo;\n btnDateTime.appendChild(btnDateTimeText);\n\n if (data.recurrence != null && data.recurrence != '') {\n const recurSign = document.createElement('span');\n recurSign.classList.add('atcb-date-btn-content-recurr-icon');\n btnDateTime.appendChild(recurSign);\n recurSign.innerHTML = '⟳';\n }\n\n const btnHover = document.createElement('div');\n btnHover.classList.add('atcb-date-btn-hover');\n btnHover.innerHTML = hoverText;\n btnRight.appendChild(btnHover);\n\n if (data.checkmark) {\n const btnCheck = document.createElement('div');\n btnCheck.classList.add('atcb-checkmark');\n btnCheck.innerHTML = atcbIcon['checkmark'];\n parent.appendChild(btnCheck);\n }\n}\n\nfunction get_format_options(timeZoneInfo) {\n return {\n DateShort: {\n timeZone: timeZoneInfo,\n year: 'numeric'\n },\n DateLong: {\n timeZone: timeZoneInfo,\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n },\n DateTimeShort: {\n timeZone: timeZoneInfo,\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hourCycle: 'h23'\n },\n DateTimeLong: {\n timeZone: timeZoneInfo,\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hourCycle: 'h23'\n },\n Time: {\n timeZone: timeZoneInfo,\n hour: 'numeric',\n minute: '2-digit',\n hourCycle: 'h23'\n }\n };\n}\n\nfunction atcb_generate_links(type, data) {\n let subEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'all';\n let keyboardTrigger = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n let multiDateModal = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (subEvent != 'all') {\n subEvent = parseInt(subEvent) - 1;\n } else if (data.dates.length == 1) {\n subEvent = 0;\n }\n\n if (data.subscribe) {\n atcb_generate_subscribe_links(type, data, keyboardTrigger);\n return;\n }\n\n if (isMobile() && (type == 'msteams' || type == 'ms365' || type == 'outlookcom')) {\n type = 'ical';\n }\n\n if (subEvent != 'all') {\n if (data.dates[\"\".concat(subEvent)].status == 'CANCELLED' && type != 'apple' && type != 'ical') {\n atcb_create_modal(data, 'warning', atcb_translate_hook('Cancelled Date', data), atcb_translate_hook('Delete from Calendar', data), [], [], keyboardTrigger);\n } else {\n switch (type) {\n case 'apple':\n case 'ical':\n atcb_generate_ical(data, subEvent, keyboardTrigger);\n break;\n\n case 'google':\n atcb_generate_google(data.dates[\"\".concat(subEvent)]);\n break;\n\n case 'msteams':\n atcb_generate_msteams(data.dates[\"\".concat(subEvent)]);\n break;\n\n case 'ms365':\n atcb_generate_microsoft(data.dates[\"\".concat(subEvent)]);\n break;\n\n case 'outlookcom':\n atcb_generate_microsoft(data.dates[\"\".concat(subEvent)], 'outlook');\n break;\n\n case 'yahoo':\n atcb_generate_yahoo(data.dates[\"\".concat(subEvent)]);\n break;\n }\n }\n\n const subEventButton = document.getElementById(data.identifier + '-' + type + '-' + (subEvent + 1));\n\n if (subEventButton) {\n subEventButton.classList.add('atcb-saved');\n }\n\n atcbStates[\"\".concat(data.identifier)][\"\".concat(type)][\"\".concat(subEvent)]++;\n const filteredStates = atcbStates[\"\".concat(data.identifier)][\"\".concat(type)].filter(function (value) {\n return value < 1;\n });\n\n if (filteredStates.length == 0) {\n atcb_set_fully_successful(data.identifier, multiDateModal);\n }\n\n return;\n }\n\n atcb_generate_multidate_links(type, data, keyboardTrigger, multiDateModal);\n}\n\nfunction atcb_generate_multidate_links(type, data, keyboardTrigger, multiDateModal) {\n if ((type == 'ical' || type == 'apple') && data.dates.every(function (theSubEvent) {\n if (theSubEvent.status == 'CANCELLED' || theSubEvent.organizer != null && theSubEvent.organizer != '') {\n return false;\n }\n\n return true;\n })) {\n atcb_generate_ical(data, 'all', keyboardTrigger);\n\n for (let i = 0; i < atcbStates[\"\".concat(data.identifier)][\"\".concat(type)].length; i++) {\n atcbStates[\"\".concat(data.identifier)][\"\".concat(type)][\"\".concat(i)]++;\n }\n\n atcb_set_fully_successful(data.identifier, multiDateModal);\n return;\n }\n\n if (!multiDateModal) {\n const individualButtons = [type];\n\n for (let i = 0; i < data.dates.length; i++) {\n individualButtons.push(i + 1);\n }\n\n atcb_create_modal(data, type, atcb_translate_hook('modal.multidate.h', data), atcb_translate_hook('modal.multidate.text', data), [], individualButtons, keyboardTrigger);\n }\n}\n\nfunction atcb_generate_subscribe_links(type, data, keyboardTrigger) {\n const adjustedFileUrl = data.icsFile.replace('https://', 'webcal://');\n\n switch (type) {\n case 'apple':\n case 'ical':\n atcb_subscribe_ical(adjustedFileUrl);\n break;\n\n case 'google':\n atcb_subscribe_google(adjustedFileUrl.replace('webcal://calendar.google.com/calendar/u/2?cid=', ''));\n break;\n\n case 'ms365':\n atcb_subscribe_microsoft(adjustedFileUrl, data.name);\n break;\n\n case 'outlookcom':\n atcb_subscribe_microsoft(adjustedFileUrl, data.name, 'outlook');\n break;\n\n case 'yahoo':\n atcb_copy_to_clipboard(data.icsFile);\n atcb_create_modal(data, 'yahoo', atcb_translate_hook('modal.subscribe.yahoo.h', data), atcb_translate_hook('modal.clipboard.text', data) + '
' + atcb_translate_hook('modal.subscribe.yahoo.text', data), [{\n label: atcb_translate_hook('Open Yahoo Calendar', data),\n primary: true,\n type: 'yahoo2nd',\n href: 'https://www.yahoo.com/calendar'\n }, {\n label: atcb_translate_hook('Cancel', data)\n }], [], keyboardTrigger);\n return;\n\n case 'yahoo2nd':\n atcb_copy_to_clipboard(data.icsFile);\n atcb_create_modal(data, 'yahoo', atcb_translate_hook('modal.subscribe.yahoo.h', data), atcb_translate_hook('modal.clipboard.text', data) + '
' + atcb_translate_hook('modal.subscribe.yahoo.text', data), [{\n label: atcb_translate_hook('Open Yahoo Calendar', data),\n type: 'none',\n href: 'https://www.yahoo.com/calendar'\n }, {\n label: atcb_translate_hook('Cancel', data)\n }], [], keyboardTrigger);\n return;\n }\n\n atcb_set_fully_successful(data.identifier);\n}\n\nfunction atcb_set_fully_successful(id, multiDateModal) {\n const trigger = document.getElementById(id);\n\n if (trigger) {\n trigger.classList.add('atcb-saved');\n }\n\n atcb_saved_hook();\n\n if (multiDateModal && document.querySelectorAll('.atcb-modal[data-modal-nr]').length < 2) {\n atcb_toggle('close');\n }\n}\n\nfunction atcb_subscribe_ical(fileUrl) {\n atcb_open_cal_url(fileUrl);\n}\n\nfunction atcb_subscribe_google(fileUrl) {\n const baseUrl = 'https://calendar.google.com/calendar/r?cid=';\n atcb_open_cal_url(baseUrl + fileUrl);\n}\n\nfunction atcb_subscribe_microsoft(fileUrl, calName) {\n let type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '365';\n const urlParts = [];\n\n const baseUrl = function () {\n if (type == 'outlook') {\n return 'https://outlook.live.com/calendar/0/addfromweb/?';\n } else {\n return 'https://outlook.office.com/calendar/0/addfromweb/?';\n }\n }();\n\n urlParts.push('url=' + encodeURIComponent(fileUrl));\n urlParts.push('name=' + encodeURIComponent(calName));\n atcb_open_cal_url(baseUrl + urlParts.join('&'));\n}\n\nfunction atcb_generate_google(data) {\n const urlParts = [];\n urlParts.push('https://calendar.google.com/calendar/render?action=TEMPLATE');\n const formattedDate = atcb_generate_time(data, 'clean', 'google');\n urlParts.push('dates=' + encodeURIComponent(formattedDate.start) + '%2F' + encodeURIComponent(formattedDate.end));\n\n if (data.timeZone != null && data.timeZone != '' && !/(GMT[+|-]\\d{1,2}|Etc\\/U|Etc\\/Zulu|CET|CST6CDT|EET|EST|EST5EDT|MET|MST|MST7MDT|PST8PDT|WET)/i.test(data.timeZone)) {\n urlParts.push('ctz=' + data.timeZone);\n }\n\n if (data.name != null && data.name != '') {\n urlParts.push('text=' + encodeURIComponent(data.name));\n }\n\n const tmpDataDescription = [];\n\n if (data.description != null && data.description != '') {\n tmpDataDescription.push(data.description);\n }\n\n if (data.location != null && data.location != '') {\n urlParts.push('location=' + encodeURIComponent(data.location));\n\n if (isiOS()) {\n if (tmpDataDescription.length > 0) {\n tmpDataDescription.push('

');\n }\n\n tmpDataDescription.push('📍: ' + data.location);\n }\n }\n\n if (tmpDataDescription.length > 0) {\n urlParts.push('details=' + encodeURIComponent(tmpDataDescription.join()));\n }\n\n if (data.recurrence != null && data.recurrence != '') {\n urlParts.push('recur=' + encodeURIComponent(data.recurrence));\n }\n\n if (data.availability != null && data.availability != '') {\n const availabilityPart = function () {\n if (data.availability == 'free') {\n return 'crm=AVAILABLE&trp=false';\n }\n\n return 'crm=BUSY&trp=true';\n }();\n\n urlParts.push(availabilityPart);\n }\n\n urlParts.push('uid=' + encodeURIComponent(data.uid));\n atcb_open_cal_url(urlParts.join('&'));\n}\n\nfunction atcb_generate_yahoo(data) {\n const urlParts = [];\n urlParts.push('https://calendar.yahoo.com/?v=60');\n const formattedDate = atcb_generate_time(data, 'clean');\n urlParts.push('st=' + encodeURIComponent(formattedDate.start) + '&et=' + encodeURIComponent(formattedDate.end));\n\n if (formattedDate.allday) {\n urlParts.push('dur=allday');\n }\n\n if (data.name != null && data.name != '') {\n urlParts.push('title=' + encodeURIComponent(data.name));\n }\n\n if (data.location != null && data.location != '') {\n urlParts.push('in_loc=' + encodeURIComponent(data.location));\n }\n\n if (data.descriptionHtmlFree != null && data.descriptionHtmlFree != '') {\n urlParts.push('desc=' + encodeURIComponent(data.descriptionHtmlFree));\n }\n\n atcb_open_cal_url(urlParts.join('&'));\n}\n\nfunction atcb_generate_microsoft(data) {\n let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '365';\n const urlParts = [];\n const basePath = '/calendar/0/deeplink/compose?path=%2Fcalendar%2Faction%2Fcompose&rru=addevent';\n\n const baseUrl = function () {\n if (type == 'outlook') {\n return 'https://outlook.live.com' + basePath;\n } else {\n return 'https://outlook.office.com' + basePath;\n }\n }();\n\n urlParts.push(baseUrl);\n const formattedDate = atcb_generate_time(data, 'delimiters', 'microsoft');\n urlParts.push('startdt=' + encodeURIComponent(formattedDate.start));\n urlParts.push('enddt=' + encodeURIComponent(formattedDate.end));\n\n if (formattedDate.allday) {\n urlParts.push('allday=true');\n }\n\n if (data.name != null && data.name != '') {\n urlParts.push('subject=' + encodeURIComponent(data.name));\n }\n\n if (data.location != null && data.location != '') {\n urlParts.push('location=' + encodeURIComponent(data.location));\n }\n\n if (data.description != null && data.description != '') {\n urlParts.push('body=' + encodeURIComponent(data.description.replace(/\\n/g, '
')));\n }\n\n urlParts.push('uid=' + encodeURIComponent(data.uid));\n atcb_open_cal_url(urlParts.join('&'));\n}\n\nfunction atcb_generate_msteams(data) {\n const urlParts = [];\n const baseUrl = 'https://teams.microsoft.com/l/meeting/new?';\n const formattedDate = atcb_generate_time(data, 'delimiters', 'microsoft');\n urlParts.push('startTime=' + encodeURIComponent(formattedDate.start));\n urlParts.push('endTime=' + encodeURIComponent(formattedDate.end));\n\n if (data.name != null && data.name != '') {\n urlParts.push('subject=' + encodeURIComponent(data.name));\n }\n\n let locationString = '';\n\n if (data.location != null && data.location != '') {\n locationString = encodeURIComponent(data.location);\n urlParts.push('location=' + locationString);\n locationString += ' // ';\n }\n\n if (data.descriptionHtmlFree != null && data.descriptionHtmlFree != '') {\n urlParts.push('content=' + locationString + encodeURIComponent(data.descriptionHtmlFree));\n }\n\n urlParts.push('uid=' + encodeURIComponent(data.uid));\n atcb_open_cal_url(baseUrl + urlParts.join('&'));\n}\n\nfunction atcb_open_cal_url(url) {\n let target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (target == '') {\n target = atcbDefaultTarget;\n }\n\n if (atcb_secure_url(url)) {\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n window.open(url, target).focus();\n }\n}\n\nfunction atcb_generate_ical(data) {\n let subEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';\n let keyboardTrigger = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (subEvent != 'all') {\n subEvent = parseInt(subEvent);\n }\n\n const filename = atcb_determine_ical_filename(data, subEvent);\n\n const givenIcsFile = function () {\n if (subEvent != 'all' && data.dates[\"\".concat(subEvent)].icsFile != null && data.dates[\"\".concat(subEvent)].icsFile != '') {\n return data.dates[\"\".concat(subEvent)].icsFile;\n }\n\n if (data.icsFile != null && data.icsFile != '') {\n return data.icsFile;\n }\n\n return '';\n }();\n\n if (givenIcsFile != '' && (!isiOS() || !isWebView())) {\n atcb_save_file(givenIcsFile, filename);\n return;\n }\n\n const now = new Date();\n const ics_lines = ['BEGIN:VCALENDAR', 'VERSION:2.0'];\n ics_lines.push('PRODID:-// https://add-to-calendar-pro.com // button v' + atcbVersion + ' //EN');\n ics_lines.push('CALSCALE:GREGORIAN');\n\n if (subEvent == 'all') {\n ics_lines.push('METHOD:PUBLISH');\n } else {\n if (data.dates[\"\".concat(subEvent)].status != null && data.dates[\"\".concat(subEvent)].status == 'CANCELLED') {\n ics_lines.push('METHOD:CANCEL');\n } else {\n if (data.dates[\"\".concat(subEvent)].organizer != null && data.dates[\"\".concat(subEvent)].organizer != '') {\n ics_lines.push('METHOD:REQUEST');\n } else {\n ics_lines.push('METHOD:PUBLISH');\n }\n }\n }\n\n const usedTimeZones = [];\n\n const loopStart = function () {\n if (subEvent != 'all') {\n return subEvent;\n }\n\n return 0;\n }();\n\n const loopEnd = function () {\n if (subEvent != 'all') {\n return subEvent;\n }\n\n return data.dates.length - 1;\n }();\n\n for (let i = loopStart; i <= loopEnd; i++) {\n const formattedDate = atcb_generate_time(data.dates[\"\".concat(i)], 'clean', 'ical');\n\n const timeAddon = function () {\n if (formattedDate.allday) {\n return ';VALUE=DATE';\n }\n\n if (data.dates[\"\".concat(i)].timeZone != null && data.dates[\"\".concat(i)].timeZone != '') {\n const timeZoneBlock = tzlib_get_ical_block(data.dates[\"\".concat(i)].timeZone);\n\n if (!usedTimeZones.includes(data.dates[\"\".concat(i)].timeZone)) {\n ics_lines.push(timeZoneBlock[0]);\n }\n\n usedTimeZones.push(data.dates[\"\".concat(i)].timeZone);\n return ';' + timeZoneBlock[1];\n }\n }();\n\n ics_lines.push('BEGIN:VEVENT');\n ics_lines.push('UID:' + data.dates[\"\".concat(i)].uid);\n ics_lines.push('DTSTAMP:' + atcb_format_datetime(now, 'clean', true));\n ics_lines.push('DTSTART' + timeAddon + ':' + formattedDate.start);\n ics_lines.push('DTEND' + timeAddon + ':' + formattedDate.end);\n ics_lines.push('SUMMARY:' + data.dates[\"\".concat(i)].name.replace(/.{65}/g, '$&' + '\\r\\n '));\n\n if (data.dates[\"\".concat(i)].descriptionHtmlFree != null && data.dates[\"\".concat(i)].descriptionHtmlFree != '') {\n ics_lines.push('DESCRIPTION:' + data.dates[\"\".concat(i)].descriptionHtmlFree.replace(/\\n/g, '\\\\n').replace(/.{60}/g, '$&' + '\\r\\n ') // adjusting for intended line breaks + making sure it does not exceed 75 characters per line\n );\n }\n\n if (data.dates[\"\".concat(i)].description != null && data.dates[\"\".concat(i)].description != '') {\n ics_lines.push('X-ALT-DESC;FMTTYPE=text/html:\\r\\n \\r\\n \\r\\n ' + data.dates[\"\".concat(i)].description.replace(/\\n/g, '
').replace(/.{60}/g, '$&' + '\\r\\n ') + '\\r\\n ');\n }\n\n if (data.dates[\"\".concat(i)].location != null && data.dates[\"\".concat(i)].location != '') {\n ics_lines.push('LOCATION:' + data.dates[\"\".concat(i)].location);\n }\n\n if (data.dates[\"\".concat(i)].organizer != null && data.dates[\"\".concat(i)].organizer != '') {\n const organizerParts = data.dates[\"\".concat(i)].organizer.split('|');\n ics_lines.push('ORGANIZER;CN=' + organizerParts[0] + ':MAILTO:' + organizerParts[1]);\n }\n\n if (data.recurrence != null && data.recurrence != '') {\n ics_lines.push(data.recurrence);\n }\n\n if (data.dates[\"\".concat(i)].availability != null && data.dates[\"\".concat(i)].availability != '') {\n const transpVal = function () {\n if (data.dates[\"\".concat(i)].availability == 'free') {\n return 'TRANSPARENT';\n }\n\n return 'OPAQUE';\n }();\n\n ics_lines.push('TRANSP:' + transpVal);\n }\n\n ics_lines.push('SEQUENCE:' + data.dates[\"\".concat(i)].sequence);\n ics_lines.push('STATUS:' + data.dates[\"\".concat(i)].status);\n ics_lines.push('CREATED:' + data.created);\n ics_lines.push('LAST-MODIFIED:' + data.updated);\n ics_lines.push('END:VEVENT');\n }\n\n ics_lines.push('END:VCALENDAR');\n\n const dataUrl = function () {\n if (givenIcsFile != '') {\n return givenIcsFile;\n }\n\n return 'data:text/calendar;charset=utf-8,' + encodeURIComponent(ics_lines.join('\\r\\n'));\n }();\n\n if (isiOS() && isChrome() || isWebView() && (isiOS() || isAndroid() && isProblematicWebView())) {\n atcb_ical_copy_note(dataUrl, data, keyboardTrigger);\n return;\n }\n\n atcb_save_file(dataUrl, filename);\n}\n\nfunction atcb_determine_ical_filename(data, subEvent) {\n const filenameSuffix = function () {\n if (subEvent != 'all' && subEvent != 0) {\n return '-' + parseInt(subEvent) + 1;\n }\n\n return '';\n }();\n\n if (data.iCalFileName != null && data.iCalFileName != '') {\n return data.iCalFileName + filenameSuffix;\n }\n\n if (data.icsFile != null && data.icsFile != '') {\n const filenamePart = data.icsFile.split('/').pop().split('.')[0];\n\n if (filenamePart != '') {\n return filenamePart + filenameSuffix;\n }\n }\n\n return 'event-to-save-in-my-calendar' + filenameSuffix;\n}\n\nfunction atcb_ical_copy_note(dataUrl, data, keyboardTrigger) {\n atcb_copy_to_clipboard(dataUrl);\n\n if (isiOS() && isChrome()) {\n atcb_create_modal(data, 'warning', atcb_translate_hook('modal.crios.ical.h', data), atcb_translate_hook('modal.crios.ical.text', data) + '
' + atcb_translate_hook('modal.clipboard.text', data) + '
' + atcb_translate_hook('modal.crios.ical.steps', data), [], [], keyboardTrigger);\n return;\n }\n\n atcb_create_modal(data, 'warning', atcb_translate_hook('modal.webview.ical.h', data), atcb_translate_hook('modal.webview.ical.text', data) + '
' + atcb_translate_hook('modal.clipboard.text', data) + '
' + atcb_translate_hook('modal.webview.ical.steps', data), [], [], keyboardTrigger);\n}\n\nfunction atcb_saved_hook() {\n console.log('Event saved. Looking forward to it!');\n}\n\nfunction atcb_save_file(file, filename) {\n try {\n const save = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n save.rel = 'noopener';\n save.href = file;\n\n if (isMobile()) {\n save.target = '_self';\n } else {\n save.target = '_blank';\n }\n\n save.download = filename + '.ics';\n const evt = new MouseEvent('click', {\n view: window,\n button: 0,\n bubbles: true,\n cancelable: false\n });\n save.dispatchEvent(evt);\n (window.URL || window.webkitURL).revokeObjectURL(save.href);\n } catch (e) {\n console.error(e);\n }\n}\n\nfunction atcb_generate_time(data) {\n let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'delimiters';\n let targetCal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'general';\n let addTimeZoneOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (data.startTime != null && data.startTime != '' && data.endTime != null && data.endTime != '') {\n const newStartDate = new Date(data.startDate + 'T' + data.startTime + ':00.000+00:00');\n const newEndDate = new Date(data.endDate + 'T' + data.endTime + ':00.000+00:00');\n const durationMS = newEndDate - newStartDate;\n const durationHours = Math.floor(durationMS / 1000 / 60 / 60);\n const durationMinutes = Math.floor((durationMS - durationHours * 60 * 60 * 1000) / 1000 / 60 % 60);\n\n const durationString = function () {\n if (durationHours < 10) {\n return '0' + durationHours + ':' + ('0' + durationMinutes).slice(-2);\n }\n\n return durationHours + ':' + ('0' + durationMinutes).slice(-2);\n }();\n\n if ((data.timeZone == null || data.timeZone != null && data.timeZone == '') && addTimeZoneOffset) {\n return {\n start: newStartDate.toISOString().replace('.000Z', '+00:00'),\n end: newEndDate.toISOString().replace('.000Z', '+00:00'),\n duration: durationString,\n allday: false\n };\n }\n\n if (data.timeZone != null && data.timeZone != '') {\n if (targetCal == 'ical' || targetCal == 'google' && !/(GMT[+|-]\\d{1,2}|Etc\\/U|Etc\\/Zulu|CET|CST6CDT|EET|EST|EST5EDT|MET|MST|MST7MDT|PST8PDT|WET)/i.test(data.timeZone)) {\n return {\n start: atcb_format_datetime(newStartDate, 'clean', true, true),\n end: atcb_format_datetime(newEndDate, 'clean', true, true),\n duration: durationString,\n allday: false\n };\n }\n\n const offsetStart = tzlib_get_offset(data.timeZone, data.startDate, data.startTime);\n const offsetEnd = tzlib_get_offset(data.timeZone, data.endDate, data.endTime);\n\n if (addTimeZoneOffset) {\n const formattedOffsetStart = offsetStart.slice(0, 3) + ':' + offsetStart.slice(3);\n const formattedOffsetEnd = offsetEnd.slice(0, 3) + ':' + offsetEnd.slice(3);\n return {\n start: newStartDate.toISOString().replace('.000Z', formattedOffsetStart),\n end: newEndDate.toISOString().replace('.000Z', formattedOffsetEnd),\n duration: durationString,\n allday: false\n };\n }\n\n const calcOffsetStart = parseInt(offsetStart[0] + 1) * -1 * ((parseInt(offsetStart.substr(1, 2)) * 60 + parseInt(offsetStart.substr(3, 2))) * 60 * 1000);\n const calcOffsetEnd = parseInt(offsetEnd[0] + 1) * -1 * ((parseInt(offsetEnd.substr(1, 2)) * 60 + parseInt(offsetEnd.substr(3, 2))) * 60 * 1000);\n newStartDate.setTime(newStartDate.getTime() + calcOffsetStart);\n newEndDate.setTime(newEndDate.getTime() + calcOffsetEnd);\n }\n\n return {\n start: atcb_format_datetime(newStartDate, style),\n end: atcb_format_datetime(newEndDate, style),\n duration: durationString,\n allday: false\n };\n } else {\n const startDate = data.startDate.split('-');\n const endDate = data.endDate.split('-');\n const newStartDate = new Date(Date.UTC(startDate[0], startDate[1] - 1, startDate[2], 12, 0, 0));\n const newEndDate = new Date(Date.UTC(endDate[0], endDate[1] - 1, endDate[2], 12, 0, 0));\n\n if (targetCal == 'google' || targetCal == 'microsoft' || targetCal == 'ical') {\n newEndDate.setDate(newEndDate.getDate() + 1);\n }\n\n return {\n start: atcb_format_datetime(newStartDate, style, false),\n end: atcb_format_datetime(newEndDate, style, false),\n allday: true\n };\n }\n}\n\nfunction atcb_format_datetime(datetime) {\n let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'delimiters';\n let includeTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n let removeZ = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n const regex = function () {\n if (includeTime) {\n if (style == 'clean') {\n return /(-|:|(\\.\\d{3}))/g;\n }\n\n return /(\\.\\d{3})/g;\n }\n\n if (style == 'clean') {\n return /(-|T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3})Z)/g;\n }\n\n return /T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3})Z/g;\n }();\n\n const output = removeZ ? datetime.toISOString().replace(regex, '').replace('Z', '') : datetime.toISOString().replace(regex, '');\n return output;\n}\n\nfunction atcb_secure_content(data) {\n let isJSON = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const toClean = isJSON ? JSON.stringify(data) : data;\n const cleanedUp = toClean.replace(/(<(?!br)([^>]+)>)/gi, '');\n\n if (isJSON) {\n return JSON.parse(cleanedUp);\n } else {\n return cleanedUp;\n }\n}\n\nfunction atcb_secure_url(url) {\n let throwError = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (url.match(/((\\.\\.\\/)|(\\.\\.\\\\)|(%2e%2e%2f)|(%252e%252e%252f)|(%2e%2e\\/)|(%252e%252e\\/)|(\\.\\.%2f)|(\\.\\.%252f)|(%2e%2e%5c)|(%252e%252e%255c)|(%2e%2e\\\\)|(%252e%252e\\\\)|(\\.\\.%5c)|(\\.\\.%255c)|(\\.\\.%c0%af)|(\\.\\.%25c0%25af)|(\\.\\.%c1%9c)|(\\.\\.%25c1%259c))/gi)) {\n if (throwError) {\n console.error('Seems like the generated URL includes at least one security issue and got blocked. Please check the calendar button parameters!');\n }\n\n return false;\n } else {\n return true;\n }\n}\n\nfunction atcb_validEmail(email) {\n let mx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!/^.{0,70}@.{1,30}\\.[\\w.]{2,9}$/.test(email)) {\n return false;\n }\n\n if (mx) {\n console.log('Testing for MX records not yet available');\n }\n\n return true;\n}\n\nfunction atcb_rewrite_html_elements(content) {\n let clear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n content = content.replace(//gi, '\\n');\n\n if (clear) {\n content = content.replace(/\\[(|\\/)(url|br|hr|p|b|strong|u|i|em|li|ul|ol|h\\d)\\]|((\\|.*)\\[\\/url\\])/gi, '');\n } else {\n content = content.replace(/\\[(\\/|)(br|hr|p|b|strong|u|i|em|li|ul|ol|h\\d)\\]/gi, '<$1$2>');\n content = content.replace(/\\[url\\]([\\w&$+.,:;=~!*'?@^%#|\\s\\-()/]*)\\[\\/url\\]/gi, function (match, p1) {\n const urlText = p1.split('|');\n\n const text = function () {\n if (urlText.length > 1 && urlText[1] != '') {\n return urlText[1];\n } else {\n return urlText[0];\n }\n }();\n\n return '' + text + '';\n });\n }\n\n return content;\n}\n\nfunction atcb_position_list(trigger, list) {\n let blockUpwards = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n let resize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n let anchorSet = false;\n const originalTrigger = trigger;\n\n if (trigger.querySelector('.atcb-dropdown-anchor') !== null) {\n trigger = trigger.querySelector('.atcb-dropdown-anchor');\n anchorSet = true;\n }\n\n let triggerDim = trigger.getBoundingClientRect();\n let listDim = list.getBoundingClientRect();\n const btnDim = originalTrigger.getBoundingClientRect();\n const viewportHeight = document.documentElement.clientHeight;\n const posWrapper = document.getElementById('atcb-pos-wrapper');\n\n if (posWrapper !== null) {\n posWrapper.style.height = viewportHeight + 'px';\n }\n\n if (anchorSet === true && !list.classList.contains('atcb-dropoverlay')) {\n if (list.classList.contains('atcb-dropup') && resize || !blockUpwards && !resize && triggerDim.top + listDim.height > viewportHeight - 20 && 2 * btnDim.top + btnDim.height - triggerDim.top - listDim.height > 20) {\n originalTrigger.classList.add('atcb-dropup');\n list.classList.add('atcb-dropup');\n list.style.bottom = 2 * viewportHeight - (viewportHeight + (btnDim.top + (btnDim.top + btnDim.height - triggerDim.top))) - window.scrollY + 'px';\n } else {\n list.style.top = window.scrollY + triggerDim.top + 'px';\n\n if (originalTrigger.classList.contains('atcb-dropup')) {\n originalTrigger.classList.remove('atcb-dropup');\n }\n }\n\n triggerDim = trigger.getBoundingClientRect();\n\n if (list.classList.contains('atcb-style-bubble') || list.classList.contains('atcb-style-text')) {\n list.style.minWidth = triggerDim.width + 'px';\n } else {\n list.style.width = triggerDim.width + 'px';\n }\n\n listDim = list.getBoundingClientRect();\n list.style.left = triggerDim.left - (listDim.width - triggerDim.width) / 2 + 'px';\n } else {\n list.style.minWidth = btnDim.width + 20 + 'px';\n listDim = list.getBoundingClientRect();\n list.style.top = window.scrollY + btnDim.top + btnDim.height / 2 - listDim.height / 2 + 'px';\n list.style.left = btnDim.left - (listDim.width - btnDim.width) / 2 + 'px';\n }\n\n const atcbL = document.getElementById('add-to-calendar-button-reference');\n\n if (atcbL) {\n if (originalTrigger.classList.contains('atcb-dropup')) {\n atcbL.style.top = window.scrollY + btnDim.top + btnDim.height + 'px';\n atcbL.style.left = btnDim.left + (btnDim.width - 150) / 2 + 'px';\n } else {\n listDim = list.getBoundingClientRect();\n\n if (originalTrigger.classList.contains('atcb-dropoverlay') || !anchorSet) {\n atcbL.style.top = window.scrollY + listDim.top + listDim.height + 'px';\n } else {\n atcbL.style.top = window.scrollY + triggerDim.top + listDim.height + 'px';\n }\n\n atcbL.style.left = listDim.left + (listDim.width - 150) / 2 + 'px';\n }\n }\n}\n\nfunction atcb_manage_body_scroll() {\n let modalObj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n const modal = function () {\n if (modalObj != null) {\n return modalObj;\n } else {\n const allModals = document.querySelectorAll('.atcb-modal');\n\n if (allModals.length == 0) {\n return null;\n }\n\n return allModals[allModals.length - 1];\n }\n }();\n\n if (modal == null) {\n return;\n }\n\n const modalDim = modal.getBoundingClientRect();\n\n if (modalDim.height + 100 > window.innerHeight) {\n document.body.classList.add('atcb-modal-no-scroll');\n } else {\n document.body.classList.remove('atcb-modal-no-scroll');\n }\n}\n\nfunction atcb_set_fullsize(el) {\n el.style.width = window.innerWidth + 'px';\n el.style.height = window.innerHeight + 100 + 'px';\n}\n\nfunction atcb_set_sizes(el, size) {\n el.style.setProperty('--base-font-size-l', size.l + 'px');\n el.style.setProperty('--base-font-size-m', size.m + 'px');\n el.style.setProperty('--base-font-size-s', size.s + 'px');\n}\n\nfunction atcb_generate_uuid() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n}\n\nfunction atcb_copy_to_clipboard(dataString) {\n const tmpInput = document.createElement('input');\n document.body.appendChild(tmpInput);\n const editable = tmpInput.contentEditable;\n const readOnly = tmpInput.readOnly;\n tmpInput.value = dataString;\n tmpInput.contentEditable = true;\n tmpInput.readOnly = false;\n\n if (isiOS()) {\n var range = document.createRange();\n range.selectNodeContents(tmpInput);\n var selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n tmpInput.setSelectionRange(0, 999999);\n } else {\n navigator.clipboard.writeText(dataString);\n tmpInput.select();\n }\n\n tmpInput.contentEditable = editable;\n tmpInput.readOnly = readOnly;\n document.execCommand('copy');\n tmpInput.remove();\n}\n\nfunction atcb_debounce(func) {\n var _this = this;\n\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n let timer;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n clearTimeout(timer);\n timer = setTimeout(() => {\n func.apply(_this, args);\n }, timeout);\n };\n}\n\nfunction atcb_debounce_leading(func) {\n var _this2 = this;\n\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 300;\n let timer;\n return function () {\n if (!timer) {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n func.apply(_this2, args);\n }\n\n clearTimeout(timer);\n timer = setTimeout(() => {\n timer = undefined;\n }, timeout);\n };\n}\n\nfunction atcb_throttle(func) {\n var _this3 = this;\n\n let delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n let result;\n let timeout = null;\n let previous = 0;\n\n let later = function () {\n previous = Date.now();\n timeout = null;\n\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n result = func.apply(_this3, args);\n };\n\n return function () {\n let now = Date.now();\n let remaining = delay - (now - previous);\n\n if (remaining <= 0 || remaining > delay) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = now;\n\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n result = func.apply(_this3, args);\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n}\n\nconst i18nStrings = {\n en: {\n 'Add to Calendar': 'Add to Calendar',\n 'iCal File': 'iCal File',\n Close: 'Close',\n 'Close Selection': 'Close Selection',\n 'Click me': 'Click me',\n 'modal.webview.ical.h': 'Open your browser',\n 'modal.webview.ical.text': 'Unfortunately, in-app browsers have problems with the way we generate the calendar file.',\n 'modal.clipboard.text': 'We automatically copied a magical URL into your clipboard.',\n 'modal.webview.ical.steps': '
  1. Open another browser on your phone, ...
  2. Paste the clipboard content and go.
',\n 'modal.crios.ical.h': 'Open Safari',\n 'modal.crios.ical.text': 'Unfortunately, Chrome on iOS has problems with the way we generate the calendar file.',\n 'modal.crios.ical.steps': '
  1. Open Safari, ...
  2. Paste the clipboard content and go.
',\n 'modal.multidate.h': 'This is an event series',\n 'modal.multidate.text': 'Add the individual events one by one:',\n Event: 'Event',\n 'Cancelled Date': 'This date got cancelled.',\n 'Delete from Calendar': 'Please update your calendar!',\n 'modal.subscribe.yahoo.h': 'Add Calendar to Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Open now the Yahoo Calendar.
  2. Click the \"Actions\" tab.
  3. Hit \"Follow Other Calendars\".
  4. Set a name and past the clipboard content into the url field.
',\n Cancel: 'Cancel'\n },\n de: {\n 'Add to Calendar': 'Im Kalender speichern',\n 'iCal File': 'iCal-Datei',\n Close: 'Schließen',\n 'Close Selection': 'Auswahl schließen',\n 'Click me': 'Klick mich',\n 'modal.webview.ical.h': 'Öffne deinen Browser',\n 'modal.webview.ical.text': 'Leider haben In-App-Browser Probleme mit der Art, wie wir Kalender-Dateien erzeugen.',\n 'modal.clipboard.text': 'Wir haben automatisch eine magische URL in deine Zwischenablage kopiert.',\n 'modal.webview.ical.steps': '
  1. Öffne einen anderen Browser auf deinem Smartphone, ...
  2. Nutze die Einfügen-Funktion, um fortzufahren.
',\n 'modal.crios.ical.h': 'Öffne Safari',\n 'modal.crios.ical.text': 'Leider Chrome unter iOS Probleme mit der Art, wie wir Kalender-Dateien erzeugen.',\n 'modal.crios.ical.steps': '
  1. Öffne Safari, ...
  2. Nutze die Einfügen-Funktion, um fortzufahren.
',\n 'modal.multidate.h': 'Dies is eine Termin-Reihe',\n 'modal.multidate.text': 'Füge die einzelnen Termine der Reihe nach deinem Kalender hinzu:',\n Event: 'Termin',\n 'Cancelled Date': 'Dieser Termin wurde abgesagt.',\n 'Delete from Calendar': 'Bitte aktualisiere deinen Kalender!',\n 'modal.subscribe.yahoo.h': 'Kalender zu Yahoo hinzufügen',\n 'modal.subscribe.yahoo.text': '
  1. Öffne den Yahoo Kalender.
  2. Klicke auf den \"Aktionen\" Tab.
  3. Wähle \"Weiteren Kalendern folgen\".
  4. Wähle einen Namen und füge die URL aus deiner Zwischenablage in das URL-Feld ein.
',\n Cancel: 'Abbrechen'\n },\n es: {\n 'Add to Calendar': 'Añadir al Calendario',\n 'iCal File': 'iCal Ficha',\n Close: 'Ciérralo',\n 'Close Selection': 'Cerrar Selección',\n 'Click me': 'Haz clic mí',\n 'modal.webview.ical.h': 'Abra su browser',\n 'modal.webview.ical.text': 'Lamentablemente, los browsers in-app tienen problemas con la forma en que generamos el archivo del calendario.',\n 'modal.clipboard.text': 'Hemos copiado automáticamente una URL mágica en su portapapeles.',\n 'modal.webview.ical.steps': '
  1. Abre otro browser en tu smartphone, ...
  2. Utilice la función de pegar para continuar.
',\n 'modal.crios.ical.h': 'Abrir Safari',\n 'modal.crios.ical.text': 'Lamentablemente, Chrome en iOS tiene problemas con la forma de generar el archivo de calendario.',\n 'modal.crios.ical.steps': '
  1. Abrir Safari, ...
  2. Utilice la función de pegar para continuar.
',\n 'modal.multidate.h': 'Esta es una serie de fechas',\n 'modal.multidate.text': 'Añada las fechas individuales a su calendario en orden:',\n Event: 'Término',\n 'Cancelled Date': 'Esta fecha fue cancelada.',\n 'Delete from Calendar': 'Actualice su calendario!',\n 'modal.subscribe.yahoo.h': 'Añadir calendario a Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Abra el calendario de Yahoo.
  2. Haga clic en la pestaña \"Acciones\".
  3. Seleccione \"Seguir otros calendarios\".
  4. Elige un nombre y pega la URL de tu portapapeles en el campo URL.
',\n Cancel: 'Cancelar'\n },\n pt: {\n 'Add to Calendar': 'Incluir no Calendário',\n 'iCal File': 'Ficheiro iCal',\n Close: 'Fechar',\n 'Close Selection': 'Fechar selecção',\n 'Click me': 'Clicar-me',\n 'modal.webview.ical.h': 'Abra o seu browser',\n 'modal.webview.ical.text': 'Infelizmente, os navegadores em tampas têm problemas com a forma como geramos o ficheiro de calendário.',\n 'modal.clipboard.text': 'Copiámos automaticamente um URL mágico para a sua área de transferência.',\n 'modal.webview.ical.steps': '
  1. Abrir outro browser en tu smartphone, ...
  2. Use a função colar para continuar.
',\n 'modal.crios.ical.h': 'Safari aberto',\n 'modal.crios.ical.text': 'Infelizmente, o cromado no iOS tem problemas com a forma como geramos o ficheiro do calendário.',\n 'modal.crios.ical.steps': '
  1. Safari aberto, ...
  2. Use a função colar para continuar.
',\n 'modal.multidate.h': 'Esta é uma série de datas',\n 'modal.multidate.text': 'Adicione as datas individuais ao seu calendário, por ordem:',\n Event: 'Termo',\n 'Cancelled Date': 'Esta data foi cancelada.',\n 'Delete from Calendar': 'Actualize o seu calendário!',\n 'modal.subscribe.yahoo.h': 'Adicionar calendário ao Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Abrir o calendário do Yahoo.
  2. Clique no separador \"Acções\".
  3. Seleccione \"Seguir outros calendários\".
  4. Escolha um nome e cole o URL da sua área de transferência no campo URL.
',\n Cancel: 'Cancelar'\n },\n fr: {\n 'Add to Calendar': 'Ajout au Agenda',\n 'iCal File': 'iCal Fichier',\n Close: 'Fermez',\n 'Close Selection': 'Fermez la sélection',\n 'Click me': 'Cliquez-moi',\n 'modal.webview.ical.h': 'Ouvrez votre navigateur',\n 'modal.webview.ical.text': 'Malheureusement, les navigateurs in-app ont des problèmes avec la manière dont nous créons les fichiers de agenda.',\n 'modal.clipboard.text': 'Nous avons automatiquement copié une URL magique dans ton presse-papiers.',\n 'modal.webview.ical.steps': '
  1. Ouvre un autre navigateur sur ton smartphone, ...
  2. Utilise la fonction insérer pour continuer.
',\n 'modal.crios.ical.h': 'Ouvre Safari',\n 'modal.crios.ical.text': 'Malheureusement, Chrome sur iOS a des problèmes avec la façon dont nous générons le fichier du agenda.',\n 'modal.crios.ical.steps': '
  1. Ouvre Safari, ...
  2. Utilise la fonction insérer pour continuer.
',\n 'modal.multidate.h': \"Il s'agit d'une série d'événements\",\n 'modal.multidate.text': \"Ajoute les différents rendez-vous dans l'ordre à ton agenda:\",\n Event: 'Terminaison',\n 'Cancelled Date': 'Cette date est annulée.',\n 'Delete from Calendar': 'Actualisez votre agenda!',\n 'modal.subscribe.yahoo.h': 'Ajouter un agenda à Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Ouvre le Yahoo calendar.
  2. Clique sur l\\'onglet \"Actions\".
  3. Sélectionne \"Suivre d\\'autres agendas\".
  4. Choisis un nom et colle l\\'URL de ton presse-papiers dans le champ URL.
',\n Cancel: 'Annuler'\n },\n nl: {\n 'Add to Calendar': 'Opslaan in Agenda',\n 'iCal File': 'iCal File',\n Close: 'Sluiten',\n 'Close Selection': 'Sluit selectie',\n 'Click me': 'Klik me',\n 'modal.webview.ical.h': 'Open uw browser',\n 'modal.webview.ical.text': 'Helaas hebben in-app browsers problemen met de manier waarop wij kalenderbestanden maken.',\n 'modal.clipboard.text': 'We hebben automatisch een magische URL naar je klembord gekopieerd.',\n 'modal.webview.ical.steps': '
  1. Open een andere browser op uw smartphone, ...
  2. Gebruik de insert functie om verder te gaan.
',\n 'modal.crios.ical.h': 'Open Safari',\n 'modal.crios.ical.text': 'Helaas heeft Chrome op iOS problemen met de manier waarop we het kalenderbestand genereren.',\n 'modal.crios.ical.steps': '
  1. Open Safari, ...
  2. Gebruik de insert functie om verder te gaan.
',\n 'modal.multidate.h': 'Dit is een reeks data',\n 'modal.multidate.text': 'Voeg de afzonderlijke delen één voor één toe:',\n Event: 'Termin',\n 'Cancelled Date': 'Deze datum is geannuleerd.',\n 'Delete from Calendar': 'Uw agenda bijwerken!',\n 'modal.subscribe.yahoo.h': 'Toevoegen aan Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Open de Yahoo calendar.
  2. Klik op de \"Acties\" tab.
  3. Selecteer \"Volg Andere Agenda\\'s\".
  4. Kies een naam en plak de URL van uw klembord in het URL-veld.
',\n Cancel: 'Annuleren'\n },\n tr: {\n 'Add to Calendar': 'Takvime Ekle',\n 'iCal File': 'iCal Dosyası',\n Close: 'Kapat',\n 'Close Selection': 'Seçimi kapat',\n 'Click me': 'Beni tıklayın',\n 'modal.webview.ical.h': 'Tarayıcınızı açın',\n 'modal.webview.ical.text': 'Ne yazık ki, uygulama içi tarayıcılar takvim dosyalarını oluşturma şeklimizle ilgili sorunlar yaşıyor.',\n 'modal.clipboard.text': 'Panonuza otomatik olarak sihirli bir URL kopyaladık.',\n 'modal.webview.ical.steps': '
  1. Akıllı telefonunuzda başka bir tarayıcı açın, ...
  2. Devam etmek için insert fonksiyonunu kullanın.
',\n 'modal.crios.ical.h': 'Açık Safari',\n 'modal.crios.ical.text': \"Ne yazık ki iOS'ta Chrome'un takvim dosyası oluşturma yöntemiyle ilgili sorunları var.\",\n 'modal.crios.ical.steps': '
  1. Açık Safari, ...
  2. Devam etmek için insert fonksiyonunu kullanın.
',\n 'modal.multidate.h': 'Bu bir etkinlik serisidir',\n 'modal.multidate.text': 'Parçaları teker teker ekleyin:',\n Event: 'Etkinlik',\n 'Cancelled Date': 'Bu tarih iptal edildi.',\n 'Delete from Calendar': 'Lütfen takviminizi güncelleyin!',\n 'modal.subscribe.yahoo.h': \"Yahoo'ya takvim ekleme\",\n 'modal.subscribe.yahoo.text': '
  1. Yahoo takvimini açın.
  2. \"Eylemler\" sekmesine tıklayın.
  3. \"Diğer Takvimleri Takip Et\" öğesini seçin.
  4. Bir ad seçin ve URL\\'yi panonuzdan URL alanına yapıştırın.
',\n Cancel: 'İptal'\n },\n zh: {\n 'Add to Calendar': '添加到日历',\n 'iCal File': 'iCal 文件',\n Close: '关',\n 'Close Selection': '关闭选择',\n 'Click me': '点我',\n 'modal.webview.ical.h': '打开浏览器',\n 'modal.webview.ical.text': '不幸的是,应用内浏览器在我们生成日历文件的方式上存在问题。',\n 'modal.clipboard.text': '我们自动将魔术 URL 复制到您的剪贴板。',\n 'modal.webview.ical.steps': '
  1. 打开手机上的任何其他浏览器, ...
  2. 粘贴剪贴板内容并开始。
',\n 'modal.crios.ical.h': '打开 Safari',\n 'modal.crios.ical.text': '不幸的是,iOS 上的 Chrome 在我们生成日历文件的方式上存在问题。',\n 'modal.crios.ical.steps': '
  1. 打开 Safari, ...
  2. 粘贴剪贴板内容并开始。
',\n 'modal.multidate.h': '这是一个活动系列',\n 'modal.multidate.text': '逐个添加各个部分:',\n Event: '事件',\n 'Cancelled Date': '此日期已取消。',\n 'Delete from Calendar': '请更新您的日历!',\n 'modal.subscribe.yahoo.h': '将日历添加到 Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. 打开 Yahoo 日历。
  2. 点击“操作”标签。
  3. 选择“关注其他日历”。
  4. 选择一个名称并将剪贴板中的 URL 粘贴到 URL 字段中。
',\n Cancel: '中止'\n },\n ar: {\n 'Add to Calendar': 'إضافة إلى التقويم',\n 'iCal File': 'ملف iCal',\n Close: 'قريب',\n 'Close Selection': 'إغلاق التحديد',\n 'Click me': 'انقر فوق لي',\n 'modal.webview.ical.h': 'افتح المستعرض الخاص بك',\n 'modal.webview.ical.text': 'لسوء الحظ ، تواجه المتصفحات داخل التطبيق مشاكل في طريقة إنشاء ملف التقويم.',\n 'modal.clipboard.text': 'قمنا تلقائيًا بنسخ عنوان URL سحري إلى الحافظة الخاصة بك.',\n 'modal.webview.ical.steps': '
  1. افتح أي متصفح آخر على هاتفك الذكي, ...
  2. .الصق محتوى الحافظة واذهب
',\n 'modal.crios.ical.h': 'افتح Safari',\n 'modal.crios.ical.text': 'لسوء الحظ ، يواجه Chrome على iOS مشاكل في طريقة إنشاء ملف التقويم',\n 'modal.crios.ical.steps': '
  1. افتح Safari, ...
  2. الصق محتوى الحافظة واذهب.
',\n 'modal.multidate.h': 'هذه سلسلة أحداث',\n 'modal.multidate.text': 'أضف الأجزاء الفردية واحدة تلو الأخرى:',\n Event: 'حدث',\n 'Cancelled Date': 'تم إلغاء هذا التاريخ.',\n 'Delete from Calendar': 'الرجاء تحديث التقويم الخاص بك!',\n 'modal.subscribe.yahoo.h': 'أضف التقويم إلى Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. افتح تقويم Yahoo.
  2. انقر فوق علامة التبويب \"الإجراءات\".
  3. حدد \"متابعة تقويمات أخرى\".
  4. اختر اسمًا والصق عنوان URL من الحافظة الخاصة بك في حقل URL.
',\n Cancel: 'إحباط'\n },\n hi: {\n 'Add to Calendar': 'कैलेंडर में जोड़ें',\n 'iCal File': 'iCal फ़ाइल',\n Close: 'बंद करना',\n 'Close Selection': 'चयन बंद करें',\n 'Click me': 'मुझे क्लिक करें',\n 'modal.webview.ical.h': 'अपना ब्राउज़र खोलें',\n 'modal.webview.ical.text': 'दुर्भाग्य से, इन-ऐप ब्राउज़र में कैलेंडर फ़ाइल बनाने के तरीके में समस्याएँ हैं।',\n 'modal.clipboard.text': 'हमने आपके क्लिपबोर्ड पर स्वचालित रूप से एक जादुई URL कॉपी कर लिया है।',\n 'modal.webview.ical.steps': '
  1. अपने फ़ोन पर दूसरा ब्राउज़र खोलें, ...
  2. क्लिपबोर्ड सामग्री चिपकाएं और जाएं।
',\n 'modal.crios.ical.h': 'सफारी खोलें',\n 'modal.crios.ical.text': 'दुर्भाग्य से, iOS पर Chrome को कैलेंडर फ़ाइल जेनरेट करने के हमारे तरीके में समस्या है।',\n 'modal.crios.ical.steps': '
  1. सफारी खोलें, ...
  2. क्लिपबोर्ड सामग्री चिपकाएं और जाएं।
',\n 'modal.multidate.h': 'यह एक इवेंट सीरीज़ है',\n 'modal.multidate.text': 'अलग-अलग हिस्सों को एक-एक करके जोड़ें:',\n Event: 'आयोजन',\n 'Cancelled Date': 'यह तिथि रद्द हो गई।',\n 'Delete from Calendar': 'कृपया अपना कैलेंडर अपडेट करें!',\n 'modal.subscribe.yahoo.h': 'Yahoo . में कैलेंडर जोड़ें',\n 'modal.subscribe.yahoo.text': '
  1. Yahoo कैलेंडर खोलें।
  2. \"कृती\" टैब पर क्लिक करें।
  3. \"इतर कॅलेंडर्सचे अनुसरण करा\" चुनें।
  4. एक नाम चुनें और अपने क्लिपबोर्ड से URL को URL फ़ील्ड में पेस्ट करें।
',\n Cancel: 'रद्द करना'\n },\n pl: {\n 'Add to Calendar': 'Dodaj do kalendarza',\n 'iCal File': 'Plik iCal',\n Close: 'Zamknij',\n 'Close Selection': 'Zamknij wybór',\n 'Click me': 'Kliknij mnie',\n 'modal.webview.ical.h': 'Otwórz przeglądarkę',\n 'modal.webview.ical.text': 'Niestety, przeglądarki in-app mają problemy ze sposobem, w jaki generujemy plik kalendarza.',\n 'modal.clipboard.text': 'Automatycznie skopiowaliśmy magiczny adres URL do schowka.',\n 'modal.webview.ical.steps': '
  1. Otwórz inną przeglądarkę w swoim telefonie, ...
  2. Wklej zawartość schowka i ruszaj.
',\n 'modal.crios.ical.h': 'Otwórz Safari',\n 'modal.crios.ical.text': 'Niestety, Chrome na iOS ma problemy ze sposobem generowania pliku kalendarza.',\n 'modal.crios.ical.steps': '
  1. Otwórz Safari, ...
  2. Wklej zawartość schowka i ruszaj.
',\n 'modal.multidate.h': 'To jest cykl imprez',\n 'modal.multidate.text': 'Dodawać po kolei poszczególne części:',\n Event: 'Wydarzenie',\n 'Cancelled Date': 'Ta data została odwołana.',\n 'Delete from Calendar': 'Zaktualizuj swój kalendarz!',\n 'modal.subscribe.yahoo.h': 'Dodaj kalendarz do Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Otwórz kalendarz Yahoo.
  2. Kliknij na zakładkę \"Czynności\".
  3. Wybierz \"Obserwuj inne kalendarze\".
  4. Wybierz nazwę i wklej adres URL ze schowka w polu URL.
',\n Cancel: 'Anuluj'\n },\n id: {\n 'Add to Calendar': 'Tambahkan ke Kalender',\n 'iCal File': 'File iCal',\n Close: 'Tutup',\n 'Close Selection': 'Seleksi Tutup',\n 'Click me': 'Klik saya',\n 'modal.webview.ical.h': 'Buka browser Anda',\n 'modal.webview.ical.text': 'Sayangnya, browser dalam aplikasi memiliki masalah dengan cara kami menghasilkan file kalender.',\n 'modal.clipboard.text': 'Kami telah secara otomatis menyalin URL ajaib ke clipboard Anda.',\n 'modal.webview.ical.steps': '
  1. Buka peramban lain pada ponsel Anda, ...
  2. Tempelkan konten clipboard dan pergi.
',\n 'modal.crios.ical.h': 'Buka Safari',\n 'modal.crios.ical.text': 'Sayangnya, Chrome di iOS memiliki masalah dengan cara kami menghasilkan file kalender.',\n 'modal.crios.ical.steps': '
  1. Buka Safari, ...
  2. Tempelkan konten clipboard dan pergi.
',\n 'modal.multidate.h': 'Ini adalah rangkaian acara',\n 'modal.multidate.text': 'Tambahkan masing-masing bagian satu per satu:',\n Event: 'Acara',\n 'Cancelled Date': 'Tanggal ini dibatalkan.',\n 'Delete from Calendar': 'Perbarui kalender Anda!',\n 'modal.subscribe.yahoo.h': 'Tambahkan kalender ke Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Buka kalender Yahoo.
  2. Klik pada tab \"Tindakan\".
  3. Pilih \"Ikuti Kalender Lain\".
  4. Pilih nama dan tempelkan URL dari clipboard Anda ke bidang URL.
',\n Cancel: 'Batal'\n },\n no: {\n 'Add to Calendar': 'Legg til i kalenderen',\n 'iCal File': 'iCal-fil',\n Close: 'Lukk',\n 'Close Selection': 'Lukk utvalg',\n 'Click me': 'Klikk på meg',\n 'modal.webview.ical.h': 'Åpne nettleseren din',\n 'modal.webview.ical.text': 'Dessverre har nettlesere i appen problemer med måten vi genererer kalenderfilen på.',\n 'modal.clipboard.text': 'Vi kopierte automatisk en magisk URL til utklippstavlen din.',\n 'modal.webview.ical.steps': '
  1. Åpne en annen nettleser på telefonen, ...
  2. Lim inn innholdet på utklippstavlen og gå.
',\n 'modal.crios.ical.h': 'Åpne Safari',\n 'modal.crios.ical.text': 'Dessverre har Chrome på iOS problemer med måten vi genererer kalenderfilen på.',\n 'modal.crios.ical.steps': '
  1. Åpne Safari, ...
  2. Lim inn innholdet på utklippstavlen og gå.
',\n 'modal.multidate.h': 'Dette er en avtaleserie',\n 'modal.multidate.text': 'Legg til de enkelte datoene i kalenderen din i rekkefølge:',\n Event: 'Møte',\n 'Cancelled Date': 'Denne datoen ble avlyst.',\n 'Delete from Calendar': 'Oppdater kalenderen din!',\n 'modal.subscribe.yahoo.h': 'Legg til kalender til Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Åpne Yahoo-kalenderen.
  2. Klikk på «Handlinger»-fanen.
  3. Velg «Følg andre kalendere».
  4. Velg et navn og lim inn URL-en fra utklippstavlen i URL-feltet.
',\n Cancel: 'Avbryt'\n },\n fi: {\n 'Add to Calendar': 'Lisää kalenteriin',\n 'iCal File': 'iCal-tiedosto',\n Close: 'Sulje',\n 'Close Selection': 'Sulje valinta',\n 'Click me': 'Klikkaa minua',\n 'modal.webview.ical.h': 'Avaa selain',\n 'modal.webview.ical.text': 'Valitettavasti sovelluksen sisäisillä selaimilla on ongelmia kalenteritiedoston luomisessa.',\n 'modal.clipboard.text': 'Olemme automaattisesti kopioineet maagisen URL-osoitteen leikepöydällesi.',\n 'modal.webview.ical.steps': '
  1. Avaa toinen selain puhelimessasi., ...
  2. liitä leikepöydän sisältö ja lähde.
',\n 'modal.crios.ical.h': 'Avaa Safari',\n 'modal.crios.ical.text': 'Valitettavasti iOS:n Chromessa on ongelmia kalenteritiedoston luomisessa.',\n 'modal.crios.ical.steps': '
  1. Avaa Safari, ...
  2. liitä leikepöydän sisältö ja lähde.
',\n 'modal.multidate.h': 'Tämä on tapahtumasarja',\n 'modal.multidate.text': 'Lisää yksittäiset osat yksi kerrallaan:',\n Event: 'Tapahtuma',\n 'Cancelled Date': 'Tämä päivämäärä peruttiin.',\n 'Delete from Calendar': 'Päivitä kalenterisi!',\n 'modal.subscribe.yahoo.h': 'Lisää kalenteri Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Avaa Yahoo-kalenteri.
  2. Napsauta \"Toiminnot\"-välilehteä.
  3. Valitse \"Seuraa muiden kalentereita\".
  4. Valitse nimi ja liitä URL-osoite leikepöydältäsi URL-kenttään.
',\n Cancel: 'Peruuta'\n },\n sv: {\n 'Add to Calendar': 'Lägg till i kalender',\n 'iCal File': 'iCal-fil',\n Close: 'Stäng',\n 'Close Selection': 'Stäng urvalet',\n 'Click me': 'Klicka på mig',\n 'modal.webview.ical.h': 'Öppna din webbläsare',\n 'modal.webview.ical.text': 'Tyvärr har webbläsare i appen problem med hur vi genererar kalenderfilen.',\n 'modal.clipboard.text': 'Vi har automatiskt kopierat en magisk URL till ditt klippblock.',\n 'modal.webview.ical.steps': '
  1. Öppna en annan webbläsare på telefonen, ...
  2. Insätt innehållet i klippbordet och kör.
',\n 'modal.crios.ical.h': 'Öppna Safari',\n 'modal.crios.ical.text': 'Tyvärr har Chrome på iOS problem med hur vi genererar kalenderfilen.',\n 'modal.crios.ical.steps': '
  1. Öppna Safari, ...
  2. Insätt innehållet i klippbordet och kör.
',\n 'modal.multidate.h': 'Detta är en evenemangsserie',\n 'modal.multidate.text': 'Lägg till de enskilda delarna en efter en:',\n Event: 'Evenemang',\n 'Cancelled Date': 'Detta datum har ställts in.',\n 'Delete from Calendar': 'Uppdatera din kalender!',\n 'modal.subscribe.yahoo.h': 'Lägg till kalender i Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Öppna Yahoo-kalendern.
  2. Klicka på fliken \"Åtgärder\".
  3. Välj \"Följ andra kalendrar\".
  4. Välj ett namn och klistra in URL:en från klippbordet i URL-fältet.
',\n Cancel: 'Avbryt'\n },\n cs: {\n 'Add to Calendar': 'Přidat do kalendáře',\n 'iCal File': 'Soubor iCal',\n Close: 'Zavřít',\n 'Close Selection': 'Zavřít výběr',\n 'Click me': 'Klikněte na mě',\n 'modal.webview.ical.h': 'Otevřete prohlížeč',\n 'modal.webview.ical.text': 'Prohlížeče v aplikacích mají bohužel problémy se způsobem generování souboru kalendáře.',\n 'modal.clipboard.text': 'Do schránky jsme automaticky zkopírovali kouzelnou adresu URL.',\n 'modal.webview.ical.steps': '
  1. Otevření jiného prohlížeče v telefonu, ...
  2. Vložte obsah schránky a přejděte.
',\n 'modal.crios.ical.h': 'Otevřít Safari',\n 'modal.crios.ical.text': 'Chrome v systému iOS má bohužel problémy se způsobem generování souboru kalendáře.',\n 'modal.crios.ical.steps': '
  1. Otevřít Safari, ...
  2. Vložte obsah schránky a přejděte.
',\n 'modal.multidate.h': 'Jedná se o sérii událostí',\n 'modal.multidate.text': 'Přidávejte jednotlivé díly jeden po druhém:',\n Event: 'Událost',\n 'Cancelled Date': 'Toto datum bylo zrušeno.',\n 'Delete from Calendar': 'Aktualizujte svůj kalendář!',\n 'modal.subscribe.yahoo.h': 'Přidat kalendář do Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Otevřete kalendář Yahoo.
  2. Klikněte na kartu \"Akce\".
  3. Vyberte možnost \"Sledovat další kalendáře\".
  4. Vyberte název a vložte adresu URL ze schránky do pole URL.
',\n Cancel: 'Storno'\n },\n ja: {\n 'Add to Calendar': 'カレンダーに追加',\n 'iCal File': 'iCalファイル',\n Close: '閉じる',\n 'Close Selection': 'クローズ選択',\n 'Click me': 'クリックしてください',\n 'modal.webview.ical.h': 'ブラウザを起動する',\n 'modal.webview.ical.text': '残念ながら、アプリ内ブラウザは、カレンダーファイルの生成方法に問題があります。',\n 'modal.clipboard.text': '魔法のURLを自動的にクリップボードにコピーしています。',\n 'modal.webview.ical.steps': '
  1. スマートフォンで別のブラウザを起動する, ...
  2. クリップボードの内容を貼り付けて行く。
',\n 'modal.crios.ical.h': 'オープンSafari',\n 'modal.crios.ical.text': '残念ながら、iOS版Chromeでは、カレンダーファイルの生成方法に問題があります。',\n 'modal.crios.ical.steps': '
  1. オープンSafari, ...
  2. クリップボードの内容を貼り付けて行く。
',\n 'modal.multidate.h': 'イベントシリーズです',\n 'modal.multidate.text': '個々のパーツを一つずつ追加していく:',\n Event: 'イベント',\n 'Cancelled Date': 'この日はキャンセルになりました。',\n 'Delete from Calendar': 'カレンダーを更新する!',\n 'modal.subscribe.yahoo.h': 'Yahooにカレンダーを追加する',\n 'modal.subscribe.yahoo.text': '
  1. Yahooカレンダーを開く。
  2. [実行] タブをクリックします。
  3. [その他のカレンダーのフォロー] を選択します。
  4. 名前を決めて、クリップボードにあるURLをURL欄に貼り付けます。
',\n Cancel: 'キャンセル'\n },\n it: {\n 'Add to Calendar': 'Aggiungi al calendario',\n 'iCal File': 'File iCal',\n Close: 'Chiudere',\n 'Close Selection': 'Chiudere la selezione',\n 'Click me': 'Clicca su di me',\n 'modal.webview.ical.h': 'Aprire il browser',\n 'modal.webview.ical.text': 'Purtroppo i browser in-app hanno problemi con il modo in cui generiamo il file del calendario.',\n 'modal.clipboard.text': 'Abbiamo copiato automaticamente un URL magico negli appunti.',\n 'modal.webview.ical.steps': '
  1. Aprire un altro browser sul cellulare, ...
  2. Incollare il contenuto degli appunti e partire.
',\n 'modal.crios.ical.h': 'Aprire Safari',\n 'modal.crios.ical.text': 'Purtroppo, Chrome su iOS ha problemi con il modo in cui generiamo il file del calendario.',\n 'modal.crios.ical.steps': '
  1. Aprire Safari, ...
  2. Incollare il contenuto degli appunti e partire.
',\n 'modal.multidate.h': 'Questa è una serie di eventi',\n 'modal.multidate.text': 'Aggiungere le singole parti una per una:',\n Event: 'Evento',\n 'Cancelled Date': 'La data è stata annullata.',\n 'Delete from Calendar': 'Aggiornare il calendario!',\n 'modal.subscribe.yahoo.h': 'Aggiungi il calendario a Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Aprire il calendario di Yahoo.
  2. Fare clic sulla scheda \"Azioni\".
  3. Selezionare \"Segui altri calendari\".
  4. Scegliere un nome e incollare l\\'URL dagli appunti nel campo URL.
',\n Cancel: 'Annulla'\n },\n ko: {\n 'Add to Calendar': '캘린더에 추가',\n 'iCal File': 'iCal 파일',\n Close: '닫다',\n 'Close Selection': '선택 닫기',\n 'Click me': '클릭 해주세요',\n 'modal.webview.ical.h': '브라우저 열기',\n 'modal.webview.ical.text': '불행히도 인앱 브라우저는 캘린더 파일을 생성하는 방식에 문제가 있습니다.',\n 'modal.clipboard.text': '매직 URL을 클립보드에 자동으로 복사했습니다.',\n 'modal.webview.ical.steps': '
  1. 휴대전화에서 다른 브라우저 열기, ...
  2. 클립보드 내용을 붙여넣고 이동합니다.
',\n 'modal.crios.ical.h': 'Safari 열기',\n 'modal.crios.ical.text': '불행히도 iOS의 Chrome은 캘린더 파일을 생성하는 방식에 문제가 있습니다.',\n 'modal.crios.ical.steps': '
  1. Safari 열기, ...
  2. 클립보드 내용을 붙여넣고 이동합니다.
',\n 'modal.multidate.h': '이벤트 시리즈입니다',\n 'modal.multidate.text': '개별 부품을 하나씩 추가:',\n Event: '이벤트',\n 'Cancelled Date': '이 날짜는 취소되었습니다.',\n 'Delete from Calendar': '캘린더를 업데이트하세요!',\n 'modal.subscribe.yahoo.h': 'Yahoo에 캘린더 추가',\n 'modal.subscribe.yahoo.text': '
  1. Yahoo 캘린더를 엽니다.
  2. \"동작\" 탭을 클릭합니다.
  3. \"다른 일정관리 팔로우\"를 선택합니다.
  4. 이름을 선택하고 클립보드의 URL을 URL 필드에 붙여넣습니다.
',\n Cancel: '취소'\n },\n vi: {\n 'Add to Calendar': 'Thêm vào Lịch',\n 'iCal File': 'Tệp iCal',\n Close: 'Đóng',\n 'Close Selection': 'Đóng lựa chọn',\n 'Click me': 'Nhấp vào đây',\n 'modal.webview.ical.h': 'Mở trình duyệt của bạn',\n 'modal.webview.ical.text': 'Rất tiếc, các trình duyệt trong ứng dụng gặp sự cố với cách chúng tôi tạo tệp lịch.',\n 'modal.clipboard.text': 'Chúng tôi đã tự động sao chép một URL ma thuật vào khay nhớ tạm của bạn.',\n 'modal.webview.ical.steps': '
  1. Mở trình duyệt khác trên điện thoại của bạn, ...
  2. Dán nội dung khay nhớ tạm và bắt đầu.
',\n 'modal.crios.ical.h': 'Mở Safari',\n 'modal.crios.ical.text': 'Rất tiếc, Chrome trên iOS gặp sự cố với cách chúng tôi tạo tệp lịch.',\n 'modal.crios.ical.steps': '
  1. Mở Safari, ...
  2. Dán nội dung khay nhớ tạm và bắt đầu.
',\n 'modal.multidate.h': 'Đây là một chuỗi sự kiện',\n 'modal.multidate.text': 'Thêm từng phần riêng lẻ một:',\n Event: 'Biến cố',\n 'Cancelled Date': 'Ngày này đã bị hủy.',\n 'Delete from Calendar': 'Cập nhật lịch của bạn!',\n 'modal.subscribe.yahoo.h': 'Thêm lịch vào Yahoo',\n 'modal.subscribe.yahoo.text': '
  1. Mở Lịch Yahoo.
  2. Nhấp vào tab \"Hành động\".
  3. Chọn \"Theo dõi các Lịch khác\".
  4. Chọn tên và dán URL từ khay nhớ tạm của bạn vào trường URL.
',\n Cancel: 'Hủy bỏ'\n }\n};\n\nfunction atcb_translate_hook(identifier, data) {\n const searchKey = identifier.replace(/\\s+/g, '').toLowerCase();\n\n if (data.customLabels != null && data.customLabels[\"\".concat(searchKey)] != null && data.customLabels[\"\".concat(searchKey)] != '') {\n return atcb_rewrite_html_elements(data.customLabels[\"\".concat(searchKey)]);\n } else {\n return atcb_translate(identifier, data.language);\n }\n}\n\nfunction atcb_translate(identifier, language) {\n if (!language) {\n language = 'en';\n }\n\n if (i18nStrings[\"\".concat(language)][\"\".concat(identifier)]) {\n return i18nStrings[\"\".concat(language)][\"\".concat(identifier)];\n }\n\n return identifier;\n}\n\nlet atcbInitialInit = false;\n\nfunction atcb_init() {\n if (!atcbInitialInit) {\n atcb_set_global_event_listener();\n }\n\n atcb_init_log_msg();\n\n if (!isBrowser()) {\n console.error('no further initialization due to wrong environment (no browser)');\n return;\n }\n\n const atcButtons = document.querySelectorAll('.atcb');\n const btnIDs = [];\n\n if (atcButtons.length > 0) {\n const atcButtonsInitialized = document.querySelectorAll('.atcb-initialized');\n\n for (let i = 0; i < atcButtons.length; i++) {\n if (atcButtons[parseInt(i)].classList.contains('atcb-initialized')) {\n continue;\n }\n\n const atcbJsonInput = function () {\n try {\n return JSON.parse(atcb_secure_content(atcButtons[parseInt(i)].innerHTML.replace(/(\\r\\n|\\n|\\r)/g, ''), false));\n } catch (e) {\n console.error('Add to Calendar Button generation failed: JSON content provided, but badly formatted (in doubt, try some tool like https://jsonformatter.org/ to validate).\\r\\nError message: ' + e);\n return '';\n }\n }();\n\n const atcbJsonInputPatched = atcb_patch_config(atcbJsonInput);\n const atcbInputData = atcb_get_pro_data(atcbJsonInputPatched);\n\n if (atcbInputData.length == 0) {\n continue;\n }\n\n if (atcb_check_required(atcbInputData)) {\n const data = atcb_decorate_data(atcbInputData);\n\n if (data.identifier == null || data.identifier == '') {\n data.identifier = 'atcb-btn-' + (i + atcButtonsInitialized.length + 1);\n }\n\n if (atcb_validate(data)) {\n atcb_generate_button(atcButtons[parseInt(i)], data);\n atcb_update_state_management(data);\n btnIDs.push(data.identifier);\n }\n }\n }\n }\n\n return btnIDs;\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\nfunction atcb_action(data, triggerElement) {\n let keyboardTrigger = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!atcbInitialInit) {\n atcb_set_global_event_listener();\n }\n\n atcb_init_log_msg();\n data = atcb_secure_content(data);\n data = atcb_get_pro_data(data);\n\n if (!atcb_check_required(data)) {\n throw new Error('Add to Calendar Button generation failed: required data missing; see console logs');\n }\n\n data = atcb_decorate_data(data);\n\n if (triggerElement) {\n if (triggerElement.id != null && triggerElement.id != '') {\n data.identifier = triggerElement.id;\n } else {\n if (data.identifier != null && data.identifier != '') {\n triggerElement.id = data.identifier;\n } else {\n data.identifier = 'atcb-btn-custom';\n }\n }\n\n if (data.listStyle == 'dropdown') {\n data.listStyle = 'overlay';\n }\n } else {\n data.identifier = 'atcb-btn-custom';\n data.listStyle = 'modal';\n data.trigger = 'click';\n }\n\n if (!atcb_validate(data)) {\n throw new Error('Add to Calendar Button generation (' + data.identifier + ') failed: invalid data; see console logs');\n }\n\n atcb_update_state_management(data);\n atcb_toggle('open', data, triggerElement, keyboardTrigger);\n console.log('Add to Calendar Button \"' + data.identifier + '\" triggered');\n return [data.identifier];\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\nfunction atcb_destroy(id) {\n atcb_close();\n const el = document.getElementById(id);\n\n if (atcbStates[\"\".concat(id)] == null || !el) {\n console.error('Add to Calendar Button could not be destroyed! ID unknown.');\n return false;\n }\n\n delete atcbStates[\"\".concat(id)];\n\n if (el.parentElement.parentElement.classList.contains('atcb-initialized')) {\n el.parentElement.parentElement.remove();\n } else {\n el.remove();\n }\n\n console.log('Add to Calendar Button \"' + id + '\" destroyed');\n return true;\n}\n\nfunction atcb_update_state_management(data) {\n const singleDates = [];\n\n for (let i = 0; i < data.options.length; i++) {\n singleDates[data.options[\"\".concat(i)]] = [];\n\n for (let id = 1; id <= data.dates.length; id++) {\n singleDates[data.options[\"\".concat(i)]].push(0);\n }\n }\n\n atcbStates[data.identifier] = singleDates;\n}\n\nfunction atcb_init_log_msg() {\n if (!atcbInitialInit) {\n console.log('Add to Calendar Button Script initialized (version ' + atcbVersion + ')');\n console.log('See https://github.com/add2cal/add-to-calendar-button for details');\n atcbInitialInit = true;\n }\n}\n\nfunction atcb_get_pro_data(data) {\n if (data.proKey != null && data.proKey != '') {\n console.error('Add to Calendar Button generation failed: proKey invalid!');\n return [];\n }\n\n return data;\n}\n\nfunction atcb_set_global_event_listener() {\n if (!isBrowser()) {\n return;\n }\n\n document.addEventListener('keyup', function (event) {\n if (event.key === 'Escape') {\n atcb_toggle('close', '', '', true);\n }\n });\n document.addEventListener('keydown', event => {\n if (document.querySelector('.atcb-list') && (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Tab')) {\n let targetFocus = 0;\n let currFocusOption = document.activeElement;\n const optionListCount = document.querySelectorAll('.atcb-list-item').length;\n\n if (currFocusOption.classList.contains('atcb-list-item')) {\n if (event.key === 'ArrowDown' && currFocusOption.dataset.optionNumber < optionListCount) {\n event.preventDefault();\n targetFocus = parseInt(currFocusOption.dataset.optionNumber) + 1;\n } else if (event.key === 'ArrowUp' && currFocusOption.dataset.optionNumber >= 1) {\n event.preventDefault();\n targetFocus = parseInt(currFocusOption.dataset.optionNumber) - 1;\n }\n\n if (targetFocus > 0) {\n document.querySelector('.atcb-list-item[data-option-number=\"' + targetFocus + '\"]').focus();\n }\n } else {\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowDown':\n document.querySelector('.atcb-list-item[data-option-number=\"1\"]').focus();\n break;\n\n case 'ArrowUp':\n document.querySelector('.atcb-list-item[data-option-number=\"' + optionListCount + '\"]').focus();\n break;\n\n default:\n document.querySelector('.atcb-list-item[data-option-number=\"1\"]').focus();\n break;\n }\n }\n }\n });\n window.addEventListener('resize', atcb_throttle(() => {\n const activeOverlay = document.getElementById('atcb-bgoverlay');\n\n if (activeOverlay != null) {\n atcb_set_fullsize(activeOverlay);\n atcb_manage_body_scroll();\n }\n\n const activeButton = document.querySelector('.atcb-active');\n\n if (activeButton != null) {\n const activeList = document.querySelector('.atcb-dropdown');\n\n if (activeList != null) {\n atcb_position_list(activeButton, activeList, false, true);\n }\n }\n }));\n window.addEventListener('scroll', atcb_throttle(() => {\n const activeButton = document.querySelector('.atcb-active');\n\n if (activeButton != null) {\n const activeList = document.querySelector('.atcb-dropdown');\n\n if (activeList != null) {\n if (activeList.classList.contains('atcb-mind-scrolling')) {\n atcb_position_list(activeButton, activeList, false, true);\n }\n }\n }\n }, 20));\n}\n\nexport { atcb_action, atcb_init, atcb_destroy };","import app from \"../lockdown_app\";\nimport { atcb_action, atcb_init } from 'add-to-calendar-button';\n\nexport class CalendarButton {\n constructor(element) {\n this.element = element;\n atcb_init();\n\n if (this.element.querySelector(\".atcb-text\")) {\n this.element.querySelector(\".atcb-text\").innerText = \"Add to calendar\";\n }\n }\n}\n\nexport const calendarButtons = {\n current: [],\n};\n\nexport const init = () => {\n app.addEventListener(\"page-load\", (e) => {\n calendarButtons.current = [\n ...e.target.querySelectorAll(\".js-calendar-button\"),\n ].map((instance) => new CalendarButton(instance));\n })\n}\n","import App from \"../lockdown_app\";\n\nconst INPUT_SCREEN = \"input\";\nconst ERROR_SCREEN = \"error\";\nconst SUCCESS_SCREEN = \"success\";\n\nclass NewsletterSignupForm {\n constructor(root) {\n this.element = root;\n this.form = root.querySelector(\".js-newsletter-form\");\n this.emailInput = root.querySelector(\".js-newsletter-email\");\n this.screens = {};\n this.screens[INPUT_SCREEN] = root.querySelector(\".js-newsletter-input-screen\");\n this.screens[SUCCESS_SCREEN] = root.querySelector(\".js-newsletter-success-screen\");\n this.screens[ERROR_SCREEN] = root.querySelector(\".js-newsletter-error-screen\");\n this.errorMessage = root.querySelector(\".js-newsletter-error\");\n\n this.state = {\n screen: INPUT_SCREEN,\n errorMessage: null,\n };\n\n const apiEndpointBase = this.form.getAttribute(\"action\");\n\n this.form.addEventListener(\"submit\", (e) => {\n // Disallow typical form submission (which results in page redirect)\n e.preventDefault();\n\n $.ajax({\n type: \"GET\",\n url: apiEndpointBase,\n data: $(this.form).serialize(),\n dataType: \"json\",\n contentType: \"application/json; charset=utf-8\",\n error: (res) => this.handleError(res),\n success: (res) => {\n if (res.result === \"error\") {\n this.handleError(res);\n } else {\n this.handleSuccess();\n }\n },\n });\n });\n\n root.addEventListener(\"click\", (e) => {\n if (e.target.matches(\".js-newsletter-retry\")) {\n this.handleReset();\n }\n });\n }\n\n handleError(res) {\n console.log(\"Error signing up\", res);\n const update = { screen: ERROR_SCREEN };\n\n if (res.msg) {\n if (res.msg.includes(\"already subscribed\")) {\n update.errorMessage = \"You’re already subscribed!\";\n } else if (res.msg.includes(\"invalid\")) {\n update.errorMessage = \"This email is invalid. Please use another email address.\";\n } else if (res.msg.includes(\"timeout\")) {\n update.errorMessage = \"Signup timed out.\";\n } else {\n update.errorMessage = \"Something went wrong...\";\n }\n }\n\n this.update(update);\n }\n\n handleSuccess() {\n this.update({ screen: SUCCESS_SCREEN })\n }\n\n handleReset() {\n this.update({ screen: INPUT_SCREEN })\n }\n\n update(update) {\n // Merge state\n const previousState = Object.assign({}, this.state);\n Object.assign(this.state, update);\n\n if (update.hasOwnProperty(\"screen\")) {\n this.renderScreenState(previousState);\n }\n\n if (update.hasOwnProperty(\"errorMessage\")) {\n this.renderErrorMessageState(this.state.errorMessage);\n }\n }\n\n renderScreenState(previousState) {\n const previousScreen = this.screens[previousState.screen];\n const nextScreen = this.screens[this.state.screen];\n\n const endFadeInHandler = () => {\n nextScreen.style.setProperty(\"transition\", \"\");\n nextScreen.setAttribute(\"aria-hidden\", \"false\");\n nextScreen.removeEventListener(\"transitionend\", endFadeInHandler);\n };\n nextScreen.addEventListener(\"transitionend\", endFadeInHandler);\n\n const endFadeOutHandler = () => {\n previousScreen.style.setProperty(\"transition\", \"\");\n previousScreen.setAttribute(\"aria-hidden\", \"true\");\n previousScreen.style.setProperty(\"z-index\", \"-1\");\n previousScreen.removeEventListener(\"transitionend\", endFadeOutHandler);\n\n nextScreen.style.setProperty(\"transition\", \"opacity 300ms linear\");\n nextScreen.style.setProperty(\"opacity\", \"1\");\n nextScreen.style.setProperty(\"visibility\", \"visible\");\n nextScreen.style.setProperty(\"z-index\", \"1\");\n }\n\n previousScreen.addEventListener(\"transitionend\", endFadeOutHandler);\n previousScreen.style.setProperty(\"transition\", \"opacity 150ms linear\");\n previousScreen.style.setProperty(\"opacity\", \"0\");\n previousScreen.style.setProperty(\"visibility\", \"hidden\");\n }\n\n renderErrorMessageState(message) {\n this.errorMessage.innerText = message;\n }\n}\n\nexport const newsletterSignupForms = {\n current: [],\n};\n\nexport const init = () => {\n App.addEventListener(\"turbo:load\", () => {\n newsletterSignupForms.current = [\n ...document.querySelectorAll(\".js-newsletter-signup\"),\n ].map((instance) => new NewsletterSignupForm(instance));\n });\n};\n","import app from \"../lockdown_app\";\n\nexport class PanelFader {\n constructor(element) {\n this.element = element;\n this.frontPanel = element.querySelector(\".js-panel-fader-front-panel\");\n this.backPanel = element.querySelector(\".js-panel-fader-back-panel\");\n this.accessibleAnnouncer = element.querySelector(\".js-accessible-announcer\");\n this.videoThumbnailLink = element.querySelector(\".js-video-thumbnail-link\");\n\n this.frontPanel.addEventListener(\"click\", () => {\n this.handleFade();\n });\n\n this.makeAccessible();\n }\n\n handleFade() {\n if (app.state.breakpoint == \"xs\") {\n return;\n }\n\n this.frontPanel.addEventListener(\"transitionend\", () => {\n this.backPanel.ariaHidden = \"false\";\n this.backPanel.style.opacity = 1;\n this.frontPanel.style.zIndex = -1;\n this.frontPanel.style.visibility = \"hidden\";\n\n this.accessibleAnnouncer.textContent = \"The front title panel has been removed. Underlying content, such as a carousel or video, is now on screen.\"\n this.backPanel.focus();\n\n // Activate email wall modal\n if (this.videoThumbnailLink) {\n setTimeout(() => {\n this.videoThumbnailLink.click();\n }, 700);\n }\n });\n\n this.frontPanel.ariaHidden = \"true\";\n this.frontPanel.style.opacity = 0;\n }\n\n makeAccessible() {\n this.element.ariaLive = \"polite\";\n this.backPanel.ariaHidden = \"true\";\n }\n}\n\nexport const panelFaders = {\n current: [],\n};\n\nexport const init = () => {\n app.addEventListener(\"page-load\", (e) => {\n panelFaders.current = [\n ...e.target.querySelectorAll(\".js-panel-fader\"),\n ].map((instance) => new PanelFader(instance));\n })\n}\n","import Flickity from \"flickity\";\n\nexport class Carousel {\n constructor(element, options) {\n this.element = element;\n this.options = options;\n this.flickity;\n this.currentSlide;\n this.previousSlide;\n\n // Required elements\n this.carouselElement = this.element.querySelector(\".js-carousel\");\n this.accessibleAnnouncer = this.element.querySelector(\".js-accessible-announcer\");\n\n // Optional elements\n this.buttons = this.element.querySelector(\".js-carousel-buttons\");\n this.prevButton = this.element.querySelector(\".js-carousel-button-prev\");\n this.nextButton = this.element.querySelector(\".js-carousel-button-next\");\n this.caption = this.element.querySelector(\".js-carousel-caption\");\n\n // Initialize\n this.makeCarousel();\n this.makeAccessible();\n }\n\n handleChange(slideIndex) {\n this.previousSlide = this.currentSlide;\n this.currentSlide = this.flickity.selectedElement;\n\n // Announce slide change\n this.accessibleAnnouncer.textContent = `You are on slide ${slideIndex + 1} of ${this.flickity.cells.length}.`\n\n // Change aria-hidden state on slide change\n this.previousSlide.ariaHidden = \"true\";\n this.currentSlide.ariaHidden = \"false\";\n\n // Update caption\n if (this.caption) {\n this.caption.innerText = this.flickity.selectedElement.dataset.caption;\n }\n }\n\n makeCarousel() {\n this.flickity = new Flickity(this.carouselElement, this.options);\n\n this.currentSlide = this.flickity.selectedElement;\n\n this.flickity.on(\"change\", (slideIndex) => {\n this.handleChange(slideIndex);\n });\n\n if (this.buttons) {\n this.prevButton.addEventListener(\"click\", () => {\n this.flickity.previous();\n });\n\n this.nextButton.addEventListener(\"click\", () => {\n this.flickity.next();\n });\n }\n }\n\n makeAccessible() {\n // Allow all announcements on parent element\n this.element.ariaLive = \"polite\";\n\n // Non-focused slides should be aria-hidden\n this.flickity.cells.forEach((cell) => {\n cell.element.ariaHidden = \"true\";\n });\n\n // Current element should not be aria-hidden\n this.flickity.selectedElement.ariaHidden = \"false\";\n }\n}\n","import Flickity from \"flickity\";\nrequire(\"flickity-as-nav-for\");\n\nexport class NavCarousel {\n constructor(element, options) {\n this.element = element;\n this.options = options;\n this.flickity;\n\n // Required elements\n this.carouselElement = this.element.querySelector(\".js-carousel\");\n this.navCarouselElement = this.element.querySelector(\".js-nav-carousel\");\n\n // Initialize\n this.makeCarousel();\n }\n\n makeCarousel() {\n this.options.asNavFor = this.carouselElement;\n this.flickity = new Flickity(this.navCarouselElement, this.options);\n }\n\n makeAccessible() {\n // NOTE: asNavFor carousels are decorative/repetitive in nature and do not\n // need to be made accessible, other than specifying aria-hidden=\"true\".\n }\n}\n","import app from \"../lockdown_app\";\nimport { Carousel } from \"../components/carousel\";\nimport { NavCarousel } from \"../components/nav_carousel\";\n\nexport class CarouselModule {\n constructor(element) {\n this.element = element;\n\n const carousel = new Carousel(this.element, {\n cellAlign: \"left\",\n contain: true,\n pageDots: false,\n prevNextButtons: false,\n wrapAround: true,\n });\n\n const navCarousel = new NavCarousel(this.element, {\n cellAlign: \"left\",\n contain: true,\n draggable: false,\n pageDots: false,\n prevNextButtons: false,\n });\n }\n}\n\nexport const carouselModules = {\n current: [],\n};\n\nexport const init = () => {\n app.addEventListener(\"page-load\", (e) => {\n carouselModules.current = [\n ...e.target.querySelectorAll(\".js-carousel-module\"),\n ].map((instance) => new CarouselModule(instance));\n });\n};\n","import app from \"../lockdown_app\";\nimport { Carousel } from \"../components/carousel\";\n\nexport class LecturePlaylistModule {\n constructor(element) {\n this.element = element;\n\n const carousel = new Carousel(this.element, {\n adaptiveHeight: true,\n cellAlign: \"left\",\n pageDots: false,\n prevNextButtons: false,\n });\n }\n}\n\nexport const lecturePlaylistModules = {\n current: [],\n};\n\nexport const init = () => {\n app.addEventListener(\"page-load\", (e) => {\n lecturePlaylistModules.current = [\n ...e.target.querySelectorAll(\".js-lecture-playlist-module\"),\n ].map((instance) => new LecturePlaylistModule(instance));\n });\n};\n","import app from \"../lockdown_app\";\n\nexport class UpcomingLectureModule {\n constructor(element) {\n this.element = element;\n this.dateSpan = element.querySelector(\".js-ulm-countdown-date\");\n this.countdownDate = Number(this.dateSpan.dataset.date);\n this.countdown();\n }\n\n calculateTime() {\n const future = this.countdownDate;\n const now = new Date();\n\n let s = Math.floor((future - (now)) / 1000);\n let m = Math.floor(s / 60);\n let h = Math.floor(m / 60);\n let d = Math.floor(h / 24);\n\n h = h - (d * 24);\n m = m - (d * 24 * 60) - (h * 60);\n s = s - (d * 24 * 60 * 60) - (h * 60 * 60) - (m * 60);\n\n return `${d}d ${h}h ${m}m ${s}s`;\n }\n\n setTimeText() {\n const time = this.calculateTime();\n this.dateSpan.innerText = time;\n }\n\n countdown() {\n this.setTimeText();\n setInterval(() => this.setTimeText(), 1000);\n }\n}\n\nexport const upcomingLectureModules = {\n current: [],\n}\n\nexport const init = () => {\n app.addEventListener(\"page-load\", (e) => {\n upcomingLectureModules.current = [\n ...e.target.querySelectorAll(\".js-upcoming-lecture-module\"),\n ].map((instance) => new UpcomingLectureModule(instance));\n })\n}\n","// Import\n\n// Stimulus\nimport { Application } from \"@hotwired/stimulus\";\nimport { definitionsFromContext } from \"@hotwired/stimulus-webpack-helpers\";\n\n// Components\nimport * as calendarButton from \"./components/calendar_button\";\nimport * as newsletterSignupForm from \"./components/newsletter_signup_form\";\nimport * as panelFader from \"./components/panel_fader\";\n\n// Pages\n\n// BEGIN MAGIC_MODULE_IMPORT\nimport * as carouselModule from \"./magic_modules/carousel_module\";\nimport * as lecturePlaylistModule from \"./magic_modules/lecture_playlist_module\";\nimport * as upcomingLectureModule from \"./magic_modules/upcoming_lecture_module\";\n// END MAGIC_MODULE_IMPORT\n\n// Initialize\n\n// Stimulus\nwindow.Stimulus = Application.start();\nconst context = require.context(\"./controllers\", true, /\\.js$/);\nStimulus.load(definitionsFromContext(context));\n\n// Components\ncalendarButton.init();\nnewsletterSignupForm.init();\npanelFader.init();\n\n// BEGIN MAGIC_MODULE_INIT\ncarouselModule.init();\nlecturePlaylistModule.init();\nupcomingLectureModule.init();\n// END MAGIC_MODULE_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