0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-12-04 16:24:22 +01:00
Bootstrap/dist/js/bootstrap.bundle.js

6641 lines
205 KiB
JavaScript
Raw Normal View History

2017-09-06 06:05:12 +02:00
/*!
* Bootstrap v5.0.0-beta2 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2020-06-16 20:50:01 +02:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2017-09-06 06:05:12 +02:00
*/
2017-12-23 01:21:54 +01:00
(function (global, factory) {
2019-03-11 16:13:30 +01:00
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
2020-09-14 17:12:06 +02:00
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());
2019-11-08 09:11:23 +01:00
}(this, (function () { 'use strict';
2017-09-06 06:05:12 +02:00
2018-03-31 22:59:37 +02:00
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
2017-11-08 05:45:26 +01:00
}
2020-09-14 17:12:06 +02:00
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
2017-12-23 01:21:54 +01:00
2020-09-14 17:12:06 +02:00
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
2017-12-23 01:21:54 +01:00
}
2020-09-14 17:12:06 +02:00
return target;
};
return _extends.apply(this, arguments);
2018-03-31 22:59:37 +02:00
}
2017-11-08 05:45:26 +01:00
2018-03-31 22:59:37 +02:00
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
/**
2018-03-31 22:59:37 +02:00
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta2): util/index.js
2020-06-16 20:50:01 +02:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2018-03-31 22:59:37 +02:00
* --------------------------------------------------------------------------
2017-09-06 06:05:12 +02:00
*/
2019-03-01 17:31:34 +01:00
var MAX_UID = 1000000;
var MILLISECONDS_MULTIPLIER = 1000;
2019-08-27 15:03:21 +02:00
var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2019-03-01 17:31:34 +01:00
var toType = function toType(obj) {
2020-03-28 11:29:08 +01:00
if (obj === null || obj === undefined) {
return "" + obj;
}
2019-03-01 17:31:34 +01:00
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
};
2018-11-13 07:41:12 +01:00
/**
2019-03-01 17:31:34 +01:00
* --------------------------------------------------------------------------
* Public Util Api
* --------------------------------------------------------------------------
2018-11-13 07:41:12 +01:00
*/
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var getUID = function getUID(prefix) {
do {
2020-06-14 00:40:28 +02:00
prefix += Math.floor(Math.random() * MAX_UID);
2019-03-01 17:31:34 +01:00
} while (document.getElementById(prefix));
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
return prefix;
};
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
var getSelector = function getSelector(element) {
2020-11-23 14:17:16 +01:00
var selector = element.getAttribute('data-bs-target');
2019-03-01 17:31:34 +01:00
if (!selector || selector === '#') {
var hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
return null;
} // Just in case some CMS puts out a full URL with the anchor appended
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
hrefAttr = '#' + hrefAttr.split('#')[1];
}
2019-08-27 15:03:21 +02:00
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
2019-03-01 17:31:34 +01:00
}
2019-08-27 15:03:21 +02:00
return selector;
};
var getSelectorFromElement = function getSelectorFromElement(element) {
var selector = getSelector(element);
if (selector) {
2019-03-01 17:31:34 +01:00
return document.querySelector(selector) ? selector : null;
}
2019-08-27 15:03:21 +02:00
return null;
};
var getElementFromSelector = function getElementFromSelector(element) {
var selector = getSelector(element);
return selector ? document.querySelector(selector) : null;
2019-03-01 17:31:34 +01:00
};
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
if (!element) {
return 0;
} // Get transition-duration of the element
var _window$getComputedSt = window.getComputedStyle(element),
transitionDuration = _window$getComputedSt.transitionDuration,
transitionDelay = _window$getComputedSt.transitionDelay;
2020-11-23 14:17:16 +01:00
var floatTransitionDuration = Number.parseFloat(transitionDuration);
var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
2019-03-01 17:31:34 +01:00
if (!floatTransitionDuration && !floatTransitionDelay) {
return 0;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
transitionDelay = transitionDelay.split(',')[0];
2020-11-23 14:17:16 +01:00
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
2019-03-01 17:31:34 +01:00
};
var triggerTransitionEnd = function triggerTransitionEnd(element) {
2020-03-28 11:29:08 +01:00
element.dispatchEvent(new Event(TRANSITION_END));
2019-03-01 17:31:34 +01:00
};
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var isElement = function isElement(obj) {
return (obj[0] || obj).nodeType;
};
var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
2018-11-13 07:41:12 +01:00
var called = false;
2019-03-01 17:31:34 +01:00
var durationPadding = 5;
var emulatedDuration = duration + durationPadding;
function listener() {
2018-11-13 07:41:12 +01:00
called = true;
2019-03-01 17:31:34 +01:00
element.removeEventListener(TRANSITION_END, listener);
}
element.addEventListener(TRANSITION_END, listener);
2018-11-13 07:41:12 +01:00
setTimeout(function () {
if (!called) {
2019-03-01 17:31:34 +01:00
triggerTransitionEnd(element);
2018-11-13 07:41:12 +01:00
}
2019-03-01 17:31:34 +01:00
}, emulatedDuration);
};
var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
Object.keys(configTypes).forEach(function (property) {
var expectedTypes = configTypes[property];
var value = config[property];
var valueType = value && isElement(value) ? 'element' : toType(value);
if (!new RegExp(expectedTypes).test(valueType)) {
throw new TypeError(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
2019-03-01 17:31:34 +01:00
}
});
};
var isVisible = function isVisible(element) {
if (!element) {
return false;
}
if (element.style && element.parentNode && element.parentNode.style) {
2019-11-08 09:11:23 +01:00
var elementStyle = getComputedStyle(element);
var parentNodeStyle = getComputedStyle(element.parentNode);
return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
2019-03-01 17:31:34 +01:00
}
return false;
};
var findShadowRoot = function findShadowRoot(element) {
if (!document.documentElement.attachShadow) {
return null;
} // Can find the shadow root otherwise it'll return the document
if (typeof element.getRootNode === 'function') {
var root = element.getRootNode();
return root instanceof ShadowRoot ? root : null;
}
if (element instanceof ShadowRoot) {
return element;
} // when we don't find a shadow root
if (!element.parentNode) {
return null;
}
return findShadowRoot(element.parentNode);
2019-10-08 08:39:10 +02:00
};
2019-03-01 17:31:34 +01:00
var noop = function noop() {
return function () {};
};
var reflow = function reflow(element) {
return element.offsetHeight;
};
2018-11-13 07:41:12 +01:00
2019-08-27 15:03:21 +02:00
var getjQuery = function getjQuery() {
var _window = window,
jQuery = _window.jQuery;
2020-11-23 14:17:16 +01:00
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
2019-08-27 15:03:21 +02:00
return jQuery;
}
return null;
};
2020-11-11 18:07:37 +01:00
var onDOMContentLoaded = function onDOMContentLoaded(callback) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback);
} else {
callback();
}
};
2020-12-03 14:08:31 +01:00
var isRTL = document.documentElement.dir === 'rtl';
var defineJQueryPlugin = function defineJQueryPlugin(name, plugin) {
onDOMContentLoaded(function () {
var $ = getjQuery();
/* istanbul ignore if */
if ($) {
var JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
$.fn[name].noConflict = function () {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
};
}
});
};
2018-11-13 07:41:12 +01:00
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta2): dom/data.js
2020-06-16 20:50:01 +02:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2018-11-13 07:41:12 +01:00
* --------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var mapData = function () {
var storeData = {};
var id = 1;
return {
set: function set(element, key, data) {
2020-09-14 17:12:06 +02:00
if (typeof element.bsKey === 'undefined') {
element.bsKey = {
2019-03-01 17:31:34 +01:00
key: key,
id: id
};
id++;
}
2020-09-14 17:12:06 +02:00
storeData[element.bsKey.id] = data;
2019-03-01 17:31:34 +01:00
},
get: function get(element, key) {
2020-09-14 17:12:06 +02:00
if (!element || typeof element.bsKey === 'undefined') {
2019-03-01 17:31:34 +01:00
return null;
}
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var keyProperties = element.bsKey;
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if (keyProperties.key === key) {
return storeData[keyProperties.id];
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
return null;
},
delete: function _delete(element, key) {
2020-09-14 17:12:06 +02:00
if (typeof element.bsKey === 'undefined') {
2019-03-01 17:31:34 +01:00
return;
}
2020-09-14 17:12:06 +02:00
var keyProperties = element.bsKey;
2019-03-01 17:31:34 +01:00
if (keyProperties.key === key) {
delete storeData[keyProperties.id];
2020-09-14 17:12:06 +02:00
delete element.bsKey;
2019-03-01 17:31:34 +01:00
}
2018-11-13 07:41:12 +01:00
}
2019-03-01 17:31:34 +01:00
};
}();
var Data = {
setData: function setData(instance, key, data) {
mapData.set(instance, key, data);
},
getData: function getData(instance, key) {
return mapData.get(instance, key);
},
removeData: function removeData(instance, key) {
mapData.delete(instance, key);
}
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta2): dom/event-handler.js
2020-06-16 20:50:01 +02:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2019-03-01 17:31:34 +01:00
* --------------------------------------------------------------------------
*/
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var namespaceRegex = /[^.]*(?=\..*)\.|.*/;
var stripNameRegex = /\..*/;
var stripUidRegex = /::\d+$/;
var eventRegistry = {}; // Events storage
var uidEvent = 1;
var customEvents = {
mouseenter: 'mouseover',
mouseleave: 'mouseout'
};
2020-11-23 14:17:16 +01:00
var nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
2019-03-01 17:31:34 +01:00
/**
* ------------------------------------------------------------------------
* Private methods
* ------------------------------------------------------------------------
*/
function getUidEvent(element, uid) {
return uid && uid + "::" + uidEvent++ || element.uidEvent || uidEvent++;
}
function getEvent(element) {
var uid = getUidEvent(element);
element.uidEvent = uid;
2019-03-11 16:13:30 +01:00
eventRegistry[uid] = eventRegistry[uid] || {};
return eventRegistry[uid];
2019-03-01 17:31:34 +01:00
}
function bootstrapHandler(element, fn) {
return function handler(event) {
2020-09-14 17:12:06 +02:00
event.delegateTarget = element;
2019-03-01 17:31:34 +01:00
if (handler.oneOff) {
EventHandler.off(element, event.type, fn);
}
return fn.apply(element, [event]);
};
}
function bootstrapDelegationHandler(element, selector, fn) {
return function handler(event) {
var domElements = element.querySelectorAll(selector);
for (var target = event.target; target && target !== this; target = target.parentNode) {
for (var i = domElements.length; i--;) {
if (domElements[i] === target) {
2020-09-14 17:12:06 +02:00
event.delegateTarget = target;
2019-03-01 17:31:34 +01:00
if (handler.oneOff) {
// eslint-disable-next-line unicorn/consistent-destructuring
2019-03-01 17:31:34 +01:00
EventHandler.off(element, event.type, fn);
}
return fn.apply(target, [event]);
}
}
} // To please ESLint
return null;
};
}
function findHandler(events, handler, delegationSelector) {
if (delegationSelector === void 0) {
delegationSelector = null;
}
2019-07-12 23:56:26 +02:00
var uidEventList = Object.keys(events);
for (var i = 0, len = uidEventList.length; i < len; i++) {
var event = events[uidEventList[i]];
2019-03-01 17:31:34 +01:00
if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
2019-07-12 23:56:26 +02:00
return event;
2019-03-01 17:31:34 +01:00
}
}
return null;
}
function normalizeParams(originalTypeEvent, handler, delegationFn) {
var delegation = typeof handler === 'string';
var originalHandler = delegation ? delegationFn : handler; // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
var typeEvent = originalTypeEvent.replace(stripNameRegex, '');
var custom = customEvents[typeEvent];
if (custom) {
typeEvent = custom;
}
2020-11-23 14:17:16 +01:00
var isNative = nativeEvents.has(typeEvent);
2019-03-01 17:31:34 +01:00
if (!isNative) {
typeEvent = originalTypeEvent;
}
return [delegation, originalHandler, typeEvent];
}
function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
if (!handler) {
handler = delegationFn;
delegationFn = null;
}
var _normalizeParams = normalizeParams(originalTypeEvent, handler, delegationFn),
delegation = _normalizeParams[0],
originalHandler = _normalizeParams[1],
typeEvent = _normalizeParams[2];
var events = getEvent(element);
var handlers = events[typeEvent] || (events[typeEvent] = {});
var previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
if (previousFn) {
previousFn.oneOff = previousFn.oneOff && oneOff;
return;
}
var uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
2019-03-11 16:13:30 +01:00
var fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
2019-03-01 17:31:34 +01:00
fn.delegationSelector = delegation ? handler : null;
fn.originalHandler = originalHandler;
fn.oneOff = oneOff;
fn.uidEvent = uid;
handlers[uid] = fn;
element.addEventListener(typeEvent, fn, delegation);
}
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
var fn = findHandler(events[typeEvent], handler, delegationSelector);
2019-07-12 23:56:26 +02:00
if (!fn) {
2019-03-01 17:31:34 +01:00
return;
}
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
delete events[typeEvent][fn.uidEvent];
}
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
var storeElementEvent = events[typeEvent] || {};
Object.keys(storeElementEvent).forEach(function (handlerKey) {
2020-11-23 14:17:16 +01:00
if (handlerKey.includes(namespace)) {
2019-03-01 17:31:34 +01:00
var event = storeElementEvent[handlerKey];
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
2019-01-04 17:29:45 +01:00
}
2019-03-01 17:31:34 +01:00
});
}
var EventHandler = {
on: function on(element, event, handler, delegationFn) {
addHandler(element, event, handler, delegationFn, false);
2018-11-13 07:41:12 +01:00
},
2019-03-01 17:31:34 +01:00
one: function one(element, event, handler, delegationFn) {
addHandler(element, event, handler, delegationFn, true);
},
off: function off(element, originalTypeEvent, handler, delegationFn) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
var _normalizeParams2 = normalizeParams(originalTypeEvent, handler, delegationFn),
delegation = _normalizeParams2[0],
originalHandler = _normalizeParams2[1],
typeEvent = _normalizeParams2[2];
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
var inNamespace = typeEvent !== originalTypeEvent;
var events = getEvent(element);
2020-11-23 14:17:16 +01:00
var isNamespace = originalTypeEvent.startsWith('.');
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
if (typeof originalHandler !== 'undefined') {
// Simplest case: handler is passed, remove that listener ONLY.
if (!events || !events[typeEvent]) {
return;
}
removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
return;
}
if (isNamespace) {
Object.keys(events).forEach(function (elementEvent) {
2019-10-08 08:39:10 +02:00
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
2019-03-01 17:31:34 +01:00
});
}
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
var storeElementEvent = events[typeEvent] || {};
Object.keys(storeElementEvent).forEach(function (keyHandlers) {
var handlerKey = keyHandlers.replace(stripUidRegex, '');
2018-03-31 22:59:37 +02:00
2020-11-23 14:17:16 +01:00
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
2019-03-01 17:31:34 +01:00
var event = storeElementEvent[keyHandlers];
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
}
});
2018-11-13 07:41:12 +01:00
},
2019-03-01 17:31:34 +01:00
trigger: function trigger(element, event, args) {
if (typeof event !== 'string' || !element) {
return null;
}
2020-11-11 18:07:37 +01:00
var $ = getjQuery();
2019-03-01 17:31:34 +01:00
var typeEvent = event.replace(stripNameRegex, '');
var inNamespace = event !== typeEvent;
2020-11-23 14:17:16 +01:00
var isNative = nativeEvents.has(typeEvent);
2019-03-01 17:31:34 +01:00
var jQueryEvent;
var bubbles = true;
var nativeDispatch = true;
var defaultPrevented = false;
var evt = null;
2019-08-27 15:03:21 +02:00
if (inNamespace && $) {
jQueryEvent = $.Event(event, args);
$(element).trigger(jQueryEvent);
2019-03-01 17:31:34 +01:00
bubbles = !jQueryEvent.isPropagationStopped();
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
defaultPrevented = jQueryEvent.isDefaultPrevented();
}
if (isNative) {
evt = document.createEvent('HTMLEvents');
evt.initEvent(typeEvent, bubbles, true);
} else {
2020-03-28 11:29:08 +01:00
evt = new CustomEvent(event, {
2019-03-01 17:31:34 +01:00
bubbles: bubbles,
cancelable: true
});
2020-09-14 17:12:06 +02:00
} // merge custom information in our event
2019-03-01 17:31:34 +01:00
if (typeof args !== 'undefined') {
Object.keys(args).forEach(function (key) {
Object.defineProperty(evt, key, {
get: function get() {
return args[key];
}
});
});
}
if (defaultPrevented) {
evt.preventDefault();
}
if (nativeDispatch) {
element.dispatchEvent(evt);
}
if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
jQueryEvent.preventDefault();
}
return evt;
}
};
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var VERSION = '5.0.0-beta2';
2020-12-03 15:18:59 +01:00
var BaseComponent = /*#__PURE__*/function () {
function BaseComponent(element) {
if (!element) {
return;
}
this._element = element;
Data.setData(element, this.constructor.DATA_KEY, this);
}
var _proto = BaseComponent.prototype;
_proto.dispose = function dispose() {
Data.removeData(this._element, this.constructor.DATA_KEY);
this._element = null;
}
/** Static */
;
BaseComponent.getInstance = function getInstance(element) {
return Data.getData(element, this.DATA_KEY);
};
_createClass(BaseComponent, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return BaseComponent;
}();
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'alert';
2018-11-13 07:41:12 +01:00
var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
2020-11-23 14:17:16 +01:00
var SELECTOR_DISMISS = '[data-bs-dismiss="alert"]';
2020-03-28 11:29:08 +01:00
var EVENT_CLOSE = "close" + EVENT_KEY;
var EVENT_CLOSED = "closed" + EVENT_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var CLASS_NAME_ALERT = 'alert';
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var Alert = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Alert, _BaseComponent);
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
function Alert() {
return _BaseComponent.apply(this, arguments) || this;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Alert.prototype;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto.close = function close(element) {
2020-09-14 17:12:06 +02:00
var rootElement = element ? this._getRootElement(element) : this._element;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var customEvent = this._triggerCloseEvent(rootElement);
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (customEvent === null || customEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._removeElement(rootElement);
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getRootElement = function _getRootElement(element) {
return getElementFromSelector(element) || element.closest("." + CLASS_NAME_ALERT);
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._triggerCloseEvent = function _triggerCloseEvent(element) {
2020-03-28 11:29:08 +01:00
return EventHandler.trigger(element, EVENT_CLOSE);
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._removeElement = function _removeElement(element) {
var _this = this;
2017-09-06 06:05:12 +02:00
element.classList.remove(CLASS_NAME_SHOW);
2017-09-06 06:05:12 +02:00
if (!element.classList.contains(CLASS_NAME_FADE)) {
2018-11-13 07:41:12 +01:00
this._destroyElement(element);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement(element);
EventHandler.one(element, 'transitionend', function () {
return _this._destroyElement(element);
2019-03-01 17:31:34 +01:00
});
emulateTransitionEnd(element, transitionDuration);
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._destroyElement = function _destroyElement(element) {
2019-03-01 17:31:34 +01:00
if (element.parentNode) {
element.parentNode.removeChild(element);
}
2020-03-28 11:29:08 +01:00
EventHandler.trigger(element, EVENT_CLOSED);
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Alert.jQueryInterface = function jQueryInterface(config) {
2018-11-13 07:41:12 +01:00
return this.each(function () {
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!data) {
data = new Alert(this);
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (config === 'close') {
data[config](this);
}
});
};
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Alert.handleDismiss = function handleDismiss(alertInstance) {
2018-11-13 07:41:12 +01:00
return function (event) {
if (event) {
event.preventDefault();
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
alertInstance.close(this);
2017-09-06 06:05:12 +02:00
};
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass(Alert, null, [{
2020-12-03 15:18:59 +01:00
key: "DATA_KEY",
// Getters
get: function get() {
2020-12-03 15:18:59 +01:00
return DATA_KEY;
2018-11-13 07:41:12 +01:00
}
}]);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return Alert;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Alert to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
2017-09-06 06:05:12 +02:00
defineJQueryPlugin(NAME, Alert);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME$1 = 'button';
var DATA_KEY$1 = 'bs.button';
var EVENT_KEY$1 = "." + DATA_KEY$1;
var DATA_API_KEY$1 = '.data-api';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_ACTIVE = 'active';
2020-11-23 14:17:16 +01:00
var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]';
2020-03-28 11:29:08 +01:00
var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$1 + DATA_API_KEY$1;
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var Button = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Button, _BaseComponent);
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
function Button() {
return _BaseComponent.apply(this, arguments) || this;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Button.prototype;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto.toggle = function toggle() {
2020-06-16 20:50:01 +02:00
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Button.jQueryInterface = function jQueryInterface(config) {
2018-11-13 07:41:12 +01:00
return this.each(function () {
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY$1);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!data) {
data = new Button(this);
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (config === 'toggle') {
data[config]();
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass(Button, null, [{
2020-12-03 15:18:59 +01:00
key: "DATA_KEY",
// Getters
get: function get() {
2020-12-03 15:18:59 +01:00
return DATA_KEY$1;
2018-11-13 07:41:12 +01:00
}
}]);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return Button;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE, function (event) {
2018-11-13 07:41:12 +01:00
event.preventDefault();
2020-06-16 20:50:01 +02:00
var button = event.target.closest(SELECTOR_DATA_TOGGLE);
2019-03-01 17:31:34 +01:00
var data = Data.getData(button, DATA_KEY$1);
if (!data) {
data = new Button(button);
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
data.toggle();
});
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Button to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
2017-09-06 06:05:12 +02:00
defineJQueryPlugin(NAME$1, Button);
2019-03-01 17:31:34 +01:00
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta2): dom/manipulator.js
2020-06-16 20:50:01 +02:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2019-03-01 17:31:34 +01:00
* --------------------------------------------------------------------------
*/
function normalizeData(val) {
if (val === 'true') {
return true;
}
if (val === 'false') {
return false;
}
if (val === Number(val).toString()) {
return Number(val);
}
if (val === '' || val === 'null') {
return null;
}
return val;
}
function normalizeDataKey(key) {
return key.replace(/[A-Z]/g, function (chr) {
2019-11-08 09:11:23 +01:00
return "-" + chr.toLowerCase();
2019-03-01 17:31:34 +01:00
});
}
var Manipulator = {
setDataAttribute: function setDataAttribute(element, key, value) {
2020-11-23 14:17:16 +01:00
element.setAttribute("data-bs-" + normalizeDataKey(key), value);
2019-03-01 17:31:34 +01:00
},
removeDataAttribute: function removeDataAttribute(element, key) {
2020-11-23 14:17:16 +01:00
element.removeAttribute("data-bs-" + normalizeDataKey(key));
2019-03-01 17:31:34 +01:00
},
getDataAttributes: function getDataAttributes(element) {
if (!element) {
return {};
}
2020-11-23 14:17:16 +01:00
var attributes = {};
Object.keys(element.dataset).filter(function (key) {
return key.startsWith('bs');
}).forEach(function (key) {
var pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]);
2019-03-01 17:31:34 +01:00
});
return attributes;
},
getDataAttribute: function getDataAttribute(element, key) {
2020-11-23 14:17:16 +01:00
return normalizeData(element.getAttribute("data-bs-" + normalizeDataKey(key)));
2019-03-01 17:31:34 +01:00
},
offset: function offset(element) {
var rect = element.getBoundingClientRect();
return {
top: rect.top + document.body.scrollTop,
left: rect.left + document.body.scrollLeft
};
},
position: function position(element) {
return {
top: element.offsetTop,
left: element.offsetLeft
};
}
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta2): dom/selector-engine.js
2020-06-16 20:50:01 +02:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
2020-11-11 18:07:37 +01:00
2020-06-16 20:50:01 +02:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NODE_TEXT = 3;
var SelectorEngine = {
2020-11-11 18:07:37 +01:00
find: function find(selector, element) {
2020-06-16 20:50:01 +02:00
var _ref;
if (element === void 0) {
element = document.documentElement;
}
2020-11-11 18:07:37 +01:00
return (_ref = []).concat.apply(_ref, Element.prototype.querySelectorAll.call(element, selector));
2020-06-16 20:50:01 +02:00
},
2020-11-11 18:07:37 +01:00
findOne: function findOne(selector, element) {
2020-06-16 20:50:01 +02:00
if (element === void 0) {
element = document.documentElement;
}
2020-11-11 18:07:37 +01:00
return Element.prototype.querySelector.call(element, selector);
2020-06-16 20:50:01 +02:00
},
children: function children(element, selector) {
var _ref2;
return (_ref2 = []).concat.apply(_ref2, element.children).filter(function (child) {
2020-06-16 20:50:01 +02:00
return child.matches(selector);
});
},
parents: function parents(element, selector) {
var parents = [];
var ancestor = element.parentNode;
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
if (ancestor.matches(selector)) {
2020-06-16 20:50:01 +02:00
parents.push(ancestor);
}
ancestor = ancestor.parentNode;
}
return parents;
},
prev: function prev(element, selector) {
var previous = element.previousElementSibling;
while (previous) {
if (previous.matches(selector)) {
return [previous];
}
previous = previous.previousElementSibling;
}
return [];
},
next: function next(element, selector) {
var next = element.nextElementSibling;
while (next) {
if (next.matches(selector)) {
2020-06-16 20:50:01 +02:00
return [next];
}
next = next.nextElementSibling;
}
return [];
}
};
2017-09-06 06:05:12 +02:00
/**
2018-11-13 07:41:12 +01:00
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
2017-09-06 06:05:12 +02:00
*/
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var NAME$2 = 'carousel';
var DATA_KEY$2 = 'bs.carousel';
var EVENT_KEY$2 = "." + DATA_KEY$2;
var DATA_API_KEY$2 = '.data-api';
2020-05-13 20:53:43 +02:00
var ARROW_LEFT_KEY = 'ArrowLeft';
var ARROW_RIGHT_KEY = 'ArrowRight';
2018-11-13 07:41:12 +01:00
var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
var SWIPE_THRESHOLD = 40;
var Default = {
interval: 5000,
keyboard: true,
slide: false,
pause: 'hover',
wrap: true,
touch: true
};
var DefaultType = {
interval: '(number|boolean)',
keyboard: 'boolean',
slide: '(boolean|string)',
pause: '(string|boolean)',
wrap: 'boolean',
touch: 'boolean'
};
2020-03-28 11:29:08 +01:00
var DIRECTION_NEXT = 'next';
var DIRECTION_PREV = 'prev';
var DIRECTION_LEFT = 'left';
var DIRECTION_RIGHT = 'right';
var EVENT_SLIDE = "slide" + EVENT_KEY$2;
var EVENT_SLID = "slid" + EVENT_KEY$2;
var EVENT_KEYDOWN = "keydown" + EVENT_KEY$2;
var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$2;
var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$2;
var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$2;
var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$2;
var EVENT_TOUCHEND = "touchend" + EVENT_KEY$2;
var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$2;
var EVENT_POINTERUP = "pointerup" + EVENT_KEY$2;
var EVENT_DRAG_START = "dragstart" + EVENT_KEY$2;
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$2;
var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$2 + DATA_API_KEY$2;
var CLASS_NAME_CAROUSEL = 'carousel';
var CLASS_NAME_ACTIVE$1 = 'active';
var CLASS_NAME_SLIDE = 'slide';
2020-12-03 14:08:31 +01:00
var CLASS_NAME_END = 'carousel-item-end';
var CLASS_NAME_START = 'carousel-item-start';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_NEXT = 'carousel-item-next';
var CLASS_NAME_PREV = 'carousel-item-prev';
var CLASS_NAME_POINTER_EVENT = 'pointer-event';
2020-06-16 20:50:01 +02:00
var SELECTOR_ACTIVE = '.active';
2020-03-28 11:29:08 +01:00
var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
var SELECTOR_ITEM = '.carousel-item';
var SELECTOR_ITEM_IMG = '.carousel-item img';
var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
var SELECTOR_INDICATORS = '.carousel-indicators';
var SELECTOR_INDICATOR = '[data-bs-target]';
2020-11-23 14:17:16 +01:00
var SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
var SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
var POINTER_TYPE_TOUCH = 'touch';
var POINTER_TYPE_PEN = 'pen';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2018-03-31 22:59:37 +02:00
2020-12-03 15:18:59 +01:00
var Carousel = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Carousel, _BaseComponent);
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
function Carousel(element, config) {
var _this;
_this = _BaseComponent.call(this, element) || this;
_this._items = null;
_this._interval = null;
_this._activeElement = null;
_this._isPaused = false;
_this._isSliding = false;
_this.touchTimeout = null;
_this.touchStartX = 0;
_this.touchDeltaX = 0;
_this._config = _this._getConfig(config);
_this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, _this._element);
_this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
_this._pointerEvent = Boolean(window.PointerEvent);
_this._addEventListeners();
return _this;
2018-11-13 07:41:12 +01:00
} // Getters
var _proto = Carousel.prototype;
// Public
_proto.next = function next() {
if (!this._isSliding) {
2020-03-28 11:29:08 +01:00
this._slide(DIRECTION_NEXT);
2018-11-13 07:41:12 +01:00
}
2018-03-31 22:59:37 +02:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.nextWhenVisible = function nextWhenVisible() {
// Don't call next when the page isn't visible
// or the carousel or its parent isn't visible
2019-03-01 17:31:34 +01:00
if (!document.hidden && isVisible(this._element)) {
2018-11-13 07:41:12 +01:00
this.next();
}
2017-09-06 06:05:12 +02:00
};
2018-11-13 07:41:12 +01:00
_proto.prev = function prev() {
if (!this._isSliding) {
2020-03-28 11:29:08 +01:00
this._slide(DIRECTION_PREV);
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.pause = function pause(event) {
if (!event) {
this._isPaused = true;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {
2019-03-01 17:31:34 +01:00
triggerTransitionEnd(this._element);
2018-11-13 07:41:12 +01:00
this.cycle(true);
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
clearInterval(this._interval);
this._interval = null;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.cycle = function cycle(event) {
if (!event) {
this._isPaused = false;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this._interval) {
2018-03-31 22:59:37 +02:00
clearInterval(this._interval);
this._interval = null;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (this._config && this._config.interval && !this._isPaused) {
2020-11-11 18:07:37 +01:00
this._updateInterval();
2018-11-13 07:41:12 +01:00
this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.to = function to(index) {
2020-12-03 15:18:59 +01:00
var _this2 = this;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
var activeIndex = this._getItemIndex(this._activeElement);
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
if (index > this._items.length - 1 || index < 0) {
return;
}
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
if (this._isSliding) {
2020-03-28 11:29:08 +01:00
EventHandler.one(this._element, EVENT_SLID, function () {
2020-12-03 15:18:59 +01:00
return _this2.to(index);
2018-11-13 07:41:12 +01:00
});
return;
}
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
if (activeIndex === index) {
this.pause();
this.cycle();
return;
}
2018-02-19 23:50:56 +01:00
2020-03-28 11:29:08 +01:00
var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._slide(direction, this._items[index]);
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.dispose = function dispose() {
2020-12-03 15:18:59 +01:00
_BaseComponent.prototype.dispose.call(this);
2019-03-01 17:31:34 +01:00
EventHandler.off(this._element, EVENT_KEY$2);
2018-11-13 07:41:12 +01:00
this._items = null;
this._config = null;
this._interval = null;
this._isPaused = null;
this._isSliding = null;
this._activeElement = null;
this._indicatorsElement = null;
2019-01-04 17:29:45 +01:00
} // Private
;
2018-11-13 07:41:12 +01:00
_proto._getConfig = function _getConfig(config) {
2020-09-14 17:12:06 +02:00
config = _extends({}, Default, config);
2019-03-01 17:31:34 +01:00
typeCheckConfig(NAME$2, config, DefaultType);
2018-11-13 07:41:12 +01:00
return config;
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._handleSwipe = function _handleSwipe() {
var absDeltax = Math.abs(this.touchDeltaX);
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if (absDeltax <= SWIPE_THRESHOLD) {
return;
}
2018-03-31 22:59:37 +02:00
2019-04-18 13:47:52 +02:00
var direction = absDeltax / this.touchDeltaX;
this.touchDeltaX = 0; // swipe left
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if (direction > 0) {
if (isRTL) {
this.next();
} else {
this.prev();
}
2018-11-13 07:41:12 +01:00
} // swipe right
2018-03-31 22:59:37 +02:00
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (direction < 0) {
if (isRTL) {
this.prev();
} else {
this.next();
}
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._addEventListeners = function _addEventListeners() {
2020-12-03 15:18:59 +01:00
var _this3 = this;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this._config.keyboard) {
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_KEYDOWN, function (event) {
2020-12-03 15:18:59 +01:00
return _this3._keydown(event);
2018-11-13 07:41:12 +01:00
});
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (this._config.pause === 'hover') {
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_MOUSEENTER, function (event) {
2020-12-03 15:18:59 +01:00
return _this3.pause(event);
2019-03-01 17:31:34 +01:00
});
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_MOUSELEAVE, function (event) {
2020-12-03 15:18:59 +01:00
return _this3.cycle(event);
2018-11-13 07:41:12 +01:00
});
}
2017-09-30 23:28:03 +02:00
if (this._config.touch && this._touchSupported) {
this._addTouchEventListeners();
}
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._addTouchEventListeners = function _addTouchEventListeners() {
2020-12-03 15:18:59 +01:00
var _this4 = this;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var start = function start(event) {
if (_this4._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
2020-12-03 15:18:59 +01:00
_this4.touchStartX = event.clientX;
} else if (!_this4._pointerEvent) {
_this4.touchStartX = event.touches[0].clientX;
2018-03-31 22:59:37 +02:00
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var move = function move(event) {
// ensure swiping with one touch and not pinching
2019-03-01 17:31:34 +01:00
if (event.touches && event.touches.length > 1) {
2020-12-03 15:18:59 +01:00
_this4.touchDeltaX = 0;
2018-11-13 07:41:12 +01:00
} else {
2020-12-03 15:18:59 +01:00
_this4.touchDeltaX = event.touches[0].clientX - _this4.touchStartX;
2018-11-13 07:41:12 +01:00
}
2018-03-31 22:59:37 +02:00
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var end = function end(event) {
if (_this4._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
2020-12-03 15:18:59 +01:00
_this4.touchDeltaX = event.clientX - _this4.touchStartX;
2018-11-13 07:41:12 +01:00
}
2020-12-03 15:18:59 +01:00
_this4._handleSwipe();
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
if (_this4._config.pause === 'hover') {
2018-11-13 07:41:12 +01:00
// If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel
// (as if it's the second time we tap on it, mouseenter compat event
// is NOT fired) and after a timeout (to allow for mouse compatibility
// events to fire) we explicitly restart cycling
2020-12-03 15:18:59 +01:00
_this4.pause();
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if (_this4.touchTimeout) {
clearTimeout(_this4.touchTimeout);
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this4.touchTimeout = setTimeout(function (event) {
return _this4.cycle(event);
}, TOUCHEVENT_COMPAT_WAIT + _this4._config.interval);
2018-03-31 22:59:37 +02:00
}
};
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(function (itemImg) {
EventHandler.on(itemImg, EVENT_DRAG_START, function (e) {
2019-03-01 17:31:34 +01:00
return e.preventDefault();
});
2018-11-13 07:41:12 +01:00
});
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (this._pointerEvent) {
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_POINTERDOWN, function (event) {
2018-11-13 07:41:12 +01:00
return start(event);
});
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_POINTERUP, function (event) {
2018-11-13 07:41:12 +01:00
return end(event);
});
2018-03-31 22:59:37 +02:00
2020-03-28 11:29:08 +01:00
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
2018-11-13 07:41:12 +01:00
} else {
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_TOUCHSTART, function (event) {
2018-11-13 07:41:12 +01:00
return start(event);
2018-03-31 22:59:37 +02:00
});
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_TOUCHMOVE, function (event) {
2018-11-13 07:41:12 +01:00
return move(event);
});
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_TOUCHEND, function (event) {
2018-11-13 07:41:12 +01:00
return end(event);
});
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._keydown = function _keydown(event) {
if (/input|textarea/i.test(event.target.tagName)) {
return;
}
2017-09-06 06:05:12 +02:00
if (event.key === ARROW_LEFT_KEY) {
event.preventDefault();
if (isRTL) {
this.next();
} else {
2018-11-13 07:41:12 +01:00
this.prev();
}
} else if (event.key === ARROW_RIGHT_KEY) {
event.preventDefault();
2017-09-06 06:05:12 +02:00
if (isRTL) {
this.prev();
} else {
2018-11-13 07:41:12 +01:00
this.next();
}
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getItemIndex = function _getItemIndex(element) {
2020-03-28 11:29:08 +01:00
this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];
2018-11-13 07:41:12 +01:00
return this._items.indexOf(element);
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
2020-03-28 11:29:08 +01:00
var isNextDirection = direction === DIRECTION_NEXT;
var isPrevDirection = direction === DIRECTION_PREV;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var activeIndex = this._getItemIndex(activeElement);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var lastItemIndex = this._items.length - 1;
var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (isGoingToWrap && !this._config.wrap) {
return activeElement;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var delta = direction === DIRECTION_PREV ? -1 : 1;
2018-11-13 07:41:12 +01:00
var itemIndex = (activeIndex + delta) % this._items.length;
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
var targetIndex = this._getItemIndex(relatedTarget);
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
return EventHandler.trigger(this._element, EVENT_SLIDE, {
2018-11-13 07:41:12 +01:00
relatedTarget: relatedTarget,
direction: eventDirectionName,
from: fromIndex,
to: targetIndex
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
if (this._indicatorsElement) {
var activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
activeIndicator.classList.remove(CLASS_NAME_ACTIVE$1);
activeIndicator.removeAttribute('aria-current');
var indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);
2019-03-01 17:31:34 +01:00
for (var i = 0; i < indicators.length; i++) {
if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {
indicators[i].classList.add(CLASS_NAME_ACTIVE$1);
indicators[i].setAttribute('aria-current', 'true');
break;
}
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
2020-11-11 18:07:37 +01:00
_proto._updateInterval = function _updateInterval() {
var element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
if (!element) {
return;
}
2020-11-23 14:17:16 +01:00
var elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
2020-11-11 18:07:37 +01:00
if (elementInterval) {
this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
this._config.interval = elementInterval;
} else {
this._config.interval = this._config.defaultInterval || this._config.interval;
}
};
2018-11-13 07:41:12 +01:00
_proto._slide = function _slide(direction, element) {
2020-12-03 15:18:59 +01:00
var _this5 = this;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var activeElementIndex = this._getItemIndex(activeElement);
2018-09-19 06:35:40 +02:00
2018-11-13 07:41:12 +01:00
var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
2018-09-19 06:35:40 +02:00
2018-11-13 07:41:12 +01:00
var nextElementIndex = this._getItemIndex(nextElement);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var isCycling = Boolean(this._interval);
var directionalClassName = direction === DIRECTION_NEXT ? CLASS_NAME_START : CLASS_NAME_END;
var orderClassName = direction === DIRECTION_NEXT ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
var eventDirectionName = direction === DIRECTION_NEXT ? DIRECTION_LEFT : DIRECTION_RIGHT;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$1)) {
2018-11-13 07:41:12 +01:00
this._isSliding = false;
return;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (slideEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!activeElement || !nextElement) {
// Some weirdness is happening, so we bail
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._isSliding = true;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if (isCycling) {
this.pause();
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._setActiveIndicatorElement(nextElement);
2017-09-30 23:28:03 +02:00
2020-11-11 18:07:37 +01:00
this._activeElement = nextElement;
2020-03-28 11:29:08 +01:00
if (this._element.classList.contains(CLASS_NAME_SLIDE)) {
2019-03-01 17:31:34 +01:00
nextElement.classList.add(orderClassName);
reflow(nextElement);
activeElement.classList.add(directionalClassName);
nextElement.classList.add(directionalClassName);
var transitionDuration = getTransitionDurationFromElement(activeElement);
EventHandler.one(activeElement, 'transitionend', function () {
2020-05-13 20:53:43 +02:00
nextElement.classList.remove(directionalClassName, orderClassName);
2020-03-28 11:29:08 +01:00
nextElement.classList.add(CLASS_NAME_ACTIVE$1);
2020-05-13 20:53:43 +02:00
activeElement.classList.remove(CLASS_NAME_ACTIVE$1, orderClassName, directionalClassName);
2020-12-03 15:18:59 +01:00
_this5._isSliding = false;
2018-11-13 07:41:12 +01:00
setTimeout(function () {
2020-12-03 15:18:59 +01:00
EventHandler.trigger(_this5._element, EVENT_SLID, {
2019-03-01 17:31:34 +01:00
relatedTarget: nextElement,
direction: eventDirectionName,
from: activeElementIndex,
to: nextElementIndex
});
2018-11-13 07:41:12 +01:00
}, 0);
2019-03-01 17:31:34 +01:00
});
emulateTransitionEnd(activeElement, transitionDuration);
2018-11-13 07:41:12 +01:00
} else {
2020-03-28 11:29:08 +01:00
activeElement.classList.remove(CLASS_NAME_ACTIVE$1);
nextElement.classList.add(CLASS_NAME_ACTIVE$1);
2018-11-13 07:41:12 +01:00
this._isSliding = false;
2020-03-28 11:29:08 +01:00
EventHandler.trigger(this._element, EVENT_SLID, {
2019-03-01 17:31:34 +01:00
relatedTarget: nextElement,
direction: eventDirectionName,
from: activeElementIndex,
to: nextElementIndex
});
2018-11-13 07:41:12 +01:00
}
if (isCycling) {
this.cycle();
}
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Carousel.carouselInterface = function carouselInterface(element, config) {
2019-03-01 17:31:34 +01:00
var data = Data.getData(element, DATA_KEY$2);
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var _config = _extends({}, Default, Manipulator.getDataAttributes(element));
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (typeof config === 'object') {
2020-09-14 17:12:06 +02:00
_config = _extends({}, _config, config);
2019-03-01 17:31:34 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var action = typeof config === 'string' ? config : _config.slide;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (!data) {
data = new Carousel(element, _config);
}
if (typeof config === 'number') {
data.to(config);
} else if (typeof action === 'string') {
if (typeof data[action] === 'undefined') {
2019-03-11 16:13:30 +01:00
throw new TypeError("No method named \"" + action + "\"");
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
data[action]();
} else if (_config.interval && _config.ride) {
data.pause();
data.cycle();
}
};
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Carousel.jQueryInterface = function jQueryInterface(config) {
2019-03-01 17:31:34 +01:00
return this.each(function () {
2019-08-27 15:03:21 +02:00
Carousel.carouselInterface(this, config);
2018-11-13 07:41:12 +01:00
});
};
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Carousel.dataApiClickHandler = function dataApiClickHandler(event) {
var target = getElementFromSelector(this);
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var config = _extends({}, Manipulator.getDataAttributes(target), Manipulator.getDataAttributes(this));
2018-06-22 07:55:23 +02:00
2020-11-23 14:17:16 +01:00
var slideIndex = this.getAttribute('data-bs-slide-to');
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (slideIndex) {
config.interval = false;
2018-06-22 07:55:23 +02:00
}
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Carousel.carouselInterface(target, config);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (slideIndex) {
2019-03-01 17:31:34 +01:00
Data.getData(target, DATA_KEY$2).to(slideIndex);
2018-11-13 07:41:12 +01:00
}
event.preventDefault();
2018-03-31 22:59:37 +02:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass(Carousel, null, [{
2020-12-03 15:18:59 +01:00
key: "Default",
2018-11-13 07:41:12 +01:00
get: function get() {
2020-12-03 15:18:59 +01:00
return Default;
2018-11-13 07:41:12 +01:00
}
}, {
2020-12-03 15:18:59 +01:00
key: "DATA_KEY",
2018-11-13 07:41:12 +01:00
get: function get() {
2020-12-03 15:18:59 +01:00
return DATA_KEY$2;
2018-11-13 07:41:12 +01:00
}
}]);
2018-03-31 22:59:37 +02:00
return Carousel;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
2020-03-28 11:29:08 +01:00
EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);
EventHandler.on(window, EVENT_LOAD_DATA_API, function () {
var carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
2018-11-13 07:41:12 +01:00
for (var i = 0, len = carousels.length; i < len; i++) {
2019-08-27 15:03:21 +02:00
Carousel.carouselInterface(carousels[i], Data.getData(carousels[i], DATA_KEY$2));
2018-11-13 07:41:12 +01:00
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Carousel to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
defineJQueryPlugin(NAME$2, Carousel);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var NAME$3 = 'collapse';
var DATA_KEY$3 = 'bs.collapse';
var EVENT_KEY$3 = "." + DATA_KEY$3;
var DATA_API_KEY$3 = '.data-api';
var Default$1 = {
toggle: true,
parent: ''
};
var DefaultType$1 = {
toggle: 'boolean',
parent: '(string|element)'
};
2020-03-28 11:29:08 +01:00
var EVENT_SHOW = "show" + EVENT_KEY$3;
var EVENT_SHOWN = "shown" + EVENT_KEY$3;
var EVENT_HIDE = "hide" + EVENT_KEY$3;
var EVENT_HIDDEN = "hidden" + EVENT_KEY$3;
var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$3 + DATA_API_KEY$3;
var CLASS_NAME_SHOW$1 = 'show';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_COLLAPSE = 'collapse';
var CLASS_NAME_COLLAPSING = 'collapsing';
var CLASS_NAME_COLLAPSED = 'collapsed';
var WIDTH = 'width';
var HEIGHT = 'height';
var SELECTOR_ACTIVES = '.show, .collapsing';
2020-11-23 14:17:16 +01:00
var SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="collapse"]';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2018-01-04 01:03:22 +01:00
2020-12-03 15:18:59 +01:00
var Collapse = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Collapse, _BaseComponent);
2018-11-13 07:41:12 +01:00
function Collapse(element, config) {
2020-12-03 15:18:59 +01:00
var _this;
_this = _BaseComponent.call(this, element) || this;
_this._isTransitioning = false;
_this._config = _this._getConfig(config);
_this._triggerArray = SelectorEngine.find(SELECTOR_DATA_TOGGLE$1 + "[href=\"#" + element.id + "\"]," + (SELECTOR_DATA_TOGGLE$1 + "[data-bs-target=\"#" + element.id + "\"]"));
2020-03-28 11:29:08 +01:00
var toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$1);
2018-11-13 07:41:12 +01:00
for (var i = 0, len = toggleList.length; i < len; i++) {
var elem = toggleList[i];
2019-03-01 17:31:34 +01:00
var selector = getSelectorFromElement(elem);
2020-03-28 11:29:08 +01:00
var filterElement = SelectorEngine.find(selector).filter(function (foundElem) {
2018-11-13 07:41:12 +01:00
return foundElem === element;
});
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (selector !== null && filterElement.length) {
2020-12-03 15:18:59 +01:00
_this._selector = selector;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this._triggerArray.push(elem);
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this._parent = _this._config.parent ? _this._getParent() : null;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if (!_this._config.parent) {
_this._addAriaAndCollapsedClass(_this._element, _this._triggerArray);
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if (_this._config.toggle) {
_this.toggle();
2018-11-13 07:41:12 +01:00
}
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this;
2018-11-13 07:41:12 +01:00
} // Getters
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Collapse.prototype;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto.toggle = function toggle() {
if (this._element.classList.contains(CLASS_NAME_SHOW$1)) {
2018-11-13 07:41:12 +01:00
this.hide();
} else {
this.show();
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.show = function show() {
2020-12-03 15:18:59 +01:00
var _this2 = this;
2017-09-06 06:05:12 +02:00
if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$1)) {
2018-11-13 07:41:12 +01:00
return;
}
2018-09-17 21:34:34 +02:00
2018-11-13 07:41:12 +01:00
var actives;
var activesData;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (this._parent) {
2020-03-28 11:29:08 +01:00
actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(function (elem) {
2020-12-03 15:18:59 +01:00
if (typeof _this2._config.parent === 'string') {
return elem.getAttribute('data-bs-parent') === _this2._config.parent;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
return elem.classList.contains(CLASS_NAME_COLLAPSE);
2018-11-13 07:41:12 +01:00
});
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (actives.length === 0) {
actives = null;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
var container = SelectorEngine.findOne(this._selector);
2018-11-13 07:41:12 +01:00
if (actives) {
2020-11-23 14:17:16 +01:00
var tempActiveData = actives.find(function (elem) {
2019-03-01 17:31:34 +01:00
return container !== elem;
});
2020-11-23 14:17:16 +01:00
activesData = tempActiveData ? Data.getData(tempActiveData, DATA_KEY$3) : null;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (activesData && activesData._isTransitioning) {
2018-03-31 22:59:37 +02:00
return;
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var startEvent = EventHandler.trigger(this._element, EVENT_SHOW);
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (startEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (actives) {
2019-03-01 17:31:34 +01:00
actives.forEach(function (elemActive) {
if (container !== elemActive) {
2019-08-27 15:03:21 +02:00
Collapse.collapseInterface(elemActive, 'hide');
2019-03-01 17:31:34 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (!activesData) {
Data.setData(elemActive, DATA_KEY$3, null);
}
});
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var dimension = this._getDimension();
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this._element.classList.remove(CLASS_NAME_COLLAPSE);
2019-03-01 17:31:34 +01:00
2020-03-28 11:29:08 +01:00
this._element.classList.add(CLASS_NAME_COLLAPSING);
2019-03-01 17:31:34 +01:00
2018-11-13 07:41:12 +01:00
this._element.style[dimension] = 0;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this._triggerArray.length) {
2019-03-01 17:31:34 +01:00
this._triggerArray.forEach(function (element) {
2020-03-28 11:29:08 +01:00
element.classList.remove(CLASS_NAME_COLLAPSED);
2019-03-01 17:31:34 +01:00
element.setAttribute('aria-expanded', true);
});
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this.setTransitioning(true);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete() {
2020-12-03 15:18:59 +01:00
_this2._element.classList.remove(CLASS_NAME_COLLAPSING);
2019-03-01 17:31:34 +01:00
_this2._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$1);
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
_this2._element.style[dimension] = '';
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
_this2.setTransitioning(false);
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
EventHandler.trigger(_this2._element, EVENT_SHOWN);
2018-03-31 22:59:37 +02:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
var scrollSize = "scroll" + capitalizedDimension;
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement(this._element);
EventHandler.one(this._element, 'transitionend', complete);
2019-03-01 17:31:34 +01:00
emulateTransitionEnd(this._element, transitionDuration);
2018-11-13 07:41:12 +01:00
this._element.style[dimension] = this._element[scrollSize] + "px";
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.hide = function hide() {
2020-12-03 15:18:59 +01:00
var _this3 = this;
2018-11-13 07:41:12 +01:00
if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$1)) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var startEvent = EventHandler.trigger(this._element, EVENT_HIDE);
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if (startEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var dimension = this._getDimension();
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
2019-03-01 17:31:34 +01:00
reflow(this._element);
2020-03-28 11:29:08 +01:00
this._element.classList.add(CLASS_NAME_COLLAPSING);
2019-03-01 17:31:34 +01:00
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$1);
2019-03-01 17:31:34 +01:00
2018-11-13 07:41:12 +01:00
var triggerArrayLength = this._triggerArray.length;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (triggerArrayLength > 0) {
for (var i = 0; i < triggerArrayLength; i++) {
var trigger = this._triggerArray[i];
2019-08-27 15:03:21 +02:00
var elem = getElementFromSelector(trigger);
2017-09-30 23:28:03 +02:00
if (elem && !elem.classList.contains(CLASS_NAME_SHOW$1)) {
2020-03-28 11:29:08 +01:00
trigger.classList.add(CLASS_NAME_COLLAPSED);
2019-08-27 15:03:21 +02:00
trigger.setAttribute('aria-expanded', false);
2017-09-06 06:05:12 +02:00
}
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this.setTransitioning(true);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete() {
2020-12-03 15:18:59 +01:00
_this3.setTransitioning(false);
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this3._element.classList.remove(CLASS_NAME_COLLAPSING);
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
_this3._element.classList.add(CLASS_NAME_COLLAPSE);
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
EventHandler.trigger(_this3._element, EVENT_HIDDEN);
2018-03-31 22:59:37 +02:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._element.style[dimension] = '';
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement(this._element);
EventHandler.one(this._element, 'transitionend', complete);
2019-03-01 17:31:34 +01:00
emulateTransitionEnd(this._element, transitionDuration);
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.setTransitioning = function setTransitioning(isTransitioning) {
this._isTransitioning = isTransitioning;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.dispose = function dispose() {
2020-12-03 15:18:59 +01:00
_BaseComponent.prototype.dispose.call(this);
2018-11-13 07:41:12 +01:00
this._config = null;
this._parent = null;
this._triggerArray = null;
this._isTransitioning = null;
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._getConfig = function _getConfig(config) {
2020-09-14 17:12:06 +02:00
config = _extends({}, Default$1, config);
2018-11-13 07:41:12 +01:00
config.toggle = Boolean(config.toggle); // Coerce string values
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
typeCheckConfig(NAME$3, config, DefaultType$1);
2018-11-13 07:41:12 +01:00
return config;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getDimension = function _getDimension() {
2020-09-14 17:12:06 +02:00
return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getParent = function _getParent() {
2020-12-03 15:18:59 +01:00
var _this4 = this;
2017-09-06 06:05:12 +02:00
2019-03-11 16:13:30 +01:00
var parent = this._config.parent;
2017-09-30 23:28:03 +02:00
2019-03-11 16:13:30 +01:00
if (isElement(parent)) {
// it's a jQuery object
if (typeof parent.jquery !== 'undefined' || typeof parent[0] !== 'undefined') {
parent = parent[0];
2018-11-13 07:41:12 +01:00
}
} else {
2019-03-11 16:13:30 +01:00
parent = SelectorEngine.findOne(parent);
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-11-23 14:17:16 +01:00
var selector = SELECTOR_DATA_TOGGLE$1 + "[data-bs-parent=\"" + parent + "\"]";
2020-03-28 11:29:08 +01:00
SelectorEngine.find(selector, parent).forEach(function (element) {
2019-08-27 15:03:21 +02:00
var selected = getElementFromSelector(element);
2020-12-03 15:18:59 +01:00
_this4._addAriaAndCollapsedClass(selected, [element]);
2018-11-13 07:41:12 +01:00
});
return parent;
};
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
2020-09-14 17:12:06 +02:00
if (!element || !triggerArray.length) {
return;
}
2017-09-06 06:05:12 +02:00
var isOpen = element.classList.contains(CLASS_NAME_SHOW$1);
2020-09-14 17:12:06 +02:00
triggerArray.forEach(function (elem) {
if (isOpen) {
elem.classList.remove(CLASS_NAME_COLLAPSED);
} else {
elem.classList.add(CLASS_NAME_COLLAPSED);
2019-03-01 17:31:34 +01:00
}
2020-09-14 17:12:06 +02:00
elem.setAttribute('aria-expanded', isOpen);
});
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Collapse.collapseInterface = function collapseInterface(element, config) {
2019-03-01 17:31:34 +01:00
var data = Data.getData(element, DATA_KEY$3);
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var _config = _extends({}, Default$1, Manipulator.getDataAttributes(element), typeof config === 'object' && config ? config : {});
2017-09-06 06:05:12 +02:00
2020-05-13 20:53:43 +02:00
if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
2019-03-01 17:31:34 +01:00
_config.toggle = false;
}
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
if (!data) {
data = new Collapse(element, _config);
}
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
2019-03-11 16:13:30 +01:00
throw new TypeError("No method named \"" + config + "\"");
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
data[config]();
}
};
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Collapse.jQueryInterface = function jQueryInterface(config) {
2019-03-01 17:31:34 +01:00
return this.each(function () {
2019-08-27 15:03:21 +02:00
Collapse.collapseInterface(this, config);
2018-11-13 07:41:12 +01:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass(Collapse, null, [{
2020-12-03 15:18:59 +01:00
key: "Default",
2018-11-13 07:41:12 +01:00
get: function get() {
2020-12-03 15:18:59 +01:00
return Default$1;
2018-11-13 07:41:12 +01:00
}
}, {
2020-12-03 15:18:59 +01:00
key: "DATA_KEY",
2018-11-13 07:41:12 +01:00
get: function get() {
2020-12-03 15:18:59 +01:00
return DATA_KEY$3;
2018-11-13 07:41:12 +01:00
}
}]);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return Collapse;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
2017-09-30 23:28:03 +02:00
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {
2018-11-13 07:41:12 +01:00
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
2018-11-13 07:41:12 +01:00
event.preventDefault();
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
var triggerData = Manipulator.getDataAttributes(this);
var selector = getSelectorFromElement(this);
2020-03-28 11:29:08 +01:00
var selectorElements = SelectorEngine.find(selector);
2019-03-01 17:31:34 +01:00
selectorElements.forEach(function (element) {
var data = Data.getData(element, DATA_KEY$3);
var config;
if (data) {
// update parent attribute
if (data._parent === null && typeof triggerData.parent === 'string') {
data._config.parent = triggerData.parent;
data._parent = data._getParent();
}
config = 'toggle';
} else {
config = triggerData;
}
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Collapse.collapseInterface(element, config);
2018-11-13 07:41:12 +01:00
});
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Collapse to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
2017-09-30 23:28:03 +02:00
defineJQueryPlugin(NAME$3, Collapse);
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var top = 'top';
var bottom = 'bottom';
var right = 'right';
var left = 'left';
var auto = 'auto';
var basePlacements = [top, bottom, right, left];
var start = 'start';
var end = 'end';
var clippingParents = 'clippingParents';
var viewport = 'viewport';
var popper = 'popper';
var reference = 'reference';
var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
return acc.concat([placement + "-" + start, placement + "-" + end]);
}, []);
var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
}, []); // modifiers that need to read the DOM
var beforeRead = 'beforeRead';
var read = 'read';
var afterRead = 'afterRead'; // pure-logic modifiers
var beforeMain = 'beforeMain';
var main = 'main';
var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
var beforeWrite = 'beforeWrite';
var write = 'write';
var afterWrite = 'afterWrite';
var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
function getNodeName(element) {
return element ? (element.nodeName || '').toLowerCase() : null;
}
2019-11-08 09:11:23 +01:00
2020-12-07 16:50:24 +01:00
/*:: import type { Window } from '../types'; */
/*:: declare function getWindow(node: Node | Window): Window; */
function getWindow(node) {
if (node.toString() !== '[object Window]') {
var ownerDocument = node.ownerDocument;
return ownerDocument ? ownerDocument.defaultView || window : window;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
return node;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
/*:: declare function isElement(node: mixed): boolean %checks(node instanceof
Element); */
2017-10-25 21:35:07 +02:00
2020-12-07 16:50:24 +01:00
function isElement$1(node) {
var OwnElement = getWindow(node).Element;
return node instanceof OwnElement || node instanceof Element;
}
/*:: declare function isHTMLElement(node: mixed): boolean %checks(node instanceof
HTMLElement); */
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function isHTMLElement(node) {
var OwnElement = getWindow(node).HTMLElement;
return node instanceof OwnElement || node instanceof HTMLElement;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
/*:: declare function isShadowRoot(node: mixed): boolean %checks(node instanceof
ShadowRoot); */
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function isShadowRoot(node) {
var OwnElement = getWindow(node).ShadowRoot;
return node instanceof OwnElement || node instanceof ShadowRoot;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
// and applies them to the HTMLElements such as popper and arrow
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function applyStyles(_ref) {
var state = _ref.state;
Object.keys(state.elements).forEach(function (name) {
var style = state.styles[name] || {};
var attributes = state.attributes[name] || {};
var element = state.elements[name]; // arrow is optional + virtual elements
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (!isHTMLElement(element) || !getNodeName(element)) {
return;
} // Flow doesn't support to extend this property, but it's the most
// effective way to apply styles to an HTMLElement
// $FlowFixMe[cannot-write]
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
Object.assign(element.style, style);
Object.keys(attributes).forEach(function (name) {
var value = attributes[name];
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (value === false) {
element.removeAttribute(name);
} else {
element.setAttribute(name, value === true ? '' : value);
}
});
});
2019-11-08 09:11:23 +01:00
}
2020-12-07 16:50:24 +01:00
function effect(_ref2) {
var state = _ref2.state;
var initialStyles = {
popper: {
position: state.options.strategy,
left: '0',
top: '0',
margin: '0'
},
arrow: {
position: 'absolute'
},
reference: {}
};
Object.assign(state.elements.popper.style, initialStyles.popper);
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (state.elements.arrow) {
Object.assign(state.elements.arrow.style, initialStyles.arrow);
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
return function () {
Object.keys(state.elements).forEach(function (name) {
var element = state.elements[name];
var attributes = state.attributes[name] || {};
var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var style = styleProperties.reduce(function (style, property) {
style[property] = '';
return style;
}, {}); // arrow is optional + virtual elements
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (!isHTMLElement(element) || !getNodeName(element)) {
return;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
Object.assign(element.style, style);
Object.keys(attributes).forEach(function (attribute) {
element.removeAttribute(attribute);
});
});
};
} // eslint-disable-next-line import/no-unused-modules
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var applyStyles$1 = {
name: 'applyStyles',
enabled: true,
phase: 'write',
fn: applyStyles,
effect: effect,
requires: ['computeStyles']
};
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getBasePlacement(placement) {
return placement.split('-')[0];
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
// Returns the layout rect of an element relative to its offsetParent. Layout
// means it doesn't take into account transforms.
function getLayoutRect(element) {
return {
x: element.offsetLeft,
y: element.offsetTop,
width: element.offsetWidth,
height: element.offsetHeight
};
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function contains(parent, child) {
var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (parent.contains(child)) {
return true;
} // then fallback to custom implementation with Shadow DOM support
else if (rootNode && isShadowRoot(rootNode)) {
var next = child;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
do {
if (next && parent.isSameNode(next)) {
return true;
} // $FlowFixMe[prop-missing]: need a better way to handle this...
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
next = next.parentNode || next.host;
} while (next);
} // Give up, the result is false
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return false;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getComputedStyle$1(element) {
return getWindow(element).getComputedStyle(element);
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function isTableElement(element) {
return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getDocumentElement(element) {
// $FlowFixMe[incompatible-return]: assume body is always available
return ((isElement$1(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
element.document) || window.document).documentElement;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function getParentNode(element) {
if (getNodeName(element) === 'html') {
return element;
}
2017-09-06 06:05:12 +02:00
return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
// $FlowFixMe[incompatible-return]
// $FlowFixMe[prop-missing]
2020-12-07 16:50:24 +01:00
element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
element.parentNode || // DOM Element detected
// $FlowFixMe[incompatible-return]: need a better way to handle this...
2020-12-07 16:50:24 +01:00
element.host || // ShadowRoot detected
// $FlowFixMe[incompatible-call]: HTMLElement is a Node
2020-12-07 16:50:24 +01:00
getDocumentElement(element) // fallback
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
);
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function getTrueOffsetParent(element) {
if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
getComputedStyle$1(element).position === 'fixed') {
return null;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var offsetParent = element.offsetParent;
if (offsetParent) {
var html = getDocumentElement(offsetParent);
if (getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && getComputedStyle$1(html).position !== 'static') {
return html;
2018-03-31 22:59:37 +02:00
}
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return offsetParent;
} // `.offsetParent` reports `null` for fixed elements, while absolute elements
// return the containing block
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getContainingBlock(element) {
var currentNode = getParentNode(element);
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that
// create a containing block.
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (css.transform !== 'none' || css.perspective !== 'none' || css.willChange && css.willChange !== 'auto') {
return currentNode;
} else {
currentNode = currentNode.parentNode;
}
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
return null;
} // Gets the closest ancestor positioned element. Handles some edge cases,
// such as table ancestors and cross browser bugs.
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getOffsetParent(element) {
var window = getWindow(element);
var offsetParent = getTrueOffsetParent(element);
while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {
offsetParent = getTrueOffsetParent(offsetParent);
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (offsetParent && getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static') {
return window;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return offsetParent || getContainingBlock(element) || window;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function getMainAxisFromPlacement(placement) {
return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function within(min, value, max) {
return Math.max(min, Math.min(value, max));
}
function getFreshSideObject() {
return {
top: 0,
right: 0,
bottom: 0,
left: 0
2018-03-31 22:59:37 +02:00
};
2020-12-07 16:50:24 +01:00
}
function mergePaddingObject(paddingObject) {
return Object.assign(Object.assign({}, getFreshSideObject()), paddingObject);
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function expandToHashMap(value, keys) {
return keys.reduce(function (hashMap, key) {
hashMap[key] = value;
return hashMap;
}, {});
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function arrow(_ref) {
var _state$modifiersData$;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var state = _ref.state,
name = _ref.name;
var arrowElement = state.elements.arrow;
var popperOffsets = state.modifiersData.popperOffsets;
var basePlacement = getBasePlacement(state.placement);
var axis = getMainAxisFromPlacement(basePlacement);
var isVertical = [left, right].indexOf(basePlacement) >= 0;
var len = isVertical ? 'height' : 'width';
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (!arrowElement || !popperOffsets) {
return;
2017-09-06 06:05:12 +02:00
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var paddingObject = state.modifiersData[name + "#persistent"].padding;
var arrowRect = getLayoutRect(arrowElement);
var minProp = axis === 'y' ? top : left;
var maxProp = axis === 'y' ? bottom : right;
var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
var startDiff = popperOffsets[axis] - state.rects.reference[axis];
var arrowOffsetParent = getOffsetParent(arrowElement);
var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
// outside of the popper bounds
var min = paddingObject[minProp];
var max = clientSize - arrowRect[len] - paddingObject[maxProp];
var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
var offset = within(min, center, max); // Prevents breaking syntax highlighting...
var axisProp = axis;
state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function effect$1(_ref2) {
var state = _ref2.state,
options = _ref2.options,
name = _ref2.name;
var _options$element = options.element,
arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element,
_options$padding = options.padding,
padding = _options$padding === void 0 ? 0 : _options$padding;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (arrowElement == null) {
return;
} // CSS selector
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (typeof arrowElement === 'string') {
arrowElement = state.elements.popper.querySelector(arrowElement);
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (!arrowElement) {
return;
}
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (!contains(state.elements.popper, arrowElement)) {
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
state.elements.arrow = arrowElement;
state.modifiersData[name + "#persistent"] = {
padding: mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements))
};
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var arrow$1 = {
name: 'arrow',
enabled: true,
phase: 'main',
fn: arrow,
effect: effect$1,
requires: ['popperOffsets'],
requiresIfExists: ['preventOverflow']
};
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var unsetSides = {
top: 'auto',
right: 'auto',
bottom: 'auto',
left: 'auto'
}; // Round the offsets to the nearest suitable subpixel based on the DPR.
// Zooming can change the DPR, but it seems to report a value that will
// cleanly divide the values into the appropriate subpixels.
function roundOffsetsByDPR(_ref) {
2020-12-07 16:50:24 +01:00
var x = _ref.x,
y = _ref.y;
var win = window;
var dpr = win.devicePixelRatio || 1;
return {
x: Math.round(x * dpr) / dpr || 0,
y: Math.round(y * dpr) / dpr || 0
};
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function mapToStyles(_ref2) {
var _Object$assign2;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var popper = _ref2.popper,
popperRect = _ref2.popperRect,
placement = _ref2.placement,
offsets = _ref2.offsets,
position = _ref2.position,
gpuAcceleration = _ref2.gpuAcceleration,
adaptive = _ref2.adaptive,
roundOffsets = _ref2.roundOffsets;
2017-09-06 06:05:12 +02:00
var _ref3 = roundOffsets ? roundOffsetsByDPR(offsets) : offsets,
_ref3$x = _ref3.x,
x = _ref3$x === void 0 ? 0 : _ref3$x,
_ref3$y = _ref3.y,
y = _ref3$y === void 0 ? 0 : _ref3$y;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var hasX = offsets.hasOwnProperty('x');
var hasY = offsets.hasOwnProperty('y');
var sideX = left;
var sideY = top;
var win = window;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (adaptive) {
var offsetParent = getOffsetParent(popper);
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (offsetParent === getWindow(popper)) {
offsetParent = getDocumentElement(popper);
} // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
/*:: offsetParent = (offsetParent: Element); */
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (placement === top) {
sideY = bottom;
y -= offsetParent.clientHeight - popperRect.height;
y *= gpuAcceleration ? 1 : -1;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (placement === left) {
sideX = right;
x -= offsetParent.clientWidth - popperRect.width;
x *= gpuAcceleration ? 1 : -1;
2017-09-06 06:05:12 +02:00
}
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var commonStyles = Object.assign({
position: position
}, adaptive && unsetSides);
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (gpuAcceleration) {
var _Object$assign;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
2017-09-06 06:05:12 +02:00
}
function computeStyles(_ref4) {
var state = _ref4.state,
options = _ref4.options;
2020-12-07 16:50:24 +01:00
var _options$gpuAccelerat = options.gpuAcceleration,
gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
_options$adaptive = options.adaptive,
adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
_options$roundOffsets = options.roundOffsets,
roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
2020-12-07 16:50:24 +01:00
var commonStyles = {
placement: getBasePlacement(state.placement),
popper: state.elements.popper,
popperRect: state.rects.popper,
gpuAcceleration: gpuAcceleration
};
if (state.modifiersData.popperOffsets != null) {
state.styles.popper = Object.assign(Object.assign({}, state.styles.popper), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {
offsets: state.modifiersData.popperOffsets,
position: state.options.strategy,
adaptive: adaptive,
roundOffsets: roundOffsets
2020-12-07 16:50:24 +01:00
})));
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
if (state.modifiersData.arrow != null) {
state.styles.arrow = Object.assign(Object.assign({}, state.styles.arrow), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {
offsets: state.modifiersData.arrow,
position: 'absolute',
adaptive: false,
roundOffsets: roundOffsets
2020-12-07 16:50:24 +01:00
})));
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {
'data-popper-placement': state.placement
2017-09-06 06:05:12 +02:00
});
2020-12-07 16:50:24 +01:00
} // eslint-disable-next-line import/no-unused-modules
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var computeStyles$1 = {
name: 'computeStyles',
enabled: true,
phase: 'beforeWrite',
fn: computeStyles,
data: {}
};
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var passive = {
passive: true
};
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function effect$2(_ref) {
var state = _ref.state,
instance = _ref.instance,
options = _ref.options;
var _options$scroll = options.scroll,
scroll = _options$scroll === void 0 ? true : _options$scroll,
_options$resize = options.resize,
resize = _options$resize === void 0 ? true : _options$resize;
var window = getWindow(state.elements.popper);
var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
if (scroll) {
scrollParents.forEach(function (scrollParent) {
scrollParent.addEventListener('scroll', instance.update, passive);
});
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (resize) {
window.addEventListener('resize', instance.update, passive);
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return function () {
if (scroll) {
scrollParents.forEach(function (scrollParent) {
scrollParent.removeEventListener('scroll', instance.update, passive);
});
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (resize) {
window.removeEventListener('resize', instance.update, passive);
}
2018-03-31 22:59:37 +02:00
};
2020-12-07 16:50:24 +01:00
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var eventListeners = {
name: 'eventListeners',
enabled: true,
phase: 'write',
fn: function fn() {},
effect: effect$2,
data: {}
};
var hash = {
left: 'right',
right: 'left',
bottom: 'top',
top: 'bottom'
};
2018-03-31 22:59:37 +02:00
function getOppositePlacement(placement) {
return placement.replace(/left|right|bottom|top/g, function (matched) {
return hash[matched];
});
}
2020-12-07 16:50:24 +01:00
var hash$1 = {
start: 'end',
end: 'start'
};
function getOppositeVariationPlacement(placement) {
return placement.replace(/start|end/g, function (matched) {
return hash$1[matched];
});
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function getBoundingClientRect(element) {
var rect = element.getBoundingClientRect();
return {
width: rect.width,
height: rect.height,
top: rect.top,
right: rect.right,
bottom: rect.bottom,
left: rect.left,
x: rect.left,
y: rect.top
2018-03-31 22:59:37 +02:00
};
}
2020-12-07 16:50:24 +01:00
function getWindowScroll(node) {
var win = getWindow(node);
var scrollLeft = win.pageXOffset;
var scrollTop = win.pageYOffset;
return {
scrollLeft: scrollLeft,
scrollTop: scrollTop
};
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getWindowScrollBarX(element) {
// If <html> has a CSS width greater than the viewport, then this will be
// incorrect for RTL.
// Popper 1 is broken in this case and never had a bug report so let's assume
// it's not an issue. I don't think anyone ever specifies width on <html>
// anyway.
// Browsers where the left scrollbar doesn't cause an issue report `0` for
// this (e.g. Edge 2019, IE11, Safari)
return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getViewportRect(element) {
var win = getWindow(element);
var html = getDocumentElement(element);
var visualViewport = win.visualViewport;
var width = html.clientWidth;
var height = html.clientHeight;
var x = 0;
var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
// can be obscured underneath it.
// Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
// if it isn't open, so if this isn't available, the popper will be detected
// to overflow the bottom of the screen too early.
if (visualViewport) {
width = visualViewport.width;
height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)
// In Chrome, it returns a value very close to 0 (+/-) but contains rounding
// errors due to floating point numbers, so we need to check precision.
// Safari returns a number <= 0, usually < -1 when pinch-zoomed
// Feature detection fails in mobile emulation mode in Chrome.
// Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
// 0.001
// Fallback here: "Not Safari" userAgent
if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
x = visualViewport.offsetLeft;
y = visualViewport.offsetTop;
2017-09-06 06:05:12 +02:00
}
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return {
width: width,
height: height,
x: x + getWindowScrollBarX(element),
y: y
2017-09-06 06:05:12 +02:00
};
2020-12-07 16:50:24 +01:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
// of the `<html>` and `<body>` rect bounds if horizontally scrollable
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getDocumentRect(element) {
var html = getDocumentElement(element);
var winScroll = getWindowScroll(element);
var body = element.ownerDocument.body;
var width = Math.max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
var height = Math.max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
var y = -winScroll.scrollTop;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (getComputedStyle$1(body || html).direction === 'rtl') {
x += Math.max(html.clientWidth, body ? body.clientWidth : 0) - width;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return {
width: width,
height: height,
x: x,
y: y
};
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function isScrollParent(element) {
// Firefox wants us to check `-x` and `-y` variations as well
var _getComputedStyle = getComputedStyle$1(element),
overflow = _getComputedStyle.overflow,
overflowX = _getComputedStyle.overflowX,
overflowY = _getComputedStyle.overflowY;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getScrollParent(node) {
if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
// $FlowFixMe[incompatible-return]: assume body is always available
2020-12-07 16:50:24 +01:00
return node.ownerDocument.body;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
if (isHTMLElement(node) && isScrollParent(node)) {
return node;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return getScrollParent(getParentNode(node));
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
/*
given a DOM element, return the list of all scroll parents, up the list of ancesors
until we get to the top window object. This list is what we attach scroll listeners
to, because if any of these parent elements scroll, we'll need to re-calculate the
2020-12-07 16:50:24 +01:00
reference element's position.
*/
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function listScrollParents(element, list) {
if (list === void 0) {
list = [];
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
var scrollParent = getScrollParent(element);
var isBody = getNodeName(scrollParent) === 'body';
var win = getWindow(scrollParent);
var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
var updatedList = list.concat(target);
return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
2020-12-07 16:50:24 +01:00
updatedList.concat(listScrollParents(getParentNode(target)));
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function rectToClientRect(rect) {
return Object.assign(Object.assign({}, rect), {}, {
left: rect.x,
top: rect.y,
right: rect.x + rect.width,
bottom: rect.y + rect.height
});
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getInnerBoundingClientRect(element) {
var rect = getBoundingClientRect(element);
rect.top = rect.top + element.clientTop;
rect.left = rect.left + element.clientLeft;
rect.bottom = rect.top + element.clientHeight;
rect.right = rect.left + element.clientWidth;
rect.width = element.clientWidth;
rect.height = element.clientHeight;
rect.x = rect.left;
rect.y = rect.top;
return rect;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getClientRectFromMixedType(element, clippingParent) {
return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
} // A "clipping parent" is an overflowable container with the characteristic of
// clipping (or hiding) overflowing elements with a position different from
// `initial`
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getClippingParents(element) {
var clippingParents = listScrollParents(getParentNode(element));
var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;
var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (!isElement$1(clipperElement)) {
return [];
} // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
2018-03-31 22:59:37 +02:00
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return clippingParents.filter(function (clippingParent) {
return isElement$1(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
2018-03-31 22:59:37 +02:00
});
2020-12-07 16:50:24 +01:00
} // Gets the maximum area that the element is visible in due to any number of
// clipping parents
function getClippingRect(element, boundary, rootBoundary) {
var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
var firstClippingParent = clippingParents[0];
var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
var rect = getClientRectFromMixedType(element, clippingParent);
accRect.top = Math.max(rect.top, accRect.top);
accRect.right = Math.min(rect.right, accRect.right);
accRect.bottom = Math.min(rect.bottom, accRect.bottom);
accRect.left = Math.max(rect.left, accRect.left);
return accRect;
}, getClientRectFromMixedType(element, firstClippingParent));
clippingRect.width = clippingRect.right - clippingRect.left;
clippingRect.height = clippingRect.bottom - clippingRect.top;
clippingRect.x = clippingRect.left;
clippingRect.y = clippingRect.top;
return clippingRect;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getVariation(placement) {
return placement.split('-')[1];
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function computeOffsets(_ref) {
var reference = _ref.reference,
element = _ref.element,
placement = _ref.placement;
var basePlacement = placement ? getBasePlacement(placement) : null;
var variation = placement ? getVariation(placement) : null;
var commonX = reference.x + reference.width / 2 - element.width / 2;
var commonY = reference.y + reference.height / 2 - element.height / 2;
var offsets;
switch (basePlacement) {
case top:
offsets = {
x: commonX,
y: reference.y - element.height
};
break;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
case bottom:
offsets = {
x: commonX,
y: reference.y + reference.height
};
break;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
case right:
offsets = {
x: reference.x + reference.width,
y: commonY
};
break;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
case left:
offsets = {
x: reference.x - element.width,
y: commonY
};
break;
2020-12-07 16:50:24 +01:00
default:
offsets = {
x: reference.x,
y: reference.y
};
}
2020-12-07 16:50:24 +01:00
var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
if (mainAxis != null) {
var len = mainAxis === 'y' ? 'height' : 'width';
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
switch (variation) {
case start:
offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
2020-12-07 16:50:24 +01:00
break;
2018-12-16 00:13:22 +01:00
2020-12-07 16:50:24 +01:00
case end:
offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
2020-12-07 16:50:24 +01:00
break;
2018-08-19 05:22:08 +02:00
}
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return offsets;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function detectOverflow(state, options) {
if (options === void 0) {
options = {};
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
var _options = options,
_options$placement = _options.placement,
placement = _options$placement === void 0 ? state.placement : _options$placement,
_options$boundary = _options.boundary,
boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
_options$rootBoundary = _options.rootBoundary,
rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
_options$elementConte = _options.elementContext,
elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
_options$altBoundary = _options.altBoundary,
altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
_options$padding = _options.padding,
padding = _options$padding === void 0 ? 0 : _options$padding;
var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
var altContext = elementContext === popper ? reference : popper;
var referenceElement = state.elements.reference;
var popperRect = state.rects.popper;
var element = state.elements[altBoundary ? altContext : elementContext];
var clippingClientRect = getClippingRect(isElement$1(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
var referenceClientRect = getBoundingClientRect(referenceElement);
var popperOffsets = computeOffsets({
reference: referenceClientRect,
element: popperRect,
strategy: 'absolute',
placement: placement
});
var popperClientRect = rectToClientRect(Object.assign(Object.assign({}, popperRect), popperOffsets));
var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
// 0 or negative = within the clipping rect
var overflowOffsets = {
top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
right: elementClientRect.right - clippingClientRect.right + paddingObject.right
};
var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
if (elementContext === popper && offsetData) {
var offset = offsetData[placement];
Object.keys(overflowOffsets).forEach(function (key) {
var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
overflowOffsets[key] += offset[axis] * multiply;
});
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return overflowOffsets;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
/*:: type OverflowsMap = { [ComputedPlacement]: number }; */
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
/*;; type OverflowsMap = { [key in ComputedPlacement]: number }; */
function computeAutoPlacement(state, options) {
if (options === void 0) {
options = {};
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
var _options = options,
placement = _options.placement,
boundary = _options.boundary,
rootBoundary = _options.rootBoundary,
padding = _options.padding,
flipVariations = _options.flipVariations,
_options$allowedAutoP = _options.allowedAutoPlacements,
allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
var variation = getVariation(placement);
var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
return getVariation(placement) === variation;
}) : basePlacements;
2020-12-07 16:50:24 +01:00
var allowedPlacements = placements$1.filter(function (placement) {
return allowedAutoPlacements.indexOf(placement) >= 0;
});
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (allowedPlacements.length === 0) {
allowedPlacements = placements$1;
} // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
2020-12-07 16:50:24 +01:00
var overflows = allowedPlacements.reduce(function (acc, placement) {
acc[placement] = detectOverflow(state, {
placement: placement,
boundary: boundary,
rootBoundary: rootBoundary,
padding: padding
})[getBasePlacement(placement)];
return acc;
}, {});
return Object.keys(overflows).sort(function (a, b) {
return overflows[a] - overflows[b];
});
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
function getExpandedFallbackPlacements(placement) {
if (getBasePlacement(placement) === auto) {
return [];
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var oppositePlacement = getOppositePlacement(placement);
return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function flip(_ref) {
var state = _ref.state,
options = _ref.options,
name = _ref.name;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (state.modifiersData[name]._skip) {
return;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
var _options$mainAxis = options.mainAxis,
checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
_options$altAxis = options.altAxis,
checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
specifiedFallbackPlacements = options.fallbackPlacements,
padding = options.padding,
boundary = options.boundary,
rootBoundary = options.rootBoundary,
altBoundary = options.altBoundary,
_options$flipVariatio = options.flipVariations,
flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
allowedAutoPlacements = options.allowedAutoPlacements;
var preferredPlacement = state.options.placement;
var basePlacement = getBasePlacement(preferredPlacement);
var isBasePlacement = basePlacement === preferredPlacement;
var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
placement: placement,
boundary: boundary,
rootBoundary: rootBoundary,
padding: padding,
flipVariations: flipVariations,
allowedAutoPlacements: allowedAutoPlacements
}) : placement);
}, []);
var referenceRect = state.rects.reference;
var popperRect = state.rects.popper;
var checksMap = new Map();
var makeFallbackChecks = true;
var firstFittingPlacement = placements[0];
for (var i = 0; i < placements.length; i++) {
var placement = placements[i];
var _basePlacement = getBasePlacement(placement);
var isStartVariation = getVariation(placement) === start;
var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
var len = isVertical ? 'width' : 'height';
var overflow = detectOverflow(state, {
placement: placement,
boundary: boundary,
rootBoundary: rootBoundary,
altBoundary: altBoundary,
padding: padding
});
var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (referenceRect[len] > popperRect[len]) {
mainVariationSide = getOppositePlacement(mainVariationSide);
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
var altVariationSide = getOppositePlacement(mainVariationSide);
var checks = [];
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (checkMainAxis) {
checks.push(overflow[_basePlacement] <= 0);
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (checkAltAxis) {
checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
}
2019-04-18 13:47:52 +02:00
2020-12-07 16:50:24 +01:00
if (checks.every(function (check) {
return check;
})) {
firstFittingPlacement = placement;
makeFallbackChecks = false;
break;
}
2019-04-18 13:47:52 +02:00
2020-12-07 16:50:24 +01:00
checksMap.set(placement, checks);
}
2019-04-18 13:47:52 +02:00
2020-12-07 16:50:24 +01:00
if (makeFallbackChecks) {
// `2` may be desired in some cases research later
var numberOfChecks = flipVariations ? 3 : 1;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _loop = function _loop(_i) {
var fittingPlacement = placements.find(function (placement) {
var checks = checksMap.get(placement);
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (checks) {
return checks.slice(0, _i).every(function (check) {
return check;
});
}
});
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (fittingPlacement) {
firstFittingPlacement = fittingPlacement;
return "break";
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
};
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
for (var _i = numberOfChecks; _i > 0; _i--) {
var _ret = _loop(_i);
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (_ret === "break") break;
2018-03-31 22:59:37 +02:00
}
}
2020-12-07 16:50:24 +01:00
if (state.placement !== firstFittingPlacement) {
state.modifiersData[name]._skip = true;
state.placement = firstFittingPlacement;
state.reset = true;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
} // eslint-disable-next-line import/no-unused-modules
2017-09-06 06:05:12 +02:00
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var flip$1 = {
name: 'flip',
enabled: true,
phase: 'main',
fn: flip,
requiresIfExists: ['offset'],
data: {
_skip: false
}
};
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getSideOffsets(overflow, rect, preventedOffsets) {
if (preventedOffsets === void 0) {
preventedOffsets = {
x: 0,
y: 0
};
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
return {
top: overflow.top - rect.height - preventedOffsets.y,
right: overflow.right - rect.width + preventedOffsets.x,
bottom: overflow.bottom - rect.height + preventedOffsets.y,
left: overflow.left - rect.width - preventedOffsets.x
};
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function isAnySideFullyClipped(overflow) {
return [top, right, bottom, left].some(function (side) {
return overflow[side] >= 0;
2018-03-31 22:59:37 +02:00
});
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function hide(_ref) {
var state = _ref.state,
name = _ref.name;
var referenceRect = state.rects.reference;
var popperRect = state.rects.popper;
var preventedOffsets = state.modifiersData.preventOverflow;
var referenceOverflow = detectOverflow(state, {
elementContext: 'reference'
});
var popperAltOverflow = detectOverflow(state, {
altBoundary: true
});
var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
state.modifiersData[name] = {
referenceClippingOffsets: referenceClippingOffsets,
popperEscapeOffsets: popperEscapeOffsets,
isReferenceHidden: isReferenceHidden,
hasPopperEscaped: hasPopperEscaped
};
state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {
'data-popper-reference-hidden': isReferenceHidden,
'data-popper-escaped': hasPopperEscaped
});
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var hide$1 = {
name: 'hide',
enabled: true,
phase: 'main',
requiresIfExists: ['preventOverflow'],
fn: hide
};
function distanceAndSkiddingToXY(placement, rects, offset) {
var basePlacement = getBasePlacement(placement);
var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
var _ref = typeof offset === 'function' ? offset(Object.assign(Object.assign({}, rects), {}, {
placement: placement
})) : offset,
skidding = _ref[0],
distance = _ref[1];
skidding = skidding || 0;
distance = (distance || 0) * invertDistance;
return [left, right].indexOf(basePlacement) >= 0 ? {
x: distance,
y: skidding
} : {
x: skidding,
y: distance
};
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function offset(_ref2) {
var state = _ref2.state,
options = _ref2.options,
name = _ref2.name;
var _options$offset = options.offset,
offset = _options$offset === void 0 ? [0, 0] : _options$offset;
var data = placements.reduce(function (acc, placement) {
acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
return acc;
}, {});
var _data$state$placement = data[state.placement],
x = _data$state$placement.x,
y = _data$state$placement.y;
if (state.modifiersData.popperOffsets != null) {
state.modifiersData.popperOffsets.x += x;
state.modifiersData.popperOffsets.y += y;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
state.modifiersData[name] = data;
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var offset$1 = {
name: 'offset',
enabled: true,
phase: 'main',
requires: ['popperOffsets'],
fn: offset
};
function popperOffsets(_ref) {
var state = _ref.state,
name = _ref.name;
// Offsets are the actual position the popper needs to have to be
// properly positioned near its reference element
// This is the most basic placement, and will be adjusted by
// the modifiers in the next step
state.modifiersData[name] = computeOffsets({
reference: state.rects.reference,
element: state.rects.popper,
strategy: 'absolute',
placement: state.placement
2018-03-31 22:59:37 +02:00
});
2020-12-07 16:50:24 +01:00
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var popperOffsets$1 = {
name: 'popperOffsets',
enabled: true,
phase: 'read',
fn: popperOffsets,
data: {}
};
function getAltAxis(axis) {
return axis === 'x' ? 'y' : 'x';
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function preventOverflow(_ref) {
var state = _ref.state,
options = _ref.options,
name = _ref.name;
var _options$mainAxis = options.mainAxis,
checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
_options$altAxis = options.altAxis,
checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
boundary = options.boundary,
rootBoundary = options.rootBoundary,
altBoundary = options.altBoundary,
padding = options.padding,
_options$tether = options.tether,
tether = _options$tether === void 0 ? true : _options$tether,
_options$tetherOffset = options.tetherOffset,
tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
var overflow = detectOverflow(state, {
boundary: boundary,
rootBoundary: rootBoundary,
padding: padding,
altBoundary: altBoundary
});
var basePlacement = getBasePlacement(state.placement);
var variation = getVariation(state.placement);
var isBasePlacement = !variation;
var mainAxis = getMainAxisFromPlacement(basePlacement);
var altAxis = getAltAxis(mainAxis);
var popperOffsets = state.modifiersData.popperOffsets;
var referenceRect = state.rects.reference;
var popperRect = state.rects.popper;
var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign(Object.assign({}, state.rects), {}, {
placement: state.placement
})) : tetherOffset;
var data = {
x: 0,
y: 0
};
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (!popperOffsets) {
return;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
if (checkMainAxis) {
var mainSide = mainAxis === 'y' ? top : left;
var altSide = mainAxis === 'y' ? bottom : right;
var len = mainAxis === 'y' ? 'height' : 'width';
var offset = popperOffsets[mainAxis];
var min = popperOffsets[mainAxis] + overflow[mainSide];
var max = popperOffsets[mainAxis] - overflow[altSide];
var additive = tether ? -popperRect[len] / 2 : 0;
var minLen = variation === start ? referenceRect[len] : popperRect[len];
var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
// outside the reference bounds
var arrowElement = state.elements.arrow;
var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
width: 0,
height: 0
};
var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
var arrowPaddingMin = arrowPaddingObject[mainSide];
var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
// to include its full size in the calculation. If the reference is small
// and near the edge of a boundary, the popper can overflow even if the
// reference is not overflowing as well (e.g. virtual elements with no
// width or height)
var arrowLen = within(0, referenceRect[len], arrowRect[len]);
var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
var preventedOffset = within(tether ? Math.min(min, tetherMin) : min, offset, tether ? Math.max(max, tetherMax) : max);
popperOffsets[mainAxis] = preventedOffset;
data[mainAxis] = preventedOffset - offset;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
if (checkAltAxis) {
var _mainSide = mainAxis === 'x' ? top : left;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _altSide = mainAxis === 'x' ? bottom : right;
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _offset = popperOffsets[altAxis];
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _min = _offset + overflow[_mainSide];
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _max = _offset - overflow[_altSide];
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var _preventedOffset = within(_min, _offset, _max);
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
popperOffsets[altAxis] = _preventedOffset;
data[altAxis] = _preventedOffset - _offset;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
state.modifiersData[name] = data;
} // eslint-disable-next-line import/no-unused-modules
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var preventOverflow$1 = {
name: 'preventOverflow',
enabled: true,
phase: 'main',
fn: preventOverflow,
requiresIfExists: ['offset']
};
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getHTMLElementScroll(element) {
return {
scrollLeft: element.scrollLeft,
scrollTop: element.scrollTop
};
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
function getNodeScroll(node) {
if (node === getWindow(node) || !isHTMLElement(node)) {
return getWindowScroll(node);
} else {
return getHTMLElementScroll(node);
}
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
// Composite means it takes into account transforms as well as layout.
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
if (isFixed === void 0) {
isFixed = false;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var documentElement = getDocumentElement(offsetParent);
var rect = getBoundingClientRect(elementOrVirtualElement);
var isOffsetParentAnElement = isHTMLElement(offsetParent);
var scroll = {
scrollLeft: 0,
scrollTop: 0
};
var offsets = {
x: 0,
y: 0
};
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
isScrollParent(documentElement)) {
scroll = getNodeScroll(offsetParent);
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (isHTMLElement(offsetParent)) {
offsets = getBoundingClientRect(offsetParent);
offsets.x += offsetParent.clientLeft;
offsets.y += offsetParent.clientTop;
} else if (documentElement) {
offsets.x = getWindowScrollBarX(documentElement);
}
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return {
x: rect.left + scroll.scrollLeft - offsets.x,
y: rect.top + scroll.scrollTop - offsets.y,
width: rect.width,
height: rect.height
};
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function order(modifiers) {
var map = new Map();
var visited = new Set();
var result = [];
modifiers.forEach(function (modifier) {
map.set(modifier.name, modifier);
}); // On visiting object, check for its dependencies and visit them recursively
function sort(modifier) {
visited.add(modifier.name);
var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
requires.forEach(function (dep) {
if (!visited.has(dep)) {
var depModifier = map.get(dep);
if (depModifier) {
sort(depModifier);
}
}
});
result.push(modifier);
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
modifiers.forEach(function (modifier) {
if (!visited.has(modifier.name)) {
// check for visited object
sort(modifier);
}
});
return result;
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function orderModifiers(modifiers) {
// order based on dependencies
var orderedModifiers = order(modifiers); // order based on phase
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return modifierPhases.reduce(function (acc, phase) {
return acc.concat(orderedModifiers.filter(function (modifier) {
return modifier.phase === phase;
}));
}, []);
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function debounce(fn) {
var pending;
return function () {
if (!pending) {
pending = new Promise(function (resolve) {
Promise.resolve().then(function () {
pending = undefined;
resolve(fn());
});
});
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return pending;
};
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function mergeByName(modifiers) {
var merged = modifiers.reduce(function (merged, current) {
var existing = merged[current.name];
merged[current.name] = existing ? Object.assign(Object.assign(Object.assign({}, existing), current), {}, {
options: Object.assign(Object.assign({}, existing.options), current.options),
data: Object.assign(Object.assign({}, existing.data), current.data)
}) : current;
return merged;
}, {}); // IE11 does not support Object.values
return Object.keys(merged).map(function (key) {
return merged[key];
});
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var DEFAULT_OPTIONS = {
placement: 'bottom',
modifiers: [],
strategy: 'absolute'
};
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function areValidElements() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return !args.some(function (element) {
return !(element && typeof element.getBoundingClientRect === 'function');
});
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
function popperGenerator(generatorOptions) {
if (generatorOptions === void 0) {
generatorOptions = {};
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var _generatorOptions = generatorOptions,
_generatorOptions$def = _generatorOptions.defaultModifiers,
defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
_generatorOptions$def2 = _generatorOptions.defaultOptions,
defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
return function createPopper(reference, popper, options) {
if (options === void 0) {
options = defaultOptions;
}
var state = {
placement: 'bottom',
orderedModifiers: [],
options: Object.assign(Object.assign({}, DEFAULT_OPTIONS), defaultOptions),
modifiersData: {},
elements: {
reference: reference,
popper: popper
},
attributes: {},
styles: {}
2018-03-31 22:59:37 +02:00
};
2020-12-07 16:50:24 +01:00
var effectCleanupFns = [];
var isDestroyed = false;
var instance = {
state: state,
setOptions: function setOptions(options) {
cleanupModifierEffects();
state.options = Object.assign(Object.assign(Object.assign({}, defaultOptions), state.options), options);
state.scrollParents = {
reference: isElement$1(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
popper: listScrollParents(popper)
}; // Orders the modifiers based on their dependencies and `phase`
// properties
var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
state.orderedModifiers = orderedModifiers.filter(function (m) {
return m.enabled;
}); // Validate the provided modifiers so that the consumer will get warned
runModifierEffects();
return instance.update();
},
// Sync update it will always be executed, even if not necessary. This
// is useful for low frequency updates where sync behavior simplifies the
// logic.
// For high frequency updates (e.g. `resize` and `scroll` events), always
// prefer the async Popper#update method
forceUpdate: function forceUpdate() {
if (isDestroyed) {
return;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var _state$elements = state.elements,
reference = _state$elements.reference,
popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
// anymore
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
if (!areValidElements(reference, popper)) {
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return;
} // Store the reference and popper rects to be read by modifiers
state.rects = {
reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
popper: getLayoutRect(popper)
}; // Modifiers have the ability to reset the current update cycle. The
// most common use case for this is the `flip` modifier changing the
// placement, which then needs to re-run all the modifiers, because the
// logic was previously ran for the previous placement and is therefore
// stale/incorrect
state.reset = false;
state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
// is filled with the initial data specified by the modifier. This means
// it doesn't persist and is fresh on each update.
// To ensure persistent data, use `${name}#persistent`
state.orderedModifiers.forEach(function (modifier) {
return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
});
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
for (var index = 0; index < state.orderedModifiers.length; index++) {
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (state.reset === true) {
state.reset = false;
index = -1;
continue;
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var _state$orderedModifie = state.orderedModifiers[index],
fn = _state$orderedModifie.fn,
_state$orderedModifie2 = _state$orderedModifie.options,
_options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
name = _state$orderedModifie.name;
if (typeof fn === 'function') {
state = fn({
state: state,
options: _options,
name: name,
instance: instance
}) || state;
}
}
},
// Async and optimistically optimized update it will not be executed if
// not necessary (debounced to run at most once-per-tick)
update: debounce(function () {
return new Promise(function (resolve) {
instance.forceUpdate();
resolve(state);
});
}),
destroy: function destroy() {
cleanupModifierEffects();
isDestroyed = true;
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
};
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (!areValidElements(reference, popper)) {
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
return instance;
2017-09-06 06:05:12 +02:00
}
2020-12-07 16:50:24 +01:00
instance.setOptions(options).then(function (state) {
if (!isDestroyed && options.onFirstUpdate) {
options.onFirstUpdate(state);
}
}); // Modifiers have the ability to execute arbitrary code before the first
// update cycle runs. They will be executed in the same order as the update
// cycle. This is useful when a modifier adds some persistent data that
// other modifiers need to use, but the modifier is run after the dependent
// one.
function runModifierEffects() {
state.orderedModifiers.forEach(function (_ref3) {
var name = _ref3.name,
_ref3$options = _ref3.options,
options = _ref3$options === void 0 ? {} : _ref3$options,
effect = _ref3.effect;
if (typeof effect === 'function') {
var cleanupFn = effect({
state: state,
name: name,
instance: instance,
options: options
});
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
var noopFn = function noopFn() {};
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
effectCleanupFns.push(cleanupFn || noopFn);
}
});
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
function cleanupModifierEffects() {
effectCleanupFns.forEach(function (fn) {
return fn();
});
effectCleanupFns = [];
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return instance;
};
}
var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
var createPopper$1 = /*#__PURE__*/popperGenerator({
defaultModifiers: defaultModifiers
}); // eslint-disable-next-line import/no-unused-modules
var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
var createPopper$2 = /*#__PURE__*/popperGenerator({
defaultModifiers: defaultModifiers$1
}); // eslint-disable-next-line import/no-unused-modules
var Popper = /*#__PURE__*/Object.freeze({
__proto__: null,
popperGenerator: popperGenerator,
detectOverflow: detectOverflow,
createPopperBase: createPopper,
createPopper: createPopper$2,
createPopperLite: createPopper$1,
top: top,
bottom: bottom,
right: right,
left: left,
auto: auto,
basePlacements: basePlacements,
start: start,
end: end,
clippingParents: clippingParents,
viewport: viewport,
popper: popper,
reference: reference,
variationPlacements: variationPlacements,
placements: placements,
beforeRead: beforeRead,
read: read,
afterRead: afterRead,
beforeMain: beforeMain,
main: main,
afterMain: afterMain,
beforeWrite: beforeWrite,
write: write,
afterWrite: afterWrite,
modifierPhases: modifierPhases,
applyStyles: applyStyles$1,
arrow: arrow$1,
computeStyles: computeStyles$1,
eventListeners: eventListeners,
flip: flip$1,
hide: hide$1,
offset: offset$1,
popperOffsets: popperOffsets$1,
preventOverflow: preventOverflow$1
});
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME$4 = 'dropdown';
var DATA_KEY$4 = 'bs.dropdown';
var EVENT_KEY$4 = "." + DATA_KEY$4;
var DATA_API_KEY$4 = '.data-api';
2020-05-13 20:53:43 +02:00
var ESCAPE_KEY = 'Escape';
var SPACE_KEY = 'Space';
var TAB_KEY = 'Tab';
var ARROW_UP_KEY = 'ArrowUp';
var ARROW_DOWN_KEY = 'ArrowDown';
var RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEY + "|" + ARROW_DOWN_KEY + "|" + ESCAPE_KEY);
2020-03-28 11:29:08 +01:00
var EVENT_HIDE$1 = "hide" + EVENT_KEY$4;
var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4;
var EVENT_SHOW$1 = "show" + EVENT_KEY$4;
var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4;
var EVENT_CLICK = "click" + EVENT_KEY$4;
var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4;
var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
2020-06-16 20:50:01 +02:00
var CLASS_NAME_DISABLED = 'disabled';
var CLASS_NAME_SHOW$2 = 'show';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_DROPUP = 'dropup';
2020-12-03 14:08:31 +01:00
var CLASS_NAME_DROPEND = 'dropend';
var CLASS_NAME_DROPSTART = 'dropstart';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_NAVBAR = 'navbar';
2020-11-23 14:17:16 +01:00
var SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="dropdown"]';
2020-03-28 11:29:08 +01:00
var SELECTOR_FORM_CHILD = '.dropdown form';
var SELECTOR_MENU = '.dropdown-menu';
var SELECTOR_NAVBAR_NAV = '.navbar-nav';
var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
2020-12-03 14:08:31 +01:00
var PLACEMENT_TOP = isRTL ? 'top-end' : 'top-start';
var PLACEMENT_TOPEND = isRTL ? 'top-start' : 'top-end';
var PLACEMENT_BOTTOM = isRTL ? 'bottom-end' : 'bottom-start';
var PLACEMENT_BOTTOMEND = isRTL ? 'bottom-start' : 'bottom-end';
var PLACEMENT_RIGHT = isRTL ? 'left-start' : 'right-start';
var PLACEMENT_LEFT = isRTL ? 'right-start' : 'left-start';
2018-11-13 07:41:12 +01:00
var Default$2 = {
offset: [0, 2],
2018-11-13 07:41:12 +01:00
flip: true,
2020-12-07 16:50:24 +01:00
boundary: 'clippingParents',
2018-11-13 07:41:12 +01:00
reference: 'toggle',
2019-08-27 15:03:21 +02:00
display: 'dynamic',
popperConfig: null
2018-11-13 07:41:12 +01:00
};
var DefaultType$2 = {
offset: '(array|string|function)',
2018-11-13 07:41:12 +01:00
flip: 'boolean',
boundary: '(string|element)',
reference: '(string|element|object)',
2019-08-27 15:03:21 +02:00
display: 'string',
popperConfig: '(null|object|function)'
2018-11-13 07:41:12 +01:00
};
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2018-03-31 22:59:37 +02:00
2020-12-03 15:18:59 +01:00
var Dropdown = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Dropdown, _BaseComponent);
2018-11-13 07:41:12 +01:00
function Dropdown(element, config) {
2020-12-03 15:18:59 +01:00
var _this;
_this = _BaseComponent.call(this, element) || this;
_this._popper = null;
_this._config = _this._getConfig(config);
_this._menu = _this._getMenuElement();
_this._inNavbar = _this._detectNavbar();
2018-03-31 22:59:37 +02:00
2020-12-03 15:18:59 +01:00
_this._addEventListeners();
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this;
2018-11-13 07:41:12 +01:00
} // Getters
2018-03-31 22:59:37 +02:00
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Dropdown.prototype;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto.toggle = function toggle() {
2020-06-16 20:50:01 +02:00
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
var isActive = this._element.classList.contains(CLASS_NAME_SHOW$2);
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Dropdown.clearMenus();
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (isActive) {
return;
}
2018-03-31 22:59:37 +02:00
2019-08-27 15:03:21 +02:00
this.show();
};
_proto.show = function show() {
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW$2)) {
2019-08-27 15:03:21 +02:00
return;
}
var parent = Dropdown.getParentFromElement(this._element);
2018-11-13 07:41:12 +01:00
var relatedTarget = {
relatedTarget: this._element
};
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, relatedTarget);
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (showEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
2020-11-23 14:17:16 +01:00
} // Totally disable Popper for Dropdowns in Navbar
2017-09-30 23:28:03 +02:00
2017-09-06 06:05:12 +02:00
if (this._inNavbar) {
Manipulator.setDataAttribute(this._menu, 'popper', 'none');
} else {
2018-11-13 07:41:12 +01:00
if (typeof Popper === 'undefined') {
2020-11-23 14:17:16 +01:00
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var referenceElement = this._element;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this._config.reference === 'parent') {
referenceElement = parent;
2019-03-01 17:31:34 +01:00
} else if (isElement(this._config.reference)) {
2018-11-13 07:41:12 +01:00
referenceElement = this._config.reference; // Check if it's jQuery element
2017-10-30 00:19:14 +01:00
2018-11-13 07:41:12 +01:00
if (typeof this._config.reference.jquery !== 'undefined') {
referenceElement = this._config.reference[0];
2018-03-31 22:59:37 +02:00
}
} else if (typeof this._config.reference === 'object') {
referenceElement = this._config.reference;
2018-11-13 07:41:12 +01:00
}
2018-02-11 23:53:29 +01:00
var popperConfig = this._getPopperConfig();
var isDisplayStatic = popperConfig.modifiers.find(function (modifier) {
return modifier.name === 'applyStyles' && modifier.enabled === false;
});
this._popper = createPopper$2(referenceElement, this._menu, popperConfig);
if (isDisplayStatic) {
Manipulator.setDataAttribute(this._menu, 'popper', 'static');
}
2018-11-13 07:41:12 +01:00
} // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
2017-09-30 23:28:03 +02:00
2018-03-31 22:59:37 +02:00
2020-05-13 20:53:43 +02:00
if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
2020-03-28 11:29:08 +01:00
var _ref;
(_ref = []).concat.apply(_ref, document.body.children).forEach(function (elem) {
2019-03-01 17:31:34 +01:00
return EventHandler.on(elem, 'mouseover', null, noop());
});
2018-11-13 07:41:12 +01:00
}
2017-12-23 01:21:54 +01:00
2018-11-13 07:41:12 +01:00
this._element.focus();
2017-12-23 01:21:54 +01:00
2018-11-13 07:41:12 +01:00
this._element.setAttribute('aria-expanded', true);
2017-09-06 06:05:12 +02:00
this._menu.classList.toggle(CLASS_NAME_SHOW$2);
this._element.classList.toggle(CLASS_NAME_SHOW$2);
EventHandler.trigger(this._element, EVENT_SHOWN$1, relatedTarget);
2018-11-13 07:41:12 +01:00
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto.hide = function hide() {
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW$2)) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var relatedTarget = {
relatedTarget: this._element
};
var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$1, relatedTarget);
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if (hideEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
if (this._popper) {
this._popper.destroy();
}
this._menu.classList.toggle(CLASS_NAME_SHOW$2);
this._element.classList.toggle(CLASS_NAME_SHOW$2);
Manipulator.removeDataAttribute(this._menu, 'popper');
EventHandler.trigger(this._element, EVENT_HIDDEN$1, relatedTarget);
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.dispose = function dispose() {
2020-12-03 15:18:59 +01:00
_BaseComponent.prototype.dispose.call(this);
2019-03-01 17:31:34 +01:00
EventHandler.off(this._element, EVENT_KEY$4);
2018-11-13 07:41:12 +01:00
this._menu = null;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
if (this._popper) {
2018-11-13 07:41:12 +01:00
this._popper.destroy();
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._popper = null;
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.update = function update() {
this._inNavbar = this._detectNavbar();
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
if (this._popper) {
2020-12-07 16:50:24 +01:00
this._popper.update();
2018-11-13 07:41:12 +01:00
}
2019-01-04 17:29:45 +01:00
} // Private
;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
_proto._addEventListeners = function _addEventListeners() {
2020-12-03 15:18:59 +01:00
var _this2 = this;
2018-03-31 22:59:37 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_CLICK, function (event) {
2018-11-13 07:41:12 +01:00
event.preventDefault();
event.stopPropagation();
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this2.toggle();
2018-11-13 07:41:12 +01:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getConfig = function _getConfig(config) {
2020-09-14 17:12:06 +02:00
config = _extends({}, this.constructor.Default, Manipulator.getDataAttributes(this._element), config);
2019-03-01 17:31:34 +01:00
typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
// Popper virtual elements require a getBoundingClientRect method
throw new TypeError(NAME$4.toUpperCase() + ": Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.");
}
2018-11-13 07:41:12 +01:00
return config;
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._getMenuElement = function _getMenuElement() {
2020-03-28 11:29:08 +01:00
return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getPlacement = function _getPlacement() {
2019-03-01 17:31:34 +01:00
var parentDropdown = this._element.parentNode;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
return PLACEMENT_RIGHT;
2018-11-13 07:41:12 +01:00
}
2017-10-16 00:51:44 +02:00
2020-12-07 16:50:24 +01:00
if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
return PLACEMENT_LEFT;
} // We need to trim the value because custom properties can also include spaces
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
var isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
2018-02-19 23:50:56 +01:00
2020-12-07 16:50:24 +01:00
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
2018-11-13 07:41:12 +01:00
}
2018-03-31 22:59:37 +02:00
2020-12-07 16:50:24 +01:00
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
};
_proto._detectNavbar = function _detectNavbar() {
return this._element.closest("." + CLASS_NAME_NAVBAR) !== null;
};
_proto._getOffset = function _getOffset() {
var _this3 = this;
var offset = this._config.offset;
if (typeof offset === 'string') {
return offset.split(',').map(function (val) {
return Number.parseInt(val, 10);
});
}
if (typeof offset === 'function') {
return function (popperData) {
return offset(popperData, _this3._element);
};
}
return offset;
};
_proto._getPopperConfig = function _getPopperConfig() {
var defaultBsPopperConfig = {
2018-11-13 07:41:12 +01:00
placement: this._getPlacement(),
2020-12-07 16:50:24 +01:00
modifiers: [{
name: 'preventOverflow',
options: {
altBoundary: this._config.flip,
boundary: this._config.boundary
}
}, {
name: 'offset',
options: {
offset: this._getOffset()
2018-03-31 22:59:37 +02:00
}
2020-12-07 16:50:24 +01:00
}]
2020-11-23 14:17:16 +01:00
}; // Disable Popper if we have a static display
2018-02-19 23:50:56 +01:00
2018-11-13 07:41:12 +01:00
if (this._config.display === 'static') {
defaultBsPopperConfig.modifiers = [{
2020-12-07 16:50:24 +01:00
name: 'applyStyles',
2018-11-13 07:41:12 +01:00
enabled: false
2020-12-07 16:50:24 +01:00
}];
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
return _extends({}, defaultBsPopperConfig, typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig);
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Dropdown.dropdownInterface = function dropdownInterface(element, config) {
2019-03-01 17:31:34 +01:00
var data = Data.getData(element, DATA_KEY$4);
2018-07-12 06:42:55 +02:00
2019-03-01 17:31:34 +01:00
var _config = typeof config === 'object' ? config : null;
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (!data) {
data = new Dropdown(element, _config);
}
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
2019-03-11 16:13:30 +01:00
throw new TypeError("No method named \"" + config + "\"");
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
data[config]();
}
};
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
Dropdown.jQueryInterface = function jQueryInterface(config) {
2019-03-01 17:31:34 +01:00
return this.each(function () {
2019-08-27 15:03:21 +02:00
Dropdown.dropdownInterface(this, config);
2018-11-13 07:41:12 +01:00
});
};
2019-08-27 15:03:21 +02:00
Dropdown.clearMenus = function clearMenus(event) {
2020-05-13 20:53:43 +02:00
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$2);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
for (var i = 0, len = toggles.length; i < len; i++) {
2019-03-01 17:31:34 +01:00
var context = Data.getData(toggles[i], DATA_KEY$4);
2018-11-13 07:41:12 +01:00
var relatedTarget = {
relatedTarget: toggles[i]
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (event && event.type === 'click') {
relatedTarget.clickEvent = event;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!context) {
continue;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
var dropdownMenu = context._menu;
2017-09-30 23:28:03 +02:00
if (!toggles[i].classList.contains(CLASS_NAME_SHOW$2)) {
2018-11-13 07:41:12 +01:00
continue;
2017-09-06 06:05:12 +02:00
}
2020-05-13 20:53:43 +02:00
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.key === TAB_KEY) && dropdownMenu.contains(event.target)) {
2018-11-13 07:41:12 +01:00
continue;
}
2017-09-06 06:05:12 +02:00
var hideEvent = EventHandler.trigger(toggles[i], EVENT_HIDE$1, relatedTarget);
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
if (hideEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
continue;
} // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ('ontouchstart' in document.documentElement) {
2020-03-28 11:29:08 +01:00
var _ref2;
(_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
2019-03-01 17:31:34 +01:00
return EventHandler.off(elem, 'mouseover', null, noop());
});
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
toggles[i].setAttribute('aria-expanded', 'false');
2019-08-27 15:03:21 +02:00
if (context._popper) {
context._popper.destroy();
}
dropdownMenu.classList.remove(CLASS_NAME_SHOW$2);
toggles[i].classList.remove(CLASS_NAME_SHOW$2);
Manipulator.removeDataAttribute(dropdownMenu, 'popper');
EventHandler.trigger(toggles[i], EVENT_HIDDEN$1, relatedTarget);
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Dropdown.getParentFromElement = function getParentFromElement(element) {
return getElementFromSelector(element) || element.parentNode;
2019-03-01 17:31:34 +01:00
};
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
2018-11-13 07:41:12 +01:00
// If not input/textarea:
// - And not a key in REGEXP_KEYDOWN => not a dropdown command
// If input/textarea:
// - If space key => not a dropdown command
// - If key is other than escape
// - If key is not up or down => not a dropdown command
// - If trigger inside the menu => not a dropdown command
2020-05-13 20:53:43 +02:00
if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
event.preventDefault();
event.stopPropagation();
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-30 23:28:03 +02:00
2019-08-27 15:03:21 +02:00
var parent = Dropdown.getParentFromElement(this);
var isActive = this.classList.contains(CLASS_NAME_SHOW$2);
2018-11-13 07:41:12 +01:00
2020-05-13 20:53:43 +02:00
if (event.key === ESCAPE_KEY) {
2020-03-28 11:29:08 +01:00
var button = this.matches(SELECTOR_DATA_TOGGLE$2) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$2)[0];
button.focus();
Dropdown.clearMenus();
return;
}
2017-09-06 06:05:12 +02:00
if (!isActive && (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY)) {
var _button = this.matches(SELECTOR_DATA_TOGGLE$2) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$2)[0];
_button.click();
return;
}
2020-05-13 20:53:43 +02:00
if (!isActive || event.key === SPACE_KEY) {
2019-08-27 15:03:21 +02:00
Dropdown.clearMenus();
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (!items.length) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var index = items.indexOf(event.target); // Up
2017-09-06 06:05:12 +02:00
2020-05-13 20:53:43 +02:00
if (event.key === ARROW_UP_KEY && index > 0) {
2018-11-13 07:41:12 +01:00
index--;
2020-12-03 15:18:59 +01:00
} // Down
2017-09-06 06:05:12 +02:00
2020-05-13 20:53:43 +02:00
if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
2018-11-13 07:41:12 +01:00
index++;
2020-05-13 20:53:43 +02:00
} // index is -1 if the first keydown is an ArrowUp
2017-09-06 06:05:12 +02:00
2020-05-13 20:53:43 +02:00
index = index === -1 ? 0 : index;
2018-11-13 07:41:12 +01:00
items[index].focus();
2017-09-06 06:05:12 +02:00
};
2018-11-13 07:41:12 +01:00
_createClass(Dropdown, null, [{
key: "Default",
get: function get() {
return Default$2;
}
}, {
key: "DefaultType",
get: function get() {
return DefaultType$2;
}
2020-12-03 15:18:59 +01:00
}, {
key: "DATA_KEY",
get: function get() {
return DATA_KEY$4;
}
2018-11-13 07:41:12 +01:00
}]);
2017-09-06 06:05:12 +02:00
return Dropdown;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
2020-03-28 11:29:08 +01:00
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_CLICK_DATA_API$4, Dropdown.clearMenus);
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {
2018-11-13 07:41:12 +01:00
event.preventDefault();
event.stopPropagation();
2019-08-27 15:03:21 +02:00
Dropdown.dropdownInterface(this, 'toggle');
2019-03-01 17:31:34 +01:00
});
2020-03-28 11:29:08 +01:00
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {
2019-03-01 17:31:34 +01:00
return e.stopPropagation();
2018-11-13 07:41:12 +01:00
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Dropdown to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
defineJQueryPlugin(NAME$4, Dropdown);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME$5 = 'modal';
var DATA_KEY$5 = 'bs.modal';
var EVENT_KEY$5 = "." + DATA_KEY$5;
var DATA_API_KEY$5 = '.data-api';
2020-05-13 20:53:43 +02:00
var ESCAPE_KEY$1 = 'Escape';
2018-11-13 07:41:12 +01:00
var Default$3 = {
backdrop: true,
keyboard: true,
2020-12-03 15:18:59 +01:00
focus: true
2018-11-13 07:41:12 +01:00
};
var DefaultType$3 = {
backdrop: '(boolean|string)',
keyboard: 'boolean',
2020-12-03 15:18:59 +01:00
focus: 'boolean'
2018-11-13 07:41:12 +01:00
};
2020-03-28 11:29:08 +01:00
var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
var EVENT_RESIZE = "resize" + EVENT_KEY$5;
var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5;
var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5;
var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
var CLASS_NAME_BACKDROP = 'modal-backdrop';
var CLASS_NAME_OPEN = 'modal-open';
var CLASS_NAME_FADE$1 = 'fade';
var CLASS_NAME_SHOW$3 = 'show';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_STATIC = 'modal-static';
var SELECTOR_DIALOG = '.modal-dialog';
var SELECTOR_MODAL_BODY = '.modal-body';
2020-11-23 14:17:16 +01:00
var SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="modal"]';
var SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]';
2020-03-28 11:29:08 +01:00
var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
var SELECTOR_STICKY_CONTENT = '.sticky-top';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var Modal = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Modal, _BaseComponent);
2018-11-13 07:41:12 +01:00
function Modal(element, config) {
2020-12-03 15:18:59 +01:00
var _this;
_this = _BaseComponent.call(this, element) || this;
_this._config = _this._getConfig(config);
_this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, element);
_this._backdrop = null;
_this._isShown = false;
_this._isBodyOverflowing = false;
_this._ignoreBackdropClick = false;
_this._isTransitioning = false;
_this._scrollbarWidth = 0;
return _this;
2018-11-13 07:41:12 +01:00
} // Getters
var _proto = Modal.prototype;
// Public
_proto.toggle = function toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
2017-09-06 06:05:12 +02:00
};
2018-11-13 07:41:12 +01:00
_proto.show = function show(relatedTarget) {
2020-12-03 15:18:59 +01:00
var _this2 = this;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this._isShown || this._isTransitioning) {
return;
}
2017-09-06 06:05:12 +02:00
if (this._element.classList.contains(CLASS_NAME_FADE$1)) {
2018-11-13 07:41:12 +01:00
this._isTransitioning = true;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {
2018-11-13 07:41:12 +01:00
relatedTarget: relatedTarget
});
2018-03-31 22:59:37 +02:00
2019-03-01 17:31:34 +01:00
if (this._isShown || showEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
this._isShown = true;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
this._checkScrollbar();
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
this._setScrollbar();
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
this._adjustDialog();
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._setEscapeEvent();
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._setResizeEvent();
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
2020-12-03 15:18:59 +01:00
return _this2.hide(event);
2018-11-13 07:41:12 +01:00
});
2020-03-28 11:29:08 +01:00
EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, function () {
2020-12-03 15:18:59 +01:00
EventHandler.one(_this2._element, EVENT_MOUSEUP_DISMISS, function (event) {
if (event.target === _this2._element) {
_this2._ignoreBackdropClick = true;
2018-11-13 07:41:12 +01:00
}
});
});
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._showBackdrop(function () {
2020-12-03 15:18:59 +01:00
return _this2._showElement(relatedTarget);
2018-11-13 07:41:12 +01:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.hide = function hide(event) {
2020-12-03 15:18:59 +01:00
var _this3 = this;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (event) {
event.preventDefault();
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (!this._isShown || this._isTransitioning) {
return;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);
2017-09-06 06:05:12 +02:00
if (hideEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._isShown = false;
2019-03-01 17:31:34 +01:00
var transition = this._element.classList.contains(CLASS_NAME_FADE$1);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (transition) {
this._isTransitioning = true;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._setEscapeEvent();
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._setResizeEvent();
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.off(document, EVENT_FOCUSIN);
2019-03-01 17:31:34 +01:00
this._element.classList.remove(CLASS_NAME_SHOW$3);
2019-03-01 17:31:34 +01:00
2020-03-28 11:29:08 +01:00
EventHandler.off(this._element, EVENT_CLICK_DISMISS);
EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (transition) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement(this._element);
EventHandler.one(this._element, 'transitionend', function (event) {
2020-12-03 15:18:59 +01:00
return _this3._hideModal(event);
2019-03-01 17:31:34 +01:00
});
emulateTransitionEnd(this._element, transitionDuration);
2018-11-13 07:41:12 +01:00
} else {
this._hideModal();
}
};
2017-10-16 00:51:44 +02:00
2018-11-13 07:41:12 +01:00
_proto.dispose = function dispose() {
[window, this._element, this._dialog].forEach(function (htmlElement) {
2019-03-01 17:31:34 +01:00
return EventHandler.off(htmlElement, EVENT_KEY$5);
2018-11-13 07:41:12 +01:00
});
2020-12-03 15:18:59 +01:00
_BaseComponent.prototype.dispose.call(this);
2018-11-13 07:41:12 +01:00
/**
2020-03-28 11:29:08 +01:00
* `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
2018-11-13 07:41:12 +01:00
* Do not move `document` in `htmlElements` array
2020-03-28 11:29:08 +01:00
* It will remove `EVENT_CLICK_DATA_API` event that should remain
2018-11-13 07:41:12 +01:00
*/
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
2020-03-28 11:29:08 +01:00
EventHandler.off(document, EVENT_FOCUSIN);
2018-11-13 07:41:12 +01:00
this._config = null;
this._dialog = null;
this._backdrop = null;
this._isShown = null;
this._isBodyOverflowing = null;
this._ignoreBackdropClick = null;
this._isTransitioning = null;
this._scrollbarWidth = null;
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto.handleUpdate = function handleUpdate() {
this._adjustDialog();
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getConfig = function _getConfig(config) {
2020-09-14 17:12:06 +02:00
config = _extends({}, Default$3, config);
2019-03-01 17:31:34 +01:00
typeCheckConfig(NAME$5, config, DefaultType$3);
2018-11-13 07:41:12 +01:00
return config;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._showElement = function _showElement(relatedTarget) {
2020-12-03 15:18:59 +01:00
var _this4 = this;
2017-09-06 06:05:12 +02:00
var transition = this._element.classList.contains(CLASS_NAME_FADE$1);
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
2019-08-27 15:03:21 +02:00
2018-11-13 07:41:12 +01:00
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
// Don't move modal's DOM position
document.body.appendChild(this._element);
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._element.style.display = 'block';
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._element.removeAttribute('aria-hidden');
2017-09-06 06:05:12 +02:00
2018-12-16 00:13:22 +01:00
this._element.setAttribute('aria-modal', true);
2020-06-14 00:40:28 +02:00
this._element.setAttribute('role', 'dialog');
2020-05-13 20:53:43 +02:00
this._element.scrollTop = 0;
if (modalBody) {
2019-08-27 15:03:21 +02:00
modalBody.scrollTop = 0;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (transition) {
2019-03-01 17:31:34 +01:00
reflow(this._element);
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
this._element.classList.add(CLASS_NAME_SHOW$3);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (this._config.focus) {
this._enforceFocus();
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var transitionComplete = function transitionComplete() {
2020-12-03 15:18:59 +01:00
if (_this4._config.focus) {
_this4._element.focus();
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this4._isTransitioning = false;
EventHandler.trigger(_this4._element, EVENT_SHOWN$2, {
2019-03-01 17:31:34 +01:00
relatedTarget: relatedTarget
});
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (transition) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement(this._dialog);
EventHandler.one(this._dialog, 'transitionend', transitionComplete);
2019-03-01 17:31:34 +01:00
emulateTransitionEnd(this._dialog, transitionDuration);
2018-11-13 07:41:12 +01:00
} else {
transitionComplete();
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._enforceFocus = function _enforceFocus() {
2020-12-03 15:18:59 +01:00
var _this5 = this;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.off(document, EVENT_FOCUSIN); // guard against infinite focus loop
2019-03-01 17:31:34 +01:00
2020-03-28 11:29:08 +01:00
EventHandler.on(document, EVENT_FOCUSIN, function (event) {
2020-12-03 15:18:59 +01:00
if (document !== event.target && _this5._element !== event.target && !_this5._element.contains(event.target)) {
_this5._element.focus();
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
});
};
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
_proto._setEscapeEvent = function _setEscapeEvent() {
2020-12-03 15:18:59 +01:00
var _this6 = this;
2018-11-13 07:41:12 +01:00
2020-03-28 11:29:08 +01:00
if (this._isShown) {
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, function (event) {
2020-12-03 15:18:59 +01:00
if (_this6._config.keyboard && event.key === ESCAPE_KEY$1) {
2020-03-28 11:29:08 +01:00
event.preventDefault();
2020-12-03 15:18:59 +01:00
_this6.hide();
} else if (!_this6._config.keyboard && event.key === ESCAPE_KEY$1) {
_this6._triggerBackdropTransition();
2018-03-31 22:59:37 +02:00
}
});
} else {
2020-03-28 11:29:08 +01:00
EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS);
2018-11-13 07:41:12 +01:00
}
};
_proto._setResizeEvent = function _setResizeEvent() {
2020-12-03 15:18:59 +01:00
var _this7 = this;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this._isShown) {
2020-03-28 11:29:08 +01:00
EventHandler.on(window, EVENT_RESIZE, function () {
2020-12-03 15:18:59 +01:00
return _this7._adjustDialog();
2018-11-13 07:41:12 +01:00
});
} else {
2020-03-28 11:29:08 +01:00
EventHandler.off(window, EVENT_RESIZE);
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._hideModal = function _hideModal() {
2020-12-03 15:18:59 +01:00
var _this8 = this;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._element.style.display = 'none';
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._element.setAttribute('aria-hidden', true);
2017-09-06 06:05:12 +02:00
2018-12-16 00:13:22 +01:00
this._element.removeAttribute('aria-modal');
2020-06-14 00:40:28 +02:00
this._element.removeAttribute('role');
2018-11-13 07:41:12 +01:00
this._isTransitioning = false;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this._showBackdrop(function () {
2020-03-28 11:29:08 +01:00
document.body.classList.remove(CLASS_NAME_OPEN);
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this8._resetAdjustments();
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this8._resetScrollbar();
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
EventHandler.trigger(_this8._element, EVENT_HIDDEN$2);
2018-11-13 07:41:12 +01:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._removeBackdrop = function _removeBackdrop() {
this._backdrop.parentNode.removeChild(this._backdrop);
2019-03-01 17:31:34 +01:00
this._backdrop = null;
2018-11-13 07:41:12 +01:00
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._showBackdrop = function _showBackdrop(callback) {
2020-12-03 15:18:59 +01:00
var _this9 = this;
2017-09-30 23:28:03 +02:00
var animate = this._element.classList.contains(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (this._isShown && this._config.backdrop) {
this._backdrop = document.createElement('div');
2020-03-28 11:29:08 +01:00
this._backdrop.className = CLASS_NAME_BACKDROP;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (animate) {
this._backdrop.classList.add(animate);
2018-03-31 22:59:37 +02:00
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
document.body.appendChild(this._backdrop);
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_CLICK_DISMISS, function (event) {
2020-12-03 15:18:59 +01:00
if (_this9._ignoreBackdropClick) {
_this9._ignoreBackdropClick = false;
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (event.target !== event.currentTarget) {
return;
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if (_this9._config.backdrop === 'static') {
_this9._triggerBackdropTransition();
2020-11-23 14:17:16 +01:00
} else {
2020-12-03 15:18:59 +01:00
_this9.hide();
2020-11-23 14:17:16 +01:00
}
2018-11-13 07:41:12 +01:00
});
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (animate) {
2019-03-01 17:31:34 +01:00
reflow(this._backdrop);
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
this._backdrop.classList.add(CLASS_NAME_SHOW$3);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!animate) {
callback();
return;
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
var backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
EventHandler.one(this._backdrop, 'transitionend', callback);
2019-03-01 17:31:34 +01:00
emulateTransitionEnd(this._backdrop, backdropTransitionDuration);
2018-11-13 07:41:12 +01:00
} else if (!this._isShown && this._backdrop) {
this._backdrop.classList.remove(CLASS_NAME_SHOW$3);
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var callbackRemove = function callbackRemove() {
2020-12-03 15:18:59 +01:00
_this9._removeBackdrop();
2017-09-30 23:28:03 +02:00
callback();
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
if (this._element.classList.contains(CLASS_NAME_FADE$1)) {
2019-03-01 17:31:34 +01:00
var _backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
2017-09-06 06:05:12 +02:00
EventHandler.one(this._backdrop, 'transitionend', callbackRemove);
2019-03-01 17:31:34 +01:00
emulateTransitionEnd(this._backdrop, _backdropTransitionDuration);
2018-11-13 07:41:12 +01:00
} else {
callbackRemove();
}
} else {
2018-11-13 07:41:12 +01:00
callback();
}
2019-11-08 09:11:23 +01:00
};
_proto._triggerBackdropTransition = function _triggerBackdropTransition() {
2020-12-03 15:18:59 +01:00
var _this10 = this;
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
if (hideEvent.defaultPrevented) {
return;
}
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
2020-09-14 17:12:06 +02:00
2020-11-23 14:17:16 +01:00
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden';
}
2020-09-14 17:12:06 +02:00
2020-11-23 14:17:16 +01:00
this._element.classList.add(CLASS_NAME_STATIC);
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
var modalTransitionDuration = getTransitionDurationFromElement(this._dialog);
EventHandler.off(this._element, 'transitionend');
EventHandler.one(this._element, 'transitionend', function () {
2020-12-03 15:18:59 +01:00
_this10._element.classList.remove(CLASS_NAME_STATIC);
2020-09-14 17:12:06 +02:00
2020-11-23 14:17:16 +01:00
if (!isModalOverflowing) {
EventHandler.one(_this10._element, 'transitionend', function () {
2020-12-03 15:18:59 +01:00
_this10._element.style.overflowY = '';
2020-11-23 14:17:16 +01:00
});
2020-12-03 15:18:59 +01:00
emulateTransitionEnd(_this10._element, modalTransitionDuration);
2020-11-23 14:17:16 +01:00
}
});
emulateTransitionEnd(this._element, modalTransitionDuration);
2019-11-08 09:11:23 +01:00
2020-11-23 14:17:16 +01:00
this._element.focus();
2019-01-04 17:29:45 +01:00
} // ----------------------------------------------------------------------
2018-11-13 07:41:12 +01:00
// the following methods are used to handle overflowing modals
// ----------------------------------------------------------------------
2019-01-04 17:29:45 +01:00
;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._adjustDialog = function _adjustDialog() {
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
2018-03-31 22:59:37 +02:00
2020-12-03 14:08:31 +01:00
if (!this._isBodyOverflowing && isModalOverflowing && !isRTL || this._isBodyOverflowing && !isModalOverflowing && isRTL) {
2018-11-13 07:41:12 +01:00
this._element.style.paddingLeft = this._scrollbarWidth + "px";
}
2017-09-06 06:05:12 +02:00
2020-12-03 14:08:31 +01:00
if (this._isBodyOverflowing && !isModalOverflowing && !isRTL || !this._isBodyOverflowing && isModalOverflowing && isRTL) {
2018-11-13 07:41:12 +01:00
this._element.style.paddingRight = this._scrollbarWidth + "px";
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._resetAdjustments = function _resetAdjustments() {
this._element.style.paddingLeft = '';
this._element.style.paddingRight = '';
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._checkScrollbar = function _checkScrollbar() {
var rect = document.body.getBoundingClientRect();
2020-05-13 20:53:43 +02:00
this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
2018-11-13 07:41:12 +01:00
this._scrollbarWidth = this._getScrollbarWidth();
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._setScrollbar = function _setScrollbar() {
2020-12-03 15:18:59 +01:00
var _this11 = this;
2018-11-13 07:41:12 +01:00
if (this._isBodyOverflowing) {
this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', function (calculatedValue) {
return calculatedValue + _this11._scrollbarWidth;
});
this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', function (calculatedValue) {
return calculatedValue - _this11._scrollbarWidth;
});
this._setElementAttributes('body', 'paddingRight', function (calculatedValue) {
return calculatedValue + _this11._scrollbarWidth;
});
2018-11-13 07:41:12 +01:00
}
2018-11-24 17:22:59 +01:00
2020-03-28 11:29:08 +01:00
document.body.classList.add(CLASS_NAME_OPEN);
2018-11-13 07:41:12 +01:00
};
2017-09-30 23:28:03 +02:00
_proto._setElementAttributes = function _setElementAttributes(selector, styleProp, callback) {
SelectorEngine.find(selector).forEach(function (element) {
var actualValue = element.style[styleProp];
var calculatedValue = window.getComputedStyle(element)[styleProp];
Manipulator.setDataAttribute(element, styleProp, actualValue);
element.style[styleProp] = callback(Number.parseFloat(calculatedValue)) + 'px';
});
};
2017-09-06 06:05:12 +02:00
_proto._resetScrollbar = function _resetScrollbar() {
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
2019-03-01 17:31:34 +01:00
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
2017-09-06 06:05:12 +02:00
this._resetElementAttributes('body', 'paddingRight');
};
2017-09-06 06:05:12 +02:00
_proto._resetElementAttributes = function _resetElementAttributes(selector, styleProp) {
SelectorEngine.find(selector).forEach(function (element) {
var value = Manipulator.getDataAttribute(element, styleProp);
2019-03-01 17:31:34 +01:00
if (typeof value === 'undefined' && element === document.body) {
element.style[styleProp] = '';
} else {
Manipulator.removeDataAttribute(element, styleProp);
element.style[styleProp] = value;
}
});
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getScrollbarWidth = function _getScrollbarWidth() {
// thx d.walsh
var scrollDiv = document.createElement('div');
2020-03-28 11:29:08 +01:00
scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
2018-11-13 07:41:12 +01:00
document.body.appendChild(scrollDiv);
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
return scrollbarWidth;
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Modal.jQueryInterface = function jQueryInterface(config, relatedTarget) {
2018-11-13 07:41:12 +01:00
return this.each(function () {
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY$5);
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
var _config = _extends({}, Default$3, Manipulator.getDataAttributes(this), typeof config === 'object' && config ? config : {});
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!data) {
data = new Modal(this, _config);
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\"");
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
data[config](relatedTarget);
}
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass(Modal, null, [{
2020-12-03 15:18:59 +01:00
key: "Default",
2018-11-13 07:41:12 +01:00
get: function get() {
2020-12-03 15:18:59 +01:00
return Default$3;
2018-11-13 07:41:12 +01:00
}
}, {
2020-12-03 15:18:59 +01:00
key: "DATA_KEY",
2018-11-13 07:41:12 +01:00
get: function get() {
2020-12-03 15:18:59 +01:00
return DATA_KEY$5;
2018-11-13 07:41:12 +01:00
}
}]);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return Modal;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) {
2020-12-03 15:18:59 +01:00
var _this12 = this;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
var target = getElementFromSelector(this);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault();
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.one(target, EVENT_SHOW$2, function (showEvent) {
2019-03-01 17:31:34 +01:00
if (showEvent.defaultPrevented) {
// only register focus restorer if modal will actually get shown
2018-11-13 07:41:12 +01:00
return;
2017-09-06 06:05:12 +02:00
}
2020-03-28 11:29:08 +01:00
EventHandler.one(target, EVENT_HIDDEN$2, function () {
2020-12-03 15:18:59 +01:00
if (isVisible(_this12)) {
_this12.focus();
2017-09-06 06:05:12 +02:00
}
2018-03-31 22:59:37 +02:00
});
});
2019-03-01 17:31:34 +01:00
var data = Data.getData(target, DATA_KEY$5);
if (!data) {
2020-09-14 17:12:06 +02:00
var config = _extends({}, Manipulator.getDataAttributes(target), Manipulator.getDataAttributes(this));
2019-03-01 17:31:34 +01:00
data = new Modal(target, config);
}
2017-09-30 23:28:03 +02:00
data.toggle(this);
2018-11-13 07:41:12 +01:00
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Modal to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
2017-09-06 06:05:12 +02:00
defineJQueryPlugin(NAME$5, Modal);
2017-09-06 06:05:12 +02:00
2019-02-13 17:01:40 +01:00
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta2): util/sanitizer.js
2020-06-16 20:50:01 +02:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2019-02-13 17:01:40 +01:00
* --------------------------------------------------------------------------
*/
2020-11-23 14:17:16 +01:00
var uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
2019-02-13 17:01:40 +01:00
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
2019-03-01 17:31:34 +01:00
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
2020-03-28 11:29:08 +01:00
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;
2019-03-01 17:31:34 +01:00
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
2020-03-28 11:29:08 +01:00
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
2019-03-01 17:31:34 +01:00
var allowedAttribute = function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase();
2020-11-23 14:17:16 +01:00
if (allowedAttributeList.includes(attrName)) {
if (uriAttrs.has(attrName)) {
return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
2019-03-01 17:31:34 +01:00
}
return true;
}
var regExp = allowedAttributeList.filter(function (attrRegex) {
return attrRegex instanceof RegExp;
}); // Check if a regular expression validates the attribute.
2020-03-28 11:29:08 +01:00
for (var i = 0, len = regExp.length; i < len; i++) {
if (regExp[i].test(attrName)) {
2019-03-01 17:31:34 +01:00
return true;
}
}
return false;
};
2020-09-14 17:12:06 +02:00
var DefaultAllowlist = {
2019-02-13 17:01:40 +01:00
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
2020-03-28 11:29:08 +01:00
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
2019-02-13 17:01:40 +01:00
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
};
2020-09-14 17:12:06 +02:00
function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
2020-03-28 11:29:08 +01:00
var _ref;
2019-03-01 17:31:34 +01:00
if (!unsafeHtml.length) {
2019-02-13 17:01:40 +01:00
return unsafeHtml;
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml);
}
var domParser = new window.DOMParser();
var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
2020-09-14 17:12:06 +02:00
var allowlistKeys = Object.keys(allowList);
2020-03-28 11:29:08 +01:00
var elements = (_ref = []).concat.apply(_ref, createdDocument.body.querySelectorAll('*'));
2019-02-13 17:01:40 +01:00
var _loop = function _loop(i, len) {
2020-03-28 11:29:08 +01:00
var _ref2;
2019-02-13 17:01:40 +01:00
var el = elements[i];
var elName = el.nodeName.toLowerCase();
2020-11-23 14:17:16 +01:00
if (!allowlistKeys.includes(elName)) {
2019-02-13 17:01:40 +01:00
el.parentNode.removeChild(el);
return "continue";
}
2020-03-28 11:29:08 +01:00
var attributeList = (_ref2 = []).concat.apply(_ref2, el.attributes);
2020-09-14 17:12:06 +02:00
var allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);
2019-02-13 17:01:40 +01:00
attributeList.forEach(function (attr) {
2020-09-14 17:12:06 +02:00
if (!allowedAttribute(attr, allowedAttributes)) {
2019-02-13 17:01:40 +01:00
el.removeAttribute(attr.nodeName);
}
});
};
for (var i = 0, len = elements.length; i < len; i++) {
var _ret = _loop(i);
2019-02-13 17:01:40 +01:00
if (_ret === "continue") continue;
}
return createdDocument.body.innerHTML;
}
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME$6 = 'tooltip';
var DATA_KEY$6 = 'bs.tooltip';
var EVENT_KEY$6 = "." + DATA_KEY$6;
var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
2020-11-23 14:17:16 +01:00
var DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
2018-11-13 07:41:12 +01:00
var DefaultType$4 = {
animation: 'boolean',
template: 'string',
title: '(string|element|function)',
trigger: 'string',
delay: '(number|object)',
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(array|string|function)',
2018-11-13 07:41:12 +01:00
container: '(string|element|boolean)',
fallbackPlacements: 'array',
2019-02-13 17:01:40 +01:00
boundary: '(string|element)',
2020-12-03 15:18:59 +01:00
customClass: '(string|function)',
2019-02-13 17:01:40 +01:00
sanitize: 'boolean',
sanitizeFn: '(null|function)',
2020-09-14 17:12:06 +02:00
allowList: 'object',
popperConfig: '(null|object|function)'
2018-11-13 07:41:12 +01:00
};
2020-03-28 11:29:08 +01:00
var AttachmentMap = {
2018-11-13 07:41:12 +01:00
AUTO: 'auto',
TOP: 'top',
2020-12-03 14:08:31 +01:00
RIGHT: isRTL ? 'left' : 'right',
2018-11-13 07:41:12 +01:00
BOTTOM: 'bottom',
2020-12-03 14:08:31 +01:00
LEFT: isRTL ? 'right' : 'left'
2018-11-13 07:41:12 +01:00
};
var Default$4 = {
animation: true,
2020-12-03 15:18:59 +01:00
template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
2018-11-13 07:41:12 +01:00
trigger: 'hover focus',
title: '',
delay: 0,
html: false,
selector: false,
placement: 'top',
offset: [0, 0],
2018-11-13 07:41:12 +01:00
container: false,
fallbackPlacements: ['top', 'right', 'bottom', 'left'],
2020-12-07 16:50:24 +01:00
boundary: 'clippingParents',
2020-12-03 15:18:59 +01:00
customClass: '',
2019-02-13 17:01:40 +01:00
sanitize: true,
sanitizeFn: null,
2020-09-14 17:12:06 +02:00
allowList: DefaultAllowlist,
2019-08-27 15:03:21 +02:00
popperConfig: null
2018-11-13 07:41:12 +01:00
};
2020-03-28 11:29:08 +01:00
var Event$1 = {
2018-11-13 07:41:12 +01:00
HIDE: "hide" + EVENT_KEY$6,
HIDDEN: "hidden" + EVENT_KEY$6,
SHOW: "show" + EVENT_KEY$6,
SHOWN: "shown" + EVENT_KEY$6,
INSERTED: "inserted" + EVENT_KEY$6,
CLICK: "click" + EVENT_KEY$6,
FOCUSIN: "focusin" + EVENT_KEY$6,
FOCUSOUT: "focusout" + EVENT_KEY$6,
MOUSEENTER: "mouseenter" + EVENT_KEY$6,
MOUSELEAVE: "mouseleave" + EVENT_KEY$6
};
var CLASS_NAME_FADE$2 = 'fade';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_MODAL = 'modal';
var CLASS_NAME_SHOW$4 = 'show';
2020-03-28 11:29:08 +01:00
var HOVER_STATE_SHOW = 'show';
var HOVER_STATE_OUT = 'out';
var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
var TRIGGER_HOVER = 'hover';
var TRIGGER_FOCUS = 'focus';
var TRIGGER_CLICK = 'click';
var TRIGGER_MANUAL = 'manual';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
var Tooltip = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Tooltip, _BaseComponent);
2018-11-13 07:41:12 +01:00
function Tooltip(element, config) {
2020-12-03 15:18:59 +01:00
var _this;
2018-11-13 07:41:12 +01:00
if (typeof Popper === 'undefined') {
2020-11-23 14:17:16 +01:00
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
2020-12-03 15:18:59 +01:00
}
2017-10-30 00:19:14 +01:00
2020-12-03 15:18:59 +01:00
_this = _BaseComponent.call(this, element) || this; // private
2017-10-30 00:19:14 +01:00
2020-12-03 15:18:59 +01:00
_this._isEnabled = true;
_this._timeout = 0;
_this._hoverState = '';
_this._activeTrigger = {};
_this._popper = null; // Protected
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this.config = _this._getConfig(config);
_this.tip = null;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this._setListeners();
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this;
2018-11-13 07:41:12 +01:00
} // Getters
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Tooltip.prototype;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto.enable = function enable() {
this._isEnabled = true;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.disable = function disable() {
this._isEnabled = false;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.toggleEnabled = function toggleEnabled() {
this._isEnabled = !this._isEnabled;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.toggle = function toggle(event) {
if (!this._isEnabled) {
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (event) {
var context = this._initializeOnDelegatedTarget(event);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
context._activeTrigger.click = !context._activeTrigger.click;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if (context._isWithActiveTrigger()) {
context._enter(null, context);
2017-09-06 06:05:12 +02:00
} else {
2018-11-13 07:41:12 +01:00
context._leave(null, context);
}
} else {
if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$4)) {
2018-11-13 07:41:12 +01:00
this._leave(null, this);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return;
2018-03-31 22:59:37 +02:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._enter(null, this);
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.dispose = function dispose() {
clearTimeout(this._timeout);
2020-12-03 15:18:59 +01:00
EventHandler.off(this._element, this.constructor.EVENT_KEY);
EventHandler.off(this._element.closest("." + CLASS_NAME_MODAL), 'hide.bs.modal', this._hideModalHandler);
2017-09-06 06:05:12 +02:00
if (this.tip && this.tip.parentNode) {
2019-03-01 17:31:34 +01:00
this.tip.parentNode.removeChild(this.tip);
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this._isEnabled = null;
this._timeout = null;
this._hoverState = null;
this._activeTrigger = null;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
if (this._popper) {
2018-11-13 07:41:12 +01:00
this._popper.destroy();
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._popper = null;
this.config = null;
this.tip = null;
2020-12-03 15:18:59 +01:00
_BaseComponent.prototype.dispose.call(this);
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.show = function show() {
2020-12-03 15:18:59 +01:00
var _this2 = this;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if (this._element.style.display === 'none') {
2018-11-13 07:41:12 +01:00
throw new Error('Please use show on visible elements');
}
2017-09-30 23:28:03 +02:00
if (!(this.isWithContent() && this._isEnabled)) {
return;
}
2017-09-06 06:05:12 +02:00
var showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);
var shadowRoot = findShadowRoot(this._element);
var isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
2017-09-06 06:05:12 +02:00
if (showEvent.defaultPrevented || !isInTheDom) {
return;
}
2020-12-03 15:18:59 +01:00
var tip = this.getTipElement();
var tipId = getUID(this.constructor.NAME);
tip.setAttribute('id', tipId);
2020-12-03 15:18:59 +01:00
this._element.setAttribute('aria-describedby', tipId);
2017-09-06 06:05:12 +02:00
this.setContent();
2017-09-06 06:05:12 +02:00
if (this.config.animation) {
tip.classList.add(CLASS_NAME_FADE$2);
}
2017-09-06 06:05:12 +02:00
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this._element) : this.config.placement;
2017-09-06 06:05:12 +02:00
var attachment = this._getAttachment(placement);
2018-12-16 00:13:22 +01:00
this._addAttachmentClass(attachment);
2018-12-16 00:13:22 +01:00
var container = this._getContainer();
2017-09-06 06:05:12 +02:00
Data.setData(tip, this.constructor.DATA_KEY, this);
2018-11-13 07:41:12 +01:00
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
container.appendChild(tip);
}
2020-12-03 15:18:59 +01:00
EventHandler.trigger(this._element, this.constructor.Event.INSERTED);
this._popper = createPopper$2(this._element, tip, this._getPopperConfig(attachment));
tip.classList.add(CLASS_NAME_SHOW$4);
var customClass = typeof this.config.customClass === 'function' ? this.config.customClass() : this.config.customClass;
2020-12-03 15:18:59 +01:00
if (customClass) {
var _tip$classList;
2017-09-30 23:28:03 +02:00
(_tip$classList = tip.classList).add.apply(_tip$classList, customClass.split(' '));
} // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
2020-12-03 15:18:59 +01:00
2020-03-28 11:29:08 +01:00
if ('ontouchstart' in document.documentElement) {
var _ref;
2017-09-06 06:05:12 +02:00
(_ref = []).concat.apply(_ref, document.body.children).forEach(function (element) {
EventHandler.on(element, 'mouseover', noop());
});
}
2017-09-06 06:05:12 +02:00
var complete = function complete() {
var prevHoverState = _this2._hoverState;
_this2._hoverState = null;
EventHandler.trigger(_this2._element, _this2.constructor.Event.SHOWN);
2018-11-13 07:41:12 +01:00
if (prevHoverState === HOVER_STATE_OUT) {
_this2._leave(null, _this2);
2017-09-06 06:05:12 +02:00
}
};
if (this.tip.classList.contains(CLASS_NAME_FADE$2)) {
var transitionDuration = getTransitionDurationFromElement(this.tip);
EventHandler.one(this.tip, 'transitionend', complete);
emulateTransitionEnd(this.tip, transitionDuration);
} else {
complete();
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
_proto.hide = function hide() {
2020-12-03 15:18:59 +01:00
var _this3 = this;
2017-09-06 06:05:12 +02:00
2020-09-29 17:33:00 +02:00
if (!this._popper) {
return;
}
2018-11-13 07:41:12 +01:00
var tip = this.getTipElement();
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete() {
2020-12-03 15:18:59 +01:00
if (_this3._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
2018-11-13 07:41:12 +01:00
tip.parentNode.removeChild(tip);
}
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this3._cleanTipClass();
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
_this3._element.removeAttribute('aria-describedby');
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
EventHandler.trigger(_this3._element, _this3.constructor.Event.HIDDEN);
2017-09-30 23:28:03 +02:00
2020-12-07 16:50:24 +01:00
if (_this3._popper) {
_this3._popper.destroy();
_this3._popper = null;
}
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (hideEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
tip.classList.remove(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra
2018-11-13 07:41:12 +01:00
// empty mouseover listeners we added for iOS support
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if ('ontouchstart' in document.documentElement) {
2020-03-28 11:29:08 +01:00
var _ref2;
(_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (element) {
2019-03-01 17:31:34 +01:00
return EventHandler.off(element, 'mouseover', noop);
});
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this._activeTrigger[TRIGGER_CLICK] = false;
this._activeTrigger[TRIGGER_FOCUS] = false;
this._activeTrigger[TRIGGER_HOVER] = false;
2017-09-06 06:05:12 +02:00
if (this.tip.classList.contains(CLASS_NAME_FADE$2)) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement(tip);
EventHandler.one(tip, 'transitionend', complete);
2019-03-01 17:31:34 +01:00
emulateTransitionEnd(tip, transitionDuration);
2018-11-13 07:41:12 +01:00
} else {
complete();
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
this._hoverState = '';
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.update = function update() {
if (this._popper !== null) {
2020-12-07 16:50:24 +01:00
this._popper.update();
2018-11-13 07:41:12 +01:00
}
2019-01-04 17:29:45 +01:00
} // Protected
;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.isWithContent = function isWithContent() {
return Boolean(this.getTitle());
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.getTipElement = function getTipElement() {
2019-03-01 17:31:34 +01:00
if (this.tip) {
return this.tip;
}
var element = document.createElement('div');
element.innerHTML = this.config.template;
this.tip = element.children[0];
2018-11-13 07:41:12 +01:00
return this.tip;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.setContent = function setContent() {
var tip = this.getTipElement();
2020-03-28 11:29:08 +01:00
this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());
tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$4);
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
_proto.setElementContent = function setElementContent(element, content) {
if (element === null) {
return;
}
if (typeof content === 'object' && isElement(content)) {
2019-03-01 17:31:34 +01:00
if (content.jquery) {
content = content[0];
} // content is a DOM node or a jQuery
2019-02-13 17:01:40 +01:00
if (this.config.html) {
2019-03-01 17:31:34 +01:00
if (content.parentNode !== element) {
element.innerHTML = '';
element.appendChild(content);
2017-09-06 06:05:12 +02:00
}
} else {
2020-05-13 20:53:43 +02:00
element.textContent = content.textContent;
2017-09-06 06:05:12 +02:00
}
2019-02-13 17:01:40 +01:00
return;
}
if (this.config.html) {
if (this.config.sanitize) {
2020-09-14 17:12:06 +02:00
content = sanitizeHtml(content, this.config.allowList, this.config.sanitizeFn);
2019-02-13 17:01:40 +01:00
}
2019-03-01 17:31:34 +01:00
element.innerHTML = content;
2018-11-13 07:41:12 +01:00
} else {
2020-05-13 20:53:43 +02:00
element.textContent = content;
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto.getTitle = function getTitle() {
2020-12-03 15:18:59 +01:00
var title = this._element.getAttribute('data-bs-original-title');
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!title) {
2020-12-03 15:18:59 +01:00
title = typeof this.config.title === 'function' ? this.config.title.call(this._element) : this.config.title;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return title;
2020-12-03 14:08:31 +01:00
};
_proto.updateAttachment = function updateAttachment(attachment) {
if (attachment === 'right') {
return 'end';
}
if (attachment === 'left') {
return 'start';
}
return attachment;
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-06 06:05:12 +02:00
_proto._initializeOnDelegatedTarget = function _initializeOnDelegatedTarget(event, context) {
var dataKey = this.constructor.DATA_KEY;
context = context || Data.getData(event.delegateTarget, dataKey);
if (!context) {
context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
Data.setData(event.delegateTarget, dataKey, context);
}
return context;
};
_proto._getOffset = function _getOffset() {
2020-12-03 15:18:59 +01:00
var _this4 = this;
2019-08-27 15:03:21 +02:00
var offset = this.config.offset;
if (typeof offset === 'string') {
return offset.split(',').map(function (val) {
return Number.parseInt(val, 10);
});
}
2020-12-07 16:50:24 +01:00
if (typeof offset === 'function') {
return function (popperData) {
return offset(popperData, _this4._element);
};
2020-12-07 16:50:24 +01:00
}
return offset;
};
_proto._getPopperConfig = function _getPopperConfig(attachment) {
var _this5 = this;
var defaultBsPopperConfig = {
2019-08-27 15:03:21 +02:00
placement: attachment,
modifiers: [{
name: 'flip',
options: {
altBoundary: true,
fallbackPlacements: this.config.fallbackPlacements
}
}, {
name: 'offset',
options: {
offset: this._getOffset()
}
}, {
2020-12-07 16:50:24 +01:00
name: 'preventOverflow',
options: {
boundary: this.config.boundary
2020-12-07 16:50:24 +01:00
}
}, {
name: 'arrow',
options: {
2019-08-27 15:03:21 +02:00
element: "." + this.constructor.NAME + "-arrow"
}
2020-12-07 16:50:24 +01:00
}, {
name: 'onChange',
enabled: true,
phase: 'afterWrite',
fn: function fn(data) {
return _this5._handlePopperPlacementChange(data);
2020-12-07 16:50:24 +01:00
}
}],
onFirstUpdate: function onFirstUpdate(data) {
if (data.options.placement !== data.placement) {
_this5._handlePopperPlacementChange(data);
2019-08-27 15:03:21 +02:00
}
}
};
return _extends({}, defaultBsPopperConfig, typeof this.config.popperConfig === 'function' ? this.config.popperConfig(defaultBsPopperConfig) : this.config.popperConfig);
2019-08-27 15:03:21 +02:00
};
_proto._addAttachmentClass = function _addAttachmentClass(attachment) {
2020-12-03 14:08:31 +01:00
this.getTipElement().classList.add(CLASS_PREFIX + "-" + this.updateAttachment(attachment));
};
2018-12-16 00:13:22 +01:00
_proto._getContainer = function _getContainer() {
if (this.config.container === false) {
return document.body;
}
2019-03-01 17:31:34 +01:00
if (isElement(this.config.container)) {
return this.config.container;
2018-12-16 00:13:22 +01:00
}
2019-03-01 17:31:34 +01:00
return SelectorEngine.findOne(this.config.container);
2018-12-16 00:13:22 +01:00
};
2018-11-13 07:41:12 +01:00
_proto._getAttachment = function _getAttachment(placement) {
2020-03-28 11:29:08 +01:00
return AttachmentMap[placement.toUpperCase()];
2018-11-13 07:41:12 +01:00
};
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
_proto._setListeners = function _setListeners() {
var _this6 = this;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) {
if (trigger === 'click') {
EventHandler.on(_this6._element, _this6.constructor.Event.CLICK, _this6.config.selector, function (event) {
return _this6.toggle(event);
2017-09-06 06:05:12 +02:00
});
2020-03-28 11:29:08 +01:00
} else if (trigger !== TRIGGER_MANUAL) {
var eventIn = trigger === TRIGGER_HOVER ? _this6.constructor.Event.MOUSEENTER : _this6.constructor.Event.FOCUSIN;
var eventOut = trigger === TRIGGER_HOVER ? _this6.constructor.Event.MOUSELEAVE : _this6.constructor.Event.FOCUSOUT;
EventHandler.on(_this6._element, eventIn, _this6.config.selector, function (event) {
return _this6._enter(event);
2019-03-01 17:31:34 +01:00
});
EventHandler.on(_this6._element, eventOut, _this6.config.selector, function (event) {
return _this6._leave(event);
2017-09-06 06:05:12 +02:00
});
}
2018-11-13 07:41:12 +01:00
});
2019-07-12 23:56:26 +02:00
this._hideModalHandler = function () {
if (_this6._element) {
_this6.hide();
2018-11-13 07:41:12 +01:00
}
2019-07-12 23:56:26 +02:00
};
2020-12-03 15:18:59 +01:00
EventHandler.on(this._element.closest("." + CLASS_NAME_MODAL), 'hide.bs.modal', this._hideModalHandler);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this.config.selector) {
2020-09-14 17:12:06 +02:00
this.config = _extends({}, this.config, {
2018-11-13 07:41:12 +01:00
trigger: 'manual',
selector: ''
});
} else {
this._fixTitle();
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._fixTitle = function _fixTitle() {
2020-12-03 15:18:59 +01:00
var title = this._element.getAttribute('title');
var originalTitleType = typeof this._element.getAttribute('data-bs-original-title');
2017-09-30 23:28:03 +02:00
2020-11-23 14:17:16 +01:00
if (title || originalTitleType !== 'string') {
2020-12-03 15:18:59 +01:00
this._element.setAttribute('data-bs-original-title', title || '');
if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
this._element.setAttribute('aria-label', title);
}
this._element.setAttribute('title', '');
2018-11-13 07:41:12 +01:00
}
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._enter = function _enter(event, context) {
context = this._initializeOnDelegatedTarget(event, context);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (event) {
2020-03-28 11:29:08 +01:00
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {
2020-03-28 11:29:08 +01:00
context._hoverState = HOVER_STATE_SHOW;
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
clearTimeout(context._timeout);
2020-03-28 11:29:08 +01:00
context._hoverState = HOVER_STATE_SHOW;
2018-11-13 07:41:12 +01:00
if (!context.config.delay || !context.config.delay.show) {
context.show();
return;
}
context._timeout = setTimeout(function () {
2020-03-28 11:29:08 +01:00
if (context._hoverState === HOVER_STATE_SHOW) {
2017-09-06 06:05:12 +02:00
context.show();
}
2018-11-13 07:41:12 +01:00
}, context.config.delay.show);
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._leave = function _leave(event, context) {
context = this._initializeOnDelegatedTarget(event, context);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (event) {
2020-03-28 11:29:08 +01:00
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (context._isWithActiveTrigger()) {
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
clearTimeout(context._timeout);
2020-03-28 11:29:08 +01:00
context._hoverState = HOVER_STATE_OUT;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!context.config.delay || !context.config.delay.hide) {
context.hide();
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
context._timeout = setTimeout(function () {
2020-03-28 11:29:08 +01:00
if (context._hoverState === HOVER_STATE_OUT) {
2017-09-06 06:05:12 +02:00
context.hide();
}
2018-11-13 07:41:12 +01:00
}, context.config.delay.hide);
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._isWithActiveTrigger = function _isWithActiveTrigger() {
for (var trigger in this._activeTrigger) {
if (this._activeTrigger[trigger]) {
return true;
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return false;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getConfig = function _getConfig(config) {
2020-12-03 15:18:59 +01:00
var dataAttributes = Manipulator.getDataAttributes(this._element);
2019-02-13 17:01:40 +01:00
Object.keys(dataAttributes).forEach(function (dataAttr) {
2020-11-23 14:17:16 +01:00
if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
2019-02-13 17:01:40 +01:00
delete dataAttributes[dataAttr];
}
});
2019-03-01 17:31:34 +01:00
if (config && typeof config.container === 'object' && config.container.jquery) {
config.container = config.container[0];
}
2020-09-14 17:12:06 +02:00
config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (typeof config.delay === 'number') {
config.delay = {
show: config.delay,
hide: config.delay
};
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (typeof config.title === 'number') {
config.title = config.title.toString();
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (typeof config.content === 'number') {
config.content = config.content.toString();
}
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
2019-02-13 17:01:40 +01:00
if (config.sanitize) {
2020-09-14 17:12:06 +02:00
config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
2019-02-13 17:01:40 +01:00
}
2018-11-13 07:41:12 +01:00
return config;
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getDelegateConfig = function _getDelegateConfig() {
var config = {};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (this.config) {
for (var key in this.config) {
if (this.constructor.Default[key] !== this.config[key]) {
config[key] = this.config[key];
2017-09-06 06:05:12 +02:00
}
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return config;
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._cleanTipClass = function _cleanTipClass() {
2019-03-01 17:31:34 +01:00
var tip = this.getTipElement();
var tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if (tabClass !== null && tabClass.length > 0) {
2019-03-01 17:31:34 +01:00
tabClass.map(function (token) {
return token.trim();
}).forEach(function (tClass) {
return tip.classList.remove(tClass);
});
2018-11-13 07:41:12 +01:00
}
};
2018-07-12 06:42:55 +02:00
2018-11-13 07:41:12 +01:00
_proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
2020-12-07 16:50:24 +01:00
var state = popperData.state;
2017-09-06 06:05:12 +02:00
2020-12-07 16:50:24 +01:00
if (!state) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-30 23:28:03 +02:00
2020-12-07 16:50:24 +01:00
this.tip = state.elements.popper;
this._cleanTipClass();
this._addAttachmentClass(this._getAttachment(state.placement));
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Tooltip.jQueryInterface = function jQueryInterface(config) {
2018-11-13 07:41:12 +01:00
return this.each(function () {
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY$6);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var _config = typeof config === 'object' && config;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!data && /dispose|hide/.test(config)) {
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!data) {
data = new Tooltip(this, _config);
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\"");
2017-09-06 06:05:12 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
data[config]();
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass(Tooltip, null, [{
key: "Default",
get: function get() {
return Default$4;
}
}, {
key: "NAME",
get: function get() {
return NAME$6;
}
}, {
key: "DATA_KEY",
get: function get() {
return DATA_KEY$6;
}
}, {
key: "Event",
get: function get() {
2020-03-28 11:29:08 +01:00
return Event$1;
2018-11-13 07:41:12 +01:00
}
}, {
key: "EVENT_KEY",
get: function get() {
return EVENT_KEY$6;
}
}, {
key: "DefaultType",
get: function get() {
return DefaultType$4;
}
}]);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return Tooltip;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Tooltip to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
2017-09-30 23:28:03 +02:00
defineJQueryPlugin(NAME$6, Tooltip);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME$7 = 'popover';
var DATA_KEY$7 = 'bs.popover';
var EVENT_KEY$7 = "." + DATA_KEY$7;
var CLASS_PREFIX$1 = 'bs-popover';
var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
2020-09-14 17:12:06 +02:00
var Default$5 = _extends({}, Tooltip.Default, {
2018-11-13 07:41:12 +01:00
placement: 'right',
offset: [0, 8],
2018-11-13 07:41:12 +01:00
trigger: 'click',
content: '',
2020-12-03 15:18:59 +01:00
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
2018-11-13 07:41:12 +01:00
});
2020-09-14 17:12:06 +02:00
var DefaultType$5 = _extends({}, Tooltip.DefaultType, {
2018-11-13 07:41:12 +01:00
content: '(string|element|function)'
});
2020-03-28 11:29:08 +01:00
var Event$2 = {
2018-11-13 07:41:12 +01:00
HIDE: "hide" + EVENT_KEY$7,
HIDDEN: "hidden" + EVENT_KEY$7,
SHOW: "show" + EVENT_KEY$7,
SHOWN: "shown" + EVENT_KEY$7,
INSERTED: "inserted" + EVENT_KEY$7,
CLICK: "click" + EVENT_KEY$7,
FOCUSIN: "focusin" + EVENT_KEY$7,
FOCUSOUT: "focusout" + EVENT_KEY$7,
MOUSEENTER: "mouseenter" + EVENT_KEY$7,
MOUSELEAVE: "mouseleave" + EVENT_KEY$7
};
var CLASS_NAME_FADE$3 = 'fade';
var CLASS_NAME_SHOW$5 = 'show';
2020-03-28 11:29:08 +01:00
var SELECTOR_TITLE = '.popover-header';
var SELECTOR_CONTENT = '.popover-body';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var Popover = /*#__PURE__*/function (_Tooltip) {
2018-11-13 07:41:12 +01:00
_inheritsLoose(Popover, _Tooltip);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
function Popover() {
return _Tooltip.apply(this, arguments) || this;
}
2017-11-08 05:45:26 +01:00
2018-11-13 07:41:12 +01:00
var _proto = Popover.prototype;
2017-11-08 05:45:26 +01:00
2018-11-13 07:41:12 +01:00
// Overrides
_proto.isWithContent = function isWithContent() {
return this.getTitle() || this._getContent();
};
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
_proto.setContent = function setContent() {
2019-03-01 17:31:34 +01:00
var tip = this.getTipElement(); // we use append for html objects to maintain js events
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var content = this._getContent();
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (typeof content === 'function') {
2020-12-03 15:18:59 +01:00
content = content.call(this._element);
2018-11-13 07:41:12 +01:00
}
2018-03-31 22:59:37 +02:00
2020-03-28 11:29:08 +01:00
this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);
tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$5);
2020-09-14 17:12:06 +02:00
} // Private
;
2019-08-27 15:03:21 +02:00
_proto._addAttachmentClass = function _addAttachmentClass(attachment) {
2020-12-03 14:08:31 +01:00
this.getTipElement().classList.add(CLASS_PREFIX$1 + "-" + this.updateAttachment(attachment));
2020-09-14 17:12:06 +02:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getContent = function _getContent() {
2020-12-03 15:18:59 +01:00
return this._element.getAttribute('data-bs-content') || this.config.content;
2018-11-13 07:41:12 +01:00
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._cleanTipClass = function _cleanTipClass() {
2019-03-01 17:31:34 +01:00
var tip = this.getTipElement();
var tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (tabClass !== null && tabClass.length > 0) {
2019-03-01 17:31:34 +01:00
tabClass.map(function (token) {
return token.trim();
}).forEach(function (tClass) {
return tip.classList.remove(tClass);
});
2018-11-13 07:41:12 +01:00
}
2019-01-04 17:29:45 +01:00
} // Static
;
2018-03-31 22:59:37 +02:00
2019-08-27 15:03:21 +02:00
Popover.jQueryInterface = function jQueryInterface(config) {
2018-11-13 07:41:12 +01:00
return this.each(function () {
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY$7);
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var _config = typeof config === 'object' ? config : null;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
if (!data && /dispose|hide/.test(config)) {
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!data) {
data = new Popover(this, _config);
2019-03-01 17:31:34 +01:00
Data.setData(this, DATA_KEY$7, data);
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\"");
2017-09-06 06:05:12 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
data[config]();
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass(Popover, null, [{
key: "Default",
// Getters
get: function get() {
2018-11-13 07:41:12 +01:00
return Default$5;
}
}, {
key: "NAME",
get: function get() {
return NAME$7;
}
}, {
key: "DATA_KEY",
get: function get() {
return DATA_KEY$7;
}
}, {
key: "Event",
get: function get() {
2020-03-28 11:29:08 +01:00
return Event$2;
2018-11-13 07:41:12 +01:00
}
}, {
key: "EVENT_KEY",
get: function get() {
return EVENT_KEY$7;
}
}, {
key: "DefaultType",
get: function get() {
return DefaultType$5;
}
}]);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
return Popover;
}(Tooltip);
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Popover to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
2017-09-30 23:28:03 +02:00
defineJQueryPlugin(NAME$7, Popover);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME$8 = 'scrollspy';
var DATA_KEY$8 = 'bs.scrollspy';
var EVENT_KEY$8 = "." + DATA_KEY$8;
var DATA_API_KEY$6 = '.data-api';
var Default$6 = {
offset: 10,
method: 'auto',
target: ''
};
var DefaultType$6 = {
offset: 'number',
method: 'string',
target: '(string|element)'
};
2020-03-28 11:29:08 +01:00
var EVENT_ACTIVATE = "activate" + EVENT_KEY$8;
var EVENT_SCROLL = "scroll" + EVENT_KEY$8;
var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$6;
var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
var CLASS_NAME_ACTIVE$2 = 'active';
2020-11-23 14:17:16 +01:00
var SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
2020-03-28 11:29:08 +01:00
var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
var SELECTOR_NAV_LINKS = '.nav-link';
var SELECTOR_NAV_ITEMS = '.nav-item';
var SELECTOR_LIST_ITEMS = '.list-group-item';
var SELECTOR_DROPDOWN = '.dropdown';
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
var METHOD_OFFSET = 'offset';
var METHOD_POSITION = 'position';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
var ScrollSpy = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(ScrollSpy, _BaseComponent);
2018-11-13 07:41:12 +01:00
2020-12-03 15:18:59 +01:00
function ScrollSpy(element, config) {
var _this;
_this = _BaseComponent.call(this, element) || this;
_this._scrollElement = element.tagName === 'BODY' ? window : element;
_this._config = _this._getConfig(config);
_this._selector = _this._config.target + " " + SELECTOR_NAV_LINKS + ", " + _this._config.target + " " + SELECTOR_LIST_ITEMS + ", " + _this._config.target + " ." + CLASS_NAME_DROPDOWN_ITEM;
_this._offsets = [];
_this._targets = [];
_this._activeTarget = null;
_this._scrollHeight = 0;
EventHandler.on(_this._scrollElement, EVENT_SCROLL, function () {
return _this._process();
2018-11-13 07:41:12 +01:00
});
2020-12-03 15:18:59 +01:00
_this.refresh();
_this._process();
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
return _this;
2018-11-13 07:41:12 +01:00
} // Getters
var _proto = ScrollSpy.prototype;
// Public
_proto.refresh = function refresh() {
var _this2 = this;
2020-03-28 11:29:08 +01:00
var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
2018-11-13 07:41:12 +01:00
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
2020-03-28 11:29:08 +01:00
var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
2018-11-13 07:41:12 +01:00
this._offsets = [];
this._targets = [];
this._scrollHeight = this._getScrollHeight();
2020-03-28 11:29:08 +01:00
var targets = SelectorEngine.find(this._selector);
2018-11-13 07:41:12 +01:00
targets.map(function (element) {
2019-03-01 17:31:34 +01:00
var targetSelector = getSelectorFromElement(element);
2020-09-14 17:12:06 +02:00
var target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
2018-11-13 07:41:12 +01:00
if (target) {
var targetBCR = target.getBoundingClientRect();
if (targetBCR.width || targetBCR.height) {
2019-03-01 17:31:34 +01:00
return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
2018-11-13 07:41:12 +01:00
}
}
return null;
}).filter(function (item) {
return item;
}).sort(function (a, b) {
return a[0] - b[0];
}).forEach(function (item) {
_this2._offsets.push(item[0]);
_this2._targets.push(item[1]);
});
2018-03-31 22:59:37 +02:00
};
2018-11-13 07:41:12 +01:00
_proto.dispose = function dispose() {
2020-12-03 15:18:59 +01:00
_BaseComponent.prototype.dispose.call(this);
2019-03-01 17:31:34 +01:00
EventHandler.off(this._scrollElement, EVENT_KEY$8);
2018-11-13 07:41:12 +01:00
this._scrollElement = null;
this._config = null;
this._selector = null;
this._offsets = null;
this._targets = null;
this._activeTarget = null;
this._scrollHeight = null;
2019-01-04 17:29:45 +01:00
} // Private
;
2018-11-13 07:41:12 +01:00
_proto._getConfig = function _getConfig(config) {
2020-09-14 17:12:06 +02:00
config = _extends({}, Default$6, typeof config === 'object' && config ? config : {});
2018-11-13 07:41:12 +01:00
2020-05-13 20:53:43 +02:00
if (typeof config.target !== 'string' && isElement(config.target)) {
2019-03-01 17:31:34 +01:00
var id = config.target.id;
2018-11-13 07:41:12 +01:00
if (!id) {
2019-03-01 17:31:34 +01:00
id = getUID(NAME$8);
config.target.id = id;
2018-11-13 07:41:12 +01:00
}
config.target = "#" + id;
}
2019-03-01 17:31:34 +01:00
typeCheckConfig(NAME$8, config, DefaultType$6);
2018-11-13 07:41:12 +01:00
return config;
2018-03-31 22:59:37 +02:00
};
2018-11-13 07:41:12 +01:00
_proto._getScrollTop = function _getScrollTop() {
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
2018-03-31 22:59:37 +02:00
};
2018-11-13 07:41:12 +01:00
_proto._getScrollHeight = function _getScrollHeight() {
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
2018-03-31 22:59:37 +02:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._getOffsetHeight = function _getOffsetHeight() {
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
2018-03-31 22:59:37 +02:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_proto._process = function _process() {
var scrollTop = this._getScrollTop() + this._config.offset;
2018-03-31 22:59:37 +02:00
2018-11-13 07:41:12 +01:00
var scrollHeight = this._getScrollHeight();
var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
if (this._scrollHeight !== scrollHeight) {
2018-03-31 22:59:37 +02:00
this.refresh();
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (scrollTop >= maxScroll) {
var target = this._targets[this._targets.length - 1];
if (this._activeTarget !== target) {
this._activate(target);
}
return;
}
if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
this._activeTarget = null;
this._clear();
return;
}
2020-05-13 20:53:43 +02:00
for (var i = this._offsets.length; i--;) {
2018-11-13 07:41:12 +01:00
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
if (isActiveTarget) {
this._activate(this._targets[i]);
}
}
};
_proto._activate = function _activate(target) {
this._activeTarget = target;
this._clear();
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
var queries = this._selector.split(',').map(function (selector) {
2020-11-23 14:17:16 +01:00
return selector + "[data-bs-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
2018-11-13 07:41:12 +01:00
});
2018-11-24 17:22:59 +01:00
2019-03-01 17:31:34 +01:00
var link = SelectorEngine.findOne(queries.join(','));
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
2020-05-13 20:53:43 +02:00
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$2);
2020-03-28 11:29:08 +01:00
link.classList.add(CLASS_NAME_ACTIVE$2);
2018-11-13 07:41:12 +01:00
} else {
// Set triggered link as active
2020-03-28 11:29:08 +01:00
link.classList.add(CLASS_NAME_ACTIVE$2);
SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP).forEach(function (listGroup) {
2019-03-01 17:31:34 +01:00
// Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
2020-03-28 11:29:08 +01:00
SelectorEngine.prev(listGroup, SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).forEach(function (item) {
return item.classList.add(CLASS_NAME_ACTIVE$2);
2019-03-01 17:31:34 +01:00
}); // Handle special case when .nav-link is inside .nav-item
2020-03-28 11:29:08 +01:00
SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(function (navItem) {
SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(function (item) {
return item.classList.add(CLASS_NAME_ACTIVE$2);
2019-03-01 17:31:34 +01:00
});
});
});
2018-11-13 07:41:12 +01:00
}
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
2018-11-13 07:41:12 +01:00
relatedTarget: target
});
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._clear = function _clear() {
2020-03-28 11:29:08 +01:00
SelectorEngine.find(this._selector).filter(function (node) {
return node.classList.contains(CLASS_NAME_ACTIVE$2);
2018-11-24 17:22:59 +01:00
}).forEach(function (node) {
2020-03-28 11:29:08 +01:00
return node.classList.remove(CLASS_NAME_ACTIVE$2);
2018-11-24 17:22:59 +01:00
});
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
ScrollSpy.jQueryInterface = function jQueryInterface(config) {
2018-11-13 07:41:12 +01:00
return this.each(function () {
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY$8);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var _config = typeof config === 'object' && config;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (!data) {
data = new ScrollSpy(this, _config);
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\"");
2018-03-31 22:59:37 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
data[config]();
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
});
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_createClass(ScrollSpy, null, [{
2020-12-03 15:18:59 +01:00
key: "Default",
2018-11-13 07:41:12 +01:00
get: function get() {
2020-12-03 15:18:59 +01:00
return Default$6;
2018-11-13 07:41:12 +01:00
}
}, {
2020-12-03 15:18:59 +01:00
key: "DATA_KEY",
2018-11-13 07:41:12 +01:00
get: function get() {
2020-12-03 15:18:59 +01:00
return DATA_KEY$8;
2018-11-13 07:41:12 +01:00
}
}]);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
return ScrollSpy;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.on(window, EVENT_LOAD_DATA_API$1, function () {
SelectorEngine.find(SELECTOR_DATA_SPY).forEach(function (spy) {
2019-03-01 17:31:34 +01:00
return new ScrollSpy(spy, Manipulator.getDataAttributes(spy));
});
2018-11-13 07:41:12 +01:00
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .ScrollSpy to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
2017-09-30 23:28:03 +02:00
defineJQueryPlugin(NAME$8, ScrollSpy);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
var NAME$9 = 'tab';
var DATA_KEY$9 = 'bs.tab';
var EVENT_KEY$9 = "." + DATA_KEY$9;
var DATA_API_KEY$7 = '.data-api';
2020-03-28 11:29:08 +01:00
var EVENT_HIDE$3 = "hide" + EVENT_KEY$9;
var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$9;
var EVENT_SHOW$3 = "show" + EVENT_KEY$9;
var EVENT_SHOWN$3 = "shown" + EVENT_KEY$9;
var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$9 + DATA_API_KEY$7;
var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
var CLASS_NAME_ACTIVE$3 = 'active';
2020-06-16 20:50:01 +02:00
var CLASS_NAME_DISABLED$1 = 'disabled';
var CLASS_NAME_FADE$4 = 'fade';
var CLASS_NAME_SHOW$6 = 'show';
2020-03-28 11:29:08 +01:00
var SELECTOR_DROPDOWN$1 = '.dropdown';
var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
2020-06-16 20:50:01 +02:00
var SELECTOR_ACTIVE$1 = '.active';
2020-03-28 11:29:08 +01:00
var SELECTOR_ACTIVE_UL = ':scope > li > .active';
2020-11-23 14:17:16 +01:00
var SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
2020-03-28 11:29:08 +01:00
var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
var SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2017-09-30 23:28:03 +02:00
2020-12-03 15:18:59 +01:00
var Tab = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Tab, _BaseComponent);
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
function Tab() {
return _BaseComponent.apply(this, arguments) || this;
}
2018-06-22 07:55:23 +02:00
2018-11-13 07:41:12 +01:00
var _proto = Tab.prototype;
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
// Public
_proto.show = function show() {
var _this = this;
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE$3) || this._element.classList.contains(CLASS_NAME_DISABLED$1)) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var previous;
2019-08-27 15:03:21 +02:00
var target = getElementFromSelector(this._element);
2020-05-13 20:53:43 +02:00
var listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP$1);
2018-11-13 07:41:12 +01:00
if (listElement) {
2020-06-16 20:50:01 +02:00
var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$1;
2020-03-28 11:29:08 +01:00
previous = SelectorEngine.find(itemSelector, listElement);
2018-11-13 07:41:12 +01:00
previous = previous[previous.length - 1];
}
2017-09-06 06:05:12 +02:00
var hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$3, {
relatedTarget: this._element
}) : null;
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
2019-03-01 17:31:34 +01:00
relatedTarget: previous
});
2017-09-06 06:05:12 +02:00
2019-03-01 17:31:34 +01:00
if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
2018-11-13 07:41:12 +01:00
return;
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
this._activate(this._element, listElement);
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
var complete = function complete() {
2020-03-28 11:29:08 +01:00
EventHandler.trigger(previous, EVENT_HIDDEN$3, {
2018-11-13 07:41:12 +01:00
relatedTarget: _this._element
});
2020-03-28 11:29:08 +01:00
EventHandler.trigger(_this._element, EVENT_SHOWN$3, {
2018-11-13 07:41:12 +01:00
relatedTarget: previous
2018-03-31 22:59:37 +02:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
if (target) {
this._activate(target, target.parentNode, complete);
} else {
complete();
}
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
_proto._activate = function _activate(element, container, callback) {
var _this2 = this;
2017-09-06 06:05:12 +02:00
2020-06-16 20:50:01 +02:00
var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE$1);
2018-11-13 07:41:12 +01:00
var active = activeElements[0];
var isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$4);
2018-11-13 07:41:12 +01:00
var complete = function complete() {
return _this2._transitionComplete(element, active, callback);
2018-03-31 22:59:37 +02:00
};
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (active && isTransitioning) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement(active);
active.classList.remove(CLASS_NAME_SHOW$6);
EventHandler.one(active, 'transitionend', complete);
2019-03-01 17:31:34 +01:00
emulateTransitionEnd(active, transitionDuration);
2018-11-13 07:41:12 +01:00
} else {
complete();
}
};
_proto._transitionComplete = function _transitionComplete(element, active, callback) {
if (active) {
2020-03-28 11:29:08 +01:00
active.classList.remove(CLASS_NAME_ACTIVE$3);
var dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
2018-11-13 07:41:12 +01:00
if (dropdownChild) {
2020-03-28 11:29:08 +01:00
dropdownChild.classList.remove(CLASS_NAME_ACTIVE$3);
2017-09-06 06:05:12 +02:00
}
2018-11-13 07:41:12 +01:00
if (active.getAttribute('role') === 'tab') {
active.setAttribute('aria-selected', false);
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
element.classList.add(CLASS_NAME_ACTIVE$3);
2018-11-13 07:41:12 +01:00
if (element.getAttribute('role') === 'tab') {
element.setAttribute('aria-selected', true);
}
2017-09-30 23:28:03 +02:00
2019-03-01 17:31:34 +01:00
reflow(element);
if (element.classList.contains(CLASS_NAME_FADE$4)) {
element.classList.add(CLASS_NAME_SHOW$6);
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
if (element.parentNode && element.parentNode.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
2020-05-13 20:53:43 +02:00
var dropdownElement = element.closest(SELECTOR_DROPDOWN$1);
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (dropdownElement) {
2020-03-28 11:29:08 +01:00
SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE$1).forEach(function (dropdown) {
return dropdown.classList.add(CLASS_NAME_ACTIVE$3);
2019-03-01 17:31:34 +01:00
});
2018-11-13 07:41:12 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
element.setAttribute('aria-expanded', true);
2018-03-31 22:59:37 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-13 07:41:12 +01:00
if (callback) {
callback();
}
2019-01-04 17:29:45 +01:00
} // Static
;
2017-09-06 06:05:12 +02:00
2019-08-27 15:03:21 +02:00
Tab.jQueryInterface = function jQueryInterface(config) {
2018-11-13 07:41:12 +01:00
return this.each(function () {
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY$9) || new Tab(this);
2018-11-13 07:41:12 +01:00
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\"");
}
data[config]();
}
});
2018-03-31 22:59:37 +02:00
};
2017-09-06 06:05:12 +02:00
2018-11-13 07:41:12 +01:00
_createClass(Tab, null, [{
2020-12-03 15:18:59 +01:00
key: "DATA_KEY",
// Getters
get: function get() {
2020-12-03 15:18:59 +01:00
return DATA_KEY$9;
2018-11-13 07:41:12 +01:00
}
}]);
return Tab;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-13 07:41:12 +01:00
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
2020-03-28 11:29:08 +01:00
EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {
2018-11-13 07:41:12 +01:00
event.preventDefault();
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY$9) || new Tab(this);
data.show();
2018-11-13 07:41:12 +01:00
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Tab to jQuery only if jQuery is present
2018-11-13 07:41:12 +01:00
*/
defineJQueryPlugin(NAME$9, Tab);
2017-09-06 06:05:12 +02:00
/**
2018-11-24 17:22:59 +01:00
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
2017-09-06 06:05:12 +02:00
*/
2018-03-31 22:59:37 +02:00
2018-11-24 17:22:59 +01:00
var NAME$a = 'toast';
var DATA_KEY$a = 'bs.toast';
var EVENT_KEY$a = "." + DATA_KEY$a;
2020-03-28 11:29:08 +01:00
var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$a;
var EVENT_HIDE$4 = "hide" + EVENT_KEY$a;
var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$a;
var EVENT_SHOW$4 = "show" + EVENT_KEY$a;
var EVENT_SHOWN$4 = "shown" + EVENT_KEY$a;
var CLASS_NAME_FADE$5 = 'fade';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_HIDE = 'hide';
var CLASS_NAME_SHOW$7 = 'show';
2020-03-28 11:29:08 +01:00
var CLASS_NAME_SHOWING = 'showing';
2018-11-24 17:22:59 +01:00
var DefaultType$7 = {
animation: 'boolean',
autohide: 'boolean',
delay: 'number'
};
var Default$7 = {
animation: true,
autohide: true,
2020-09-14 17:12:06 +02:00
delay: 5000
2018-11-24 17:22:59 +01:00
};
2020-11-23 14:17:16 +01:00
var SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss="toast"]';
2019-10-08 08:39:10 +02:00
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
var Toast = /*#__PURE__*/function (_BaseComponent) {
_inheritsLoose(Toast, _BaseComponent);
2018-11-24 17:22:59 +01:00
function Toast(element, config) {
2020-12-03 15:18:59 +01:00
var _this;
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
_this = _BaseComponent.call(this, element) || this;
_this._config = _this._getConfig(config);
_this._timeout = null;
2019-03-01 17:31:34 +01:00
2020-12-03 15:18:59 +01:00
_this._setListeners();
return _this;
2018-11-24 17:22:59 +01:00
} // Getters
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
var _proto = Toast.prototype;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
// Public
_proto.show = function show() {
2020-12-03 15:18:59 +01:00
var _this2 = this;
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4);
2019-07-12 23:56:26 +02:00
if (showEvent.defaultPrevented) {
return;
}
2017-09-06 06:05:12 +02:00
2020-09-14 17:12:06 +02:00
this._clearTimeout();
2018-11-24 17:22:59 +01:00
if (this._config.animation) {
this._element.classList.add(CLASS_NAME_FADE$5);
2018-11-24 17:22:59 +01:00
}
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
var complete = function complete() {
2020-12-03 15:18:59 +01:00
_this2._element.classList.remove(CLASS_NAME_SHOWING);
2018-12-16 00:13:22 +01:00
_this2._element.classList.add(CLASS_NAME_SHOW$7);
2018-12-16 00:13:22 +01:00
2020-12-03 15:18:59 +01:00
EventHandler.trigger(_this2._element, EVENT_SHOWN$4);
2017-09-06 06:05:12 +02:00
2020-12-03 15:18:59 +01:00
if (_this2._config.autohide) {
_this2._timeout = setTimeout(function () {
_this2.hide();
}, _this2._config.delay);
2018-03-31 22:59:37 +02:00
}
2018-11-13 07:41:12 +01:00
};
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
this._element.classList.remove(CLASS_NAME_HIDE);
2018-12-16 00:13:22 +01:00
reflow(this._element);
2020-03-28 11:29:08 +01:00
this._element.classList.add(CLASS_NAME_SHOWING);
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
if (this._config.animation) {
2019-03-01 17:31:34 +01:00
var transitionDuration = getTransitionDurationFromElement(this._element);
EventHandler.one(this._element, 'transitionend', complete);
2019-03-01 17:31:34 +01:00
emulateTransitionEnd(this._element, transitionDuration);
2018-11-24 17:22:59 +01:00
} else {
complete();
}
};
2017-09-06 06:05:12 +02:00
2019-04-18 13:47:52 +02:00
_proto.hide = function hide() {
2020-12-03 15:18:59 +01:00
var _this3 = this;
2018-03-31 22:59:37 +02:00
if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {
2018-11-24 17:22:59 +01:00
return;
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
2019-07-12 23:56:26 +02:00
if (hideEvent.defaultPrevented) {
return;
}
2018-11-13 07:41:12 +01:00
2019-04-18 13:47:52 +02:00
var complete = function complete() {
2020-12-03 15:18:59 +01:00
_this3._element.classList.add(CLASS_NAME_HIDE);
2019-04-18 13:47:52 +02:00
2020-12-03 15:18:59 +01:00
EventHandler.trigger(_this3._element, EVENT_HIDDEN$4);
2019-04-18 13:47:52 +02:00
};
this._element.classList.remove(CLASS_NAME_SHOW$7);
2019-04-18 13:47:52 +02:00
if (this._config.animation) {
var transitionDuration = getTransitionDurationFromElement(this._element);
EventHandler.one(this._element, 'transitionend', complete);
2019-04-18 13:47:52 +02:00
emulateTransitionEnd(this._element, transitionDuration);
2018-11-24 17:22:59 +01:00
} else {
2019-04-18 13:47:52 +02:00
complete();
2018-11-24 17:22:59 +01:00
}
};
2018-11-13 07:41:12 +01:00
2018-11-24 17:22:59 +01:00
_proto.dispose = function dispose() {
2020-09-14 17:12:06 +02:00
this._clearTimeout();
2017-09-06 06:05:12 +02:00
if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {
this._element.classList.remove(CLASS_NAME_SHOW$7);
2018-11-24 17:22:59 +01:00
}
2017-09-06 06:05:12 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.off(this._element, EVENT_CLICK_DISMISS$1);
2020-12-03 15:18:59 +01:00
_BaseComponent.prototype.dispose.call(this);
2018-11-24 17:22:59 +01:00
this._config = null;
2019-01-04 17:29:45 +01:00
} // Private
;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
_proto._getConfig = function _getConfig(config) {
2020-09-14 17:12:06 +02:00
config = _extends({}, Default$7, Manipulator.getDataAttributes(this._element), typeof config === 'object' && config ? config : {});
2019-03-01 17:31:34 +01:00
typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
2018-11-24 17:22:59 +01:00
return config;
};
_proto._setListeners = function _setListeners() {
2020-12-03 15:18:59 +01:00
var _this4 = this;
2017-09-30 23:28:03 +02:00
2020-03-28 11:29:08 +01:00
EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {
2020-12-03 15:18:59 +01:00
return _this4.hide();
2018-11-24 17:22:59 +01:00
});
2020-09-14 17:12:06 +02:00
};
_proto._clearTimeout = function _clearTimeout() {
clearTimeout(this._timeout);
this._timeout = null;
2019-01-04 17:29:45 +01:00
} // Static
;
2018-11-13 07:41:12 +01:00
2019-08-27 15:03:21 +02:00
Toast.jQueryInterface = function jQueryInterface(config) {
2018-11-24 17:22:59 +01:00
return this.each(function () {
2019-03-01 17:31:34 +01:00
var data = Data.getData(this, DATA_KEY$a);
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
var _config = typeof config === 'object' && config;
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
if (!data) {
data = new Toast(this, _config);
}
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\"");
2017-09-06 06:05:12 +02:00
}
2017-09-30 23:28:03 +02:00
2018-11-24 17:22:59 +01:00
data[config](this);
2018-11-13 07:41:12 +01:00
}
2018-11-24 17:22:59 +01:00
});
};
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
_createClass(Toast, null, [{
key: "DefaultType",
get: function get() {
return DefaultType$7;
}
}, {
key: "Default",
get: function get() {
return Default$7;
}
2020-12-03 15:18:59 +01:00
}, {
key: "DATA_KEY",
get: function get() {
return DATA_KEY$a;
}
2018-11-24 17:22:59 +01:00
}]);
2017-09-06 06:05:12 +02:00
2018-11-24 17:22:59 +01:00
return Toast;
2020-12-03 15:18:59 +01:00
}(BaseComponent);
2018-11-24 17:22:59 +01:00
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
2020-11-11 18:07:37 +01:00
* add .Toast to jQuery only if jQuery is present
2018-11-24 17:22:59 +01:00
*/
2018-11-13 07:41:12 +01:00
defineJQueryPlugin(NAME$a, Toast);
2017-09-06 06:05:12 +02:00
2018-03-31 22:59:37 +02:00
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta2): index.umd.js
2020-06-16 20:50:01 +02:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2018-03-31 22:59:37 +02:00
* --------------------------------------------------------------------------
*/
2019-03-11 16:13:30 +01:00
var index_umd = {
Alert: Alert,
Button: Button,
Carousel: Carousel,
Collapse: Collapse,
Dropdown: Dropdown,
Modal: Modal,
Popover: Popover,
ScrollSpy: ScrollSpy,
Tab: Tab,
Toast: Toast,
Tooltip: Tooltip
};
2017-09-06 06:05:12 +02:00
2019-03-11 16:13:30 +01:00
return index_umd;
2017-09-06 06:05:12 +02:00
2019-11-08 09:11:23 +01:00
})));
2017-10-19 09:17:08 +02:00
//# sourceMappingURL=bootstrap.bundle.js.map