{"version":3,"sources":["../src/dropdown.js"],"names":["NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","REGEXP_KEYDOWN","RegExp","ARROW_UP_KEYCODE","Event","HIDE","HIDDEN","SHOW","SHOWN","CLICK","CLICK_DATA_API","KEYDOWN_DATA_API","KEYUP_DATA_API","ClassName","Selector","AttachmentMap","Default","offset","flip","boundary","reference","display","popperConfig","DefaultType","Dropdown","element","config","this","_element","_popper","_config","_getConfig","_menu","_getMenuElement","_inNavbar","_detectNavbar","_addEventListeners","toggle","disabled","isActive","show","usePopper","relatedTarget","showEvent","parent","isDefaultPrevented","Popper","TypeError","referenceElement","Util","jquery","_getPopperConfig","document","documentElement","focus","setAttribute","hide","hideEvent","destroy","dispose","update","scheduleUpdate","_this","event","_objectSpread2","constructor","data","_getPlacement","$parentDropdown","parentNode","placement","_getOffset","_this2","offsets","modifiers","enabled","preventOverflow","boundariesElement","_jQueryInterface","each","_typeof","_clearMenus","toggles","slice","call","i","len","length","context","dropdownMenu","test","target","_getParentFromElement","selector","_dataApiKeydownHandler","tagName","which","items","filter","item","index","e"],"mappings":"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","file":"../../../scripts/Bootstrap/dropdown-69db4b40a7.js","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n}\n\nconst Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n}\n\nconst AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n}\n\nconst Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic',\n popperConfig : null\n}\n\nconst DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string',\n popperConfig : '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\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).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\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 $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\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.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n .filter((item) => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\n\nexport default Dropdown\n"]}