{"version":3,"sources":["../../node_modules/bootstrap/js/src/carousel.js"],"names":["NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","SELECTOR_INDICATORS","PointerType","TOUCH","PEN","Carousel","element","config","this","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_element","_indicatorsElement","querySelector","_touchSupported","document","documentElement","navigator","maxTouchPoints","_pointerEvent","Boolean","window","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","is","css","prev","event","Util","triggerTransitionEnd","cycle","clearInterval","setInterval","visibilityState","bind","to","index","_this","activeIndex","_getItemIndex","length","one","direction","dispose","off","removeData","_objectSpread","typeCheckConfig","_handleSwipe","absDeltax","Math","abs","_this2","on","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","toUpperCase","clientX","touches","end","clearTimeout","setTimeout","querySelectorAll","e","preventDefault","classList","add","move","test","target","tagName","which","parentNode","slice","call","indexOf","_getItemByDirection","activeElement","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","Event","from","trigger","_setActiveIndicatorElement","indicators","removeClass","nextIndicator","children","addClass","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","hasClass","isDefaultPrevented","slidEvent","reflow","nextElementInterval","parseInt","getAttribute","defaultInterval","transitionDuration","getTransitionDurationFromElement","TRANSITION_END","CLASS_NAME_ACTIVE","emulateTransitionEnd","_jQueryInterface","each","data","action","TypeError","ride","_dataApiClickHandler","selector","getSelectorFromElement","slideIndex","carousels","i","len","$carousel","Constructor","noConflict"],"mappings":";;;;;;;;;;;uWAgBA,IAAMA,EAAyB,WAEzBC,EAAyB,cACzBC,EAAS,IAAoBD,EAE7BE,EAAyBC,EAAEC,GAAGL,GAM9BM,EAAU,CACdC,SAAW,IACXC,UAAW,EACXC,OAAW,EACXC,MAAW,QACXC,MAAW,EACXC,OAAW,GAGPC,EAAc,CAClBN,SAAW,mBACXC,SAAW,UACXC,MAAW,mBACXC,MAAW,mBACXC,KAAW,UACXC,MAAW,WAoCPE,EAAuB,uBAIvBC,EAAc,CAClBC,MAAQ,QACRC,IAAQ,OAQJC,aACJ,SAAAA,EAAYC,EAASC,GACnBC,KAAKC,OAAiB,KACtBD,KAAKE,UAAiB,KACtBF,KAAKG,eAAiB,KACtBH,KAAKI,WAAiB,EACtBJ,KAAKK,YAAiB,EACtBL,KAAKM,aAAiB,KACtBN,KAAKO,YAAiB,EACtBP,KAAKQ,YAAiB,EAEtBR,KAAKS,QAAqBT,KAAKU,WAAWX,GAC1CC,KAAKW,SAAqBb,EAC1BE,KAAKY,mBAAqBZ,KAAKW,SAASE,cAAcpB,GACtDO,KAAKc,gBAAqB,iBAAkBC,SAASC,iBAAmBC,UAAUC,eAAiB,EACnGlB,KAAKmB,cAAqBC,QAAQC,OAAOC,cAAgBD,OAAOE,gBAEhEvB,KAAKwB,gDAePC,KAAA,WACOzB,KAAKK,YACRL,KAAK0B,OAjFgB,WAqFzBC,gBAAA,YAGOZ,SAASa,QACX7C,EAAEiB,KAAKW,UAAUkB,GAAG,aAAsD,WAAvC9C,EAAEiB,KAAKW,UAAUmB,IAAI,eACzD9B,KAAKyB,UAITM,KAAA,WACO/B,KAAKK,YACRL,KAAK0B,OA/FgB,WAmGzBrC,MAAA,SAAM2C,GACCA,IACHhC,KAAKI,WAAY,GAGfJ,KAAKW,SAASE,cAzEO,8CA0EvBoB,EAAKC,qBAAqBlC,KAAKW,UAC/BX,KAAKmC,OAAM,IAGbC,cAAcpC,KAAKE,WACnBF,KAAKE,UAAY,QAGnBiC,MAAA,SAAMH,GACCA,IACHhC,KAAKI,WAAY,GAGfJ,KAAKE,YACPkC,cAAcpC,KAAKE,WACnBF,KAAKE,UAAY,MAGfF,KAAKS,QAAQvB,WAAac,KAAKI,YACjCJ,KAAKE,UAAYmC,aACdtB,SAASuB,gBAAkBtC,KAAK2B,gBAAkB3B,KAAKyB,MAAMc,KAAKvC,MACnEA,KAAKS,QAAQvB,cAKnBsD,GAAA,SAAGC,GAAO,IAAAC,EAAA1C,KACRA,KAAKG,eAAiBH,KAAKW,SAASE,cAxGX,yBA0GzB,IAAM8B,EAAc3C,KAAK4C,cAAc5C,KAAKG,gBAE5C,KAAIsC,EAAQzC,KAAKC,OAAO4C,OAAS,GAAKJ,EAAQ,GAI9C,GAAIzC,KAAKK,WACPtB,EAAEiB,KAAKW,UAAUmC,IAxIP,mBAwIuB,WAAA,OAAMJ,EAAKF,GAAGC,SADjD,CAKA,GAAIE,IAAgBF,EAGlB,OAFAzC,KAAKX,aACLW,KAAKmC,QAIP,IAAMY,EAAYN,EAAQE,EAxJH,OACA,OA2JvB3C,KAAK0B,OAAOqB,EAAW/C,KAAKC,OAAOwC,QAGrCO,QAAA,WACEjE,EAAEiB,KAAKW,UAAUsC,IAAIpE,GACrBE,EAAEmE,WAAWlD,KAAKW,SAAU/B,GAE5BoB,KAAKC,OAAqB,KAC1BD,KAAKS,QAAqB,KAC1BT,KAAKW,SAAqB,KAC1BX,KAAKE,UAAqB,KAC1BF,KAAKI,UAAqB,KAC1BJ,KAAKK,WAAqB,KAC1BL,KAAKG,eAAqB,KAC1BH,KAAKY,mBAAqB,QAK5BF,WAAA,SAAWX,GAMT,OALAA,EAAMoD,cAAA,GACDlE,EADC,GAEDc,GAELkC,EAAKmB,gBAAgBzE,EAAMoB,EAAQP,GAC5BO,KAGTsD,aAAA,WACE,IAAMC,EAAYC,KAAKC,IAAIxD,KAAKQ,aAEhC,KAAI8C,GA/MuB,IA+M3B,CAIA,IAAMP,EAAYO,EAAYtD,KAAKQ,YAEnCR,KAAKQ,YAAc,EAGfuC,EAAY,GACd/C,KAAK+B,OAIHgB,EAAY,GACd/C,KAAKyB,WAITD,mBAAA,WAAqB,IAAAiC,EAAAzD,KACfA,KAAKS,QAAQtB,UACfJ,EAAEiB,KAAKW,UAAU+C,GAzMJ,sBAyMsB,SAAC1B,GAAD,OAAWyB,EAAKE,SAAS3B,KAGnC,UAAvBhC,KAAKS,QAAQpB,OACfN,EAAEiB,KAAKW,UACJ+C,GA7Ma,yBA6MQ,SAAC1B,GAAD,OAAWyB,EAAKpE,MAAM2C,KAC3C0B,GA7Ma,yBA6MQ,SAAC1B,GAAD,OAAWyB,EAAKtB,MAAMH,KAG5ChC,KAAKS,QAAQlB,OACfS,KAAK4D,6BAITA,wBAAA,WAA0B,IAAAC,EAAA7D,KACxB,GAAKA,KAAKc,gBAAV,CAIA,IAAMgD,EAAQ,SAAC9B,GACT6B,EAAK1C,eAAiBzB,EAAYsC,EAAM+B,cAAcC,YAAYC,eACpEJ,EAAKtD,YAAcyB,EAAM+B,cAAcG,QAC7BL,EAAK1C,gBACf0C,EAAKtD,YAAcyB,EAAM+B,cAAcI,QAAQ,GAAGD,UAahDE,EAAM,SAACpC,GACP6B,EAAK1C,eAAiBzB,EAAYsC,EAAM+B,cAAcC,YAAYC,iBACpEJ,EAAKrD,YAAcwB,EAAM+B,cAAcG,QAAUL,EAAKtD,aAGxDsD,EAAKR,eACsB,UAAvBQ,EAAKpD,QAAQpB,QASfwE,EAAKxE,QACDwE,EAAKvD,cACP+D,aAAaR,EAAKvD,cAEpBuD,EAAKvD,aAAegE,WAAW,SAACtC,GAAD,OAAW6B,EAAK1B,MAAMH,IA5R9B,IA4R+D6B,EAAKpD,QAAQvB,YAIvGH,EAAEiB,KAAKW,SAAS4D,iBA5OS,uBA6OtBb,GA7Pe,wBA6PM,SAACc,GAAD,OAAOA,EAAEC,mBAE7BzE,KAAKmB,eACPpC,EAAEiB,KAAKW,UAAU+C,GAlQA,0BAkQsB,SAAC1B,GAAD,OAAW8B,EAAM9B,KACxDjD,EAAEiB,KAAKW,UAAU+C,GAlQF,wBAkQsB,SAAC1B,GAAD,OAAWoC,EAAIpC,KAEpDhC,KAAKW,SAAS+D,UAAUC,IAxPG,mBA0P3B5F,EAAEiB,KAAKW,UAAU+C,GA1QD,yBA0QsB,SAAC1B,GAAD,OAAW8B,EAAM9B,KACvDjD,EAAEiB,KAAKW,UAAU+C,GA1QF,wBA0QsB,SAAC1B,GAAD,OA1C1B,SAACA,GAERA,EAAM+B,cAAcI,SAAWnC,EAAM+B,cAAcI,QAAQtB,OAAS,EACtEgB,EAAKrD,YAAc,EAEnBqD,EAAKrD,YAAcwB,EAAM+B,cAAcI,QAAQ,GAAGD,QAAUL,EAAKtD,YAqCnBqE,CAAK5C,KACrDjD,EAAEiB,KAAKW,UAAU+C,GA1QH,uBA0QsB,SAAC1B,GAAD,OAAWoC,EAAIpC,UAIvD2B,SAAA,SAAS3B,GACP,IAAI,kBAAkB6C,KAAK7C,EAAM8C,OAAOC,SAIxC,OAAQ/C,EAAMgD,OACZ,KAvTyB,GAwTvBhD,EAAMyC,iBACNzE,KAAK+B,OACL,MACF,KA1TyB,GA2TvBC,EAAMyC,iBACNzE,KAAKyB,WAMXmB,cAAA,SAAc9C,GAIZ,OAHAE,KAAKC,OAASH,GAAWA,EAAQmF,WAC7B,GAAGC,MAAMC,KAAKrF,EAAQmF,WAAWV,iBAhRZ,mBAiRrB,GACGvE,KAAKC,OAAOmF,QAAQtF,MAG7BuF,oBAAA,SAAoBtC,EAAWuC,GAC7B,IAAMC,EApTiB,SAoTCxC,EAClByC,EApTiB,SAoTCzC,EAClBJ,EAAkB3C,KAAK4C,cAAc0C,GACrCG,EAAkBzF,KAAKC,OAAO4C,OAAS,EAI7C,IAHwB2C,GAAmC,IAAhB7C,GACnB4C,GAAmB5C,IAAgB8C,KAErCzF,KAAKS,QAAQnB,KACjC,OAAOgG,EAGT,IACMI,GAAa/C,GA/TI,SA8TLI,GAAgC,EAAI,IACZ/C,KAAKC,OAAO4C,OAEtD,OAAsB,IAAf6C,EACH1F,KAAKC,OAAOD,KAAKC,OAAO4C,OAAS,GAAK7C,KAAKC,OAAOyF,MAGxDC,mBAAA,SAAmBC,EAAeC,GAChC,IAAMC,EAAc9F,KAAK4C,cAAcgD,GACjCG,EAAY/F,KAAK4C,cAAc5C,KAAKW,SAASE,cA3S1B,0BA4SnBmF,EAAajH,EAAEkH,MApUR,oBAoU2B,CACtCL,cAAAA,EACA7C,UAAW8C,EACXK,KAAMH,EACNvD,GAAIsD,IAKN,OAFA/G,EAAEiB,KAAKW,UAAUwF,QAAQH,GAElBA,KAGTI,2BAAA,SAA2BtG,GACzB,GAAIE,KAAKY,mBAAoB,CAC3B,IAAMyF,EAAa,GAAGnB,MAAMC,KAAKnF,KAAKY,mBAAmB2D,iBA3TlC,YA4TvBxF,EAAEsH,GAAYC,YApUa,UAsU3B,IAAMC,EAAgBvG,KAAKY,mBAAmB4F,SAC5CxG,KAAK4C,cAAc9C,IAGjByG,GACFxH,EAAEwH,GAAeE,SA3UQ,cAgV/B/E,OAAA,SAAOqB,EAAWjD,GAAS,IAQrB4G,EACAC,EACAd,EAVqBe,EAAA5G,KACnBsF,EAAgBtF,KAAKW,SAASE,cAxUX,yBAyUnBgG,EAAqB7G,KAAK4C,cAAc0C,GACxCwB,EAAgBhH,GAAWwF,GAC/BtF,KAAKqF,oBAAoBtC,EAAWuC,GAChCyB,EAAmB/G,KAAK4C,cAAckE,GACtCE,EAAY5F,QAAQpB,KAAKE,WAgB/B,GA1XuB,SAgXnB6C,GACF2D,EA1V2B,qBA2V3BC,EA1V2B,qBA2V3Bd,EAjXqB,SAmXrBa,EA/V2B,sBAgW3BC,EA7V2B,qBA8V3Bd,EApXqB,SAuXnBiB,GAAe/H,EAAE+H,GAAaG,SAtWL,UAuW3BjH,KAAKK,YAAa,OAKpB,IADmBL,KAAK2F,mBAAmBmB,EAAajB,GACzCqB,sBAIV5B,GAAkBwB,EAAvB,CAKA9G,KAAKK,YAAa,EAEd2G,GACFhH,KAAKX,QAGPW,KAAKoG,2BAA2BU,GAEhC,IAAMK,EAAYpI,EAAEkH,MA3YR,mBA2Y0B,CACpCL,cAAekB,EACf/D,UAAW8C,EACXK,KAAMW,EACNrE,GAAIuE,IAGN,GAAIhI,EAAEiB,KAAKW,UAAUsG,SAnYQ,SAmYoB,CAC/ClI,EAAE+H,GAAaL,SAASE,GAExB1E,EAAKmF,OAAON,GAEZ/H,EAAEuG,GAAemB,SAASC,GAC1B3H,EAAE+H,GAAaL,SAASC,GAExB,IAAMW,EAAsBC,SAASR,EAAYS,aAAa,iBAAkB,IAC5EF,GACFrH,KAAKS,QAAQ+G,gBAAkBxH,KAAKS,QAAQ+G,iBAAmBxH,KAAKS,QAAQvB,SAC5Ec,KAAKS,QAAQvB,SAAWmI,GAExBrH,KAAKS,QAAQvB,SAAWc,KAAKS,QAAQ+G,iBAAmBxH,KAAKS,QAAQvB,SAGvE,IAAMuI,EAAqBxF,EAAKyF,iCAAiCpC,GAEjEvG,EAAEuG,GACCxC,IAAIb,EAAK0F,eAAgB,WACxB5I,EAAE+H,GACCR,YAAeI,EADlB,IAC0CC,GACvCF,SA1ZoB,UA4ZvB1H,EAAEuG,GAAegB,YAAesB,UAAqBjB,EAArD,IAAuED,GAEvEE,EAAKvG,YAAa,EAElBiE,WAAW,WAAA,OAAMvF,EAAE6H,EAAKjG,UAAUwF,QAAQgB,IAAY,KAEvDU,qBAAqBJ,QAExB1I,EAAEuG,GAAegB,YApaU,UAqa3BvH,EAAE+H,GAAaL,SAraY,UAua3BzG,KAAKK,YAAa,EAClBtB,EAAEiB,KAAKW,UAAUwF,QAAQgB,GAGvBH,GACFhH,KAAKmC,YAMF2F,iBAAP,SAAwB/H,GACtB,OAAOC,KAAK+H,KAAK,WACf,IAAIC,EAAOjJ,EAAEiB,MAAMgI,KAAKpJ,GACpB6B,EAAO0C,cAAA,GACNlE,EADM,GAENF,EAAEiB,MAAMgI,QAGS,iBAAXjI,IACTU,EAAO0C,cAAA,GACF1C,EADE,GAEFV,IAIP,IAAMkI,EAA2B,iBAAXlI,EAAsBA,EAASU,EAAQrB,MAO7D,GALK4I,IACHA,EAAO,IAAInI,EAASG,KAAMS,GAC1B1B,EAAEiB,MAAMgI,KAAKpJ,EAAUoJ,IAGH,iBAAXjI,EACTiI,EAAKxF,GAAGzC,QACH,GAAsB,iBAAXkI,EAAqB,CACrC,GAA4B,oBAAjBD,EAAKC,GACd,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAERD,EAAKC,UACIxH,EAAQvB,UAAYuB,EAAQ0H,OACrCH,EAAK3I,QACL2I,EAAK7F,cAKJiG,qBAAP,SAA4BpG,GAC1B,IAAMqG,EAAWpG,EAAKqG,uBAAuBtI,MAE7C,GAAKqI,EAAL,CAIA,IAAMvD,EAAS/F,EAAEsJ,GAAU,GAE3B,GAAKvD,GAAW/F,EAAE+F,GAAQmC,SAheG,YAge7B,CAIA,IAAMlH,EAAMoD,cAAA,GACPpE,EAAE+F,GAAQkD,OADH,GAEPjJ,EAAEiB,MAAMgI,QAEPO,EAAavI,KAAKuH,aAAa,iBAEjCgB,IACFxI,EAAOb,UAAW,GAGpBW,EAASiI,iBAAiB3C,KAAKpG,EAAE+F,GAAS/E,GAEtCwI,GACFxJ,EAAE+F,GAAQkD,KAAKpJ,GAAU4D,GAAG+F,GAG9BvG,EAAMyC,uEAjcN,MAlG2B,wCAsG3B,OAAOxF,kBAucXF,EAAEgC,UAAU2C,GAhgBc,6BAiBG,gCA+e6B7D,EAASuI,sBAEnErJ,EAAEsC,QAAQqC,GAngBe,4BAmgBS,WAEhC,IADA,IAAM8E,EAAY,GAAGtD,MAAMC,KAAKpE,SAASwD,iBAjfd,2BAkflBkE,EAAI,EAAGC,EAAMF,EAAU3F,OAAQ4F,EAAIC,EAAKD,IAAK,CACpD,IAAME,EAAY5J,EAAEyJ,EAAUC,IAC9B5I,EAASiI,iBAAiB3C,KAAKwD,EAAWA,EAAUX,WAUxDjJ,EAAEC,GAAGL,GAAQkB,EAASiI,iBACtB/I,EAAEC,GAAGL,GAAMiK,YAAc/I,EACzBd,EAAEC,GAAGL,GAAMkK,WAAa,WAEtB,OADA9J,EAAEC,GAAGL,GAAQG,EACNe,EAASiI","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.5.2'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? DIRECTION_NEXT\n : DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, (event) => this.pause(event))\n .on(EVENT_MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, (e) => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, (event) => start(event))\n $(this._element).on(EVENT_POINTERUP, (event) => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, (event) => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, (event) => move(event))\n $(this._element).on(EVENT_TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n"]}