{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/axios/lib/cancel/CanceledError.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/macy/dist/macy.js","webpack:///./node_modules/axios/lib/helpers/toFormData.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./assets/js/vendors/animate-on-scroll.js","webpack:///./node_modules/foundation-sites/js/foundation.core.utils.js","webpack:///./node_modules/foundation-sites/js/foundation.util.mediaQuery.js","webpack:///./node_modules/foundation-sites/js/foundation.core.js","webpack:///./node_modules/foundation-sites/js/foundation.core.plugin.js","webpack:///./node_modules/foundation-sites/js/foundation.util.keyboard.js","webpack:///./node_modules/foundation-sites/js/foundation.accordion.js","webpack:///./node_modules/foundation-sites/js/foundation.util.nest.js","webpack:///./node_modules/foundation-sites/js/foundation.accordionMenu.js","webpack:///./node_modules/foundation-sites/js/foundation.util.box.js","webpack:///./node_modules/foundation-sites/js/foundation.positionable.js","webpack:///./node_modules/foundation-sites/js/foundation.util.motion.js","webpack:///./node_modules/foundation-sites/js/foundation.util.triggers.js","webpack:///./node_modules/foundation-sites/js/foundation.util.touch.js","webpack:///./node_modules/foundation-sites/js/foundation.dropdown.js","webpack:///./node_modules/foundation-sites/js/foundation.dropdownMenu.js","webpack:///./node_modules/foundation-sites/js/foundation.util.imageLoader.js","webpack:///./node_modules/foundation-sites/js/foundation.equalizer.js","webpack:///./node_modules/foundation-sites/js/foundation.drilldown.js","webpack:///./node_modules/foundation-sites/js/foundation.responsiveMenu.js","webpack:///./node_modules/foundation-sites/js/foundation.responsiveToggle.js","webpack:///./node_modules/foundation-sites/js/foundation.reveal.js","webpack:///./node_modules/foundation-sites/js/foundation.slider.js","webpack:///./node_modules/foundation-sites/js/foundation.smoothScroll.js","webpack:///./node_modules/foundation-sites/js/foundation.sticky.js","webpack:///./node_modules/foundation-sites/js/foundation.tabs.js","webpack:///./node_modules/foundation-sites/js/foundation.toggler.js","webpack:///./node_modules/foundation-sites/js/foundation.tooltip.js","webpack:///./node_modules/foundation-sites/js/foundation.responsiveAccordionTabs.js","webpack:///./assets/js/vendors/foundation.js","webpack:///./assets/js/vendors/macy.js","webpack:///./assets/js/vendors/object-fit-images.js","webpack:///./node_modules/countup.js/dist/countUp.min.js","webpack:///./assets/js/scripts/count-on-scroll.js","webpack:///./assets/js/scripts/favorites.js","webpack:///./assets/js/scripts/images.js","webpack:///./assets/js/scripts/menu.js","webpack:///./assets/js/scripts/woocommerce.js","webpack:///./assets/js/scripts/wp-admin.js","webpack:///./src/Core/Blocks/Content/common/related_pages/script.js","webpack:///./src/Core/Blocks/Content/common/tag_filter/script.js","webpack:///./src/Core/Blocks/Content/common/usps/script.js","webpack:///./src/Core/Blocks/Marginals/header/thin_topbar_menu/script.js","webpack:////srv/www/d/deoorsprong.nl/vhosts/www/htdocs/content/themes/deoorsprong/assets/js/script.js","webpack:///./node_modules/process/browser.js","webpack:///./assets/js/scripts/cookies.js","webpack:///./node_modules/aos/dist/aos.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/object-fit-images/dist/ofi.common-js.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./assets/js/scripts/ie11.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./assets/js/scripts/resizes.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./assets/js/vendors/mobile.js","webpack:///./node_modules/axios/lib/helpers/null.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./src/Core/Blocks/Content/common/reviews/script.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/defaults/index.js","webpack:///./node_modules/ssr-window/ssr-window.esm.js","webpack:///./node_modules/dom7/node_modules/ssr-window/ssr-window.esm.js","webpack:///./node_modules/dom7/dom7.esm.js","webpack:///./node_modules/swiper/shared/dom.js","webpack:///./node_modules/swiper/shared/get-support.js","webpack:///./node_modules/swiper/shared/get-device.js","webpack:///./node_modules/swiper/shared/get-browser.js","webpack:///./node_modules/swiper/shared/utils.js","webpack:///./node_modules/swiper/core/transition/transitionEmit.js","webpack:///./node_modules/swiper/core/events/onTouchStart.js","webpack:///./node_modules/swiper/core/events/onTouchMove.js","webpack:///./node_modules/swiper/core/events/onTouchEnd.js","webpack:///./node_modules/swiper/core/events/onResize.js","webpack:///./node_modules/swiper/core/events/onClick.js","webpack:///./node_modules/swiper/core/events/onScroll.js","webpack:///./node_modules/swiper/core/events/index.js","webpack:///./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack:///./node_modules/swiper/core/check-overflow/index.js","webpack:///./node_modules/swiper/core/defaults.js","webpack:///./node_modules/swiper/core/moduleExtendParams.js","webpack:///./node_modules/swiper/core/core.js","webpack:///./node_modules/swiper/core/events-emitter.js","webpack:///./node_modules/swiper/core/update/index.js","webpack:///./node_modules/swiper/core/update/updateSize.js","webpack:///./node_modules/swiper/core/update/updateSlides.js","webpack:///./node_modules/swiper/core/update/updateAutoHeight.js","webpack:///./node_modules/swiper/core/update/updateSlidesOffset.js","webpack:///./node_modules/swiper/core/update/updateSlidesProgress.js","webpack:///./node_modules/swiper/core/update/updateProgress.js","webpack:///./node_modules/swiper/core/update/updateSlidesClasses.js","webpack:///./node_modules/swiper/core/update/updateActiveIndex.js","webpack:///./node_modules/swiper/core/update/updateClickedSlide.js","webpack:///./node_modules/swiper/core/translate/index.js","webpack:///./node_modules/swiper/core/translate/getTranslate.js","webpack:///./node_modules/swiper/core/translate/setTranslate.js","webpack:///./node_modules/swiper/core/translate/minTranslate.js","webpack:///./node_modules/swiper/core/translate/maxTranslate.js","webpack:///./node_modules/swiper/core/translate/translateTo.js","webpack:///./node_modules/swiper/core/transition/index.js","webpack:///./node_modules/swiper/core/transition/setTransition.js","webpack:///./node_modules/swiper/core/transition/transitionStart.js","webpack:///./node_modules/swiper/core/transition/transitionEnd.js","webpack:///./node_modules/swiper/core/slide/index.js","webpack:///./node_modules/swiper/core/slide/slideTo.js","webpack:///./node_modules/swiper/core/slide/slideToLoop.js","webpack:///./node_modules/swiper/core/slide/slideNext.js","webpack:///./node_modules/swiper/core/slide/slidePrev.js","webpack:///./node_modules/swiper/core/slide/slideReset.js","webpack:///./node_modules/swiper/core/slide/slideToClosest.js","webpack:///./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack:///./node_modules/swiper/core/loop/index.js","webpack:///./node_modules/swiper/core/loop/loopCreate.js","webpack:///./node_modules/swiper/core/loop/loopFix.js","webpack:///./node_modules/swiper/core/loop/loopDestroy.js","webpack:///./node_modules/swiper/core/grab-cursor/index.js","webpack:///./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack:///./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack:///./node_modules/swiper/core/breakpoints/index.js","webpack:///./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack:///./node_modules/swiper/core/classes/index.js","webpack:///./node_modules/swiper/core/classes/addClasses.js","webpack:///./node_modules/swiper/core/classes/removeClasses.js","webpack:///./node_modules/swiper/core/images/index.js","webpack:///./node_modules/swiper/core/images/loadImage.js","webpack:///./node_modules/swiper/core/images/preloadImages.js","webpack:///./node_modules/swiper/core/modules/resize/resize.js","webpack:///./node_modules/swiper/core/modules/observer/observer.js","webpack:///./node_modules/swiper/shared/create-element-if-not-defined.js","webpack:///./node_modules/swiper/modules/navigation/navigation.js","webpack:///./node_modules/swiper/shared/classes-to-selector.js","webpack:///./node_modules/swiper/modules/pagination/pagination.js","webpack:///./node_modules/swiper/modules/scrollbar/scrollbar.js","webpack:///./node_modules/swiper/modules/controller/controller.js","webpack:///./node_modules/swiper/modules/autoplay/autoplay.js","webpack:///./node_modules/swiper/modules/thumbs/thumbs.js","webpack:///./node_modules/swiper/shared/effect-init.js","webpack:///./node_modules/swiper/shared/effect-target.js","webpack:///./node_modules/swiper/shared/create-shadow.js","webpack:///./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/env/data.js","webpack:///./node_modules/axios/lib/helpers/isAxiosError.js","webpack:///./src/Core/Blocks/Content/common/featured_menu_items/script.js","webpack:///./assets/js/vendors/parallax.js","webpack:///./assets/js/vendors/clamp.js","webpack:///./assets/js/scripts/buddypress.js","webpack:///./node_modules/axios/lib/core/AxiosError.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./assets/js/scripts/scroll-to-top.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/helpers/validator.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/what-input/dist/what-input.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/axios/lib/helpers/parseProtocol.js","webpack:///./assets/js/scripts/blocks.js","webpack:///./node_modules/axios/index.js","webpack:///./src/Core/Blocks/Content/common/pricing/script.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///external \"jQuery\"","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/axios/lib/defaults/transitional.js","webpack:///./node_modules/axios/lib/axios.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","AxiosError","CanceledError","message","this","ERR_CANCELED","inherits","__CANCEL__","url","test","toString","Array","isArray","arr","e","length","push","arguments","window","Promise","A","recalculate","useContainerForBreakpoints","container","clientWidth","innerWidth","columns","b","margin","x","y","keys","breakAt","mobileFirst","options","responsiveOptions","docWidth","a","parseInt","O","parseFloat","replace","u","rows","v","style","height","M","offsetHeight","isNaN","forEach","position","top","left","cols","dataset","macyComplete","tmpRows","f","lastcol","C","h","nodeName","byCss","selectors","split","RegExp","document","querySelectorAll","getElementsByClassName","substring","getElementsByTagName","getElementById","running","events","add","run","shift","clear","instance","data","on","emit","g","naturalHeight","naturalWidth","width","E","complete","addEventListener","then","constants","EVENT_IMAGE_LOAD","img","catch","EVENT_IMAGE_ERROR","w","all","EVENT_IMAGE_COMPLETE","I","clearTimeout","setTimeout","EVENT_RESIZE","queue","_","debug","console","error","N","resizer","T","useOwnImageLoader","waitForImages","EVENT_INITIALIZED","L","getComputedStyle","getPropertyValue","V","children","from","filter","offsetParent","trueOrder","EVENT_RECALCULATED","R","assign","k","useImageLoader","onInit","cancelLegacy","createElement","querySelector","getAttribute","id","Math","floor","random","apply","removeAttribute","Element","q","init","warn","recalculateOnImageLoad","runOnImageLoad","remove","removeEventListener","reInit","utils","obj","formData","FormData","stack","convertValue","isDate","toISOString","isArrayBuffer","isTypedArray","Blob","Buffer","build","parentKey","isPlainObject","indexOf","Error","isUndefined","fullKey","endsWith","JSON","stringify","toArray","el","append","pop","baseURL","relativeURL","AOS","rtl","$","attr","GetYoDigits","namespace","str","chars","charsLength","transitionend","$elem","end","transitions","elem","transition","triggerHandler","onLoad","handler","didLoad","readyState","eventType","cb","one","ignoreMousedisappear","ignoreLeaveWindow","ignoreReappear","eLeave","rest","callback","relatedTarget","hasFocus","eReenter","currentTarget","has","target","matchMedia","styleMedia","media","info","script","type","parentNode","insertBefore","head","appendChild","currentStyle","matchMedium","text","styleSheet","cssText","textContent","matches","MediaQuery","queries","current","_init","isInitialized","appendTo","namedQueries","extractedStyles","css","styleObject","trim","slice","reduce","ret","param","parts","val","decodeURIComponent","parseStyleToObject","_getCurrentSize","_watcher","_reInit","atLeast","size","query","only","upTo","nextSize","next","is","bpSize","bpModifier","queryIndex","findIndex","_getQueryName","nextQuery","TypeError","matched","newSize","currentSize","trigger","Foundation","version","_plugins","_uuids","plugin","className","functionName","attrName","hyphenate","registerPlugin","pluginName","constructor","toLowerCase","uuid","$element","unregisterPlugin","prop","splice","removeAttr","removeData","plugins","isJQ","each","_this","plgs","foundation","err","reflow","find","addBack","$el","opts","option","opt","map","parseValue","er","getFnName","addToJquery","fn","method","$noJS","removeClass","args","plugClass","ReferenceError","Function","results","exec","util","throttle","func","delay","timer","context","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","navigator","userAgent","lastTime","nextTime","max","performance","start","oThis","aArgs","fToBind","fNOP","fBound","concat","Plugin","element","_setup","getPluginName","_destroy","keyCodes","9","13","27","32","35","36","37","38","39","40","commands","findFocusable","sort","aTabIndex","bTabIndex","parseKey","event","which","keyCode","String","fromCharCode","toUpperCase","shiftKey","ctrlKey","altKey","Keyboard","kcs","kc","getKeyCodes","handleKey","component","functions","commandList","zfIsKeyHandled","ltr","Rtl","extend","returnValue","handled","unhandled","register","componentName","cmds","trapFocus","$focusable","$firstFocusable","eq","$lastFocusable","preventDefault","focus","releaseFocus","off","Accordion","defaults","_isInitializing","$tabs","idx","$content","linkId","$initActive","_initialAnchor","prev","_openSingleTab","_checkDeepLink","anchor","location","hash","$anchor","$link","parent","hasClass","_closeAllTabs","deepLinkSmudge","offset","animate","scrollTop","deepLinkSmudgeOffset","deepLinkSmudgeDelay","deepLink","_events","$tabContent","toggle","$a","multiExpand","previous","first","last","$target","closest","up","down","updateHistory","history","pushState","replaceState","_openTab","$targetItem","$othersItems","siblings","allowAllClosed","_closeTab","$activeContents","not","targetContentId","addClass","finish","slideDown","slideSpeed","slideUp","$activeTabs","stop","Nest","menu","items","subMenuClass","subItemClass","hasSubClass","applyAria","$item","$sub","firstItem","AccordionMenu","multiOpen","$menuLinks","subId","isActive","parentLink","clone","prependTo","wrap","submenuToggle","after","submenuToggleText","initPanes","$submenu","$prevElement","$nextElement","$elements","min","parents","open","close","closeAll","hideAll","$targetBranch","parentsUntil","$othersActiveSubmenus","$submenus","$allmenus","detach","Box","ImNotTouchingYou","lrOnly","tbOnly","ignoreBottom","OverlapArea","GetDimensions","GetExplicitOffsets","alignment","vOffset","hOffset","isOverflow","topVal","leftVal","$eleDims","$anchorDims","topOver","bottomOver","leftOver","rightOver","eleDims","parDims","windowDims","sqrt","rect","getBoundingClientRect","parRect","winRect","body","winY","pageYOffset","winX","pageXOffset","parentDims","POSITIONS","VERTICAL_ALIGNMENTS","HORIZONTAL_ALIGNMENTS","ALIGNMENTS","nextItem","item","array","currentIdx","Positionable","triedPositions","_getDefaultPosition","_getDefaultAlignment","originalPosition","originalAlignment","_alignmentsExhausted","_realign","_addTriedPosition","isExhausted","$parent","allowOverlap","_getVOffset","_getHOffset","minOverlap","minCoordinates","_positionsExhausted","overlap","allowBottomOverlap","_reposition","initClasses","activeClasses","Motion","animation","isIn","initClass","activeClass","reset","show","offsetWidth","hide","transitionDuration","MutationObserver","prefixes","triggers","Triggers","Listeners","Basic","Global","Initializers","debounceGlobalListener","debounce","listener","openListener","closeListener","toggleListener","closeableListener","stopPropagation","fadeOut","toggleFocusListener","addOpenListener","addCloseListener","addToggleListener","addCloseableListener","addToggleFocusListener","resizeListener","$nodes","scrollListener","closeMeListener","pluginId","addClosemeListener","yetiBoxes","plugNames","listeners","join","addResizeListener","addScrollListener","addMutationEventsListener","listeningElementsMutation","mutationRecordsList","attributeName","observe","attributes","childList","characterData","subtree","attributeFilter","addSimpleListeners","$document","addGlobalListeners","__","triggersInitialized","IHearYou","startPosX","startTime","elapsedTime","startEvent","Touch","isMoving","didMoved","onTouchEnd","onTouchMove","tapEvent","Event","spotSwipe","dir","touches","pageX","dx","abs","moveThreshold","timeThreshold","onTouchStart","passive","SpotSwipe","enabled","documentElement","special","swipe","setup","tap","noop","setupSpotSwipe","setupTouchHandler","addTouch","handleTouch","simulatedEvent","changedTouches","touchstart","touchmove","touchend","MouseEvent","screenX","screenY","clientX","clientY","createEvent","initMouseEvent","dispatchEvent","Dropdown","$id","$anchors","_setCurrentAnchor","parentClass","$currentAnchor","match","horizontalPosition","hasTouch","ontouchstart","_setPosition","forceFollow","hover","bodyData","whatinput","timeout","hoverDelay","hoverPane","$body","autoFocus","closeOnClick","_addBodyHandler","DropdownMenu","subs","$menuItems","verticalClass","rightClass","changed","parClass","clickOpen","hasSub","hasClicked","stopImmediatePropagation","_hide","_show","closeOnClickInside","disableHoverOnTouch","disableHover","autoclose","closingTime","isTab","index","nextSibling","prevSibling","openSub","closeSub","_isVertical","_isRtl","_removeBodyHandler","$sibs","oldClass","$parentLi","$toClose","$activeItem","onImagesLoaded","images","unloaded","singleImageLoaded","image","Image","me","src","Equalizer","eqId","$watched","hasNested","isNested","isOn","_bindHandler","onResizeMeBound","_onResizeMe","onPostEqualizedBound","_onPostEqualized","tooSmall","imgs","equalizeOn","_checkMQ","_reflow","_pauseEvents","equalizeOnStack","_isStacked","equalizeByRow","getHeightsByRow","applyHeightByRow","getHeights","applyHeight","heights","len","lastElTopOffset","groups","group","elOffsetTop","j","ln","groupsILength","lenJ","Drilldown","autoApplyClass","$submenuAnchors","$currentMenu","_prepareMenu","_registerEvents","_keyboardEvents","$menu","backButtonPosition","backButton","prepend","_back","autoHeight","$wrapper","wrapper","animateHeight","_getMaxDims","ev","contains","_hideAll","_scrollTop","_resize","$scrollTopElement","scrollTopElement","scrollPos","scrollTopOffset","animationDuration","animationEasing","calcHeight","parentSubMenu","_setHideSubMenuClasses","isLastChild","_setShowSubMenuClasses","blur","maxHeight","result","unwrap","MenuPlugins","dropdown","cssClass","drilldown","accordion","ResponsiveMenu","rules","currentMq","currentPlugin","rulesTree","rule","ruleSize","rulePlugin","isEmptyObject","_checkMediaQueries","matchedMq","destroy","ResponsiveToggle","targetID","$targetMenu","$toggler","input","animationIn","animationOut","_update","_updateMqHandler","toggleMenu","hideFor","Reveal","cached","mq","fullScreen","overlay","$overlay","_makeOverlay","onLoadListener","additionalOverlayClasses","outerWidth","outerHeight","_updatePosition","_handleState","$activeAnchor","activeElement","multipleOpened","_disableScroll","focusableElements","_addGlobalClasses","showDelay","_addGlobalListeners","updateScrollbarClass","toggleClass","closeOnEsc","finishUp","_removeGlobalClasses","_enableScroll","hideDelay","resetOnClose","html","urlWithoutHash","pathname","search","title","Slider","initialized","inputs","handles","$handle","$input","$fill","vertical","disabled","disabledClass","binding","_setInitAttr","doubleSided","$handle2","$input2","setHandles","_setHandlePos","pctOfBar","percent","positionValueFunction","_logTransform","_powTransform","toFixed","base","log","baseLog","nonLinearBase","pow","$hndl","isDbl","h2Val","step","h1Val","vert","hOrW","lOrT","handleDim","elemDim","_pctOfBar","movement","decimal","_setValues","dim","isLeftHndl","handlePct","handlePos","initialStart","duration","anim","prog","move","ts","Move","moveTime","changedDelay","initVal","initialEnd","_adjustValue","direction","eventOffset","pageY","barDim","windowScroll","scrollLeft","elemOffset","barXY","eventFromBar","offsetPct","_value","absPosition","previousVal","div","_eventsForHandle","curHandle","handleChangeEvent","_handleEvent","clickSelect","draggable","newValue","_$handle","oldValue","decrease","increase","decreaseFast","increaseFast","frac","num","clickPos","invertVertical","SmoothScroll","loc","$loc","round","threshold","_linkClickListener","_handleLinkClick","arrival","_inTransition","scrollToLoc","Sticky","$container","wasWrapped","containerClass","stickyClass","scrollCount","checkEvery","isStuck","containerHeight","elemHeight","_parsePoints","_setSizes","scroll","_calc","_removeSticky","topPoint","reverse","pts","topAnchor","btmAnchor","scrollHeight","breaks","pt","place","points","canStick","_eventsHandler","_pauseListeners","checkSizes","bottomPoint","_setSticky","stickTo","mrgn","notStuckTo","isTop","stickToTop","anchorPt","anchorHeight","topOrBottom","bottom","stickyOn","newElemWidth","comp","pdngl","pdngr","dynamicHeight","newContainerHeight","_setBreakPoints","mTop","emCalc","marginTop","mBtm","marginBottom","winHeight","innerHeight","em","fontSize","Tabs","$tabTitles","linkClass","linkActiveClass","matchHeight","$images","_setHeight","anchorNoHash","selectTab","_collapse","_addKeyHandler","_addClickHandler","_setHeightMqHandler","_handleTabChange","wrapOnKeys","historyHandled","activeCollapse","$oldTab","$tabLink","$targetContent","_collapseTab","panelActiveClass","$targetAnchor","$activeTab","idStr","hashIdStr","panelClass","panel","temp","Toggler","$triggers","toggler","$trigger","controls","_updateARIA","undefined","Tooltip","isClick","elemId","tipText","template","_buildTemplate","allowHtml","triggerClass","elementClassName","SVGElement","baseVal","tooltipWidth","tooltipHeight","templateClasses","tooltipClass","showOn","fadeIn","fadeInDuration","fadeOutDuration","isFocus","disableForTouch","touchCloseText","tabs","ResponsiveAccordionTabs","storezfData","currentRule","_getAllOptions","allOptions","dummyPlugin","tmpPlugin","keyKey","objObj","_changedZfMediaQueryHandler","_handleMarkup","toSet","fromString","$panels","tabsTitle","tabsPanel","$liHeads","$liHeadsA","display","visibility","$tabsContent","$placeholder","insertAfter","tempValue","masonryGrids","Macy","640","1024","objectFitImages","__assign","CountUp","endVal","startVal","decimalPlaces","useEasing","useGrouping","smartEasingThreshold","smartEasingAmount","separator","prefix","suffix","enableScrollSpy","scrollSpyDelay","scrollSpyOnce","finalEndVal","countDown","paused","once","count","remaining","frameVal","easingFn","Number","printValue","rAF","update","formatNumber","numerals","easeOutExpo","formattingFn","validateValue","resetDuration","onScrollFns","handleScroll","onscroll","scrollY","determineDirectionAndSmartEasing","pauseResume","tagName","innerHTML","ensureNumber","bubbles","cancelable","composed","registerEventListeners","elements","intersectionObserver","IntersectionObserver","animateModern","root","rootMargin","animateLegacy","elementIsInView","animateElement","countUp","counterDecimal","button","postID","action","themosis","axios","response","addToFavorites","removeFromFavorites","directions","column","containerId","LazyLoad","randomID","submenu","logo","logoMobile","language","overlayItems","li","toggleArrow","submenuTogglesCheckInterval","setInterval","submenuToggles","clearInterval","searchBlockButton","searchFormBlock","galleryThumbs","slidesPerView","freeMode","watchSlidesVisibility","watchSlidesProgress","scrollbar","navigation","nextEl","prevEl","thumbs","swiper","select","wp","gutenbergLoadCheck","anchors","editPost","fields","initialOffset","masonry","slider","textLoadMore","textLoading","textLoadFailed","cards","cardSliders","$hiddenInput","$emptyInput","$smartTag","cache","smart_tag","success","$select","selectedOption","selectedSmartTagLabel","ga","analyticsGTMID","resolve","Swiper","msInitializeUSPSlider","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","nextTick","browser","env","argv","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","cwd","chdir","umask","translationNotice","cname","cvalue","exdays","expires","setCookie","loaded","default","easing","disable","throttleDelay","debounceDelay","disableMutationObserver","atob","mobile","phone","tablet","S","node","isSupported","setAttribute","ready","refresh","refreshHard","leading","maxWait","trailing","cancel","flush","valueOf","iterator","NaN","self","WebKitMutationObserver","MozMutationObserver","addedNodes","removedNodes","aos","vendor","opera","configurable","writable","substr","classList","anchorPlacement","offsetLeft","offsetTop","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","OFI","propRegex","testImg","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","placeholder","onImageReady","fixOne","parsed","fontFamily","props","getStyle","ofi","skipTest","srcset","descriptors","set","ss","keepSrcUsable","picturefill","pf","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundImage","backgroundPosition","backgroundRepeat","backgroundOrigin","backgroundSize","fix","startAutoMode","watchMQ","getOfiImageMaybe","HTMLImageElement","hijackAttributes","buildURL","dispatchRequest","mergeConfig","buildFullPath","validator","validators","Axios","instanceConfig","interceptors","request","configOrUrl","config","transitional","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","clarifyTimeoutError","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","chain","newConfig","onFulfilled","onRejected","reject","getUri","fullPath","params","paramsSerializer","generateHTTPMethod","isForm","headers","flexBasis","isMargin","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","Arr","_byteLength","curByte","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","len2","encodeChunk","lookup","Uint8Array","code","output","thisArg","encode","encodeURIComponent","serializedParams","isURLSearchParams","isObject","hashmarkIndex","scrollbox","scrollBarWidth","setScrollbarSize","epve","getEditorWidth","isStandardBrowserEnv","originURL","msie","urlParsingNode","resolveURL","href","protocol","host","hostname","port","charAt","requestURL","isString","containers","validateStatus","status","ERR_BAD_REQUEST","ERR_BAD_RESPONSE","msInitializeReviewSlider","acf","config1","config2","getMergedValue","source","merge","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","normalizeHeaderName","transitionalDefaults","toFormData","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","XMLHttpRequest","transformRequest","isFormData","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isFileList","isObjectPayload","contentType","_FormData","rawValue","parser","encoder","parse","stringifySafely","transformResponse","strictJSONParsing","responseType","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","common","ssrDocument","childNodes","createElementNS","importNode","origin","getDocument","doc","ssrWindow","CustomEvent","screen","getWindow","win","Dom7","proto","__proto__","arrayFlat","res","arrayFilter","selector","toCreate","tempParent","qsa","nodeType","uniqueArray","arrayUnique","noTrigger","shortcut","Methods","classes","classNames","attrs","transform","targetSelector","capture","handleLiveEvent","eventData","dom7EventData","handleEvent","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","evt","detail","dataIndex","transitionEnd","dom","fireCallBack","includeMargins","styles","box","clientTop","clientLeft","scrollX","compareWith","webkitMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","newChild","tempDiv","firstChild","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","foundElements","found","removeChild","methodName","support","deviceCached","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","isNode","HTMLElement","to","noExtend","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","_ref","time","targetPosition","side","startPosition","translate","speed","wrapperEl","scrollSnapType","cssModeFrameID","isOutOfBound","progress","easeProgress","cos","PI","currentPosition","scrollTo","overflow","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","supportsPassive","gestures","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","isWebView","calcBrowser","transitionEmit","runCallbacks","activeIndex","previousIndex","touchEventsData","animating","preventInteractionOnTransition","cssMode","loop","loopFix","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","currentX","targetTouches","currentY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","allowThresholdMove","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","rtlTranslate","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","diffX","diffY","touchAngle","isHorizontal","atan2","touchMoveStopPropagation","nested","startTranslate","setTransition","$wrapperEl","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","diff","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","updateActiveIndex","updateSlidesClasses","updateProgress","setTranslate","slidesGrid","currentPos","touchEndTime","timeDiff","pathTree","composedPath","updateClickedSlide","lastClickTime","destroyed","stopIndex","groupSize","slidesSizesGrid","slidesPerGroupSkip","slidesPerGroup","increment","rewindFirstIndex","rewindLastIndex","rewind","isBeginning","virtual","slides","isEnd","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","onResize","breakpoints","setBreakpoint","snapGrid","updateSlides","centeredSlides","autoplay","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","onScroll","previousTranslate","translatesDiff","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","updateOnWindowResize","isGridEnabled","grid","initialSlide","resizeObserver","createElements","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","slideToClickedSlide","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","maxBackfaceHiddenSlides","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","priority","eventsListeners","onceHandler","__emitterProxy","_len","_key","onAny","eventsAnyListeners","offAny","eventHandler","_len2","_key2","eventsArray","clientHeight","getDirectionLabel","getDirectionPropertyValue","label","swiperSize","wrongRTL","isVirtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","slideSize","gridEnabled","initSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","boxSizing","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","ceil","swiperSlideOffset","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","multiplier","wasBeginning","wasEnd","activeSlide","realIndex","nextSlide","prevSlide","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","skip","slideFound","clickedSlide","clickedIndex","byController","translateTo","translateBounds","internal","newTranslate","isH","onTranslateToWrapperTransitionEnd","transitionStart","initial","indexAsNumber","isFinite","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerViewDynamic","_clientLeft","slidePrev","normalize","prevSnapIndex","normalizedSnapGrid","prevSnap","prevIndex","lastIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","cloneNode","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","wasModuleEnabled","isModuleEnabled","enable","directionChanged","needsReLoop","changeDirection","isEnabled","containerEl","currentHeight","point","minRatio","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","entries","resultClasses","suffixes","removeClasses","loadImage","imageEl","sizes","checkForComplete","onReady","onload","onerror","imagesLoaded","imagesToLoad","extendedDefaults","swipers","newParams","__modules__","mod","extendParams","desktop","swiperParams","passedParams","eventName","velocity","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","newDefaults","installModule","cls","slideEl","updates","getSlideClasses","view","exact","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","mounted","getWrapperSelector","getWrapper","mount","deleteInstance","cleanStyles","prototypeGroup","protoMethod","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","unobserve","observers","attach","WebkitMutationObserver","mutations","observerUpdate","observeParents","observeSlideChildren","containerParents","disconnect","createElementIfNotDefined","checkProps","Navigation","getEl","toggleEl","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","hiddenClass","navigationDisabledClass","_s","targetEl","pagination","clickable","isHidden","classesToSelector","Pagination","bulletSize","pfx","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","midIndex","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","Scrollbar","dragStartPos","dragSize","trackSize","divider","dragTimeout","$dragEl","newPos","opacity","getPointerPosition","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","scrollbarDisabledClass","Controller","LinearSpline","maxIndex","minIndex","guess","i1","i3","binarySearch","interpolate","x2","removeSpline","controller","control","spline","inverse","by","_t","controlledTranslate","controlled","setControlledTranslate","getInterpolateFunction","setControlledTransition","Autoplay","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onTransitionEnd","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","Thumb","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","effectInit","requireUpdateOnVirtual","overwriteParams","perspective","recreateShadows","getEffectParams","overwriteParamsResult","slideShadows","effectTarget","effectParams","$slideEl","transformEl","createShadow","shadowClass","$shadowContainer","$shadowEl","EffectCoverflow","coverflowEffect","rotate","stretch","depth","modifier","swiperWidth","swiperHeight","center","centerOffset","offsetMultiplier","rotateY","rotateX","translateZ","translateY","translateX","slideTransform","zIndex","$shadowBeforeEl","$shadowAfterEl","transformData","isCancel","throwIfCancellationRequested","cancelToken","throwIfRequested","signal","aborted","reason","payload","isAxiosError","previews","link","preview","positions","positionX","positionY","imageSrc","sliderExisted","$slider","Parallax","currTime","timeToCall","bleed","iosFix","androidFix","overScrollFix","mirrorContainer","boxOffsetTop","docHeight","maxOffset","minOffset","imageHeightMin","boxHeight","imageOffsetMin","imageWidth","boxWidth","imageHeight","overScroll","scrollBottom","boxOffsetBottom","boxOffsetLeft","offsetBaseTop","mirrorTop","maxWidth","winWidth","sliders","isReady","isFresh","isBusy","$doc","$win","loadDimensions","loadScrollPosition","winScrollTop","scrollTopMax","scrollLeftMax","lastPosition","frameLoop","configure","requestRender","parallaxElement","old","$this","clamp","useNativeClamp","splitOnChars","truncationChar","truncationHTML","sty","originalText","supportsNativeClamp","clampValue","isCSSValue","re","availHeight","lineHeight","getLineHeight","lh","computeStyle","truncationHTMLContainer","splitChar","getLastChild","getMaxLines","clampedText","nodeValue","chunks","lastChunk","applyEllipsis","truncate","original","clamped","changeOption","field","toJSON","description","fileName","lineNumber","columnNumber","defineProperties","customProps","axiosError","toFlatObject","write","domain","secure","cookie","isNumber","toGMTString","read","backTop","checkBackToTop","windowTop","scrollElement","scrolling","scrollEl","currentTime","animateScroll","timestamp","final","dataElement","scrollDuration","scrollOffset","moveFocus","isAbsoluteURL","combineURLs","requestedURL","VERSION","thing","deprecatedWarnings","formatMessage","ERR_DEPRECATED","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","CancelToken","executor","resolvePromise","token","_listeners","onfulfilled","_resolve","subscribe","unsubscribe","factory","ask","ignoreKeys","specificKeys","registerOnChange","unRegisterOnChange","docElem","currentElement","currentInput","currentIntent","currentTimestamp","shouldPersist","formInputs","functionList","ignoreMap","specificMap","inputMap","keydown","keyup","mousedown","mousemove","MSPointerDown","MSPointerMove","pointerdown","pointermove","mousePos","pointerMap","2","3","4","addListeners","setPersist","PointerEvent","setInput","setIntent","MSPointerEvent","detectWheel","setElement","clearElement","sessionStorage","getItem","doUpdate","eventKey","pointerType","ignoreMatch","specificMatch","shouldUpdate","validateTouch","persistInput","activeElem","checkClosest","fireFunctions","detectScrolling","setItem","touchIsValid","onmousewheel","tag","ElementPrototype","parentElement","objPos","clearStorage","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","Infinity","rt","LN2","settle","cookies","parseHeaders","isURLSameOrigin","parseProtocol","onCanceled","requestData","requestHeaders","done","auth","username","password","unescape","Authorization","btoa","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","onreadystatechange","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","xsrfValue","withCredentials","setRequestHeader","onDownloadProgress","onUploadProgress","upload","abort","send","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","arg","encodingOrOffset","allocUnsafe","ArrayBuffer","byteOffset","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","checked","copy","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","global","foo","subarray","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","list","pos","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","stringtrim","base64clean","dst","wpSoupGetBlocksOnPage","blocks","wpSoupGetBlocksFromBlock","block","blockType","notDefined","wp_soup_deprecated_blocks","available_blocks","blocks_in_page","priceToggle","priceContent","extraPriceContent","priceBlock","priceBlocks","buttonWC","buttonWCHref","buttonHref","extraOptions","selectedOptionsID","selectedOptions","optionName","optionID","firstPriceNode","secondPriceNode","optionPrice","optionPrice2","firstPrice","newFirstPriceHTML","secondPrice","secondPriceHTML","optionsString","ignoreDuplicateOf","line","fns","kindOf","kindOfTest","getPrototypeOf","isFunction","TypedArray","pipe","product","assignValue","stripBOM","content","superConstructor","sourceObj","destObj","merged","getOwnPropertyNames","searchString","jQuery","normalizedName","createInstance","defaultConfig","Cancel","promises","spread"],"mappings":"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","file":"/dist/js/site/deoorsprong.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 = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):t.Macy=n()}(this,function(){\"use strict\";function t(t,n){var e=void 0;return function(){e&&clearTimeout(e),e=setTimeout(t,n)}}function n(t,n){for(var e=t.length,r=e,o=[];e--;)o.push(n(t[r-e-1]));return o}function e(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(window.Promise)return A(t,n,e);t.recalculate(!0,!0)}function r(t){for(var n=t.options,e=t.responsiveOptions,r=t.keys,o=t.docWidth,i=void 0,s=0;s=a&&(i=n.breakAt[a],O(i,e))}return e}function o(t){for(var n=t.options,e=t.responsiveOptions,r=t.keys,o=t.docWidth,i=void 0,s=r.length-1;s>=0;s--){var a=parseInt(r[s],10);o<=a&&(i=n.breakAt[a],O(i,e))}return e}function i(t){var n=t.useContainerForBreakpoints?t.container.clientWidth:window.innerWidth,e={columns:t.columns};b(t.margin)?e.margin={x:t.margin.x,y:t.margin.y}:e.margin={x:t.margin,y:t.margin};var i=Object.keys(t.breakAt);return t.mobileFirst?r({options:t,responsiveOptions:e,keys:i,docWidth:n}):o({options:t,responsiveOptions:e,keys:i,docWidth:n})}function s(t){return i(t).columns}function a(t){return i(t).margin}function c(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],e=s(t),r=a(t).x,o=100/e;if(!n)return o;if(1===e)return\"100%\";var i=\"px\";if(\"string\"==typeof r){var c=parseFloat(r);i=r.replace(c,\"\"),r=c}return r=(e-1)*r/e,\"%\"===i?o-r+\"%\":\"calc(\"+o+\"% - \"+r+i+\")\"}function u(t,n){var e=s(t.options),r=0,o=void 0,i=void 0;if(1===++n)return 0;i=a(t.options).x;var u=\"px\";if(\"string\"==typeof i){var l=parseFloat(i,10);u=i.replace(l,\"\"),i=l}return o=(i-(e-1)*i/e)*(n-1),r+=c(t.options,!1)*(n-1),\"%\"===u?r+o+\"%\":\"calc(\"+r+\"% + \"+o+u+\")\"}function l(t){var n=0,e=t.container,r=t.rows;v(r,function(t){n=t>n?t:n}),e.style.height=n+\"px\"}function p(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=s(t.options),i=a(t.options).y;M(t,o,e),v(n,function(n){var e=0,o=parseInt(n.offsetHeight,10);isNaN(o)||(t.rows.forEach(function(n,r){n2&&void 0!==arguments[2]&&arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=s(t.options),i=a(t.options).y;M(t,o,e),v(n,function(n){t.lastcol===o&&(t.lastcol=0);var e=C(n,\"height\");e=parseInt(n.offsetHeight,10),isNaN(e)||(n.style.position=\"absolute\",n.style.top=t.rows[t.lastcol]+\"px\",n.style.left=\"\"+t.cols[t.lastcol],t.rows[t.lastcol]+=isNaN(e)?0:e+i,t.lastcol+=1,r&&(n.dataset.macyComplete=1))}),r&&(t.tmpRows=null),l(t)}var h=function t(n,e){if(!(this instanceof t))return new t(n,e);if(n&&n.nodeName)return n;if(n=n.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\"),e)return this.byCss(n,e);for(var r in this.selectors)if(e=r.split(\"/\"),new RegExp(e[1],e[2]).test(n))return this.selectors[r](n);return this.byCss(n)};h.prototype.byCss=function(t,n){return(n||document).querySelectorAll(t)},h.prototype.selectors={},h.prototype.selectors[/^\\.[\\w\\-]+$/]=function(t){return document.getElementsByClassName(t.substring(1))},h.prototype.selectors[/^\\w+$/]=function(t){return document.getElementsByTagName(t)},h.prototype.selectors[/^\\#[\\w\\-]+$/]=function(t){return document.getElementById(t.substring(1))};var v=function(t,n){for(var e=t.length,r=e;e--;)n(t[r-e-1])},m=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.running=!1,this.events=[],this.add(t)};m.prototype.run=function(){if(!this.running&&this.events.length>0){var t=this.events.shift();this.running=!0,t(),this.running=!1,this.run()}},m.prototype.add=function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return!!n&&(Array.isArray(n)?v(n,function(n){return t.add(n)}):(this.events.push(n),void this.run()))},m.prototype.clear=function(){this.events=[]};var d=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.instance=t,this.data=n,this},y=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.events={},this.instance=t};y.prototype.on=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(!t||!n)&&(Array.isArray(this.events[t])||(this.events[t]=[]),this.events[t].push(n))},y.prototype.emit=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!Array.isArray(this.events[t]))return!1;var e=new d(this.instance,n);v(this.events[t],function(t){return t(e)})};var g=function(t){return!(\"naturalHeight\"in t&&t.naturalHeight+t.naturalWidth===0)||t.width+t.height!==0},E=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise(function(t,e){if(n.complete)return g(n)?t(n):e(n);n.addEventListener(\"load\",function(){return g(n)?t(n):e(n)}),n.addEventListener(\"error\",function(){return e(n)})}).then(function(n){e&&t.emit(t.constants.EVENT_IMAGE_LOAD,{img:n})}).catch(function(n){return t.emit(t.constants.EVENT_IMAGE_ERROR,{img:n})})},w=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return n(e,function(n){return E(t,n,r)})},A=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return Promise.all(w(t,n,e)).then(function(){t.emit(t.constants.EVENT_IMAGE_COMPLETE)})},I=function(n){return t(function(){n.emit(n.constants.EVENT_RESIZE),n.queue.add(function(){return n.recalculate(!0,!0)})},100)},N=function(t){if(t.container=h(t.options.container),t.container instanceof h||!t.container)return!!t.options.debug&&console.error(\"Error: Container not found\");t.container.length&&(t.container=t.container[0]),t.options.container=t.container,t.container.style.position=\"relative\"},T=function(t){t.queue=new m,t.events=new y(t),t.rows=[],t.resizer=I(t)},L=function(t){var n=h(\"img\",t.container);window.addEventListener(\"resize\",t.resizer),t.on(t.constants.EVENT_IMAGE_LOAD,function(){return t.recalculate(!1,!1)}),t.on(t.constants.EVENT_IMAGE_COMPLETE,function(){return t.recalculate(!0,!0)}),t.options.useOwnImageLoader||e(t,n,!t.options.waitForImages),t.emit(t.constants.EVENT_INITIALIZED)},_=function(t){N(t),T(t),L(t)},b=function(t){return t===Object(t)&&\"[object Array]\"!==Object.prototype.toString.call(t)},O=function(t,n){b(t)||(n.columns=t),b(t)&&t.columns&&(n.columns=t.columns),b(t)&&t.margin&&!b(t.margin)&&(n.margin={x:t.margin,y:t.margin}),b(t)&&t.margin&&b(t.margin)&&t.margin.x&&(n.margin.x=t.margin.x),b(t)&&t.margin&&b(t.margin)&&t.margin.y&&(n.margin.y=t.margin.y)},C=function(t,n){return window.getComputedStyle(t,null).getPropertyValue(n)},M=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.lastcol||(t.lastcol=0),t.rows.length<1&&(e=!0),e){t.rows=[],t.cols=[],t.lastcol=0;for(var r=n-1;r>=0;r--)t.rows[r]=0,t.cols[r]=u(t,r)}else if(t.tmpRows){t.rows=[];for(var r=n-1;r>=0;r--)t.rows[r]=t.tmpRows[r]}else{t.tmpRows=[];for(var r=n-1;r>=0;r--)t.tmpRows[r]=t.rows[r]}},V=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],e=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=n?t.container.children:h(':scope > *:not([data-macy-complete=\"1\"])',t.container);r=Array.from(r).filter(function(t){return null!==t.offsetParent});var o=c(t.options);return v(r,function(t){n&&(t.dataset.macyComplete=0),t.style.width=o}),t.options.trueOrder?(f(t,r,n,e),t.emit(t.constants.EVENT_RECALCULATED)):(p(t,r,n,e),t.emit(t.constants.EVENT_RECALCULATED))},R=function(){return!!window.Promise},x=Object.assign||function(t){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:k;if(!(this instanceof t))return new t(n);this.options={},x(this.options,k,n),this.options.cancelLegacy&&!R()||_(this)};return q.init=function(t){return console.warn(\"Depreciated: Macy.init will be removed in v3.0.0 opt to use Macy directly like so Macy({ /*options here*/ }) \"),new q(t)},q.prototype.recalculateOnImageLoad=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return e(this,h(\"img\",this.container),!t)},q.prototype.runOnImageLoad=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=h(\"img\",this.container);return this.on(this.constants.EVENT_IMAGE_COMPLETE,t),n&&this.on(this.constants.EVENT_IMAGE_LOAD,t),e(this,r,n)},q.prototype.recalculate=function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e&&this.queue.clear(),this.queue.add(function(){return V(t,n,e)})},q.prototype.remove=function(){window.removeEventListener(\"resize\",this.resizer),v(this.container.children,function(t){t.removeAttribute(\"data-macy-complete\"),t.removeAttribute(\"style\")}),this.container.removeAttribute(\"style\")},q.prototype.reInit=function(){this.recalculate(!0,!0),this.emit(this.constants.EVENT_INITIALIZED),window.addEventListener(\"resize\",this.resizer),this.container.style.position=\"relative\"},q.prototype.on=function(t,n){this.events.on(t,n)},q.prototype.emit=function(t,n){this.events.emit(t,n)},q.constants={EVENT_INITIALIZED:\"macy.initialized\",EVENT_RECALCULATED:\"macy.recalculated\",EVENT_IMAGE_LOAD:\"macy.image.load\",EVENT_IMAGE_ERROR:\"macy.image.error\",EVENT_IMAGE_COMPLETE:\"macy.images.complete\",EVENT_RESIZE:\"macy.resize\"},q.prototype.constants=q.constants,q});\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","import AOS from 'aos'\nAOS.init()\n","import $ from 'jquery';\n\n// Core Foundation Utilities, utilized in a number of places.\n\n /**\n * Returns a boolean for RTL support\n */\nfunction rtl() {\n return $('html').attr('dir') === 'rtl';\n}\n\n/**\n * returns a random base-36 uid with namespacing\n * @function\n * @param {Number} length - number of random base-36 digits desired. Increase for more random strings.\n * @param {String} namespace - name of plugin to be incorporated in uid, optional.\n * @default {String} '' - if no plugin name is provided, nothing is appended to the uid.\n * @returns {String} - unique id\n */\nfunction GetYoDigits(length = 6, namespace){\n let str = '';\n const chars = '0123456789abcdefghijklmnopqrstuvwxyz';\n const charsLength = chars.length;\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * charsLength)];\n }\n return namespace ? `${str}-${namespace}` : str;\n}\n\n/**\n * Escape a string so it can be used as a regexp pattern\n * @function\n * @see https://stackoverflow.com/a/9310752/4317384\n *\n * @param {String} str - string to escape.\n * @returns {String} - escaped string\n */\nfunction RegExpEscape(str){\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nfunction transitionend($elem){\n var transitions = {\n 'transition': 'transitionend',\n 'WebkitTransition': 'webkitTransitionEnd',\n 'MozTransition': 'transitionend',\n 'OTransition': 'otransitionend'\n };\n var elem = document.createElement('div'),\n end;\n\n for (let transition in transitions){\n if (typeof elem.style[transition] !== 'undefined'){\n end = transitions[transition];\n }\n }\n if (end) {\n return end;\n } else {\n setTimeout(function(){\n $elem.triggerHandler('transitionend', [$elem]);\n }, 1);\n return 'transitionend';\n }\n}\n\n/**\n * Return an event type to listen for window load.\n *\n * If `$elem` is passed, an event will be triggered on `$elem`. If window is already loaded, the event will still be triggered.\n * If `handler` is passed, attach it to the event on `$elem`.\n * Calling `onLoad` without handler allows you to get the event type that will be triggered before attaching the handler by yourself.\n * @function\n *\n * @param {Object} [] $elem - jQuery element on which the event will be triggered if passed.\n * @param {Function} [] handler - function to attach to the event.\n * @returns {String} - event type that should or will be triggered.\n */\nfunction onLoad($elem, handler) {\n const didLoad = document.readyState === 'complete';\n const eventType = (didLoad ? '_didLoad' : 'load') + '.zf.util.onLoad';\n const cb = () => $elem.triggerHandler(eventType);\n\n if ($elem) {\n if (handler) $elem.one(eventType, handler);\n\n if (didLoad)\n setTimeout(cb);\n else\n $(window).one('load', cb);\n }\n\n return eventType;\n}\n\n/**\n * Retuns an handler for the `mouseleave` that ignore disappeared mouses.\n *\n * If the mouse \"disappeared\" from the document (like when going on a browser UI element, See https://git.io/zf-11410),\n * the event is ignored.\n * - If the `ignoreLeaveWindow` is `true`, the event is ignored when the user actually left the window\n * (like by switching to an other window with [Alt]+[Tab]).\n * - If the `ignoreReappear` is `true`, the event will be ignored when the mouse will reappear later on the document\n * outside of the element it left.\n *\n * @function\n *\n * @param {Function} [] handler - handler for the filtered `mouseleave` event to watch.\n * @param {Object} [] options - object of options:\n * - {Boolean} [false] ignoreLeaveWindow - also ignore when the user switched windows.\n * - {Boolean} [false] ignoreReappear - also ignore when the mouse reappeared outside of the element it left.\n * @returns {Function} - filtered handler to use to listen on the `mouseleave` event.\n */\nfunction ignoreMousedisappear(handler, { ignoreLeaveWindow = false, ignoreReappear = false } = {}) {\n return function leaveEventHandler(eLeave, ...rest) {\n const callback = handler.bind(this, eLeave, ...rest);\n\n // The mouse left: call the given callback if the mouse entered elsewhere\n if (eLeave.relatedTarget !== null) {\n return callback();\n }\n\n // Otherwise, check if the mouse actually left the window.\n // In firefox if the user switched between windows, the window sill have the focus by the time\n // the event is triggered. We have to debounce the event to test this case.\n setTimeout(function leaveEventDebouncer() {\n if (!ignoreLeaveWindow && document.hasFocus && !document.hasFocus()) {\n return callback();\n }\n\n // Otherwise, wait for the mouse to reeapear outside of the element,\n if (!ignoreReappear) {\n $(document).one('mouseenter', function reenterEventHandler(eReenter) {\n if (!$(eLeave.currentTarget).has(eReenter.target).length) {\n // Fill where the mouse finally entered.\n eLeave.relatedTarget = eReenter.target;\n callback();\n }\n });\n }\n\n }, 0);\n };\n}\n\n\nexport { rtl, GetYoDigits, RegExpEscape, transitionend, onLoad, ignoreMousedisappear };\n","import $ from 'jquery';\n\n// Default set of media queries\n// const defaultQueries = {\n// 'default' : 'only screen',\n// landscape : 'only screen and (orientation: landscape)',\n// portrait : 'only screen and (orientation: portrait)',\n// retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +\n// 'only screen and (min--moz-device-pixel-ratio: 2),' +\n// 'only screen and (-o-min-device-pixel-ratio: 2/1),' +\n// 'only screen and (min-device-pixel-ratio: 2),' +\n// 'only screen and (min-resolution: 192dpi),' +\n// 'only screen and (min-resolution: 2dppx)'\n// };\n\n\n// matchMedia() polyfill - Test a CSS media type/query in JS.\n// Authors & copyright © 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license\n/* eslint-disable */\nwindow.matchMedia || (window.matchMedia = (function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n var styleMedia = (window.styleMedia || window.media);\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n if (!script) {\n document.head.appendChild(style);\n } else {\n script.parentNode.insertBefore(style, script);\n }\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function (media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function(media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n})());\n/* eslint-enable */\n\nvar MediaQuery = {\n queries: [],\n\n current: '',\n\n /**\n * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.\n * @function\n * @private\n */\n _init() {\n\n // make sure the initialization is only done once when calling _init() several times\n if (this.isInitialized === true) {\n return this;\n } else {\n this.isInitialized = true;\n }\n\n var self = this;\n var $meta = $('meta.foundation-mq');\n if(!$meta.length){\n $('').appendTo(document.head);\n }\n\n var extractedStyles = $('.foundation-mq').css('font-family');\n var namedQueries;\n\n namedQueries = parseStyleToObject(extractedStyles);\n\n self.queries = []; // reset\n\n for (var key in namedQueries) {\n if(namedQueries.hasOwnProperty(key)) {\n self.queries.push({\n name: key,\n value: `only screen and (min-width: ${namedQueries[key]})`\n });\n }\n }\n\n this.current = this._getCurrentSize();\n\n this._watcher();\n },\n\n /**\n * Reinitializes the media query helper.\n * Useful if your CSS breakpoint configuration has just been loaded or has changed since the initialization.\n * @function\n * @private\n */\n _reInit() {\n this.isInitialized = false;\n this._init();\n },\n\n /**\n * Checks if the screen is at least as wide as a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.\n */\n atLeast(size) {\n var query = this.get(size);\n\n if (query) {\n return window.matchMedia(query).matches;\n }\n\n return false;\n },\n\n /**\n * Checks if the screen is within the given breakpoint.\n * If smaller than the breakpoint of larger than its upper limit it returns false.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` otherwise.\n */\n only(size) {\n return size === this._getCurrentSize();\n },\n\n /**\n * Checks if the screen is within a breakpoint or smaller.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's larger.\n */\n upTo(size) {\n const nextSize = this.next(size);\n\n // If the next breakpoint does not match, the screen is smaller than\n // the upper limit of this breakpoint.\n if (nextSize) {\n return !this.atLeast(nextSize);\n }\n\n // If there is no next breakpoint, the \"size\" breakpoint does not have\n // an upper limit and the screen will always be within it or smaller.\n return true;\n },\n\n /**\n * Checks if the screen matches to a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.\n */\n is(size) {\n const parts = size.trim().split(' ').filter(p => !!p.length);\n const [bpSize, bpModifier = ''] = parts;\n\n // Only the breakpont\n if (bpModifier === 'only') {\n return this.only(bpSize);\n }\n // At least the breakpoint (included)\n if (!bpModifier || bpModifier === 'up') {\n return this.atLeast(bpSize);\n }\n // Up to the breakpoint (included)\n if (bpModifier === 'down') {\n return this.upTo(bpSize);\n }\n\n throw new Error(`\n Invalid breakpoint passed to MediaQuery.is().\n Expected a breakpoint name formatted like \" \", got \"${size}\".\n `);\n },\n\n /**\n * Gets the media query of a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to get.\n * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.\n */\n get(size) {\n for (var i in this.queries) {\n if(this.queries.hasOwnProperty(i)) {\n var query = this.queries[i];\n if (size === query.name) return query.value;\n }\n }\n\n return null;\n },\n\n /**\n * Get the breakpoint following the given breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint.\n * @returns {String|null} - The name of the following breakpoint, or `null` if the passed breakpoint was the last one.\n */\n next(size) {\n const queryIndex = this.queries.findIndex((q) => this._getQueryName(q) === size);\n if (queryIndex === -1) {\n throw new Error(`\n Unknown breakpoint \"${size}\" passed to MediaQuery.next().\n Ensure it is present in your Sass \"$breakpoints\" setting.\n `);\n }\n\n const nextQuery = this.queries[queryIndex + 1];\n return nextQuery ? nextQuery.name : null;\n },\n\n /**\n * Returns the name of the breakpoint related to the given value.\n * @function\n * @private\n * @param {String|Object} value - Breakpoint name or query object.\n * @returns {String} Name of the breakpoint.\n */\n _getQueryName(value) {\n if (typeof value === 'string')\n return value;\n if (typeof value === 'object')\n return value.name;\n throw new TypeError(`\n Invalid value passed to MediaQuery._getQueryName().\n Expected a breakpoint name (String) or a breakpoint query (Object), got \"${value}\" (${typeof value})\n `);\n },\n\n /**\n * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).\n * @function\n * @private\n * @returns {String} Name of the current breakpoint.\n */\n _getCurrentSize() {\n var matched;\n\n for (var i = 0; i < this.queries.length; i++) {\n var query = this.queries[i];\n\n if (window.matchMedia(query.value).matches) {\n matched = query;\n }\n }\n\n return matched && this._getQueryName(matched);\n },\n\n /**\n * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.\n * @function\n * @private\n */\n _watcher() {\n $(window).on('resize.zf.trigger', () => {\n var newSize = this._getCurrentSize(), currentSize = this.current;\n\n if (newSize !== currentSize) {\n // Change the current media query\n this.current = newSize;\n\n // Broadcast the media query change on the window\n $(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);\n }\n });\n }\n};\n\n\n\n// Thank you: https://github.com/sindresorhus/query-string\nfunction parseStyleToObject(str) {\n var styleObject = {};\n\n if (typeof str !== 'string') {\n return styleObject;\n }\n\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n\n if (!str) {\n return styleObject;\n }\n\n styleObject = str.split('&').reduce(function(ret, param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = parts[0];\n var val = parts[1];\n key = decodeURIComponent(key);\n\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = typeof val === 'undefined' ? null : decodeURIComponent(val);\n\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n } else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n } else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n\n return styleObject;\n}\n\nexport {MediaQuery};\n","import $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\n\nvar FOUNDATION_VERSION = '6.7.5';\n\n// Global Foundation object\n// This is attached to the window, or used as a module for AMD/Browserify\nvar Foundation = {\n version: FOUNDATION_VERSION,\n\n /**\n * Stores initialized plugins.\n */\n _plugins: {},\n\n /**\n * Stores generated unique ids for plugin instances\n */\n _uuids: [],\n\n /**\n * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing.\n * @param {Object} plugin - The constructor of the plugin.\n */\n plugin: function(plugin, name) {\n // Object key to use when adding to global Foundation object\n // Examples: Foundation.Reveal, Foundation.OffCanvas\n var className = (name || functionName(plugin));\n // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin\n // Examples: data-reveal, data-off-canvas\n var attrName = hyphenate(className);\n\n // Add to the Foundation object and the plugins list (for reflowing)\n this._plugins[attrName] = this[className] = plugin;\n },\n /**\n * @function\n * Populates the _uuids array with pointers to each individual plugin instance.\n * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls.\n * Also fires the initialization event for each plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @param {String} name - the name of the plugin, passed as a camelCased string.\n * @fires Plugin#init\n */\n registerPlugin: function(plugin, name){\n var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase();\n plugin.uuid = GetYoDigits(6, pluginName);\n\n if(!plugin.$element.attr(`data-${pluginName}`)){ plugin.$element.attr(`data-${pluginName}`, plugin.uuid); }\n if(!plugin.$element.data('zfPlugin')){ plugin.$element.data('zfPlugin', plugin); }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n plugin.$element.trigger(`init.zf.${pluginName}`);\n\n this._uuids.push(plugin.uuid);\n\n return;\n },\n /**\n * @function\n * Removes the plugins uuid from the _uuids array.\n * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute.\n * Also fires the destroyed event for the plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @fires Plugin#destroyed\n */\n unregisterPlugin: function(plugin){\n var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor));\n\n this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1);\n plugin.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */\n .trigger(`destroyed.zf.${pluginName}`);\n for(var prop in plugin){\n if(typeof plugin[prop] === 'function'){\n plugin[prop] = null; //clean up script to prep for garbage collection.\n }\n }\n return;\n },\n\n /**\n * @function\n * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc.\n * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'`\n * @default If no argument is passed, reflow all currently active plugins.\n */\n reInit: function(plugins){\n var isJQ = plugins instanceof $;\n try{\n if(isJQ){\n plugins.each(function(){\n $(this).data('zfPlugin')._init();\n });\n }else{\n var type = typeof plugins,\n _this = this,\n fns = {\n 'object': function(plgs){\n plgs.forEach(function(p){\n p = hyphenate(p);\n $('[data-'+ p +']').foundation('_init');\n });\n },\n 'string': function(){\n plugins = hyphenate(plugins);\n $('[data-'+ plugins +']').foundation('_init');\n },\n 'undefined': function(){\n this.object(Object.keys(_this._plugins));\n }\n };\n fns[type](plugins);\n }\n }catch(err){\n console.error(err);\n }finally{\n return plugins;\n }\n },\n\n /**\n * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized.\n * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object.\n * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything.\n */\n reflow: function(elem, plugins) {\n\n // If plugins is undefined, just grab everything\n if (typeof plugins === 'undefined') {\n plugins = Object.keys(this._plugins);\n }\n // If plugins is a string, convert it to an array with one item\n else if (typeof plugins === 'string') {\n plugins = [plugins];\n }\n\n var _this = this;\n\n // Iterate through each plugin\n $.each(plugins, function(i, name) {\n // Get the current plugin\n var plugin = _this._plugins[name];\n\n // Localize the search to all elements inside elem, as well as elem itself, unless elem === document\n var $elem = $(elem).find('[data-'+name+']').addBack('[data-'+name+']').filter(function () {\n return typeof $(this).data(\"zfPlugin\") === 'undefined';\n });\n\n // For each plugin found, initialize it\n $elem.each(function() {\n var $el = $(this),\n opts = { reflow: true };\n\n if($el.attr('data-options')){\n $el.attr('data-options').split(';').forEach(function(option){\n var opt = option.split(':').map(function(el){ return el.trim(); });\n if(opt[0]) opts[opt[0]] = parseValue(opt[1]);\n });\n }\n try{\n $el.data('zfPlugin', new plugin($(this), opts));\n }catch(er){\n console.error(er);\n }finally{\n return;\n }\n });\n });\n },\n getFnName: functionName,\n\n addToJquery: function() {\n // TODO: consider not making this a jQuery function\n // TODO: need way to reflow vs. re-initialize\n /**\n * The Foundation jQuery method.\n * @param {String|Array} method - An action to perform on the current jQuery object.\n */\n var foundation = function(method) {\n var type = typeof method,\n $noJS = $('.no-js');\n\n if($noJS.length){\n $noJS.removeClass('no-js');\n }\n\n if(type === 'undefined'){//needs to initialize the Foundation object, or an individual plugin.\n MediaQuery._init();\n Foundation.reflow(this);\n }else if(type === 'string'){//an individual method to invoke on a plugin or group of plugins\n var args = Array.prototype.slice.call(arguments, 1);//collect all the arguments, if necessary\n var plugClass = this.data('zfPlugin');//determine the class of plugin\n\n if(typeof plugClass !== 'undefined' && typeof plugClass[method] !== 'undefined'){//make sure both the class and method exist\n if(this.length === 1){//if there's only one, call it directly.\n plugClass[method].apply(plugClass, args);\n }else{\n this.each(function(i, el){//otherwise loop through the jQuery collection and invoke the method on each\n plugClass[method].apply($(el).data('zfPlugin'), args);\n });\n }\n }else{//error for no class or no method\n throw new ReferenceError(\"We're sorry, '\" + method + \"' is not an available method for \" + (plugClass ? functionName(plugClass) : 'this element') + '.');\n }\n }else{//error for invalid argument type\n throw new TypeError(`We're sorry, ${type} is not a valid parameter. You must use a string representing the method you wish to invoke.`);\n }\n return this;\n };\n $.fn.foundation = foundation;\n return $;\n }\n};\n\nFoundation.util = {\n /**\n * Function for applying a debounce effect to a function call.\n * @function\n * @param {Function} func - Function to be called at end of timeout.\n * @param {Number} delay - Time in ms to delay the call of `func`.\n * @returns function\n */\n throttle: function (func, delay) {\n var timer = null;\n\n return function () {\n var context = this, args = arguments;\n\n if (timer === null) {\n timer = setTimeout(function () {\n func.apply(context, args);\n timer = null;\n }, delay);\n }\n };\n }\n};\n\nwindow.Foundation = Foundation;\n\n// Polyfill for requestAnimationFrame\n(function() {\n if (!Date.now || !window.Date.now)\n window.Date.now = Date.now = function() { return new Date().getTime(); };\n\n var vendors = ['webkit', 'moz'];\n for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp+'RequestAnimationFrame'];\n window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame']\n || window[vp+'CancelRequestAnimationFrame']);\n }\n if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)\n || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function(callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function() { callback(lastTime = nextTime); },\n nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n }\n /**\n * Polyfill for performance.now, required by rAF\n */\n if(!window.performance || !window.performance.now){\n window.performance = {\n start: Date.now(),\n now: function(){ return Date.now() - this.start; }\n };\n }\n})();\nif (!Function.prototype.bind) {\n /* eslint-disable no-extend-native */\n Function.prototype.bind = function(oThis) {\n if (typeof this !== 'function') {\n // closest thing possible to the ECMAScript 5\n // internal IsCallable function\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1),\n fToBind = this,\n fNOP = function() {},\n fBound = function() {\n return fToBind.apply(this instanceof fNOP\n ? this\n : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n if (this.prototype) {\n // native functions don't have a prototype\n fNOP.prototype = this.prototype;\n }\n fBound.prototype = new fNOP();\n\n return fBound;\n };\n}\n// Polyfill to get the name of a function in IE9\nfunction functionName(fn) {\n if (typeof Function.prototype.name === 'undefined') {\n var funcNameRegex = /function\\s([^(]{1,})\\(/;\n var results = (funcNameRegex).exec((fn).toString());\n return (results && results.length > 1) ? results[1].trim() : \"\";\n }\n else if (typeof fn.prototype === 'undefined') {\n return fn.constructor.name;\n }\n else {\n return fn.prototype.constructor.name;\n }\n}\nfunction parseValue(str){\n if ('true' === str) return true;\n else if ('false' === str) return false;\n else if (!isNaN(str * 1)) return parseFloat(str);\n return str;\n}\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nexport {Foundation};\n","import { GetYoDigits } from './foundation.core.utils';\n\n// Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST\n// {function} _setup (replaces previous constructor),\n// {function} _destroy (replaces previous destroy)\nclass Plugin {\n\n constructor(element, options) {\n this._setup(element, options);\n var pluginName = getPluginName(this);\n this.uuid = GetYoDigits(6, pluginName);\n\n if(!this.$element.attr(`data-${pluginName}`)){ this.$element.attr(`data-${pluginName}`, this.uuid); }\n if(!this.$element.data('zfPlugin')){ this.$element.data('zfPlugin', this); }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n this.$element.trigger(`init.zf.${pluginName}`);\n }\n\n destroy() {\n this._destroy();\n var pluginName = getPluginName(this);\n this.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */\n .trigger(`destroyed.zf.${pluginName}`);\n for(var prop in this){\n if (this.hasOwnProperty(prop)) {\n this[prop] = null; //clean up script to prep for garbage collection.\n }\n }\n }\n}\n\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction getPluginName(obj) {\n return hyphenate(obj.className);\n}\n\nexport {Plugin};\n","/*******************************************\n * *\n * This util was created by Marius Olbertz *\n * Please thank Marius on GitHub /owlbertz *\n * or the web http://www.mariusolbertz.de/ *\n * *\n ******************************************/\n\nimport $ from 'jquery';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst keyCodes = {\n 9: 'TAB',\n 13: 'ENTER',\n 27: 'ESCAPE',\n 32: 'SPACE',\n 35: 'END',\n 36: 'HOME',\n 37: 'ARROW_LEFT',\n 38: 'ARROW_UP',\n 39: 'ARROW_RIGHT',\n 40: 'ARROW_DOWN'\n}\n\nvar commands = {}\n\n// Functions pulled out to be referenceable from internals\nfunction findFocusable($element) {\n if(!$element) {return false; }\n return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function() {\n if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) { return false; } //only have visible elements and those that have a tabindex greater or equal 0\n return true;\n })\n .sort( function( a, b ) {\n if ($(a).attr('tabindex') === $(b).attr('tabindex')) {\n return 0;\n }\n let aTabIndex = parseInt($(a).attr('tabindex'), 10),\n bTabIndex = parseInt($(b).attr('tabindex'), 10);\n // Undefined is treated the same as 0\n if (typeof $(a).attr('tabindex') === 'undefined' && bTabIndex > 0) {\n return 1;\n }\n if (typeof $(b).attr('tabindex') === 'undefined' && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex === 0 && bTabIndex > 0) {\n return 1;\n }\n if (bTabIndex === 0 && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex < bTabIndex) {\n return -1;\n }\n if (aTabIndex > bTabIndex) {\n return 1;\n }\n });\n}\n\nfunction parseKey(event) {\n var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase();\n\n // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events\n key = key.replace(/\\W+/, '');\n\n if (event.shiftKey) key = `SHIFT_${key}`;\n if (event.ctrlKey) key = `CTRL_${key}`;\n if (event.altKey) key = `ALT_${key}`;\n\n // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)\n key = key.replace(/_$/, '');\n\n return key;\n}\n\nvar Keyboard = {\n keys: getKeyCodes(keyCodes),\n\n /**\n * Parses the (keyboard) event and returns a String that represents its key\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n * @param {Event} event - the event generated by the event handler\n * @return String key - String that represents the key pressed\n */\n parseKey: parseKey,\n\n /**\n * Handles the given (keyboard) event\n * @param {Event} event - the event generated by the event handler\n * @param {String} component - Foundation component's name, e.g. Slider or Reveal\n * @param {Objects} functions - collection of functions that are to be executed\n */\n handleKey(event, component, functions) {\n var commandList = commands[component],\n keyCode = this.parseKey(event),\n cmds,\n command,\n fn;\n\n if (!commandList) return console.warn('Component not defined!');\n\n // Ignore the event if it was already handled\n if (event.zfIsKeyHandled === true) return;\n\n // This component does not differentiate between ltr and rtl\n if (typeof commandList.ltr === 'undefined') {\n cmds = commandList; // use plain list\n } else { // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa\n if (Rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);\n\n else cmds = $.extend({}, commandList.rtl, commandList.ltr);\n }\n command = cmds[keyCode];\n\n fn = functions[command];\n // Execute the handler if found\n if (fn && typeof fn === 'function') {\n var returnValue = fn.apply();\n\n // Mark the event as \"handled\" to prevent future handlings\n event.zfIsKeyHandled = true;\n\n // Execute function when event was handled\n if (functions.handled || typeof functions.handled === 'function') {\n functions.handled(returnValue);\n }\n } else {\n // Execute function when event was not handled\n if (functions.unhandled || typeof functions.unhandled === 'function') {\n functions.unhandled();\n }\n }\n },\n\n /**\n * Finds all focusable elements within the given `$element`\n * @param {jQuery} $element - jQuery object to search within\n * @return {jQuery} $focusable - all focusable elements within `$element`\n */\n\n findFocusable: findFocusable,\n\n /**\n * Returns the component name name\n * @param {Object} component - Foundation component, e.g. Slider or Reveal\n * @return String componentName\n */\n\n register(componentName, cmds) {\n commands[componentName] = cmds;\n },\n\n\n // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context?\n //\n /**\n * Traps the focus in the given element.\n * @param {jQuery} $element jQuery object to trap the foucs into.\n */\n trapFocus($element) {\n var $focusable = findFocusable($element),\n $firstFocusable = $focusable.eq(0),\n $lastFocusable = $focusable.eq(-1);\n\n $element.on('keydown.zf.trapfocus', function(event) {\n if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') {\n event.preventDefault();\n $firstFocusable.focus();\n }\n else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') {\n event.preventDefault();\n $lastFocusable.focus();\n }\n });\n },\n /**\n * Releases the trapped focus from the given element.\n * @param {jQuery} $element jQuery object to release the focus for.\n */\n releaseFocus($element) {\n $element.off('keydown.zf.trapfocus');\n }\n}\n\n/*\n * Constants for easier comparing.\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n */\nfunction getKeyCodes(kcs) {\n var k = {};\n for (var kc in kcs) {\n if (kcs.hasOwnProperty(kc)) k[kcs[kc]] = kcs[kc];\n }\n return k;\n}\n\nexport {Keyboard};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad, GetYoDigits } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\n\n/**\n * Accordion module.\n * @module foundation.accordion\n * @requires foundation.util.keyboard\n */\n\nclass Accordion extends Plugin {\n /**\n * Creates a new instance of an accordion.\n * @class\n * @name Accordion\n * @fires Accordion#init\n * @param {jQuery} element - jQuery object to make into an accordion.\n * @param {Object} options - a plain object with settings to override the default options.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Accordion.defaults, this.$element.data(), options);\n\n this.className = 'Accordion'; // ie9 back compat\n this._init();\n\n Keyboard.register('Accordion', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ARROW_DOWN': 'next',\n 'ARROW_UP': 'previous',\n 'HOME': 'first',\n 'END': 'last',\n });\n }\n\n /**\n * Initializes the accordion by animating the preset active pane(s).\n * @private\n */\n _init() {\n this._isInitializing = true;\n\n this.$tabs = this.$element.children('[data-accordion-item]');\n\n\n this.$tabs.each(function(idx, el) {\n var $el = $(el),\n $content = $el.children('[data-tab-content]'),\n id = $content[0].id || GetYoDigits(6, 'accordion'),\n linkId = (el.id) ? `${el.id}-label` : `${id}-label`;\n\n $el.find('a:first').attr({\n 'aria-controls': id,\n 'id': linkId,\n 'aria-expanded': false\n });\n\n $content.attr({'role': 'region', 'aria-labelledby': linkId, 'aria-hidden': true, 'id': id});\n });\n\n var $initActive = this.$element.find('.is-active').children('[data-tab-content]');\n if ($initActive.length) {\n // Save up the initial hash to return to it later when going back in history\n this._initialAnchor = $initActive.prev('a').attr('href');\n this._openSingleTab($initActive);\n }\n\n this._checkDeepLink = () => {\n var anchor = window.location.hash;\n\n if (!anchor.length) {\n // If we are still initializing and there is no anchor, then there is nothing to do\n if (this._isInitializing) return;\n // Otherwise, move to the initial anchor\n if (this._initialAnchor) anchor = this._initialAnchor;\n }\n\n var $anchor = anchor && $(anchor);\n var $link = anchor && this.$element.find(`[href$=\"${anchor}\"]`);\n // Whether the anchor element that has been found is part of this element\n var isOwnAnchor = !!($anchor.length && $link.length);\n\n if (isOwnAnchor) {\n // If there is an anchor for the hash, open it (if not already active)\n if ($anchor && $link && $link.length) {\n if (!$link.parent('[data-accordion-item]').hasClass('is-active')) {\n this._openSingleTab($anchor);\n }\n }\n // Otherwise, close everything\n else {\n this._closeAllTabs();\n }\n\n // Roll up a little to show the titles\n if (this.options.deepLinkSmudge) {\n onLoad($(window), () => {\n var offset = this.$element.offset();\n $('html, body').animate({ scrollTop: offset.top - this.options.deepLinkSmudgeOffset }, this.options.deepLinkSmudgeDelay);\n });\n }\n\n /**\n * Fires when the plugin has deeplinked at pageload\n * @event Accordion#deeplink\n */\n this.$element.trigger('deeplink.zf.accordion', [$link, $anchor]);\n }\n }\n\n //use browser to open a tab, if it exists in this tabset\n if (this.options.deepLink) {\n this._checkDeepLink();\n }\n\n this._events();\n\n this._isInitializing = false;\n }\n\n /**\n * Adds event handlers for items within the accordion.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$tabs.each(function() {\n var $elem = $(this);\n var $tabContent = $elem.children('[data-tab-content]');\n if ($tabContent.length) {\n $elem.children('a').off('click.zf.accordion keydown.zf.accordion')\n .on('click.zf.accordion', function(e) {\n e.preventDefault();\n _this.toggle($tabContent);\n }).on('keydown.zf.accordion', function(e) {\n Keyboard.handleKey(e, 'Accordion', {\n toggle: function() {\n _this.toggle($tabContent);\n },\n next: function() {\n var $a = $elem.next().find('a').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion')\n }\n },\n previous: function() {\n var $a = $elem.prev().find('a').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion')\n }\n },\n first: function() {\n var $a = _this.$tabs.first().find('.accordion-title').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n last: function() {\n var $a = _this.$tabs.last().find('.accordion-title').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n handled: function() {\n e.preventDefault();\n }\n });\n });\n }\n });\n if (this.options.deepLink) {\n $(window).on('hashchange', this._checkDeepLink);\n }\n }\n\n /**\n * Toggles the selected content pane's open/close state.\n * @param {jQuery} $target - jQuery object of the pane to toggle (`.accordion-content`).\n * @function\n */\n toggle($target) {\n if ($target.closest('[data-accordion]').is('[disabled]')) {\n console.info('Cannot toggle an accordion that is disabled.');\n return;\n }\n if ($target.parent().hasClass('is-active')) {\n this.up($target);\n } else {\n this.down($target);\n }\n //either replace or update browser history\n if (this.options.deepLink) {\n var anchor = $target.prev('a').attr('href');\n\n if (this.options.updateHistory) {\n history.pushState({}, '', anchor);\n } else {\n history.replaceState({}, '', anchor);\n }\n }\n }\n\n /**\n * Opens the accordion tab defined by `$target`.\n * @param {jQuery} $target - Accordion pane to open (`.accordion-content`).\n * @fires Accordion#down\n * @function\n */\n down($target) {\n if ($target.closest('[data-accordion]').is('[disabled]')) {\n console.info('Cannot call down on an accordion that is disabled.');\n return;\n }\n\n if (this.options.multiExpand)\n this._openTab($target);\n else\n this._openSingleTab($target);\n }\n\n /**\n * Closes the tab defined by `$target`.\n * It may be ignored if the Accordion options don't allow it.\n *\n * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n * @fires Accordion#up\n * @function\n */\n up($target) {\n if (this.$element.is('[disabled]')) {\n console.info('Cannot call up on an accordion that is disabled.');\n return;\n }\n\n // Don't close the item if it is already closed\n const $targetItem = $target.parent();\n if (!$targetItem.hasClass('is-active')) return;\n\n // Don't close the item if there is no other active item (unless with `allowAllClosed`)\n const $othersItems = $targetItem.siblings();\n if (!this.options.allowAllClosed && !$othersItems.hasClass('is-active')) return;\n\n this._closeTab($target);\n }\n\n /**\n * Make the tab defined by `$target` the only opened tab, closing all others tabs.\n * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n * @function\n * @private\n */\n _openSingleTab($target) {\n // Close all the others active tabs.\n const $activeContents = this.$element.children('.is-active').children('[data-tab-content]');\n if ($activeContents.length) {\n this._closeTab($activeContents.not($target));\n }\n\n // Then open the target.\n this._openTab($target);\n }\n\n /**\n * Opens the tab defined by `$target`.\n * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n * @fires Accordion#down\n * @function\n * @private\n */\n _openTab($target) {\n const $targetItem = $target.parent();\n const targetContentId = $target.attr('aria-labelledby');\n\n $target.attr('aria-hidden', false);\n $targetItem.addClass('is-active');\n\n $(`#${targetContentId}`).attr({\n 'aria-expanded': true\n });\n\n $target.finish().slideDown(this.options.slideSpeed, () => {\n /**\n * Fires when the tab is done opening.\n * @event Accordion#down\n */\n this.$element.trigger('down.zf.accordion', [$target]);\n });\n }\n\n /**\n * Closes the tab defined by `$target`.\n * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n * @fires Accordion#up\n * @function\n * @private\n */\n _closeTab($target) {\n const $targetItem = $target.parent();\n const targetContentId = $target.attr('aria-labelledby');\n\n $target.attr('aria-hidden', true)\n $targetItem.removeClass('is-active');\n\n $(`#${targetContentId}`).attr({\n 'aria-expanded': false\n });\n\n $target.finish().slideUp(this.options.slideSpeed, () => {\n /**\n * Fires when the tab is done collapsing up.\n * @event Accordion#up\n */\n this.$element.trigger('up.zf.accordion', [$target]);\n });\n }\n\n /**\n * Closes all active tabs\n * @fires Accordion#up\n * @function\n * @private\n */\n _closeAllTabs() {\n var $activeTabs = this.$element.children('.is-active').children('[data-tab-content]');\n if ($activeTabs.length) {\n this._closeTab($activeTabs);\n }\n }\n\n /**\n * Destroys an instance of an accordion.\n * @fires Accordion#destroyed\n * @function\n */\n _destroy() {\n this.$element.find('[data-tab-content]').stop(true).slideUp(0).css('display', '');\n this.$element.find('a').off('.zf.accordion');\n if (this.options.deepLink) {\n $(window).off('hashchange', this._checkDeepLink);\n }\n\n }\n}\n\nAccordion.defaults = {\n /**\n * Amount of time to animate the opening of an accordion pane.\n * @option\n * @type {number}\n * @default 250\n */\n slideSpeed: 250,\n /**\n * Allow the accordion to have multiple open panes.\n * @option\n * @type {boolean}\n * @default false\n */\n multiExpand: false,\n /**\n * Allow the accordion to close all panes.\n * @option\n * @type {boolean}\n * @default false\n */\n allowAllClosed: false,\n /**\n * Link the location hash to the open pane.\n * Set the location hash when the opened pane changes, and open and scroll to the corresponding pane when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the accordion panel is visible\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinkSmudge: false,\n /**\n * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n * @option\n * @type {number}\n * @default 300\n */\n deepLinkSmudgeDelay: 300,\n /**\n * If `deepLinkSmudge` is enabled, the offset for scrollToTtop to prevent overlap by a sticky element at the top of the page\n * @option\n * @type {number}\n * @default 0\n */\n deepLinkSmudgeOffset: 0,\n /**\n * If `deepLink` is enabled, update the browser history with the open accordion\n * @option\n * @type {boolean}\n * @default false\n */\n updateHistory: false\n};\n\nexport { Accordion };\n","import $ from 'jquery';\n\nconst Nest = {\n Feather(menu, type = 'zf') {\n menu.attr('role', 'menubar');\n menu.find('a').attr({'role': 'menuitem'});\n\n var items = menu.find('li').attr({'role': 'none'}),\n subMenuClass = `is-${type}-submenu`,\n subItemClass = `${subMenuClass}-item`,\n hasSubClass = `is-${type}-submenu-parent`,\n applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes.\n\n items.each(function() {\n var $item = $(this),\n $sub = $item.children('ul');\n\n if ($sub.length) {\n $item.addClass(hasSubClass);\n if(applyAria) {\n const firstItem = $item.children('a:first');\n firstItem.attr({\n 'aria-haspopup': true,\n 'aria-label': firstItem.attr('aria-label') || firstItem.text()\n });\n // Note: Drilldowns behave differently in how they hide, and so need\n // additional attributes. We should look if this possibly over-generalized\n // utility (Nest) is appropriate when we rework menus in 6.4\n if(type === 'drilldown') {\n $item.attr({'aria-expanded': false});\n }\n }\n $sub\n .addClass(`submenu ${subMenuClass}`)\n .attr({\n 'data-submenu': '',\n 'role': 'menubar'\n });\n if(type === 'drilldown') {\n $sub.attr({'aria-hidden': true});\n }\n }\n\n if ($item.parent('[data-submenu]').length) {\n $item.addClass(`is-submenu-item ${subItemClass}`);\n }\n });\n\n return;\n },\n\n Burn(menu, type) {\n var //items = menu.find('li'),\n subMenuClass = `is-${type}-submenu`,\n subItemClass = `${subMenuClass}-item`,\n hasSubClass = `is-${type}-submenu-parent`;\n\n menu\n .find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li')\n .removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`)\n .removeAttr('data-submenu').css('display', '');\n\n }\n}\n\nexport {Nest};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * AccordionMenu module.\n * @module foundation.accordionMenu\n * @requires foundation.util.keyboard\n * @requires foundation.util.nest\n */\n\nclass AccordionMenu extends Plugin {\n /**\n * Creates a new instance of an accordion menu.\n * @class\n * @name AccordionMenu\n * @fires AccordionMenu#init\n * @param {jQuery} element - jQuery object to make into an accordion menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, AccordionMenu.defaults, this.$element.data(), options);\n this.className = 'AccordionMenu'; // ie9 back compat\n\n this._init();\n\n Keyboard.register('AccordionMenu', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ARROW_RIGHT': 'open',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'close',\n 'ESCAPE': 'closeAll'\n });\n }\n\n\n\n /**\n * Initializes the accordion menu by hiding all nested menus.\n * @private\n */\n _init() {\n Nest.Feather(this.$element, 'accordion');\n\n var _this = this;\n\n this.$element.find('[data-submenu]').not('.is-active').slideUp(0);//.find('a').css('padding-left', '1rem');\n this.$element.attr({\n 'aria-multiselectable': this.options.multiOpen\n });\n\n this.$menuLinks = this.$element.find('.is-accordion-submenu-parent');\n this.$menuLinks.each(function() {\n var linkId = this.id || GetYoDigits(6, 'acc-menu-link'),\n $elem = $(this),\n $sub = $elem.children('[data-submenu]'),\n subId = $sub[0].id || GetYoDigits(6, 'acc-menu'),\n isActive = $sub.hasClass('is-active');\n\n if (_this.options.parentLink) {\n let $anchor = $elem.children('a');\n $anchor.clone().prependTo($sub).wrap('
  • ');\n }\n\n if (_this.options.submenuToggle) {\n $elem.addClass('has-submenu-toggle');\n $elem.children('a').after('');\n } else {\n $elem.attr({\n 'aria-controls': subId,\n 'aria-expanded': isActive,\n 'id': linkId\n });\n }\n $sub.attr({\n 'aria-labelledby': linkId,\n 'aria-hidden': !isActive,\n 'role': 'group',\n 'id': subId\n });\n });\n var initPanes = this.$element.find('.is-active');\n if (initPanes.length) {\n initPanes.each(function() {\n _this.down($(this));\n });\n }\n this._events();\n }\n\n /**\n * Adds event handlers for items within the menu.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$element.find('li').each(function() {\n var $submenu = $(this).children('[data-submenu]');\n\n if ($submenu.length) {\n if (_this.options.submenuToggle) {\n $(this).children('.submenu-toggle').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function() {\n _this.toggle($submenu);\n });\n } else {\n $(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function(e) {\n e.preventDefault();\n _this.toggle($submenu);\n });\n }\n }\n }).on('keydown.zf.accordionMenu', function(e) {\n var $element = $(this),\n $elements = $element.parent('ul').children('li'),\n $prevElement,\n $nextElement,\n $target = $element.children('[data-submenu]');\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(Math.max(0, i-1)).find('a').first();\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1)).find('a').first();\n\n if ($(this).children('[data-submenu]:visible').length) { // has open sub menu\n $nextElement = $element.find('li:first-child').find('a').first();\n }\n if ($(this).is(':first-child')) { // is first element of sub menu\n $prevElement = $element.parents('li').first().find('a').first();\n } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) { // if previous element has open sub menu\n $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first();\n }\n if ($(this).is(':last-child')) { // is last element of sub menu\n $nextElement = $element.parents('li').first().next('li').find('a').first();\n }\n\n return;\n }\n });\n\n Keyboard.handleKey(e, 'AccordionMenu', {\n open: function() {\n if ($target.is(':hidden')) {\n _this.down($target);\n $target.find('li').first().find('a').first().focus();\n }\n },\n close: function() {\n if ($target.length && !$target.is(':hidden')) { // close active sub of this item\n _this.up($target);\n } else if ($element.parent('[data-submenu]').length) { // close currently open sub\n _this.up($element.parent('[data-submenu]'));\n $element.parents('li').first().find('a').first().focus();\n }\n },\n up: function() {\n $prevElement.focus();\n return true;\n },\n down: function() {\n $nextElement.focus();\n return true;\n },\n toggle: function() {\n if (_this.options.submenuToggle) {\n return false;\n }\n if ($element.children('[data-submenu]').length) {\n _this.toggle($element.children('[data-submenu]'));\n return true;\n }\n },\n closeAll: function() {\n _this.hideAll();\n },\n handled: function(preventDefault) {\n if (preventDefault) {\n e.preventDefault();\n }\n }\n });\n });//.attr('tabindex', 0);\n }\n\n /**\n * Closes all panes of the menu.\n * @function\n */\n hideAll() {\n this.up(this.$element.find('[data-submenu]'));\n }\n\n /**\n * Opens all panes of the menu.\n * @function\n */\n showAll() {\n this.down(this.$element.find('[data-submenu]'));\n }\n\n /**\n * Toggles the open/close state of a submenu.\n * @function\n * @param {jQuery} $target - the submenu to toggle\n */\n toggle($target) {\n if (!$target.is(':animated')) {\n if (!$target.is(':hidden')) {\n this.up($target);\n }\n else {\n this.down($target);\n }\n }\n }\n\n /**\n * Opens the sub-menu defined by `$target`.\n * @param {jQuery} $target - Sub-menu to open.\n * @fires AccordionMenu#down\n */\n down($target) {\n // If having multiple submenus active is disabled, close all the submenus\n // that are not parents or children of the targeted submenu.\n if (!this.options.multiOpen) {\n // The \"branch\" of the targetted submenu, from the component root to\n // the active submenus nested in it.\n const $targetBranch = $target.parentsUntil(this.$element)\n .add($target)\n .add($target.find('.is-active'));\n // All the active submenus that are not in the branch.\n const $othersActiveSubmenus = this.$element.find('.is-active').not($targetBranch);\n\n this.up($othersActiveSubmenus);\n }\n\n $target\n .addClass('is-active')\n .attr({ 'aria-hidden': false });\n\n if (this.options.submenuToggle) {\n $target.prev('.submenu-toggle').attr({'aria-expanded': true});\n }\n else {\n $target.parent('.is-accordion-submenu-parent').attr({'aria-expanded': true});\n }\n\n $target.slideDown(this.options.slideSpeed, () => {\n /**\n * Fires when the menu is done opening.\n * @event AccordionMenu#down\n */\n this.$element.trigger('down.zf.accordionMenu', [$target]);\n });\n }\n\n /**\n * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well.\n * @param {jQuery} $target - Sub-menu to close.\n * @fires AccordionMenu#up\n */\n up($target) {\n const $submenus = $target.find('[data-submenu]');\n const $allmenus = $target.add($submenus);\n\n $submenus.slideUp(0);\n $allmenus\n .removeClass('is-active')\n .attr('aria-hidden', true);\n\n if (this.options.submenuToggle) {\n $allmenus.prev('.submenu-toggle').attr('aria-expanded', false);\n }\n else {\n $allmenus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);\n }\n\n $target.slideUp(this.options.slideSpeed, () => {\n /**\n * Fires when the menu is done collapsing up.\n * @event AccordionMenu#up\n */\n this.$element.trigger('up.zf.accordionMenu', [$target]);\n });\n }\n\n /**\n * Destroys an instance of accordion menu.\n * @fires AccordionMenu#destroyed\n */\n _destroy() {\n this.$element.find('[data-submenu]').slideDown(0).css('display', '');\n this.$element.find('a').off('click.zf.accordionMenu');\n this.$element.find('[data-is-parent-link]').detach();\n\n if (this.options.submenuToggle) {\n this.$element.find('.has-submenu-toggle').removeClass('has-submenu-toggle');\n this.$element.find('.submenu-toggle').remove();\n }\n\n Nest.Burn(this.$element, 'accordion');\n }\n}\n\nAccordionMenu.defaults = {\n /**\n * Adds the parent link to the submenu.\n * @option\n * @type {boolean}\n * @default false\n */\n parentLink: false,\n /**\n * Amount of time to animate the opening of a submenu in ms.\n * @option\n * @type {number}\n * @default 250\n */\n slideSpeed: 250,\n /**\n * Adds a separate submenu toggle button. This allows the parent item to have a link.\n * @option\n * @example true\n */\n submenuToggle: false,\n /**\n * The text used for the submenu toggle if enabled. This is used for screen readers only.\n * @option\n * @example true\n */\n submenuToggleText: 'Toggle menu',\n /**\n * Allow the menu to have multiple open panes.\n * @option\n * @type {boolean}\n * @default true\n */\n multiOpen: true\n};\n\nexport { AccordionMenu };\n","var Box = {\n ImNotTouchingYou: ImNotTouchingYou,\n OverlapArea: OverlapArea,\n GetDimensions: GetDimensions,\n GetExplicitOffsets: GetExplicitOffsets\n}\n\n/**\n * Compares the dimensions of an element to a container and determines collision events with container.\n * @function\n * @param {jQuery} element - jQuery object to test for collisions.\n * @param {jQuery} parent - jQuery object to use as bounding container.\n * @param {Boolean} lrOnly - set to true to check left and right values only.\n * @param {Boolean} tbOnly - set to true to check top and bottom values only.\n * @default if no parent object passed, detects collisions with `window`.\n * @returns {Boolean} - true if collision free, false if a collision in any direction.\n */\nfunction ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) {\n return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0;\n}\n\nfunction OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) {\n var eleDims = GetDimensions(element),\n topOver, bottomOver, leftOver, rightOver;\n if (parent) {\n var parDims = GetDimensions(parent);\n\n bottomOver = (parDims.height + parDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - parDims.offset.top;\n leftOver = eleDims.offset.left - parDims.offset.left;\n rightOver = (parDims.width + parDims.offset.left) - (eleDims.offset.left + eleDims.width);\n }\n else {\n bottomOver = (eleDims.windowDims.height + eleDims.windowDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - eleDims.windowDims.offset.top;\n leftOver = eleDims.offset.left - eleDims.windowDims.offset.left;\n rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width);\n }\n\n bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0);\n topOver = Math.min(topOver, 0);\n leftOver = Math.min(leftOver, 0);\n rightOver = Math.min(rightOver, 0);\n\n if (lrOnly) {\n return leftOver + rightOver;\n }\n if (tbOnly) {\n return topOver + bottomOver;\n }\n\n // use sum of squares b/c we care about overlap area.\n return Math.sqrt((topOver * topOver) + (bottomOver * bottomOver) + (leftOver * leftOver) + (rightOver * rightOver));\n}\n\n/**\n * Uses native methods to return an object of dimension values.\n * @function\n * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window.\n * @returns {Object} - nested object of integer pixel values\n * TODO - if element is window, return only those values.\n */\nfunction GetDimensions(elem){\n elem = elem.length ? elem[0] : elem;\n\n if (elem === window || elem === document) {\n throw new Error(\"I'm sorry, Dave. I'm afraid I can't do that.\");\n }\n\n var rect = elem.getBoundingClientRect(),\n parRect = elem.parentNode.getBoundingClientRect(),\n winRect = document.body.getBoundingClientRect(),\n winY = window.pageYOffset,\n winX = window.pageXOffset;\n\n return {\n width: rect.width,\n height: rect.height,\n offset: {\n top: rect.top + winY,\n left: rect.left + winX\n },\n parentDims: {\n width: parRect.width,\n height: parRect.height,\n offset: {\n top: parRect.top + winY,\n left: parRect.left + winX\n }\n },\n windowDims: {\n width: winRect.width,\n height: winRect.height,\n offset: {\n top: winY,\n left: winX\n }\n }\n }\n}\n\n/**\n * Returns an object of top and left integer pixel values for dynamically rendered elements,\n * such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where\n * you don't know alignment, but generally from\n * 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment.\n * @function\n * @param {jQuery} element - jQuery object for the element being positioned.\n * @param {jQuery} anchor - jQuery object for the element's anchor point.\n * @param {String} position - a string relating to the desired position of the element, relative to it's anchor\n * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element.\n * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element.\n * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset.\n * TODO alter/rewrite to work with `em` values as well/instead of pixels\n */\nfunction GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) {\n var $eleDims = GetDimensions(element),\n $anchorDims = anchor ? GetDimensions(anchor) : null;\n\n var topVal, leftVal;\n\n if ($anchorDims !== null) {\n // set position related attribute\n switch (position) {\n case 'top':\n topVal = $anchorDims.offset.top - ($eleDims.height + vOffset);\n break;\n case 'bottom':\n topVal = $anchorDims.offset.top + $anchorDims.height + vOffset;\n break;\n case 'left':\n leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset);\n break;\n case 'right':\n leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset;\n break;\n }\n\n // set alignment related attribute\n switch (position) {\n case 'top':\n case 'bottom':\n switch (alignment) {\n case 'left':\n leftVal = $anchorDims.offset.left + hOffset;\n break;\n case 'right':\n leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset;\n break;\n case 'center':\n leftVal = isOverflow ? hOffset : (($anchorDims.offset.left + ($anchorDims.width / 2)) - ($eleDims.width / 2)) + hOffset;\n break;\n }\n break;\n case 'right':\n case 'left':\n switch (alignment) {\n case 'bottom':\n topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height;\n break;\n case 'top':\n topVal = $anchorDims.offset.top + vOffset\n break;\n case 'center':\n topVal = ($anchorDims.offset.top + vOffset + ($anchorDims.height / 2)) - ($eleDims.height / 2)\n break;\n }\n break;\n }\n }\n\n return {top: topVal, left: leftVal};\n}\n\nexport {Box};\n","import { Box } from './foundation.util.box';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst POSITIONS = ['left', 'right', 'top', 'bottom'];\nconst VERTICAL_ALIGNMENTS = ['top', 'bottom', 'center'];\nconst HORIZONTAL_ALIGNMENTS = ['left', 'right', 'center'];\n\nconst ALIGNMENTS = {\n 'left': VERTICAL_ALIGNMENTS,\n 'right': VERTICAL_ALIGNMENTS,\n 'top': HORIZONTAL_ALIGNMENTS,\n 'bottom': HORIZONTAL_ALIGNMENTS\n}\n\nfunction nextItem(item, array) {\n var currentIdx = array.indexOf(item);\n if(currentIdx === array.length - 1) {\n return array[0];\n } else {\n return array[currentIdx + 1];\n }\n}\n\n\nclass Positionable extends Plugin {\n /**\n * Abstract class encapsulating the tether-like explicit positioning logic\n * including repositioning based on overlap.\n * Expects classes to define defaults for vOffset, hOffset, position,\n * alignment, allowOverlap, and allowBottomOverlap. They can do this by\n * extending the defaults, or (for now recommended due to the way docs are\n * generated) by explicitly declaring them.\n *\n **/\n\n _init() {\n this.triedPositions = {};\n this.position = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position;\n this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment;\n this.originalPosition = this.position;\n this.originalAlignment = this.alignment;\n }\n\n _getDefaultPosition () {\n return 'bottom';\n }\n\n _getDefaultAlignment() {\n switch(this.position) {\n case 'bottom':\n case 'top':\n return Rtl() ? 'right' : 'left';\n case 'left':\n case 'right':\n return 'bottom';\n }\n }\n\n /**\n * Adjusts the positionable possible positions by iterating through alignments\n * and positions.\n * @function\n * @private\n */\n _reposition() {\n if(this._alignmentsExhausted(this.position)) {\n this.position = nextItem(this.position, POSITIONS);\n this.alignment = ALIGNMENTS[this.position][0];\n } else {\n this._realign();\n }\n }\n\n /**\n * Adjusts the dropdown pane possible positions by iterating through alignments\n * on the current position.\n * @function\n * @private\n */\n _realign() {\n this._addTriedPosition(this.position, this.alignment)\n this.alignment = nextItem(this.alignment, ALIGNMENTS[this.position])\n }\n\n _addTriedPosition(position, alignment) {\n this.triedPositions[position] = this.triedPositions[position] || []\n this.triedPositions[position].push(alignment);\n }\n\n _positionsExhausted() {\n var isExhausted = true;\n for(var i = 0; i < POSITIONS.length; i++) {\n isExhausted = isExhausted && this._alignmentsExhausted(POSITIONS[i]);\n }\n return isExhausted;\n }\n\n _alignmentsExhausted(position) {\n return this.triedPositions[position] && this.triedPositions[position].length === ALIGNMENTS[position].length;\n }\n\n\n // When we're trying to center, we don't want to apply offset that's going to\n // take us just off center, so wrap around to return 0 for the appropriate\n // offset in those alignments. TODO: Figure out if we want to make this\n // configurable behavior... it feels more intuitive, especially for tooltips, but\n // it's possible someone might actually want to start from center and then nudge\n // slightly off.\n _getVOffset() {\n return this.options.vOffset;\n }\n\n _getHOffset() {\n return this.options.hOffset;\n }\n\n _setPosition($anchor, $element, $parent) {\n if($anchor.attr('aria-expanded') === 'false'){ return false; }\n\n if (!this.options.allowOverlap) {\n // restore original position & alignment before checking overlap\n this.position = this.originalPosition;\n this.alignment = this.originalAlignment;\n }\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n\n if(!this.options.allowOverlap) {\n var minOverlap = 100000000;\n // default coordinates to how we start, in case we can't figure out better\n var minCoordinates = {position: this.position, alignment: this.alignment};\n while(!this._positionsExhausted()) {\n let overlap = Box.OverlapArea($element, $parent, false, false, this.options.allowBottomOverlap);\n if(overlap === 0) {\n return;\n }\n\n if(overlap < minOverlap) {\n minOverlap = overlap;\n minCoordinates = {position: this.position, alignment: this.alignment};\n }\n\n this._reposition();\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n // If we get through the entire loop, there was no non-overlapping\n // position available. Pick the version with least overlap.\n this.position = minCoordinates.position;\n this.alignment = minCoordinates.alignment;\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n }\n\n}\n\nPositionable.defaults = {\n /**\n * Position of positionable relative to anchor. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of positionable relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown positionable first\n * try to position as defined by data-position and data-alignment, but\n * reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Number of pixels the positionable should be separated vertically from anchor\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels the positionable should be separated horizontally from anchor\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n}\n\nexport {Positionable};\n","import $ from 'jquery';\nimport { transitionend } from './foundation.core.utils';\n\n/**\n * Motion module.\n * @module foundation.motion\n */\n\nconst initClasses = ['mui-enter', 'mui-leave'];\nconst activeClasses = ['mui-enter-active', 'mui-leave-active'];\n\nconst Motion = {\n animateIn: function(element, animation, cb) {\n animate(true, element, animation, cb);\n },\n\n animateOut: function(element, animation, cb) {\n animate(false, element, animation, cb);\n }\n}\n\nfunction Move(duration, elem, fn){\n var anim, prog, start = null;\n\n if (duration === 0) {\n fn.apply(elem);\n elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n return;\n }\n\n function move(ts){\n if(!start) start = ts;\n prog = ts - start;\n fn.apply(elem);\n\n if(prog < duration){ anim = window.requestAnimationFrame(move, elem); }\n else{\n window.cancelAnimationFrame(anim);\n elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n }\n }\n anim = window.requestAnimationFrame(move);\n}\n\n/**\n * Animates an element in or out using a CSS transition class.\n * @function\n * @private\n * @param {Boolean} isIn - Defines if the animation is in or out.\n * @param {Object} element - jQuery or HTML object to animate.\n * @param {String} animation - CSS class to use.\n * @param {Function} cb - Callback to run when animation is finished.\n */\nfunction animate(isIn, element, animation, cb) {\n element = $(element).eq(0);\n\n if (!element.length) return;\n\n var initClass = isIn ? initClasses[0] : initClasses[1];\n var activeClass = isIn ? activeClasses[0] : activeClasses[1];\n\n // Set up the animation\n reset();\n\n element\n .addClass(animation)\n .css('transition', 'none');\n\n requestAnimationFrame(() => {\n element.addClass(initClass);\n if (isIn) element.show();\n });\n\n // Start the animation\n requestAnimationFrame(() => {\n // will trigger the browser to synchronously calculate the style and layout\n // also called reflow or layout thrashing\n // see https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n element[0].offsetWidth;\n element\n .css('transition', '')\n .addClass(activeClass);\n });\n\n // Clean up the animation when it finishes\n element.one(transitionend(element), finish);\n\n // Hides the element (for out animations), resets the element, and runs a callback\n function finish() {\n if (!isIn) element.hide();\n reset();\n if (cb) cb.apply(element);\n }\n\n // Resets transitions and removes motion-specific classes\n function reset() {\n element[0].style.transitionDuration = 0;\n element.removeClass(`${initClass} ${activeClass} ${animation}`);\n }\n}\n\nexport { Move, Motion };\n\n","import $ from 'jquery';\nimport { onLoad } from './foundation.core.utils';\nimport { Motion } from './foundation.util.motion';\n\nconst MutationObserver = (function () {\n var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];\n for (var i=0; i < prefixes.length; i++) {\n if (`${prefixes[i]}MutationObserver` in window) {\n return window[`${prefixes[i]}MutationObserver`];\n }\n }\n return false;\n})();\n\nconst triggers = (el, type) => {\n el.data(type).split(' ').forEach(id => {\n $(`#${id}`)[ type === 'close' ? 'trigger' : 'triggerHandler'](`${type}.zf.trigger`, [el]);\n });\n};\n\nvar Triggers = {\n Listeners: {\n Basic: {},\n Global: {}\n },\n Initializers: {}\n}\n\nTriggers.Listeners.Basic = {\n openListener: function() {\n triggers($(this), 'open');\n },\n closeListener: function() {\n let id = $(this).data('close');\n if (id) {\n triggers($(this), 'close');\n }\n else {\n $(this).trigger('close.zf.trigger');\n }\n },\n toggleListener: function() {\n let id = $(this).data('toggle');\n if (id) {\n triggers($(this), 'toggle');\n } else {\n $(this).trigger('toggle.zf.trigger');\n }\n },\n closeableListener: function(e) {\n let animation = $(this).data('closable');\n\n // Only close the first closable element. See https://git.io/zf-7833\n e.stopPropagation();\n\n if(animation !== ''){\n Motion.animateOut($(this), animation, function() {\n $(this).trigger('closed.zf');\n });\n }else{\n $(this).fadeOut().trigger('closed.zf');\n }\n },\n toggleFocusListener: function() {\n let id = $(this).data('toggle-focus');\n $(`#${id}`).triggerHandler('toggle.zf.trigger', [$(this)]);\n }\n};\n\n// Elements with [data-open] will reveal a plugin that supports it when clicked.\nTriggers.Initializers.addOpenListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);\n $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);\n}\n\n// Elements with [data-close] will close a plugin that supports it when clicked.\n// If used without a value on [data-close], the event will bubble, allowing it to close a parent component.\nTriggers.Initializers.addCloseListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);\n $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);\n}\n\n// Elements with [data-toggle] will toggle a plugin that supports it when clicked.\nTriggers.Initializers.addToggleListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);\n $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);\n}\n\n// Elements with [data-closable] will respond to close.zf.trigger events.\nTriggers.Initializers.addCloseableListener = ($elem) => {\n $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);\n $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);\n}\n\n// Elements with [data-toggle-focus] will respond to coming in and out of focus\nTriggers.Initializers.addToggleFocusListener = ($elem) => {\n $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);\n $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);\n}\n\n\n\n// More Global/complex listeners and triggers\nTriggers.Listeners.Global = {\n resizeListener: function($nodes) {\n if(!MutationObserver){//fallback for IE 9\n $nodes.each(function(){\n $(this).triggerHandler('resizeme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a resize event\n $nodes.attr('data-events', \"resize\");\n },\n scrollListener: function($nodes) {\n if(!MutationObserver){//fallback for IE 9\n $nodes.each(function(){\n $(this).triggerHandler('scrollme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a scroll event\n $nodes.attr('data-events', \"scroll\");\n },\n closeMeListener: function(e, pluginId){\n let plugin = e.namespace.split('.')[0];\n let plugins = $(`[data-${plugin}]`).not(`[data-yeti-box=\"${pluginId}\"]`);\n\n plugins.each(function(){\n let _this = $(this);\n _this.triggerHandler('close.zf.trigger', [_this]);\n });\n }\n}\n\n// Global, parses whole document.\nTriggers.Initializers.addClosemeListener = function(pluginName) {\n var yetiBoxes = $('[data-yeti-box]'),\n plugNames = ['dropdown', 'tooltip', 'reveal'];\n\n if(pluginName){\n if(typeof pluginName === 'string'){\n plugNames.push(pluginName);\n }else if(typeof pluginName === 'object' && typeof pluginName[0] === 'string'){\n plugNames = plugNames.concat(pluginName);\n }else{\n console.error('Plugin names must be strings');\n }\n }\n if(yetiBoxes.length){\n let listeners = plugNames.map((name) => {\n return `closeme.zf.${name}`;\n }).join(' ');\n\n $(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);\n }\n}\n\nfunction debounceGlobalListener(debounce, trigger, listener) {\n let timer, args = Array.prototype.slice.call(arguments, 3);\n $(window).on(trigger, function() {\n if (timer) { clearTimeout(timer); }\n timer = setTimeout(function(){\n listener.apply(null, args);\n }, debounce || 10); //default time to emit scroll event\n });\n}\n\nTriggers.Initializers.addResizeListener = function(debounce){\n let $nodes = $('[data-resize]');\n if($nodes.length){\n debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);\n }\n}\n\nTriggers.Initializers.addScrollListener = function(debounce){\n let $nodes = $('[data-scroll]');\n if($nodes.length){\n debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);\n }\n}\n\nTriggers.Initializers.addMutationEventsListener = function($elem) {\n if(!MutationObserver){ return false; }\n let $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]');\n\n //element callback\n var listeningElementsMutation = function (mutationRecordsList) {\n var $target = $(mutationRecordsList[0].target);\n\n //trigger the event handler for the element depending on type\n switch (mutationRecordsList[0].type) {\n case \"attributes\":\n if ($target.attr(\"data-events\") === \"scroll\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);\n }\n if ($target.attr(\"data-events\") === \"resize\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('resizeme.zf.trigger', [$target]);\n }\n if (mutationRecordsList[0].attributeName === \"style\") {\n $target.closest(\"[data-mutate]\").attr(\"data-events\",\"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n }\n break;\n\n case \"childList\":\n $target.closest(\"[data-mutate]\").attr(\"data-events\",\"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n break;\n\n default:\n return false;\n //nothing\n }\n };\n\n if ($nodes.length) {\n //for each element that needs to listen for resizing, scrolling, or mutation add a single observer\n for (var i = 0; i <= $nodes.length - 1; i++) {\n var elementObserver = new MutationObserver(listeningElementsMutation);\n elementObserver.observe($nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: [\"data-events\", \"style\"] });\n }\n }\n}\n\nTriggers.Initializers.addSimpleListeners = function() {\n let $document = $(document);\n\n Triggers.Initializers.addOpenListener($document);\n Triggers.Initializers.addCloseListener($document);\n Triggers.Initializers.addToggleListener($document);\n Triggers.Initializers.addCloseableListener($document);\n Triggers.Initializers.addToggleFocusListener($document);\n\n}\n\nTriggers.Initializers.addGlobalListeners = function() {\n let $document = $(document);\n Triggers.Initializers.addMutationEventsListener($document);\n Triggers.Initializers.addResizeListener(250);\n Triggers.Initializers.addScrollListener();\n Triggers.Initializers.addClosemeListener();\n}\n\n\nTriggers.init = function (__, Foundation) {\n onLoad($(window), function () {\n if ($.triggersInitialized !== true) {\n Triggers.Initializers.addSimpleListeners();\n Triggers.Initializers.addGlobalListeners();\n $.triggersInitialized = true;\n }\n });\n\n if(Foundation) {\n Foundation.Triggers = Triggers;\n // Legacy included to be backwards compatible for now.\n Foundation.IHearYou = Triggers.Initializers.addGlobalListeners\n }\n}\n\nexport {Triggers};\n","//**************************************************\n//**Work inspired by multiple jquery swipe plugins**\n//**Done by Yohai Ararat ***************************\n//**************************************************\n\nimport $ from 'jquery';\n\nvar Touch = {};\n\nvar startPosX,\n startTime,\n elapsedTime,\n startEvent,\n isMoving = false,\n didMoved = false;\n\nfunction onTouchEnd(e) {\n this.removeEventListener('touchmove', onTouchMove);\n this.removeEventListener('touchend', onTouchEnd);\n\n // If the touch did not move, consider it as a \"tap\"\n if (!didMoved) {\n var tapEvent = $.Event('tap', startEvent || e);\n $(this).trigger(tapEvent);\n }\n\n startEvent = null;\n isMoving = false;\n didMoved = false;\n}\n\nfunction onTouchMove(e) {\n if (true === $.spotSwipe.preventDefault) { e.preventDefault(); }\n\n if(isMoving) {\n var x = e.touches[0].pageX;\n // var y = e.touches[0].pageY;\n var dx = startPosX - x;\n // var dy = startPosY - y;\n var dir;\n didMoved = true;\n elapsedTime = new Date().getTime() - startTime;\n if(Math.abs(dx) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n dir = dx > 0 ? 'left' : 'right';\n }\n // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n // dir = dy > 0 ? 'down' : 'up';\n // }\n if(dir) {\n e.preventDefault();\n onTouchEnd.apply(this, arguments);\n $(this)\n .trigger($.Event('swipe', Object.assign({}, e)), dir)\n .trigger($.Event(`swipe${dir}`, Object.assign({}, e)));\n }\n }\n\n}\n\nfunction onTouchStart(e) {\n\n if (e.touches.length === 1) {\n startPosX = e.touches[0].pageX;\n startEvent = e;\n isMoving = true;\n didMoved = false;\n startTime = new Date().getTime();\n this.addEventListener('touchmove', onTouchMove, { passive : true === $.spotSwipe.preventDefault });\n this.addEventListener('touchend', onTouchEnd, false);\n }\n}\n\nfunction init() {\n this.addEventListener && this.addEventListener('touchstart', onTouchStart, { passive : true });\n}\n\n// function teardown() {\n// this.removeEventListener('touchstart', onTouchStart);\n// }\n\nclass SpotSwipe {\n constructor() {\n this.version = '1.0.0';\n this.enabled = 'ontouchstart' in document.documentElement;\n this.preventDefault = false;\n this.moveThreshold = 75;\n this.timeThreshold = 200;\n this._init();\n }\n\n _init() {\n $.event.special.swipe = { setup: init };\n $.event.special.tap = { setup: init };\n\n $.each(['left', 'up', 'down', 'right'], function () {\n $.event.special[`swipe${this}`] = { setup: function(){\n $(this).on('swipe', $.noop);\n } };\n });\n }\n}\n\n/****************************************************\n * As far as I can tell, both setupSpotSwipe and *\n * setupTouchHandler should be idempotent, *\n * because they directly replace functions & *\n * values, and do not add event handlers directly. *\n ****************************************************/\n\nTouch.setupSpotSwipe = function() {\n $.spotSwipe = new SpotSwipe($);\n};\n\n/****************************************************\n * Method for adding pseudo drag events to elements *\n ***************************************************/\nTouch.setupTouchHandler = function() {\n $.fn.addTouch = function(){\n this.each(function(i, el){\n $(el).bind('touchstart touchmove touchend touchcancel', function(event) {\n //we pass the original event object because the jQuery event\n //object is normalized to w3c specs and does not provide the TouchList\n handleTouch(event);\n });\n });\n\n var handleTouch = function(event) {\n var touches = event.changedTouches,\n first = touches[0],\n eventTypes = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup'\n },\n type = eventTypes[event.type],\n simulatedEvent\n ;\n\n if('MouseEvent' in window && typeof window.MouseEvent === 'function') {\n simulatedEvent = new window.MouseEvent(type, {\n 'bubbles': true,\n 'cancelable': true,\n 'screenX': first.screenX,\n 'screenY': first.screenY,\n 'clientX': first.clientX,\n 'clientY': first.clientY\n });\n } else {\n simulatedEvent = document.createEvent('MouseEvent');\n simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0/*left*/, null);\n }\n first.target.dispatchEvent(simulatedEvent);\n };\n };\n};\n\nTouch.init = function () {\n if(typeof($.spotSwipe) === 'undefined') {\n Touch.setupSpotSwipe($);\n Touch.setupTouchHandler($);\n }\n};\n\nexport {Touch};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { GetYoDigits, ignoreMousedisappear } from './foundation.core.utils';\nimport { Positionable } from './foundation.positionable';\n\nimport { Triggers } from './foundation.util.triggers';\nimport { Touch } from './foundation.util.touch'\n\n/**\n * Dropdown module.\n * @module foundation.dropdown\n * @requires foundation.util.keyboard\n * @requires foundation.util.box\n * @requires foundation.util.touch\n * @requires foundation.util.triggers\n */\nclass Dropdown extends Positionable {\n /**\n * Creates a new instance of a dropdown.\n * @class\n * @name Dropdown\n * @param {jQuery} element - jQuery object to make into a dropdown.\n * Object should be of the dropdown panel, rather than its anchor.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Dropdown.defaults, this.$element.data(), options);\n this.className = 'Dropdown'; // ie9 back compat\n\n // Touch and Triggers init are idempotent, just need to make sure they are initialized\n Touch.init($);\n Triggers.init($);\n\n this._init();\n\n Keyboard.register('Dropdown', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ESCAPE': 'close'\n });\n }\n\n /**\n * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor.\n * @function\n * @private\n */\n _init() {\n var $id = this.$element.attr('id');\n\n this.$anchors = $(`[data-toggle=\"${$id}\"]`).length ? $(`[data-toggle=\"${$id}\"]`) : $(`[data-open=\"${$id}\"]`);\n this.$anchors.attr({\n 'aria-controls': $id,\n 'data-is-focus': false,\n 'data-yeti-box': $id,\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n\n this._setCurrentAnchor(this.$anchors.first());\n\n if(this.options.parentClass){\n this.$parent = this.$element.parents('.' + this.options.parentClass);\n }else{\n this.$parent = null;\n }\n\n // Set [aria-labelledby] on the Dropdown if it is not set\n if (typeof this.$element.attr('aria-labelledby') === 'undefined') {\n // Get the anchor ID or create one\n if (typeof this.$currentAnchor.attr('id') === 'undefined') {\n this.$currentAnchor.attr('id', GetYoDigits(6, 'dd-anchor'));\n }\n\n this.$element.attr('aria-labelledby', this.$currentAnchor.attr('id'));\n }\n\n this.$element.attr({\n 'aria-hidden': 'true',\n 'data-yeti-box': $id,\n 'data-resize': $id,\n });\n\n super._init();\n this._events();\n }\n\n _getDefaultPosition() {\n // handle legacy classnames\n var position = this.$element[0].className.match(/(top|left|right|bottom)/g);\n if(position) {\n return position[0];\n } else {\n return 'bottom'\n }\n }\n\n _getDefaultAlignment() {\n // handle legacy float approach\n var horizontalPosition = /float-(\\S+)/.exec(this.$currentAnchor.attr('class'));\n if(horizontalPosition) {\n return horizontalPosition[1];\n }\n\n return super._getDefaultAlignment();\n }\n\n\n\n /**\n * Sets the position and orientation of the dropdown pane, checks for collisions if allow-overlap is not true.\n * Recursively calls itself if a collision is detected, with a new position class.\n * @function\n * @private\n */\n _setPosition() {\n this.$element.removeClass(`has-position-${this.position} has-alignment-${this.alignment}`);\n super._setPosition(this.$currentAnchor, this.$element, this.$parent);\n this.$element.addClass(`has-position-${this.position} has-alignment-${this.alignment}`);\n }\n\n /**\n * Make it a current anchor.\n * Current anchor as the reference for the position of Dropdown panes.\n * @param {HTML} el - DOM element of the anchor.\n * @function\n * @private\n */\n _setCurrentAnchor(el) {\n this.$currentAnchor = $(el);\n }\n\n /**\n * Adds event listeners to the element utilizing the triggers utility library.\n * @function\n * @private\n */\n _events() {\n var _this = this,\n hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined');\n\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': this.close.bind(this),\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': this._setPosition.bind(this)\n });\n\n this.$anchors.off('click.zf.trigger')\n .on('click.zf.trigger', function(e) {\n _this._setCurrentAnchor(this);\n\n if (\n // if forceFollow false, always prevent default action\n (_this.options.forceFollow === false) ||\n // if forceFollow true and hover option true, only prevent default action on 1st click\n // on 2nd click (dropown opened) the default action (e.g. follow a href) gets executed\n (hasTouch && _this.options.hover && _this.$element.hasClass('is-open') === false)\n ) {\n e.preventDefault();\n }\n });\n\n if(this.options.hover){\n this.$anchors.off('mouseenter.zf.dropdown mouseleave.zf.dropdown')\n .on('mouseenter.zf.dropdown', function(){\n _this._setCurrentAnchor(this);\n\n var bodyData = $('body').data();\n if(typeof(bodyData.whatinput) === 'undefined' || bodyData.whatinput === 'mouse') {\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.open();\n _this.$anchors.data('hover', true);\n }, _this.options.hoverDelay);\n }\n }).on('mouseleave.zf.dropdown', ignoreMousedisappear(function(){\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.close();\n _this.$anchors.data('hover', false);\n }, _this.options.hoverDelay);\n }));\n if(this.options.hoverPane){\n this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown')\n .on('mouseenter.zf.dropdown', function(){\n clearTimeout(_this.timeout);\n }).on('mouseleave.zf.dropdown', ignoreMousedisappear(function(){\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.close();\n _this.$anchors.data('hover', false);\n }, _this.options.hoverDelay);\n }));\n }\n }\n this.$anchors.add(this.$element).on('keydown.zf.dropdown', function(e) {\n\n var $target = $(this);\n\n Keyboard.handleKey(e, 'Dropdown', {\n open: function() {\n if ($target.is(_this.$anchors) && !$target.is('input, textarea')) {\n _this.open();\n _this.$element.attr('tabindex', -1).focus();\n e.preventDefault();\n }\n },\n close: function() {\n _this.close();\n _this.$anchors.focus();\n }\n });\n });\n }\n\n /**\n * Adds an event handler to the body to close any dropdowns on a click.\n * @function\n * @private\n */\n _addBodyHandler() {\n var $body = $(document.body).not(this.$element),\n _this = this;\n $body.off('click.zf.dropdown tap.zf.dropdown')\n .on('click.zf.dropdown tap.zf.dropdown', function (e) {\n if(_this.$anchors.is(e.target) || _this.$anchors.find(e.target).length) {\n return;\n }\n if(_this.$element.is(e.target) || _this.$element.find(e.target).length) {\n return;\n }\n _this.close();\n $body.off('click.zf.dropdown tap.zf.dropdown');\n });\n }\n\n /**\n * Opens the dropdown pane, and fires a bubbling event to close other dropdowns.\n * @function\n * @fires Dropdown#closeme\n * @fires Dropdown#show\n */\n open() {\n // var _this = this;\n /**\n * Fires to close other open dropdowns, typically when dropdown is opening\n * @event Dropdown#closeme\n */\n this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id'));\n this.$anchors.addClass('hover')\n .attr({'aria-expanded': true});\n // this.$element/*.show()*/;\n\n this.$element.addClass('is-opening');\n this._setPosition();\n this.$element.removeClass('is-opening').addClass('is-open')\n .attr({'aria-hidden': false});\n\n if(this.options.autoFocus){\n var $focusable = Keyboard.findFocusable(this.$element);\n if($focusable.length){\n $focusable.eq(0).focus();\n }\n }\n\n if(this.options.closeOnClick){ this._addBodyHandler(); }\n\n if (this.options.trapFocus) {\n Keyboard.trapFocus(this.$element);\n }\n\n /**\n * Fires once the dropdown is visible.\n * @event Dropdown#show\n */\n this.$element.trigger('show.zf.dropdown', [this.$element]);\n }\n\n /**\n * Closes the open dropdown pane.\n * @function\n * @fires Dropdown#hide\n */\n close() {\n if(!this.$element.hasClass('is-open')){\n return false;\n }\n this.$element.removeClass('is-open')\n .attr({'aria-hidden': true});\n\n this.$anchors.removeClass('hover')\n .attr('aria-expanded', false);\n\n /**\n * Fires once the dropdown is no longer visible.\n * @event Dropdown#hide\n */\n this.$element.trigger('hide.zf.dropdown', [this.$element]);\n\n if (this.options.trapFocus) {\n Keyboard.releaseFocus(this.$element);\n }\n }\n\n /**\n * Toggles the dropdown pane's visibility.\n * @function\n */\n toggle() {\n if(this.$element.hasClass('is-open')){\n if(this.$anchors.data('hover')) return;\n this.close();\n }else{\n this.open();\n }\n }\n\n /**\n * Destroys the dropdown.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.trigger').hide();\n this.$anchors.off('.zf.dropdown');\n $(document.body).off('click.zf.dropdown tap.zf.dropdown');\n\n }\n}\n\nDropdown.defaults = {\n /**\n * Class that designates bounding container of Dropdown (default: window)\n * @option\n * @type {?string}\n * @default null\n */\n parentClass: null,\n /**\n * Amount of time to delay opening a submenu on hover event.\n * @option\n * @type {number}\n * @default 250\n */\n hoverDelay: 250,\n /**\n * Allow submenus to open on hover events\n * @option\n * @type {boolean}\n * @default false\n */\n hover: false,\n /**\n * Don't close dropdown when hovering over dropdown pane\n * @option\n * @type {boolean}\n * @default false\n */\n hoverPane: false,\n /**\n * Number of pixels between the dropdown pane and the triggering element on open.\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels between the dropdown pane and the triggering element on open.\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n /**\n * Position of dropdown. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of dropdown relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown will first try to position as defined by data-position and data-alignment, but reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands.\n * @option\n * @type {boolean}\n * @default false\n */\n trapFocus: false,\n /**\n * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening.\n * @option\n * @type {boolean}\n * @default false\n */\n autoFocus: false,\n /**\n * Allows a click on the body to close the dropdown.\n * @option\n * @type {boolean}\n * @default false\n */\n closeOnClick: false,\n /**\n * If true the default action of the toggle (e.g. follow a link with href) gets executed on click. If hover option is also true the default action gets prevented on first click for mobile / touch devices and executed on second click.\n * @option\n * @type {boolean}\n * @default true\n */\n forceFollow: true\n};\n\nexport {Dropdown};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl, ignoreMousedisappear } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { Box } from './foundation.util.box';\nimport { Touch } from './foundation.util.touch'\n\n\n/**\n * DropdownMenu module.\n * @module foundation.dropdownMenu\n * @requires foundation.util.keyboard\n * @requires foundation.util.box\n * @requires foundation.util.nest\n * @requires foundation.util.touch\n */\n\nclass DropdownMenu extends Plugin {\n /**\n * Creates a new instance of DropdownMenu.\n * @class\n * @name DropdownMenu\n * @fires DropdownMenu#init\n * @param {jQuery} element - jQuery object to make into a dropdown menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, DropdownMenu.defaults, this.$element.data(), options);\n this.className = 'DropdownMenu'; // ie9 back compat\n\n Touch.init($); // Touch init is idempotent, we just need to make sure it's initialied.\n\n this._init();\n\n Keyboard.register('DropdownMenu', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'previous',\n 'ESCAPE': 'close'\n });\n }\n\n /**\n * Initializes the plugin, and calls _prepareMenu\n * @private\n * @function\n */\n _init() {\n Nest.Feather(this.$element, 'dropdown');\n\n var subs = this.$element.find('li.is-dropdown-submenu-parent');\n this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub');\n\n this.$menuItems = this.$element.find('li[role=\"none\"]');\n this.$tabs = this.$element.children('li[role=\"none\"]');\n this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass);\n\n if (this.options.alignment === 'auto') {\n if (this.$element.hasClass(this.options.rightClass) || Rtl() || this.$element.parents('.top-bar-right').is('*')) {\n this.options.alignment = 'right';\n subs.addClass('opens-left');\n } else {\n this.options.alignment = 'left';\n subs.addClass('opens-right');\n }\n } else {\n if (this.options.alignment === 'right') {\n subs.addClass('opens-left');\n } else {\n subs.addClass('opens-right');\n }\n }\n this.changed = false;\n this._events();\n };\n\n _isVertical() {\n return this.$tabs.css('display') === 'block' || this.$element.css('flex-direction') === 'column';\n }\n\n _isRtl() {\n return this.$element.hasClass('align-right') || (Rtl() && !this.$element.hasClass('align-left'));\n }\n\n /**\n * Adds event listeners to elements within the menu\n * @private\n * @function\n */\n _events() {\n var _this = this,\n hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined'),\n parClass = 'is-dropdown-submenu-parent';\n\n // used for onClick and in the keyboard handlers\n var handleClickFn = function(e) {\n var $elem = $(e.target).parentsUntil('ul', `.${parClass}`),\n hasSub = $elem.hasClass(parClass),\n hasClicked = $elem.attr('data-is-click') === 'true',\n $sub = $elem.children('.is-dropdown-submenu');\n\n if (hasSub) {\n if (hasClicked) {\n if (!_this.options.closeOnClick\n || (!_this.options.clickOpen && !hasTouch)\n || (_this.options.forceFollow && hasTouch)) {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n _this._hide($elem);\n }\n else {\n e.stopImmediatePropagation();\n e.preventDefault();\n _this._show($sub);\n $elem.add($elem.parentsUntil(_this.$element, `.${parClass}`)).attr('data-is-click', true);\n }\n }\n };\n\n if (this.options.clickOpen || hasTouch) {\n this.$menuItems.on('click.zf.dropdownMenu touchstart.zf.dropdownMenu', handleClickFn);\n }\n\n // Handle Leaf element Clicks\n if(_this.options.closeOnClickInside){\n this.$menuItems.on('click.zf.dropdownMenu', function() {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n if(!hasSub){\n _this._hide();\n }\n });\n }\n\n if (hasTouch && this.options.disableHoverOnTouch) this.options.disableHover = true;\n\n if (!this.options.disableHover) {\n this.$menuItems.on('mouseenter.zf.dropdownMenu', function () {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n\n if (hasSub) {\n clearTimeout($elem.data('_delay'));\n $elem.data('_delay', setTimeout(function () {\n _this._show($elem.children('.is-dropdown-submenu'));\n }, _this.options.hoverDelay));\n }\n }).on('mouseleave.zf.dropdownMenu', ignoreMousedisappear(function () {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n if (hasSub && _this.options.autoclose) {\n if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) { return false; }\n\n clearTimeout($elem.data('_delay'));\n $elem.data('_delay', setTimeout(function () {\n _this._hide($elem);\n }, _this.options.closingTime));\n }\n }));\n }\n this.$menuItems.on('keydown.zf.dropdownMenu', function(e) {\n var $element = $(e.target).parentsUntil('ul', '[role=\"none\"]'),\n isTab = _this.$tabs.index($element) > -1,\n $elements = isTab ? _this.$tabs : $element.siblings('li').add($element),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(i-1);\n $nextElement = $elements.eq(i+1);\n return;\n }\n });\n\n var nextSibling = function() {\n $nextElement.children('a:first').focus();\n e.preventDefault();\n }, prevSibling = function() {\n $prevElement.children('a:first').focus();\n e.preventDefault();\n }, openSub = function() {\n var $sub = $element.children('ul.is-dropdown-submenu');\n if ($sub.length) {\n _this._show($sub);\n $element.find('li > a:first').focus();\n e.preventDefault();\n } else { return; }\n }, closeSub = function() {\n //if ($element.is(':first-child')) {\n var close = $element.parent('ul').parent('li');\n close.children('a:first').focus();\n _this._hide(close);\n e.preventDefault();\n //}\n };\n var functions = {\n open: openSub,\n close: function() {\n _this._hide(_this.$element);\n _this.$menuItems.eq(0).children('a').focus(); // focus to first element\n e.preventDefault();\n }\n };\n\n if (isTab) {\n if (_this._isVertical()) { // vertical menu\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n down: nextSibling,\n up: prevSibling,\n next: closeSub,\n previous: openSub\n });\n } else { // left aligned\n $.extend(functions, {\n down: nextSibling,\n up: prevSibling,\n next: openSub,\n previous: closeSub\n });\n }\n } else { // horizontal menu\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n next: prevSibling,\n previous: nextSibling,\n down: openSub,\n up: closeSub\n });\n } else { // left aligned\n $.extend(functions, {\n next: nextSibling,\n previous: prevSibling,\n down: openSub,\n up: closeSub\n });\n }\n }\n } else { // not tabs -> one sub\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n next: closeSub,\n previous: openSub,\n down: nextSibling,\n up: prevSibling\n });\n } else { // left aligned\n $.extend(functions, {\n next: openSub,\n previous: closeSub,\n down: nextSibling,\n up: prevSibling\n });\n }\n }\n Keyboard.handleKey(e, 'DropdownMenu', functions);\n\n });\n }\n\n /**\n * Adds an event handler to the body to close any dropdowns on a click.\n * @function\n * @private\n */\n _addBodyHandler() {\n const $body = $(document.body);\n this._removeBodyHandler();\n $body.on('click.zf.dropdownMenu tap.zf.dropdownMenu', (e) => {\n var isItself = !!$(e.target).closest(this.$element).length;\n if (isItself) return;\n\n this._hide();\n this._removeBodyHandler();\n });\n }\n\n /**\n * Remove the body event handler. See `_addBodyHandler`.\n * @function\n * @private\n */\n _removeBodyHandler() {\n $(document.body).off('click.zf.dropdownMenu tap.zf.dropdownMenu');\n }\n\n /**\n * Opens a dropdown pane, and checks for collisions first.\n * @param {jQuery} $sub - ul element that is a submenu to show\n * @function\n * @private\n * @fires DropdownMenu#show\n */\n _show($sub) {\n var idx = this.$tabs.index(this.$tabs.filter(function(i, el) {\n return $(el).find($sub).length > 0;\n }));\n var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent');\n this._hide($sibs, idx);\n $sub.css('visibility', 'hidden').addClass('js-dropdown-active')\n .parent('li.is-dropdown-submenu-parent').addClass('is-active');\n var clear = Box.ImNotTouchingYou($sub, null, true);\n if (!clear) {\n var oldClass = this.options.alignment === 'left' ? '-right' : '-left',\n $parentLi = $sub.parent('.is-dropdown-submenu-parent');\n $parentLi.removeClass(`opens${oldClass}`).addClass(`opens-${this.options.alignment}`);\n clear = Box.ImNotTouchingYou($sub, null, true);\n if (!clear) {\n $parentLi.removeClass(`opens-${this.options.alignment}`).addClass('opens-inner');\n }\n this.changed = true;\n }\n $sub.css('visibility', '');\n if (this.options.closeOnClick) { this._addBodyHandler(); }\n /**\n * Fires when the new dropdown pane is visible.\n * @event DropdownMenu#show\n */\n this.$element.trigger('show.zf.dropdownMenu', [$sub]);\n }\n\n /**\n * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything.\n * @function\n * @param {jQuery} $elem - element with a submenu to hide\n * @param {Number} idx - index of the $tabs collection to hide\n * @fires DropdownMenu#hide\n * @private\n */\n _hide($elem, idx) {\n var $toClose;\n if ($elem && $elem.length) {\n $toClose = $elem;\n } else if (typeof idx !== 'undefined') {\n $toClose = this.$tabs.not(function(i) {\n return i === idx;\n });\n }\n else {\n $toClose = this.$element;\n }\n var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;\n\n if (somethingToClose) {\n var $activeItem = $toClose.find('li.is-active');\n $activeItem.add($toClose).attr({\n 'data-is-click': false\n }).removeClass('is-active');\n\n $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active');\n\n if (this.changed || $toClose.find('opens-inner').length) {\n var oldClass = this.options.alignment === 'left' ? 'right' : 'left';\n $toClose.find('li.is-dropdown-submenu-parent').add($toClose)\n .removeClass(`opens-inner opens-${this.options.alignment}`)\n .addClass(`opens-${oldClass}`);\n this.changed = false;\n }\n\n clearTimeout($activeItem.data('_delay'));\n this._removeBodyHandler();\n\n /**\n * Fires when the open menus are closed.\n * @event DropdownMenu#hide\n */\n this.$element.trigger('hide.zf.dropdownMenu', [$toClose]);\n }\n }\n\n /**\n * Destroys the plugin.\n * @function\n */\n _destroy() {\n this.$menuItems.off('.zf.dropdownMenu').removeAttr('data-is-click')\n .removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner');\n $(document.body).off('.zf.dropdownMenu');\n Nest.Burn(this.$element, 'dropdown');\n }\n}\n\n/**\n * Default settings for plugin\n */\nDropdownMenu.defaults = {\n /**\n * Disallows hover events from opening submenus\n * @option\n * @type {boolean}\n * @default false\n */\n disableHover: false,\n /**\n * Disallows hover on touch devices\n * @option\n * @type {boolean}\n * @default true\n */\n disableHoverOnTouch: true,\n /**\n * Allow a submenu to automatically close on a mouseleave event, if not clicked open.\n * @option\n * @type {boolean}\n * @default true\n */\n autoclose: true,\n /**\n * Amount of time to delay opening a submenu on hover event.\n * @option\n * @type {number}\n * @default 50\n */\n hoverDelay: 50,\n /**\n * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu.\n * @option\n * @type {boolean}\n * @default false\n */\n clickOpen: false,\n /**\n * Amount of time to delay closing a submenu on a mouseleave event.\n * @option\n * @type {number}\n * @default 500\n */\n\n closingTime: 500,\n /**\n * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'auto'`, `'left'` or `'right'`.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow clicks on the body to close any open submenus.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allow clicks on leaf anchor links to close any open submenus.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClickInside: true,\n /**\n * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class.\n * @option\n * @type {string}\n * @default 'vertical'\n */\n verticalClass: 'vertical',\n /**\n * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class.\n * @option\n * @type {string}\n * @default 'align-right'\n */\n rightClass: 'align-right',\n /**\n * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile.\n * @option\n * @type {boolean}\n * @default true\n */\n forceFollow: true\n};\n\nexport {DropdownMenu};\n","import $ from 'jquery';\n\n/**\n * Runs a callback function when images are fully loaded.\n * @param {Object} images - Image(s) to check if loaded.\n * @param {Func} callback - Function to execute when image is fully loaded.\n */\nfunction onImagesLoaded(images, callback){\n var unloaded = images.length;\n\n if (unloaded === 0) {\n callback();\n }\n\n images.each(function(){\n // Check if image is loaded\n if (this.complete && typeof this.naturalWidth !== 'undefined') {\n singleImageLoaded();\n }\n else {\n // If the above check failed, simulate loading on detached element.\n var image = new Image();\n // Still count image as loaded if it finalizes with an error.\n var events = \"load.zf.images error.zf.images\";\n $(image).one(events, function me(){\n // Unbind the event listeners. We're using 'one' but only one of the two events will have fired.\n $(this).off(events, me);\n singleImageLoaded();\n });\n image.src = $(this).attr('src');\n }\n });\n\n function singleImageLoaded() {\n unloaded--;\n if (unloaded === 0) {\n callback();\n }\n }\n}\n\nexport { onImagesLoaded };\n","import $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * Equalizer module.\n * @module foundation.equalizer\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.imageLoader if equalizer contains images\n */\n\nclass Equalizer extends Plugin {\n /**\n * Creates a new instance of Equalizer.\n * @class\n * @name Equalizer\n * @fires Equalizer#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options){\n this.$element = element;\n this.options = $.extend({}, Equalizer.defaults, this.$element.data(), options);\n this.className = 'Equalizer'; // ie9 back compat\n\n this._init();\n }\n\n /**\n * Initializes the Equalizer plugin and calls functions to get equalizer functioning on load.\n * @private\n */\n _init() {\n var eqId = this.$element.attr('data-equalizer') || '';\n var $watched = this.$element.find(`[data-equalizer-watch=\"${eqId}\"]`);\n\n MediaQuery._init();\n\n this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]');\n this.$element.attr('data-resize', (eqId || GetYoDigits(6, 'eq')));\n this.$element.attr('data-mutate', (eqId || GetYoDigits(6, 'eq')));\n\n this.hasNested = this.$element.find('[data-equalizer]').length > 0;\n this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0;\n this.isOn = false;\n this._bindHandler = {\n onResizeMeBound: this._onResizeMe.bind(this),\n onPostEqualizedBound: this._onPostEqualized.bind(this)\n };\n\n var imgs = this.$element.find('img');\n var tooSmall;\n if(this.options.equalizeOn){\n tooSmall = this._checkMQ();\n $(window).on('changed.zf.mediaquery', this._checkMQ.bind(this));\n }else{\n this._events();\n }\n if((typeof tooSmall !== 'undefined' && tooSmall === false) || typeof tooSmall === 'undefined'){\n if(imgs.length){\n onImagesLoaded(imgs, this._reflow.bind(this));\n }else{\n this._reflow();\n }\n }\n }\n\n /**\n * Removes event listeners if the breakpoint is too small.\n * @private\n */\n _pauseEvents() {\n this.isOn = false;\n this.$element.off({\n '.zf.equalizer': this._bindHandler.onPostEqualizedBound,\n 'resizeme.zf.trigger': this._bindHandler.onResizeMeBound,\n\t 'mutateme.zf.trigger': this._bindHandler.onResizeMeBound\n });\n }\n\n /**\n * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound\n * @private\n */\n _onResizeMe() {\n this._reflow();\n }\n\n /**\n * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound\n * @private\n */\n _onPostEqualized(e) {\n if(e.target !== this.$element[0]){ this._reflow(); }\n }\n\n /**\n * Initializes events for Equalizer.\n * @private\n */\n _events() {\n this._pauseEvents();\n if(this.hasNested){\n this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound);\n }else{\n this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound);\n\t this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound);\n }\n this.isOn = true;\n }\n\n /**\n * Checks the current breakpoint to the minimum required size.\n * @private\n */\n _checkMQ() {\n var tooSmall = !MediaQuery.is(this.options.equalizeOn);\n if(tooSmall){\n if(this.isOn){\n this._pauseEvents();\n this.$watched.css('height', 'auto');\n }\n }else{\n if(!this.isOn){\n this._events();\n }\n }\n return tooSmall;\n }\n\n /**\n * A noop version for the plugin\n * @private\n */\n _killswitch() {\n return;\n }\n\n /**\n * Calls necessary functions to update Equalizer upon DOM change\n * @private\n */\n _reflow() {\n if(!this.options.equalizeOnStack){\n if(this._isStacked()){\n this.$watched.css('height', 'auto');\n return false;\n }\n }\n if (this.options.equalizeByRow) {\n this.getHeightsByRow(this.applyHeightByRow.bind(this));\n }else{\n this.getHeights(this.applyHeight.bind(this));\n }\n }\n\n /**\n * Manually determines if the first 2 elements are *NOT* stacked.\n * @private\n */\n _isStacked() {\n if (!this.$watched[0] || !this.$watched[1]) {\n return true;\n }\n return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top;\n }\n\n /**\n * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n * @param {Function} cb - A non-optional callback to return the heights array to.\n * @returns {Array} heights - An array of heights of children within Equalizer container\n */\n getHeights(cb) {\n var heights = [];\n for(var i = 0, len = this.$watched.length; i < len; i++){\n this.$watched[i].style.height = 'auto';\n heights.push(this.$watched[i].offsetHeight);\n }\n cb(heights);\n }\n\n /**\n * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n * @param {Function} cb - A non-optional callback to return the heights array to.\n * @returns {Array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n */\n getHeightsByRow(cb) {\n var lastElTopOffset = (this.$watched.length ? this.$watched.first().offset().top : 0),\n groups = [],\n group = 0;\n //group by Row\n groups[group] = [];\n for(var i = 0, len = this.$watched.length; i < len; i++){\n this.$watched[i].style.height = 'auto';\n //maybe could use this.$watched[i].offsetTop\n var elOffsetTop = $(this.$watched[i]).offset().top;\n if (elOffsetTop !== lastElTopOffset) {\n group++;\n groups[group] = [];\n lastElTopOffset=elOffsetTop;\n }\n groups[group].push([this.$watched[i],this.$watched[i].offsetHeight]);\n }\n\n for (var j = 0, ln = groups.length; j < ln; j++) {\n var heights = $(groups[j]).map(function(){ return this[1]; }).get();\n var max = Math.max.apply(null, heights);\n groups[j].push(max);\n }\n cb(groups);\n }\n\n /**\n * Changes the CSS height property of each child in an Equalizer parent to match the tallest\n * @param {array} heights - An array of heights of children within Equalizer container\n * @fires Equalizer#preequalized\n * @fires Equalizer#postequalized\n */\n applyHeight(heights) {\n var max = Math.max.apply(null, heights);\n /**\n * Fires before the heights are applied\n * @event Equalizer#preequalized\n */\n this.$element.trigger('preequalized.zf.equalizer');\n\n this.$watched.css('height', max);\n\n /**\n * Fires when the heights have been applied\n * @event Equalizer#postequalized\n */\n this.$element.trigger('postequalized.zf.equalizer');\n }\n\n /**\n * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row\n * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n * @fires Equalizer#preequalized\n * @fires Equalizer#preequalizedrow\n * @fires Equalizer#postequalizedrow\n * @fires Equalizer#postequalized\n */\n applyHeightByRow(groups) {\n /**\n * Fires before the heights are applied\n */\n this.$element.trigger('preequalized.zf.equalizer');\n for (var i = 0, len = groups.length; i < len ; i++) {\n var groupsILength = groups[i].length,\n max = groups[i][groupsILength - 1];\n if (groupsILength<=2) {\n $(groups[i][0][0]).css({'height':'auto'});\n continue;\n }\n /**\n * Fires before the heights per row are applied\n * @event Equalizer#preequalizedrow\n */\n this.$element.trigger('preequalizedrow.zf.equalizer');\n for (var j = 0, lenJ = (groupsILength-1); j < lenJ ; j++) {\n $(groups[i][j][0]).css({'height':max});\n }\n /**\n * Fires when the heights per row have been applied\n * @event Equalizer#postequalizedrow\n */\n this.$element.trigger('postequalizedrow.zf.equalizer');\n }\n /**\n * Fires when the heights have been applied\n */\n this.$element.trigger('postequalized.zf.equalizer');\n }\n\n /**\n * Destroys an instance of Equalizer.\n * @function\n */\n _destroy() {\n this._pauseEvents();\n this.$watched.css('height', 'auto');\n }\n}\n\n/**\n * Default settings for plugin\n */\nEqualizer.defaults = {\n /**\n * Enable height equalization when stacked on smaller screens.\n * @option\n * @type {boolean}\n * @default false\n */\n equalizeOnStack: false,\n /**\n * Enable height equalization row by row.\n * @option\n * @type {boolean}\n * @default false\n */\n equalizeByRow: false,\n /**\n * String representing the minimum breakpoint size the plugin should equalize heights on.\n * @option\n * @type {string}\n * @default ''\n */\n equalizeOn: ''\n};\n\nexport {Equalizer};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { GetYoDigits, transitionend } from './foundation.core.utils';\nimport { Box } from './foundation.util.box';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * Drilldown module.\n * @module foundation.drilldown\n * @requires foundation.util.keyboard\n * @requires foundation.util.nest\n * @requires foundation.util.box\n */\n\nclass Drilldown extends Plugin {\n /**\n * Creates a new instance of a drilldown menu.\n * @class\n * @name Drilldown\n * @param {jQuery} element - jQuery object to make into an accordion menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Drilldown.defaults, this.$element.data(), options);\n this.className = 'Drilldown'; // ie9 back compat\n\n this._init();\n\n Keyboard.register('Drilldown', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'previous',\n 'ESCAPE': 'close',\n });\n }\n\n /**\n * Initializes the drilldown by creating jQuery collections of elements\n * @private\n */\n _init() {\n Nest.Feather(this.$element, 'drilldown');\n\n if(this.options.autoApplyClass) {\n this.$element.addClass('drilldown');\n }\n\n this.$element.attr({\n 'aria-multiselectable': false\n });\n this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a');\n this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]').attr('role', 'group');\n this.$menuItems = this.$element.find('li').not('.js-drilldown-back').find('a');\n\n // Set the main menu as current by default (unless a submenu is selected)\n // Used to set the wrapper height when the drilldown is closed/reopened from any (sub)menu\n this.$currentMenu = this.$element;\n\n this.$element.attr('data-mutate', (this.$element.attr('data-drilldown') || GetYoDigits(6, 'drilldown')));\n\n this._prepareMenu();\n this._registerEvents();\n\n this._keyboardEvents();\n }\n\n /**\n * prepares drilldown menu by setting attributes to links and elements\n * sets a min height to prevent content jumping\n * wraps the element if not already wrapped\n * @private\n * @function\n */\n _prepareMenu() {\n var _this = this;\n // if(!this.options.holdOpen){\n // this._menuLinkEvents();\n // }\n this.$submenuAnchors.each(function(){\n var $link = $(this);\n var $sub = $link.parent();\n if(_this.options.parentLink){\n $link.clone().prependTo($sub.children('[data-submenu]')).wrap('
  • ');\n }\n $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0);\n $link.children('[data-submenu]')\n .attr({\n 'aria-hidden': true,\n 'tabindex': 0,\n 'role': 'group'\n });\n _this._events($link);\n });\n this.$submenus.each(function(){\n var $menu = $(this),\n $back = $menu.find('.js-drilldown-back');\n if(!$back.length) {\n switch (_this.options.backButtonPosition) {\n case \"bottom\":\n $menu.append(_this.options.backButton);\n break;\n case \"top\":\n $menu.prepend(_this.options.backButton);\n break;\n default:\n console.error(\"Unsupported backButtonPosition value '\" + _this.options.backButtonPosition + \"'\");\n }\n }\n _this._back($menu);\n });\n\n this.$submenus.addClass('invisible');\n if(!this.options.autoHeight) {\n this.$submenus.addClass('drilldown-submenu-cover-previous');\n }\n\n // create a wrapper on element if it doesn't exist.\n if(!this.$element.parent().hasClass('is-drilldown')){\n this.$wrapper = $(this.options.wrapper).addClass('is-drilldown');\n if(this.options.animateHeight) this.$wrapper.addClass('animate-height');\n this.$element.wrap(this.$wrapper);\n }\n // set wrapper\n this.$wrapper = this.$element.parent();\n this.$wrapper.css(this._getMaxDims());\n }\n\n _resize() {\n this.$wrapper.css({'max-width': 'none', 'min-height': 'none'});\n // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths\n this.$wrapper.css(this._getMaxDims());\n }\n\n /**\n * Adds event handlers to elements in the menu.\n * @function\n * @private\n * @param {jQuery} $elem - the current menu item to add handlers to.\n */\n _events($elem) {\n var _this = this;\n\n $elem.off('click.zf.drilldown')\n .on('click.zf.drilldown', function(e) {\n if($(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')){\n e.preventDefault();\n }\n\n // if(e.target !== e.currentTarget.firstElementChild){\n // return false;\n // }\n _this._show($elem.parent('li'));\n\n if(_this.options.closeOnClick){\n var $body = $('body');\n $body.off('.zf.drilldown').on('click.zf.drilldown', function(ev) {\n if (ev.target === _this.$element[0] || $.contains(_this.$element[0], ev.target)) { return; }\n ev.preventDefault();\n _this._hideAll();\n $body.off('.zf.drilldown');\n });\n }\n });\n }\n\n /**\n * Adds event handlers to the menu element.\n * @function\n * @private\n */\n _registerEvents() {\n if(this.options.scrollTop){\n this._bindHandler = this._scrollTop.bind(this);\n this.$element.on('open.zf.drilldown hide.zf.drilldown close.zf.drilldown closed.zf.drilldown',this._bindHandler);\n }\n this.$element.on('mutateme.zf.trigger', this._resize.bind(this));\n }\n\n /**\n * Scroll to Top of Element or data-scroll-top-element\n * @function\n * @fires Drilldown#scrollme\n */\n _scrollTop() {\n var _this = this;\n var $scrollTopElement = _this.options.scrollTopElement !== ''?$(_this.options.scrollTopElement):_this.$element,\n scrollPos = parseInt($scrollTopElement.offset().top+_this.options.scrollTopOffset, 10);\n $('html, body').stop(true).animate({ scrollTop: scrollPos }, _this.options.animationDuration, _this.options.animationEasing,function(){\n /**\n * Fires after the menu has scrolled\n * @event Drilldown#scrollme\n */\n if(this===$('html')[0])_this.$element.trigger('scrollme.zf.drilldown');\n });\n }\n\n /**\n * Adds keydown event listener to `li`'s in the menu.\n * @private\n */\n _keyboardEvents() {\n var _this = this;\n\n this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function(e){\n var $element = $(this),\n $elements = $element.parent('li').parent('ul').children('li').children('a'),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(Math.max(0, i-1));\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1));\n return;\n }\n });\n\n Keyboard.handleKey(e, 'Drilldown', {\n next: function() {\n if ($element.is(_this.$submenuAnchors)) {\n _this._show($element.parent('li'));\n $element.parent('li').one(transitionend($element), function(){\n $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus();\n });\n return true;\n }\n },\n previous: function() {\n _this._hide($element.parent('li').parent('ul'));\n $element.parent('li').parent('ul').one(transitionend($element), function(){\n setTimeout(function() {\n $element.parent('li').parent('ul').parent('li').children('a').first().focus();\n }, 1);\n });\n return true;\n },\n up: function() {\n $prevElement.focus();\n // Don't tap focus on first element in root ul\n return !$element.is(_this.$element.find('> li:first-child > a'));\n },\n down: function() {\n $nextElement.focus();\n // Don't tap focus on last element in root ul\n return !$element.is(_this.$element.find('> li:last-child > a'));\n },\n close: function() {\n // Don't close on element in root ul\n if (!$element.is(_this.$element.find('> li > a'))) {\n _this._hide($element.parent().parent());\n $element.parent().parent().siblings('a').focus();\n }\n },\n open: function() {\n if (_this.options.parentLink && $element.attr('href')) { // Link with href\n return false;\n } else if (!$element.is(_this.$menuItems)) { // not menu item means back button\n _this._hide($element.parent('li').parent('ul'));\n $element.parent('li').parent('ul').one(transitionend($element), function(){\n setTimeout(function() {\n $element.parent('li').parent('ul').parent('li').children('a').first().focus();\n }, 1);\n });\n return true;\n } else if ($element.is(_this.$submenuAnchors)) { // Sub menu item\n _this._show($element.parent('li'));\n $element.parent('li').one(transitionend($element), function(){\n $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus();\n });\n return true;\n }\n },\n handled: function(preventDefault) {\n if (preventDefault) {\n e.preventDefault();\n }\n }\n });\n }); // end keyboardAccess\n }\n\n /**\n * Closes all open elements, and returns to root menu.\n * @function\n * @fires Drilldown#close\n * @fires Drilldown#closed\n */\n _hideAll() {\n var $elem = this.$element.find('.is-drilldown-submenu.is-active')\n $elem.addClass('is-closing');\n $elem.parent().closest('ul').removeClass('invisible');\n\n if (this.options.autoHeight) {\n const calcHeight = $elem.parent().closest('ul').data('calcHeight');\n this.$wrapper.css({ height: calcHeight });\n }\n\n /**\n * Fires when the menu is closing.\n * @event Drilldown#close\n */\n this.$element.trigger('close.zf.drilldown');\n\n $elem.one(transitionend($elem), () => {\n $elem.removeClass('is-active is-closing');\n\n /**\n * Fires when the menu is fully closed.\n * @event Drilldown#closed\n */\n this.$element.trigger('closed.zf.drilldown');\n });\n }\n\n /**\n * Adds event listener for each `back` button, and closes open menus.\n * @function\n * @fires Drilldown#back\n * @param {jQuery} $elem - the current sub-menu to add `back` event.\n */\n _back($elem) {\n var _this = this;\n $elem.off('click.zf.drilldown');\n $elem.children('.js-drilldown-back')\n .on('click.zf.drilldown', function() {\n _this._hide($elem);\n\n // If there is a parent submenu, call show\n let parentSubMenu = $elem.parent('li').parent('ul').parent('li');\n if (parentSubMenu.length) {\n _this._show(parentSubMenu);\n }\n else {\n _this.$currentMenu = _this.$element;\n }\n });\n }\n\n /**\n * Adds event listener to menu items w/o submenus to close open menus on click.\n * @function\n * @private\n */\n _menuLinkEvents() {\n var _this = this;\n this.$menuItems.not('.is-drilldown-submenu-parent')\n .off('click.zf.drilldown')\n .on('click.zf.drilldown', function() {\n setTimeout(function() {\n _this._hideAll();\n }, 0);\n });\n }\n\n /**\n * Sets the CSS classes for submenu to show it.\n * @function\n * @private\n * @param {jQuery} $elem - the target submenu (`ul` tag)\n * @param {boolean} trigger - trigger drilldown event\n */\n _setShowSubMenuClasses($elem, trigger) {\n $elem.addClass('is-active').removeClass('invisible').attr('aria-hidden', false);\n $elem.parent('li').attr('aria-expanded', true);\n if (trigger === true) {\n this.$element.trigger('open.zf.drilldown', [$elem]);\n }\n }\n\n /**\n * Sets the CSS classes for submenu to hide it.\n * @function\n * @private\n * @param {jQuery} $elem - the target submenu (`ul` tag)\n * @param {boolean} trigger - trigger drilldown event\n */\n _setHideSubMenuClasses($elem, trigger) {\n $elem.removeClass('is-active').addClass('invisible').attr('aria-hidden', true);\n $elem.parent('li').attr('aria-expanded', false);\n if (trigger === true) {\n $elem.trigger('hide.zf.drilldown', [$elem]);\n }\n }\n\n /**\n * Opens a specific drilldown (sub)menu no matter which (sub)menu in it is currently visible.\n * Compared to _show() this lets you jump into any submenu without clicking through every submenu on the way to it.\n * @function\n * @fires Drilldown#open\n * @param {jQuery} $elem - the target (sub)menu (`ul` tag)\n * @param {boolean} autoFocus - if true the first link in the target (sub)menu gets auto focused\n */\n _showMenu($elem, autoFocus) {\n\n var _this = this;\n\n // Reset drilldown\n var $expandedSubmenus = this.$element.find('li[aria-expanded=\"true\"] > ul[data-submenu]');\n $expandedSubmenus.each(function() {\n _this._setHideSubMenuClasses($(this));\n });\n\n // Save the menu as the currently displayed one.\n this.$currentMenu = $elem;\n\n // If target menu is root, focus first link & exit\n if ($elem.is('[data-drilldown]')) {\n if (autoFocus === true) $elem.find('li > a').first().focus();\n if (this.options.autoHeight) this.$wrapper.css('height', $elem.data('calcHeight'));\n return;\n }\n\n // Find all submenus on way to root incl. the element itself\n var $submenus = $elem.children().first().parentsUntil('[data-drilldown]', '[data-submenu]');\n\n // Open target menu and all submenus on its way to root\n $submenus.each(function(index) {\n\n // Update height of first child (target menu) if autoHeight option true\n if (index === 0 && _this.options.autoHeight) {\n _this.$wrapper.css('height', $(this).data('calcHeight'));\n }\n\n var isLastChild = index === $submenus.length - 1;\n\n // Add transitionsend listener to last child (root due to reverse order) to open target menu's first link\n // Last child makes sure the event gets always triggered even if going through several menus\n if (isLastChild === true) {\n $(this).one(transitionend($(this)), () => {\n if (autoFocus === true) {\n $elem.find('li > a').first().focus();\n }\n });\n }\n\n _this._setShowSubMenuClasses($(this), isLastChild);\n });\n }\n\n /**\n * Opens a submenu.\n * @function\n * @fires Drilldown#open\n * @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag.\n */\n _show($elem) {\n const $submenu = $elem.children('[data-submenu]');\n\n $elem.attr('aria-expanded', true);\n\n this.$currentMenu = $submenu;\n\n //hide drilldown parent menu when submenu is open\n // this removes it from the dom so that the tab key will take the user to the next visible element\n $elem.parent().closest('ul').addClass('invisible');\n\n // add visible class to submenu to override invisible class above\n $submenu.addClass('is-active visible').removeClass('invisible').attr('aria-hidden', false);\n\n if (this.options.autoHeight) {\n this.$wrapper.css({ height: $submenu.data('calcHeight') });\n }\n\n /**\n * Fires when the submenu has opened.\n * @event Drilldown#open\n */\n this.$element.trigger('open.zf.drilldown', [$elem]);\n }\n\n /**\n * Hides a submenu\n * @function\n * @fires Drilldown#hide\n * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag.\n */\n _hide($elem) {\n if(this.options.autoHeight) this.$wrapper.css({height:$elem.parent().closest('ul').data('calcHeight')});\n $elem.parent().closest('ul').removeClass('invisible');\n $elem.parent('li').attr('aria-expanded', false);\n $elem.attr('aria-hidden', true);\n $elem.addClass('is-closing')\n .one(transitionend($elem), function(){\n $elem.removeClass('is-active is-closing visible');\n $elem.blur().addClass('invisible');\n });\n /**\n * Fires when the submenu has closed.\n * @event Drilldown#hide\n */\n $elem.trigger('hide.zf.drilldown', [$elem]);\n }\n\n /**\n * Iterates through the nested menus to calculate the min-height, and max-width for the menu.\n * Prevents content jumping.\n * @function\n * @private\n */\n _getMaxDims() {\n var maxHeight = 0, result = {}, _this = this;\n\n // Recalculate menu heights and total max height\n this.$submenus.add(this.$element).each(function(){\n var height = Box.GetDimensions(this).height;\n\n maxHeight = height > maxHeight ? height : maxHeight;\n\n if(_this.options.autoHeight) {\n $(this).data('calcHeight',height);\n }\n });\n\n if (this.options.autoHeight)\n result.height = this.$currentMenu.data('calcHeight');\n else\n result['min-height'] = `${maxHeight}px`;\n\n result['max-width'] = `${this.$element[0].getBoundingClientRect().width}px`;\n\n return result;\n }\n\n /**\n * Destroys the Drilldown Menu\n * @function\n */\n _destroy() {\n $('body').off('.zf.drilldown');\n if(this.options.scrollTop) this.$element.off('.zf.drilldown',this._bindHandler);\n this._hideAll();\n\t this.$element.off('mutateme.zf.trigger');\n Nest.Burn(this.$element, 'drilldown');\n this.$element.unwrap()\n .find('.js-drilldown-back, .is-submenu-parent-item').remove()\n .end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').off('transitionend otransitionend webkitTransitionEnd')\n .end().find('[data-submenu]').removeAttr('aria-hidden tabindex role');\n this.$submenuAnchors.each(function() {\n $(this).off('.zf.drilldown');\n });\n\n this.$element.find('[data-is-parent-link]').detach();\n this.$submenus.removeClass('drilldown-submenu-cover-previous invisible');\n\n this.$element.find('a').each(function(){\n var $link = $(this);\n $link.removeAttr('tabindex');\n if($link.data('savedHref')){\n $link.attr('href', $link.data('savedHref')).removeData('savedHref');\n }else{ return; }\n });\n };\n}\n\nDrilldown.defaults = {\n /**\n * Drilldowns depend on styles in order to function properly; in the default build of Foundation these are\n * on the `drilldown` class. This option auto-applies this class to the drilldown upon initialization.\n * @option\n * @type {boolean}\n * @default true\n */\n autoApplyClass: true,\n /**\n * Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\\`) if copy and pasting.\n * @option\n * @type {string}\n * @default '
  • Back
  • '\n */\n backButton: '
  • Back
  • ',\n /**\n * Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`.\n * @option\n * @type {string}\n * @default top\n */\n backButtonPosition: 'top',\n /**\n * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\\`) if copy and pasting.\n * @option\n * @type {string}\n * @default '
    '\n */\n wrapper: '
    ',\n /**\n * Adds the parent link to the submenu.\n * @option\n * @type {boolean}\n * @default false\n */\n parentLink: false,\n /**\n * Allow the menu to return to root list on body click.\n * @option\n * @type {boolean}\n * @default false\n */\n closeOnClick: false,\n /**\n * Allow the menu to auto adjust height.\n * @option\n * @type {boolean}\n * @default false\n */\n autoHeight: false,\n /**\n * Animate the auto adjust height.\n * @option\n * @type {boolean}\n * @default false\n */\n animateHeight: false,\n /**\n * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button\n * @option\n * @type {boolean}\n * @default false\n */\n scrollTop: false,\n /**\n * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken\n * @option\n * @type {string}\n * @default ''\n */\n scrollTopElement: '',\n /**\n * ScrollTop offset\n * @option\n * @type {number}\n * @default 0\n */\n scrollTopOffset: 0,\n /**\n * Scroll animation duration\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Scroll animation easing. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @see {@link https://api.jquery.com/animate|JQuery animate}\n * @default 'swing'\n */\n animationEasing: 'swing'\n // holdOpen: false\n};\n\nexport {Drilldown};\n","import $ from 'jquery';\n\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\nimport { DropdownMenu } from './foundation.dropdownMenu';\nimport { Drilldown } from './foundation.drilldown';\nimport { AccordionMenu } from './foundation.accordionMenu';\n\nlet MenuPlugins = {\n dropdown: {\n cssClass: 'dropdown',\n plugin: DropdownMenu\n },\n drilldown: {\n cssClass: 'drilldown',\n plugin: Drilldown\n },\n accordion: {\n cssClass: 'accordion-menu',\n plugin: AccordionMenu\n }\n};\n\n // import \"foundation.util.triggers.js\";\n\n\n/**\n * ResponsiveMenu module.\n * @module foundation.responsiveMenu\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n */\n\nclass ResponsiveMenu extends Plugin {\n /**\n * Creates a new instance of a responsive menu.\n * @class\n * @name ResponsiveMenu\n * @fires ResponsiveMenu#init\n * @param {jQuery} element - jQuery object to make into a dropdown menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element) {\n this.$element = $(element);\n this.rules = this.$element.data('responsive-menu');\n this.currentMq = null;\n this.currentPlugin = null;\n this.className = 'ResponsiveMenu'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element.\n * @function\n * @private\n */\n _init() {\n\n MediaQuery._init();\n // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n if (typeof this.rules === 'string') {\n let rulesTree = {};\n\n // Parse rules from \"classes\" pulled from data attribute\n let rules = this.rules.split(' ');\n\n // Iterate through every rule found\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i].split('-');\n let ruleSize = rule.length > 1 ? rule[0] : 'small';\n let rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n if (MenuPlugins[rulePlugin] !== null) {\n rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n }\n }\n\n this.rules = rulesTree;\n }\n\n if (!$.isEmptyObject(this.rules)) {\n this._checkMediaQueries();\n }\n // Add data-mutate since children may need it.\n this.$element.attr('data-mutate', (this.$element.attr('data-mutate') || GetYoDigits(6, 'responsive-menu')));\n }\n\n /**\n * Initializes events for the Menu.\n * @function\n * @private\n */\n _events() {\n var _this = this;\n\n $(window).on('changed.zf.mediaquery', function() {\n _this._checkMediaQueries();\n });\n // $(window).on('resize.zf.ResponsiveMenu', function() {\n // _this._checkMediaQueries();\n // });\n }\n\n /**\n * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n * @function\n * @private\n */\n _checkMediaQueries() {\n var matchedMq, _this = this;\n // Iterate through each rule and find the last matching rule\n $.each(this.rules, function(key) {\n if (MediaQuery.atLeast(key)) {\n matchedMq = key;\n }\n });\n\n // No match? No dice\n if (!matchedMq) return;\n\n // Plugin already initialized? We good\n if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;\n\n // Remove existing plugin-specific CSS classes\n $.each(MenuPlugins, function(key, value) {\n _this.$element.removeClass(value.cssClass);\n });\n\n // Add the CSS class for the new plugin\n this.$element.addClass(this.rules[matchedMq].cssClass);\n\n // Create an instance of the new plugin\n if (this.currentPlugin) this.currentPlugin.destroy();\n this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});\n }\n\n /**\n * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n * @function\n */\n _destroy() {\n this.currentPlugin.destroy();\n $(window).off('.zf.ResponsiveMenu');\n }\n}\n\nResponsiveMenu.defaults = {};\n\nexport {ResponsiveMenu};\n","import $ from 'jquery';\n\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * ResponsiveToggle module.\n * @module foundation.responsiveToggle\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion\n */\n\nclass ResponsiveToggle extends Plugin {\n /**\n * Creates a new instance of Tab Bar.\n * @class\n * @name ResponsiveToggle\n * @fires ResponsiveToggle#init\n * @param {jQuery} element - jQuery object to attach tab bar functionality to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.options = $.extend({}, ResponsiveToggle.defaults, this.$element.data(), options);\n this.className = 'ResponsiveToggle'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the tab bar by finding the target element, toggling element, and running update().\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n var targetID = this.$element.data('responsive-toggle');\n if (!targetID) {\n console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.');\n }\n\n this.$targetMenu = $(`#${targetID}`);\n this.$toggler = this.$element.find('[data-toggle]').filter(function() {\n var target = $(this).data('toggle');\n return (target === targetID || target === \"\");\n });\n this.options = $.extend({}, this.options, this.$targetMenu.data());\n\n // If they were set, parse the animation classes\n if(this.options.animate) {\n let input = this.options.animate.split(' ');\n\n this.animationIn = input[0];\n this.animationOut = input[1] || null;\n }\n\n this._update();\n }\n\n /**\n * Adds necessary event handlers for the tab bar to work.\n * @function\n * @private\n */\n _events() {\n this._updateMqHandler = this._update.bind(this);\n\n $(window).on('changed.zf.mediaquery', this._updateMqHandler);\n\n this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this));\n }\n\n /**\n * Checks the current media query to determine if the tab bar should be visible or hidden.\n * @function\n * @private\n */\n _update() {\n // Mobile\n if (!MediaQuery.atLeast(this.options.hideFor)) {\n this.$element.show();\n this.$targetMenu.hide();\n }\n\n // Desktop\n else {\n this.$element.hide();\n this.$targetMenu.show();\n }\n }\n\n /**\n * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it.\n * @function\n * @fires ResponsiveToggle#toggled\n */\n toggleMenu() {\n if (!MediaQuery.atLeast(this.options.hideFor)) {\n /**\n * Fires when the element attached to the tab bar toggles.\n * @event ResponsiveToggle#toggled\n */\n if(this.options.animate) {\n if (this.$targetMenu.is(':hidden')) {\n Motion.animateIn(this.$targetMenu, this.animationIn, () => {\n this.$element.trigger('toggled.zf.responsiveToggle');\n this.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger');\n });\n }\n else {\n Motion.animateOut(this.$targetMenu, this.animationOut, () => {\n this.$element.trigger('toggled.zf.responsiveToggle');\n });\n }\n }\n else {\n this.$targetMenu.toggle(0);\n this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger');\n this.$element.trigger('toggled.zf.responsiveToggle');\n }\n }\n };\n\n _destroy() {\n this.$element.off('.zf.responsiveToggle');\n this.$toggler.off('.zf.responsiveToggle');\n\n $(window).off('changed.zf.mediaquery', this._updateMqHandler);\n }\n}\n\nResponsiveToggle.defaults = {\n /**\n * The breakpoint after which the menu is always shown, and the tab bar is hidden.\n * @option\n * @type {string}\n * @default 'medium'\n */\n hideFor: 'medium',\n\n /**\n * To decide if the toggle should be animated or not.\n * @option\n * @type {boolean}\n * @default false\n */\n animate: false\n};\n\nexport { ResponsiveToggle };\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Triggers } from './foundation.util.triggers';\nimport { Touch } from './foundation.util.touch'\n\n/**\n * Reveal module.\n * @module foundation.reveal\n * @requires foundation.util.keyboard\n * @requires foundation.util.touch\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion if using animations\n */\n\nclass Reveal extends Plugin {\n /**\n * Creates a new instance of Reveal.\n * @class\n * @name Reveal\n * @param {jQuery} element - jQuery object to use for the modal.\n * @param {Object} options - optional parameters.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Reveal.defaults, this.$element.data(), options);\n this.className = 'Reveal'; // ie9 back compat\n this._init();\n\n // Touch and Triggers init are idempotent, just need to make sure they are initialized\n Touch.init($);\n Triggers.init($);\n\n Keyboard.register('Reveal', {\n 'ESCAPE': 'close',\n });\n }\n\n /**\n * Initializes the modal by adding the overlay and close buttons, (if selected).\n * @private\n */\n _init() {\n MediaQuery._init();\n this.id = this.$element.attr('id');\n this.isActive = false;\n this.cached = {mq: MediaQuery.current};\n\n this.$anchor = $(`[data-open=\"${this.id}\"]`).length ? $(`[data-open=\"${this.id}\"]`) : $(`[data-toggle=\"${this.id}\"]`);\n this.$anchor.attr({\n 'aria-controls': this.id,\n 'aria-haspopup': 'dialog',\n 'tabindex': 0\n });\n\n if (this.options.fullScreen || this.$element.hasClass('full')) {\n this.options.fullScreen = true;\n this.options.overlay = false;\n }\n if (this.options.overlay && !this.$overlay) {\n this.$overlay = this._makeOverlay(this.id);\n }\n\n this.$element.attr({\n 'role': 'dialog',\n 'aria-hidden': true,\n 'data-yeti-box': this.id,\n 'data-resize': this.id\n });\n\n if(this.$overlay) {\n this.$element.detach().appendTo(this.$overlay);\n } else {\n this.$element.detach().appendTo($(this.options.appendTo));\n this.$element.addClass('without-overlay');\n }\n this._events();\n if (this.options.deepLink && window.location.hash === ( `#${this.id}`)) {\n this.onLoadListener = onLoad($(window), () => this.open());\n }\n }\n\n /**\n * Creates an overlay div to display behind the modal.\n * @private\n */\n _makeOverlay() {\n var additionalOverlayClasses = '';\n\n if (this.options.additionalOverlayClasses) {\n additionalOverlayClasses = ' ' + this.options.additionalOverlayClasses;\n }\n\n return $('
    ')\n .addClass('reveal-overlay' + additionalOverlayClasses)\n .appendTo(this.options.appendTo);\n }\n\n /**\n * Updates position of modal\n * TODO: Figure out if we actually need to cache these values or if it doesn't matter\n * @private\n */\n _updatePosition() {\n var width = this.$element.outerWidth();\n var outerWidth = $(window).width();\n var height = this.$element.outerHeight();\n var outerHeight = $(window).height();\n var left, top = null;\n if (this.options.hOffset === 'auto') {\n left = parseInt((outerWidth - width) / 2, 10);\n } else {\n left = parseInt(this.options.hOffset, 10);\n }\n if (this.options.vOffset === 'auto') {\n if (height > outerHeight) {\n top = parseInt(Math.min(100, outerHeight / 10), 10);\n } else {\n top = parseInt((outerHeight - height) / 4, 10);\n }\n } else if (this.options.vOffset !== null) {\n top = parseInt(this.options.vOffset, 10);\n }\n\n if (top !== null) {\n this.$element.css({top: top + 'px'});\n }\n\n // only worry about left if we don't have an overlay or we have a horizontal offset,\n // otherwise we're perfectly in the middle\n if (!this.$overlay || (this.options.hOffset !== 'auto')) {\n this.$element.css({left: left + 'px'});\n this.$element.css({margin: '0px'});\n }\n\n }\n\n /**\n * Adds event handlers for the modal.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': (event, $element) => {\n if ((event.target === _this.$element[0]) ||\n ($(event.target).parents('[data-closable]')[0] === $element)) { // only close reveal when it's explicitly called\n return this.close.apply(this);\n }\n },\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': function() {\n _this._updatePosition();\n }\n });\n\n if (this.options.closeOnClick && this.options.overlay) {\n this.$overlay.off('.zf.reveal').on('click.zf.dropdown tap.zf.dropdown', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) {\n return;\n }\n _this.close();\n });\n }\n if (this.options.deepLink) {\n $(window).on(`hashchange.zf.reveal:${this.id}`, this._handleState.bind(this));\n }\n }\n\n /**\n * Handles modal methods on back/forward button clicks or any other event that triggers hashchange.\n * @private\n */\n _handleState() {\n if(window.location.hash === ( '#' + this.id) && !this.isActive){ this.open(); }\n else{ this.close(); }\n }\n\n /**\n * Disables the scroll when Reveal is shown to prevent the background from shifting\n * @param {number} scrollTop - Scroll to visually apply, window current scroll by default\n */\n _disableScroll(scrollTop) {\n scrollTop = scrollTop || $(window).scrollTop();\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", -scrollTop);\n }\n }\n\n /**\n * Reenables the scroll when Reveal closes\n * @param {number} scrollTop - Scroll to restore, html \"top\" property by default (as set by `_disableScroll`)\n */\n _enableScroll(scrollTop) {\n scrollTop = scrollTop || parseInt($(\"html\").css(\"top\"), 10);\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", \"\");\n $(window).scrollTop(-scrollTop);\n }\n }\n\n\n /**\n * Opens the modal controlled by `this.$anchor`, and closes all others by default.\n * @function\n * @fires Reveal#closeme\n * @fires Reveal#open\n */\n open() {\n // either update or replace browser history\n const hash = `#${this.id}`;\n if (this.options.deepLink && window.location.hash !== hash) {\n\n if (window.history.pushState) {\n if (this.options.updateHistory) {\n window.history.pushState({}, '', hash);\n } else {\n window.history.replaceState({}, '', hash);\n }\n } else {\n window.location.hash = hash;\n }\n }\n\n // Remember anchor that opened it to set focus back later, have general anchors as fallback\n this.$activeAnchor = $(document.activeElement).is(this.$anchor) ? $(document.activeElement) : this.$anchor;\n\n this.isActive = true;\n\n // Make elements invisible, but remove display: none so we can get size and positioning\n this.$element\n .css({ 'visibility': 'hidden' })\n .show()\n .scrollTop(0);\n if (this.options.overlay) {\n this.$overlay.css({'visibility': 'hidden'}).show();\n }\n\n this._updatePosition();\n\n this.$element\n .hide()\n .css({ 'visibility': '' });\n\n if(this.$overlay) {\n this.$overlay.css({'visibility': ''}).hide();\n if(this.$element.hasClass('fast')) {\n this.$overlay.addClass('fast');\n } else if (this.$element.hasClass('slow')) {\n this.$overlay.addClass('slow');\n }\n }\n\n\n if (!this.options.multipleOpened) {\n /**\n * Fires immediately before the modal opens.\n * Closes any other modals that are currently open\n * @event Reveal#closeme\n */\n this.$element.trigger('closeme.zf.reveal', this.id);\n }\n\n if ($('.reveal:visible').length === 0) {\n this._disableScroll();\n }\n\n var _this = this;\n\n // Motion UI method of reveal\n if (this.options.animationIn) {\n function afterAnimation(){\n _this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n _this._addGlobalClasses();\n Keyboard.trapFocus(_this.$element);\n }\n if (this.options.overlay) {\n Motion.animateIn(this.$overlay, 'fade-in');\n }\n Motion.animateIn(this.$element, this.options.animationIn, () => {\n if(this.$element) { // protect against object having been removed\n this.focusableElements = Keyboard.findFocusable(this.$element);\n afterAnimation();\n }\n });\n }\n // jQuery method of reveal\n else {\n if (this.options.overlay) {\n this.$overlay.show(0);\n }\n this.$element.show(this.options.showDelay);\n }\n\n // handle accessibility\n this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n Keyboard.trapFocus(this.$element);\n\n this._addGlobalClasses();\n\n this._addGlobalListeners();\n\n /**\n * Fires when the modal has successfully opened.\n * @event Reveal#open\n */\n this.$element.trigger('open.zf.reveal');\n }\n\n /**\n * Adds classes and listeners on document required by open modals.\n *\n * The following classes are added and updated:\n * - `.is-reveal-open` - Prevents the scroll on document\n * - `.zf-has-scroll` - Displays a disabled scrollbar on document if required like if the\n * scroll was not disabled. This prevent a \"shift\" of the page content due\n * the scrollbar disappearing when the modal opens.\n *\n * @private\n */\n _addGlobalClasses() {\n const updateScrollbarClass = () => {\n $('html').toggleClass('zf-has-scroll', !!($(document).height() > $(window).height()));\n };\n\n this.$element.on('resizeme.zf.trigger.revealScrollbarListener', () => updateScrollbarClass());\n updateScrollbarClass();\n $('html').addClass('is-reveal-open');\n }\n\n /**\n * Removes classes and listeners on document that were required by open modals.\n * @private\n */\n _removeGlobalClasses() {\n this.$element.off('resizeme.zf.trigger.revealScrollbarListener');\n $('html').removeClass('is-reveal-open');\n $('html').removeClass('zf-has-scroll');\n }\n\n /**\n * Adds extra event handlers for the body and window if necessary.\n * @private\n */\n _addGlobalListeners() {\n var _this = this;\n if(!this.$element) { return; } // If we're in the middle of cleanup, don't freak out\n this.focusableElements = Keyboard.findFocusable(this.$element);\n\n if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) {\n $('body').on('click.zf.dropdown tap.zf.dropdown', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) { return; }\n _this.close();\n });\n }\n\n if (this.options.closeOnEsc) {\n $(window).on('keydown.zf.reveal', function(e) {\n Keyboard.handleKey(e, 'Reveal', {\n close: function() {\n if (_this.options.closeOnEsc) {\n _this.close();\n }\n }\n });\n });\n }\n }\n\n /**\n * Closes the modal.\n * @function\n * @fires Reveal#closed\n */\n close() {\n if (!this.isActive || !this.$element.is(':visible')) {\n return false;\n }\n var _this = this;\n\n // Motion UI method of hiding\n if (this.options.animationOut) {\n if (this.options.overlay) {\n Motion.animateOut(this.$overlay, 'fade-out');\n }\n\n Motion.animateOut(this.$element, this.options.animationOut, finishUp);\n }\n // jQuery method of hiding\n else {\n this.$element.hide(this.options.hideDelay);\n\n if (this.options.overlay) {\n this.$overlay.hide(0, finishUp);\n }\n else {\n finishUp();\n }\n }\n\n // Conditionals to remove extra event listeners added on open\n if (this.options.closeOnEsc) {\n $(window).off('keydown.zf.reveal');\n }\n\n if (!this.options.overlay && this.options.closeOnClick) {\n $('body').off('click.zf.dropdown tap.zf.dropdown');\n }\n\n this.$element.off('keydown.zf.reveal');\n\n function finishUp() {\n\n // Get the current top before the modal is closed and restore the scroll after.\n // TODO: use component properties instead of HTML properties\n // See https://github.com/foundation/foundation-sites/pull/10786\n var scrollTop = parseInt($(\"html\").css(\"top\"), 10);\n\n if ($('.reveal:visible').length === 0) {\n _this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n\n Keyboard.releaseFocus(_this.$element);\n\n _this.$element.attr('aria-hidden', true);\n\n if ($('.reveal:visible').length === 0) {\n _this._enableScroll(scrollTop);\n }\n\n /**\n * Fires when the modal is done closing.\n * @event Reveal#closed\n */\n _this.$element.trigger('closed.zf.reveal');\n }\n\n /**\n * Resets the modal content\n * This prevents a running video to keep going in the background\n */\n if (this.options.resetOnClose) {\n this.$element.html(this.$element.html());\n }\n\n this.isActive = false;\n // If deepLink and we did not switched to an other modal...\n if (_this.options.deepLink && window.location.hash === `#${this.id}`) {\n // Remove the history hash\n if (window.history.replaceState) {\n const urlWithoutHash = window.location.pathname + window.location.search;\n if (this.options.updateHistory) {\n window.history.pushState({}, '', urlWithoutHash); // remove the hash\n } else {\n window.history.replaceState('', document.title, urlWithoutHash);\n }\n } else {\n window.location.hash = '';\n }\n }\n\n this.$activeAnchor.focus();\n }\n\n /**\n * Toggles the open/closed state of a modal.\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.close();\n } else {\n this.open();\n }\n };\n\n /**\n * Destroys an instance of a modal.\n * @function\n */\n _destroy() {\n if (this.options.overlay) {\n this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin()\n this.$overlay.hide().off().remove();\n }\n this.$element.hide().off();\n this.$anchor.off('.zf');\n $(window).off(`.zf.reveal:${this.id}`)\n if (this.onLoadListener) $(window).off(this.onLoadListener);\n\n if ($('.reveal:visible').length === 0) {\n this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n };\n}\n\nReveal.defaults = {\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationIn: '',\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationOut: '',\n /**\n * Time, in ms, to delay the opening of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n showDelay: 0,\n /**\n * Time, in ms, to delay the closing of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n hideDelay: 0,\n /**\n * Allows a click on the body/overlay to close the modal.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allows the modal to close if the user presses the `ESCAPE` key.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnEsc: true,\n /**\n * If true, allows multiple modals to be displayed at once.\n * @option\n * @type {boolean}\n * @default false\n */\n multipleOpened: false,\n /**\n * Distance, in pixels, the modal should push down from the top of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n vOffset: 'auto',\n /**\n * Distance, in pixels, the modal should push in from the side of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n hOffset: 'auto',\n /**\n * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well.\n * @option\n * @type {boolean}\n * @default false\n */\n fullScreen: false,\n /**\n * Allows the modal to generate an overlay div, which will cover the view when modal opens.\n * @option\n * @type {boolean}\n * @default true\n */\n overlay: true,\n /**\n * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background.\n * @option\n * @type {boolean}\n * @default false\n */\n resetOnClose: false,\n /**\n * Link the location hash to the modal.\n * Set the location hash when the modal is opened/closed, and open/close the modal when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, update the browser history with the open modal\n * @option\n * @default false\n */\n updateHistory: false,\n /**\n * Allows the modal to append to custom div.\n * @option\n * @type {string}\n * @default \"body\"\n */\n appendTo: \"body\",\n /**\n * Allows adding additional class names to the reveal overlay.\n * @option\n * @type {string}\n * @default ''\n */\n additionalOverlayClasses: ''\n};\n\nexport {Reveal};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Move } from './foundation.util.motion';\nimport { GetYoDigits, rtl as Rtl } from './foundation.core.utils';\n\nimport { Plugin } from './foundation.core.plugin';\n\nimport { Touch } from './foundation.util.touch';\n\nimport { Triggers } from './foundation.util.triggers';\n/**\n * Slider module.\n * @module foundation.slider\n * @requires foundation.util.motion\n * @requires foundation.util.triggers\n * @requires foundation.util.keyboard\n * @requires foundation.util.touch\n */\n\nclass Slider extends Plugin {\n /**\n * Creates a new instance of a slider control.\n * @class\n * @name Slider\n * @param {jQuery} element - jQuery object to make into a slider control.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Slider.defaults, this.$element.data(), options);\n this.className = 'Slider'; // ie9 back compat\n this.initialized = false;\n\n // Touch and Triggers inits are idempotent, we just need to make sure it's initialied.\n Touch.init($);\n Triggers.init($);\n\n this._init();\n\n Keyboard.register('Slider', {\n 'ltr': {\n 'ARROW_RIGHT': 'increase',\n 'ARROW_UP': 'increase',\n 'ARROW_DOWN': 'decrease',\n 'ARROW_LEFT': 'decrease',\n 'SHIFT_ARROW_RIGHT': 'increaseFast',\n 'SHIFT_ARROW_UP': 'increaseFast',\n 'SHIFT_ARROW_DOWN': 'decreaseFast',\n 'SHIFT_ARROW_LEFT': 'decreaseFast',\n 'HOME': 'min',\n 'END': 'max'\n },\n 'rtl': {\n 'ARROW_LEFT': 'increase',\n 'ARROW_RIGHT': 'decrease',\n 'SHIFT_ARROW_LEFT': 'increaseFast',\n 'SHIFT_ARROW_RIGHT': 'decreaseFast'\n }\n });\n }\n\n /**\n * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s).\n * @function\n * @private\n */\n _init() {\n this.inputs = this.$element.find('input');\n this.handles = this.$element.find('[data-slider-handle]');\n\n this.$handle = this.handles.eq(0);\n this.$input = this.inputs.length ? this.inputs.eq(0) : $(`#${this.$handle.attr('aria-controls')}`);\n this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0);\n\n if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) {\n this.options.disabled = true;\n this.$element.addClass(this.options.disabledClass);\n }\n if (!this.inputs.length) {\n this.inputs = $().add(this.$input);\n this.options.binding = true;\n }\n\n this._setInitAttr(0);\n\n if (this.handles[1]) {\n this.options.doubleSided = true;\n this.$handle2 = this.handles.eq(1);\n this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : $(`#${this.$handle2.attr('aria-controls')}`);\n\n if (!this.inputs[1]) {\n this.inputs = this.inputs.add(this.$input2);\n }\n\n // this.$handle.triggerHandler('click.zf.slider');\n this._setInitAttr(1);\n }\n\n // Set handle positions\n this.setHandles();\n\n this._events();\n this.initialized = true;\n }\n\n setHandles() {\n if(this.handles[1]) {\n this._setHandlePos(this.$handle, this.inputs.eq(0).val(), () => {\n this._setHandlePos(this.$handle2, this.inputs.eq(1).val());\n });\n } else {\n this._setHandlePos(this.$handle, this.inputs.eq(0).val());\n }\n }\n\n _reflow() {\n this.setHandles();\n }\n /**\n * @function\n * @private\n * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value)\n */\n _pctOfBar(value) {\n var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start)\n\n switch(this.options.positionValueFunction) {\n case \"pow\":\n pctOfBar = this._logTransform(pctOfBar);\n break;\n case \"log\":\n pctOfBar = this._powTransform(pctOfBar);\n break;\n }\n\n return pctOfBar.toFixed(2)\n }\n\n /**\n * @function\n * @private\n * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value\n */\n _value(pctOfBar) {\n switch(this.options.positionValueFunction) {\n case \"pow\":\n pctOfBar = this._powTransform(pctOfBar);\n break;\n case \"log\":\n pctOfBar = this._logTransform(pctOfBar);\n break;\n }\n\n var value\n if (this.options.vertical) {\n // linear interpolation which is working with negative values for start\n // https://math.stackexchange.com/a/1019084\n value = parseFloat(this.options.end) + pctOfBar * (this.options.start - this.options.end)\n } else {\n value = (this.options.end - this.options.start) * pctOfBar + parseFloat(this.options.start);\n }\n\n return value\n }\n\n /**\n * @function\n * @private\n * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function\n */\n _logTransform(value) {\n return baseLog(this.options.nonLinearBase, ((value*(this.options.nonLinearBase-1))+1))\n }\n\n /**\n * @function\n * @private\n * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function\n */\n _powTransform(value) {\n return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1)\n }\n\n /**\n * Sets the position of the selected handle and fill bar.\n * @function\n * @private\n * @param {jQuery} $hndl - the selected handle to move.\n * @param {Number} location - floating point between the start and end values of the slider bar.\n * @param {Function} cb - callback function to fire on completion.\n * @fires Slider#moved\n * @fires Slider#changed\n */\n _setHandlePos($hndl, location, cb) {\n // don't move if the slider has been disabled since its initialization\n if (this.$element.hasClass(this.options.disabledClass)) {\n return;\n }\n //might need to alter that slightly for bars that will have odd number selections.\n location = parseFloat(location);//on input change events, convert string to number...grumble.\n\n // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max\n if (location < this.options.start) { location = this.options.start; }\n else if (location > this.options.end) { location = this.options.end; }\n\n var isDbl = this.options.doubleSided;\n\n if (isDbl) { //this block is to prevent 2 handles from crossing eachother. Could/should be improved.\n if (this.handles.index($hndl) === 0) {\n var h2Val = parseFloat(this.$handle2.attr('aria-valuenow'));\n location = location >= h2Val ? h2Val - this.options.step : location;\n } else {\n var h1Val = parseFloat(this.$handle.attr('aria-valuenow'));\n location = location <= h1Val ? h1Val + this.options.step : location;\n }\n }\n\n var _this = this,\n vert = this.options.vertical,\n hOrW = vert ? 'height' : 'width',\n lOrT = vert ? 'top' : 'left',\n handleDim = $hndl[0].getBoundingClientRect()[hOrW],\n elemDim = this.$element[0].getBoundingClientRect()[hOrW],\n //percentage of bar min/max value based on click or drag point\n pctOfBar = this._pctOfBar(location),\n //number of actual pixels to shift the handle, based on the percentage obtained above\n pxToMove = (elemDim - handleDim) * pctOfBar,\n //percentage of bar to shift the handle\n movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal);\n //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value\n location = parseFloat(location.toFixed(this.options.decimal));\n // declare empty object for css adjustments, only used with 2 handled-sliders\n var css = {};\n\n this._setValues($hndl, location);\n\n // TODO update to calculate based on values set to respective inputs??\n if (isDbl) {\n var isLeftHndl = this.handles.index($hndl) === 0,\n //empty variable, will be used for min-height/width for fill bar\n dim,\n //percentage w/h of the handle compared to the slider bar\n handlePct = Math.floor(percent(handleDim, elemDim) * 100);\n //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar\n if (isLeftHndl) {\n //left or top percentage value to apply to the fill bar.\n css[lOrT] = `${movement}%`;\n //calculate the new min-height/width for the fill bar.\n dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct;\n //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider\n //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future.\n if (cb && typeof cb === 'function') { cb(); }//this is only needed for the initialization of 2 handled sliders\n } else {\n //just caching the value of the left/bottom handle's left/top property\n var handlePos = parseFloat(this.$handle[0].style[lOrT]);\n //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0\n //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself\n dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start)/((this.options.end-this.options.start)/100) : handlePos) + handlePct;\n }\n // assign the min-height/width to our css object\n css[`min-${hOrW}`] = `${dim}%`;\n }\n\n //because we don't know exactly how the handle will be moved, check the amount of time it should take to move.\n var moveTime = this.$element.data('dragging') ? 1000/60 : this.options.moveTime;\n\n Move(moveTime, $hndl, function() {\n // adjusting the left/top property of the handle, based on the percentage calculated above\n // if movement isNaN, that is because the slider is hidden and we cannot determine handle width,\n // fall back to next best guess.\n if (isNaN(movement)) {\n $hndl.css(lOrT, `${pctOfBar * 100}%`);\n }\n else {\n $hndl.css(lOrT, `${movement}%`);\n }\n\n if (!_this.options.doubleSided) {\n //if single-handled, a simple method to expand the fill bar\n _this.$fill.css(hOrW, `${pctOfBar * 100}%`);\n } else {\n //otherwise, use the css object we created above\n _this.$fill.css(css);\n }\n });\n\n if (this.initialized) {\n this.$element.one('finished.zf.animate', function() {\n /**\n * Fires when the handle is done moving.\n * @event Slider#moved\n */\n _this.$element.trigger('moved.zf.slider', [$hndl]);\n });\n /**\n * Fires when the value has not been change for a given time.\n * @event Slider#changed\n */\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.$element.trigger('changed.zf.slider', [$hndl]);\n }, _this.options.changedDelay);\n }\n }\n\n /**\n * Sets the initial attribute for the slider element.\n * @function\n * @private\n * @param {Number} idx - index of the current handle/input to use.\n */\n _setInitAttr(idx) {\n var initVal = (idx === 0 ? this.options.initialStart : this.options.initialEnd)\n var id = this.inputs.eq(idx).attr('id') || GetYoDigits(6, 'slider');\n this.inputs.eq(idx).attr({\n 'id': id,\n 'max': this.options.end,\n 'min': this.options.start,\n 'step': this.options.step\n });\n this.inputs.eq(idx).val(initVal);\n this.handles.eq(idx).attr({\n 'role': 'slider',\n 'aria-controls': id,\n 'aria-valuemax': this.options.end,\n 'aria-valuemin': this.options.start,\n 'aria-valuenow': initVal,\n 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal',\n 'tabindex': 0\n });\n }\n\n /**\n * Sets the input and `aria-valuenow` values for the slider element.\n * @function\n * @private\n * @param {jQuery} $handle - the currently selected handle.\n * @param {Number} val - floating point of the new value.\n */\n _setValues($handle, val) {\n var idx = this.options.doubleSided ? this.handles.index($handle) : 0;\n this.inputs.eq(idx).val(val);\n $handle.attr('aria-valuenow', val);\n }\n\n /**\n * Handles events on the slider element.\n * Calculates the new location of the current handle.\n * If there are two handles and the bar was clicked, it determines which handle to move.\n * @function\n * @private\n * @param {Object} e - the `event` object passed from the listener.\n * @param {jQuery} $handle - the current handle to calculate for, if selected.\n * @param {Number} val - floating point number for the new value of the slider.\n * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn.\n */\n _handleEvent(e, $handle, val) {\n var value;\n if (!val) {//click or drag events\n e.preventDefault();\n var _this = this,\n vertical = this.options.vertical,\n param = vertical ? 'height' : 'width',\n direction = vertical ? 'top' : 'left',\n eventOffset = vertical ? e.pageY : e.pageX,\n barDim = this.$element[0].getBoundingClientRect()[param],\n windowScroll = vertical ? $(window).scrollTop() : $(window).scrollLeft();\n\n var elemOffset = this.$element.offset()[direction];\n\n // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates...\n // best way to guess this is simulated is if clientY == pageY\n if (e.clientY === e.pageY) { eventOffset = eventOffset + windowScroll; }\n var eventFromBar = eventOffset - elemOffset;\n var barXY;\n if (eventFromBar < 0) {\n barXY = 0;\n } else if (eventFromBar > barDim) {\n barXY = barDim;\n } else {\n barXY = eventFromBar;\n }\n var offsetPct = percent(barXY, barDim);\n\n value = this._value(offsetPct);\n\n // turn everything around for RTL, yay math!\n if (Rtl() && !this.options.vertical) {value = this.options.end - value;}\n\n value = _this._adjustValue(null, value);\n\n if (!$handle) {//figure out which handle it is, pass it to the next function.\n var firstHndlPos = absPosition(this.$handle, direction, barXY, param),\n secndHndlPos = absPosition(this.$handle2, direction, barXY, param);\n $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2;\n }\n\n } else {//change event on input\n value = this._adjustValue(null, val);\n }\n\n this._setHandlePos($handle, value);\n }\n\n /**\n * Adjustes value for handle in regard to step value. returns adjusted value\n * @function\n * @private\n * @param {jQuery} $handle - the selected handle.\n * @param {Number} value - value to adjust. used if $handle is falsy\n */\n _adjustValue($handle, value) {\n var val,\n step = this.options.step,\n div = parseFloat(step/2),\n left, previousVal, nextVal;\n if (!!$handle) {\n val = parseFloat($handle.attr('aria-valuenow'));\n }\n else {\n val = value;\n }\n if (val >= 0) {\n left = val % step;\n } else {\n left = step + (val % step);\n }\n previousVal = val - left;\n nextVal = previousVal + step;\n if (left === 0) {\n return val;\n }\n val = val >= previousVal + div ? nextVal : previousVal;\n return val;\n }\n\n /**\n * Adds event listeners to the slider elements.\n * @function\n * @private\n */\n _events() {\n this._eventsForHandle(this.$handle);\n if(this.handles[1]) {\n this._eventsForHandle(this.$handle2);\n }\n }\n\n\n /**\n * Adds event listeners a particular handle\n * @function\n * @private\n * @param {jQuery} $handle - the current handle to apply listeners to.\n */\n _eventsForHandle($handle) {\n var _this = this,\n curHandle;\n\n const handleChangeEvent = function(e) {\n const idx = _this.inputs.index($(this));\n _this._handleEvent(e, _this.handles.eq(idx), $(this).val());\n };\n\n // IE only triggers the change event when the input loses focus which strictly follows the HTML specification\n // listen for the enter key and trigger a change\n // @see https://html.spec.whatwg.org/multipage/input.html#common-input-element-events\n this.inputs.off('keyup.zf.slider').on('keyup.zf.slider', function (e) {\n if(e.keyCode === 13) handleChangeEvent.call(this, e);\n });\n\n this.inputs.off('change.zf.slider').on('change.zf.slider', handleChangeEvent);\n\n if (this.options.clickSelect) {\n this.$element.off('click.zf.slider').on('click.zf.slider', function(e) {\n if (_this.$element.data('dragging')) { return false; }\n\n if (!$(e.target).is('[data-slider-handle]')) {\n if (_this.options.doubleSided) {\n _this._handleEvent(e);\n } else {\n _this._handleEvent(e, _this.$handle);\n }\n }\n });\n }\n\n if (this.options.draggable) {\n this.handles.addTouch();\n\n var $body = $('body');\n $handle\n .off('mousedown.zf.slider')\n .on('mousedown.zf.slider', function(e) {\n $handle.addClass('is-dragging');\n _this.$fill.addClass('is-dragging');//\n _this.$element.data('dragging', true);\n\n curHandle = $(e.currentTarget);\n\n $body.on('mousemove.zf.slider', function(ev) {\n ev.preventDefault();\n _this._handleEvent(ev, curHandle);\n\n }).on('mouseup.zf.slider', function(ev) {\n _this._handleEvent(ev, curHandle);\n\n $handle.removeClass('is-dragging');\n _this.$fill.removeClass('is-dragging');\n _this.$element.data('dragging', false);\n\n $body.off('mousemove.zf.slider mouseup.zf.slider');\n });\n })\n // prevent events triggered by touch\n .on('selectstart.zf.slider touchmove.zf.slider', function(e) {\n e.preventDefault();\n });\n }\n\n $handle.off('keydown.zf.slider').on('keydown.zf.slider', function(e) {\n var _$handle = $(this),\n idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0,\n oldValue = parseFloat($handle.attr('aria-valuenow')),\n newValue;\n\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Slider', {\n decrease: function() {\n newValue = oldValue - _this.options.step;\n },\n increase: function() {\n newValue = oldValue + _this.options.step;\n },\n decreaseFast: function() {\n newValue = oldValue - _this.options.step * 10;\n },\n increaseFast: function() {\n newValue = oldValue + _this.options.step * 10;\n },\n min: function() {\n newValue = _this.options.start;\n },\n max: function() {\n newValue = _this.options.end;\n },\n handled: function() { // only set handle pos when event was handled specially\n e.preventDefault();\n _this._setHandlePos(_$handle, newValue);\n }\n });\n /*if (newValue) { // if pressed key has special function, update value\n e.preventDefault();\n _this._setHandlePos(_$handle, newValue);\n }*/\n });\n }\n\n /**\n * Destroys the slider plugin.\n */\n _destroy() {\n this.handles.off('.zf.slider');\n this.inputs.off('.zf.slider');\n this.$element.off('.zf.slider');\n\n clearTimeout(this.timeout);\n }\n}\n\nSlider.defaults = {\n /**\n * Minimum value for the slider scale.\n * @option\n * @type {number}\n * @default 0\n */\n start: 0,\n /**\n * Maximum value for the slider scale.\n * @option\n * @type {number}\n * @default 100\n */\n end: 100,\n /**\n * Minimum value change per change event.\n * @option\n * @type {number}\n * @default 1\n */\n step: 1,\n /**\n * Value at which the handle/input *(left handle/first input)* should be set to on initialization.\n * @option\n * @type {number}\n * @default 0\n */\n initialStart: 0,\n /**\n * Value at which the right handle/second input should be set to on initialization.\n * @option\n * @type {number}\n * @default 100\n */\n initialEnd: 100,\n /**\n * Allows the input to be located outside the container and visible. Set to by the JS\n * @option\n * @type {boolean}\n * @default false\n */\n binding: false,\n /**\n * Allows the user to click/tap on the slider bar to select a value.\n * @option\n * @type {boolean}\n * @default true\n */\n clickSelect: true,\n /**\n * Set to true and use the `vertical` class to change alignment to vertical.\n * @option\n * @type {boolean}\n * @default false\n */\n vertical: false,\n /**\n * Allows the user to drag the slider handle(s) to select a value.\n * @option\n * @type {boolean}\n * @default true\n */\n draggable: true,\n /**\n * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`.\n * @option\n * @type {boolean}\n * @default false\n */\n disabled: false,\n /**\n * Allows the use of two handles. Double checked by the JS. Changes some logic handling.\n * @option\n * @type {boolean}\n * @default false\n */\n doubleSided: false,\n /**\n * Potential future feature.\n */\n // steps: 100,\n /**\n * Number of decimal places the plugin should go to for floating point precision.\n * @option\n * @type {number}\n * @default 2\n */\n decimal: 2,\n /**\n * Time delay for dragged elements.\n */\n // dragDelay: 0,\n /**\n * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings.\n * @option\n * @type {number}\n * @default 200\n */\n moveTime: 200,//update this if changing the transition time in the sass\n /**\n * Class applied to disabled sliders.\n * @option\n * @type {string}\n * @default 'disabled'\n */\n disabledClass: 'disabled',\n /**\n * Will invert the default layout for a vertical slider.\n * @option\n * @type {boolean}\n * @default false\n */\n invertVertical: false,\n /**\n * Milliseconds before the `changed.zf-slider` event is triggered after value change.\n * @option\n * @type {number}\n * @default 500\n */\n changedDelay: 500,\n /**\n * Basevalue for non-linear sliders\n * @option\n * @type {number}\n * @default 5\n */\n nonLinearBase: 5,\n /**\n * Basevalue for non-linear sliders, possible values are: `'linear'`, `'pow'` & `'log'`. Pow and Log use the nonLinearBase setting.\n * @option\n * @type {string}\n * @default 'linear'\n */\n positionValueFunction: 'linear',\n};\n\nfunction percent(frac, num) {\n return (frac / num);\n}\nfunction absPosition($handle, dir, clickPos, param) {\n return Math.abs(($handle.position()[dir] + ($handle[param]() / 2)) - clickPos);\n}\nfunction baseLog(base, value) {\n return Math.log(value)/Math.log(base)\n}\n\nexport {Slider};\n","import $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * SmoothScroll module.\n * @module foundation.smoothScroll\n */\nclass SmoothScroll extends Plugin {\n /**\n * Creates a new instance of SmoothScroll.\n * @class\n * @name SmoothScroll\n * @fires SmoothScroll#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, SmoothScroll.defaults, this.$element.data(), options);\n this.className = 'SmoothScroll'; // ie9 back compat\n\n this._init();\n }\n\n /**\n * Initialize the SmoothScroll plugin\n * @private\n */\n _init() {\n const id = this.$element[0].id || GetYoDigits(6, 'smooth-scroll');\n this.$element.attr({ id });\n\n this._events();\n }\n\n /**\n * Initializes events for SmoothScroll.\n * @private\n */\n _events() {\n this._linkClickListener = this._handleLinkClick.bind(this);\n this.$element.on('click.zf.smoothScroll', this._linkClickListener);\n this.$element.on('click.zf.smoothScroll', 'a[href^=\"#\"]', this._linkClickListener);\n }\n\n /**\n * Handle the given event to smoothly scroll to the anchor pointed by the event target.\n * @param {*} e - event\n * @function\n * @private\n */\n _handleLinkClick(e) {\n // Follow the link if it does not point to an anchor.\n if (!$(e.currentTarget).is('a[href^=\"#\"]')) return;\n\n const arrival = e.currentTarget.getAttribute('href');\n\n this._inTransition = true;\n\n SmoothScroll.scrollToLoc(arrival, this.options, () => {\n this._inTransition = false;\n });\n\n e.preventDefault();\n };\n\n /**\n * Function to scroll to a given location on the page.\n * @param {String} loc - A properly formatted jQuery id selector. Example: '#foo'\n * @param {Object} options - The options to use.\n * @param {Function} callback - The callback function.\n * @static\n * @function\n */\n static scrollToLoc(loc, options = SmoothScroll.defaults, callback) {\n const $loc = $(loc);\n\n // Do nothing if target does not exist to prevent errors\n if (!$loc.length) return false;\n\n var scrollPos = Math.round($loc.offset().top - options.threshold / 2 - options.offset);\n\n $('html, body').stop(true).animate(\n { scrollTop: scrollPos },\n options.animationDuration,\n options.animationEasing,\n () => {\n if (typeof callback === 'function'){\n callback();\n }\n }\n );\n }\n\n /**\n * Destroys the SmoothScroll instance.\n * @function\n */\n _destroy() {\n this.$element.off('click.zf.smoothScroll', this._linkClickListener)\n this.$element.off('click.zf.smoothScroll', 'a[href^=\"#\"]', this._linkClickListener);\n }\n}\n\n/**\n * Default settings for plugin.\n */\nSmoothScroll.defaults = {\n /**\n * Amount of time, in ms, the animated scrolling should take between locations.\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @default 'linear'\n * @see {@link https://api.jquery.com/animate|Jquery animate}\n */\n animationEasing: 'linear',\n /**\n * Number of pixels to use as a marker for location changes.\n * @option\n * @type {number}\n * @default 50\n */\n threshold: 50,\n /**\n * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.\n * @option\n * @type {number}\n * @default 0\n */\n offset: 0\n}\n\nexport {SmoothScroll}\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad, GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Sticky module.\n * @module foundation.sticky\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n */\n\nclass Sticky extends Plugin {\n /**\n * Creates a new instance of a sticky thing.\n * @class\n * @name Sticky\n * @param {jQuery} element - jQuery object to make sticky.\n * @param {Object} options - options object passed when creating the element programmatically.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Sticky.defaults, this.$element.data(), options);\n this.className = 'Sticky'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n }\n\n /**\n * Initializes the sticky element by adding classes, getting/setting dimensions, breakpoints and attributes\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n var $parent = this.$element.parent('[data-sticky-container]'),\n id = this.$element[0].id || GetYoDigits(6, 'sticky'),\n _this = this;\n\n if($parent.length){\n this.$container = $parent;\n } else {\n this.wasWrapped = true;\n this.$element.wrap(this.options.container);\n this.$container = this.$element.parent();\n }\n this.$container.addClass(this.options.containerClass);\n\n this.$element.addClass(this.options.stickyClass).attr({ 'data-resize': id, 'data-mutate': id });\n if (this.options.anchor !== '') {\n $('#' + _this.options.anchor).attr({ 'data-mutate': id });\n }\n\n this.scrollCount = this.options.checkEvery;\n this.isStuck = false;\n this.onLoadListener = onLoad($(window), function () {\n //We calculate the container height to have correct values for anchor points offset calculation.\n _this.containerHeight = _this.$element.css(\"display\") === \"none\" ? 0 : _this.$element[0].getBoundingClientRect().height;\n _this.$container.css('height', _this.containerHeight);\n _this.elemHeight = _this.containerHeight;\n if (_this.options.anchor !== '') {\n _this.$anchor = $('#' + _this.options.anchor);\n } else {\n _this._parsePoints();\n }\n\n _this._setSizes(function () {\n var scroll = window.pageYOffset;\n _this._calc(false, scroll);\n //Unstick the element will ensure that proper classes are set.\n if (!_this.isStuck) {\n _this._removeSticky((scroll >= _this.topPoint) ? false : true);\n }\n });\n _this._events(id.split('-').reverse().join('-'));\n });\n }\n\n /**\n * If using multiple elements as anchors, calculates the top and bottom pixel values the sticky thing should stick and unstick on.\n * @function\n * @private\n */\n _parsePoints() {\n var top = this.options.topAnchor === \"\" ? 1 : this.options.topAnchor,\n btm = this.options.btmAnchor === \"\" ? document.documentElement.scrollHeight : this.options.btmAnchor,\n pts = [top, btm],\n breaks = {};\n for (var i = 0, len = pts.length; i < len && pts[i]; i++) {\n var pt;\n if (typeof pts[i] === 'number') {\n pt = pts[i];\n } else {\n var place = pts[i].split(':'),\n anchor = $(`#${place[0]}`);\n\n pt = anchor.offset().top;\n if (place[1] && place[1].toLowerCase() === 'bottom') {\n pt += anchor[0].getBoundingClientRect().height;\n }\n }\n breaks[i] = pt;\n }\n\n\n this.points = breaks;\n return;\n }\n\n /**\n * Adds event handlers for the scrolling element.\n * @private\n * @param {String} id - pseudo-random id for unique scroll event listener.\n */\n _events(id) {\n var _this = this,\n scrollListener = this.scrollListener = `scroll.zf.${id}`;\n if (this.isOn) { return; }\n if (this.canStick) {\n this.isOn = true;\n $(window).off(scrollListener)\n .on(scrollListener, function() {\n if (_this.scrollCount === 0) {\n _this.scrollCount = _this.options.checkEvery;\n _this._setSizes(function() {\n _this._calc(false, window.pageYOffset);\n });\n } else {\n _this.scrollCount--;\n _this._calc(false, window.pageYOffset);\n }\n });\n }\n\n this.$element.off('resizeme.zf.trigger')\n .on('resizeme.zf.trigger', function() {\n _this._eventsHandler(id);\n });\n\n this.$element.on('mutateme.zf.trigger', function () {\n _this._eventsHandler(id);\n });\n\n if(this.$anchor) {\n this.$anchor.on('mutateme.zf.trigger', function () {\n _this._eventsHandler(id);\n });\n }\n }\n\n /**\n * Handler for events.\n * @private\n * @param {String} id - pseudo-random id for unique scroll event listener.\n */\n _eventsHandler(id) {\n var _this = this,\n scrollListener = this.scrollListener = `scroll.zf.${id}`;\n\n _this._setSizes(function() {\n _this._calc(false);\n if (_this.canStick) {\n if (!_this.isOn) {\n _this._events(id);\n }\n } else if (_this.isOn) {\n _this._pauseListeners(scrollListener);\n }\n });\n }\n\n /**\n * Removes event handlers for scroll and change events on anchor.\n * @fires Sticky#pause\n * @param {String} scrollListener - unique, namespaced scroll listener attached to `window`\n */\n _pauseListeners(scrollListener) {\n this.isOn = false;\n $(window).off(scrollListener);\n\n /**\n * Fires when the plugin is paused due to resize event shrinking the view.\n * @event Sticky#pause\n * @private\n */\n this.$element.trigger('pause.zf.sticky');\n }\n\n /**\n * Called on every `scroll` event and on `_init`\n * fires functions based on booleans and cached values\n * @param {Boolean} checkSizes - true if plugin should recalculate sizes and breakpoints.\n * @param {Number} scroll - current scroll position passed from scroll event cb function. If not passed, defaults to `window.pageYOffset`.\n */\n _calc(checkSizes, scroll) {\n if (checkSizes) { this._setSizes(); }\n\n if (!this.canStick) {\n if (this.isStuck) {\n this._removeSticky(true);\n }\n return false;\n }\n\n if (!scroll) { scroll = window.pageYOffset; }\n\n if (scroll >= this.topPoint) {\n if (scroll <= this.bottomPoint) {\n if (!this.isStuck) {\n this._setSticky();\n }\n } else {\n if (this.isStuck) {\n this._removeSticky(false);\n }\n }\n } else {\n if (this.isStuck) {\n this._removeSticky(true);\n }\n }\n }\n\n /**\n * Causes the $element to become stuck.\n * Adds `position: fixed;`, and helper classes.\n * @fires Sticky#stuckto\n * @function\n * @private\n */\n _setSticky() {\n var _this = this,\n stickTo = this.options.stickTo,\n mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom',\n notStuckTo = stickTo === 'top' ? 'bottom' : 'top',\n css = {};\n\n css[mrgn] = `${this.options[mrgn]}em`;\n css[stickTo] = 0;\n css[notStuckTo] = 'auto';\n this.isStuck = true;\n this.$element.removeClass(`is-anchored is-at-${notStuckTo}`)\n .addClass(`is-stuck is-at-${stickTo}`)\n .css(css)\n /**\n * Fires when the $element has become `position: fixed;`\n * Namespaced to `top` or `bottom`, e.g. `sticky.zf.stuckto:top`\n * @event Sticky#stuckto\n */\n .trigger(`sticky.zf.stuckto:${stickTo}`);\n this.$element.on(\"transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd\", function() {\n _this._setSizes();\n });\n }\n\n /**\n * Causes the $element to become unstuck.\n * Removes `position: fixed;`, and helper classes.\n * Adds other helper classes.\n * @param {Boolean} isTop - tells the function if the $element should anchor to the top or bottom of its $anchor element.\n * @fires Sticky#unstuckfrom\n * @private\n */\n _removeSticky(isTop) {\n var stickTo = this.options.stickTo,\n stickToTop = stickTo === 'top',\n css = {},\n anchorPt = (this.points ? this.points[1] - this.points[0] : this.anchorHeight) - this.elemHeight,\n mrgn = stickToTop ? 'marginTop' : 'marginBottom',\n topOrBottom = isTop ? 'top' : 'bottom';\n\n css[mrgn] = 0;\n\n css.bottom = 'auto';\n if(isTop) {\n css.top = 0;\n } else {\n css.top = anchorPt;\n }\n\n this.isStuck = false;\n this.$element.removeClass(`is-stuck is-at-${stickTo}`)\n .addClass(`is-anchored is-at-${topOrBottom}`)\n .css(css)\n /**\n * Fires when the $element has become anchored.\n * Namespaced to `top` or `bottom`, e.g. `sticky.zf.unstuckfrom:bottom`\n * @event Sticky#unstuckfrom\n */\n .trigger(`sticky.zf.unstuckfrom:${topOrBottom}`);\n }\n\n /**\n * Sets the $element and $container sizes for plugin.\n * Calls `_setBreakPoints`.\n * @param {Function} cb - optional callback function to fire on completion of `_setBreakPoints`.\n * @private\n */\n _setSizes(cb) {\n this.canStick = MediaQuery.is(this.options.stickyOn);\n if (!this.canStick) {\n if (cb && typeof cb === 'function') { cb(); }\n }\n\n var newElemWidth = this.$container[0].getBoundingClientRect().width,\n comp = window.getComputedStyle(this.$container[0]),\n pdngl = parseInt(comp['padding-left'], 10),\n pdngr = parseInt(comp['padding-right'], 10);\n\n if (this.$anchor && this.$anchor.length) {\n this.anchorHeight = this.$anchor[0].getBoundingClientRect().height;\n } else {\n this._parsePoints();\n }\n\n this.$element.css({\n 'max-width': `${newElemWidth - pdngl - pdngr}px`\n });\n\n // Recalculate the height only if it is \"dynamic\"\n if (this.options.dynamicHeight || !this.containerHeight) {\n // Get the sticked element height and apply it to the container to \"hold the place\"\n var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight;\n newContainerHeight = this.$element.css(\"display\") === \"none\" ? 0 : newContainerHeight;\n this.$container.css('height', newContainerHeight);\n this.containerHeight = newContainerHeight;\n }\n this.elemHeight = this.containerHeight;\n\n if (!this.isStuck) {\n if (this.$element.hasClass('is-at-bottom')) {\n var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight;\n this.$element.css('top', anchorPt);\n }\n }\n\n this._setBreakPoints(this.containerHeight, function() {\n if (cb && typeof cb === 'function') { cb(); }\n });\n }\n\n /**\n * Sets the upper and lower breakpoints for the element to become sticky/unsticky.\n * @param {Number} elemHeight - px value for sticky.$element height, calculated by `_setSizes`.\n * @param {Function} cb - optional callback function to be called on completion.\n * @private\n */\n _setBreakPoints(elemHeight, cb) {\n if (!this.canStick) {\n if (cb && typeof cb === 'function') { cb(); }\n else { return false; }\n }\n var mTop = emCalc(this.options.marginTop),\n mBtm = emCalc(this.options.marginBottom),\n topPoint = this.points ? this.points[0] : this.$anchor.offset().top,\n bottomPoint = this.points ? this.points[1] : topPoint + this.anchorHeight,\n // topPoint = this.$anchor.offset().top || this.points[0],\n // bottomPoint = topPoint + this.anchorHeight || this.points[1],\n winHeight = window.innerHeight;\n\n if (this.options.stickTo === 'top') {\n topPoint -= mTop;\n bottomPoint -= (elemHeight + mTop);\n } else if (this.options.stickTo === 'bottom') {\n topPoint -= (winHeight - (elemHeight + mBtm));\n bottomPoint -= (winHeight - mBtm);\n } else {\n //this would be the stickTo: both option... tricky\n }\n\n this.topPoint = topPoint;\n this.bottomPoint = bottomPoint;\n\n if (cb && typeof cb === 'function') { cb(); }\n }\n\n /**\n * Destroys the current sticky element.\n * Resets the element to the top position first.\n * Removes event listeners, JS-added css properties and classes, and unwraps the $element if the JS added the $container.\n * @function\n */\n _destroy() {\n this._removeSticky(true);\n\n this.$element.removeClass(`${this.options.stickyClass} is-anchored is-at-top`)\n .css({\n height: '',\n top: '',\n bottom: '',\n 'max-width': ''\n })\n .off('resizeme.zf.trigger')\n .off('mutateme.zf.trigger');\n if (this.$anchor && this.$anchor.length) {\n this.$anchor.off('change.zf.sticky');\n }\n if (this.scrollListener) $(window).off(this.scrollListener)\n if (this.onLoadListener) $(window).off(this.onLoadListener)\n\n if (this.wasWrapped) {\n this.$element.unwrap();\n } else {\n this.$container.removeClass(this.options.containerClass)\n .css({\n height: ''\n });\n }\n }\n}\n\nSticky.defaults = {\n /**\n * Customizable container template. Add your own classes for styling and sizing.\n * @option\n * @type {string}\n * @default '<div data-sticky-container></div>'\n */\n container: '
    ',\n /**\n * Location in the view the element sticks to. Can be `'top'` or `'bottom'`.\n * @option\n * @type {string}\n * @default 'top'\n */\n stickTo: 'top',\n /**\n * If anchored to a single element, the id of that element.\n * @option\n * @type {string}\n * @default ''\n */\n anchor: '',\n /**\n * If using more than one element as anchor points, the id of the top anchor.\n * @option\n * @type {string}\n * @default ''\n */\n topAnchor: '',\n /**\n * If using more than one element as anchor points, the id of the bottom anchor.\n * @option\n * @type {string}\n * @default ''\n */\n btmAnchor: '',\n /**\n * Margin, in `em`'s to apply to the top of the element when it becomes sticky.\n * @option\n * @type {number}\n * @default 1\n */\n marginTop: 1,\n /**\n * Margin, in `em`'s to apply to the bottom of the element when it becomes sticky.\n * @option\n * @type {number}\n * @default 1\n */\n marginBottom: 1,\n /**\n * Breakpoint string that is the minimum screen size an element should become sticky.\n * @option\n * @type {string}\n * @default 'medium'\n */\n stickyOn: 'medium',\n /**\n * Class applied to sticky element, and removed on destruction. Foundation defaults to `sticky`.\n * @option\n * @type {string}\n * @default 'sticky'\n */\n stickyClass: 'sticky',\n /**\n * Class applied to sticky container. Foundation defaults to `sticky-container`.\n * @option\n * @type {string}\n * @default 'sticky-container'\n */\n containerClass: 'sticky-container',\n /**\n * If true (by default), keep the sticky container the same height as the element. Otherwise, the container height is set once and does not change.\n * @option\n * @type {boolean}\n * @default true\n */\n dynamicHeight: true,\n /**\n * Number of scroll events between the plugin's recalculating sticky points. Setting it to `0` will cause it to recalc every scroll event, setting it to `-1` will prevent recalc on scroll.\n * @option\n * @type {number}\n * @default -1\n */\n checkEvery: -1\n};\n\n/**\n * Helper function to calculate em values\n * @param Number {em} - number of em's to calculate into pixels\n */\nfunction emCalc(em) {\n return parseInt(window.getComputedStyle(document.body, null).fontSize, 10) * em;\n}\n\nexport {Sticky};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\n/**\n * Tabs module.\n * @module foundation.tabs\n * @requires foundation.util.keyboard\n * @requires foundation.util.imageLoader if tabs contain images\n */\n\nclass Tabs extends Plugin {\n /**\n * Creates a new instance of tabs.\n * @class\n * @name Tabs\n * @fires Tabs#init\n * @param {jQuery} element - jQuery object to make into tabs.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Tabs.defaults, this.$element.data(), options);\n this.className = 'Tabs'; // ie9 back compat\n\n this._init();\n Keyboard.register('Tabs', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'previous',\n 'ARROW_DOWN': 'next',\n 'ARROW_LEFT': 'previous'\n // 'TAB': 'next',\n // 'SHIFT_TAB': 'previous'\n });\n }\n\n /**\n * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab.\n * @private\n */\n _init() {\n var _this = this;\n this._isInitializing = true;\n\n this.$element.attr({'role': 'tablist'});\n this.$tabTitles = this.$element.find(`.${this.options.linkClass}`);\n this.$tabContent = $(`[data-tabs-content=\"${this.$element[0].id}\"]`);\n\n this.$tabTitles.each(function(){\n var $elem = $(this),\n $link = $elem.find('a'),\n isActive = $elem.hasClass(`${_this.options.linkActiveClass}`),\n hash = $link.attr('data-tabs-target') || $link[0].hash.slice(1),\n linkId = $link[0].id ? $link[0].id : `${hash}-label`,\n $tabContent = $(`#${hash}`);\n\n $elem.attr({'role': 'presentation'});\n\n $link.attr({\n 'role': 'tab',\n 'aria-controls': hash,\n 'aria-selected': isActive,\n 'id': linkId,\n 'tabindex': isActive ? '0' : '-1'\n });\n\n $tabContent.attr({\n 'role': 'tabpanel',\n 'aria-labelledby': linkId\n });\n\n // Save up the initial hash to return to it later when going back in history\n if (isActive) {\n _this._initialAnchor = `#${hash}`;\n }\n\n if(!isActive) {\n $tabContent.attr('aria-hidden', 'true');\n }\n\n if(isActive && _this.options.autoFocus){\n _this.onLoadListener = onLoad($(window), function() {\n $('html, body').animate({ scrollTop: $elem.offset().top }, _this.options.deepLinkSmudgeDelay, () => {\n $link.focus();\n });\n });\n }\n });\n\n if(this.options.matchHeight) {\n var $images = this.$tabContent.find('img');\n\n if ($images.length) {\n onImagesLoaded($images, this._setHeight.bind(this));\n } else {\n this._setHeight();\n }\n }\n\n // Current context-bound function to open tabs on page load or history hashchange\n this._checkDeepLink = () => {\n var anchor = window.location.hash;\n\n if (!anchor.length) {\n // If we are still initializing and there is no anchor, then there is nothing to do\n if (this._isInitializing) return;\n // Otherwise, move to the initial anchor\n if (this._initialAnchor) anchor = this._initialAnchor;\n }\n\n var anchorNoHash = anchor.indexOf('#') >= 0 ? anchor.slice(1) : anchor;\n var $anchor = anchorNoHash && $(`#${anchorNoHash}`);\n var $link = anchor && this.$element.find(`[href$=\"${anchor}\"],[data-tabs-target=\"${anchorNoHash}\"]`).first();\n // Whether the anchor element that has been found is part of this element\n var isOwnAnchor = !!($anchor.length && $link.length);\n\n if (isOwnAnchor) {\n // If there is an anchor for the hash, select it\n if ($anchor && $anchor.length && $link && $link.length) {\n this.selectTab($anchor, true);\n }\n // Otherwise, collapse everything\n else {\n this._collapse();\n }\n\n // Roll up a little to show the titles\n if (this.options.deepLinkSmudge) {\n var offset = this.$element.offset();\n $('html, body').animate({ scrollTop: offset.top - this.options.deepLinkSmudgeOffset}, this.options.deepLinkSmudgeDelay);\n }\n\n /**\n * Fires when the plugin has deeplinked at pageload\n * @event Tabs#deeplink\n */\n this.$element.trigger('deeplink.zf.tabs', [$link, $anchor]);\n }\n }\n\n //use browser to open a tab, if it exists in this tabset\n if (this.options.deepLink) {\n this._checkDeepLink();\n }\n\n this._events();\n\n this._isInitializing = false;\n }\n\n /**\n * Adds event handlers for items within the tabs.\n * @private\n */\n _events() {\n this._addKeyHandler();\n this._addClickHandler();\n this._setHeightMqHandler = null;\n\n if (this.options.matchHeight) {\n this._setHeightMqHandler = this._setHeight.bind(this);\n\n $(window).on('changed.zf.mediaquery', this._setHeightMqHandler);\n }\n\n if(this.options.deepLink) {\n $(window).on('hashchange', this._checkDeepLink);\n }\n }\n\n /**\n * Adds click handlers for items within the tabs.\n * @private\n */\n _addClickHandler() {\n var _this = this;\n\n this.$element\n .off('click.zf.tabs')\n .on('click.zf.tabs', `.${this.options.linkClass}`, function(e){\n e.preventDefault();\n _this._handleTabChange($(this));\n });\n }\n\n /**\n * Adds keyboard event handlers for items within the tabs.\n * @private\n */\n _addKeyHandler() {\n var _this = this;\n\n this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function(e){\n if (e.which === 9) return;\n\n\n var $element = $(this),\n $elements = $element.parent('ul').children('li'),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n if (_this.options.wrapOnKeys) {\n $prevElement = i === 0 ? $elements.last() : $elements.eq(i-1);\n $nextElement = i === $elements.length -1 ? $elements.first() : $elements.eq(i+1);\n } else {\n $prevElement = $elements.eq(Math.max(0, i-1));\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1));\n }\n return;\n }\n });\n\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Tabs', {\n open: function() {\n $element.find('[role=\"tab\"]').focus();\n _this._handleTabChange($element);\n },\n previous: function() {\n $prevElement.find('[role=\"tab\"]').focus();\n _this._handleTabChange($prevElement);\n },\n next: function() {\n $nextElement.find('[role=\"tab\"]').focus();\n _this._handleTabChange($nextElement);\n },\n handled: function() {\n e.preventDefault();\n }\n });\n });\n }\n\n /**\n * Opens the tab `$targetContent` defined by `$target`. Collapses active tab.\n * @param {jQuery} $target - Tab to open.\n * @param {boolean} historyHandled - browser has already handled a history update\n * @fires Tabs#change\n * @function\n */\n _handleTabChange($target, historyHandled) {\n\n // With `activeCollapse`, if the target is the active Tab, collapse it.\n if ($target.hasClass(`${this.options.linkActiveClass}`)) {\n if(this.options.activeCollapse) {\n this._collapse();\n }\n return;\n }\n\n var $oldTab = this.$element.\n find(`.${this.options.linkClass}.${this.options.linkActiveClass}`),\n $tabLink = $target.find('[role=\"tab\"]'),\n target = $tabLink.attr('data-tabs-target'),\n anchor = target && target.length ? `#${target}` : $tabLink[0].hash,\n $targetContent = this.$tabContent.find(anchor);\n\n //close old tab\n this._collapseTab($oldTab);\n\n //open new tab\n this._openTab($target);\n\n //either replace or update browser history\n if (this.options.deepLink && !historyHandled) {\n if (this.options.updateHistory) {\n history.pushState({}, '', anchor);\n } else {\n history.replaceState({}, '', anchor);\n }\n }\n\n /**\n * Fires when the plugin has successfully changed tabs.\n * @event Tabs#change\n */\n this.$element.trigger('change.zf.tabs', [$target, $targetContent]);\n\n //fire to children a mutation event\n $targetContent.find(\"[data-mutate]\").trigger(\"mutateme.zf.trigger\");\n }\n\n /**\n * Opens the tab `$targetContent` defined by `$target`.\n * @param {jQuery} $target - Tab to open.\n * @function\n */\n _openTab($target) {\n var $tabLink = $target.find('[role=\"tab\"]'),\n hash = $tabLink.attr('data-tabs-target') || $tabLink[0].hash.slice(1),\n $targetContent = this.$tabContent.find(`#${hash}`);\n\n $target.addClass(`${this.options.linkActiveClass}`);\n\n $tabLink.attr({\n 'aria-selected': 'true',\n 'tabindex': '0'\n });\n\n $targetContent\n .addClass(`${this.options.panelActiveClass}`).removeAttr('aria-hidden');\n }\n\n /**\n * Collapses `$targetContent` defined by `$target`.\n * @param {jQuery} $target - Tab to collapse.\n * @function\n */\n _collapseTab($target) {\n var $targetAnchor = $target\n .removeClass(`${this.options.linkActiveClass}`)\n .find('[role=\"tab\"]')\n .attr({\n 'aria-selected': 'false',\n 'tabindex': -1\n });\n\n $(`#${$targetAnchor.attr('aria-controls')}`)\n .removeClass(`${this.options.panelActiveClass}`)\n .attr({ 'aria-hidden': 'true' })\n }\n\n /**\n * Collapses the active Tab.\n * @fires Tabs#collapse\n * @function\n */\n _collapse() {\n var $activeTab = this.$element.find(`.${this.options.linkClass}.${this.options.linkActiveClass}`);\n\n if ($activeTab.length) {\n this._collapseTab($activeTab);\n\n /**\n * Fires when the plugin has successfully collapsed tabs.\n * @event Tabs#collapse\n */\n this.$element.trigger('collapse.zf.tabs', [$activeTab]);\n }\n }\n\n /**\n * Public method for selecting a content pane to display.\n * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display.\n * @param {boolean} historyHandled - browser has already handled a history update\n * @function\n */\n selectTab(elem, historyHandled) {\n var idStr, hashIdStr;\n\n if (typeof elem === 'object') {\n idStr = elem[0].id;\n } else {\n idStr = elem;\n }\n\n if (idStr.indexOf('#') < 0) {\n hashIdStr = `#${idStr}`;\n } else {\n hashIdStr = idStr;\n idStr = idStr.slice(1);\n }\n\n var $target = this.$tabTitles.has(`[href$=\"${hashIdStr}\"],[data-tabs-target=\"${idStr}\"]`).first();\n\n this._handleTabChange($target, historyHandled);\n };\n\n /**\n * Sets the height of each panel to the height of the tallest panel.\n * If enabled in options, gets called on media query change.\n * If loading content via external source, can be called directly or with _reflow.\n * If enabled with `data-match-height=\"true\"`, tabs sets to equal height\n * @function\n * @private\n */\n _setHeight() {\n var max = 0,\n _this = this; // Lock down the `this` value for the root tabs object\n\n if (!this.$tabContent) {\n return;\n }\n\n this.$tabContent\n .find(`.${this.options.panelClass}`)\n .css('min-height', '')\n .each(function() {\n\n var panel = $(this),\n isActive = panel.hasClass(`${_this.options.panelActiveClass}`); // get the options from the parent instead of trying to get them from the child\n\n if (!isActive) {\n panel.css({'visibility': 'hidden', 'display': 'block'});\n }\n\n var temp = this.getBoundingClientRect().height;\n\n if (!isActive) {\n panel.css({\n 'visibility': '',\n 'display': ''\n });\n }\n\n max = temp > max ? temp : max;\n })\n .css('min-height', `${max}px`);\n }\n\n /**\n * Destroys an instance of tabs.\n * @fires Tabs#destroyed\n */\n _destroy() {\n this.$element\n .find(`.${this.options.linkClass}`)\n .off('.zf.tabs').hide().end()\n .find(`.${this.options.panelClass}`)\n .hide();\n\n if (this.options.matchHeight) {\n if (this._setHeightMqHandler != null) {\n $(window).off('changed.zf.mediaquery', this._setHeightMqHandler);\n }\n }\n\n if (this.options.deepLink) {\n $(window).off('hashchange', this._checkDeepLink);\n }\n\n if (this.onLoadListener) {\n $(window).off(this.onLoadListener);\n }\n }\n}\n\nTabs.defaults = {\n /**\n * Link the location hash to the active pane.\n * Set the location hash when the active pane changes, and open the corresponding pane when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n\n /**\n * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the tab panel is visible\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinkSmudge: false,\n\n /**\n * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n * @option\n * @type {number}\n * @default 300\n */\n deepLinkSmudgeDelay: 300,\n\n /**\n * If `deepLinkSmudge` is enabled, animation offset from the top for the deep link adjustment\n * @option\n * @type {number}\n * @default 0\n */\n deepLinkSmudgeOffset: 0,\n\n /**\n * If `deepLink` is enabled, update the browser history with the open tab\n * @option\n * @type {boolean}\n * @default false\n */\n updateHistory: false,\n\n /**\n * Allows the window to scroll to content of active pane on load.\n * Not recommended if more than one tab panel per page.\n * @option\n * @type {boolean}\n * @default false\n */\n autoFocus: false,\n\n /**\n * Allows keyboard input to 'wrap' around the tab links.\n * @option\n * @type {boolean}\n * @default true\n */\n wrapOnKeys: true,\n\n /**\n * Allows the tab content panes to match heights if set to true.\n * @option\n * @type {boolean}\n * @default false\n */\n matchHeight: false,\n\n /**\n * Allows active tabs to collapse when clicked.\n * @option\n * @type {boolean}\n * @default false\n */\n activeCollapse: false,\n\n /**\n * Class applied to `li`'s in tab link list.\n * @option\n * @type {string}\n * @default 'tabs-title'\n */\n linkClass: 'tabs-title',\n\n /**\n * Class applied to the active `li` in tab link list.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n linkActiveClass: 'is-active',\n\n /**\n * Class applied to the content containers.\n * @option\n * @type {string}\n * @default 'tabs-panel'\n */\n panelClass: 'tabs-panel',\n\n /**\n * Class applied to the active content container.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n panelActiveClass: 'is-active'\n};\n\nexport {Tabs};\n","import $ from 'jquery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\nimport { RegExpEscape } from './foundation.core.utils';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Toggler module.\n * @module foundation.toggler\n * @requires foundation.util.motion\n * @requires foundation.util.triggers\n */\n\nclass Toggler extends Plugin {\n /**\n * Creates a new instance of Toggler.\n * @class\n * @name Toggler\n * @fires Toggler#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Toggler.defaults, element.data(), options);\n this.className = '';\n this.className = 'Toggler'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate.\n * @function\n * @private\n */\n _init() {\n // Collect triggers to set ARIA attributes to\n var id = this.$element[0].id,\n $triggers = $(`[data-open~=\"${id}\"], [data-close~=\"${id}\"], [data-toggle~=\"${id}\"]`);\n\n var input;\n // Parse animation classes if they were set\n if (this.options.animate) {\n input = this.options.animate.split(' ');\n\n this.animationIn = input[0];\n this.animationOut = input[1] || null;\n\n // - aria-expanded: according to the element visibility.\n $triggers.attr('aria-expanded', !this.$element.is(':hidden'));\n }\n // Otherwise, parse toggle class\n else {\n input = this.options.toggler;\n if (typeof input !== 'string' || !input.length) {\n throw new Error(`The 'toggler' option containing the target class is required, got \"${input}\"`);\n }\n // Allow for a . at the beginning of the string\n this.className = input[0] === '.' ? input.slice(1) : input;\n\n // - aria-expanded: according to the elements class set.\n $triggers.attr('aria-expanded', this.$element.hasClass(this.className));\n }\n\n // - aria-controls: adding the element id to it if not already in it.\n $triggers.each((index, trigger) => {\n const $trigger = $(trigger);\n const controls = $trigger.attr('aria-controls') || '';\n\n const containsId = new RegExp(`\\\\b${RegExpEscape(id)}\\\\b`).test(controls);\n if (!containsId) $trigger.attr('aria-controls', controls ? `${controls} ${id}` : id);\n });\n }\n\n /**\n * Initializes events for the toggle trigger.\n * @function\n * @private\n */\n _events() {\n this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this));\n }\n\n /**\n * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was \"on\" or \"off\".\n * @function\n * @fires Toggler#on\n * @fires Toggler#off\n */\n toggle() {\n this[ this.options.animate ? '_toggleAnimate' : '_toggleClass']();\n }\n\n _toggleClass() {\n this.$element.toggleClass(this.className);\n\n var isOn = this.$element.hasClass(this.className);\n if (isOn) {\n /**\n * Fires if the target element has the class after a toggle.\n * @event Toggler#on\n */\n this.$element.trigger('on.zf.toggler');\n }\n else {\n /**\n * Fires if the target element does not have the class after a toggle.\n * @event Toggler#off\n */\n this.$element.trigger('off.zf.toggler');\n }\n\n this._updateARIA(isOn);\n this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger');\n }\n\n _toggleAnimate() {\n var _this = this;\n\n if (this.$element.is(':hidden')) {\n Motion.animateIn(this.$element, this.animationIn, function() {\n _this._updateARIA(true);\n this.trigger('on.zf.toggler');\n this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n });\n }\n else {\n Motion.animateOut(this.$element, this.animationOut, function() {\n _this._updateARIA(false);\n this.trigger('off.zf.toggler');\n this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n });\n }\n }\n\n _updateARIA(isOn) {\n var id = this.$element[0].id;\n $(`[data-open=\"${id}\"], [data-close=\"${id}\"], [data-toggle=\"${id}\"]`)\n .attr({\n 'aria-expanded': isOn ? true : false\n });\n }\n\n /**\n * Destroys the instance of Toggler on the element.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.toggler');\n }\n}\n\nToggler.defaults = {\n /**\n * Class of the element to toggle. It can be provided with or without \".\"\n * @option\n * @type {string}\n */\n toggler: undefined,\n /**\n * Tells the plugin if the element should animated when toggled.\n * @option\n * @type {boolean}\n * @default false\n */\n animate: false\n};\n\nexport {Toggler};\n","import $ from 'jquery';\nimport { GetYoDigits, ignoreMousedisappear } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Triggers } from './foundation.util.triggers';\nimport { Positionable } from './foundation.positionable';\n\n/**\n * Tooltip module.\n * @module foundation.tooltip\n * @requires foundation.util.box\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.triggers\n */\n\nclass Tooltip extends Positionable {\n /**\n * Creates a new instance of a Tooltip.\n * @class\n * @name Tooltip\n * @fires Tooltip#init\n * @param {jQuery} element - jQuery object to attach a tooltip to.\n * @param {Object} options - object to extend the default configuration.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Tooltip.defaults, this.$element.data(), options);\n this.className = 'Tooltip'; // ie9 back compat\n\n this.isActive = false;\n this.isClick = false;\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n }\n\n /**\n * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor.\n * @private\n */\n _init() {\n MediaQuery._init();\n var elemId = this.$element.attr('aria-describedby') || GetYoDigits(6, 'tooltip');\n\n this.options.tipText = this.options.tipText || this.$element.attr('title');\n this.template = this.options.template ? $(this.options.template) : this._buildTemplate(elemId);\n\n if (this.options.allowHtml) {\n this.template.appendTo(document.body)\n .html(this.options.tipText)\n .hide();\n } else {\n this.template.appendTo(document.body)\n .text(this.options.tipText)\n .hide();\n }\n\n this.$element.attr({\n 'title': '',\n 'aria-describedby': elemId,\n 'data-yeti-box': elemId,\n 'data-toggle': elemId,\n 'data-resize': elemId\n }).addClass(this.options.triggerClass);\n\n super._init();\n this._events();\n }\n\n _getDefaultPosition() {\n // handle legacy classnames\n var elementClassName = this.$element[0].className;\n if (this.$element[0] instanceof SVGElement) {\n elementClassName = elementClassName.baseVal;\n }\n var position = elementClassName.match(/\\b(top|left|right|bottom)\\b/g);\n return position ? position[0] : 'top';\n }\n\n _getDefaultAlignment() {\n return 'center';\n }\n\n _getHOffset() {\n if(this.position === 'left' || this.position === 'right') {\n return this.options.hOffset + this.options.tooltipWidth;\n } else {\n return this.options.hOffset\n }\n }\n\n _getVOffset() {\n if(this.position === 'top' || this.position === 'bottom') {\n return this.options.vOffset + this.options.tooltipHeight;\n } else {\n return this.options.vOffset\n }\n }\n\n /**\n * builds the tooltip element, adds attributes, and returns the template.\n * @private\n */\n _buildTemplate(id) {\n var templateClasses = (`${this.options.tooltipClass} ${this.options.templateClasses}`).trim();\n var $template = $('
    ').addClass(templateClasses).attr({\n 'role': 'tooltip',\n 'aria-hidden': true,\n 'data-is-active': false,\n 'data-is-focus': false,\n 'id': id\n });\n return $template;\n }\n\n /**\n * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding.\n * if the tooltip is larger than the screen width, default to full width - any user selected margin\n * @private\n */\n _setPosition() {\n super._setPosition(this.$element, this.template);\n }\n\n /**\n * reveals the tooltip, and fires an event to close any other open tooltips on the page\n * @fires Tooltip#closeme\n * @fires Tooltip#show\n * @function\n */\n show() {\n if (this.options.showOn !== 'all' && !MediaQuery.is(this.options.showOn)) {\n // console.error('The screen is too small to display this tooltip');\n return false;\n }\n\n var _this = this;\n this.template.css('visibility', 'hidden').show();\n this._setPosition();\n this.template.removeClass('top bottom left right').addClass(this.position)\n this.template.removeClass('align-top align-bottom align-left align-right align-center').addClass('align-' + this.alignment);\n\n /**\n * Fires to close all other open tooltips on the page\n * @event Closeme#tooltip\n */\n this.$element.trigger('closeme.zf.tooltip', this.template.attr('id'));\n\n\n this.template.attr({\n 'data-is-active': true,\n 'aria-hidden': false\n });\n _this.isActive = true;\n this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function() {\n //maybe do stuff?\n });\n /**\n * Fires when the tooltip is shown\n * @event Tooltip#show\n */\n this.$element.trigger('show.zf.tooltip');\n }\n\n /**\n * Hides the current tooltip, and resets the positioning class if it was changed due to collision\n * @fires Tooltip#hide\n * @function\n */\n hide() {\n var _this = this;\n this.template.stop().attr({\n 'aria-hidden': true,\n 'data-is-active': false\n }).fadeOut(this.options.fadeOutDuration, function() {\n _this.isActive = false;\n _this.isClick = false;\n });\n /**\n * fires when the tooltip is hidden\n * @event Tooltip#hide\n */\n this.$element.trigger('hide.zf.tooltip');\n }\n\n /**\n * adds event listeners for the tooltip and its anchor\n * TODO combine some of the listeners like focus and mouseenter, etc.\n * @private\n */\n _events() {\n const _this = this;\n const hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined');\n var isFocus = false;\n\n // `disableForTouch: Fully disable the tooltip on touch devices\n if (hasTouch && this.options.disableForTouch) return;\n\n if (!this.options.disableHover) {\n this.$element\n .on('mouseenter.zf.tooltip', function() {\n if (!_this.isActive) {\n _this.timeout = setTimeout(function() {\n _this.show();\n }, _this.options.hoverDelay);\n }\n })\n .on('mouseleave.zf.tooltip', ignoreMousedisappear(function() {\n clearTimeout(_this.timeout);\n if (!isFocus || (_this.isClick && !_this.options.clickOpen)) {\n _this.hide();\n }\n }));\n }\n\n if (hasTouch) {\n this.$element\n .on('tap.zf.tooltip touchend.zf.tooltip', function () {\n _this.isActive ? _this.hide() : _this.show();\n });\n }\n\n if (this.options.clickOpen) {\n this.$element.on('mousedown.zf.tooltip', function() {\n if (_this.isClick) {\n //_this.hide();\n // _this.isClick = false;\n } else {\n _this.isClick = true;\n if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) {\n _this.show();\n }\n }\n });\n } else {\n this.$element.on('mousedown.zf.tooltip', function() {\n _this.isClick = true;\n });\n }\n\n this.$element.on({\n // 'toggle.zf.trigger': this.toggle.bind(this),\n // 'close.zf.trigger': this.hide.bind(this)\n 'close.zf.trigger': this.hide.bind(this)\n });\n\n this.$element\n .on('focus.zf.tooltip', function() {\n isFocus = true;\n if (_this.isClick) {\n // If we're not showing open on clicks, we need to pretend a click-launched focus isn't\n // a real focus, otherwise on hover and come back we get bad behavior\n if(!_this.options.clickOpen) { isFocus = false; }\n return false;\n } else {\n _this.show();\n }\n })\n\n .on('focusout.zf.tooltip', function() {\n isFocus = false;\n _this.isClick = false;\n _this.hide();\n })\n\n .on('resizeme.zf.trigger', function() {\n if (_this.isActive) {\n _this._setPosition();\n }\n });\n }\n\n /**\n * adds a toggle method, in addition to the static show() & hide() functions\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Destroys an instance of tooltip, removes template element from the view.\n * @function\n */\n _destroy() {\n this.$element.attr('title', this.template.text())\n .off('.zf.trigger .zf.tooltip')\n .removeClass(this.options.triggerClass)\n .removeClass('top right left bottom')\n .removeAttr('aria-describedby data-disable-hover data-resize data-toggle data-tooltip data-yeti-box');\n\n this.template.remove();\n }\n}\n\nTooltip.defaults = {\n /**\n * Time, in ms, before a tooltip should open on hover.\n * @option\n * @type {number}\n * @default 200\n */\n hoverDelay: 200,\n /**\n * Time, in ms, a tooltip should take to fade into view.\n * @option\n * @type {number}\n * @default 150\n */\n fadeInDuration: 150,\n /**\n * Time, in ms, a tooltip should take to fade out of view.\n * @option\n * @type {number}\n * @default 150\n */\n fadeOutDuration: 150,\n /**\n * Disables hover events from opening the tooltip if set to true\n * @option\n * @type {boolean}\n * @default false\n */\n disableHover: false,\n /**\n * Disable the tooltip for touch devices.\n * This can be useful to make elements with a tooltip on it trigger their\n * action on the first tap instead of displaying the tooltip.\n * @option\n * @type {booelan}\n * @default false\n */\n disableForTouch: false,\n /**\n * Optional addtional classes to apply to the tooltip template on init.\n * @option\n * @type {string}\n * @default ''\n */\n templateClasses: '',\n /**\n * Non-optional class added to tooltip templates. Foundation default is 'tooltip'.\n * @option\n * @type {string}\n * @default 'tooltip'\n */\n tooltipClass: 'tooltip',\n /**\n * Class applied to the tooltip anchor element.\n * @option\n * @type {string}\n * @default 'has-tip'\n */\n triggerClass: 'has-tip',\n /**\n * Minimum breakpoint size at which to open the tooltip.\n * @option\n * @type {string}\n * @default 'small'\n */\n showOn: 'small',\n /**\n * Custom template to be used to generate markup for tooltip.\n * @option\n * @type {string}\n * @default ''\n */\n template: '',\n /**\n * Text displayed in the tooltip template on open.\n * @option\n * @type {string}\n * @default ''\n */\n tipText: '',\n touchCloseText: 'Tap to close.',\n /**\n * Allows the tooltip to remain open if triggered with a click or touch event.\n * @option\n * @type {boolean}\n * @default true\n */\n clickOpen: true,\n /**\n * Position of tooltip. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of tooltip relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, tooltip will first try to\n * position as defined by data-position and data-alignment, but reposition if\n * it would cause an overflow. @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * Less common for tooltips.\n * @option\n * @type {boolean}\n * @default false\n */\n allowBottomOverlap: false,\n /**\n * Distance, in pixels, the template should push away from the anchor on the Y axis.\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Distance, in pixels, the template should push away from the anchor on the X axis\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n /**\n * Distance, in pixels, the template spacing auto-adjust for a vertical tooltip\n * @option\n * @type {number}\n * @default 14\n */\n tooltipHeight: 14,\n /**\n * Distance, in pixels, the template spacing auto-adjust for a horizontal tooltip\n * @option\n * @type {number}\n * @default 12\n */\n tooltipWidth: 12,\n /**\n * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips,\n * allowing HTML may open yourself up to XSS attacks.\n * @option\n * @type {boolean}\n * @default false\n */\n allowHtml: false\n};\n\n/**\n * TODO utilize resize event trigger\n */\n\nexport {Tooltip};\n","import $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin }from './foundation.core.plugin';\n\nimport { Accordion } from './foundation.accordion';\nimport { Tabs } from './foundation.tabs';\n\n// The plugin matches the plugin classes with these plugin instances.\nvar MenuPlugins = {\n tabs: {\n cssClass: 'tabs',\n plugin: Tabs,\n open: (plugin, target) => plugin.selectTab(target),\n close: null /* not supported */,\n toggle: null /* not supported */,\n },\n accordion: {\n cssClass: 'accordion',\n plugin: Accordion,\n open: (plugin, target) => plugin.down($(target)),\n close: (plugin, target) => plugin.up($(target)),\n toggle: (plugin, target) => plugin.toggle($(target)),\n }\n};\n\n\n/**\n * ResponsiveAccordionTabs module.\n * @module foundation.responsiveAccordionTabs\n * @requires foundation.util.motion\n * @requires foundation.accordion\n * @requires foundation.tabs\n */\n\nclass ResponsiveAccordionTabs extends Plugin{\n constructor(element, options) {\n super(element, options);\n return this.options.reflow && this.storezfData || this;\n }\n\n /**\n * Creates a new instance of a responsive accordion tabs.\n * @class\n * @name ResponsiveAccordionTabs\n * @fires ResponsiveAccordionTabs#init\n * @param {jQuery} element - jQuery object to make into Responsive Accordion Tabs.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.$element.data('zfPluginBase', this);\n this.options = $.extend({}, ResponsiveAccordionTabs.defaults, this.$element.data(), options);\n\n this.rules = this.$element.data('responsive-accordion-tabs');\n this.currentMq = null;\n this.currentRule = null;\n this.currentPlugin = null;\n this.className = 'ResponsiveAccordionTabs'; // ie9 back compat\n if (!this.$element.attr('id')) {\n this.$element.attr('id',GetYoDigits(6, 'responsiveaccordiontabs'));\n }\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Menu by parsing the classes from the 'data-responsive-accordion-tabs' attribute on the element.\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n if (typeof this.rules === 'string') {\n let rulesTree = {};\n\n // Parse rules from \"classes\" pulled from data attribute\n let rules = this.rules.split(' ');\n\n // Iterate through every rule found\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i].split('-');\n let ruleSize = rule.length > 1 ? rule[0] : 'small';\n let rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n if (MenuPlugins[rulePlugin] !== null) {\n rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n }\n }\n\n this.rules = rulesTree;\n }\n\n this._getAllOptions();\n\n if (!$.isEmptyObject(this.rules)) {\n this._checkMediaQueries();\n }\n }\n\n _getAllOptions() {\n //get all defaults and options\n var _this = this;\n _this.allOptions = {};\n for (var key in MenuPlugins) {\n if (MenuPlugins.hasOwnProperty(key)) {\n var obj = MenuPlugins[key];\n try {\n var dummyPlugin = $('
      ');\n var tmpPlugin = new obj.plugin(dummyPlugin,_this.options);\n for (var keyKey in tmpPlugin.options) {\n if (tmpPlugin.options.hasOwnProperty(keyKey) && keyKey !== 'zfPlugin') {\n var objObj = tmpPlugin.options[keyKey];\n _this.allOptions[keyKey] = objObj;\n }\n }\n tmpPlugin.destroy();\n }\n catch(e) {\n console.warn(`Warning: Problems getting Accordion/Tab options: ${e}`);\n }\n }\n }\n }\n\n /**\n * Initializes events for the Menu.\n * @function\n * @private\n */\n _events() {\n this._changedZfMediaQueryHandler = this._checkMediaQueries.bind(this);\n $(window).on('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n }\n\n /**\n * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n * @function\n * @private\n */\n _checkMediaQueries() {\n var matchedMq, _this = this;\n // Iterate through each rule and find the last matching rule\n $.each(this.rules, function(key) {\n if (MediaQuery.atLeast(key)) {\n matchedMq = key;\n }\n });\n\n // No match? No dice\n if (!matchedMq) return;\n\n // Plugin already initialized? We good\n if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;\n\n // Remove existing plugin-specific CSS classes\n $.each(MenuPlugins, function(key, value) {\n _this.$element.removeClass(value.cssClass);\n });\n\n // Add the CSS class for the new plugin\n this.$element.addClass(this.rules[matchedMq].cssClass);\n\n // Create an instance of the new plugin\n if (this.currentPlugin) {\n //don't know why but on nested elements data zfPlugin get's lost\n if (!this.currentPlugin.$element.data('zfPlugin') && this.storezfData) this.currentPlugin.$element.data('zfPlugin',this.storezfData);\n this.currentPlugin.destroy();\n }\n this._handleMarkup(this.rules[matchedMq].cssClass);\n this.currentRule = this.rules[matchedMq];\n this.currentPlugin = new this.currentRule.plugin(this.$element, this.options);\n this.storezfData = this.currentPlugin.$element.data('zfPlugin');\n\n }\n\n _handleMarkup(toSet){\n var _this = this, fromString = 'accordion';\n var $panels = $('[data-tabs-content='+this.$element.attr('id')+']');\n if ($panels.length) fromString = 'tabs';\n if (fromString === toSet) {\n return;\n }\n\n var tabsTitle = _this.allOptions.linkClass?_this.allOptions.linkClass:'tabs-title';\n var tabsPanel = _this.allOptions.panelClass?_this.allOptions.panelClass:'tabs-panel';\n\n this.$element.removeAttr('role');\n var $liHeads = this.$element.children('.'+tabsTitle+',[data-accordion-item]').removeClass(tabsTitle).removeClass('accordion-item').removeAttr('data-accordion-item');\n var $liHeadsA = $liHeads.children('a').removeClass('accordion-title');\n\n if (fromString === 'tabs') {\n $panels = $panels.children('.'+tabsPanel).removeClass(tabsPanel).removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby');\n $panels.children('a').removeAttr('role').removeAttr('aria-controls').removeAttr('aria-selected');\n } else {\n $panels = $liHeads.children('[data-tab-content]').removeClass('accordion-content');\n }\n\n $panels.css({display:'',visibility:''});\n $liHeads.css({display:'',visibility:''});\n if (toSet === 'accordion') {\n $panels.each(function(key,value){\n $(value).appendTo($liHeads.get(key)).addClass('accordion-content').attr('data-tab-content','').removeClass('is-active').css({height:''});\n $('[data-tabs-content='+_this.$element.attr('id')+']').after('
      ').detach();\n $liHeads.addClass('accordion-item').attr('data-accordion-item','');\n $liHeadsA.addClass('accordion-title');\n });\n } else if (toSet === 'tabs') {\n var $tabsContent = $('[data-tabs-content='+_this.$element.attr('id')+']');\n var $placeholder = $('#tabs-placeholder-'+_this.$element.attr('id'));\n if ($placeholder.length) {\n $tabsContent = $('
      ').insertAfter($placeholder).attr('data-tabs-content',_this.$element.attr('id'));\n $placeholder.remove();\n } else {\n $tabsContent = $('
      ').insertAfter(_this.$element).attr('data-tabs-content',_this.$element.attr('id'));\n }\n $panels.each(function(key,value){\n var tempValue = $(value).appendTo($tabsContent).addClass(tabsPanel);\n var hash = $liHeadsA.get(key).hash.slice(1);\n var id = $(value).attr('id') || GetYoDigits(6, 'accordion');\n if (hash !== id) {\n if (hash !== '') {\n $(value).attr('id',hash);\n } else {\n hash = id;\n $(value).attr('id',hash);\n $($liHeadsA.get(key)).attr('href',$($liHeadsA.get(key)).attr('href').replace('#','')+'#'+hash);\n }\n }\n var isActive = $($liHeads.get(key)).hasClass('is-active');\n if (isActive) {\n tempValue.addClass('is-active');\n }\n });\n $liHeads.addClass(tabsTitle);\n };\n }\n\n /**\n * Opens the plugin pane defined by `target`.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to open.\n * @see Accordion.down\n * @see Tabs.selectTab\n * @function\n */\n open() {\n if (this.currentRule && typeof this.currentRule.open === 'function') {\n return this.currentRule.open(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Closes the plugin pane defined by `target`. Not availaible for Tabs.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to close.\n * @see Accordion.up\n * @function\n */\n close() {\n if (this.currentRule && typeof this.currentRule.close === 'function') {\n return this.currentRule.close(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Toggles the plugin pane defined by `target`. Not availaible for Tabs.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to toggle.\n * @see Accordion.toggle\n * @function\n */\n toggle() {\n if (this.currentRule && typeof this.currentRule.toggle === 'function') {\n return this.currentRule.toggle(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n * @function\n */\n _destroy() {\n if (this.currentPlugin) this.currentPlugin.destroy();\n $(window).off('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n }\n}\n\nResponsiveAccordionTabs.defaults = {};\n\nexport {ResponsiveAccordionTabs};\n","// Import jQuery and bind it.\nimport $ from \"jquery\";\nwindow.$ = $;\n\n// Import WhatInput.\nimport whatInput from \"what-input\";\n\n// Import Foundation and utilities. DO NOT REMOVE.\nimport { Foundation } from \"foundation-sites/js/foundation.core\";\nFoundation.addToJquery($);\nimport { MediaQuery } from \"foundation-sites/js/foundation.util.mediaQuery\";\nFoundation.MediaQuery = MediaQuery;\n\n// Uncomment 'import' AND 'Foundation.plugin' for each plugin you do not want to use.\n// import { Abide } from 'foundation-sites/js/foundation.abide'\n// Foundation.plugin(Abide, 'Abide')\n\nimport { Accordion } from \"foundation-sites/js/foundation.accordion\";\nFoundation.plugin(Accordion, \"Accordion\");\n\nimport { AccordionMenu } from \"foundation-sites/js/foundation.accordionMenu\";\nFoundation.plugin(AccordionMenu, \"AccordionMenu\");\n\n// import { Drilldown } from 'foundation-sites/js/foundation.drilldown'\n// Foundation.plugin(Drilldown, 'Drilldown')\n\nimport { Dropdown } from \"foundation-sites/js/foundation.dropdown\";\nFoundation.plugin(Dropdown, \"Dropdown\");\n\nimport { DropdownMenu } from \"foundation-sites/js/foundation.dropdownMenu\";\nFoundation.plugin(DropdownMenu, \"DropdownMenu\");\n\nimport { Equalizer } from \"foundation-sites/js/foundation.equalizer\";\nFoundation.plugin(Equalizer, \"Equalizer\");\n\n// import { Interchange } from 'foundation-sites/js/foundation.interchange'\n// Foundation.plugin(Interchange, 'Interchange')\n\n// import { Magellan } from 'foundation-sites/js/foundation.magellan'\n// Foundation.plugin(Magellan, 'Magellan')\n\n// import { OffCanvas } from 'foundation-sites/js/foundation.offcanvas'\n// Foundation.plugin(OffCanvas, 'OffCanvas')\n\n// import { Orbit } from 'foundation-sites/js/foundation.orbit'\n// Foundation.plugin(Orbit, 'Orbit')\n\nimport { ResponsiveMenu } from \"foundation-sites/js/foundation.responsiveMenu\";\nFoundation.plugin(ResponsiveMenu, \"ResponsiveMenu\");\n\nimport { ResponsiveToggle } from \"foundation-sites/js/foundation.responsiveToggle\";\nFoundation.plugin(ResponsiveToggle, \"ResponsiveToggle\");\n\nimport { Reveal } from \"foundation-sites/js/foundation.reveal\";\nFoundation.plugin(Reveal, \"Reveal\");\n\nimport { Slider } from \"foundation-sites/js/foundation.slider\";\nFoundation.plugin(Slider, \"Slider\");\n\nimport { SmoothScroll } from \"foundation-sites/js/foundation.smoothScroll\";\nFoundation.plugin(SmoothScroll, \"SmoothScroll\");\n\nimport { Sticky } from \"foundation-sites/js/foundation.sticky\";\nFoundation.plugin(Sticky, \"Sticky\");\n\nimport { Tabs } from \"foundation-sites/js/foundation.tabs\";\nFoundation.plugin(Tabs, \"Tabs\");\n\nimport { Toggler } from \"foundation-sites/js/foundation.toggler\";\nFoundation.plugin(Toggler, \"Toggler\");\n\nimport { Tooltip } from \"foundation-sites/js/foundation.tooltip\";\nFoundation.plugin(Tooltip, \"Tooltip\");\n\nimport { ResponsiveAccordionTabs } from \"foundation-sites/js/foundation.responsiveAccordionTabs\";\nFoundation.plugin(ResponsiveAccordionTabs, \"ResponsiveAccordionTabs\");\n\n// Init.\nwindow.addEventListener(\n \"load\",\n () => {\n $(document).foundation();\n },\n { passive: true }\n);\n\n$(document).on(\"closed.zf.reveal\", function () {\n Foundation.reInit(\"sticky\");\n});\n","// Masonry layout.\nimport Macy from \"macy\";\n\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n if (typeof masonryGrids !== \"undefined\") {\n // Loop through each registered masonry grids and initialize them.\n masonryGrids = masonryGrids.map(({ container, id }) => {\n const instance = Macy({\n container,\n columns: 1,\n trueOrder: true,\n waitForImages: true,\n mobileFirst: true,\n breakAt: {\n 640: 2,\n 1024: 3,\n },\n });\n instance.recalculate();\n\n // Return instance for usage with AJAX content.\n return {\n id,\n container,\n instance,\n };\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\nimport objectFitImages from \"object-fit-images\";\n\n$(function () {\n // Adds support for 'object-fit: cover;'.\n objectFitImages();\n});\n","var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var i,n=1,s=arguments.length;ns.endVal;s.frameVal=n?s.endVal:s.frameVal,s.frameVal=Number(s.frameVal.toFixed(s.options.decimalPlaces)),s.printValue(s.frameVal),i1?s.options.decimal+o[1]:\"\",s.options.useGrouping){e=\"\";for(var l=0,h=n.length;lwindow.scrollY&&t.paused?(t.paused=!1,setTimeout(function(){return t.start()},t.options.scrollSpyDelay),t.options.scrollSpyOnce&&(t.once=!0)):window.scrollY>s&&!t.paused&&t.reset()}},t.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold&&this.options.useEasing){this.finalEndVal=t;var n=this.countDown?1:-1;this.endVal=t+n*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;null!==this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,null==this.finalEndVal&&this.resetDuration(),this.finalEndVal=null,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},t.prototype.printValue=function(t){var i=this.formattingFn(t);\"INPUT\"===this.el.tagName?this.el.value=i:\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i},t.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \".concat(t),null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},t}();export{CountUp};","import { CountUp } from \"countup.js\";\n\nconst event = new Event(\"wpsoup.counter.completed\", {\n bubbles: true,\n cancelable: true,\n composed: false,\n});\n\nfunction registerEventListeners() {\n const elements = document.querySelectorAll(\".counter\");\n const intersectionSupported = intersectionListenerSupported();\n\n if (intersectionSupported) {\n const intersectionObserver = new IntersectionObserver(animateModern, {\n root: null,\n rootMargin: \"20px\",\n threshold: 0.5,\n });\n\n for (let i = 0; i < elements.length; i++) {\n intersectionObserver.observe(elements[i]);\n }\n } else {\n if (window.addEventListener) {\n animateLegacy(elements);\n\n window.addEventListener(\n \"scroll\",\n (e) => {\n animateLegacy(elements);\n },\n { passive: true }\n );\n }\n }\n}\n\nfunction animateLegacy(elements) {\n elements.forEach((element) => {\n if (elementIsInView(element)) {\n animateElement(element);\n }\n });\n}\n\nfunction animateModern(elements) {\n elements.forEach((element) => {\n if (element.isIntersecting) {\n animateElement(element);\n }\n });\n}\n\nfunction animateElement(element) {\n const target = element.target ? element.target : element;\n const dataset = target.dataset;\n\n const countUp = new CountUp(target, dataset.counterEnd, {\n duration: dataset.counterDuration,\n useGrouping: dataset.counterGrouping ? true : false,\n separator: dataset.counterSeparator,\n decimal: dataset.counterDecimal,\n });\n target.counter = countUp;\n countUp.start(() => {\n // Create event listener.\n target.dispatchEvent(event);\n });\n}\n\nfunction elementIsInView(element) {\n let top = element.offsetTop;\n let left = element.offsetLeft;\n const width = element.offsetWidth;\n const height = element.offsetHeight;\n\n while (element.offsetParent) {\n element = element.offsetParent;\n top += element.offsetTop;\n left += element.offsetLeft;\n }\n\n return (\n top >= window.pageYOffset &&\n left >= window.pageXOffset &&\n top + height <= window.pageYOffset + window.innerHeight &&\n left + width <= window.pageXOffset + window.innerWidth\n );\n}\n\nfunction intersectionListenerSupported() {\n return (\n \"IntersectionObserver\" in window &&\n \"IntersectionObserverEntry\" in window &&\n \"intersectionRatio\" in window.IntersectionObserverEntry.prototype\n );\n}\n\n(() => {\n registerEventListeners();\n})();\n","import axios from \"/srv/www/d/deoorsprong.nl/vhosts/www/htdocs/content/mu-plugins/wp-soup-plugin/node_modules/axios\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n () => {\n const favoriteButtons = document.querySelectorAll(\".favorite-button\");\n for (const button of favoriteButtons) {\n button.addEventListener(\n \"click\",\n function (event) {\n const postID = this.dataset.postId;\n if (!postID) {\n return;\n }\n\n const action = this.dataset.action;\n if (action === \"add\") {\n addToFavorites(postID, button);\n } else if (action === \"remove\") {\n removeFromFavorites(postID, button);\n }\n },\n { passive: true }\n );\n }\n\n function addToFavorites(postID, button) {\n let formData = new FormData();\n formData.append(\"action\", \"add_to_favorites\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"post_id\", postID);\n\n axios.post(themosis.ajaxurl, formData).then((response) => {\n if (response.data.success) {\n button.classList.add(\"is-favorited\");\n button.querySelector(\"svg\").outerHTML = themosis.wpsoup.favorites.button_icon_favorited;\n button.dataset.action = \"remove\";\n }\n });\n }\n\n function removeFromFavorites(postID, button) {\n let formData = new FormData();\n formData.append(\"action\", \"remove_from_favorites\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"post_id\", postID);\n\n axios.post(themosis.ajaxurl, formData).then((response) => {\n if (response.data.success) {\n button.classList.remove(\"is-favorited\");\n button.querySelector(\"svg\").outerHTML = themosis.wpsoup.favorites.button_icon;\n button.dataset.action = \"add\";\n }\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\nwindow.addEventListener(\n \"load\",\n () => {\n if (Foundation.MediaQuery.atLeast(\"large\")) {\n const directions = [\"left\", \"right\"];\n directions.forEach((direction) => {\n const columns = $(`.wp-block-column.half-width-image-${direction}`);\n if (columns.length) {\n columns.each(function () {\n const column = $(this);\n const container = $(this).closest(\".wp-block-ms-container\");\n const containerId = container.attr(\"id\");\n const img = $(this).find(\"img\");\n let src = img.attr(\"src\");\n if (typeof src === \"undefined\") {\n return;\n }\n\n if (typeof LazyLoad === \"function\") {\n if (!src.includes(\"data:image/svg+xml\")) {\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n }\n\n img.on(\"load\", function () {\n src = img.attr(\"src\");\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n });\n } else {\n if (!src.includes(\"data:image/svg+xml\")) {\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n }\n }\n });\n }\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n () => {\n /**\n * Add submenu toggle functionality.\n */\n const menus = document.querySelectorAll(\".js-ms-has-submenu\");\n let i = 0;\n // For every menu item with a submenu.\n for (const menu of menus) {\n // Apply id for toggling purposes.\n const randomID = \"id-\" + i++;\n const submenu = menu.querySelector(\".submenu\");\n if (submenu) {\n submenu.setAttribute(\"id\", randomID);\n }\n const toggle = menu.querySelector(\".toggle\");\n if (toggle) {\n toggle.setAttribute(\"data-toggle\", randomID);\n }\n\n // On toggling.\n $(`#${randomID}`).on(\"on.zf.toggler off.zf.toggler\", function (event) {\n if (event.target !== this) return;\n\n switch (event.type) {\n case \"on\":\n $(this).slideDown({\n start: function () {\n $(this).css({\n display: \"flex\",\n });\n },\n });\n break;\n case \"off\":\n $(this).slideUp();\n break;\n }\n\n // Recalculate sticky height if sticky exists.\n if ($(\".ms-menu .sticky\").length) {\n $(\".ms-menu .sticky\").foundation(\"_calc\", true);\n }\n });\n }\n\n // Recalculate sticky height on toggling submenu.\n $(\".menu-mobile\").on(\"on.zf.toggler off.zf.toggler\", function (event) {\n if (event.target !== this) return;\n\n switch (event.type) {\n case \"on\":\n $(this).slideDown();\n break;\n case \"off\":\n $(this).slideUp();\n break;\n }\n\n // Recalculate sticky height if sticky exists.\n if ($(\".ms-menu .sticky\").length) {\n $(\".ms-menu .sticky\").foundation(\"_calc\", true);\n }\n });\n\n // Properly update the ARIA states on focus (keyboard) and mouse over events.\n $('[role=\"menubar\"]').on(\"focus.aria mouseenter.aria\", '[aria-haspopup=\"true\"]', (event) => {\n $(event.currentTarget).attr(\"aria-expanded\", true);\n });\n\n // Properly update the ARIA states on blur (keyboard) and mouse out events.\n $('[role=\"menubar\"]').on(\"blur.aria mouseleave.aria\", '[aria-haspopup=\"true\"]', (event) => {\n $(event.currentTarget).attr(\"aria-expanded\", false);\n });\n\n const overlayToggles = document.querySelectorAll(\".trigger-overlay\");\n for (const toggle of overlayToggles) {\n toggle.addEventListener(\n \"click\",\n () => {\n const body = document.querySelector(\"body\");\n const logo = document.querySelector(\".logo-image-overlay\");\n const logoMobile = document.querySelector(\".logo-mobile-image-overlay\");\n const language = document.querySelector(\".language-block\");\n const overlay = document.querySelector(\".top-bar-overlay\");\n const overlayItems = overlay.querySelectorAll(\"li\");\n if (overlay.classList.contains(\"visible\")) {\n body.classList.remove(\"overlay-visible\");\n overlay.classList.remove(\"visible\");\n if (logo) {\n logo.classList.remove(\"fadeInUp\");\n }\n if (logoMobile) {\n logoMobile.classList.remove(\"fadeInUp\");\n }\n if (language) {\n language.classList.remove(\"fadeInUp\");\n }\n for (const li of overlayItems) {\n li.classList.remove(\"fadeInUp\");\n }\n } else {\n body.classList.add(\"overlay-visible\");\n overlay.classList.add(\"visible\");\n if (logo) {\n logo.classList.add(\"fadeInUp\");\n }\n if (logoMobile) {\n logoMobile.classList.add(\"fadeInUp\");\n }\n if (language) {\n language.classList.add(\"fadeInUp\");\n }\n for (const li of overlayItems) {\n li.classList.add(\"fadeInUp\");\n }\n }\n },\n { passive: true }\n );\n }\n\n const toggleArrow = document.querySelector(\".hide.icon-arrow\");\n if (toggleArrow) {\n const submenuTogglesCheckInterval = setInterval(function () {\n const submenuToggles = document.getElementsByClassName(\"submenu-toggle\");\n\n if (submenuToggles.length !== 0) {\n for (let toggle of submenuToggles) {\n if (toggle.getElementsByTagName(\"svg\").length === 0) {\n toggle.innerHTML += toggleArrow.innerHTML;\n }\n }\n\n clearInterval(submenuTogglesCheckInterval);\n }\n });\n }\n\n const searchBlockButton = document.querySelector(\".search-block-button\");\n const searchFormBlock = document.querySelector(\".search-form-block\");\n if (searchBlockButton) {\n searchBlockButton.addEventListener(\n \"click\",\n () => {\n searchBlockButton.classList.toggle(\"visible\");\n if (searchFormBlock) {\n searchFormBlock.classList.toggle(\"visible\");\n }\n },\n { passive: true }\n );\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\nimport Swiper from \"swiper\";\n\nif ($(\".woocommerce .product-image-slider\").length) {\n const galleryThumbs = new Swiper(\".woocommerce .product-thumbnail-slider\", {\n slidesPerView: 5,\n freeMode: true,\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n scrollbar: {\n el: \".swiper-scrollbar\",\n hide: true,\n },\n });\n\n if ($(\".woocommerce .product-thumbnail-slider\").length) {\n const galleryTop = new Swiper(\".woocommerce .product-image-slider\", {\n autoHeight: true,\n navigation: {\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\",\n },\n thumbs: {\n swiper: galleryThumbs,\n },\n });\n }\n}\n\n$(document).on(\"change input\", \".woocommerce-cart-form .cart_item :input\", function (e) {\n $('.woocommerce-cart-form :input[name=\"update_cart\"]').prop(\"disabled\", false);\n});\n\n$(document.body).on(\"change blur\", \"form.woocommerce-cart-form .qty-field select\", function (e) {\n const select = $(this);\n const value = select.val();\n const parent = select.parent();\n parent.find(\"input\").val(value);\n});\n","import $ from \"jquery\";\n\nif (wp && wp.data) {\n if ($(window).width() > 600 && $(\"body\").hasClass(\"custom-admin-styling\")) {\n $(\"html\").css(\"padding-top\", \"50px\");\n }\n\n $(window).on(\"resize\", () => {\n if ($(\"body\").hasClass(\"custom-admin-styling\")) {\n if ($(window).width() > 600) {\n if ($(\"html\").css(\"padding-top\") != \"50px\") {\n $(\"html\").css(\"padding-top\", \"50px\");\n }\n } else {\n $(\"html\").css(\"padding-top\", \"\");\n }\n }\n });\n\n document.addEventListener(\"DOMContentLoaded\", () => {\n const gutenbergLoadCheck = setInterval(() => {\n const anchors = $(\"[data-block] a\");\n if (anchors.length > 0) {\n anchors.on(\"click\", (e) => {\n e.preventDefault();\n });\n\n clearInterval(gutenbergLoadCheck);\n }\n }, 100);\n\n const editPost = wp.data.select(\"core/edit-post\");\n if (editPost) {\n editPost.isFeatureActive(\"fullscreenMode\") &&\n wp.data.dispatch(\"core/edit-post\").toggleFeature(\"fullscreenMode\");\n }\n });\n}\n","import $ from \"jquery\";\nimport axios from \"axios\";\n\n$(() => {\n $(\".load-more\").on(\"click\", function () {\n const id = $(this).data(\"id\");\n const fields = $(this).data(\"fields\");\n if (!fields) {\n return;\n }\n\n const initialOffset = $(this).data(\"initial-offset\") ?? 0;\n const offset = $(`#${id} .related-pages .related-page-card:not([class$=\"included\"])`).length ?? 0;\n const masonry = $(this).data(\"is-masonry\") ?? 0;\n const slider = $(this).data(\"is-slider\") ?? 0;\n const textLoadMore = $(this).data(\"text-load-more\");\n const textLoading = $(this).data(\"text-loading\");\n const textLoadFailed = $(this).data(\"text-load-failed\");\n\n // Data to send back to WordPress.\n const formData = new FormData();\n formData.append(\"action\", \"load_posts_by_ajax\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"offset\", initialOffset + offset);\n formData.append(\"fields\", JSON.stringify(fields));\n\n // Change button text to loading text.\n $(`#${id} .load-more`).html(textLoading);\n\n // Do request.\n axios\n .post(themosis.ajaxurl, formData)\n .then(({ data }) => {\n // Create a placeholder div to store retrieved posts.\n const cards = document.createElement(\"div\");\n cards.innerHTML = data;\n\n // If retrieved posts length is smaller than the amount to load,\n // hide the button, else replace text with initial text.\n if (cards.children.length < fields.ajax_amount_to_load) {\n $(`#${id} .load-more`).remove();\n } else {\n $(`#${id} .load-more`).html(textLoadMore);\n }\n\n // Append loaded posts to the end.\n $(`#${id} .related-pages`).append(data);\n\n // Reinit masonry or equalizer.\n if (slider) {\n const instance = cardSliders.find((x) => x.id === id).instance;\n instance.update();\n }\n\n // Reinit masonry or equalizer.\n if (masonry) {\n const instance = masonryGrids.find((x) => x.id === id).instance;\n instance.runOnImageLoad(function () {\n instance.recalculate(true);\n }, true);\n } else {\n Foundation.reInit(\"equalizer\");\n }\n })\n .catch((error) => {\n $(`#${id} .load-more`).html(textLoadFailed);\n });\n });\n});\n","import $ from \"jquery\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n function () {\n $(\".ms_tag-filter .smart-tags\").change(function () {\n const $hiddenInput = $(\".ms_tag-filter .hidden-input\");\n const $emptyInput = $(\".ms_tag-filter .empty-input\");\n const $smartTag = $(this).val();\n\n $.ajax({\n url: themosis.ajaxurl,\n type: \"POST\",\n cache: false,\n data: {\n action: \"populate_posts_with_tag\",\n smart_tag: $smartTag,\n },\n success: function (data) {\n const $select = $(\".ms_tag-filter .posts-with-tag\");\n if (!data || data.length === 0) {\n $select.html(``);\n } else {\n $select.html(`${data}`);\n }\n },\n });\n });\n\n $(\".ms_tag-filter .posts-with-tag\").change(function () {\n const options = this.options;\n const selectedOption = this.options[this.selectedIndex];\n const selectedSmartTagLabel =\n document.querySelector(\".ms_tag-filter .smart-tags\").options[\n document.querySelector(\".ms_tag-filter .smart-tags\").selectedIndex\n ].label;\n\n if (options && selectedOption.value !== \"\") {\n if (typeof ga !== \"undefined\" && typeof ga.getAll === \"function\") {\n new Promise((resolve, _) => {\n const analyticsGTMID = ga.getAll()[0].get(\"trackingId\");\n ga(\n `gtag_${analyticsGTMID}.send`,\n \"event\",\n \"Tag filter\",\n \"redirect\",\n selectedSmartTagLabel + \" -> \" + selectedOption.label\n );\n resolve();\n }).then(() => {\n // Redirect to the selected option.\n window.location = this.options[this.selectedIndex].value;\n });\n } else {\n // Redirect to the selected option.\n window.location = this.options[this.selectedIndex].value;\n }\n }\n });\n },\n { passive: true }\n);\n","import Swiper, { Navigation, Pagination, Scrollbar, Autoplay, Thumbs, Controller, EffectCoverflow } from \"swiper\";\nSwiper.use([Navigation, Pagination, Scrollbar, Autoplay, Thumbs, Controller, EffectCoverflow]);\n\n/**\n * Dynamically intialize the `.usp-slider`'s.\n */\n\n\n function msInitializeUSPSlider() {\n const slider = document.querySelector(`.usp-slider`);\n if (slider) {\n let options = slider.dataset.sliderOptions;\n options = JSON.parse(options);\n const uspSlider = new Swiper(`.usp-slider`, options);\n }\n}\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n function () {\n msInitializeUSPSlider();\n },\n { passive: true }\n);\n\n","import $ from \"jquery\";\n\nwindow.addEventListener(\n \"load\",\n () => {\n if ($(\".scrollhide-nav\").length > 0 && Foundation.MediaQuery.only(\"small\")) {\n let prev = 0;\n const height = $(\".ms_thintopbar\").outerHeight();\n\n $(window).on(\"scroll\", () => {\n const scrollTop = $(window).scrollTop();\n $(\".scrollhide-nav\").toggleClass(\"hidden\", scrollTop > prev);\n\n let offset = 0;\n if (scrollTop > prev) {\n offset = 0;\n } else {\n offset = height - 1;\n }\n\n $(\".ms-menu .sticky\").attr(\"style\", `top: ${offset}px !important`);\n\n prev = scrollTop;\n });\n\n $(\".ms-menu .sticky\").on(\"sticky.zf.unstuckfrom:top\", function () {\n $(\".ms-menu .sticky\").attr(\"style\", `margin-top: ${height - 1}px !important`);\n });\n $(\".ms-menu .sticky\").on(\"sticky.zf.stuckto:top\", function () {\n $(\".ms-menu .sticky\").attr(\"style\", `margin-top: 0px !important`);\n });\n }\n },\n { passive: true }\n);\n","import $ from \"/srv/www/d/deoorsprong.nl/vhosts/www/htdocs/content/mu-plugins/wp-soup-plugin/node_modules/jquery\";\n\n$(document).ready(function() {\n //\n});\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","function setCookie(cname, cvalue, exdays) {\n const d = new Date();\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n const expires = \"expires=\" + d.toUTCString();\n document.cookie = cname + \"=\" + cvalue + \";\" + expires;\n}\n\nconst translationNotice = document.querySelector(\".automatic-translation-notice\");\nif (translationNotice) {\n translationNotice\n .querySelector(\"button\")\n .addEventListener(\"click\", (e) => setCookie(\"hide-automatic-translation-notice\", true, 7), { passive: true });\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"dist/\",t(0)}([function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute(\"data-aos\"),e.node.removeAttribute(\"data-aos-easing\"),e.node.removeAttribute(\"data-aos-duration\"),e.node.removeAttribute(\"data-aos-delay\")})},S=function(e){return e===!0||\"mobile\"===e&&p.default.mobile()||\"phone\"===e&&p.default.phone()||\"tablet\"===e&&p.default.tablet()||\"function\"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\\n aos: MutationObserver is not supported on this browser,\\n code mutations observing has been disabled.\\n You may have to call \"refreshHard()\" by yourself.\\n '),x.disableMutationObserver=!0),document.querySelector(\"body\").setAttribute(\"data-aos-easing\",x.easing),document.querySelector(\"body\").setAttribute(\"data-aos-duration\",x.duration),document.querySelector(\"body\").setAttribute(\"data-aos-delay\",x.delay),\"DOMContentLoaded\"===x.startEvent&&[\"complete\",\"interactive\"].indexOf(document.readyState)>-1?j(!0):\"load\"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener(\"resize\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"orientationchange\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"scroll\",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready(\"[data-aos]\",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){\"use strict\";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?x(u(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if(\"function\"!=typeof e)throw new TypeError(s);return i(o)&&(r=\"leading\"in o?!!o.leading:r,a=\"trailing\"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t=\"undefined\"==typeof e?\"undefined\":c(e);return!!e&&(\"object\"==t||\"function\"==t)}function r(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":c(e))}function a(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":c(e))||r(e)&&k.call(e)==d}function u(e){if(\"number\"==typeof e)return e;if(a(e))return f;if(i(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(l,\"\");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=\"Expected a function\",f=NaN,d=\"[object Symbol]\",l=/^\\s+|\\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y=\"object\"==(\"undefined\"==typeof t?\"undefined\":c(t))&&t&&t.Object===Object&&t,g=\"object\"==(\"undefined\"==typeof self?\"undefined\":c(self))&&self&&self.Object===Object&&self,h=y||g||Function(\"return this\")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){\"use strict\";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?k(a(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t=\"undefined\"==typeof e?\"undefined\":u(e);return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":u(e))}function r(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":u(e))||i(e)&&w.call(e)==f}function a(e){if(\"number\"==typeof e)return e;if(r(e))return s;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(d,\"\");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c=\"Expected a function\",s=NaN,f=\"[object Symbol]\",d=/^\\s+|\\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v=\"object\"==(\"undefined\"==typeof t?\"undefined\":u(t))&&t&&t.Object===Object&&t,y=\"object\"==(\"undefined\"==typeof self?\"undefined\":u(self))&&self&&self.Object===Object&&self,g=v||y||Function(\"return this\")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){\"use strict\";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;te.position?e.node.classList.add(\"aos-animate\"):\"undefined\"!=typeof o&&(\"false\"===o||!n&&\"true\"!==o)&&e.node.classList.remove(\"aos-animate\")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add(\"aos-init\"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute(\"data-aos-offset\"),anchor:e.getAttribute(\"data-aos-anchor\"),anchorPlacement:e.getAttribute(\"data-aos-anchor-placement\")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case\"top-bottom\":break;case\"center-bottom\":n+=e.offsetHeight/2;break;case\"bottom-bottom\":n+=e.offsetHeight;break;case\"top-center\":n+=i/2;break;case\"bottom-center\":n+=i/2+e.offsetHeight;break;case\"center-center\":n+=i/2+e.offsetHeight/2;break;case\"top-top\":n+=i;break;case\"bottom-top\":n+=e.offsetHeight+i;break;case\"center-top\":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-(\"BODY\"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-(\"BODY\"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){return e=e||document.querySelectorAll(\"[data-aos]\"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","window.addEventListener(\n \"load\",\n () => {\n // Do IE stuff\n if (window.document.documentMode) {\n if (Foundation.MediaQuery.current !== \"small\") {\n const columns = document.querySelectorAll(\".wp-block-column\");\n for (const column of columns) {\n const flexBasis = column.style.flexBasis;\n const isMargin = column.parentElement.classList.contains(\"margin\");\n if (flexBasis && !isMargin) {\n column.style.setAttribute(\"width\", flexBasis);\n column.style.setProperty(\"flex-basis\", \"auto\", \"important\");\n } else if (flexBasis && isMargin) {\n column.style.setAttribute(\"width\", `calc(${flexBasis} - 2rem)`);\n column.style.setProperty(\"flex-basis\", \"auto\", \"important\");\n }\n }\n }\n } else {\n if (Foundation.MediaQuery.current !== \"small\") {\n const columns = document.querySelectorAll(\".wp-block-column\");\n for (const column of columns) {\n const flexBasis = column.style.flexBasis;\n const isMargin = column.parentElement.classList.contains(\"margin\");\n if (flexBasis && isMargin) {\n column.style.setProperty(\"flex-basis\", `calc(${flexBasis} - 2rem)`, \"important\");\n }\n }\n }\n }\n },\n { passive: true }\n);\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","/**\n * Set scrollbar sizes\n */\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n function setScrollbarSize() {\n // Add temporary box to wrapper.\n let scrollbox = document.createElement(\"div\");\n // Make box scrollable.\n scrollbox.style.overflow = \"scroll\";\n // Append box to document.\n document.body.appendChild(scrollbox);\n // Measure inner width of box.\n let scrollBarWidth = scrollbox.offsetWidth - scrollbox.clientWidth;\n // Remove box.\n document.body.removeChild(scrollbox);\n\n if (!(document.body.scrollHeight > window.innerHeight)) {\n scrollBarWidth = 0;\n }\n\n if (scrollBarWidth !== 0) {\n document.body.classList.add(\"has-scrollbar\");\n document.body.setAttribute(\"style\", `--scroll-bar: ${scrollBarWidth}px`);\n } else {\n document.body.classList.remove(\"has-scrollbar\");\n }\n }\n\n setScrollbarSize();\n window.addEventListener(\"resize\", setScrollbarSize, { passive: true });\n\n const epve = document.querySelector(\".edit-post-visual-editor\");\n if (epve !== null) {\n function getEditorWidth() {\n const width = epve.offsetWidth;\n document.body.setAttribute(\"style\", `--editor-width: ${width - 2}px`);\n }\n\n getEditorWidth();\n window.addEventListener(\"resize\", getEditorWidth, { passive: true });\n }\n\n // const adminToolbar = document.querySelector(\"#wpadminbar\");\n // if (adminToolbar !== null) {\n // const html = document.querySelector(\"html:not(.wp-toolbar)\");\n // if (html !== null) {\n // html.setAttribute(\"style\", \"margin-top: 50px !important;\");\n // }\n // }\n },\n { passive: true }\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","function iOS() {\n return (\n (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1)) &&\n !window.MSStream\n );\n}\n\nwindow.addEventListener(\"load\", () => {\n if (iOS()) {\n const containers = document.querySelectorAll(\".wp-block-ms-container\");\n if (containers.length) {\n [...containers].forEach((container) =>\n container.style.setProperty(\"background-attachment\", \"scroll\", \"important\")\n );\n }\n }\n});\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","/**\n * Dynamically intialize the `.review-slider`'s.\n */\nfunction msInitializeReviewSlider() {\n const slider = document.querySelector(`.review-slider`);\n if (slider) {\n let options = slider.dataset.sliderOptions;\n options = JSON.parse(options);\n const reviewSlider = new Swiper(`.review-slider`, options);\n }\n}\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n function () {\n msInitializeReviewSlider();\n },\n { passive: true }\n);\n\nif (typeof acf !== \"undefined\") {\n acf.addAction(`render_block_preview`, function ($el, attributes) {\n msInitializeReviewSlider();\n });\n}\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * SSR Window 4.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: October 27, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","export default function transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n\n if (!found && !el.getRootNode) {\n return null;\n }\n\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n } // Toggle navigation, pagination, scrollbar\n\n\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor() {\n let el;\n let params;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n\n if (exact === void 0) {\n exact = false;\n }\n\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n if (!$el.children) {\n return $($el).children(getWrapperSelector());\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler() {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || $([])).each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (threshold === void 0) {\n threshold = 0.5;\n }\n\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import { getWindow } from 'ssr-window';\nexport default function Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n init();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n destroy();\n };\n\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","export default function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n init();\n render();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n if (!$el) return;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`
      `);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.scrollbar;\n const $el = swiper.scrollbar.$el;\n\n if ($el) {\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n\n disableDraggable();\n }\n\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n init();\n updateSize();\n setTranslate();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick } from '../../shared/utils.js';\nexport default function Controller(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n });\n swiper.controller = {\n control: undefined\n };\n\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\n }\n }\n\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}","/* eslint no-underscore-dangle: \"off\" */\n\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\nexport default function Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n emit('autoplayPause');\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n}","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.js';\nexport default function Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {// newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n } // Activate thumbs\n\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","export default function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return; // remove shadows\n\n swiper.slides.each(slideEl => {\n const $slideEl = swiper.$(slideEl);\n $slideEl.find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').remove();\n }); // create new one\n\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}","export default function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden'\n });\n }\n\n return $slideEl;\n}","import $ from './dom.js';\nexport default function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`
      `);\n $shadowContainer.append($shadowEl);\n }\n\n return $shadowEl;\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nexport default function EffectCoverflow(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth; // Each slide offset from center\n\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n}","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","document.addEventListener(\n \"DOMContentLoaded\",\n () => {\n // Load all blocks on the page.\n const featuredMenuItems = document.querySelectorAll(\".ms_featured-menu-items\");\n for (menu of featuredMenuItems) {\n // Get all previews and menu links from current block.\n const previews = menu.querySelectorAll(\".preview\");\n const menuLinks = menu.querySelectorAll(\"a\");\n for (link of menuLinks) {\n // Get the target.\n const target = link.dataset?.target;\n link.addEventListener(\n \"mouseover\",\n (event) => {\n for (preview of previews) {\n if (preview.dataset?.content === target) {\n preview.classList.remove(\"hide\");\n } else {\n preview.classList.add(\"hide\");\n }\n }\n },\n { passive: true }\n );\n }\n }\n },\n { passive: true }\n);\n","/*!\n * parallax.js v1.5.0 (http://pixelcog.github.io/parallax.js/)\n * @copyright 2016 PixelCog, Inc.\n * @license MIT (https://github.com/pixelcog/parallax.js/blob/master/LICENSE)\n */\n\n(function ($, window, document, undefined) {\n // Polyfill for requestAnimationFrame\n // via: https://gist.github.com/paulirish/1579671\n\n (function () {\n var lastTime = 0;\n var vendors = [\"ms\", \"moz\", \"webkit\", \"o\"];\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + \"RequestAnimationFrame\"];\n window.cancelAnimationFrame =\n window[vendors[x] + \"CancelAnimationFrame\"] || window[vendors[x] + \"CancelRequestAnimationFrame\"];\n }\n\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function (callback) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n })();\n\n // Parallax Constructor\n\n function Parallax(element, options) {\n var self = this;\n\n if (typeof options == \"object\") {\n delete options.refresh;\n delete options.render;\n $.extend(this, options);\n }\n\n this.$element = $(element);\n\n if (!this.imageSrc && this.$element.is(\"img\")) {\n this.imageSrc = this.$element.attr(\"src\");\n }\n\n var positions = (this.position + \"\").toLowerCase().match(/\\S+/g) || [];\n\n if (positions.length < 1) {\n positions.push(\"center\");\n }\n if (positions.length == 1) {\n positions.push(positions[0]);\n }\n\n if (positions[0] == \"top\" || positions[0] == \"bottom\" || positions[1] == \"left\" || positions[1] == \"right\") {\n positions = [positions[1], positions[0]];\n }\n\n if (this.positionX !== undefined) positions[0] = this.positionX.toLowerCase();\n if (this.positionY !== undefined) positions[1] = this.positionY.toLowerCase();\n\n self.positionX = positions[0];\n self.positionY = positions[1];\n\n if (this.positionX != \"left\" && this.positionX != \"right\") {\n if (isNaN(parseInt(this.positionX))) {\n this.positionX = \"center\";\n } else {\n this.positionX = parseInt(this.positionX);\n }\n }\n\n if (this.positionY != \"top\" && this.positionY != \"bottom\") {\n if (isNaN(parseInt(this.positionY))) {\n this.positionY = \"center\";\n } else {\n this.positionY = parseInt(this.positionY);\n }\n }\n\n this.position =\n this.positionX +\n (isNaN(this.positionX) ? \"\" : \"px\") +\n \" \" +\n this.positionY +\n (isNaN(this.positionY) ? \"\" : \"px\");\n\n if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {\n if (this.imageSrc && this.iosFix && !this.$element.is(\"img\")) {\n this.$element.css({\n backgroundImage: 'url(\"' + this.imageSrc + '\")',\n backgroundSize: \"cover\",\n backgroundPosition: this.position,\n });\n }\n return this;\n }\n\n if (navigator.userAgent.match(/(Android)/)) {\n if (this.imageSrc && this.androidFix && !this.$element.is(\"img\")) {\n this.$element.css({\n backgroundImage: 'url(\"' + this.imageSrc + '\")',\n backgroundSize: \"cover\",\n backgroundPosition: this.position,\n });\n }\n return this;\n }\n\n this.$mirror = $(\"
      \").prependTo(this.mirrorContainer);\n\n var slider = this.$element.find(\">.parallax-slider\");\n var sliderExisted = false;\n\n if (slider.length == 0) this.$slider = $(\"\").prependTo(this.$mirror);\n else {\n this.$slider = slider.prependTo(this.$mirror);\n sliderExisted = true;\n }\n\n this.$mirror.addClass(\"parallax-mirror\").css({\n visibility: \"hidden\",\n zIndex: this.zIndex,\n position: \"fixed\",\n top: 0,\n left: 0,\n overflow: \"hidden\",\n });\n\n this.$slider.addClass(\"parallax-slider\").one(\"load\", function () {\n if (!self.naturalHeight || !self.naturalWidth) {\n self.naturalHeight = this.naturalHeight || this.height || 1;\n self.naturalWidth = this.naturalWidth || this.width || 1;\n }\n self.aspectRatio = self.naturalWidth / self.naturalHeight;\n\n Parallax.isSetup || Parallax.setup();\n Parallax.sliders.push(self);\n Parallax.isFresh = false;\n Parallax.requestRender();\n });\n\n if (!sliderExisted) this.$slider[0].src = this.imageSrc;\n\n if ((this.naturalHeight && this.naturalWidth) || this.$slider[0].complete || slider.length > 0) {\n this.$slider.trigger(\"load\");\n }\n }\n\n // Parallax Instance Methods\n\n $.extend(Parallax.prototype, {\n speed: 0.2,\n bleed: 0,\n zIndex: -100,\n iosFix: true,\n androidFix: true,\n position: \"center\",\n overScrollFix: false,\n mirrorContainer: \"body\",\n\n refresh: function () {\n this.boxWidth = this.$element.outerWidth();\n this.boxHeight = this.$element.outerHeight() + this.bleed * 2;\n this.boxOffsetTop = this.$element.offset().top - this.bleed;\n this.boxOffsetLeft = this.$element.offset().left;\n this.boxOffsetBottom = this.boxOffsetTop + this.boxHeight;\n\n var winHeight = Parallax.winHeight;\n var docHeight = Parallax.docHeight;\n var maxOffset = Math.min(this.boxOffsetTop, docHeight - winHeight);\n var minOffset = Math.max(this.boxOffsetTop + this.boxHeight - winHeight, 0);\n var imageHeightMin = (this.boxHeight + (maxOffset - minOffset) * (1 - this.speed)) | 0;\n var imageOffsetMin = ((this.boxOffsetTop - maxOffset) * (1 - this.speed)) | 0;\n var margin;\n\n if (imageHeightMin * this.aspectRatio >= this.boxWidth) {\n this.imageWidth = (imageHeightMin * this.aspectRatio) | 0;\n this.imageHeight = imageHeightMin;\n this.offsetBaseTop = imageOffsetMin;\n\n margin = this.imageWidth - this.boxWidth;\n\n if (this.positionX == \"left\") {\n this.offsetLeft = 0;\n } else if (this.positionX == \"right\") {\n this.offsetLeft = -margin;\n } else if (!isNaN(this.positionX)) {\n this.offsetLeft = Math.max(this.positionX, -margin);\n } else {\n this.offsetLeft = (-margin / 2) | 0;\n }\n } else {\n this.imageWidth = this.boxWidth;\n this.imageHeight = (this.boxWidth / this.aspectRatio) | 0;\n this.offsetLeft = 0;\n\n margin = this.imageHeight - imageHeightMin;\n\n if (this.positionY == \"top\") {\n this.offsetBaseTop = imageOffsetMin;\n } else if (this.positionY == \"bottom\") {\n this.offsetBaseTop = imageOffsetMin - margin;\n } else if (!isNaN(this.positionY)) {\n this.offsetBaseTop = imageOffsetMin + Math.max(this.positionY, -margin);\n } else {\n this.offsetBaseTop = (imageOffsetMin - margin / 2) | 0;\n }\n }\n },\n\n render: function () {\n var scrollTop = Parallax.scrollTop;\n var scrollLeft = Parallax.scrollLeft;\n var overScroll = this.overScrollFix ? Parallax.overScroll : 0;\n var scrollBottom = scrollTop + Parallax.winHeight;\n\n if (this.boxOffsetBottom > scrollTop && this.boxOffsetTop <= scrollBottom) {\n this.visibility = \"visible\";\n this.mirrorTop = this.boxOffsetTop - scrollTop;\n this.mirrorLeft = this.boxOffsetLeft - scrollLeft;\n this.offsetTop = this.offsetBaseTop - this.mirrorTop * (1 - this.speed);\n } else {\n this.visibility = \"hidden\";\n }\n\n this.$mirror.css({\n transform: \"translate3d(\" + this.mirrorLeft + \"px, \" + (this.mirrorTop - overScroll) + \"px, 0px)\",\n visibility: this.visibility,\n height: this.boxHeight,\n width: this.boxWidth,\n });\n\n this.$slider.css({\n transform: \"translate3d(\" + this.offsetLeft + \"px, \" + this.offsetTop + \"px, 0px)\",\n position: \"absolute\",\n height: this.imageHeight,\n width: this.imageWidth,\n maxWidth: \"none\",\n });\n },\n });\n\n // Parallax Static Methods\n\n $.extend(Parallax, {\n scrollTop: 0,\n scrollLeft: 0,\n winHeight: 0,\n winWidth: 0,\n docHeight: 1 << 30,\n docWidth: 1 << 30,\n sliders: [],\n isReady: false,\n isFresh: false,\n isBusy: false,\n\n setup: function () {\n if (this.isReady) return;\n\n var self = this;\n\n var $doc = $(document),\n $win = $(window);\n\n var loadDimensions = function () {\n Parallax.winHeight = $win.height();\n Parallax.winWidth = $win.width();\n Parallax.docHeight = $doc.height();\n Parallax.docWidth = $doc.width();\n };\n\n var loadScrollPosition = function () {\n var winScrollTop = $win.scrollTop();\n var scrollTopMax = Parallax.docHeight - Parallax.winHeight;\n var scrollLeftMax = Parallax.docWidth - Parallax.winWidth;\n Parallax.scrollTop = Math.max(0, Math.min(scrollTopMax, winScrollTop));\n Parallax.scrollLeft = Math.max(0, Math.min(scrollLeftMax, $win.scrollLeft()));\n Parallax.overScroll = Math.max(winScrollTop - scrollTopMax, Math.min(winScrollTop, 0));\n };\n\n $win.on(\"resize.px.parallax load.px.parallax\", function () {\n loadDimensions();\n self.refresh();\n Parallax.isFresh = false;\n Parallax.requestRender();\n }).on(\"scroll.px.parallax load.px.parallax\", function () {\n loadScrollPosition();\n Parallax.requestRender();\n });\n\n loadDimensions();\n loadScrollPosition();\n\n this.isReady = true;\n\n var lastPosition = -1;\n\n function frameLoop() {\n if (lastPosition == window.pageYOffset) {\n // Avoid overcalculations\n window.requestAnimationFrame(frameLoop);\n return false;\n } else lastPosition = window.pageYOffset;\n\n self.render();\n window.requestAnimationFrame(frameLoop);\n }\n\n frameLoop();\n },\n\n configure: function (options) {\n if (typeof options == \"object\") {\n delete options.refresh;\n delete options.render;\n $.extend(this.prototype, options);\n }\n },\n\n refresh: function () {\n $.each(this.sliders, function () {\n this.refresh();\n });\n this.isFresh = true;\n },\n\n render: function () {\n this.isFresh || this.refresh();\n $.each(this.sliders, function () {\n this.render();\n });\n },\n\n requestRender: function () {\n var self = this;\n self.render();\n self.isBusy = false;\n },\n destroy: function (el) {\n var i,\n parallaxElement = $(el).data(\"px.parallax\");\n parallaxElement.$mirror.remove();\n for (i = 0; i < this.sliders.length; i += 1) {\n if (this.sliders[i] == parallaxElement) {\n this.sliders.splice(i, 1);\n }\n }\n $(el).data(\"px.parallax\", false);\n if (this.sliders.length === 0) {\n $(window).off(\"scroll.px.parallax resize.px.parallax load.px.parallax\");\n this.isReady = false;\n Parallax.isSetup = false;\n }\n },\n });\n\n // Parallax Plugin Definition\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var options = typeof option == \"object\" && option;\n\n if (this == window || this == document || $this.is(\"body\")) {\n Parallax.configure(options);\n } else if (!$this.data(\"px.parallax\")) {\n options = $.extend({}, $this.data(), options);\n $this.data(\"px.parallax\", new Parallax(this, options));\n } else if (typeof option == \"object\") {\n $.extend($this.data(\"px.parallax\"), options);\n }\n if (typeof option == \"string\") {\n if (option == \"destroy\") {\n Parallax.destroy(this);\n } else {\n Parallax[option]();\n }\n }\n });\n }\n\n var old = $.fn.parallax;\n\n $.fn.parallax = Plugin;\n $.fn.parallax.Constructor = Parallax;\n\n // Parallax No Conflict\n\n $.fn.parallax.noConflict = function () {\n $.fn.parallax = old;\n return this;\n };\n\n // Parallax Data-API\n\n $(function () {\n $('[data-parallax=\"scroll\"]').parallax();\n });\n})(jQuery, window, document);\n","/*!\n * Clamp.js 0.5.1\n *\n * Copyright 2011-2013, Joseph Schmitt http://joe.sh\n * Released under the WTFPL license\n * http://sam.zoy.org/wtfpl/\n */\n\n(function() {\n /**\n * Clamps a text node.\n * @param {HTMLElement} element. Element containing the text node to clamp.\n * @param {Object} options. Options to pass to the clamper.\n */\n function clamp(element, options) {\n options = options || {};\n\n var self = this,\n win = window,\n opt = {\n clamp: options.clamp || 2,\n useNativeClamp:\n typeof options.useNativeClamp != \"undefined\"\n ? options.useNativeClamp\n : true,\n splitOnChars: options.splitOnChars || [\".\", \"-\", \"–\", \"—\", \" \"], //Split on sentences (periods), hypens, en-dashes, em-dashes, and words (spaces).\n animate: options.animate || false,\n truncationChar: options.truncationChar || \"…\",\n truncationHTML: options.truncationHTML\n },\n sty = element.style,\n originalText = element.innerHTML,\n supportsNativeClamp =\n typeof element.style.webkitLineClamp != \"undefined\",\n clampValue = opt.clamp,\n isCSSValue =\n clampValue.indexOf &&\n (clampValue.indexOf(\"px\") > -1 ||\n clampValue.indexOf(\"em\") > -1),\n truncationHTMLContainer;\n\n if (opt.truncationHTML) {\n truncationHTMLContainer = document.createElement(\"span\");\n truncationHTMLContainer.innerHTML = opt.truncationHTML;\n }\n\n // UTILITY FUNCTIONS __________________________________________________________\n\n /**\n * Return the current style for an element.\n * @param {HTMLElement} elem The element to compute.\n * @param {string} prop The style property.\n * @returns {number}\n */\n function computeStyle(elem, prop) {\n if (!win.getComputedStyle) {\n win.getComputedStyle = function(el, pseudo) {\n this.el = el;\n this.getPropertyValue = function(prop) {\n var re = /(\\-([a-z]){1})/g;\n if (prop == \"float\") prop = \"styleFloat\";\n if (re.test(prop)) {\n prop = prop.replace(re, function() {\n return arguments[2].toUpperCase();\n });\n }\n return el.currentStyle && el.currentStyle[prop]\n ? el.currentStyle[prop]\n : null;\n };\n return this;\n };\n }\n\n return win.getComputedStyle(elem, null).getPropertyValue(prop);\n }\n\n /**\n * Returns the maximum number of lines of text that should be rendered based\n * on the current height of the element and the line-height of the text.\n */\n function getMaxLines(height) {\n var availHeight = height || element.clientHeight,\n lineHeight = getLineHeight(element);\n\n return Math.max(Math.floor(availHeight / lineHeight), 0);\n }\n\n /**\n * Returns the maximum height a given element should have based on the line-\n * height of the text and the given clamp value.\n */\n function getMaxHeight(clmp) {\n var lineHeight = getLineHeight(element);\n return lineHeight * clmp;\n }\n\n /**\n * Returns the line-height of an element as an integer.\n */\n function getLineHeight(elem) {\n var lh = computeStyle(elem, \"line-height\");\n if (lh == \"normal\") {\n // Normal line heights vary from browser to browser. The spec recommends\n // a value between 1.0 and 1.2 of the font size. Using 1.1 to split the diff.\n lh = parseInt(computeStyle(elem, \"font-size\")) * 1.2;\n }\n return parseInt(lh);\n }\n\n // MEAT AND POTATOES (MMMM, POTATOES...) ______________________________________\n var splitOnChars = opt.splitOnChars.slice(0),\n splitChar = splitOnChars[0],\n chunks,\n lastChunk;\n\n /**\n * Gets an element's last child. That may be another node or a node's contents.\n */\n function getLastChild(elem) {\n //Current element has children, need to go deeper and get last child as a text node\n if (elem.lastChild.children && elem.lastChild.children.length > 0) {\n return getLastChild(\n Array.prototype.slice.call(elem.children).pop()\n );\n }\n //This is the absolute last child, a text node, but something's wrong with it. Remove it and keep trying\n else if (\n !elem.lastChild ||\n !elem.lastChild.nodeValue ||\n elem.lastChild.nodeValue == \"\" ||\n elem.lastChild.nodeValue == opt.truncationChar\n ) {\n elem.lastChild.parentNode.removeChild(elem.lastChild);\n return getLastChild(element);\n }\n //This is the last child we want, return it\n else {\n return elem.lastChild;\n }\n }\n\n /**\n * Removes one character at a time from the text until its width or\n * height is beneath the passed-in max param.\n */\n function truncate(target, maxHeight) {\n if (!maxHeight) {\n return;\n }\n\n /**\n * Resets global variables.\n */\n function reset() {\n splitOnChars = opt.splitOnChars.slice(0);\n splitChar = splitOnChars[0];\n chunks = null;\n lastChunk = null;\n }\n\n var nodeValue = target.nodeValue.replace(opt.truncationChar, \"\");\n\n //Grab the next chunks\n if (!chunks) {\n //If there are more characters to try, grab the next one\n if (splitOnChars.length > 0) {\n splitChar = splitOnChars.shift();\n }\n //No characters to chunk by. Go character-by-character\n else {\n splitChar = \"\";\n }\n\n chunks = nodeValue.split(splitChar);\n }\n\n //If there are chunks left to remove, remove the last one and see if\n // the nodeValue fits.\n if (chunks.length > 1) {\n // console.log('chunks', chunks);\n lastChunk = chunks.pop();\n // console.log('lastChunk', lastChunk);\n applyEllipsis(target, chunks.join(splitChar));\n }\n //No more chunks can be removed using this character\n else {\n chunks = null;\n }\n\n //Insert the custom HTML before the truncation character\n if (truncationHTMLContainer) {\n target.nodeValue = target.nodeValue.replace(\n opt.truncationChar,\n \"\"\n );\n element.innerHTML =\n target.nodeValue +\n \" \" +\n truncationHTMLContainer.innerHTML +\n opt.truncationChar;\n }\n\n //Search produced valid chunks\n if (chunks) {\n //It fits\n if (element.clientHeight <= maxHeight) {\n //There's still more characters to try splitting on, not quite done yet\n if (splitOnChars.length >= 0 && splitChar != \"\") {\n applyEllipsis(\n target,\n chunks.join(splitChar) + splitChar + lastChunk\n );\n chunks = null;\n }\n //Finished!\n else {\n return element.innerHTML;\n }\n }\n }\n //No valid chunks produced\n else {\n //No valid chunks even when splitting by letter, time to move\n //on to the next node\n if (splitChar == \"\") {\n applyEllipsis(target, \"\");\n target = getLastChild(element);\n\n reset();\n }\n }\n\n //If you get here it means still too big, let's keep truncating\n if (opt.animate) {\n setTimeout(\n function() {\n truncate(target, maxHeight);\n },\n opt.animate === true ? 10 : opt.animate\n );\n } else {\n return truncate(target, maxHeight);\n }\n }\n\n function applyEllipsis(elem, str) {\n elem.nodeValue = str + opt.truncationChar;\n }\n\n // CONSTRUCTOR ________________________________________________________________\n\n if (clampValue == \"auto\") {\n clampValue = getMaxLines();\n } else if (isCSSValue) {\n clampValue = getMaxLines(parseInt(clampValue));\n }\n\n var clampedText;\n if (supportsNativeClamp && opt.useNativeClamp) {\n sty.overflow = \"hidden\";\n sty.textOverflow = \"ellipsis\";\n sty.webkitBoxOrient = \"vertical\";\n sty.display = \"-webkit-box\";\n sty.webkitLineClamp = clampValue;\n\n if (isCSSValue) {\n sty.height = opt.clamp + \"px\";\n }\n } else {\n var height = getMaxHeight(clampValue);\n if (height <= element.clientHeight) {\n clampedText = truncate(getLastChild(element), height);\n }\n }\n\n return {\n original: originalText,\n clamped: clampedText\n };\n }\n\n window.$clamp = clamp;\n})();\n","document.addEventListener(\n \"DOMContentLoaded\",\n () => {\n const changeOption = (selector, label) => {\n const field = document.querySelector(selector);\n if (field) {\n const option = field.querySelector(\"option:first-child\");\n if (option) {\n option.innerHTML = label;\n option.disabled = true;\n }\n }\n };\n\n changeOption('#buddypress select[name$=\"day\"]', \"Geboortedag\");\n changeOption('#buddypress select[name$=\"month\"]', \"Geboortemaand\");\n changeOption('#buddypress select[name$=\"year\"]', \"Geboortejaar\");\n },\n { passive: true }\n);\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","(() => {\n const backTop = document.getElementsByClassName(\"js-back-to-top\")[0];\n if (backTop) {\n const dataElement = backTop.getAttribute(\"data-element\");\n const scrollElement = dataElement ? document.querySelector(dataElement) : window;\n\n const //scroll to top duration\n scrollDuration = parseInt(backTop.getAttribute(\"data-duration\")) || 300;\n\n const //show back-to-top if scrolling > scrollOffset\n scrollOffset = parseInt(backTop.getAttribute(\"data-offset\")) || 0;\n\n let scrolling = false;\n\n //detect click on back-to-top link\n backTop.addEventListener(\"click\", (event) => {\n event.preventDefault();\n if (!window.requestAnimationFrame) {\n scrollElement.scrollTo(0, 0);\n } else {\n dataElement ? scrollTo(0, scrollDuration, false, scrollElement) : scrollTo(0, scrollDuration);\n }\n //move the focus to the #top-element - don't break keyboard navigation\n moveFocus(document.getElementById(backTop.getAttribute(\"href\").replace(\"#\", \"\")));\n });\n\n //listen to the window scroll and update back-to-top visibility\n checkBackToTop();\n if (scrollOffset > 0) {\n scrollElement.addEventListener(\n \"scroll\",\n (event) => {\n if (!scrolling) {\n scrolling = true;\n !window.requestAnimationFrame\n ? setTimeout(() => {\n checkBackToTop();\n }, 250)\n : window.requestAnimationFrame(checkBackToTop);\n }\n },\n { passive: true }\n );\n }\n\n function checkBackToTop() {\n let windowTop = scrollElement.scrollTop || document.documentElement.scrollTop;\n if (!dataElement) {\n windowTop = window.scrollY || document.documentElement.scrollTop;\n }\n if (windowTop >= scrollOffset) {\n backTop.classList.add(\"back-to-top--is-visible\");\n } else {\n backTop.classList.remove(\"back-to-top--is-visible\");\n }\n scrolling = false;\n }\n\n function scrollTo(final, duration, cb, scrollEl) {\n const element = scrollEl || window;\n let start = element.scrollTop || document.documentElement.scrollTop;\n let currentTime = null;\n\n if (!scrollEl) start = window.scrollY || document.documentElement.scrollTop;\n\n const animateScroll = (timestamp) => {\n if (!currentTime) currentTime = timestamp;\n let progress = timestamp - currentTime;\n if (progress > duration) progress = duration;\n const val = Math.easeInOutQuad(progress, start, final - start, duration);\n element.scrollTo(0, val);\n if (progress < duration) {\n window.requestAnimationFrame(animateScroll);\n } else {\n cb && cb();\n }\n };\n\n window.requestAnimationFrame(animateScroll);\n }\n\n function moveFocus(element) {\n if (!element) element = document.getElementsByTagName(\"body\")[0];\n element.focus();\n if (document.activeElement !== element) {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n }\n }\n\n Math.easeInOutQuad = function (t, b, c, d) {\n t /= d / 2;\n if (t < 1) return (c / 2) * t * t + b;\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n }\n})();\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v5.2.12\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\tmodule.exports = function () {\n\t /*\n\t * bail out if there is no document or window\n\t * (i.e. in a node/non-DOM environment)\n\t *\n\t * Return a stubbed API instead\n\t */\n\t if (typeof document === 'undefined' || typeof window === 'undefined') {\n\t return {\n\t // always return \"initial\" because no interaction will ever be detected\n\t ask: function ask() {\n\t return 'initial';\n\t },\n\n\t // always return null\n\t element: function element() {\n\t return null;\n\t },\n\n\t // no-op\n\t ignoreKeys: function ignoreKeys() {},\n\n\t // no-op\n\t specificKeys: function specificKeys() {},\n\n\t // no-op\n\t registerOnChange: function registerOnChange() {},\n\n\t // no-op\n\t unRegisterOnChange: function unRegisterOnChange() {}\n\t };\n\t }\n\n\t /*\n\t * variables\n\t */\n\n\t // cache document.documentElement\n\t var docElem = document.documentElement;\n\n\t // currently focused dom element\n\t var currentElement = null;\n\n\t // last used input type\n\t var currentInput = 'initial';\n\n\t // last used input intent\n\t var currentIntent = currentInput;\n\n\t // UNIX timestamp of current event\n\t var currentTimestamp = Date.now();\n\n\t // check for a `data-whatpersist` attribute on either the `html` or `body` elements, defaults to `true`\n\t var shouldPersist = false;\n\n\t // form input types\n\t var formInputs = ['button', 'input', 'select', 'textarea'];\n\n\t // empty array for holding callback functions\n\t var functionList = [];\n\n\t // list of modifier keys commonly used with the mouse and\n\t // can be safely ignored to prevent false keyboard detection\n\t var ignoreMap = [16, // shift\n\t 17, // control\n\t 18, // alt\n\t 91, // Windows key / left Apple cmd\n\t 93 // Windows menu / right Apple cmd\n\t ];\n\n\t var specificMap = [];\n\n\t // mapping of events to input types\n\t var inputMap = {\n\t keydown: 'keyboard',\n\t keyup: 'keyboard',\n\t mousedown: 'mouse',\n\t mousemove: 'mouse',\n\t MSPointerDown: 'pointer',\n\t MSPointerMove: 'pointer',\n\t pointerdown: 'pointer',\n\t pointermove: 'pointer',\n\t touchstart: 'touch',\n\t touchend: 'touch'\n\n\t // boolean: true if the page is being scrolled\n\t };var isScrolling = false;\n\n\t // store current mouse position\n\t var mousePos = {\n\t x: null,\n\t y: null\n\n\t // map of IE 10 pointer events\n\t };var pointerMap = {\n\t 2: 'touch',\n\t 3: 'touch', // treat pen like touch\n\t 4: 'mouse'\n\n\t // check support for passive event listeners\n\t };var supportsPassive = false;\n\n\t try {\n\t var opts = Object.defineProperty({}, 'passive', {\n\t get: function get() {\n\t supportsPassive = true;\n\t }\n\t });\n\n\t window.addEventListener('test', null, opts);\n\t } catch (e) {}\n\t // fail silently\n\n\n\t /*\n\t * set up\n\t */\n\n\t var setUp = function setUp() {\n\t // add correct mouse wheel event mapping to `inputMap`\n\t inputMap[detectWheel()] = 'mouse';\n\n\t addListeners();\n\t };\n\n\t /*\n\t * events\n\t */\n\n\t var addListeners = function addListeners() {\n\t // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\n\t // can only demonstrate potential, but not actual, interaction\n\t // and are treated separately\n\t var options = supportsPassive ? { passive: true, capture: true } : true;\n\n\t document.addEventListener('DOMContentLoaded', setPersist, true);\n\n\t // pointer events (mouse, pen, touch)\n\t if (window.PointerEvent) {\n\t window.addEventListener('pointerdown', setInput, true);\n\t window.addEventListener('pointermove', setIntent, true);\n\t } else if (window.MSPointerEvent) {\n\t window.addEventListener('MSPointerDown', setInput, true);\n\t window.addEventListener('MSPointerMove', setIntent, true);\n\t } else {\n\t // mouse events\n\t window.addEventListener('mousedown', setInput, true);\n\t window.addEventListener('mousemove', setIntent, true);\n\n\t // touch events\n\t if ('ontouchstart' in window) {\n\t window.addEventListener('touchstart', setInput, options);\n\t window.addEventListener('touchend', setInput, true);\n\t }\n\t }\n\n\t // mouse wheel\n\t window.addEventListener(detectWheel(), setIntent, options);\n\n\t // keyboard events\n\t window.addEventListener('keydown', setInput, true);\n\t window.addEventListener('keyup', setInput, true);\n\n\t // focus events\n\t window.addEventListener('focusin', setElement, true);\n\t window.addEventListener('focusout', clearElement, true);\n\t };\n\n\t // checks if input persistence should happen and\n\t // get saved state from session storage if true (defaults to `false`)\n\t var setPersist = function setPersist() {\n\t shouldPersist = !(docElem.getAttribute('data-whatpersist') === 'false' || document.body.getAttribute('data-whatpersist') === 'false');\n\n\t if (shouldPersist) {\n\t // check for session variables and use if available\n\t try {\n\t if (window.sessionStorage.getItem('what-input')) {\n\t currentInput = window.sessionStorage.getItem('what-input');\n\t }\n\n\t if (window.sessionStorage.getItem('what-intent')) {\n\t currentIntent = window.sessionStorage.getItem('what-intent');\n\t }\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\n\t // always run these so at least `initial` state is set\n\t doUpdate('input');\n\t doUpdate('intent');\n\t };\n\n\t // checks conditions before updating new input\n\t var setInput = function setInput(event) {\n\t var eventKey = event.which;\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t var ignoreMatch = !specificMap.length && ignoreMap.indexOf(eventKey) === -1;\n\n\t var specificMatch = specificMap.length && specificMap.indexOf(eventKey) !== -1;\n\n\t var shouldUpdate = value === 'keyboard' && eventKey && (ignoreMatch || specificMatch) || value === 'mouse' || value === 'touch';\n\n\t // prevent touch detection from being overridden by event execution order\n\t if (validateTouch(value)) {\n\t shouldUpdate = false;\n\t }\n\n\t if (shouldUpdate && currentInput !== value) {\n\t currentInput = value;\n\n\t persistInput('input', currentInput);\n\t doUpdate('input');\n\t }\n\n\t if (shouldUpdate && currentIntent !== value) {\n\t // preserve intent for keyboard interaction with form fields\n\t var activeElem = document.activeElement;\n\t var notFormInput = activeElem && activeElem.nodeName && (formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1 || activeElem.nodeName.toLowerCase() === 'button' && !checkClosest(activeElem, 'form'));\n\n\t if (notFormInput) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t }\n\t };\n\n\t // updates the doc and `inputTypes` array with new input\n\t var doUpdate = function doUpdate(which) {\n\t docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\n\n\t fireFunctions(which);\n\t };\n\n\t // updates input intent for `mousemove` and `pointermove`\n\t var setIntent = function setIntent(event) {\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\n\t detectScrolling(event);\n\n\t // only execute if scrolling isn't happening\n\t if ((!isScrolling && !validateTouch(value) || isScrolling && event.type === 'wheel' || event.type === 'mousewheel' || event.type === 'DOMMouseScroll') && currentIntent !== value) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t };\n\n\t var setElement = function setElement(event) {\n\t if (!event.target.nodeName) {\n\t // If nodeName is undefined, clear the element\n\t // This can happen if click inside an element.\n\t clearElement();\n\t return;\n\t }\n\n\t currentElement = event.target.nodeName.toLowerCase();\n\t docElem.setAttribute('data-whatelement', currentElement);\n\n\t if (event.target.classList && event.target.classList.length) {\n\t docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\n\t }\n\t };\n\n\t var clearElement = function clearElement() {\n\t currentElement = null;\n\n\t docElem.removeAttribute('data-whatelement');\n\t docElem.removeAttribute('data-whatclasses');\n\t };\n\n\t var persistInput = function persistInput(which, value) {\n\t if (shouldPersist) {\n\t try {\n\t window.sessionStorage.setItem('what-' + which, value);\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\t };\n\n\t /*\n\t * utilities\n\t */\n\n\t var pointerType = function pointerType(event) {\n\t if (typeof event.pointerType === 'number') {\n\t return pointerMap[event.pointerType];\n\t } else {\n\t // treat pen like touch\n\t return event.pointerType === 'pen' ? 'touch' : event.pointerType;\n\t }\n\t };\n\n\t // prevent touch detection from being overridden by event execution order\n\t var validateTouch = function validateTouch(value) {\n\t var timestamp = Date.now();\n\n\t var touchIsValid = value === 'mouse' && currentInput === 'touch' && timestamp - currentTimestamp < 200;\n\n\t currentTimestamp = timestamp;\n\n\t return touchIsValid;\n\t };\n\n\t // detect version of mouse wheel event to use\n\t // via https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event\n\t var detectWheel = function detectWheel() {\n\t var wheelType = null;\n\n\t // Modern browsers support \"wheel\"\n\t if ('onwheel' in document.createElement('div')) {\n\t wheelType = 'wheel';\n\t } else {\n\t // Webkit and IE support at least \"mousewheel\"\n\t // or assume that remaining browsers are older Firefox\n\t wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\n\t }\n\n\t return wheelType;\n\t };\n\n\t // runs callback functions\n\t var fireFunctions = function fireFunctions(type) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].type === type) {\n\t functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\n\t }\n\t }\n\t };\n\n\t // finds matching element in an object\n\t var objPos = function objPos(match) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].fn === match) {\n\t return i;\n\t }\n\t }\n\t };\n\n\t var detectScrolling = function detectScrolling(event) {\n\t if (mousePos.x !== event.screenX || mousePos.y !== event.screenY) {\n\t isScrolling = false;\n\n\t mousePos.x = event.screenX;\n\t mousePos.y = event.screenY;\n\t } else {\n\t isScrolling = true;\n\t }\n\t };\n\n\t // manual version of `closest()`\n\t var checkClosest = function checkClosest(elem, tag) {\n\t var ElementPrototype = window.Element.prototype;\n\n\t if (!ElementPrototype.matches) {\n\t ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector;\n\t }\n\n\t if (!ElementPrototype.closest) {\n\t do {\n\t if (elem.matches(tag)) {\n\t return elem;\n\t }\n\n\t elem = elem.parentElement || elem.parentNode;\n\t } while (elem !== null && elem.nodeType === 1);\n\n\t return null;\n\t } else {\n\t return elem.closest(tag);\n\t }\n\t };\n\n\t /*\n\t * init\n\t */\n\n\t // don't start script unless browser cuts the mustard\n\t // (also passes if polyfills are used)\n\t if ('addEventListener' in window && Array.prototype.indexOf) {\n\t setUp();\n\t }\n\n\t /*\n\t * api\n\t */\n\n\t return {\n\t // returns string: the current input type\n\t // opt: 'intent'|'input'\n\t // 'input' (default): returns the same value as the `data-whatinput` attribute\n\t // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\n\t ask: function ask(opt) {\n\t return opt === 'intent' ? currentIntent : currentInput;\n\t },\n\n\t // returns string: the currently focused element or null\n\t element: function element() {\n\t return currentElement;\n\t },\n\n\t // overwrites ignored keys with provided array\n\t ignoreKeys: function ignoreKeys(arr) {\n\t ignoreMap = arr;\n\t },\n\n\t // overwrites specific char keys to update on\n\t specificKeys: function specificKeys(arr) {\n\t specificMap = arr;\n\t },\n\n\t // attach functions to input and intent \"events\"\n\t // funct: function to fire on change\n\t // eventType: 'input'|'intent'\n\t registerOnChange: function registerOnChange(fn, eventType) {\n\t functionList.push({\n\t fn: fn,\n\t type: eventType || 'input'\n\t });\n\t },\n\n\t unRegisterOnChange: function unRegisterOnChange(fn) {\n\t var position = objPos(fn);\n\n\t if (position || position === 0) {\n\t functionList.splice(position, 1);\n\t }\n\t },\n\n\t clearStorage: function clearStorage() {\n\t window.sessionStorage.clear();\n\t }\n\t };\n\t}();\n\n/***/ })\n/******/ ])\n});\n;","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","// Add classes to blocks that normally don't have classes.\nconst addClassToBlock = (props, blockType, attributes) => {\n const notDefined = typeof props.className === \"undefined\" || !props.className ? true : false;\n\n if (blockType.name === \"core/list\") {\n return Object.assign(props, {\n className: notDefined ? `wp-block-list` : `wp-block-list ${props.className}`,\n });\n }\n\n // if (blockType.name === \"core/paragraph\") {\n // return Object.assign(props, {\n // className: notDefined\n // ? \"wp-block-paragraph\"\n // : `wp-block-paragraph ${props.className}`\n // });\n // }\n\n return props;\n};\n\nif (wp.hooks !== undefined) {\n wp.hooks.addFilter(\"blocks.getSaveContent.extraProps\", \"wp-soup/add-class-to-blocks\", addClassToBlock);\n}\n\n/**\n * returns blocks on page, all on same level (instead of innerblocks)\n * @returns [{}]\n */\nfunction wpSoupGetBlocksOnPage() {\n let blocks = [];\n // get all blocks, and call recursive function for it\n wp.data\n .select(\"core/block-editor\")\n .getBlocks()\n .forEach((block) => {\n blocks = [...blocks, ...wpSoupGetBlocksFromBlock(block)];\n });\n return blocks;\n}\n\n/**\n * recursive method for wpSoupGetBlocksOnPage()\n * @param block\n * @returns [{}]\n */\nfunction wpSoupGetBlocksFromBlock(block) {\n let blocks = [block];\n if (block.hasOwnProperty(\"innerBlocks\")) {\n block.innerBlocks.forEach((inner_block) => {\n blocks = [...blocks, ...wpSoupGetBlocksFromBlock(inner_block)];\n });\n }\n return blocks;\n}\n\nif (wp.domReady !== undefined) {\n wp.domReady(() => {\n /**\n * Deprecated blocks\n * `wp_soup_deprecated_blocks` gets shared from php, it's a constant array\n * of strings\n */\n if (typeof wp_soup_deprecated_blocks !== \"undefined\") {\n const available_blocks = wp.blocks.getBlockTypes();\n const blocks_in_page = wpSoupGetBlocksOnPage();\n\n wp_soup_deprecated_blocks.forEach((deprecated_block) => {\n // check if the deprecated block is used on this page\n const current_result = blocks_in_page.find((block) => {\n return block.name === deprecated_block;\n });\n\n // if it's on the page, set it in the deprecated blocks category\n // we do this because unregistering it would break the page.\n if (current_result !== undefined) {\n const result = available_blocks.find((block) => {\n return block.name === deprecated_block;\n });\n if (result !== undefined) {\n result.category = \"deprecated\";\n }\n }\n\n // if it's not used on the page, we can fully remove it instead\n else {\n wp.blocks.unregisterBlockType(deprecated_block);\n }\n });\n }\n });\n}\n\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n for (let i = 1; i < 10; i++) {\n const clampTo = document.querySelectorAll(`.clamp-to-${i}`);\n for (c of clampTo) {\n window.$clamp(c, { clamp: i });\n }\n }\n },\n { passive: true }\n);\n","module.exports = require('./lib/axios');","document.addEventListener(\n `DOMContentLoaded`,\n () => {\n /**\n * Add change event to the price toggle switch to show/hide prices.\n */\n const priceToggle = document.querySelector(\".ms_pricing .js-time-period-switch input\");\n const priceContent = document.querySelectorAll(\".ms_pricing .price-content\");\n const extraPriceContent = document.querySelectorAll(\".ms_pricing .extra-price-content\");\n if (priceToggle) {\n priceToggle.addEventListener(\n \"change\",\n () => {\n if (priceContent) {\n for (const priceBlock of priceContent) {\n priceBlock.classList.toggle(\"hide\");\n }\n }\n if (extraPriceContent) {\n for (const priceBlock of extraPriceContent) {\n priceBlock.classList.toggle(\"hide\");\n }\n }\n Foundation.reInit(\"equalizer\");\n },\n { passive: true }\n );\n }\n\n const priceBlocks = document.querySelectorAll(\".ms_pricing .price-block\");\n if (priceBlocks) {\n for (const block of priceBlocks) {\n const title = block.querySelector(\".title\").textContent;\n const buttonWC = block.querySelector(\".cta-button.woocommerce a\");\n const buttonWCHref = buttonWC ? buttonWC.href : undefined;\n const button = block.querySelector(\".cta-button:not(.woocommerce) a\");\n const buttonHref = button ? button.href : undefined;\n const extraOptions = block.querySelectorAll(\".extra-options input\");\n let selectedOptionsID = [];\n let selectedOptions = [];\n if (extraOptions) {\n for (const [index, option] of extraOptions.entries()) {\n const optionName = option.parentElement.parentElement.textContent.trim();\n const optionID = option.parentElement.parentElement.dataset.id;\n const firstPriceNode = block.querySelector(\".price-content.first .price .number\");\n const secondPriceNode = block.querySelector(\".price-content.second .price .number\");\n option.addEventListener(\n \"change\",\n function () {\n const optionPrice = parseFloat(this.dataset.price);\n const optionPrice2 = parseFloat(this.dataset.secondPrice);\n // Apply first extra option price to \"left label price\".\n if (optionPrice) {\n // First price.\n if (firstPriceNode) {\n const firstPrice = parseFloat(\n firstPriceNode.textContent.replace(/(\\d),(?=\\d)/g, \"$1.\")\n );\n const newFirstPriceHTML = this.checked\n ? firstPrice + optionPrice\n : firstPrice - optionPrice;\n firstPriceNode.textContent = newFirstPriceHTML\n .toFixed(2)\n .replace(\".\", \",\")\n .replace(\",00\", \"\");\n }\n }\n // Apply second extra option price to \"right label price\".\n if (optionPrice2) {\n // Second price.\n if (secondPriceNode) {\n const secondPrice = parseFloat(\n secondPriceNode.textContent.replace(/(\\d),(?=\\d)/g, \"$1.\")\n );\n const secondPriceHTML = this.checked\n ? secondPrice + optionPrice2\n : secondPrice - optionPrice2;\n secondPriceNode.textContent = secondPriceHTML\n .toFixed(2)\n .replace(\".\", \",\")\n .replace(\",00\", \"\");\n }\n }\n\n // Add parameters to the URL if extra options have been selected.\n if (title && button) {\n // Add or remove selected extra option.\n this.checked\n ? selectedOptions.splice(index, 0, optionName)\n : (selectedOptions = selectedOptions.filter((value) => value !== optionName));\n // Create the query string for the button.\n const params = new URLSearchParams();\n const options = selectedOptions.join(\" & \");\n const newParams = {\n ...(options !== \"\" && { \"extra-options\": options }),\n };\n for (const [key, val] of Object.entries(newParams)) {\n params.append(key, val);\n }\n button.href = buttonHref + params.toString();\n }\n\n if (buttonWC && optionID) {\n // Add or remove selected extra option.\n this.checked\n ? selectedOptionsID.splice(index, 0, optionID)\n : (selectedOptionsID = selectedOptionsID.filter((value) => value !== optionID));\n const optionsString = selectedOptionsID.join(\",\");\n buttonWC.href =\n optionsString !== \"\" ? buttonWCHref + \",\" + optionsString : buttonWCHref;\n buttonWC.dataset.id = buttonWC.href.split(\"=\")[1];\n }\n },\n { passive: true }\n );\n }\n }\n }\n }\n },\n { passive: true }\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","module.exports = jQuery;","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n"],"sourceRoot":""}