{"version":3,"sources":["carousel.js"],"names":["BaseComponent","EventHandler","Manipulator","SelectorEngine","defineJQueryPlugin","getNextActiveElement","isRTL","isVisible","reflow","triggerTransitionEnd","Swipe","NAME","DATA_KEY","EVENT_KEY","concat","DATA_API_KEY","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","_defineProperty","Default","interval","keyboard","pause","ride","touch","wrap","DefaultType","Carousel","element","config","_classCallCheck","this","_this","_callSuper","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","findOne","_element","_addEventListeners","_config","cycle","_inherits","_createClass","key","value","_slide","document","hidden","next","_clearInterval","_this2","_updateInterval","setInterval","nextWhenVisible","_this3","one","index","activeIndex","_this4","items","_getItems","length","to","_getItemIndex","_getActive","dispose","_get","_getPrototypeOf","prototype","call","defaultInterval","_this5","on","event","_keydown","_maybeEnableCycle","isSupported","_addTouchEventListeners","_step","_this6","_iterator","_createForOfIteratorHelper","find","s","n","done","img","preventDefault","err","e","f","leftCallback","_directionToOrder","rightCallback","endCallback","clearTimeout","setTimeout","direction","test","target","tagName","indexOf","newActiveIndicator","activeIndicator","classList","remove","removeAttribute","add","setAttribute","elementInterval","Number","parseInt","getAttribute","order","activeElement","isNext","nextElement","nextElementIndex","triggerEvent","directionalClassName","orderClassName","_this7","arguments","undefined","eventName","trigger","relatedTarget","_orderToDirection","from","defaultPrevented","isCycling","Boolean","_setActiveIndicatorElement","_queueCallback","_isAnimated","contains","clearInterval","get","each","data","getOrCreateInstance","startsWith","TypeError","getElementFromSelector","carousel","slideIndex","getDataAttribute","prev","window","_step2","_iterator2"],"mappings":"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","file":"carousel.js","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_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_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_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\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 && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\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\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n"]}