{"version":3,"file":"bundle.js","mappings":"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","sources":["webpack://therevolution.website/./src/frontend/scripts/blogs/index.js","webpack://therevolution.website/./src/frontend/scripts/umbracoforms/index.js","webpack://therevolution.website/./src/frontend/scripts/video/index.js","webpack://therevolution.website/./node_modules/vanilla-cookieconsent/src/cookieconsent.js","webpack://therevolution.website/webpack/bootstrap","webpack://therevolution.website/webpack/runtime/define property getters","webpack://therevolution.website/webpack/runtime/hasOwnProperty shorthand","webpack://therevolution.website/webpack/runtime/make namespace object","webpack://therevolution.website/./src/frontend/scripts/cookie/index.js","webpack://therevolution.website/./node_modules/bootstrap/js/src/util/index.js","webpack://therevolution.website/./node_modules/bootstrap/js/src/dom/data.js","webpack://therevolution.website/./node_modules/bootstrap/js/src/dom/event-handler.js","webpack://therevolution.website/./node_modules/bootstrap/js/src/dom/manipulator.js","webpack://therevolution.website/./node_modules/bootstrap/js/src/dom/selector-engine.js","webpack://therevolution.website/./node_modules/bootstrap/js/src/base-component.js","webpack://therevolution.website/./node_modules/bootstrap/js/src/collapse.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/enums.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/math.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/within.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/createPopper.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/popper.js","webpack://therevolution.website/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://therevolution.website/./node_modules/bootstrap/js/src/dropdown.js","webpack://therevolution.website/./src/frontend/scripts/navigation/index.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/raf.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/caf.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/extend.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/getBody.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/docElement.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/forEach.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/hasClass.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/addClass.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/removeClass.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/getAttr.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/hideElement.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/showElement.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/isVisible.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/addEvents.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/events.js","webpack://therevolution.website/./node_modules/tiny-slider/src/tiny-slider.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/calc.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/toDegree.js","webpack://therevolution.website/./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack://therevolution.website/./src/frontend/scripts/helpers/index.js","webpack://therevolution.website/./src/frontend/scripts/cases/index.js","webpack://therevolution.website/./src/frontend/scripts/glider/index.js","webpack://therevolution.website/./src/frontend/scripts/tools/index.js","webpack://therevolution.website/./node_modules/just-validate/dist/just-validate.es.js","webpack://therevolution.website/./src/frontend/scripts/calltoaction/index.js","webpack://therevolution.website/./src/frontend/scripts/projects/index.js","webpack://therevolution.website/./src/frontend/scripts/index.js","webpack://therevolution.website/./src/frontend/scripts/header/index.js"],"sourcesContent":["function showMoreBlogs() {\n const button = document.getElementById('jsShowMoreBlogs'),\n buttonWrap = document.getElementById('jsShowMoreAction'),\n listItems = document.querySelectorAll('.blogs__list-item');\n\n if (button) {\n button.addEventListener('click', () => {\n for (i = 0; i < listItems.length; i++) {\n if (listItems[i].classList.contains('d-none')) {\n listItems[i].classList.remove('d-none');\n }\n if (listItems[i].classList.contains('--noborderbottom')) {\n listItems[i].classList.remove('--noborderbottom');\n }\n }\n buttonWrap.classList.add('d-none');\n });\n }\n}\n\nfunction readingTime() {\n const article = document.getElementById(\"js-article\");\n if (article)\n {\n const text = article.innerText;\n const wpm = 225;\n const words = text.trim().split(/\\s+/).length;\n const time = Math.ceil(words / wpm);\n let readtime = '';\n if (time <= 1)\n {\n readtime = time + ' minuut';\n }\n else\n {\n readtime = time + ' minuten';\n }\n if (document.getElementById(\"js-readtime\"))\n {\n document.getElementById(\"js-readtime\").innerText = readtime;\n }\n }\n}\n\nreadingTime();\nshowMoreBlogs();\n","function modifyCheckboxHtml() {\n const elements = document.querySelectorAll('.umbraco-forms-field.checkbox');\n\n if (elements) {\n for (let i = 0; i < elements.length; i++) {\n const parentElements = elements[i],\n childElements = parentElements.getElementsByClassName('umbraco-forms-field-wrapper'),\n labelElements = parentElements.getElementsByTagName('label');\n labelElements[0].removeAttribute('class');\n childElements[0].insertBefore(labelElements[0], childElements[0].children[1]);\n }\n\n }\n}\n\nfunction modifyDataconsentHtml() {\n const parentElement = document.querySelector('.dataconsent .umbraco-forms-field-wrapper');\n\n if (parentElement) {\n const childElement = parentElement.querySelector('input[type=hidden]'),\n spanElement = parentElement.querySelector('span');\n parentElement.insertBefore(childElement, spanElement);\n }\n}\n\nmodifyCheckboxHtml();\nmodifyDataconsentHtml();\n","function videoSwitch() {\n // look for all elements with class and add onclick event\n const elements = document.getElementsByClassName('js-btn-video-block');\n for (let i = 0; i < elements.length; i++) {\n elements[i].addEventListener('click', function() {\n switchToVideo(this);\n }, false);\n }\n // replace clicked object with iframe video\n function switchToVideo(e) {\n e.parentElement.innerHTML = '';\n }\n}\nvideoSwitch();","/*!\n * CookieConsent v2.8.6\n * https://www.github.com/orestbida/cookieconsent\n * Author Orest Bida\n * Released under the MIT License\n */\n(function(){\n 'use strict';\n /**\n * @param {HTMLElement} [root] - [optional] element where the cookieconsent will be appended\n * @returns {Object} cookieconsent object with API\n */\n var CookieConsent = function(root){\n\n /**\n * CHANGE THIS FLAG FALSE TO DISABLE console.log()\n */\n var ENABLE_LOGS = true;\n\n var _config = {\n 'mode': 'opt-in', // 'opt-in', 'opt-out'\n 'current_lang': 'en',\n 'auto_language': null,\n 'autorun': true, // run as soon as loaded\n 'page_scripts': true,\n 'hide_from_bots': true,\n 'cookie_name': 'cc_cookie',\n 'cookie_expiration': 182, // default: 6 months (in days)\n 'cookie_domain': window.location.hostname, // default: current domain\n 'cookie_path': '/',\n 'cookie_same_site': 'Lax',\n 'use_rfc_cookie': false,\n 'autoclear_cookies': true,\n 'revision': 0,\n 'script_selector': 'data-cookiecategory'\n };\n\n var\n /**\n * Object which holds the main methods/API (.show, .run, ...)\n */\n _cookieconsent = {},\n\n /**\n * Global user configuration object\n */\n user_config,\n\n /**\n * Internal state variables\n */\n saved_cookie_content = {},\n cookie_data = null,\n\n /**\n * @type {Date}\n */\n consent_date,\n\n /**\n * @type {Date}\n */\n last_consent_update,\n\n /**\n * @type {string}\n */\n consent_uuid,\n\n /**\n * @type {boolean}\n */\n invalid_consent = true,\n\n consent_modal_exists = false,\n consent_modal_visible = false,\n\n settings_modal_visible = false,\n clicked_inside_modal = false,\n current_modal_focusable,\n\n all_table_headers,\n all_blocks,\n\n // Helper callback functions\n // (avoid calling \"user_config['onAccept']\" all the time)\n onAccept,\n onChange,\n onFirstAction,\n\n revision_enabled = false,\n valid_revision = true,\n revision_message = '',\n\n // State variables for the autoclearCookies function\n changed_settings = [],\n reload_page = false;\n\n /**\n * Accept type:\n * - \"all\"\n * - \"necessary\"\n * - \"custom\"\n * @type {string}\n */\n var accept_type;\n\n /**\n * Contains all accepted categories\n * @type {string[]}\n */\n var accepted_categories = [];\n\n /**\n * Contains all non-accepted (rejected) categories\n * @type {string[]}\n */\n var rejected_categories = [];\n\n /**\n * Contains all categories enabled by default\n * @type {string[]}\n */\n var default_enabled_categories = [];\n\n // Don't run plugin (to avoid indexing its text content) if bot detected\n var is_bot = false;\n\n /**\n * Save reference to the last focused element on the page\n * (used later to restore focus when both modals are closed)\n */\n var last_elem_before_modal;\n var last_consent_modal_btn_focus;\n\n /**\n * Both of the arrays below have the same structure:\n * [0] => holds reference to the FIRST focusable element inside modal\n * [1] => holds reference to the LAST focusable element inside modal\n */\n var consent_modal_focusable = [];\n var settings_modal_focusable = [];\n\n /**\n * Keep track of enabled/disabled categories\n * @type {boolean[]}\n */\n var toggle_states = [];\n\n /**\n * Stores all available categories\n * @type {string[]}\n */\n var all_categories = [];\n\n /**\n * Keep track of readonly toggles\n * @type {boolean[]}\n */\n var readonly_categories = [];\n\n /**\n * Pointers to main dom elements (to avoid retrieving them later using document.getElementById)\n */\n var\n /** @type {HTMLElement} */ html_dom = document.documentElement,\n /** @type {HTMLElement} */ main_container,\n /** @type {HTMLElement} */ all_modals_container,\n\n /** @type {HTMLElement} */ consent_modal,\n /** @type {HTMLElement} */ consent_modal_title,\n /** @type {HTMLElement} */ consent_modal_description,\n /** @type {HTMLElement} */ consent_primary_btn,\n /** @type {HTMLElement} */ consent_secondary_btn,\n /** @type {HTMLElement} */ consent_buttons,\n /** @type {HTMLElement} */ consent_modal_inner,\n\n /** @type {HTMLElement} */ settings_container,\n /** @type {HTMLElement} */ settings_inner,\n /** @type {HTMLElement} */ settings_title,\n /** @type {HTMLElement} */ settings_close_btn,\n /** @type {HTMLElement} */ settings_blocks,\n /** @type {HTMLElement} */ new_settings_blocks,\n /** @type {HTMLElement} */ settings_buttons,\n /** @type {HTMLElement} */ settings_save_btn,\n /** @type {HTMLElement} */ settings_accept_all_btn,\n /** @type {HTMLElement} */ settings_reject_all_btn;\n\n /**\n * Update config settings\n * @param {Object} user_config\n */\n var _setConfig = function(_user_config){\n\n /**\n * Make user configuration globally available\n */\n user_config = _user_config;\n\n _log(\"CookieConsent [CONFIG]: received_config_settings \", user_config);\n\n if(typeof user_config['cookie_expiration'] === \"number\")\n _config.cookie_expiration = user_config['cookie_expiration'];\n\n if(typeof user_config['cookie_necessary_only_expiration'] === \"number\")\n _config.cookie_necessary_only_expiration = user_config['cookie_necessary_only_expiration'];\n\n if(typeof user_config['autorun'] === \"boolean\")\n _config.autorun = user_config['autorun'];\n\n if(typeof user_config['cookie_domain'] === \"string\")\n _config.cookie_domain = user_config['cookie_domain'];\n\n if(typeof user_config['cookie_same_site'] === \"string\")\n _config.cookie_same_site = user_config['cookie_same_site'];\n\n if(typeof user_config['cookie_path'] === \"string\")\n _config.cookie_path = user_config['cookie_path'];\n\n if(typeof user_config['cookie_name'] === \"string\")\n _config.cookie_name = user_config['cookie_name'];\n\n if(typeof user_config['onAccept'] === \"function\")\n onAccept = user_config['onAccept'];\n\n if(typeof user_config['onFirstAction'] === \"function\")\n onFirstAction = user_config['onFirstAction'];\n\n if(typeof user_config['onChange'] === \"function\")\n onChange = user_config['onChange'];\n\n if(user_config['mode'] === 'opt-out')\n _config.mode = 'opt-out';\n\n if(typeof user_config['revision'] === \"number\"){\n user_config['revision'] > -1 && (_config.revision = user_config['revision']);\n revision_enabled = true;\n }\n\n if(typeof user_config['autoclear_cookies'] === \"boolean\")\n _config.autoclear_cookies = user_config['autoclear_cookies'];\n\n if(user_config['use_rfc_cookie'] === true)\n _config.use_rfc_cookie = true;\n\n if(typeof user_config['hide_from_bots'] === \"boolean\"){\n _config.hide_from_bots = user_config['hide_from_bots'];\n }\n\n if(_config.hide_from_bots){\n is_bot = navigator &&\n ((navigator.userAgent && /bot|crawl|spider|slurp|teoma/i.test(navigator.userAgent)) || navigator.webdriver);\n }\n\n _config.page_scripts = user_config['page_scripts'] === true;\n\n if (user_config['auto_language'] === 'browser' || user_config['auto_language'] === true) {\n _config.auto_language = 'browser';\n } else if (user_config['auto_language'] === 'document') {\n _config.auto_language = 'document';\n }\n\n _log(\"CookieConsent [LANG]: auto_language strategy is '\" + _config.auto_language + \"'\");\n\n _config.current_lang = _resolveCurrentLang(user_config.languages, user_config['current_lang']);\n }\n\n /**\n * Add an onClick listeners to all html elements with data-cc attribute\n */\n var _addDataButtonListeners = function(elem){\n\n var _a = 'accept-';\n\n var show_settings = _getElements('c-settings');\n var accept_all = _getElements(_a + 'all');\n var accept_necessary = _getElements(_a + 'necessary');\n var accept_custom_selection = _getElements(_a + 'custom');\n\n for(var i=0; i}\n */\n function _getElements(data_role){\n return (elem || document).querySelectorAll('a[data-cc=\"' + data_role + '\"], button[data-cc=\"' + data_role + '\"]');\n }\n\n /**\n * Helper function: accept and then hide modals\n * @param {PointerEvent} e source event\n * @param {string} [accept_type]\n */\n function _acceptAction(e, accept_type){\n e.preventDefault();\n _cookieconsent.accept(accept_type);\n _cookieconsent.hideSettings();\n _cookieconsent.hide();\n }\n }\n\n /**\n * Get a valid language (at least 1 must be defined)\n * @param {string} lang - desired language\n * @param {Object} all_languages - all defined languages\n * @returns {string} validated language\n */\n var _getValidatedLanguage = function(lang, all_languages){\n if(Object.prototype.hasOwnProperty.call(all_languages, lang)){\n return lang;\n }else if(_getKeys(all_languages).length > 0){\n if(Object.prototype.hasOwnProperty.call(all_languages, _config.current_lang)){\n return _config.current_lang ;\n }else{\n return _getKeys(all_languages)[0];\n }\n }\n }\n\n /**\n * Save reference to first and last focusable elements inside each modal\n * to prevent losing focus while navigating with TAB\n */\n var _getModalFocusableData = function(){\n\n /**\n * Note: any of the below focusable elements, which has the attribute tabindex=\"-1\" AND is either\n * the first or last element of the modal, won't receive focus during \"open/close\" modal\n */\n var allowed_focusable_types = ['[href]', 'button', 'input', 'details', '[tabindex=\"0\"]'];\n\n function _getAllFocusableElements(modal, _array){\n var focus_later=false, focus_first=false;\n\n // ie might throw exception due to complex unsupported selector => a:not([tabindex=\"-1\"])\n try{\n var focusable_elems = modal.querySelectorAll(allowed_focusable_types.join(':not([tabindex=\"-1\"]), '));\n var attr, len=focusable_elems.length, i=0;\n\n while(i < len){\n\n attr = focusable_elems[i].getAttribute('data-focus');\n\n if(!focus_first && attr === \"1\"){\n focus_first = focusable_elems[i];\n\n }else if(attr === \"0\"){\n focus_later = focusable_elems[i];\n if(!focus_first && focusable_elems[i+1].getAttribute('data-focus') !== \"0\"){\n focus_first = focusable_elems[i+1];\n }\n }\n\n i++;\n }\n\n }catch(e){\n return modal.querySelectorAll(allowed_focusable_types.join(', '));\n }\n\n /**\n * Save first and last elements (used to lock/trap focus inside modal)\n */\n _array[0] = focusable_elems[0];\n _array[1] = focusable_elems[focusable_elems.length - 1];\n _array[2] = focus_later;\n _array[3] = focus_first;\n }\n\n /**\n * Get settings modal'S all focusable elements\n * Save first and last elements (used to lock/trap focus inside modal)\n */\n _getAllFocusableElements(settings_inner, settings_modal_focusable);\n\n /**\n * If consent modal exists, do the same\n */\n if(consent_modal_exists){\n _getAllFocusableElements(consent_modal, consent_modal_focusable);\n }\n }\n\n var _createConsentModal = function(lang){\n\n if(user_config['force_consent'] === true)\n _addClass(html_dom, 'force--consent');\n\n // Create modal if it doesn't exist\n if(!consent_modal){\n\n consent_modal = _createNode('div');\n var consent_modal_inner_inner = _createNode('div');\n var overlay = _createNode('div');\n\n consent_modal.id = 'cm';\n consent_modal_inner_inner.id = 'c-inr-i';\n overlay.id = 'cm-ov';\n\n consent_modal.setAttribute('role', 'dialog');\n consent_modal.setAttribute('aria-modal', 'true');\n consent_modal.setAttribute('aria-hidden', 'false');\n consent_modal.setAttribute('aria-labelledby', 'c-ttl');\n consent_modal.setAttribute('aria-describedby', 'c-txt');\n\n // Append consent modal to main container\n all_modals_container.appendChild(consent_modal);\n all_modals_container.appendChild(overlay);\n\n /**\n * Make modal by default hidden to prevent weird page jumps/flashes (shown only once css is loaded)\n */\n consent_modal.style.visibility = overlay.style.visibility = \"hidden\";\n overlay.style.opacity = 0;\n }\n\n // Use insertAdjacentHTML instead of innerHTML\n var consent_modal_title_value = user_config.languages[lang]['consent_modal']['title'];\n\n // Add title (if valid)\n if(consent_modal_title_value){\n\n if(!consent_modal_title){\n consent_modal_title = _createNode('div');\n consent_modal_title.id = 'c-ttl';\n consent_modal_title.setAttribute('role', 'heading');\n consent_modal_title.setAttribute('aria-level', '2');\n consent_modal_inner_inner.appendChild(consent_modal_title);\n }\n\n consent_modal_title.innerHTML = consent_modal_title_value;\n }\n\n var description = user_config.languages[lang]['consent_modal']['description'];\n\n if(revision_enabled){\n if(!valid_revision){\n description = description.replace(\"{{revision_message}}\", revision_message || user_config.languages[lang]['consent_modal']['revision_message'] || \"\");\n }else{\n description = description.replace(\"{{revision_message}}\", \"\");\n }\n }\n\n if(!consent_modal_description){\n consent_modal_description = _createNode('div');\n consent_modal_description.id = 'c-txt';\n consent_modal_inner_inner.appendChild(consent_modal_description);\n }\n\n // Set description content\n consent_modal_description.innerHTML = description;\n\n var primary_btn_data = user_config.languages[lang]['consent_modal']['primary_btn'], // accept current selection\n secondary_btn_data = user_config.languages[lang]['consent_modal']['secondary_btn'];\n\n // Add primary button if not falsy\n if(primary_btn_data){\n\n if(!consent_primary_btn){\n consent_primary_btn = _createNode('button');\n consent_primary_btn.id = 'c-p-bn';\n consent_primary_btn.className = \"c-bn\";\n\n var _accept_type;\n\n if(primary_btn_data['role'] === 'accept_all')\n _accept_type = 'all'\n\n _addEvent(consent_primary_btn, \"click\", function(){\n _cookieconsent.hide();\n _log(\"CookieConsent [ACCEPT]: cookie_consent was accepted!\");\n _cookieconsent.accept(_accept_type);\n });\n }\n\n consent_primary_btn.innerHTML = user_config.languages[lang]['consent_modal']['primary_btn']['text'];\n }\n\n // Add secondary button if not falsy\n if(secondary_btn_data){\n\n if(!consent_secondary_btn){\n consent_secondary_btn = _createNode('button');\n consent_secondary_btn.id = 'c-s-bn';\n consent_secondary_btn.className = \"c-bn c_link\";\n\n if(secondary_btn_data['role'] === 'accept_necessary'){\n _addEvent(consent_secondary_btn, 'click', function(){\n _cookieconsent.hide();\n _cookieconsent.accept([]); // accept necessary only\n });\n }else{\n _addEvent(consent_secondary_btn, 'click', function(){\n _cookieconsent.showSettings(0);\n });\n }\n }\n\n consent_secondary_btn.innerHTML = user_config.languages[lang]['consent_modal']['secondary_btn']['text'];\n }\n\n // Swap buttons\n var gui_options_data = user_config['gui_options'];\n\n if(!consent_modal_inner){\n consent_modal_inner = _createNode('div');\n consent_modal_inner.id = 'c-inr';\n\n consent_modal_inner.appendChild(consent_modal_inner_inner);\n }\n\n if(!consent_buttons){\n consent_buttons = _createNode('div');\n consent_buttons.id = \"c-bns\";\n\n if(gui_options_data && gui_options_data['consent_modal'] && gui_options_data['consent_modal']['swap_buttons'] === true){\n secondary_btn_data && consent_buttons.appendChild(consent_secondary_btn);\n primary_btn_data && consent_buttons.appendChild(consent_primary_btn);\n consent_buttons.className = 'swap';\n }else{\n primary_btn_data && consent_buttons.appendChild(consent_primary_btn);\n secondary_btn_data && consent_buttons.appendChild(consent_secondary_btn);\n }\n\n (primary_btn_data || secondary_btn_data ) && consent_modal_inner.appendChild(consent_buttons);\n consent_modal.appendChild(consent_modal_inner);\n }\n\n consent_modal_exists = true;\n }\n\n var _createSettingsModal = function(lang){\n\n /**\n * Create all consent_modal elements\n */\n if(!settings_container){\n settings_container = _createNode('div');\n var settings_container_valign = _createNode('div');\n var settings = _createNode('div');\n var settings_container_inner = _createNode('div');\n settings_inner = _createNode('div');\n settings_title = _createNode('div');\n var settings_header = _createNode('div');\n settings_close_btn = _createNode('button');\n var settings_close_btn_container = _createNode('div');\n settings_blocks = _createNode('div');\n var overlay = _createNode('div');\n\n /**\n * Set ids\n */\n settings_container.id = 's-cnt';\n settings_container_valign.id = \"c-vln\";\n settings_container_inner.id = \"c-s-in\";\n settings.id = \"cs\";\n settings_title.id = 's-ttl';\n settings_inner.id = 's-inr';\n settings_header.id = \"s-hdr\";\n settings_blocks.id = 's-bl';\n settings_close_btn.id = 's-c-bn';\n overlay.id = 'cs-ov';\n settings_close_btn_container.id = 's-c-bnc';\n settings_close_btn.className = 'c-bn';\n\n settings_container.setAttribute('role', 'dialog');\n settings_container.setAttribute('aria-modal', 'true');\n settings_container.setAttribute('aria-hidden', 'true');\n settings_container.setAttribute('aria-labelledby', 's-ttl');\n settings_title.setAttribute('role', 'heading');\n settings_container.style.visibility = overlay.style.visibility = \"hidden\";\n overlay.style.opacity = 0;\n\n settings_close_btn_container.appendChild(settings_close_btn);\n\n // If 'esc' key is pressed inside settings_container div => hide settings\n _addEvent(settings_container_valign, 'keydown', function(evt){\n evt = evt || window.event;\n if (evt.keyCode === 27) {\n _cookieconsent.hideSettings(0);\n }\n }, true);\n\n _addEvent(settings_close_btn, 'click', function(){\n _cookieconsent.hideSettings(0);\n });\n }else{\n new_settings_blocks = _createNode('div');\n new_settings_blocks.id = 's-bl';\n }\n\n // Add label to close button\n settings_close_btn.setAttribute('aria-label', user_config.languages[lang]['settings_modal']['close_btn_label'] || 'Close');\n\n all_blocks = user_config.languages[lang]['settings_modal']['blocks'];\n all_table_headers = user_config.languages[lang]['settings_modal']['cookie_table_headers'];\n\n var n_blocks = all_blocks.length;\n\n // Set settings modal title\n settings_title.innerHTML = user_config.languages[lang]['settings_modal']['title'];\n\n // Create settings modal content (blocks)\n for(var i=0; i retrieve category states from cookie\n * Otherwise use states defined in the user_config. object\n */\n if(!invalid_consent){\n if(_inArray(saved_cookie_content['categories'], cookie_category) > -1){\n block_switch.checked = true;\n !new_settings_blocks && toggle_states.push(true);\n }else{\n !new_settings_blocks && toggle_states.push(false);\n }\n }else if(toggle_data['enabled']){\n block_switch.checked = true;\n !new_settings_blocks && toggle_states.push(true);\n\n /**\n * Keep track of categories enabled by default (useful when mode=='opt-out')\n */\n if(toggle_data['enabled'])\n !new_settings_blocks && default_enabled_categories.push(cookie_category);\n\n }else{\n !new_settings_blocks && toggle_states.push(false);\n }\n\n !new_settings_blocks && all_categories.push(cookie_category);\n\n /**\n * Set toggle as readonly if true (disable checkbox)\n */\n if(toggle_data['readonly']){\n block_switch.disabled = true;\n _addClass(block_switch_span, 'c-ro');\n !new_settings_blocks && readonly_categories.push(true);\n }else{\n !new_settings_blocks && readonly_categories.push(false);\n }\n\n _addClass(block_table_container, 'b-acc');\n _addClass(block_title_container, 'b-bn');\n _addClass(block_section, 'b-ex');\n\n block_table_container.id = accordion_id;\n block_table_container.setAttribute('aria-hidden', 'true');\n\n block_switch_label.appendChild(block_switch);\n block_switch_label.appendChild(block_switch_span);\n block_switch_label.appendChild(label_text_span);\n block_title_container.appendChild(block_switch_label);\n\n /**\n * On button click handle the following :=> aria-expanded, aria-hidden and act class for current block\n */\n isExpandable && (function(accordion, block_section, btn){\n _addEvent(block_title_btn, 'click', function(){\n if(!_hasClass(block_section, 'act')){\n _addClass(block_section, 'act');\n btn.setAttribute('aria-expanded', 'true');\n accordion.setAttribute('aria-hidden', 'false');\n }else{\n _removeClass(block_section, 'act');\n btn.setAttribute('aria-expanded', 'false');\n accordion.setAttribute('aria-hidden', 'true');\n }\n }, false);\n })(block_table_container, block_section, block_title_btn);\n\n }else{\n /**\n * If block is not a button (no toggle defined),\n * create a simple div instead\n */\n if(title_data){\n var block_title = _createNode('div');\n block_title.className = 'b-tl';\n block_title.setAttribute('role', 'heading');\n block_title.setAttribute('aria-level', '3');\n block_title.insertAdjacentHTML('beforeend', title_data);\n block_title_container.appendChild(block_title);\n }\n }\n\n title_data && block_section.appendChild(block_title_container);\n description_data && block_table_container.appendChild(block_desc);\n\n // if cookie table found, generate table for this block\n if(!remove_cookie_tables && typeof cookie_table_data !== 'undefined'){\n var tr_tmp_fragment = document.createDocumentFragment();\n\n /**\n * Use custom table headers\n */\n for(var p=0; p ~faster value retrieval)\n var curr_block = all_blocks[i];\n\n // If current block has a toggle for opt in/out\n if(Object.prototype.hasOwnProperty.call(curr_block, \"toggle\")){\n\n // if current block has a cookie table, an off toggle,\n // and its preferences were just changed => delete cookies\n var category_just_disabled = _inArray(changed_settings, curr_block['toggle']['value']) > -1;\n if(\n !toggle_states[++count] &&\n Object.prototype.hasOwnProperty.call(curr_block, \"cookie_table\") &&\n (clearOnFirstAction || category_just_disabled)\n ){\n var curr_cookie_table = curr_block['cookie_table'];\n\n // Get first property name\n var ckey = _getKeys(all_table_headers[0])[0];\n\n // Get number of cookies defined in cookie_table\n var clen = curr_cookie_table.length;\n\n // set \"reload_page\" to true if reload=on_disable\n if(curr_block['toggle']['reload'] === 'on_disable')\n category_just_disabled && (reload_page = true);\n\n // for each row defined in the cookie table\n for(var j=0; j filter cookie array\n if(is_regex){\n for(var n=0; n -1) found_cookies.push(all_cookies_array[found_index]);\n }\n\n _log(\"CookieConsent [AUTOCLEAR]: search cookie: '\" + curr_cookie_name + \"', found:\", found_cookies);\n\n // If cookie exists -> delete it\n if(found_cookies.length > 0){\n _eraseCookies(found_cookies, curr_cookie_path, domains);\n curr_block['toggle']['reload'] === 'on_clear' && (reload_page = true);\n }\n }\n }\n }\n }\n }\n\n /**\n * Set toggles/checkboxes based on accepted categories and save cookie\n * @param {string[]} accepted_categories - Array of categories to accept\n */\n var _saveCookiePreferences = function(accepted_categories){\n\n changed_settings = [];\n\n // Retrieve all toggle/checkbox values\n var category_toggles = document.querySelectorAll('.c-tgl') || [];\n\n // If there are opt in/out toggles ...\n if(category_toggles.length > 0){\n\n for(var i=0; i 0)\n _autoclearCookies();\n\n if(!consent_date) consent_date = new Date();\n if(!consent_uuid) consent_uuid = _uuidv4();\n\n saved_cookie_content = {\n \"categories\": accepted_categories,\n \"level\": accepted_categories, // Copy of the `categories` property for compatibility purposes with version v2.8.0 and below.\n \"revision\": _config.revision,\n \"data\": cookie_data,\n \"rfc_cookie\": _config.use_rfc_cookie,\n \"consent_date\": consent_date.toISOString(),\n \"consent_uuid\": consent_uuid\n }\n\n // save cookie with preferences 'categories' (only if never accepted or settings were updated)\n if(invalid_consent || changed_settings.length > 0){\n valid_revision = true;\n\n /**\n * Update \"last_consent_update\" only if it is invalid (after t)\n */\n if(!last_consent_update)\n last_consent_update = consent_date;\n else\n last_consent_update = new Date();\n\n saved_cookie_content['last_consent_update'] = last_consent_update.toISOString();\n\n /**\n * Update accept type\n */\n accept_type = _getAcceptType(_getCurrentCategoriesState());\n\n _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n _manageExistingScripts();\n }\n\n if(invalid_consent){\n\n /**\n * Delete unused/\"zombie\" cookies if consent is not valid (not yet expressed or cookie has expired)\n */\n if(_config.autoclear_cookies)\n _autoclearCookies(true);\n\n if(typeof onFirstAction === 'function')\n onFirstAction(_cookieconsent.getUserPreferences(), saved_cookie_content);\n\n if(typeof onAccept === 'function')\n onAccept(saved_cookie_content);\n\n /**\n * Set consent as valid\n */\n invalid_consent = false;\n\n if(_config.mode === 'opt-in') return;\n }\n\n // fire onChange only if settings were changed\n if(typeof onChange === \"function\" && changed_settings.length > 0)\n onChange(saved_cookie_content, changed_settings);\n\n /**\n * reload page if needed\n */\n if(reload_page)\n window.location.reload();\n }\n\n /**\n * Returns index of found element inside array, otherwise -1\n * @param {Array} arr\n * @param {Object} value\n * @returns {number}\n */\n var _inArray = function(arr, value){\n return arr.indexOf(value);\n }\n\n /**\n * Helper function which prints info (console.log())\n * @param {Object} print_msg\n * @param {Object} [optional_param]\n */\n var _log = function(print_msg, optional_param, error){\n ENABLE_LOGS && (!error ? console.log(print_msg, optional_param !== undefined ? optional_param : ' ') : console.error(print_msg, optional_param || \"\"));\n }\n\n /**\n * Helper function which creates an HTMLElement object based on 'type' and returns it.\n * @param {string} type\n * @returns {HTMLElement}\n */\n var _createNode = function(type){\n var el = document.createElement(type);\n if(type === 'button'){\n el.setAttribute('type', type);\n }\n return el;\n }\n\n /**\n * Generate RFC4122-compliant UUIDs.\n * https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid?page=1&tab=votes#tab-top\n * @returns {string}\n */\n var _uuidv4 = function(){\n return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, function(c){\n try{\n return (c ^ (window.crypto || window.msCrypto).getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n }catch(e){\n return '';\n }\n });\n }\n\n /**\n * Resolve which language should be used.\n *\n * @param {Object} languages Object with language translations\n * @param {string} [requested_language] Language specified by given configuration parameters\n * @returns {string}\n */\n var _resolveCurrentLang = function (languages, requested_language) {\n\n if (_config.auto_language === 'browser') {\n return _getValidatedLanguage(_getBrowserLang(), languages);\n } else if (_config.auto_language === 'document') {\n return _getValidatedLanguage(document.documentElement.lang, languages);\n } else {\n if (typeof requested_language === 'string') {\n return _config.current_lang = _getValidatedLanguage(requested_language, languages);\n }\n }\n\n _log(\"CookieConsent [LANG]: setting current_lang = '\" + _config.current_lang + \"'\");\n return _config.current_lang; // otherwise return default\n }\n\n /**\n * Get current client's browser language\n * @returns {string}\n */\n var _getBrowserLang = function(){\n var browser_lang = navigator.language || navigator.browserLanguage;\n browser_lang.length > 2 && (browser_lang = browser_lang[0]+browser_lang[1]);\n _log(\"CookieConsent [LANG]: detected_browser_lang = '\"+ browser_lang + \"'\");\n return browser_lang.toLowerCase()\n }\n\n /**\n * Trap focus inside modal and focus the first\n * focusable element of current active modal\n */\n var _handleFocusTrap = function(){\n var tabbedOutsideDiv = false;\n var tabbedInsideModal = false;\n\n _addEvent(document, 'keydown', function(e){\n e = e || window.event;\n\n // If is tab key => ok\n if(e.key !== 'Tab') return;\n\n // If there is any modal to focus\n if(current_modal_focusable){\n // If reached natural end of the tab sequence => restart\n if(e.shiftKey){\n if (document.activeElement === current_modal_focusable[0]) {\n current_modal_focusable[1].focus();\n e.preventDefault();\n }\n }else{\n if (document.activeElement === current_modal_focusable[1]) {\n current_modal_focusable[0].focus();\n e.preventDefault();\n }\n }\n\n // If have not yet used tab (or shift+tab) and modal is open ...\n // Focus the first focusable element\n if(!tabbedInsideModal && !clicked_inside_modal){\n tabbedInsideModal = true;\n !tabbedOutsideDiv && e.preventDefault();\n\n if(e.shiftKey){\n if(current_modal_focusable[3]){\n if(!current_modal_focusable[2]){\n current_modal_focusable[0].focus();\n }else{\n current_modal_focusable[2].focus();\n }\n }else{\n current_modal_focusable[1].focus();\n }\n }else{\n if(current_modal_focusable[3]){\n current_modal_focusable[3].focus();\n }else{\n current_modal_focusable[0].focus();\n }\n }\n }\n }\n\n !tabbedInsideModal && (tabbedOutsideDiv = true);\n });\n\n if(document.contains){\n _addEvent(main_container, 'click', function(e){\n e = e || window.event;\n /**\n * If click is on the foreground overlay (and not inside settings_modal),\n * hide settings modal\n *\n * Notice: click on div is not supported in IE\n */\n if(settings_modal_visible){\n if(!settings_inner.contains(e.target)){\n _cookieconsent.hideSettings(0);\n clicked_inside_modal = false;\n }else{\n clicked_inside_modal = true;\n }\n }else if(consent_modal_visible){\n if(consent_modal.contains(e.target)){\n clicked_inside_modal = true;\n }\n }\n\n }, true);\n }\n }\n\n /**\n * Manage each modal's layout\n * @param {Object} gui_options\n */\n var _guiManager = function(gui_options, only_consent_modal){\n\n // If gui_options is not object => exit\n if(typeof gui_options !== 'object') return;\n\n var consent_modal_options = gui_options['consent_modal'];\n var settings_modal_options = gui_options['settings_modal'];\n\n /**\n * Helper function which adds layout and\n * position classes to given modal\n *\n * @param {HTMLElement} modal\n * @param {string[]} allowed_layouts\n * @param {string[]} allowed_positions\n * @param {string} layout\n * @param {string[]} position\n */\n function _setLayout(modal, allowed_layouts, allowed_positions, allowed_transitions, layout, position, transition){\n position = (position && position.split(\" \")) || [];\n\n // Check if specified layout is valid\n if(_inArray(allowed_layouts, layout) > -1){\n\n // Add layout classes\n _addClass(modal, layout);\n\n // Add position class (if specified)\n if(!(layout === 'bar' && position[0] === 'middle') && _inArray(allowed_positions, position[0]) > -1){\n for(var i=0; i -1) && _addClass(modal, transition);\n }\n\n if(consent_modal_exists && consent_modal_options){\n _setLayout(\n consent_modal,\n ['box', 'bar', 'cloud'],\n ['top', 'middle', 'bottom'],\n ['zoom', 'slide'],\n consent_modal_options['layout'],\n consent_modal_options['position'],\n consent_modal_options['transition']\n );\n }\n\n if(!only_consent_modal && settings_modal_options){\n _setLayout(\n settings_container,\n ['bar'],\n ['left', 'right'],\n ['zoom', 'slide'],\n settings_modal_options['layout'],\n settings_modal_options['position'],\n settings_modal_options['transition']\n );\n }\n }\n\n /**\n * Returns true if cookie category is accepted by the user\n * @param {string} cookie_category\n * @returns {boolean}\n */\n _cookieconsent.allowedCategory = function(cookie_category){\n\n if(!invalid_consent || _config.mode === 'opt-in')\n var allowed_categories = JSON.parse(_getCookie(_config.cookie_name, 'one', true) || '{}')['categories'] || []\n else // mode is 'opt-out'\n var allowed_categories = default_enabled_categories;\n\n return _inArray(allowed_categories, cookie_category) > -1;\n }\n\n /**\n * \"Init\" method. Will run once and only if modals do not exist\n */\n _cookieconsent.run = function(user_config){\n if(!document.getElementById('cc_div')){\n\n // configure all parameters\n _setConfig(user_config);\n\n // if is bot, don't run plugin\n if(is_bot) return;\n\n // Retrieve cookie value (if set)\n saved_cookie_content = JSON.parse(_getCookie(_config.cookie_name, 'one', true) || \"{}\");\n\n // Retrieve \"consent_uuid\"\n consent_uuid = saved_cookie_content['consent_uuid'];\n\n // If \"consent_uuid\" is present => assume that consent was previously given\n var cookie_consent_accepted = consent_uuid !== undefined;\n\n // Retrieve \"consent_date\"\n consent_date = saved_cookie_content['consent_date'];\n consent_date && (consent_date = new Date(consent_date));\n\n // Retrieve \"last_consent_update\"\n last_consent_update = saved_cookie_content['last_consent_update'];\n last_consent_update && (last_consent_update = new Date(last_consent_update));\n\n // Retrieve \"data\"\n cookie_data = saved_cookie_content['data'] !== undefined ? saved_cookie_content['data'] : null;\n\n // If revision is enabled and current value !== saved value inside the cookie => revision is not valid\n if(revision_enabled && saved_cookie_content['revision'] !== _config.revision){\n valid_revision = false;\n }\n\n // If consent is not valid => create consent modal\n consent_modal_exists = invalid_consent = (!cookie_consent_accepted || !valid_revision || !consent_date || !last_consent_update || !consent_uuid);\n\n // Generate cookie-settings dom (& consent modal)\n _createCookieConsentHTML();\n\n _getModalFocusableData();\n _guiManager(user_config['gui_options']);\n _addDataButtonListeners();\n\n if(_config.autorun && consent_modal_exists){\n _cookieconsent.show(user_config['delay'] || 0);\n }\n\n // Add class to enable animations/transitions\n setTimeout(function(){_addClass(main_container, 'c--anim');}, 30);\n\n // Accessibility :=> if tab pressed => trap focus inside modal\n setTimeout(function(){_handleFocusTrap();}, 100);\n\n // If consent is valid\n if(!invalid_consent){\n var rfc_prop_exists = typeof saved_cookie_content['rfc_cookie'] === \"boolean\";\n\n /*\n * Convert cookie to rfc format (if `use_rfc_cookie` is enabled)\n */\n if(!rfc_prop_exists || (rfc_prop_exists && saved_cookie_content['rfc_cookie'] !== _config.use_rfc_cookie)){\n saved_cookie_content['rfc_cookie'] = _config.use_rfc_cookie;\n _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n }\n\n /**\n * Update accept type\n */\n accept_type = _getAcceptType(_getCurrentCategoriesState());\n\n _manageExistingScripts();\n\n if(typeof onAccept === 'function')\n onAccept(saved_cookie_content);\n\n _log(\"CookieConsent [NOTICE]: consent already given!\", saved_cookie_content);\n\n }else{\n if(_config.mode === 'opt-out'){\n _log(\"CookieConsent [CONFIG] mode='\" + _config.mode + \"', default enabled categories:\", default_enabled_categories);\n _manageExistingScripts(default_enabled_categories);\n }\n _log(\"CookieConsent [NOTICE]: ask for consent!\");\n }\n }else{\n _log(\"CookieConsent [NOTICE]: cookie consent already attached to body!\");\n }\n }\n\n /**\n * Show settings modal (with optional delay)\n * @param {number} delay\n */\n _cookieconsent.showSettings = function(delay){\n setTimeout(function() {\n _addClass(html_dom, \"show--settings\");\n settings_container.setAttribute('aria-hidden', 'false');\n settings_modal_visible = true;\n\n /**\n * Set focus to the first focusable element inside settings modal\n */\n setTimeout(function(){\n // If there is no consent-modal, keep track of the last focused elem.\n if(!consent_modal_visible){\n last_elem_before_modal = document.activeElement;\n }else{\n last_consent_modal_btn_focus = document.activeElement;\n }\n\n if (settings_modal_focusable.length === 0) return;\n\n if(settings_modal_focusable[3]){\n settings_modal_focusable[3].focus();\n }else{\n settings_modal_focusable[0].focus();\n }\n current_modal_focusable = settings_modal_focusable;\n }, 200);\n\n _log(\"CookieConsent [SETTINGS]: show settings_modal\");\n }, delay > 0 ? delay : 0);\n }\n\n /**\n * This function handles the loading/activation logic of the already\n * existing scripts based on the current accepted cookie categories\n *\n * @param {string[]} [must_enable_categories]\n */\n var _manageExistingScripts = function(must_enable_categories){\n\n if(!_config.page_scripts) return;\n\n // get all the scripts with \"cookie-category\" attribute\n var scripts = document.querySelectorAll('script[' + _config.script_selector + ']');\n var accepted_categories = must_enable_categories || saved_cookie_content['categories'] || [];\n\n /**\n * Load scripts (sequentially), using a recursive function\n * which loops through the scripts array\n * @param {Element[]} scripts scripts to load\n * @param {number} index current script to load\n */\n var _loadScripts = function(scripts, index){\n if(index < scripts.length){\n\n var curr_script = scripts[index];\n var curr_script_category = curr_script.getAttribute(_config.script_selector);\n\n /**\n * If current script's category is on the array of categories\n * accepted by the user => load script\n */\n if(_inArray(accepted_categories, curr_script_category) > -1){\n\n curr_script.type = 'text/javascript';\n curr_script.removeAttribute(_config.script_selector);\n\n // get current script data-src\n var src = curr_script.getAttribute('data-src');\n\n // some scripts (like ga) might throw warning if data-src is present\n src && curr_script.removeAttribute('data-src');\n\n // create fresh script (with the same code)\n var fresh_script = _createNode('script');\n fresh_script.textContent = curr_script.innerHTML;\n\n // Copy attributes over to the new \"revived\" script\n (function(destination, source){\n var attributes = source.attributes;\n var len = attributes.length;\n for(var i=0; i the next script will not be loaded\n // until the current's script onload event triggers\n if(fresh_script.readyState) { // only required for IE <9\n fresh_script.onreadystatechange = function() {\n if (fresh_script.readyState === \"loaded\" || fresh_script.readyState === \"complete\" ) {\n fresh_script.onreadystatechange = null;\n _loadScripts(scripts, ++index);\n }\n };\n }else{ // others\n fresh_script.onload = function(){\n fresh_script.onload = null;\n _loadScripts(scripts, ++index);\n };\n }\n }\n\n // Replace current \"sleeping\" script with the new \"revived\" one\n curr_script.parentNode.replaceChild(fresh_script, curr_script);\n\n /**\n * If we managed to get here and scr is still set, it means that\n * the script is loading/loaded sequentially so don't go any further\n */\n if(src) return;\n }\n\n // Go to next script right away\n _loadScripts(scripts, ++index);\n }\n }\n\n _loadScripts(scripts, 0);\n }\n\n /**\n * Save custom data inside cookie\n * @param {object|string} new_data\n * @param {string} [mode]\n * @returns {boolean}\n */\n var _setCookieData = function(new_data, mode){\n\n var set = false;\n /**\n * If mode is 'update':\n * add/update only the specified props.\n */\n if(mode === 'update'){\n cookie_data = _cookieconsent.get('data');\n var same_type = typeof cookie_data === typeof new_data;\n\n if(same_type && typeof cookie_data === \"object\"){\n !cookie_data && (cookie_data = {});\n\n for(var prop in new_data){\n if(cookie_data[prop] !== new_data[prop]){\n cookie_data[prop] = new_data[prop]\n set = true;\n }\n }\n }else if((same_type || !cookie_data) && cookie_data !== new_data){\n cookie_data = new_data;\n set = true;\n }\n }else{\n cookie_data = new_data;\n set = true;\n }\n\n if(set){\n saved_cookie_content['data'] = cookie_data;\n _setCookie(_config.cookie_name, JSON.stringify(saved_cookie_content));\n }\n\n return set;\n }\n\n /**\n * Helper method to set a variety of fields\n * @param {string} field\n * @param {object} data\n * @returns {boolean}\n */\n _cookieconsent.set = function(field, data){\n switch(field){\n case 'data': return _setCookieData(data['value'], data['mode']);\n default: return false;\n }\n }\n\n /**\n * Retrieve data from existing cookie\n * @param {string} field\n * @param {string} [cookie_name]\n * @returns {any}\n */\n _cookieconsent.get = function(field, cookie_name){\n var cookie = JSON.parse(_getCookie(cookie_name || _config.cookie_name, 'one', true) || \"{}\");\n\n return cookie[field];\n }\n\n /**\n * Read current configuration value\n * @returns {any}\n */\n _cookieconsent.getConfig = function(field){\n return _config[field] || user_config[field];\n }\n\n /**\n * Obtain accepted and rejected categories\n * @returns {{accepted: string[], rejected: string[]}}\n */\n var _getCurrentCategoriesState = function(){\n\n // get accepted categories\n accepted_categories = saved_cookie_content['categories'] || [];\n\n // calculate rejected categories (all_categories - accepted_categories)\n rejected_categories = all_categories.filter(function(category){\n return (_inArray(accepted_categories, category) === -1);\n });\n\n return {\n accepted: accepted_categories,\n rejected: rejected_categories\n }\n }\n\n /**\n * Calculate \"accept type\" given current categories state\n * @param {{accepted: string[], rejected: string[]}} currentCategoriesState\n * @returns {string}\n */\n var _getAcceptType = function(currentCategoriesState){\n\n var type = 'custom';\n\n // number of categories marked as necessary/readonly\n var necessary_categories_length = readonly_categories.filter(function(readonly){\n return readonly === true;\n }).length;\n\n // calculate accept type based on accepted/rejected categories\n if(currentCategoriesState.accepted.length === all_categories.length)\n type = 'all';\n else if(currentCategoriesState.accepted.length === necessary_categories_length)\n type = 'necessary'\n\n return type;\n }\n\n /**\n * @typedef {object} userPreferences\n * @property {string} accept_type\n * @property {string[]} accepted_categories\n * @property {string[]} rejected_categories\n */\n\n /**\n * Retrieve current user preferences (summary)\n * @returns {userPreferences}\n */\n _cookieconsent.getUserPreferences = function(){\n var currentCategoriesState = _getCurrentCategoriesState();\n var accept_type = _getAcceptType(currentCategoriesState);\n\n return {\n 'accept_type': accept_type,\n 'accepted_categories': currentCategoriesState.accepted,\n 'rejected_categories': currentCategoriesState.rejected\n }\n }\n\n /**\n * Function which will run after script load\n * @callback scriptLoaded\n */\n\n /**\n * Dynamically load script (append to head)\n * @param {string} src\n * @param {scriptLoaded} callback\n * @param {object[]} [attrs] Custom attributes\n */\n _cookieconsent.loadScript = function(src, callback, attrs){\n\n var function_defined = typeof callback === 'function';\n\n // Load script only if not already loaded\n if(!document.querySelector('script[src=\"' + src + '\"]')){\n\n var script = _createNode('script');\n\n // if an array is provided => add custom attributes\n if(attrs && attrs.length > 0){\n for(var i=0; i run callback onload\n if(function_defined){\n script.onload = callback;\n }\n\n script.src = src;\n\n /**\n * Append script to head\n */\n document.head.appendChild(script);\n }else{\n function_defined && callback();\n }\n }\n\n /**\n * Manage dynamically loaded scripts: https://github.com/orestbida/cookieconsent/issues/101\n * If plugin has already run, call this method to enable\n * the newly added scripts based on currently selected preferences\n */\n _cookieconsent.updateScripts = function(){\n _manageExistingScripts();\n }\n\n /**\n * Show cookie consent modal (with delay parameter)\n * @param {number} [delay]\n * @param {boolean} [create_modal] create modal if it doesn't exist\n */\n _cookieconsent.show = function(delay, create_modal){\n\n if(create_modal === true)\n _createConsentModal(_config.current_lang);\n\n if(consent_modal_exists){\n setTimeout(function() {\n _addClass(html_dom, \"show--consent\");\n\n /**\n * Update attributes/internal statuses\n */\n consent_modal.setAttribute('aria-hidden', 'false');\n consent_modal_visible = true;\n\n setTimeout(function(){\n last_elem_before_modal = document.activeElement;\n current_modal_focusable = consent_modal_focusable;\n }, 200);\n\n _log(\"CookieConsent [MODAL]: show consent_modal\");\n }, delay > 0 ? delay : (create_modal ? 30 : 0));\n }\n }\n\n /**\n * Hide consent modal\n */\n _cookieconsent.hide = function(){\n if(consent_modal_exists){\n _removeClass(html_dom, \"show--consent\");\n consent_modal.setAttribute('aria-hidden', 'true');\n consent_modal_visible = false;\n\n setTimeout(function(){\n //restore focus to the last page element which had focus before modal opening\n last_elem_before_modal.focus();\n current_modal_focusable = null;\n }, 200);\n\n _log(\"CookieConsent [MODAL]: hide\");\n }\n }\n\n /**\n * Hide settings modal\n */\n _cookieconsent.hideSettings = function(){\n _removeClass(html_dom, \"show--settings\");\n settings_modal_visible = false;\n settings_container.setAttribute('aria-hidden', 'true');\n\n\n setTimeout(function(){\n /**\n * If consent modal is visible, focus him (instead of page document)\n */\n if(consent_modal_visible){\n last_consent_modal_btn_focus && last_consent_modal_btn_focus.focus();\n current_modal_focusable = consent_modal_focusable;\n }else{\n /**\n * Restore focus to last page element which had focus before modal opening\n */\n last_elem_before_modal && last_elem_before_modal.focus();\n current_modal_focusable = null;\n }\n\n clicked_inside_modal = false;\n }, 200);\n\n _log(\"CookieConsent [SETTINGS]: hide settings_modal\");\n }\n\n /**\n * Accept cookieconsent function API\n * @param {string[]|string} _categories - Categories to accept\n * @param {string[]} [_exclusions] - Excluded categories [optional]\n */\n _cookieconsent.accept = function(_categories, _exclusions){\n var categories = _categories || undefined;\n var exclusions = _exclusions || [];\n var to_accept = [];\n\n /**\n * Get all accepted categories\n * @returns {string[]}\n */\n var _getCurrentPreferences = function(){\n var toggles = document.querySelectorAll('.c-tgl') || [];\n var states = [];\n\n for(var i=0; i= 1){\n for(i=0; i 0){\n for(var i=0; i<_cookies.length; i++){\n this.validCookie(_cookies[i]) && cookies.push(_cookies[i]);\n }\n }else{\n this.validCookie(_cookies) && cookies.push(_cookies);\n }\n\n _eraseCookies(cookies, _path, domains);\n }\n\n /**\n * Set cookie, by specifying name and value\n * @param {string} name\n * @param {string} value\n */\n var _setCookie = function(name, value) {\n\n var cookie_expiration = _config.cookie_expiration;\n\n if(typeof _config.cookie_necessary_only_expiration === 'number' && accept_type === 'necessary')\n cookie_expiration = _config.cookie_necessary_only_expiration;\n\n value = _config.use_rfc_cookie ? encodeURIComponent(value) : value;\n\n var date = new Date();\n date.setTime(date.getTime() + (1000 * (cookie_expiration * 24 * 60 * 60)));\n var expires = \"; expires=\" + date.toUTCString();\n\n var cookieStr = name + \"=\" + (value || \"\") + expires + \"; Path=\" + _config.cookie_path + \";\";\n cookieStr += \" SameSite=\" + _config.cookie_same_site + \";\";\n\n // assures cookie works with localhost (=> don't specify domain if on localhost)\n if(window.location.hostname.indexOf(\".\") > -1){\n cookieStr += \" Domain=\" + _config.cookie_domain + \";\";\n }\n\n if(window.location.protocol === \"https:\") {\n cookieStr += \" Secure;\";\n }\n\n document.cookie = cookieStr;\n\n _log(\"CookieConsent [SET_COOKIE]: '\" + name + \"' expires after \" + cookie_expiration + \" day(s)\");\n }\n\n /**\n * Get cookie value by name,\n * returns the cookie value if found (or an array\n * of cookies if filter provided), otherwise empty string: \"\"\n * @param {string} name\n * @param {string} filter 'one' or 'all'\n * @param {boolean} [get_value] set to true to obtain its value\n * @returns {string|string[]}\n */\n var _getCookie = function(name, filter, get_value) {\n var found;\n\n if(filter === 'one'){\n found = document.cookie.match(\"(^|;)\\\\s*\" + name + \"\\\\s*=\\\\s*([^;]+)\");\n found = found ? (get_value ? found.pop() : name) : \"\";\n\n if(found && name === _config.cookie_name){\n try{\n found = JSON.parse(found)\n }catch(e){\n try {\n found = JSON.parse(decodeURIComponent(found))\n } catch (e) {\n // if I got here => cookie value is not a valid json string\n found = {};\n }\n }\n found = JSON.stringify(found);\n }\n }else if(filter === 'all'){\n // array of names of all existing cookies\n var cookies = document.cookie.split(/;\\s*/); found = [];\n for(var i=0; i {\n if (typeof gtag === \"function\") {\n if (cookie.accept_type === 'all') {\n gtag(gtagUpdate, grantedAll);\n console.log('grant all')\n } else {\n gtag(gtagUpdate, deniedAll);\n console.log('denny all')\n }\n } else {\n console.log('no analytics')\n }\n },\n onAccept: (cookie) => {\n if (typeof gtag === \"function\") {\n const consentState = (state) => {\n const consent = cookie.level.includes(state);\n return consent;\n };\n\n if (consentState('analytics') && !consentState('marketing')) {\n gtag(gtagUpdate, grantedAnalyticsOnly);\n // console.log('onAccept: grantedAnalyticsOnly');\n } else if (!consentState('analytics') && consentState('marketing')) {\n gtag(gtagUpdate, grantedAdOnly);\n // console.log('onAccept: grantedAdOnly');\n } else if (consentState('analytics') && consentState('marketing')) {\n gtag(gtagUpdate, grantedAll);\n // console.log('onAccept: grantedAll');\n } else {\n gtag(gtagUpdate, deniedAll);\n // console.log('onAccept: deniedAll');\n }\n } else {\n console.log('no analytics')\n }\n },\n onChange: (cookie) => {\n if (typeof gtag === \"function\") {\n const consentState = (state) => {\n const consent = cookie.level.includes(state);\n return consent;\n };\n\n if (consentState('analytics') && !consentState('marketing')) {\n gtag(gtagUpdate, grantedAnalyticsOnly);\n // console.log('onChange: grantedAnalyticsOnly');\n } else if (!consentState('analytics') && consentState('marketing')) {\n gtag(gtagUpdate, grantedAdOnly);\n // console.log('onChange: grantedAdOnly');\n } else if (consentState('analytics') && consentState('marketing')) {\n gtag(gtagUpdate, grantedAll);\n // console.log('onChange: grantedAll');\n } else {\n gtag(gtagUpdate, deniedAll);\n // console.log('onChange: deniedAll');\n }\n } else {\n console.log('no analytics')\n }\n },\n languages: {\n nl: {\n consent_modal: {\n title: 'Deze website gebruikt cookies',\n description: 'Wij gebruiken cookies om jouw gebruikservaring te verbeteren, het webverkeer te analyseren en gerichte advertenties te kunnen tonen via derde partijen. Voor meer info, lees hier onze privacyverklaring',\n primary_btn: {\n text: 'Ja, graag',\n role: 'accept_all'\n },\n secondary_btn: {\n text: 'Nee, liever niet',\n role: 'accept_necessary'\n }\n },\n settings_modal: {\n title: 'Cookie instellingen',\n save_settings_btn: 'Opslaan instellingen',\n accept_all_btn: 'Accepteren',\n close_btn_label: 'Sluiten',\n blocks: [\n {\n title: 'Over cookies',\n description: 'Wij maken gebruik van functionele, analytische en tracking cookies. Een cookie is een tekstbestandje dat bij het eerste bezoek aan deze website wordt opgeslagen door de browser van jouw computer, tablet of smartphone.'\n },\n {\n title: 'Functionele cookies (altijd aan)',\n description: 'Om onze website goed te laten werken en jou de beste ervaring te bieden zijn functionele cookies nodig.',\n toggle: {\n value: 'necessary',\n readonly: true\n }\n },\n {\n title: 'Analytische cookies',\n description: 'Google Analytics gebruikt deze cookies om de websitebeheerder een beeld te geven over de bezoekersstromen en klikgedrag.',\n toggle: {\n value: 'analytics',\n enabled: false,\n readonly: false\n }\n },\n {\n title: 'Marketing cookies',\n description: 'Dit zijn cookies die door Google Ads worden geplaatst. Google Ads cookie is voor het tonen van advertenties via derde partijen.',\n toggle: {\n value: 'marketing',\n enabled: false,\n readonly: false\n }\n }\n ]\n }\n }\n },\n gui_options: {\n consent_modal: {\n transition: 'slide'\n },\n settings_modal: {\n transition: 'slide'\n }\n }\n };\n\ncc.run(options);\n\nfunction gTagExists() {\n if (typeof gtag === \"function\") {\n\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n if (obj === null || obj === undefined) {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttr = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n hrefAttr = `#${hrefAttr.split('#')[1]}`\n }\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n if (typeof obj.jquery !== 'undefined') {\n obj = obj[0]\n }\n\n return typeof obj.nodeType !== 'undefined'\n}\n\nconst getElement = obj => {\n if (isElement(obj)) { // it's a jQuery object or a node element\n return obj.jquery ? obj[0] : obj\n }\n\n if (typeof obj === 'string' && obj.length > 0) {\n return document.querySelector(obj)\n }\n\n return null\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach(property => {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n })\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n return getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n // eslint-disable-next-line no-unused-expressions\n element.offsetHeight\n}\n\nconst getjQuery = () => {\n const { jQuery } = window\n\n if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n DOMContentLoadedCallbacks.forEach(callback => callback())\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n if (index === -1) {\n return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]\n }\n\n const listLength = list.length\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n getElement,\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n typeCheckConfig,\n isVisible,\n isDisabled,\n findShadowRoot,\n noop,\n getNextActiveElement,\n reflow,\n getjQuery,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin,\n execute,\n executeAfterTransition\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\nconst customEventsRegex = /^(mouseenter|mouseleave)/i\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getEvent(element) {\n const uid = getUidEvent(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n event.delegateTarget = element\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (let i = domElements.length; i--;) {\n if (domElements[i] === target) {\n event.delegateTarget = target\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n\n // To please ESLint\n return null\n }\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n const uidEventList = Object.keys(events)\n\n for (let i = 0, len = uidEventList.length; i < len; i++) {\n const event = events[uidEventList[i]]\n\n if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n return event\n }\n }\n\n return null\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n const delegation = typeof handler === 'string'\n const originalHandler = delegation ? delegationFn : handler\n\n let typeEvent = getTypeEvent(originalTypeEvent)\n const isNative = nativeEvents.has(typeEvent)\n\n if (!isNative) {\n typeEvent = originalTypeEvent\n }\n\n return [delegation, originalHandler, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n if (!handler) {\n handler = delegationFn\n delegationFn = null\n }\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (customEventsRegex.test(originalTypeEvent)) {\n const wrapFn = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n if (delegationFn) {\n delegationFn = wrapFn(delegationFn)\n } else {\n handler = wrapFn(handler)\n }\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n const events = getEvent(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null)\n\n if (previousFn) {\n previousFn.oneOff = previousFn.oneOff && oneOff\n\n return\n }\n\n const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = delegation ?\n bootstrapDelegationHandler(element, handler, delegationFn) :\n bootstrapHandler(element, handler)\n\n fn.delegationSelector = delegation ? handler : null\n fn.originalHandler = originalHandler\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, delegation)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n Object.keys(storeElementEvent).forEach(handlerKey => {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n\n removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n }\n })\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, false)\n },\n\n one(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFn) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getEvent(element)\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof originalHandler !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!events || !events[typeEvent]) {\n return\n }\n\n removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null)\n return\n }\n\n if (isNamespace) {\n Object.keys(events).forEach(elementEvent => {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n })\n }\n\n const storeElementEvent = events[typeEvent] || {}\n Object.keys(storeElementEvent).forEach(keyHandlers => {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n\n removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n }\n })\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n const isNative = nativeEvents.has(typeEvent)\n\n let jQueryEvent\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n let evt = null\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n if (isNative) {\n evt = document.createEvent('HTMLEvents')\n evt.initEvent(typeEvent, bubbles, true)\n } else {\n evt = new CustomEvent(event, {\n bubbles,\n cancelable: true\n })\n }\n\n // merge custom information in our event\n if (typeof args !== 'undefined') {\n Object.keys(args).forEach(key => {\n Object.defineProperty(evt, key, {\n get() {\n return args[key]\n }\n })\n })\n }\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true\n }\n\n if (val === 'false') {\n return false\n }\n\n if (val === Number(val).toString()) {\n return Number(val)\n }\n\n if (val === '' || val === 'null') {\n return null\n }\n\n return val\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n\n Object.keys(element.dataset)\n .filter(key => key.startsWith('bs'))\n .forEach(key => {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n })\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n },\n\n offset(element) {\n const rect = element.getBoundingClientRect()\n\n return {\n top: rect.top + window.pageYOffset,\n left: rect.left + window.pageXOffset\n }\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft\n }\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\nconst NODE_TEXT = 3\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children)\n .filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n\n let ancestor = element.parentNode\n\n while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n if (ancestor.matches(selector)) {\n parents.push(ancestor)\n }\n\n ancestor = ancestor.parentNode\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(', ')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport {\n executeAfterTransition,\n getElement\n} from './util/index'\nimport EventHandler from './dom/event-handler'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.1.3'\n\nclass BaseComponent {\n constructor(element) {\n element = getElement(element)\n\n if (!element) {\n return\n }\n\n this._element = element\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n Object.getOwnPropertyNames(this).forEach(propertyName => {\n this[propertyName] = null\n })\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n /** Static */\n\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getSelectorFromElement,\n getElementFromSelector,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n toggle: true,\n parent: null\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(null|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._isTransitioning = false\n this._config = this._getConfig(config)\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElem => foundElem === this._element)\n\n if (selector !== null && filterElement.length) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let actives = []\n let activesData\n\n if (this._config.parent) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)) // remove children if greater depth\n }\n\n const container = SelectorEngine.findOne(this._selector)\n if (actives.length) {\n const tempActiveData = actives.find(elem => container !== elem)\n activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null\n\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n actives.forEach(elemActive => {\n if (container !== elemActive) {\n Collapse.getOrCreateInstance(elemActive, { toggle: false }).hide()\n }\n\n if (!activesData) {\n Data.set(elemActive, DATA_KEY, null)\n }\n })\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const elem = getElementFromSelector(trigger)\n\n if (elem && !this._isShown(elem)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n SelectorEngine.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem))\n .forEach(element => {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n })\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n triggerArray.forEach(elem => {\n if (isOpen) {\n elem.classList.remove(CLASS_NAME_COLLAPSED)\n } else {\n elem.classList.add(CLASS_NAME_COLLAPSED)\n }\n\n elem.setAttribute('aria-expanded', isOpen)\n })\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n selectorElements.forEach(element => {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (isHTMLElement(element) && includeScale) {\n var offsetHeight = element.offsetHeight;\n var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n // Fallback to 1 in case both values are `0`\n\n if (offsetWidth > 0) {\n scaleX = round(rect.width) / offsetWidth || 1;\n }\n\n if (offsetHeight > 0) {\n scaleY = round(rect.height) / offsetHeight || 1;\n }\n }\n\n return {\n width: rect.width / scaleX,\n height: rect.height / scaleY,\n top: rect.top / scaleY,\n right: rect.right / scaleX,\n bottom: rect.bottom / scaleY,\n left: rect.left / scaleX,\n x: rect.left / scaleX,\n y: rect.top / scaleY\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst SPACE_KEY = 'Space'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_NAVBAR = 'navbar'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\n\nconst Default = {\n offset: [0, 2],\n boundary: 'clippingParents',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null,\n autoClose: true\n}\n\nconst DefaultType = {\n offset: '(array|string|function)',\n boundary: '(string|element)',\n reference: '(string|element|object)',\n display: 'string',\n popperConfig: '(null|object|function)',\n autoClose: '(boolean|string)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown(this._menu)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n const parent = Dropdown.getParentFromElement(this._element)\n // Totally disable Popper for Dropdowns in Navbar\n if (this._inNavbar) {\n Manipulator.setDataAttribute(this._menu, 'popper', 'none')\n } else {\n this._createPopper(parent)\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n !parent.closest(SELECTOR_NAVBAR_NAV)) {\n [].concat(...document.body.children)\n .forEach(elem => EventHandler.on(elem, 'mouseover', noop))\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown(this._menu)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n [].concat(...document.body.children)\n .forEach(elem => EventHandler.off(elem, 'mouseover', noop))\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper(parent) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false)\n\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n\n if (isDisplayStatic) {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static')\n }\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getMenuElement() {\n return SelectorEngine.next(this._element, SELECTOR_MENU)[0]\n }\n\n _getPlacement() {\n const parentDropdown = this._element.parentNode\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(val => Number.parseInt(val, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible)\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event && (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY))) {\n return\n }\n\n const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const context = Dropdown.getInstance(toggles[i])\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n if (!context._isShown()) {\n continue\n }\n\n const relatedTarget = {\n relatedTarget: context._element\n }\n\n if (event) {\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static getParentFromElement(element) {\n return getElementFromSelector(element) || element.parentNode\n }\n\n static dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.key === SPACE_KEY || (event.key !== ESCAPE_KEY &&\n ((event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY) ||\n event.target.closest(SELECTOR_MENU))) :\n !REGEXP_KEYDOWN.test(event.key)) {\n return\n }\n\n const isActive = this.classList.contains(CLASS_NAME_SHOW)\n\n if (!isActive && event.key === ESCAPE_KEY) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (isDisabled(this)) {\n return\n }\n\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0]\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (event.key === ESCAPE_KEY) {\n instance.hide()\n return\n }\n\n if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n if (!isActive) {\n instance.show()\n }\n\n instance._selectMenuItem(event)\n return\n }\n\n if (!isActive || event.key === SPACE_KEY) {\n Dropdown.clearMenus()\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","function openMenu() {\n const openBtn = document.getElementById('jsOpenMenu'),\n collapseMenu = document.getElementById('jsMenuCollapse');\n\n if (openBtn) {\n openBtn.addEventListener('click', () => {\n collapseMenu.classList.remove('d-none');\n setTimeout(() => {\n collapseMenu.classList.add('--collapse-enter');\n }, 1);\n setTimeout(() => {\n collapseMenu.classList.remove('--collapse-enter');\n }, 201);\n openBtn.setAttribute('aria-expanded', 'true');\n });\n }\n}\n\nfunction closeMenu() {\n const closeBtn = document.getElementById('jsCloseMenu'),\n openBtn = document.getElementById('jsOpenMenu'),\n collapseMenu = document.getElementById('jsMenuCollapse');\n\n if (closeBtn) {\n closeBtn.addEventListener('click', () => {\n collapseMenu.classList.add('--collapse-leave');\n setTimeout(() => {\n collapseMenu.classList.add('d-none');\n collapseMenu.classList.remove('--collapse-leave');\n }, 201);\n openBtn.setAttribute('aria-expanded', 'false');\n });\n }\n}\n\nfunction smallSizeMenu() {\n const menu = document.getElementById('jsNavigationMenu');\n\n if (menu) {\n menu.classList.add('--small');\n }\n}\n\nfunction defaultSizeMenu() {\n const menu = document.getElementById('jsNavigationMenu');\n\n if (menu) {\n menu.classList.remove('--small');\n }\n}\n\nfunction setBlurOverlay() {\n const lastElem = document.getElementsByClassName('lastelementoverlay'),\n closeMenu = document.getElementById('jsCloseMenu');\n\n if (lastElem.length > 0) {\n lastElem[0].addEventListener('blur', (event) => {\n closeMenu.focus();\n });\n }\n}\n\n\nopenMenu();\ncloseMenu();\nsetBlurOverlay();\n\nexport {\n smallSizeMenu,\n defaultSizeMenu\n};\n","var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","export function Events() {\n return {\n topics: {},\n on: function (eventName, fn) {\n this.topics[eventName] = this.topics[eventName] || [];\n this.topics[eventName].push(fn);\n },\n off: function(eventName, fn) {\n if (this.topics[eventName]) {\n for (var i = 0; i < this.topics[eventName].length; i++) {\n if (this.topics[eventName][i] === fn) {\n this.topics[eventName].splice(i, 1);\n break;\n }\n }\n }\n },\n emit: function (eventName, data) {\n data.type = eventName;\n if (this.topics[eventName]) {\n this.topics[eventName].forEach(function(fn) {\n fn(data, eventName);\n });\n }\n }\n };\n};","// Object.keys\nif (!Object.keys) {\n Object.keys = function(object) {\n var keys = [];\n for (var name in object) {\n if (Object.prototype.hasOwnProperty.call(object, name)) {\n keys.push(name);\n }\n }\n return keys;\n };\n}\n\n// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n Element.prototype.remove = function(){\n if(this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}\n\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n options = extend({\n container: '.slider',\n mode: 'carousel',\n axis: 'horizontal',\n items: 1,\n gutter: 0,\n edgePadding: 0,\n fixedWidth: false,\n autoWidth: false,\n viewportMax: false,\n slideBy: 1,\n center: false,\n controls: true,\n controlsPosition: 'top',\n controlsText: ['prev', 'next'],\n controlsContainer: false,\n prevButton: false,\n nextButton: false,\n nav: true,\n navPosition: 'top',\n navContainer: false,\n navAsThumbnails: false,\n arrowKeys: false,\n speed: 300,\n autoplay: false,\n autoplayPosition: 'top',\n autoplayTimeout: 5000,\n autoplayDirection: 'forward',\n autoplayText: ['start', 'stop'],\n autoplayHoverPause: false,\n autoplayButton: false,\n autoplayButtonOutput: true,\n autoplayResetOnVisibility: true,\n animateIn: 'tns-fadeIn',\n animateOut: 'tns-fadeOut',\n animateNormal: 'tns-normal',\n animateDelay: false,\n loop: true,\n rewind: false,\n autoHeight: false,\n responsive: false,\n lazyload: false,\n lazyloadSelector: '.tns-lazy-img',\n touch: true,\n mouseDrag: false,\n swipeAngle: 15,\n nested: false,\n preventActionWhenRunning: false,\n preventScrollOnTouch: false,\n freezable: true,\n onInit: false,\n useLocalStorage: true,\n nonce: false\n }, options || {});\n\n var doc = document,\n win = window,\n KEYS = {\n ENTER: 13,\n SPACE: 32,\n LEFT: 37,\n RIGHT: 39\n },\n tnsStorage = {},\n localStorageAccess = options.useLocalStorage;\n\n if (localStorageAccess) {\n // check browser version and local storage access\n var browserInfo = navigator.userAgent;\n var uid = new Date;\n\n try {\n tnsStorage = win.localStorage;\n if (tnsStorage) {\n tnsStorage.setItem(uid, uid);\n localStorageAccess = tnsStorage.getItem(uid) == uid;\n tnsStorage.removeItem(uid);\n } else {\n localStorageAccess = false;\n }\n if (!localStorageAccess) { tnsStorage = {}; }\n } catch(e) {\n localStorageAccess = false;\n }\n\n if (localStorageAccess) {\n // remove storage when browser version changes\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n }\n // update browserInfo\n localStorage['tnsApp'] = browserInfo;\n }\n }\n\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n // get element nodes from selectors\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\n optionsElements = {};\n\n tnsList.forEach(function(item) {\n if (typeof options[item] === 'string') {\n var str = options[item],\n el = doc.querySelector(str);\n optionsElements[item] = str;\n\n if (el && el.nodeName) {\n options[item] = el;\n } else {\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n return;\n }\n }\n });\n\n // make sure at least 1 slide\n if (options.container.children.length < 1) {\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n return;\n }\n\n // update options\n var responsive = options.responsive,\n nested = options.nested,\n carousel = options.mode === 'carousel' ? true : false;\n\n if (responsive) {\n // apply responsive[0] to options and remove it\n if (0 in responsive) {\n options = extend(options, responsive[0]);\n delete responsive[0];\n }\n\n var responsiveTem = {};\n for (var key in responsive) {\n var val = responsive[key];\n // update responsive\n // from: 300: 2\n // to:\n // 300: {\n // items: 2\n // }\n val = typeof val === 'number' ? {items: val} : val;\n responsiveTem[key] = val;\n }\n responsive = responsiveTem;\n responsiveTem = null;\n }\n\n // update options\n function updateOptions (obj) {\n for (var key in obj) {\n if (!carousel) {\n if (key === 'slideBy') { obj[key] = 'page'; }\n if (key === 'edgePadding') { obj[key] = false; }\n if (key === 'autoHeight') { obj[key] = false; }\n }\n\n // update responsive options\n if (key === 'responsive') { updateOptions(obj[key]); }\n }\n }\n if (!carousel) { updateOptions(options); }\n\n\n // === define and set variables ===\n if (!carousel) {\n options.axis = 'horizontal';\n options.slideBy = 'page';\n options.edgePadding = false;\n\n var animateIn = options.animateIn,\n animateOut = options.animateOut,\n animateDelay = options.animateDelay,\n animateNormal = options.animateNormal;\n }\n\n var horizontal = options.axis === 'horizontal' ? true : false,\n outerWrapper = doc.createElement('div'),\n innerWrapper = doc.createElement('div'),\n middleWrapper,\n container = options.container,\n containerParent = container.parentNode,\n containerHTML = container.outerHTML,\n slideItems = container.children,\n slideCount = slideItems.length,\n breakpointZone,\n windowWidth = getWindowWidth(),\n isOn = false;\n if (responsive) { setBreakpointZone(); }\n if (carousel) { container.className += ' tns-vpfix'; }\n\n // fixedWidth: viewport > rightBoundary > indexMax\n var autoWidth = options.autoWidth,\n fixedWidth = getOption('fixedWidth'),\n edgePadding = getOption('edgePadding'),\n gutter = getOption('gutter'),\n viewport = getViewportWidth(),\n center = getOption('center'),\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\n slideBy = getOption('slideBy'),\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n arrowKeys = getOption('arrowKeys'),\n speed = getOption('speed'),\n rewind = options.rewind,\n loop = rewind ? false : options.loop,\n autoHeight = getOption('autoHeight'),\n controls = getOption('controls'),\n controlsText = getOption('controlsText'),\n nav = getOption('nav'),\n touch = getOption('touch'),\n mouseDrag = getOption('mouseDrag'),\n autoplay = getOption('autoplay'),\n autoplayTimeout = getOption('autoplayTimeout'),\n autoplayText = getOption('autoplayText'),\n autoplayHoverPause = getOption('autoplayHoverPause'),\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n sheet = createStyleSheet(null, getOption('nonce')),\n lazyload = options.lazyload,\n lazyloadSelector = options.lazyloadSelector,\n slidePositions, // collection of slide positions\n slideItemsOut = [],\n cloneCount = loop ? getCloneCountForLoop() : 0,\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n rightBoundary = fixedWidth ? getRightBoundary() : null,\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n // transform\n transformAttr = horizontal ? 'left' : 'top',\n transformPrefix = '',\n transformPostfix = '',\n // index\n getIndexMax = (function () {\n if (fixedWidth) {\n return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n } else if (autoWidth) {\n return function() {\n for (var i = 0; i < slideCountNew; i++) {\n if (slidePositions[i] >= - rightBoundary) { return i; }\n }\n };\n } else {\n return function() {\n if (center && carousel && !loop) {\n return slideCount - 1;\n } else {\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n }\n };\n }\n })(),\n index = getStartIndex(getOption('startIndex')),\n indexCached = index,\n displayIndex = getCurrentSlide(),\n indexMin = 0,\n indexMax = !autoWidth ? getIndexMax() : null,\n // resize\n resizeTimer,\n preventActionWhenRunning = options.preventActionWhenRunning,\n swipeAngle = options.swipeAngle,\n moveDirectionExpected = swipeAngle ? '?' : true,\n running = false,\n onInit = options.onInit,\n events = new Events(),\n // id, class\n newContainerClasses = ' tns-slider tns-' + options.mode,\n slideId = container.id || getSlideId(),\n disable = getOption('disable'),\n disabled = false,\n freezable = options.freezable,\n freeze = freezable && !autoWidth ? getFreeze() : false,\n frozen = false,\n controlsEvents = {\n 'click': onControlsClick,\n 'keydown': onControlsKeydown\n },\n navEvents = {\n 'click': onNavClick,\n 'keydown': onNavKeydown\n },\n hoverEvents = {\n 'mouseover': mouseoverPause,\n 'mouseout': mouseoutRestart\n },\n visibilityEvent = {'visibilitychange': onVisibilityChange},\n docmentKeydownEvent = {'keydown': onDocumentKeydown},\n touchEvents = {\n 'touchstart': onPanStart,\n 'touchmove': onPanMove,\n 'touchend': onPanEnd,\n 'touchcancel': onPanEnd\n }, dragEvents = {\n 'mousedown': onPanStart,\n 'mousemove': onPanMove,\n 'mouseup': onPanEnd,\n 'mouseleave': onPanEnd\n },\n hasControls = hasOption('controls'),\n hasNav = hasOption('nav'),\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n hasAutoplay = hasOption('autoplay'),\n hasTouch = hasOption('touch'),\n hasMouseDrag = hasOption('mouseDrag'),\n slideActiveClass = 'tns-slide-active',\n slideClonedClass = 'tns-slide-cloned',\n imgCompleteClass = 'tns-complete',\n imgEvents = {\n 'load': onImgLoaded,\n 'error': onImgFailed\n },\n imgsComplete,\n liveregionCurrent,\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n // controls\n if (hasControls) {\n var controlsContainer = options.controlsContainer,\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n prevButton = options.prevButton,\n nextButton = options.nextButton,\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n prevIsButton,\n nextIsButton;\n }\n\n // nav\n if (hasNav) {\n var navContainer = options.navContainer,\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n navItems,\n pages = autoWidth ? slideCount : getPages(),\n pagesCached = 0,\n navClicked = -1,\n navCurrentIndex = getCurrentNavIndex(),\n navCurrentIndexCached = navCurrentIndex,\n navActiveClass = 'tns-nav-active',\n navStr = 'Carousel Page ',\n navStrCurrent = ' (Current Slide)';\n }\n\n // autoplay\n if (hasAutoplay) {\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n autoplayButton = options.autoplayButton,\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n autoplayHtmlStrings = ['', ' animation'],\n autoplayTimer,\n animating,\n autoplayHoverPaused,\n autoplayUserPaused,\n autoplayVisibilityPaused;\n }\n\n if (hasTouch || hasMouseDrag) {\n var initPosition = {},\n lastPosition = {},\n translateInit,\n disX,\n disY,\n panStart = false,\n rafIndex,\n getDist = horizontal ?\n function(a, b) { return a.x - b.x; } :\n function(a, b) { return a.y - b.y; };\n }\n\n // disable slider when slidecount <= items\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n if (TRANSFORM) {\n transformAttr = TRANSFORM;\n transformPrefix = 'translate';\n\n if (HAS3DTRANSFORMS) {\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n } else {\n transformPrefix += horizontal ? 'X(' : 'Y(';\n transformPostfix = ')';\n }\n\n }\n\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n initStructure();\n initSheet();\n initSliderTransform();\n\n // === COMMON FUNCTIONS === //\n function resetVariblesWhenDisable (condition) {\n if (condition) {\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n }\n }\n\n function getCurrentSlide () {\n var tem = carousel ? index - cloneCount : index;\n while (tem < 0) { tem += slideCount; }\n return tem%slideCount + 1;\n }\n\n function getStartIndex (ind) {\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n return carousel ? ind + cloneCount : ind;\n }\n\n function getAbsIndex (i) {\n if (i == null) { i = index; }\n\n if (carousel) { i -= cloneCount; }\n while (i < 0) { i += slideCount; }\n\n return Math.floor(i%slideCount);\n }\n\n function getCurrentNavIndex () {\n var absIndex = getAbsIndex(),\n result;\n\n result = navAsThumbnails ? absIndex :\n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) :\n Math.floor(absIndex / items);\n\n // set active nav to the last one when reaches the right edge\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n return result;\n }\n\n function getItemsMax () {\n // fixedWidth or autoWidth while viewportMax is not available\n if (autoWidth || (fixedWidth && !viewportMax)) {\n return slideCount - 1;\n // most cases\n } else {\n var str = fixedWidth ? 'fixedWidth' : 'items',\n arr = [];\n\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n if (responsive) {\n for (var bp in responsive) {\n var tem = responsive[bp][str];\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n }\n }\n\n if (!arr.length) { arr.push(0); }\n\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n }\n }\n\n function getCloneCountForLoop () {\n var itemsMax = getItemsMax(),\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n result = Math.max(itemsMax, result);\n\n return hasOption('edgePadding') ? result + 1 : result;\n }\n\n function getWindowWidth () {\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n }\n\n function getInsertPosition (pos) {\n return pos === 'top' ? 'afterbegin' : 'beforeend';\n }\n\n function getClientWidth (el) {\n if (el == null) { return; }\n var div = doc.createElement('div'), rect, width;\n el.appendChild(div);\n rect = div.getBoundingClientRect();\n width = rect.right - rect.left;\n div.remove();\n return width || getClientWidth(el.parentNode);\n }\n\n function getViewportWidth () {\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n return getClientWidth(containerParent) - gap;\n }\n\n function hasOption (item) {\n if (options[item]) {\n return true;\n } else {\n if (responsive) {\n for (var bp in responsive) {\n if (responsive[bp][item]) { return true; }\n }\n }\n return false;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n function getOption (item, ww) {\n if (ww == null) { ww = windowWidth; }\n\n if (item === 'items' && fixedWidth) {\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n } else {\n var result = options[item];\n\n if (responsive) {\n for (var bp in responsive) {\n // bp: convert string to number\n if (ww >= parseInt(bp)) {\n if (item in responsive[bp]) { result = responsive[bp][item]; }\n }\n }\n }\n\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n return result;\n }\n }\n\n function getSlideMarginLeft (i) {\n return CALC ?\n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' :\n i * 100 / slideCountNew + '%';\n }\n\n function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n var str = '';\n\n if (edgePaddingTem !== undefined) {\n var gap = edgePaddingTem;\n if (gutterTem) { gap -= gutterTem; }\n str = horizontal ?\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n } else if (gutterTem && !fixedWidthTem) {\n var gutterTemUnit = '-' + gutterTem + 'px',\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n str = 'margin: 0 ' + dir + ';'\n }\n\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n return str;\n }\n\n function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n if (fixedWidthTem) {\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n } else {\n return CALC ?\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n slideCountNew * 100 / itemsTem + '%';\n }\n }\n\n function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n var width;\n\n if (fixedWidthTem) {\n width = (fixedWidthTem + gutterTem) + 'px';\n } else {\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\n var dividend = carousel ? slideCountNew : itemsTem;\n width = CALC ?\n CALC + '(100% / ' + dividend + ')' :\n 100 / dividend + '%';\n }\n\n width = 'width:' + width;\n\n // inner slider: overwrite outer slider styles\n return nested !== 'inner' ? width + ';' : width + ' !important;';\n }\n\n function getSlideGutterStyle (gutterTem) {\n var str = '';\n\n // gutter maybe interger || 0\n // so can't use 'if (gutter)'\n if (gutterTem !== false) {\n var prop = horizontal ? 'padding-' : 'margin-',\n dir = horizontal ? 'right' : 'bottom';\n str = prop + dir + ': ' + gutterTem + 'px;';\n }\n\n return str;\n }\n\n function getCSSPrefix (name, num) {\n var prefix = name.substring(0, name.length - num).toLowerCase();\n if (prefix) { prefix = '-' + prefix + '-'; }\n\n return prefix;\n }\n\n function getTransitionDurationStyle (speed) {\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n }\n\n function getAnimationDurationStyle (speed) {\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n }\n\n function initStructure () {\n var classOuter = 'tns-outer',\n classInner = 'tns-inner',\n hasGutter = hasOption('gutter');\n\n outerWrapper.className = classOuter;\n innerWrapper.className = classInner;\n outerWrapper.id = slideId + '-ow';\n innerWrapper.id = slideId + '-iw';\n\n // set container properties\n if (container.id === '') { container.id = slideId; }\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n newContainerClasses += ' tns-' + options.axis;\n container.className += newContainerClasses;\n\n // add constrain layer for carousel\n if (carousel) {\n middleWrapper = doc.createElement('div');\n middleWrapper.id = slideId + '-mw';\n middleWrapper.className = 'tns-ovh';\n\n outerWrapper.appendChild(middleWrapper);\n middleWrapper.appendChild(innerWrapper);\n } else {\n outerWrapper.appendChild(innerWrapper);\n }\n\n if (autoHeight) {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.className += ' tns-ah';\n }\n\n containerParent.insertBefore(outerWrapper, container);\n innerWrapper.appendChild(container);\n\n // add id, class, aria attributes\n // before clone slides\n forEach(slideItems, function(item, i) {\n addClass(item, 'tns-item');\n if (!item.id) { item.id = slideId + '-item' + i; }\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n });\n\n // ## clone slides\n // carousel: n + slides + n\n // gallery: slides + n\n if (cloneCount) {\n var fragmentBefore = doc.createDocumentFragment(),\n fragmentAfter = doc.createDocumentFragment();\n\n for (var j = cloneCount; j--;) {\n var num = j%slideCount,\n cloneFirst = slideItems[num].cloneNode(true);\n addClass(cloneFirst, slideClonedClass);\n removeAttrs(cloneFirst, 'id');\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n if (carousel) {\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n addClass(cloneLast, slideClonedClass);\n removeAttrs(cloneLast, 'id');\n fragmentBefore.appendChild(cloneLast);\n }\n }\n\n container.insertBefore(fragmentBefore, container.firstChild);\n container.appendChild(fragmentAfter);\n slideItems = container.children;\n }\n\n }\n\n function initSliderTransform () {\n // ## images loaded/failed\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\n var imgs = container.querySelectorAll('img');\n\n // add img load event listener\n forEach(imgs, function(img) {\n var src = img.src;\n\n if (!lazyload) {\n // not data img\n if (src && src.indexOf('data:image') < 0) {\n img.src = '';\n addEvents(img, imgEvents);\n addClass(img, 'loading');\n\n img.src = src;\n // data img\n } else {\n imgLoaded(img);\n }\n }\n });\n\n // set imgsComplete\n raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n // reset imgs for auto height: check visible imgs only\n if (hasOption('autoHeight')) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n } else {\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n }\n\n function initSliderTransformStyleCheck () {\n if (autoWidth && slideCount > 1) {\n // check styles application\n var num = loop ? index : slideCount - 1;\n\n (function stylesApplicationCheck() {\n var left = slideItems[num].getBoundingClientRect().left;\n var right = slideItems[num - 1].getBoundingClientRect().right;\n\n (Math.abs(left - right) <= 1) ?\n initSliderTransformCore() :\n setTimeout(function(){ stylesApplicationCheck() }, 16);\n })();\n\n } else {\n initSliderTransformCore();\n }\n }\n\n\n function initSliderTransformCore () {\n // run Fn()s which are rely on image loading\n if (!horizontal || autoWidth) {\n setSlidePositions();\n\n if (autoWidth) {\n rightBoundary = getRightBoundary();\n if (freezable) { freeze = getFreeze(); }\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n resetVariblesWhenDisable(disable || freeze);\n } else {\n updateContentWrapperHeight();\n }\n }\n\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n\n function initSheet () {\n // gallery:\n // set animation classes and left value for gallery slider\n if (!carousel) {\n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n var item = slideItems[i];\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // #### LAYOUT\n\n // ## INLINE-BLOCK VS FLOAT\n\n // ## PercentageLayout:\n // slides: inline-block\n // remove blank space between slides by set font-size: 0\n\n // ## Non PercentageLayout:\n // slides: float\n // margin-right: -100%\n // margin-left: ~\n\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n if (horizontal) {\n if (PERCENTAGELAYOUT || autoWidth) {\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n } else if (carousel) {\n forEach(slideItems, function (slide, i) {\n slide.style.marginLeft = getSlideMarginLeft(i);\n });\n }\n }\n\n\n // ## BASIC STYLES\n if (CSSMQ) {\n // middle wrapper style\n if (TRANSITIONDURATION) {\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n }\n\n // inner wrapper styles\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n // container styles\n if (carousel) {\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n }\n\n // slide styles\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n // set gallery items transition-duration\n if (!carousel) {\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n }\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n // non CSS mediaqueries: IE8\n // ## update inner wrapper, container, slides if needed\n // set inline styles for inner wrapper & container\n // insert stylesheet (one line) for slides only (since slides are many)\n } else {\n // middle wrapper styles\n update_carousel_transition_duration();\n\n // inner wrapper styles\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n // container styles\n if (carousel && horizontal && !autoWidth) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n if (gutter) { str += getSlideGutterStyle(gutter); }\n\n // append to the last line\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n }\n\n // ## MEDIAQUERIES\n if (responsive && CSSMQ) {\n for (var bp in responsive) {\n // bp: convert string to number\n bp = parseInt(bp);\n\n var opts = responsive[bp],\n str = '',\n middleWrapperStr = '',\n innerWrapperStr = '',\n containerStr = '',\n slideStr = '',\n itemsBP = !autoWidth ? getOption('items', bp) : null,\n fixedWidthBP = getOption('fixedWidth', bp),\n speedBP = getOption('speed', bp),\n edgePaddingBP = getOption('edgePadding', bp),\n autoHeightBP = getOption('autoHeight', bp),\n gutterBP = getOption('gutter', bp);\n\n // middle wrapper string\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n }\n\n // inner wrapper string\n if ('edgePadding' in opts || 'gutter' in opts) {\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n }\n\n // container string\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n }\n if (TRANSITIONDURATION && 'speed' in opts) {\n containerStr += getTransitionDurationStyle(speedBP);\n }\n if (containerStr) {\n containerStr = '#' + slideId + '{' + containerStr + '}';\n }\n\n // slide string\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n }\n if ('gutter' in opts) {\n slideStr += getSlideGutterStyle(gutterBP);\n }\n // set gallery items transition-duration\n if (!carousel && 'speed' in opts) {\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n }\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n // add up\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n if (str) {\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n }\n }\n }\n }\n\n function initTools () {\n // == slides ==\n updateSlideStatus();\n\n // == live region ==\n outerWrapper.insertAdjacentHTML('afterbegin', '
slide ' + getLiveRegionStr() + ' of ' + slideCount + '
');\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n // == autoplayInit ==\n if (hasAutoplay) {\n var txt = autoplay ? 'stop' : 'start';\n if (autoplayButton) {\n setAttrs(autoplayButton, {'data-action': txt});\n } else if (options.autoplayButtonOutput) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '');\n autoplayButton = outerWrapper.querySelector('[data-action]');\n }\n\n // add event\n if (autoplayButton) {\n addEvents(autoplayButton, {'click': toggleAutoplay});\n }\n\n if (autoplay) {\n startAutoplay();\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n }\n }\n\n // == navInit ==\n if (hasNav) {\n var initIndex = !carousel ? 0 : cloneCount;\n // customized nav\n // will not hide the navs in case they're thumbnails\n if (navContainer) {\n setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n navItems = navContainer.children;\n forEach(navItems, function(item, i) {\n setAttrs(item, {\n 'data-nav': i,\n 'tabindex': '-1',\n 'aria-label': navStr + (i + 1),\n 'aria-controls': slideId,\n });\n });\n\n // generated nav\n } else {\n var navHtml = '',\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n for (var i = 0; i < slideCount; i++) {\n // hide nav items by default\n navHtml += '';\n }\n navHtml = '
' + navHtml + '
';\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n navContainer = outerWrapper.querySelector('.tns-nav');\n navItems = navContainer.children;\n }\n\n updateNavVisibility();\n\n // add transition\n if (TRANSITIONDURATION) {\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n str = 'transition: all ' + speed / 1000 + 's';\n\n if (prefix) {\n str = '-' + prefix + '-' + str;\n }\n\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n }\n\n setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\n addClass(navItems[navCurrentIndex], navActiveClass);\n\n // add events\n addEvents(navContainer, navEvents);\n }\n\n\n\n // == controlsInit ==\n if (hasControls) {\n if (!controlsContainer && (!prevButton || !nextButton)) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '
');\n\n controlsContainer = outerWrapper.querySelector('.tns-controls');\n }\n\n if (!prevButton || !nextButton) {\n prevButton = controlsContainer.children[0];\n nextButton = controlsContainer.children[1];\n }\n\n if (options.controlsContainer) {\n setAttrs(controlsContainer, {\n 'aria-label': 'Carousel Navigation',\n 'tabindex': '0'\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs([prevButton, nextButton], {\n 'aria-controls': slideId,\n 'tabindex': '-1',\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs(prevButton, {'data-controls' : 'prev'});\n setAttrs(nextButton, {'data-controls' : 'next'});\n }\n\n prevIsButton = isButton(prevButton);\n nextIsButton = isButton(nextButton);\n\n updateControlsStatus();\n\n // add events\n if (controlsContainer) {\n addEvents(controlsContainer, controlsEvents);\n } else {\n addEvents(prevButton, controlsEvents);\n addEvents(nextButton, controlsEvents);\n }\n }\n\n // hide tools if needed\n disableUI();\n }\n\n function initEvents () {\n // add events\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n addEvents(container, eve);\n }\n\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n if (mouseDrag) { addEvents(container, dragEvents); }\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n if (nested === 'inner') {\n events.on('outerResized', function () {\n resizeTasks();\n events.emit('innerLoaded', info());\n });\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n addEvents(win, {'resize': onResize});\n }\n\n if (autoHeight) {\n if (nested === 'outer') {\n events.on('innerLoaded', doAutoHeight);\n } else if (!disable) { doAutoHeight(); }\n }\n\n doLazyLoad();\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n events.on('indexChanged', additionalUpdates);\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n if (typeof onInit === 'function') { onInit(info()); }\n isOn = true;\n }\n\n function destroy () {\n // sheet\n sheet.disabled = true;\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n // remove win event listeners\n removeEvents(win, {'resize': onResize});\n\n // arrowKeys, controls, nav\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n if (navContainer) { removeEvents(navContainer, navEvents); }\n\n // autoplay\n removeEvents(container, hoverEvents);\n removeEvents(container, visibilityEvent);\n if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n if (autoplay) { clearInterval(autoplayTimer); }\n\n // container\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n removeEvents(container, eve);\n }\n if (touch) { removeEvents(container, touchEvents); }\n if (mouseDrag) { removeEvents(container, dragEvents); }\n\n // cache Object values in options && reset HTML\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n tnsList.forEach(function(item, i) {\n var el = item === 'container' ? outerWrapper : options[item];\n\n if (typeof el === 'object' && el) {\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n parentEl = el.parentNode;\n el.outerHTML = htmlList[i];\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n }\n });\n\n\n // reset variables\n tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n // check variables\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n for (var a in this) {\n if (a !== 'rebuild') { this[a] = null; }\n }\n isOn = false;\n }\n\n// === ON RESIZE ===\n // responsive || fixedWidth || autoWidth || !horizontal\n function onResize (e) {\n raf(function(){ resizeTasks(getEvent(e)); });\n }\n\n function resizeTasks (e) {\n if (!isOn) { return; }\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\n windowWidth = getWindowWidth();\n var bpChanged,\n breakpointZoneTem = breakpointZone,\n needContainerTransform = false;\n\n if (responsive) {\n setBreakpointZone();\n bpChanged = breakpointZoneTem !== breakpointZone;\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n }\n\n var indChanged,\n itemsChanged,\n itemsTem = items,\n disableTem = disable,\n freezeTem = freeze,\n arrowKeysTem = arrowKeys,\n controlsTem = controls,\n navTem = nav,\n touchTem = touch,\n mouseDragTem = mouseDrag,\n autoplayTem = autoplay,\n autoplayHoverPauseTem = autoplayHoverPause,\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n indexTem = index;\n\n if (bpChanged) {\n var fixedWidthTem = fixedWidth,\n autoHeightTem = autoHeight,\n controlsTextTem = controlsText,\n centerTem = center,\n autoplayTextTem = autoplayText;\n\n if (!CSSMQ) {\n var gutterTem = gutter,\n edgePaddingTem = edgePadding;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n arrowKeys = getOption('arrowKeys');\n controls = getOption('controls');\n nav = getOption('nav');\n touch = getOption('touch');\n center = getOption('center');\n mouseDrag = getOption('mouseDrag');\n autoplay = getOption('autoplay');\n autoplayHoverPause = getOption('autoplayHoverPause');\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n if (bpChanged) {\n disable = getOption('disable');\n fixedWidth = getOption('fixedWidth');\n speed = getOption('speed');\n autoHeight = getOption('autoHeight');\n controlsText = getOption('controlsText');\n autoplayText = getOption('autoplayText');\n autoplayTimeout = getOption('autoplayTimeout');\n\n if (!CSSMQ) {\n edgePadding = getOption('edgePadding');\n gutter = getOption('gutter');\n }\n }\n // update options\n resetVariblesWhenDisable(disable);\n\n viewport = getViewportWidth(); // <= edgePadding, gutter\n if ((!horizontal || autoWidth) && !disable) {\n setSlidePositions();\n if (!horizontal) {\n updateContentWrapperHeight(); // <= setSlidePositions\n needContainerTransform = true;\n }\n }\n if (fixedWidth || autoWidth) {\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n // fixedWidth: <= viewport, fixedWidth, gutter\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\n }\n\n if (bpChanged || fixedWidth) {\n items = getOption('items');\n slideBy = getOption('slideBy');\n itemsChanged = items !== itemsTem;\n\n if (itemsChanged) {\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n // check index before transform in case\n // slider reach the right edge then items become bigger\n updateIndex();\n }\n }\n\n if (bpChanged) {\n if (disable !== disableTem) {\n if (disable) {\n disableSlider();\n } else {\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\n }\n }\n }\n\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\n // <= others: items\n\n if (freeze !== freezeTem) {\n if (freeze) {\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n freezeSlider();\n } else {\n unfreezeSlider();\n needContainerTransform = true;\n }\n }\n }\n\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n if (arrowKeys !== arrowKeysTem) {\n arrowKeys ?\n addEvents(doc, docmentKeydownEvent) :\n removeEvents(doc, docmentKeydownEvent);\n }\n if (controls !== controlsTem) {\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n } else {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n if (nav !== navTem) {\n if (nav) {\n showElement(navContainer);\n updateNavVisibility();\n } else {\n hideElement(navContainer)\n }\n }\n if (touch !== touchTem) {\n touch ?\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\n removeEvents(container, touchEvents);\n }\n if (mouseDrag !== mouseDragTem) {\n mouseDrag ?\n addEvents(container, dragEvents) :\n removeEvents(container, dragEvents);\n }\n if (autoplay !== autoplayTem) {\n if (autoplay) {\n if (autoplayButton) { showElement(autoplayButton); }\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\n } else {\n if (autoplayButton) { hideElement(autoplayButton); }\n if (animating) { stopAutoplay(); }\n }\n }\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\n autoplayHoverPause ?\n addEvents(container, hoverEvents) :\n removeEvents(container, hoverEvents);\n }\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n autoplayResetOnVisibility ?\n addEvents(doc, visibilityEvent) :\n removeEvents(doc, visibilityEvent);\n }\n\n if (bpChanged) {\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n if (autoHeight !== autoHeightTem) {\n if (!autoHeight) { innerWrapper.style.height = ''; }\n }\n\n if (controls && controlsText !== controlsTextTem) {\n prevButton.innerHTML = controlsText[0];\n nextButton.innerHTML = controlsText[1];\n }\n\n if (autoplayButton && autoplayText !== autoplayTextTem) {\n var i = autoplay ? 1 : 0,\n html = autoplayButton.innerHTML,\n len = html.length - autoplayTextTem[i].length;\n if (html.substring(len) === autoplayTextTem[i]) {\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n }\n }\n } else {\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n }\n\n if (itemsChanged || fixedWidth && !autoWidth) {\n pages = getPages();\n updateNavVisibility();\n }\n\n indChanged = index !== indexTem;\n if (indChanged) {\n events.emit('indexChanged', info());\n needContainerTransform = true;\n } else if (itemsChanged) {\n if (!indChanged) { additionalUpdates(); }\n } else if (fixedWidth || autoWidth) {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n }\n\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n if (!disable && !freeze) {\n // non-mediaqueries: IE8\n if (bpChanged && !CSSMQ) {\n // middle wrapper styles\n\n // inner wrapper styles\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n }\n\n if (horizontal) {\n // container styles\n if (carousel) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = getSlideWidthStyle(fixedWidth, gutter, items) +\n getSlideGutterStyle(gutter);\n\n // remove the last line and\n // add new styles\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n }\n }\n\n // auto height\n if (autoHeight) { doAutoHeight(); }\n\n if (needContainerTransform) {\n doContainerTransformSilent();\n indexCached = index;\n }\n }\n\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n }\n\n\n\n\n\n // === INITIALIZATION FUNCTIONS === //\n function getFreeze () {\n if (!fixedWidth && !autoWidth) {\n var a = center ? items - (items - 1) / 2 : items;\n return slideCount <= a;\n }\n\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n if (center) {\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n }\n\n return width <= vp;\n }\n\n function setBreakpointZone () {\n breakpointZone = 0;\n for (var bp in responsive) {\n bp = parseInt(bp); // convert string to number\n if (windowWidth >= bp) { breakpointZone = bp; }\n }\n }\n\n // (slideBy, indexMin, indexMax) => index\n var updateIndex = (function () {\n return loop ?\n carousel ?\n // loop + carousel\n function () {\n var leftEdge = indexMin,\n rightEdge = indexMax;\n\n leftEdge += slideBy;\n rightEdge -= slideBy;\n\n // adjust edges when has edge paddings\n // or fixed-width slider with extra space on the right side\n if (edgePadding) {\n leftEdge += 1;\n rightEdge -= 1;\n } else if (fixedWidth) {\n if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n }\n\n if (cloneCount) {\n if (index > rightEdge) {\n index -= slideCount;\n } else if (index < leftEdge) {\n index += slideCount;\n }\n }\n } :\n // loop + gallery\n function() {\n if (index > indexMax) {\n while (index >= indexMin + slideCount) { index -= slideCount; }\n } else if (index < indexMin) {\n while (index <= indexMax - slideCount) { index += slideCount; }\n }\n } :\n // non-loop\n function() {\n index = Math.max(indexMin, Math.min(indexMax, index));\n };\n })();\n\n function disableUI () {\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n if (!nav && navContainer) { hideElement(navContainer); }\n if (!controls) {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n\n function enableUI () {\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\n if (nav && navContainer) { showElement(navContainer); }\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n }\n }\n\n function freezeSlider () {\n if (frozen) { return; }\n\n // remove edge padding from inner wrapper\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n // add class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { addClass(slideItems[i], str); }\n addClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n disableUI();\n\n frozen = true;\n }\n\n function unfreezeSlider () {\n if (!frozen) { return; }\n\n // restore edge padding for inner wrapper\n // for mordern browsers\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n // remove class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { removeClass(slideItems[i], str); }\n removeClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n enableUI();\n\n frozen = false;\n }\n\n function disableSlider () {\n if (disabled) { return; }\n\n sheet.disabled = true;\n container.className = container.className.replace(newContainerClasses.substring(1), '');\n removeAttrs(container, ['style']);\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { hideElement(slideItems[j]); }\n hideElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // vertical slider\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i];\n removeAttrs(item, ['style']);\n removeClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // update tools\n disableUI();\n\n disabled = true;\n }\n\n function enableSlider () {\n if (!disabled) { return; }\n\n sheet.disabled = false;\n container.className += newContainerClasses;\n doContainerTransformSilent();\n\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { showElement(slideItems[j]); }\n showElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i],\n classN = i < index + items ? animateIn : animateNormal;\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, classN);\n }\n }\n\n // update tools\n enableUI();\n\n disabled = false;\n }\n\n function updateLiveRegion () {\n var str = getLiveRegionStr();\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n }\n\n function getLiveRegionStr () {\n var arr = getVisibleSlideRange(),\n start = arr[0] + 1,\n end = arr[1] + 1;\n return start === end ? start + '' : start + ' to ' + end;\n }\n\n function getVisibleSlideRange (val) {\n if (val == null) { val = getContainerTransformValue(); }\n var start = index, end, rangestart, rangeend;\n\n // get range start, range end for autoWidth and fixedWidth\n if (center || edgePadding) {\n if (autoWidth || fixedWidth) {\n rangestart = - (parseFloat(val) + edgePadding);\n rangeend = rangestart + viewport + edgePadding * 2;\n }\n } else {\n if (autoWidth) {\n rangestart = slidePositions[index];\n rangeend = rangestart + viewport;\n }\n }\n\n // get start, end\n // - check auto width\n if (autoWidth) {\n slidePositions.forEach(function(point, i) {\n if (i < slideCountNew) {\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n if (rangeend - point >= 0.5) { end = i; }\n }\n });\n\n // - check percentage width, fixed width\n } else {\n\n if (fixedWidth) {\n var cell = fixedWidth + gutter;\n if (center || edgePadding) {\n start = Math.floor(rangestart/cell);\n end = Math.ceil(rangeend/cell - 1);\n } else {\n end = start + Math.ceil(viewport/cell) - 1;\n }\n\n } else {\n if (center || edgePadding) {\n var a = items - 1;\n if (center) {\n start -= a / 2;\n end = index + a / 2;\n } else {\n end = index + a;\n }\n\n if (edgePadding) {\n var b = edgePadding * items / viewport;\n start -= b;\n end += b;\n }\n\n start = Math.floor(start);\n end = Math.ceil(end);\n } else {\n end = start + items - 1;\n }\n }\n\n start = Math.max(start, 0);\n end = Math.min(end, slideCountNew - 1);\n }\n\n return [start, end];\n }\n\n function doLazyLoad () {\n if (lazyload && !disable) {\n var arg = getVisibleSlideRange();\n arg.push(lazyloadSelector);\n\n getImageArray.apply(null, arg).forEach(function (img) {\n if (!hasClass(img, imgCompleteClass)) {\n // stop propagation transitionend event to container\n var eve = {};\n eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n addEvents(img, eve);\n\n addEvents(img, imgEvents);\n\n // update src\n img.src = getAttr(img, 'data-src');\n\n // update srcset\n var srcset = getAttr(img, 'data-srcset');\n if (srcset) { img.srcset = srcset; }\n\n addClass(img, 'loading');\n }\n });\n }\n }\n\n function onImgLoaded (e) {\n imgLoaded(getTarget(e));\n }\n\n function onImgFailed (e) {\n imgFailed(getTarget(e));\n }\n\n function imgLoaded (img) {\n addClass(img, 'loaded');\n imgCompleted(img);\n }\n\n function imgFailed (img) {\n addClass(img, 'failed');\n imgCompleted(img);\n }\n\n function imgCompleted (img) {\n addClass(img, imgCompleteClass);\n removeClass(img, 'loading');\n removeEvents(img, imgEvents);\n }\n\n function getImageArray (start, end, imgSelector) {\n var imgs = [];\n if (!imgSelector) { imgSelector = 'img'; }\n\n while (start <= end) {\n forEach(slideItems[start].querySelectorAll(imgSelector), function (img) { imgs.push(img); });\n start++;\n }\n\n return imgs;\n }\n\n // check if all visible images are loaded\n // and update container height if it's done\n function doAutoHeight () {\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\n raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n }\n\n function imgsLoadedCheck (imgs, cb) {\n // execute callback function if all images are complete\n if (imgsComplete) { return cb(); }\n\n // check image classes\n imgs.forEach(function (img, index) {\n if (!lazyload && img.complete) { imgCompleted(img); } // Check image.complete\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n });\n\n // execute callback function if selected images are all complete\n if (!imgs.length) { return cb(); }\n\n // otherwise execute this functiona again\n raf(function(){ imgsLoadedCheck(imgs, cb); });\n }\n\n function additionalUpdates () {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n updateControlsStatus();\n updateNavStatus();\n }\n\n\n function update_carousel_transition_duration () {\n if (carousel && autoHeight) {\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n }\n }\n\n function getMaxSlideHeight (slideStart, slideRange) {\n var heights = [];\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n heights.push(slideItems[i].offsetHeight);\n }\n\n return Math.max.apply(null, heights);\n }\n\n // update inner wrapper height\n // 1. get the max-height of the visible slides\n // 2. set transitionDuration to speed\n // 3. update inner wrapper height to max-height\n // 4. set transitionDuration to 0s after transition done\n function updateInnerWrapperHeight () {\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n wp = middleWrapper ? middleWrapper : innerWrapper;\n\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n }\n\n // get the distance from the top edge of the first slide to each slide\n // (init) => slidePositions\n function setSlidePositions () {\n slidePositions = [0];\n var attr = horizontal ? 'left' : 'top',\n attr2 = horizontal ? 'right' : 'bottom',\n base = slideItems[0].getBoundingClientRect()[attr];\n\n forEach(slideItems, function(item, i) {\n // skip the first slide\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n // add the end edge\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n });\n }\n\n // update slide\n function updateSlideStatus () {\n var range = getVisibleSlideRange(),\n start = range[0],\n end = range[1];\n\n forEach(slideItems, function(item, i) {\n // show slides\n if (i >= start && i <= end) {\n if (hasAttr(item, 'aria-hidden')) {\n removeAttrs(item, ['aria-hidden', 'tabindex']);\n addClass(item, slideActiveClass);\n }\n // hide slides\n } else {\n if (!hasAttr(item, 'aria-hidden')) {\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n removeClass(item, slideActiveClass);\n }\n }\n });\n }\n\n // gallery: update slide position\n function updateGallerySlidePositions () {\n var l = index + Math.min(slideCount, items);\n for (var i = slideCountNew; i--;) {\n var item = slideItems[i];\n\n if (i >= index && i < l) {\n // add transitions to visible slides when adjusting their positions\n addClass(item, 'tns-moving');\n\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n } else if (item.style.left) {\n item.style.left = '';\n addClass(item, animateNormal);\n removeClass(item, animateIn);\n }\n\n // remove outlet animation\n removeClass(item, animateOut);\n }\n\n // removing '.tns-moving'\n setTimeout(function() {\n forEach(slideItems, function(el) {\n removeClass(el, 'tns-moving');\n });\n }, 300);\n }\n\n // set tabindex on Nav\n function updateNavStatus () {\n // get current nav\n if (nav) {\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n navClicked = -1;\n\n if (navCurrentIndex !== navCurrentIndexCached) {\n var navPrev = navItems[navCurrentIndexCached],\n navCurrent = navItems[navCurrentIndex];\n\n setAttrs(navPrev, {\n 'tabindex': '-1',\n 'aria-label': navStr + (navCurrentIndexCached + 1)\n });\n removeClass(navPrev, navActiveClass);\n\n setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navCurrent, 'tabindex');\n addClass(navCurrent, navActiveClass);\n\n navCurrentIndexCached = navCurrentIndex;\n }\n }\n }\n\n function getLowerCaseNodeName (el) {\n return el.nodeName.toLowerCase();\n }\n\n function isButton (el) {\n return getLowerCaseNodeName(el) === 'button';\n }\n\n function isAriaDisabled (el) {\n return el.getAttribute('aria-disabled') === 'true';\n }\n\n function disEnableElement (isButton, el, val) {\n if (isButton) {\n el.disabled = val;\n } else {\n el.setAttribute('aria-disabled', val.toString());\n }\n }\n\n // set 'disabled' to true on controls when reach the edges\n function updateControlsStatus () {\n if (!controls || rewind || loop) { return; }\n\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n disablePrev = (index <= indexMin) ? true : false,\n disableNext = (!rewind && index >= indexMax) ? true : false;\n\n if (disablePrev && !prevDisabled) {\n disEnableElement(prevIsButton, prevButton, true);\n }\n if (!disablePrev && prevDisabled) {\n disEnableElement(prevIsButton, prevButton, false);\n }\n if (disableNext && !nextDisabled) {\n disEnableElement(nextIsButton, nextButton, true);\n }\n if (!disableNext && nextDisabled) {\n disEnableElement(nextIsButton, nextButton, false);\n }\n }\n\n // set duration\n function resetDuration (el, str) {\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n }\n\n function getSliderWidth () {\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n }\n\n function getCenterGap (num) {\n if (num == null) { num = index; }\n\n var gap = edgePadding ? gutter : 0;\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n fixedWidth ? (viewport - fixedWidth) / 2 :\n (items - 1) / 2;\n }\n\n function getRightBoundary () {\n var gap = edgePadding ? gutter : 0,\n result = (viewport + gap) - getSliderWidth();\n\n if (center && !loop) {\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n }\n if (result > 0) { result = 0; }\n\n return result;\n }\n\n function getContainerTransformValue (num) {\n if (num == null) { num = index; }\n\n var val;\n if (horizontal && !autoWidth) {\n if (fixedWidth) {\n val = - (fixedWidth + gutter) * num;\n if (center) { val += getCenterGap(); }\n } else {\n var denominator = TRANSFORM ? slideCountNew : items;\n if (center) { num -= getCenterGap(); }\n val = - num * 100 / denominator;\n }\n } else {\n val = - slidePositions[num];\n if (center && autoWidth) {\n val += getCenterGap();\n }\n }\n\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n return val;\n }\n\n function doContainerTransformSilent (val) {\n resetDuration(container, '0s');\n doContainerTransform(val);\n }\n\n function doContainerTransform (val) {\n if (val == null) { val = getContainerTransformValue(); }\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\n }\n\n function animateSlide (number, classOut, classIn, isOut) {\n var l = number + items;\n if (!loop) { l = Math.min(l, slideCountNew); }\n\n for (var i = number; i < l; i++) {\n var item = slideItems[i];\n\n // set item positions\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n if (animateDelay && TRANSITIONDELAY) {\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n }\n removeClass(item, classOut);\n addClass(item, classIn);\n\n if (isOut) { slideItemsOut.push(item); }\n }\n }\n\n // make transfer after click/drag:\n // 1. change 'transform' property for mordern browsers\n // 2. change 'left' property for legacy browsers\n var transformCore = (function () {\n return carousel ?\n function () {\n resetDuration(container, '');\n if (TRANSITIONDURATION || !speed) {\n // for morden browsers with non-zero duration or\n // zero duration for all browsers\n doContainerTransform();\n // run fallback function manually\n // when duration is 0 / container is hidden\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n } else {\n // for old browser with non-zero duration\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n }\n\n if (!horizontal) { updateContentWrapperHeight(); }\n } :\n function () {\n slideItemsOut = [];\n\n var eve = {};\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n removeEvents(slideItems[indexCached], eve);\n addEvents(slideItems[index], eve);\n\n animateSlide(indexCached, animateIn, animateOut, true);\n animateSlide(index, animateNormal, animateIn);\n\n // run fallback function manually\n // when transition or animation not supported / duration is 0\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n };\n })();\n\n function render (e, sliderMoved) {\n if (updateIndexBeforeTransform) { updateIndex(); }\n\n // render when slider was moved (touch or drag) even though index may not change\n if (index !== indexCached || sliderMoved) {\n // events\n events.emit('indexChanged', info());\n events.emit('transitionStart', info());\n if (autoHeight) { doAutoHeight(); }\n\n // pause autoplay when click or keydown from user\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n running = true;\n transformCore();\n }\n }\n\n /*\n * Transfer prefixed properties to the same format\n * CSS: -Webkit-Transform => webkittransform\n * JS: WebkitTransform => webkittransform\n * @param {string} str - property\n *\n */\n function strTrans (str) {\n return str.toLowerCase().replace(/-/g, '');\n }\n\n // AFTER TRANSFORM\n // Things need to be done after a transfer:\n // 1. check index\n // 2. add classes to visible slide\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\n // 4. update nav status\n // 5. lazyload images\n // 6. update container height\n function onTransitionEnd (event) {\n // check running on gallery mode\n // make sure trantionend/animationend events run only once\n if (carousel || running) {\n events.emit('transitionEnd', info(event));\n\n if (!carousel && slideItemsOut.length > 0) {\n for (var i = 0; i < slideItemsOut.length; i++) {\n var item = slideItemsOut[i];\n // set item positions\n item.style.left = '';\n\n if (ANIMATIONDELAY && TRANSITIONDELAY) {\n item.style[ANIMATIONDELAY] = '';\n item.style[TRANSITIONDELAY] = '';\n }\n removeClass(item, animateOut);\n addClass(item, animateNormal);\n }\n }\n\n /* update slides, nav, controls after checking ...\n * => legacy browsers who don't support 'event'\n * have to check event first, otherwise event.target will cause an error\n * => or 'gallery' mode:\n * + event target is slide item\n * => or 'carousel' mode:\n * + event target is container,\n * + event.property is the same with transform attribute\n */\n if (!event ||\n !carousel && event.target.parentNode === container ||\n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n if (!updateIndexBeforeTransform) {\n var indexTem = index;\n updateIndex();\n if (index !== indexTem) {\n events.emit('indexChanged', info());\n\n doContainerTransformSilent();\n }\n }\n\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n running = false;\n indexCached = index;\n }\n }\n\n }\n\n // # ACTIONS\n function goTo (targetIndex, e) {\n if (freeze) { return; }\n\n // prev slideBy\n if (targetIndex === 'prev') {\n onControlsClick(e, -1);\n\n // next slideBy\n } else if (targetIndex === 'next') {\n onControlsClick(e, 1);\n\n // go to exact slide\n } else {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n var absIndex = getAbsIndex(),\n indexGap = 0;\n\n if (targetIndex === 'first') {\n indexGap = - absIndex;\n } else if (targetIndex === 'last') {\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n } else {\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n if (!isNaN(targetIndex)) {\n // from directly called goTo function\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n indexGap = targetIndex - absIndex;\n }\n }\n\n // gallery: make sure new page won't overlap with current page\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\n var factor = indexGap > 0 ? 1 : -1;\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n }\n\n index += indexGap;\n\n // make sure index is in range\n if (carousel && loop) {\n if (index < indexMin) { index += slideCount; }\n if (index > indexMax) { index -= slideCount; }\n }\n\n // if index is changed, start rendering\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n render(e);\n }\n\n }\n }\n\n // on controls click\n function onControlsClick (e, dir) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n var passEventObject;\n\n if (!dir) {\n e = getEvent(e);\n var target = getTarget(e);\n\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n var targetIn = [prevButton, nextButton].indexOf(target);\n if (targetIn >= 0) {\n passEventObject = true;\n dir = targetIn === 0 ? -1 : 1;\n }\n }\n\n if (rewind) {\n if (index === indexMin && dir === -1) {\n goTo('last', e);\n return;\n } else if (index === indexMax && dir === 1) {\n goTo('first', e);\n return;\n }\n }\n\n if (dir) {\n index += slideBy * dir;\n if (autoWidth) { index = Math.floor(index); }\n // pass e when click control buttons or keydown\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n }\n }\n\n // on nav click\n function onNavClick (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n e = getEvent(e);\n var target = getTarget(e), navIndex;\n\n // find the clicked nav item\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n if (hasAttr(target, 'data-nav')) {\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n goTo(targetIndex, e);\n\n if (navCurrentIndex === navIndex) {\n if (animating) { stopAutoplay(); }\n navClicked = -1; // reset navClicked\n }\n }\n }\n\n // autoplay functions\n function setAutoplayTimer () {\n autoplayTimer = setInterval(function () {\n onControlsClick(null, autoplayDirection);\n }, autoplayTimeout);\n\n animating = true;\n }\n\n function stopAutoplayTimer () {\n clearInterval(autoplayTimer);\n animating = false;\n }\n\n function updateAutoplayButton (action, txt) {\n setAttrs(autoplayButton, {'data-action': action});\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n }\n\n function startAutoplay () {\n setAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n }\n\n function stopAutoplay () {\n stopAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n }\n\n // programaitcally play/pause the slider\n function play () {\n if (autoplay && !animating) {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n function pause () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n }\n }\n\n function toggleAutoplay () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n } else {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n\n function onVisibilityChange () {\n if (doc.hidden) {\n if (animating) {\n stopAutoplayTimer();\n autoplayVisibilityPaused = true;\n }\n } else if (autoplayVisibilityPaused) {\n setAutoplayTimer();\n autoplayVisibilityPaused = false;\n }\n }\n\n function mouseoverPause () {\n if (animating) {\n stopAutoplayTimer();\n autoplayHoverPaused = true;\n }\n }\n\n function mouseoutRestart () {\n if (autoplayHoverPaused) {\n setAutoplayTimer();\n autoplayHoverPaused = false;\n }\n }\n\n // keydown events on document\n function onDocumentKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\n }\n }\n\n // on key control\n function onControlsKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (!prevButton.disabled) { onControlsClick(e, -1); }\n } else if (!nextButton.disabled) {\n onControlsClick(e, 1);\n }\n }\n }\n\n // set focus\n function setFocus (el) {\n el.focus();\n }\n\n // on key nav\n function onNavKeydown (e) {\n e = getEvent(e);\n var curElement = doc.activeElement;\n if (!hasAttr(curElement, 'data-nav')) { return; }\n\n // var code = e.keyCode,\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n navIndex = Number(getAttr(curElement, 'data-nav'));\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n } else if (keyIndex === 1) {\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n } else {\n navClicked = navIndex;\n goTo(navIndex, e);\n }\n }\n }\n\n function getEvent (e) {\n e = e || win.event;\n return isTouchEvent(e) ? e.changedTouches[0] : e;\n }\n function getTarget (e) {\n return e.target || win.event.srcElement;\n }\n\n function isTouchEvent (e) {\n return e.type.indexOf('touch') >= 0;\n }\n\n function preventDefaultBehavior (e) {\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n function getMoveDirectionExpected () {\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n }\n\n function onPanStart (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n if (autoplay && animating) { stopAutoplayTimer(); }\n\n panStart = true;\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n\n var $ = getEvent(e);\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n preventDefaultBehavior(e);\n }\n\n lastPosition.x = initPosition.x = $.clientX;\n lastPosition.y = initPosition.y = $.clientY;\n if (carousel) {\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n resetDuration(container, '0s');\n }\n }\n\n function onPanMove (e) {\n if (panStart) {\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n\n if (carousel) {\n if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n } else {\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) { preventScroll = true; }\n }\n\n if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\n e.preventDefault();\n }\n }\n }\n\n function panUpdate (e) {\n if (!moveDirectionExpected) {\n panStart = false;\n return;\n }\n caf(rafIndex);\n if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) {\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n try {\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n } catch(err) {}\n\n var x = translateInit,\n dist = getDist(lastPosition, initPosition);\n if (!horizontal || fixedWidth || autoWidth) {\n x += dist;\n x += 'px';\n } else {\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n x += percentageX;\n x += '%';\n }\n\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\n }\n }\n\n function onPanEnd (e) {\n if (panStart) {\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n if (carousel) { resetDuration(container, ''); }\n panStart = false;\n\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n var dist = getDist(lastPosition, initPosition);\n\n if (Math.abs(dist)) {\n // drag vs click\n if (!isTouchEvent(e)) {\n // prevent \"click\"\n var target = getTarget(e);\n addEvents(target, {'click': function preventClick (e) {\n preventDefaultBehavior(e);\n removeEvents(target, {'click': preventClick});\n }});\n }\n\n if (carousel) {\n rafIndex = raf(function() {\n if (horizontal && !autoWidth) {\n var indexMoved = - dist * items / (viewport + gutter);\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n index += indexMoved;\n } else {\n var moved = - (translateInit + dist);\n if (moved <= 0) {\n index = indexMin;\n } else if (moved >= slidePositions[slideCountNew - 1]) {\n index = indexMax;\n } else {\n var i = 0;\n while (i < slideCountNew && moved >= slidePositions[i]) {\n index = i;\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\n i++;\n }\n }\n }\n\n render(e, dist);\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n });\n } else {\n if (moveDirectionExpected) {\n onControlsClick(e, dist > 0 ? -1 : 1);\n }\n }\n }\n }\n\n // reset\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n if (swipeAngle) { moveDirectionExpected = '?'; }\n if (autoplay && !animating) { setAutoplayTimer(); }\n }\n\n // === RESIZE FUNCTIONS === //\n // (slidePositions, index, items) => vertical_conentWrapper.height\n function updateContentWrapperHeight () {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n }\n\n function getPages () {\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n return Math.min(Math.ceil(rough), slideCount);\n }\n\n /*\n * 1. update visible nav items list\n * 2. add \"hidden\" attributes to previous visible nav items\n * 3. remove \"hidden\" attrubutes to new visible nav items\n */\n function updateNavVisibility () {\n if (!nav || navAsThumbnails) { return; }\n\n if (pages !== pagesCached) {\n var min = pagesCached,\n max = pages,\n fn = showElement;\n\n if (pagesCached > pages) {\n min = pages;\n max = pagesCached;\n fn = hideElement;\n }\n\n while (min < max) {\n fn(navItems[min]);\n min++;\n }\n\n // cache pages\n pagesCached = pages;\n }\n }\n\n function info (e) {\n return {\n container: container,\n slideItems: slideItems,\n navContainer: navContainer,\n navItems: navItems,\n controlsContainer: controlsContainer,\n hasControls: hasControls,\n prevButton: prevButton,\n nextButton: nextButton,\n items: items,\n slideBy: slideBy,\n cloneCount: cloneCount,\n slideCount: slideCount,\n slideCountNew: slideCountNew,\n index: index,\n indexCached: indexCached,\n displayIndex: getCurrentSlide(),\n navCurrentIndex: navCurrentIndex,\n navCurrentIndexCached: navCurrentIndexCached,\n pages: pages,\n pagesCached: pagesCached,\n sheet: sheet,\n isOn: isOn,\n event: e || {},\n };\n }\n\n return {\n version: '2.9.4',\n getInfo: info,\n events: events,\n goTo: goTo,\n play: play,\n pause: pause,\n isOn: isOn,\n updateSliderHeight: updateInnerWrapperHeight,\n refresh: initSliderTransform,\n destroy: destroy,\n rebuild: function() {\n return tns(extend(options, optionsElements));\n }\n };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '
';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n if (window.matchMedia || window.msMatchMedia) {\n return true;\n }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}\n","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n var id = window.tnsId;\n window.tnsId = !id ? 1 : id + 1;\n \n return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media, nonce) {\n // Create the