{"version":3,"sources":["../src/carousel.js"],"names":["NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","Direction","Event","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","LOAD_DATA_API","CLICK_DATA_API","ClassName","Selector","ACTIVE","ACTIVE_ITEM","ITEM","ITEM_IMG","NEXT_PREV","INDICATORS","DATA_SLIDE","DATA_RIDE","PointerType","TOUCH","PEN","Carousel","element","config","this","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_element","_indicatorsElement","querySelector","_touchSupported","document","documentElement","navigator","_pointerEvent","Boolean","window","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","event","Util","cycle","clearInterval","setInterval","bind","to","_this","activeIndex","_getItemIndex","index","length","direction","dispose","_objectSpread2","_handleSwipe","absDeltax","Math","_this2","_keydown","_addTouchEventListeners","_this3","start","toUpperCase","clientX","end","clearTimeout","setTimeout","querySelectorAll","e","preventDefault","classList","add","move","test","tagName","which","slice","call","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","activeElement","lastItemIndex","itemIndex","_triggerSlideEvent","targetIndex","relatedTarget","fromIndex","slideEvent","eventDirectionName","from","_setActiveIndicatorElement","indicators","nextIndicator","children","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","isDefaultPrevented","slidEvent","nextElementInterval","parseInt","defaultInterval","transitionDuration","_jQueryInterface","each","data","_typeof","action","TypeError","ride","_dataApiClickHandler","selector","target","slideIndex","getAttribute","carousels","i","len","$carousel"],"mappings":"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","file":"../../../scripts/Bootstrap/carousel-6db7bc7d9a.js","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.4.1'\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 = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item',\n POINTER_EVENT : 'pointer-event'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n ITEM_IMG : '.carousel-item img',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\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)\n .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)).on(Event.DRAG_START, (e) => e.preventDefault())\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(ClassName.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)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.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 = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.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(ClassName.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(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.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(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.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(ClassName.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)\n .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"]}