{"version":3,"sources":["../src/modal.js"],"names":["NAME","EVENT_KEY","JQUERY_NO_CONFLICT","$","Default","backdrop","keyboard","focus","show","DefaultType","Event","HIDE","HIDE_PREVENTED","HIDDEN","SHOW","SHOWN","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","CLICK_DATA_API","ClassName","Selector","DIALOG","MODAL_BODY","DATA_TOGGLE","DATA_DISMISS","FIXED_CONTENT","STICKY_CONTENT","Modal","element","config","this","_config","_getConfig","_element","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_isTransitioning","_scrollbarWidth","toggle","hide","relatedTarget","_this","showEvent","isDefaultPrevented","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","event","_showBackdrop","_showElement","_this2","hideEvent","transition","transitionDuration","Util","_hideModal","dispose","window","forEach","htmlElement","handleUpdate","_objectSpread2","_triggerBackdropTransition","_this3","hideEventPrevented","defaultPrevented","classList","add","modalTransitionDuration","remove","_this4","modalBody","querySelector","parentNode","nodeType","Node","ELEMENT_NODE","document","style","display","removeAttribute","setAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","animate","className","currentTarget","callback","backdropTransitionDuration","callbackRemove","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","rect","getBoundingClientRect","innerWidth","_getScrollbarWidth","_this10","fixedContent","slice","call","stickyContent","index","actualPadding","calculatedPadding","parseFloat","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","clientWidth","_jQueryInterface","each","data","_typeof","TypeError","target","_this11","selector","tagName","$target","one"],"mappings":"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","file":"../../../scripts/Bootstrap/modal-865872c4af.js","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.4.1'\nconst DATA_KEY = 'bs.modal'\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\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDE_PREVENTED : `hidePrevented${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLABLE : 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show',\n STATIC : 'modal-static'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n MODAL_BODY : '.modal-body',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(Event.HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.defaultPrevented) {\n return\n }\n\n this._element.classList.add(ClassName.STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(ClassName.STATIC)\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(Selector.MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(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](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n"]}