{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/prev-next-button.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/stickybits/dist/stickybits.es.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./resources/js/app.js","webpack:///./resources/js/modules/buttonShare.js","webpack:///./resources/js/modules/carousel.js","webpack:///./resources/js/modules/eventBar.js","webpack:///./resources/js/modules/eventLineupClick.js","webpack:///./resources/js/modules/faq.js","webpack:///./resources/js/modules/helpers.js","webpack:///./resources/js/modules/heroVideo.js","webpack:///./resources/js/modules/megamenu.js","webpack:///./resources/js/modules/missionOverlay.js","webpack:///./resources/js/modules/nextPrevFunc.js","webpack:///./resources/js/modules/pageOverlay.js","webpack:///./resources/js/modules/postCarouselRotate.js","webpack:///./resources/js/modules/stickyElements.js","webpack:///./resources/js/modules/submenus.js","webpack:///./resources/js/modules/toggleArtistModal.js","webpack:///./resources/js/modules/toggleEventLineupArtist.js","webpack:///./resources/js/modules/toggleSelection.js","webpack:///./resources/scss/customize-controls.scss?8127","webpack:///./resources/scss/editor.scss?0428","webpack:///./resources/scss/screen.scss?29a6"],"names":["pageOverlay","heroVideoFunc","carouselFunc","eventBar","megaMenu","subMenus","missionOverlay","faqFunc","buttonShareFunc","stickyElements","eventLineupClickFunc","toggleArtistModal","toggleEventLineupArtist","nextPrevFunc","toggleSelection","postCarouselRotate","appLocalizedArray","news_carousel_animation_delay","buttonShare","document","querySelectorAll","forEach","item","addEventListener","el","preventDefault","findAncestor","classList","toggle","Flickity","require","mediaCarousels","articleCarousels","articleCarouselOptions","autoPlay","cellAlign","imagesLoaded","pageDots","wrapAround","prevNextButtons","mediaCarouselOptions","carouselItem","index","mediaCarouselEl","flktyImageSlider","on","reposition","eventFiltersToggleBtn","querySelector","eventFiltersCloseBtn","eventSearchToggleBtn","eventSearchCloseBtn","eventBarFiltersActiveClass","eventBarSearchActiveClass","closeEventFilters","e","getClosest","target","remove","toggleEventFilters","toggleSearchFilters","closeSearchFilters","addEventListenerIfElExists","eventWeekends","eventLineUpWeekendTrigger","eventArtistsList","activeClass","openEventLineUpArtists","count","getAttribute","add","faqToggle","element","event","parentItem","activeElements","Array","from","openFaqClass","contains","node","toggleCSSClasses","cls","map","cl","body","windowWidth","Math","max","documentElement","clientWidth","window","innerWidth","windowHeight","clientHeight","innerHeight","isMobile","test","navigator","userAgent","viewportWidth","isUserLoggedIn","wpAdminBarSpace","hiddenClass","mobileMenuOpenClass","stickyHeaderClass","sel","parentElement","matches","matchesSelector","call","arrSum","arr","reduce","a","b","elem","selector","Element","prototype","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","s","ownerDocument","i","length","parentNode","targetFunction","addEventListenersIfElExists","isInPage","enableHeroAudioBtn","enableHeroAudio","heroVideoEl","audioEnabledClass","muted","megaMenuToggle","subMenuToggles","megaMenuActiveClass","toggleMegaMenu","missionIcons","missionOverlays","missionOverlayCloseBtns","toggleMissionOverlay","id","activeMissionOverlay","getElementById","closeMissionOverlay","prevBtnTrigger","nextBtnTrigger","selectedElement","additionalSelectedElement","itemsArray","selectedElements","additionalSelectedElements","push","prevItemTrigger","itemsArrayLength","nextItemTrigger","nextBtn","prevBtn","delay","page_load_delay","closePageOverlay","setTimeout","additionalElement","animationDelay","postCarouselItemsArray","setAutoRotate","currentCount","interval","postCarouselItemsArrayLength","setInterval","stickybits","stickyBitStickyOffset","useStickyClasses","subMenuClose","closeSubMenu","toggleSubMenu","activeSubMenu","triggerElement","triggerElements","openSelectedModal","toggleSelected","closeSelectedModal"],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG,MAAM,EAMN;;AAEH,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;;ACpDD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG,MAAM,EAMN;;AAEH,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;AC/GD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,qIAA4C;AAClD,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAYN;;AAEH,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,GAAG;AACH;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;AChPD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,+EAAY;AAClB,MAAM,yFAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAcN;;AAEH,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;AChKD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,yFAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAaN;;AAEH,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;ACxMD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,mFAAmB;AACzB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAaN;;AAEH,CAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;ACrGD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,+EAAY;AAClB,MAAM,2FAAuB;AAC7B,MAAM,yFAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAgBN;;AAEH,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO,IAAI,YAAY,OAAO,UAAU,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB,EAAE,sBAAsB,eAAe;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;ACxYD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,2FAAuB;AAC7B,MAAM,mFAAmB;AACzB,MAAM,yFAAsB;AAC5B,MAAM,uEAAQ;AACd,MAAM,yEAAS;AACf,MAAM,6EAAW;AACjB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,kBAwBN;;AAEH,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,cAAc;AAC3B;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,wBAAwB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oCAAoC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;ACh6BD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,+EAAY;AAClB,MAAM,uEAAQ;AACd,MAAM,+FAAoB;AAC1B,MAAM,iFAAa;AACnB,MAAM,2EAAU;AAChB,MAAM,6FAAmB;AACzB,MAAM,+EAAY;AAClB,KAAK,oCAAE,OAAO;AAAA;AAAA;AAAA,oGAAE;AAChB,GAAG,MAAM,EAWN;;AAEH,CAAC;AACD;AACA;AACA,CAAC;;;;;;;;;;;;ACzCD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,+EAAY;AAClB,MAAM,yFAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAcN;;AAEH,CAAC;AACD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;ACrID;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,+EAAY;AAClB,MAAM,2FAAuB;AAC7B,MAAM,yFAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAgBN;;AAEH,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;AC3LD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,2FAAuB;AAC7B,MAAM,yFAAsB;AAC5B,MAAM,+EAAY;AAClB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAcN;;AAEH,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;AC9LD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,+EAAY;AAClB,MAAM,2FAAuB;AAC7B,MAAM,yFAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAgBN;;AAEH,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;AClND;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG,MAAM,EAON;;AAEH,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA,CAAC;;;;;;;;;;;;ACzED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG,MAAM,EAMN;;AAEH,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;;AC9MD;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;;AAEA;AACA,sDAAsD;;AAEtD;AACA,6BAA6B;AAC7B;AACA,OAAO;AACP,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;;;AAGL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,iCAAiC;AACjC,SAAS;AACT;AACA,gCAAgC;AAChC;AACA,SAAS;AACT;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,WAAW,KAAK;AAChB,kCAAkC;AAClC;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA,wCAAwC;AACxC;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,mBAAmB;;AAEnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,8BAA8B;AAC9B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,2BAA2B;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEe,yEAAU,EAAC;;;;;;;;;;;;ACpiB1B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,2FAAuB;AAC7B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAYN;;AAEH,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;;;;;;AC1RD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,2FAAuB;AAC7B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG,MAAM,EAYN;;AAEH,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;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","file":"/js/app.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 = 0);\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n });\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils'\n ], function( utils ) {\n return factory( window, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n });\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i=0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i=0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size'\n ], function( getSize ) {\n return factory( window, getSize );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n","// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x = moveVector.x % this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate'\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i=index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n });\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match(/^(\\d+)%$/);\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5\n },\n left: {\n left: 0,\n right: 1\n },\n right: {\n right: 0,\n left: 1\n }\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i=0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i=0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility ||isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n });\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n","/*!\n * Flickity v2.2.1\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2019 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n})( window, function factory( Flickity ) {\n /*jshint strict: false*/\n return Flickity;\n});\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n });\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n","// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity'\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path');\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n","// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n });\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n });\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\nreturn Slide;\n\n}));\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/**\n stickybits - Stickybits is a lightweight alternative to `position: sticky` polyfills\n @version v3.7.9\n @link https://github.com/yowainwright/stickybits#readme\n @author Jeff Wainwright (https://jeffry.in)\n @license MIT\n**/\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n/*\n STICKYBITS πŸ’‰\n --------\n > a lightweight alternative to `position: sticky` polyfills 🍬\n --------\n - each method is documented above it our view the readme\n - Stickybits does not manage polymorphic functionality (position like properties)\n * polymorphic functionality: (in the context of describing Stickybits)\n means making things like `position: sticky` be loosely supported with position fixed.\n It also means that features like `useStickyClasses` takes on styles like `position: fixed`.\n --------\n defaults πŸ”Œ\n --------\n - version = `package.json` version\n - userAgent = viewer browser agent\n - target = DOM element selector\n - noStyles = boolean\n - offset = number\n - parentClass = 'string'\n - scrollEl = window || DOM element selector || DOM element\n - stickyClass = 'string'\n - stuckClass = 'string'\n - useStickyClasses = boolean\n - useFixed = boolean\n - useGetBoundingClientRect = boolean\n - verticalPosition = 'string'\n - applyStyle = function\n --------\n propsπŸ”Œ\n --------\n - p = props {object}\n --------\n instance note\n --------\n - stickybits parent methods return this\n - stickybits instance methods return an instance item\n --------\n nomenclature\n --------\n - target => el => e\n - props => o || p\n - instance => item => it\n --------\n methods\n --------\n - .definePosition = defines sticky or fixed\n - .addInstance = an array of objects for each Stickybits Target\n - .getClosestParent = gets the parent for non-window scroll\n - .getTopPosition = gets the element top pixel position from the viewport\n - .computeScrollOffsets = computes scroll position\n - .toggleClasses = older browser toggler\n - .manageState = manages sticky state\n - .removeInstance = removes an instance\n - .cleanup = removes all Stickybits instances and cleans up dom from stickybits\n*/\nvar Stickybits = /*#__PURE__*/function () {\n function Stickybits(target, obj) {\n var _this = this;\n\n var o = typeof obj !== 'undefined' ? obj : {};\n this.version = '3.7.9';\n this.userAgent = window.navigator.userAgent || 'no `userAgent` provided by the browser';\n this.props = {\n customStickyChangeNumber: o.customStickyChangeNumber || null,\n noStyles: o.noStyles || false,\n stickyBitStickyOffset: o.stickyBitStickyOffset || 0,\n parentClass: o.parentClass || 'js-stickybit-parent',\n scrollEl: typeof o.scrollEl === 'string' ? document.querySelector(o.scrollEl) : o.scrollEl || window,\n stickyClass: o.stickyClass || 'js-is-sticky',\n stuckClass: o.stuckClass || 'js-is-stuck',\n stickyChangeClass: o.stickyChangeClass || 'js-is-sticky--change',\n useStickyClasses: o.useStickyClasses || false,\n useFixed: o.useFixed || false,\n useGetBoundingClientRect: o.useGetBoundingClientRect || false,\n verticalPosition: o.verticalPosition || 'top',\n applyStyle: o.applyStyle || function (item, style) {\n return _this.applyStyle(item, style);\n }\n };\n /*\n define positionVal after the setting of props, because definePosition looks at the props.useFixed\n ----\n - uses a computed (`.definePosition()`)\n - defined the position\n */\n\n this.props.positionVal = this.definePosition() || 'fixed';\n this.instances = [];\n var _this$props = this.props,\n positionVal = _this$props.positionVal,\n verticalPosition = _this$props.verticalPosition,\n noStyles = _this$props.noStyles,\n stickyBitStickyOffset = _this$props.stickyBitStickyOffset;\n var verticalPositionStyle = verticalPosition === 'top' && !noStyles ? stickyBitStickyOffset + \"px\" : '';\n var positionStyle = positionVal !== 'fixed' ? positionVal : '';\n this.els = typeof target === 'string' ? document.querySelectorAll(target) : target;\n if (!('length' in this.els)) this.els = [this.els];\n\n for (var i = 0; i < this.els.length; i++) {\n var _styles;\n\n var el = this.els[i];\n var instance = this.addInstance(el, this.props); // set vertical position\n\n this.props.applyStyle({\n styles: (_styles = {}, _styles[verticalPosition] = verticalPositionStyle, _styles.position = positionStyle, _styles),\n classes: {}\n }, instance);\n this.manageState(instance); // instances are an array of objects\n\n this.instances.push(instance);\n }\n }\n /*\n setStickyPosition βœ”οΈ\n --------\n β€” most basic thing stickybits does\n => checks to see if position sticky is supported\n => defined the position to be used\n => stickybits works accordingly\n */\n\n\n var _proto = Stickybits.prototype;\n\n _proto.definePosition = function definePosition() {\n var stickyProp;\n\n if (this.props.useFixed) {\n stickyProp = 'fixed';\n } else {\n var prefix = ['', '-o-', '-webkit-', '-moz-', '-ms-'];\n var test = document.head.style;\n\n for (var i = 0; i < prefix.length; i += 1) {\n test.position = prefix[i] + \"sticky\";\n }\n\n stickyProp = test.position ? test.position : 'fixed';\n test.position = '';\n }\n\n return stickyProp;\n }\n /*\n addInstance βœ”οΈ\n --------\n β€” manages instances of items\n - takes in an el and props\n - returns an item object\n ---\n - target = el\n - o = {object} = props\n - scrollEl = 'string' | object\n - verticalPosition = number\n - off = boolean\n - parentClass = 'string'\n - stickyClass = 'string'\n - stuckClass = 'string'\n ---\n - defined later\n - parent = dom element\n - state = 'string'\n - offset = number\n - stickyStart = number\n - stickyStop = number\n - returns an instance object\n */\n ;\n\n _proto.addInstance = function addInstance(el, props) {\n var _this2 = this;\n\n var item = {\n el: el,\n parent: el.parentNode,\n props: props\n };\n\n if (props.positionVal === 'fixed' || props.useStickyClasses) {\n this.isWin = this.props.scrollEl === window;\n var se = this.isWin ? window : this.getClosestParent(item.el, item.props.scrollEl);\n this.computeScrollOffsets(item);\n this.toggleClasses(item.parent, '', props.parentClass);\n item.state = 'default';\n item.stateChange = 'default';\n\n item.stateContainer = function () {\n return _this2.manageState(item);\n };\n\n se.addEventListener('scroll', item.stateContainer);\n }\n\n return item;\n }\n /*\n --------\n getParent πŸ‘¨β€\n --------\n - a helper function that gets the target element's parent selected el\n - only used for non `window` scroll elements\n - supports older browsers\n */\n ;\n\n _proto.getClosestParent = function getClosestParent(el, match) {\n // p = parent element\n var p = match;\n var e = el;\n if (e.parentElement === p) return p; // traverse up the dom tree until we get to the parent\n\n while (e.parentElement !== p) {\n e = e.parentElement;\n } // return parent element\n\n\n return p;\n }\n /*\n --------\n getTopPosition\n --------\n - a helper function that gets the topPosition of a Stickybit element\n - from the top level of the DOM\n */\n ;\n\n _proto.getTopPosition = function getTopPosition(el) {\n if (this.props.useGetBoundingClientRect) {\n return el.getBoundingClientRect().top + (this.props.scrollEl.pageYOffset || document.documentElement.scrollTop);\n }\n\n var topPosition = 0;\n\n do {\n topPosition = el.offsetTop + topPosition;\n } while (el = el.offsetParent);\n\n return topPosition;\n }\n /*\n computeScrollOffsets πŸ“Š\n ---\n computeScrollOffsets for Stickybits\n - defines\n - offset\n - start\n - stop\n */\n ;\n\n _proto.computeScrollOffsets = function computeScrollOffsets(item) {\n var it = item;\n var p = it.props;\n var el = it.el;\n var parent = it.parent;\n var isCustom = !this.isWin && p.positionVal === 'fixed';\n var isTop = p.verticalPosition !== 'bottom';\n var scrollElOffset = isCustom ? this.getTopPosition(p.scrollEl) : 0;\n var stickyStart = isCustom ? this.getTopPosition(parent) - scrollElOffset : this.getTopPosition(parent);\n var stickyChangeOffset = p.customStickyChangeNumber !== null ? p.customStickyChangeNumber : el.offsetHeight;\n var parentBottom = stickyStart + parent.offsetHeight;\n it.offset = !isCustom ? scrollElOffset + p.stickyBitStickyOffset : 0;\n it.stickyStart = isTop ? stickyStart - it.offset : 0;\n it.stickyChange = it.stickyStart + stickyChangeOffset;\n it.stickyStop = isTop ? parentBottom - (el.offsetHeight + it.offset) : parentBottom - window.innerHeight;\n }\n /*\n toggleClasses βš–οΈ\n ---\n toggles classes (for older browser support)\n r = removed class\n a = added class\n */\n ;\n\n _proto.toggleClasses = function toggleClasses(el, r, a) {\n var e = el;\n var cArray = e.className.split(' ');\n if (a && cArray.indexOf(a) === -1) cArray.push(a);\n var rItem = cArray.indexOf(r);\n if (rItem !== -1) cArray.splice(rItem, 1);\n e.className = cArray.join(' ');\n }\n /*\n manageState πŸ“\n ---\n - defines the state\n - normal\n - sticky\n - stuck\n */\n ;\n\n _proto.manageState = function manageState(item) {\n var _this3 = this;\n\n // cache object\n var it = item;\n var p = it.props;\n var state = it.state;\n var stateChange = it.stateChange;\n var start = it.stickyStart;\n var change = it.stickyChange;\n var stop = it.stickyStop; // cache props\n\n var pv = p.positionVal;\n var se = p.scrollEl;\n var sticky = p.stickyClass;\n var stickyChange = p.stickyChangeClass;\n var stuck = p.stuckClass;\n var vp = p.verticalPosition;\n var isTop = vp !== 'bottom';\n var aS = p.applyStyle;\n var ns = p.noStyles;\n /*\n requestAnimationFrame\n ---\n - use rAF\n - or stub rAF\n */\n\n var rAFStub = function rAFDummy(f) {\n f();\n };\n\n var rAF = !this.isWin ? rAFStub : window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || rAFStub;\n /*\n define scroll vars\n ---\n - scroll\n - notSticky\n - isSticky\n - isStuck\n */\n\n var scroll = this.isWin ? window.scrollY || window.pageYOffset : se.scrollTop;\n var notSticky = scroll > start && scroll < stop && (state === 'default' || state === 'stuck');\n var isSticky = isTop && scroll <= start && (state === 'sticky' || state === 'stuck');\n var isStuck = scroll >= stop && state === 'sticky';\n /*\n Unnamed arrow functions within this block\n ---\n - help wanted or discussion\n - view test.stickybits.js\n - `stickybits .manageState `position: fixed` interface` for more awareness πŸ‘€\n */\n\n if (notSticky) {\n it.state = 'sticky';\n } else if (isSticky) {\n it.state = 'default';\n } else if (isStuck) {\n it.state = 'stuck';\n }\n\n var isStickyChange = scroll >= change && scroll <= stop;\n var isNotStickyChange = scroll < change / 2 || scroll > stop;\n\n if (isNotStickyChange) {\n it.stateChange = 'default';\n } else if (isStickyChange) {\n it.stateChange = 'sticky';\n } // Only apply new styles if the state has changed\n\n\n if (state === it.state && stateChange === it.stateChange) return;\n rAF(function () {\n var _styles2, _classes, _styles3, _extends2, _classes2, _style$classes;\n\n var stateStyles = {\n sticky: {\n styles: (_styles2 = {\n position: pv,\n top: '',\n bottom: ''\n }, _styles2[vp] = p.stickyBitStickyOffset + \"px\", _styles2),\n classes: (_classes = {}, _classes[sticky] = true, _classes)\n },\n default: {\n styles: (_styles3 = {}, _styles3[vp] = '', _styles3),\n classes: {}\n },\n stuck: {\n styles: _extends((_extends2 = {}, _extends2[vp] = '', _extends2), pv === 'fixed' && !ns || !_this3.isWin ? {\n position: 'absolute',\n top: '',\n bottom: '0'\n } : {}),\n classes: (_classes2 = {}, _classes2[stuck] = true, _classes2)\n }\n };\n\n if (pv === 'fixed') {\n stateStyles.default.styles.position = '';\n }\n\n var style = stateStyles[it.state];\n style.classes = (_style$classes = {}, _style$classes[stuck] = !!style.classes[stuck], _style$classes[sticky] = !!style.classes[sticky], _style$classes[stickyChange] = isStickyChange, _style$classes);\n aS(style, item);\n });\n }\n /*\n applyStyle\n ---\n - apply the given styles and classes to the element\n */\n ;\n\n _proto.applyStyle = function applyStyle(_ref, item) {\n var styles = _ref.styles,\n classes = _ref.classes;\n // cache object\n var it = item;\n var e = it.el;\n var p = it.props;\n var stl = e.style; // cache props\n\n var ns = p.noStyles;\n var cArray = e.className.split(' '); // Disable due to bug with old versions of eslint-scope and for ... in\n // https://github.com/eslint/eslint/issues/12117\n // eslint-disable-next-line no-unused-vars\n\n for (var cls in classes) {\n var addClass = classes[cls];\n\n if (addClass) {\n if (cArray.indexOf(cls) === -1) cArray.push(cls);\n } else {\n var idx = cArray.indexOf(cls);\n if (idx !== -1) cArray.splice(idx, 1);\n }\n }\n\n e.className = cArray.join(' ');\n\n if (styles['position']) {\n stl['position'] = styles['position'];\n }\n\n if (ns) return; // eslint-disable-next-line no-unused-vars\n\n for (var key in styles) {\n stl[key] = styles[key];\n }\n };\n\n _proto.update = function update(updatedProps) {\n var _this4 = this;\n\n if (updatedProps === void 0) {\n updatedProps = null;\n }\n\n this.instances.forEach(function (instance) {\n _this4.computeScrollOffsets(instance);\n\n if (updatedProps) {\n // eslint-disable-next-line no-unused-vars\n for (var updatedProp in updatedProps) {\n instance.props[updatedProp] = updatedProps[updatedProp];\n }\n }\n });\n return this;\n }\n /*\n removes an instance πŸ‘‹\n --------\n - cleanup instance\n */\n ;\n\n _proto.removeInstance = function removeInstance(instance) {\n var _styles4, _classes3;\n\n var e = instance.el;\n var p = instance.props;\n this.applyStyle({\n styles: (_styles4 = {\n position: ''\n }, _styles4[p.verticalPosition] = '', _styles4),\n classes: (_classes3 = {}, _classes3[p.stickyClass] = '', _classes3[p.stuckClass] = '', _classes3)\n }, instance);\n this.toggleClasses(e.parentNode, p.parentClass);\n }\n /*\n cleanup πŸ›\n --------\n - cleans up each instance\n - clears instance\n */\n ;\n\n _proto.cleanup = function cleanup() {\n for (var i = 0; i < this.instances.length; i += 1) {\n var instance = this.instances[i];\n\n if (instance.stateContainer) {\n instance.props.scrollEl.removeEventListener('scroll', instance.stateContainer);\n }\n\n this.removeInstance(instance);\n }\n\n this.manageState = false;\n this.instances = [];\n };\n\n return Stickybits;\n}();\n/*\n export\n --------\n exports StickBits to be used 🏁\n*/\n\n\nfunction stickybits(target, o) {\n return new Stickybits(target, o);\n}\n\nexport default stickybits;\n","/*!\n * Unidragger v2.3.1\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n","/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","/**\n * Primary front-end script.\n *\n * Primary JavaScript file. Any includes or anything imported should\n * be filtered through this file and eventually saved back into the\n * `/dist/js/app.js` file.\n *\n * @package Bigearsfestival\n * @author John Leskas \n * @copyright 2018 John Leskas\n * @license https://www.gnu.org/licenses/gpl-2.0.html GPL-2.0-or-later\n * @link https://bigearsfestival.org\n */\nimport {megaMenu} from './modules/megamenu';\nimport {subMenus} from './modules/submenus';\nimport {eventBar} from './modules/eventBar';\nimport {heroVideoFunc} from './modules/heroVideo';\nimport {carouselFunc} from './modules/carousel';\nimport {missionOverlay} from './modules/missionOverlay';\nimport {faqFunc} from './modules/faq';\nimport {buttonShareFunc} from './modules/buttonShare';\nimport {eventLineupClickFunc} from './modules/eventLineupClick';\nimport {toggleArtistModal} from './modules/toggleArtistModal';\nimport {toggleEventLineupArtist} from './modules/toggleEventLineupArtist';\nimport {nextPrevFunc} from './modules/nextPrevFunc'; // Next/Prev functionality used for multiple components\nimport {pageOverlay} from './modules/pageOverlay';\nimport {toggleSelection} from './modules/toggleSelection';\nimport {stickyElements} from './modules/stickyElements';\nimport {postCarouselRotate} from './modules/postCarouselRotate';\n\n/**\n * A simple immediately-invoked function expression to kick-start\n * things and encapsulate our code.\n *\n * @return void\n */\n(function () {\n\n\t// Page Overlay Functionality\n\tpageOverlay();\n\n\t// Hero Video Functionality\n\theroVideoFunc();\n\n\t// Media Carousel functionality\n\tcarouselFunc();\n\n\t// Event Bar Functionality\n\teventBar();\n\n\t// Mega Menu Functionality\n\tmegaMenu();\n\n\t// Sub Menus Functionality\n\tsubMenus();\n\n\t// Mission Overlay Functionality\n\tmissionOverlay();\n\n\t// FAQs Functionality\n\tfaqFunc();\n\n\t// Button Share Functionality\n\tbuttonShareFunc();\n\n\t// Sticky elements functionality\n\tstickyElements();\n\n\t// Event Lineup Click Functionality\n\teventLineupClickFunc();\n\n\t// Event Lineup Hover Functionality\n\ttoggleArtistModal('.c-lineup-artist', '.js-artist-link');\n\n\t// Event List Modal Hover Functionality\n\ttoggleArtistModal('.js-event-modal-trigger', '.c-event-list-modal', '.c-event-list', true);\n\n\t// Event Lineup simple\n\ttoggleEventLineupArtist('.js-toggle-artist-modal', '.c-event-lineup-modal');\n\n\t// Next/Prev Event Functionality for mobile\n\tnextPrevFunc('.js-prev-event-btn', '.js-next-event-btn', '.c-event-card--mobile-slider');\n\n\t// Artist Profile Slider Functionality\n\tnextPrevFunc('.js-prev-artist-profile', '.js-next-artist-profile', '.c-artist-profile__slide');\n\n\t// Hero Slider next/prev Functionality\n\tnextPrevFunc('.js-prev-hero-slider', '.js-next-hero-slider', '.o-hero-media__slide');\n\n\t// Package Tiers next/prev Functionality\n\tnextPrevFunc('.js-prev-tier-btn', '.js-next-tier-btn', '.package-tier-item', '.package-tier-list-item');\n\ttoggleSelection('.js-toggle-package-tier-item', '.package-tier-item', '.package-tier-list-item');\n\n\t// CTA Press Quotes next/prev Functionality\n\tnextPrevFunc('.js-prev-press-quote-btn', '.js-next-press-quote-btn', '.c-cta-press__item');\n\n\t// Auto rotate functionality for vertical news carousel block\n\tpostCarouselRotate('.vertical-carousel-item', '.vertical-carousel-post', appLocalizedArray.news_carousel_animation_delay);\n\n})();\n","/*\n * Functions related to Button Share functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nimport {findAncestor} from './helpers';\n\nexport const buttonShareFunc = () => {\n\tconst buttonShare = document.querySelectorAll( '.js-button-share' );\n\n\tbuttonShare.forEach( ( item ) => {\n\t\titem.addEventListener( 'click', el => {\n\t\t\tel.preventDefault();\n\t\t\tfindAncestor( item, '.c-button-share' ).classList.toggle( 'c-button-share--active' );\n\t\t} )\n\t} )\n}\n","/*\n * Functions related to Media Carousel functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\n\nimport {fizzyUIUtils as utils} from 'fizzy-ui-utils';\nimport matchesSelector from 'desandro-matches-selector/matches-selector';\n\nconst Flickity = require( 'flickity' );\n\nexport const carouselFunc = () => {\n\tconst mediaCarousels = document.querySelectorAll( '.js-media-carousel' );\n\tconst articleCarousels = document.querySelectorAll( '.js-article-carousel' );\n\n\tconst articleCarouselOptions = {\n\t\tautoPlay: false,\n\t\tcellAlign: 'left',\n\t\timagesLoaded: true,\n\t\tpageDots: false,\n\t\twrapAround: true,\n\t\tprevNextButtons: true\n\t}\n\n\tconst mediaCarouselOptions = {\n\t\tautoPlay: false,\n\t\tcellAlign: 'left',\n\t\timagesLoaded: true,\n\t\tpageDots: false,\n\t\twrapAround: true,\n\t\tprevNextButtons: true\n\t}\n\n\tif ( articleCarousels ) {\n\t\tarticleCarousels.forEach( ( carouselItem, index ) => {\n\t\t\tlet mediaCarouselEl = articleCarousels[index];\n\t\t\tlet flktyImageSlider = new Flickity( mediaCarouselEl, mediaCarouselOptions );\n\n\t\t\tflktyImageSlider.on( 'ready', flktyImageSlider.reposition );\n\t\t\tflktyImageSlider.on( 'change', flktyImageSlider.reposition );\n\t\t} );\n\t}\n\n\tif ( mediaCarousels ) {\n\t\tmediaCarousels.forEach( ( carouselItem, index ) => {\n\t\t\tlet mediaCarouselEl = mediaCarousels[index];\n\t\t\tlet flktyImageSlider = new Flickity( mediaCarouselEl, mediaCarouselOptions );\n\n\t\t\tflktyImageSlider.on( 'ready', flktyImageSlider.reposition );\n\t\t\tflktyImageSlider.on( 'change', flktyImageSlider.reposition );\n\t\t} );\n\t}\n\n}\n","/**\n * Functions related to Event Bar functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\n\nimport {getClosest, addEventListenerIfElExists} from './helpers';\n\nexport const eventBar = () => {\n\tconst eventFiltersToggleBtn = document.querySelector( '.js-toggle-event-filters' );\n\tconst eventFiltersCloseBtn = document.querySelector( '.js-close-event-filters' );\n\tconst eventSearchToggleBtn = document.querySelector( '.js-toggle-event-search' );\n\tconst eventSearchCloseBtn = document.querySelector( '.js-close-event-search' );\n\tconst eventBarFiltersActiveClass = 'c-event-bar--filters-active';\n\tconst eventBarSearchActiveClass = 'c-event-bar--search-active';\n\n\t/*\n\t * Toggle Event Filters\n\t */\n\tfunction closeEventFilters( e ) {\n\t\te.preventDefault();\n\n\t\tgetClosest( e.target, '.c-event-bar' ).classList.remove( eventBarFiltersActiveClass );\n\t}\n\n\t/*\n\t * Close Event Filters\n\t */\n\tfunction toggleEventFilters( e ) {\n\t\te.preventDefault();\n\n\t\tgetClosest( e.target, '.c-event-bar' ).classList.remove( eventBarSearchActiveClass );\n\t\tgetClosest( e.target, '.c-event-bar' ).classList.toggle( eventBarFiltersActiveClass );\n\t}\n\n\t/*\n\t * Toggle Event Search\n\t */\n\tfunction toggleSearchFilters( e ) {\n\t\te.preventDefault();\n\n\t\tgetClosest( e.target, '.c-event-bar' ).classList.remove( eventBarFiltersActiveClass );\n\t\tgetClosest( e.target, '.c-event-bar' ).classList.toggle( eventBarSearchActiveClass );\n\t}\n\n\t/*\n\t * Close Event Search\n\t */\n\tfunction closeSearchFilters( e ) {\n\t\te.preventDefault();\n\t\tgetClosest( e.target, '.c-event-bar' ).classList.toggle( eventBarSearchActiveClass );\n\t}\n\n\n\taddEventListenerIfElExists( eventSearchToggleBtn, toggleSearchFilters )\n\taddEventListenerIfElExists( eventSearchCloseBtn, closeSearchFilters )\n\taddEventListenerIfElExists( eventFiltersToggleBtn, toggleEventFilters )\n\taddEventListenerIfElExists( eventFiltersCloseBtn, closeEventFilters )\n\n\n}\n","/*\n * Functions related to Event Lineup block functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const eventLineupClickFunc = () => {\n\tconst eventWeekends = document.querySelectorAll( '.c-event-weekend__item' );\n\tconst eventLineUpWeekendTrigger = document.querySelectorAll( '.js-event-lineup-weekend-btn' );\n\tconst eventArtistsList = document.querySelectorAll( '.c-event-artists-list' );\n\tconst activeClass = 'is-active';\n\n\t/*\n\t * Open Event LineUp Artists\n\t */\n\tfunction openEventLineUpArtists( el ) {\n\t\tel.preventDefault();\n\t\tconst count = this.getAttribute( 'data-id' );\n\n\t\t// Loop through all event artists lists and remove them\n\t\teventArtistsList.forEach( item => {\n\t\t\titem.classList.remove( activeClass );\n\t\t} );\n\n\t\t// Show current event artists list\n\t\tdocument.querySelector( `.c-inline-list[data-id=\"${count}\"]` ).classList.add( activeClass )\n\n\t\t// Loop through all event weekends and remove them\n\t\teventWeekends.forEach( item => {\n\t\t\titem.classList.remove( activeClass );\n\t\t} );\n\n\t\t// Show current event weekend\n\t\tdocument.querySelector( `.c-event-weekend__item[data-id=\"${count}\"]` ).classList.add( activeClass )\n\t}\n\n\t// Event Lineup Weekend `click` trigger\n\teventLineUpWeekendTrigger.forEach( ( item ) => {\n\t\titem.addEventListener( 'click', openEventLineUpArtists );\n\t} );\n}\n","/*\n * Functions related to FAQ functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nimport {getClosest} from './helpers';\n\nexport const faqFunc = () => {\n\tconst faqToggle = document.querySelectorAll( '.js-faq-toggle' );\n\n\n\t/**\n\t * Implement toggle functionality for FAQ Component\n\t *\n\t * @return void\n\t * @since 1.0.0\n\t * @access public\n\t */\n\tfaqToggle.forEach( function ( element, index ) {\n\n\t\telement.addEventListener( 'click', function ( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tconst parentItem = getClosest( event.target, '.c-faq' );\n\t\t\tconst activeElements = Array.from( document.querySelectorAll( '.c-faq--open' ) );\n\t\t\tconst openFaqClass = 'c-faq--open';\n\n\t\t\tif ( parentItem.classList.contains( openFaqClass ) ) {\n\t\t\t\tactiveElements.forEach( node => {\n\t\t\t\t\tnode.classList.remove( openFaqClass );\n\t\t\t\t} );\n\t\t\t\tparentItem.classList.remove( openFaqClass );\n\t\t\t} else {\n\t\t\t\tactiveElements.forEach( node => {\n\t\t\t\t\tnode.classList.remove( openFaqClass );\n\t\t\t\t} );\n\t\t\t\tparentItem.classList.add( openFaqClass );\n\t\t\t}\n\t\t} );\n\n\t} );\n}\n","/**\n * Helper Function to toggle between two classes using Vanilla JS\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const toggleCSSClasses = (el, ...cls) => cls.map(cl => el.classList.toggle(cl));\n\n/**\n * Helper variables\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const body = document.querySelector('body');\nexport const windowWidth = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0)\nexport const windowHeight = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)\nexport const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\nexport const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\nexport const isUserLoggedIn = body.classList.contains('logged-in');\nexport const wpAdminBarSpace = isUserLoggedIn ? (isMobile ? 46 : 32) : 0;\nexport const activeClass = 'is-active';\nexport const hiddenClass = 'is-hidden';\nexport const mobileMenuOpenClass = 'is-mobile-menu-open';\nexport const stickyHeaderClass = 'is-header-sticky';\n\n/**\n * Helper Function that finds the ancestor of a specific element\n *\n * @param el - The element that is used as the point from where we start\n * @param sel - The element that we would like to target\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const findAncestor = (el, sel) => {\n\twhile ((el = el.parentElement) && !((el.matches || el.matchesSelector).call(el, sel))) ;\n\treturn el;\n};\n\n/**\n * Helper Function that provides the sum of an array\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const arrSum = arr => arr.reduce((a, b) => a + b, 0);\n\n\n/**\n * Helper Function that provides the closest selector\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const getClosest = function (elem, selector) {\n\t// Element.matches() polyfill\n\tif(!Element.prototype.matches) {\n\t\tElement.prototype.matches =\n\t\t\tElement.prototype.matchesSelector ||\n\t\t\tElement.prototype.mozMatchesSelector ||\n\t\t\tElement.prototype.msMatchesSelector ||\n\t\t\tElement.prototype.oMatchesSelector ||\n\t\t\tElement.prototype.webkitMatchesSelector ||\n\t\t\tfunction (s) {\n\t\t\t\tvar matches = (this.document || this.ownerDocument).querySelectorAll(s),\n\t\t\t\t\ti = matches.length;\n\t\t\t\twhile (--i >= 0 && matches.item(i) !== this) {\n\t\t\t\t}\n\t\t\t\treturn i > -1;\n\t\t\t};\n\t}\n\n\t// Get the closest matching element\n\tfor (; elem && elem !== document; elem = elem.parentNode) {\n\t\tif(elem.matches(selector)) return elem;\n\t}\n\treturn null;\n};\n\n/**\n * Helper Function that adds an event listener only if El exists\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const addEventListenerIfElExists = function (el, targetFunction) {\n\tif(document.body.contains(el)) {\n\t\tel.addEventListener('click', targetFunction);\n\t}\n}\n\n\n/**\n * Helper Function that adds an event listener only if El exists\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const addEventListenersIfElExists = function (item, targetFunction) {\n\tif(document.body.contains(item)) {\n\t\titem.forEach((el) => {\n\t\t\tel.addEventListener('click', targetFunction);\n\t\t})\n\t}\n}\n\n\n/**\n * Helper Function that checks if an element is in page\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const isInPage = function (node) {\n\treturn (node === document.body) ? false : document.body.contains(node);\n}\n","/**\n * Functions related to Event Bar functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nimport {addEventListenerIfElExists} from './helpers';\n\nexport const heroVideoFunc = () => {\n\tconst enableHeroAudioBtn = document.querySelector( '.js-enable-hero-audio' );\n\n\t// Enable Hero Audio function\n\tfunction enableHeroAudio( el ) {\n\t\tconst heroVideoEl = document.querySelector( '#hero-video' );\n\t\tconst audioEnabledClass = 'is-audio-enabled';\n\n\t\tel.preventDefault();\n\n\t\t// Check if video is paused\n\t\tif ( heroVideoEl.muted == true ) {\n\t\t\theroVideoEl.muted = false; // Enable audio\n\n\t\t\tthis.classList.add( audioEnabledClass ); // Add class is audio enabled\n\t\t} else { // Otherwise\n\t\t\theroVideoEl.muted = true; // Disable audio\n\n\t\t\tthis.classList.remove( audioEnabledClass ); // Remove class is audio enabled\n\t\t}\n\t}\n\n\t// Event Audio Trigger\n\taddEventListenerIfElExists( enableHeroAudioBtn, enableHeroAudio );\n}\n","/**\n * Functions related to Mega Menu functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const megaMenu = () => {\n\tconst body = document.querySelector( 'body' );\n\tconst megaMenuToggle = document.querySelector( '.js-toggle-mega-menu' );\n\tconst subMenuToggles = document.querySelectorAll( '.js-toggle-sub-menu' );\n\tconst subMenus = document.querySelectorAll( '.c-sub-menu' );\n\tconst megaMenuActiveClass = 'is-mega-menu-active';\n\tconst activeClass = 'is-active';\n\n\t// Mega Menu Toggle functionality\n\tfunction toggleMegaMenu( e ) {\n\t\te.preventDefault();\n\n\t\t// Close all submenu items\n\t\tsubMenuToggles.forEach( ( item ) => {\n\t\t\titem.classList.remove( activeClass );\n\t\t} );\n\n\t\t// Close all submenus\n\t\tsubMenus.forEach( ( item ) => {\n\t\t\titem.classList.remove( activeClass );\n\t\t} );\n\n\t\tthis.classList.toggle( activeClass );\n\t\tbody.classList.toggle( megaMenuActiveClass );\n\t}\n\n\t// Listeners\n\tmegaMenuToggle.addEventListener( 'click', toggleMegaMenu );\n\n}\n","/**\n * Functions related to Mission Overlay functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const missionOverlay = () => {\n\tconst missionIcons = document.querySelectorAll( '.js-mission-icon' );\n\tconst missionOverlays = document.querySelectorAll( '.c-mission-overlay' );\n\tconst missionOverlayCloseBtns = document.querySelectorAll( '.js-close-mission-overlay' );\n\tconst activeClass = 'is-active';\n\n\t// Mission Overlay toggle functionality\n\tfunction toggleMissionOverlay( e ) {\n\t\te.preventDefault();\n\n\t\tconst id = this.getAttribute( 'data-id' );\n\t\tconst activeMissionOverlay = document.getElementById( id );\n\n\t\tif ( !activeMissionOverlay.classList.contains( activeClass ) ) {\n\t\t\t// Close all mission Overlays\n\t\t\tmissionOverlays.forEach( ( item ) => {\n\t\t\t\titem.classList.remove( activeClass );\n\t\t\t} );\n\n\t\t\tactiveMissionOverlay.classList.add( activeClass );\n\t\t} else {\n\t\t\t// Close all mission Overlays\n\t\t\tmissionOverlays.forEach( ( item ) => {\n\t\t\t\titem.classList.remove( activeClass );\n\t\t\t} );\n\t\t}\n\n\t}\n\n\t// Mission Overlay close functionality\n\tfunction closeMissionOverlay( e ) {\n\t\te.preventDefault();\n\n\t\t// Close all mission Overlays\n\t\tmissionOverlays.forEach( ( item ) => {\n\t\t\titem.classList.remove( activeClass );\n\t\t} );\n\t}\n\n\t/*\n\t * Mission Icons Event Listeners\n\t */\n\tmissionIcons.forEach( ( item ) => {\n\t\titem.addEventListener( 'click', toggleMissionOverlay );\n\t} );\n\n\tmissionOverlayCloseBtns.forEach( ( item ) => {\n\t\titem.addEventListener( 'click', closeMissionOverlay );\n\t} )\n\n}\n","/*\n * Functions related to next/prev item functionality\n *\n * @param string selectedElement is the element to be selected\n * @param string prevBtnTrigger is the element to be selected as the prev functionality trigger\n * @param string nextBtnTrigger is the element to be selected as the next functionality trigger\n * @param string activeClass is the active class to be used to activate the selected element\n */\nimport {addEventListenerIfElExists} from './helpers';\n\nexport const nextPrevFunc = (prevBtnTrigger, nextBtnTrigger, selectedElement, additionalSelectedElement = null, activeClass = 'is-active') => {\n\tlet itemsArray = []; // Set Items Array to hold the items found in DOM\n\tconst selectedElements = selectedElement && document.querySelectorAll(selectedElement);\n\tconst additionalSelectedElements = additionalSelectedElement && document.querySelectorAll(additionalSelectedElement);\n\n\tdocument.querySelectorAll(selectedElement).forEach((item) => {\n\t\titemsArray.push(item);\n\t});\n\n\t// Check if items array exist\n\tif(itemsArray.length > 1) {\n\t\tlet id = 1;\n\t\tconst itemsArrayLength = itemsArray.length;\n\t\tconst nextBtn = document.querySelector(nextBtnTrigger);\n\t\tconst prevBtn = document.querySelector(prevBtnTrigger);\n\n\t\t// Prev Item Functionality\n\t\tfunction prevItemTrigger(e) {\n\t\t\te.preventDefault();\n\n\t\t\tselectedElement && selectedElements.forEach(item => item.classList.remove(activeClass));\n\t\t\tadditionalSelectedElement && additionalSelectedElements.forEach(item => item.classList.remove(activeClass));\n\n\t\t\tif(1 === id) {\n\t\t\t\tid = itemsArrayLength;\n\t\t\t} else {\n\t\t\t\tid--;\n\t\t\t}\n\n\t\t\tselectedElement && document.querySelector(`${selectedElement}[data-id=\"${id}\"]`).classList.add(activeClass);\n\t\t\tadditionalSelectedElement && document.querySelector(`${additionalSelectedElement}[data-id=\"${id}\"]`).classList.add(activeClass);\n\t\t}\n\n\t\t// Next Item Functionality\n\t\tfunction nextItemTrigger(e) {\n\t\t\te.preventDefault();\n\n\t\t\tselectedElement && selectedElements.forEach(item => item.classList.remove(activeClass));\n\t\t\tadditionalSelectedElement && additionalSelectedElements.forEach(item => item.classList.remove(activeClass));\n\n\t\t\tif(id === itemsArrayLength) {\n\t\t\t\tid = 1;\n\t\t\t} else {\n\t\t\t\tid++;\n\t\t\t}\n\n\t\t\tselectedElement && document.querySelector(`${selectedElement}[data-id=\"${id}\"]`).classList.add(activeClass);\n\t\t\tadditionalSelectedElement && document.querySelector(`${additionalSelectedElement}[data-id=\"${id}\"]`).classList.add(activeClass);\n\t\t}\n\n\t\t// Prev trigger\n\t\taddEventListenerIfElExists(prevBtn, prevItemTrigger);\n\n\t\t// Next trigger\n\t\taddEventListenerIfElExists(nextBtn, nextItemTrigger);\n\n\t}\n}\n","/*\n * Functions related to FAQ functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nimport {isInPage} from './helpers';\n\nexport const pageOverlay = () => {\n\tconst pageOverlay = document.querySelector( '.c-page-overlay' );\n\tconst activeClass = 'is-active';\n\tconst delay = appLocalizedArray.page_load_delay;\n\n\tfunction closePageOverlay() {\n\t\tsetTimeout( function () {\n\t\t\tpageOverlay.classList.remove( activeClass );\n\t\t}, delay );\n\t}\n\n\tif ( isInPage( pageOverlay ) ) {\n\t\tclosePageOverlay();\n\t}\n\n}\n","/**\n * Functions related to vertical posts auto-rotate functionality\n *\n * @return void\n */\nimport {activeClass} from './helpers';\n\nexport const postCarouselRotate = (selectedElement, additionalElement, animationDelay = 4000) => {\n\tlet postCarouselItemsArray = [];\n\n\tselectedElement && document.querySelectorAll(`${selectedElement}`).forEach((item) => {\n\t\tpostCarouselItemsArray.push(item);\n\t});\n\n\tif(postCarouselItemsArray.length > 1) {\n\t\tlet count = 1;\n\t\tconst postCarouselItemsArrayLength = postCarouselItemsArray.length;\n\n\t\t// Set Animation Fade\n\t\tfunction setAutoRotate(currentCount, interval) {\n\t\t\tselectedElement && document.querySelector(`${selectedElement}[data-id=\"${currentCount}\"]`).classList.add(activeClass);\n\t\t\tadditionalElement && document.querySelector(`${additionalElement}[data-id=\"${currentCount}\"]`).classList.add(activeClass);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tselectedElement && document.querySelector(`${selectedElement}[data-id=\"${currentCount}\"]`).classList.remove(activeClass);\n\t\t\t\tadditionalElement && document.querySelector(`${additionalElement}[data-id=\"${currentCount}\"]`).classList.remove(activeClass);\n\t\t\t}, interval);\n\t\t}\n\n\t\t// Set Interval\n\t\tsetInterval(() => {\n\n\t\t\t// Trigger animation fadeout for previous element\n\t\t\tsetAutoRotate(count, 1,);\n\n\t\t\tif(count === postCarouselItemsArrayLength) {\n\t\t\t\tcount = 1;\n\t\t\t} else {\n\t\t\t\tcount++;\n\t\t\t}\n\n\t\t\t// Trigger animation fadein for current element\n\t\t\tsetAutoRotate(count, animationDelay);\n\n\t\t}, animationDelay);\n\t}\n}\n","/**\n * Functions related to sticky functionality\n *\n * @return void\n */\n\nimport stickybits from 'stickybits'\n\nexport const stickyElements = function () {\n\t/*\n\t* Make `.js-sticky-el` sticky on scroll\n\t*\n\t*\n\t* @since 1.0.0\n\t* @access public\n\t* @return void\n\t*\n\t*/\n\tstickybits( '.js-sticky-el', {\n\t\tstickyBitStickyOffset: 0,\n\t\tuseStickyClasses: true\n\t} );\n}\n","/**\n * Functions related to Sub Menus functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\nexport const subMenus = () => {\n\tconst body = document.querySelector( 'body' );\n\tconst megaMenuToggle = document.querySelector( '.js-toggle-mega-menu' );\n\tconst subMenuToggles = document.querySelectorAll( '.js-toggle-sub-menu' );\n\tconst subMenuClose = document.querySelectorAll( '.js-sub-menu-close' );\n\tconst subMenus = document.querySelectorAll( '.c-sub-menu' );\n\tconst activeClass = 'is-active';\n\n\t// Sub Menu close functionality\n\tfunction closeSubMenu( e ) {\n\t\te.preventDefault();\n\n\t\tsubMenus.forEach( ( item ) => {\n\t\t\titem.classList.remove( activeClass );\n\t\t} );\n\t}\n\n\t// Sub Menu toggle functionality\n\tfunction toggleSubMenu( e ) {\n\t\te.preventDefault();\n\n\t\tconst id = this.getAttribute( 'data-id' );\n\t\tconst activeSubMenu = document.getElementById( 'c-sub-menu-' + id );\n\n\t\t// Close MegaMenu if open\n\t\tbody.classList.remove( 'is-mega-menu-active' );\n\t\tmegaMenuToggle.classList.remove( activeClass );\n\n\t\tif ( !activeSubMenu.classList.contains( activeClass ) ) {\n\t\t\t// Close all submenus\n\t\t\tsubMenus.forEach( ( item ) => {\n\t\t\t\titem.classList.remove( activeClass );\n\t\t\t} );\n\n\t\t\tactiveSubMenu.classList.add( activeClass );\n\t\t} else {\n\t\t\t// Close all submenus\n\t\t\tsubMenus.forEach( ( item ) => {\n\t\t\t\titem.classList.remove( activeClass );\n\t\t\t} );\n\t\t}\n\n\t\t// Close all submenu items\n\t\tsubMenuToggles.forEach( ( item ) => {\n\t\t\titem.classList.remove( activeClass );\n\t\t} );\n\t\tthis.classList.add( activeClass );\n\t}\n\n\n\t/*\n\t * Submenu Event Listeners\n\t */\n\tsubMenuToggles.forEach( ( item ) => {\n\t\titem.addEventListener( 'click', toggleSubMenu );\n\t} );\n\n\tsubMenuClose.forEach( ( item ) => {\n\t\titem.addEventListener( 'click', closeSubMenu );\n\t} )\n\n}\n","/*\n * Functions related to open Selected element on hover functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\n\nimport {isMobile, findAncestor} from './helpers';\n\nexport const toggleArtistModal = ( triggerElement, selectedElement, additionalSelectedElement, toggle = false, activeClass = 'is-active' ) => {\n\tconst triggerElements = document.querySelectorAll( triggerElement );\n\tconst selectedElements = document.querySelectorAll( selectedElement );\n\tconst additionalSelectedElements = document.querySelectorAll( additionalSelectedElement );\n\n\t/*\n\t * Open Selected Modal\n\t */\n\tfunction openSelectedModal( el ) {\n\t\tel.preventDefault();\n\n\t\tconst id = this.getAttribute( 'data-id' );\n\n\t\tselectedElements.forEach( item => item.classList.remove( activeClass ) );\n\t\tadditionalSelectedElements.forEach( item => item.classList.remove( activeClass ) );\n\n\t\tdocument.querySelector( `${selectedElement}[data-id=\"${id}\"]` ).classList.add( activeClass );\n\t\tadditionalSelectedElement && document.querySelector( `${additionalSelectedElement}[data-id=\"${id}\"]` ).classList.add( activeClass );\n\n\t}\n\n\t/*\n\t * Toggle Selected Modal\n\t */\n\tfunction toggleSelected( el ) {\n\t\tel.preventDefault();\n\n\t\tconst id = this.getAttribute( 'data-id' );\n\n\t\tif ( !toggle ) {\n\t\t\tselectedElements.forEach( item => {\n\t\t\t\titem.classList.remove( activeClass );\n\t\t\t} );\n\n\t\t\ttriggerElements.forEach( item => {\n\t\t\t\titem.classList.remove( activeClass );\n\t\t\t} );\n\t\t}\n\n\t\tdocument.querySelector( `${selectedElement}[data-id=\"${id}\"]` ).classList.toggle( activeClass );\n\t\tdocument.querySelector( `${triggerElement}[data-id=\"${id}\"]` ).classList.toggle( activeClass );\n\t}\n\n\n\t// Check if a device is mobile and use click events instead of mouse over/out\n\tif ( isMobile ) {\n\t\ttriggerElements.forEach( item => {\n\t\t\titem.addEventListener( 'click', toggleSelected );\n\t\t} );\n\t} else {\n\t\t// `mouseenter` trigger\n\t\ttriggerElements.forEach( item => {\n\t\t\titem.addEventListener( 'mouseover', openSelectedModal );\n\t\t} );\n\t}\n\n\n}\n","/*\n * Functions related to open Selected element on hover functionality\n *\n * @return void\n * @since 1.0.0\n * @access public\n */\n\nimport {isMobile} from './helpers';\n\nexport const toggleEventLineupArtist = ( triggerElement, selectedElement, activeClass = 'is-active' ) => {\n\tconst triggerElements = document.querySelectorAll( triggerElement );\n\tconst selectedElements = document.querySelectorAll( selectedElement );\n\n\t/*\n\t * Open Selected Modal\n\t */\n\tfunction openSelectedModal( el ) {\n\t\tel.preventDefault();\n\n\t\tconst id = this.getAttribute( 'data-id' );\n\n\t\tselectedElements.forEach( item => item.classList.remove( activeClass ) );\n\t\tdocument.querySelector( `${selectedElement}[data-id=\"${id}\"]` ).classList.add( activeClass );\n\t}\n\n\t/*\n\t * Open Selected Modal\n\t */\n\tfunction closeSelectedModal( el ) {\n\t\tel.preventDefault();\n\n\t\tconst id = this.getAttribute( 'data-id' );\n\n\t\tselectedElements.forEach( item => item.classList.remove( activeClass ) );\n\t\tdocument.querySelector( `${selectedElement}[data-id=\"${id}\"]` ).classList.remove( activeClass );\n\t\tdocument.querySelector( `${selectedElement}[data-id=\"0\"]` ).classList.add( activeClass );\n\t}\n\n\t// Check if a device is mobile and use click events instead of mouse over/out\n\tif ( !isMobile ) {\n\t\t// `mouseenter` trigger\n\t\ttriggerElements.forEach( item => {\n\t\t\titem.addEventListener( 'mouseover', openSelectedModal );\n\t\t} );\n\t\t// `mouseleave` trigger\n\t\ttriggerElements.forEach( item => {\n\t\t\titem.addEventListener( 'mouseleave', closeSelectedModal );\n\t\t} );\n\t}\n\n}\n","/**\n * Functions related to toggle selection functionality\n *\n * @param selectedElement\n * @param triggerElement\n * @param additionalSelectedElement\n * @param activeClass\n */\n\nexport const toggleSelection = (triggerElement, selectedElement, additionalSelectedElement = null, activeClass = 'is-active') => {\n\tconst triggerElements = document.querySelectorAll(triggerElement),\n\t\tselectedElements = document.querySelectorAll(selectedElement),\n\t\tadditionalSelectedElements = document.querySelectorAll(additionalSelectedElement)\n\n\tfunction toggleSelected(el) {\n\t\tel.preventDefault();\n\t\tconst id = this.getAttribute('data-id');\n\n\t\tselectedElement && selectedElements.forEach(item => item.classList.remove(activeClass));\n\t\ttriggerElement && triggerElements.forEach(item => item.classList.remove(activeClass));\n\t\tadditionalSelectedElement && additionalSelectedElements.forEach((item) => item.classList.remove(activeClass));\n\n\t\tselectedElement && document.querySelector(`${selectedElement}[data-id=\"${id}\"]`).classList.toggle(activeClass);\n\t\ttriggerElement && document.querySelector(`${triggerElement}[data-id=\"${id}\"]`).classList.toggle(activeClass);\n\t\tadditionalSelectedElement && document.querySelector(`${additionalSelectedElement}[data-id=\"${id}\"]`).classList.toggle(activeClass);\n\t}\n\n\ttriggerElements.forEach(item => item.addEventListener('click', toggleSelected));\n}\n","// removed by extract-text-webpack-plugin","// removed by extract-text-webpack-plugin","// removed by extract-text-webpack-plugin"],"sourceRoot":""}