{"version":3,"sources":["modal.js"],"names":["BaseComponent","EventHandler","SelectorEngine","Backdrop","enableDismissTrigger","FocusTrap","defineJQueryPlugin","isRTL","isVisible","reflow","ScrollBarHelper","NAME","DATA_KEY","EVENT_KEY","concat","DATA_API_KEY","ESCAPE_KEY","EVENT_HIDE","EVENT_HIDE_PREVENTED","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_CLICK_DATA_API","CLASS_NAME_OPEN","CLASS_NAME_FADE","CLASS_NAME_SHOW","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE","Default","backdrop","focus","keyboard","DefaultType","Modal","element","config","_classCallCheck","this","_this","_callSuper","_dialog","findOne","_element","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_isShown","_isTransitioning","_scrollBar","_addEventListeners","_inherits","_createClass","key","value","relatedTarget","hide","show","_this2","trigger","defaultPrevented","document","body","classList","add","_adjustDialog","_showElement","_this3","deactivate","remove","_queueCallback","_hideModal","_isAnimated","off","window","dispose","_get","_getPrototypeOf","prototype","call","Boolean","_config","isAnimated","trapElement","_this4","modalBody","contains","append","style","display","removeAttribute","setAttribute","scrollTop","activate","_this5","on","event","_triggerBackdropTransition","one","event2","target","_this6","_resetAdjustments","reset","isModalOverflowing","initialOverflowY","_this7","scrollHeight","documentElement","clientHeight","overflowY","property","scrollbarWidth","getWidth","isBodyOverflowing","paddingLeft","paddingRight","get","each","data","getOrCreateInstance","TypeError","_this8","getElementFromSelector","alreadyOpen","includes","tagName","showEvent","getInstance","toggle"],"mappings":"4uFAOAA,kBAAA,6BACAC,iBAAA,gCACAC,mBAAA,kCACAC,aAAA,4BACAC,oBAAA,KAAA,uCACAC,cAAA,6BAEAC,mBAAAC,MAAAC,UAAAC,MAdA,KAAA,yBACAC,oBAAA,sBAMA,IAAAC,KAAA,QACAC,SAAA,WACAC,UAAA,IAAAC,OAAAF,QAAA,EACAG,aAAA,YACAC,WAAA,SAEAC,WAAA,OAAAH,OAAAD,SAAA,EAGAK,qBAAA,gBAAAJ,OAAAD,SAAA,EAcAM,aAAA,SAAAL,OAAAD,SAAA,EAZAO,WAAA,OAAAN,OAAAD,SAAA,EACAQ,YAAA,QAAAP,OAAAD,SAAA,EACAS,aAAA,SAAAR,OAAAD,SAAA,EAcAU,oBAAA,gBAAAT,OAAAD,SAAA,EAZAW,wBAAA,oBAAAV,OAAAD,SAAA,EACAY,sBAAA,kBAAAX,OAAAD,SAAA,EACAa,qBAAA,QAAAZ,OAAAD,SAAA,EAAAC,OAAAC,YAAA,EAEAY,gBAAA,aAEAC,gBAAA,OACAC,gBAAA,OACAC,kBAAA,eAEAC,cAAA,cACAC,gBAAA,gBACAC,oBAAA,cACAC,qBAAA,2BAEAC,QAAA,CAEAC,SAAA,CAAA,EACAC,MAAA,CAAA,EACAC,SAAA,CAAA,CACA,EAGAC,YAAA,CACAH,SAAA,mBACAC,MAAA,UAEAC,SAAA,SAUA,EAMAE,MAAA,WACA,SAAAA,EAAAC,EAAAC,GAUA,OAVAC,gBAAAC,KAAAJ,CAAA,GAPAK,EAAAC,WAAAF,KAAAJ,EAAA,CAAAC,EAAAC,EAAA,GAEAK,QAAA7C,eAAA8C,QAAAhB,gBAAAa,EAAAI,QAAA,EACAJ,EAAAK,UAAAL,EAAAM,oBAAA,EACAN,EAAAO,WAAAP,EAAAQ,qBAAA,EAFAR,EAAAS,SAAA,CAAA,EAYAT,EAAAU,iBAAA,CAAA,EACAV,EAAAW,WAAA,IAAA9C,gBAEAmC,EAAAY,mBAAA,EAAAZ,CACA,CAEA,OAAAa,UAAAlB,EAdAxC,aAcA,EAAA2D,aAAAnB,EAAA,CAAA,CAAAoB,IAAA,SAAAC,MAcA,SAAAC,GACA,OAAAlB,KAAAU,SAAAV,KAAAmB,KAAA,EAAAnB,KAAAoB,KAAAF,CAAA,CACA,CAAA,EAAA,CAAAF,IAAA,OAAAC,MAEA,SAAAC,GAAA,IAAAG,EAAArB,KACAA,KAAAU,UAAAV,KAAAW,kBAIAtD,aAAAiE,QAAAtB,KAAAK,SAAA7B,WAAA,CACA0C,cAAAA,CACA,CAAA,EAEAK,mBAIAvB,KAAAU,SAAA,CAAA,EACAV,KAAAW,iBAAA,CAAA,EAEAX,KAAAY,WAAAO,KAAA,EAEAK,SAAAC,KAAAC,UAAAC,IAAA5C,eAAA,EAEAiB,KAAA4B,cAAA,EAEA5B,KAAAM,UAAAc,KAAA,WAAA,OAAAC,EAAAQ,aAAAX,CAAA,CAAA,CAAA,EACA,CAAA,EAAA,CAAAF,IAAA,OAAAC,MAEA,WAAA,IAAAa,EAAA9B,KACA,CAAAA,KAAAU,UAAAV,KAAAW,kBAIAtD,aAAAiE,QAAAtB,KAAAK,SAAAhC,UAAA,EAEAkD,mBAIAvB,KAAAU,SAAA,CAAA,EACAV,KAAAW,iBAAA,CAAA,EACAX,KAAAQ,WAAAuB,WAAA,EAEA/B,KAAAK,SAAAqB,UAAAM,OAAA/C,eAAA,EAEAe,KAAAiC,eAAA,WAAA,OAAAH,EAAAI,WAAA,CAAA,EAAAlC,KAAAK,SAAAL,KAAAmC,YAAA,CAAA,EACA,CAAA,EAAA,CAAAnB,IAAA,UAAAC,MAEA,WACA5D,aAAA+E,IAAAC,OAAApE,SAAA,EACAZ,aAAA+E,IAAApC,KAAAG,QAAAlC,SAAA,EAEA+B,KAAAM,UAAAgC,QAAA,EACAtC,KAAAQ,WAAAuB,WAAA,EAEAQ,KAAAC,gBAAA5C,EAAA6C,SAAA,EAAA,UAAAzC,IAAA,EAAA0C,KAAA1C,IAAA,CACA,CAAA,EAAA,CAAAgB,IAAA,eAAAC,MAEA,WACAjB,KAAA4B,cAAA,CACA,CAEA,EAAA,CAAAZ,IAAA,sBAAAC,MACA,WACA,OAAA,IAAA1D,SAAA,CACAK,UAAA+E,QAAA3C,KAAA4C,QAAApD,QAAA,EACAqD,WAAA7C,KAAAmC,YAAA,CACA,CAAA,CACA,CAAA,EAAA,CAAAnB,IAAA,uBAAAC,MAEA,WACA,OAAA,IAAAxD,UAAA,CACAqF,YAAA9C,KAAAK,QACA,CAAA,CACA,CAAA,EAAA,CAAAW,IAAA,eAAAC,MAEA,SAAAC,GAAA,IAAA6B,EAAA/C,KAYAgD,GAVAxB,SAAAC,KAAAwB,SAAAjD,KAAAK,QAAA,GACAmB,SAAAC,KAAAyB,OAAAlD,KAAAK,QAAA,EAGAL,KAAAK,SAAA8C,MAAAC,QAAA,QACApD,KAAAK,SAAAgD,gBAAA,aAAA,EACArD,KAAAK,SAAAiD,aAAA,aAAA,CAAA,CAAA,EACAtD,KAAAK,SAAAiD,aAAA,OAAA,QAAA,EACAtD,KAAAK,SAAAkD,UAAA,EAEAjG,eAAA8C,QAAAf,oBAAAW,KAAAG,OAAA,GACA6C,IACAA,EAAAO,UAAA,GAGA1F,OAAAmC,KAAAK,QAAA,EAEAL,KAAAK,SAAAqB,UAAAC,IAAA1C,eAAA,EAaAe,KAAAiC,eAXA,WACAc,EAAAH,QAAAnD,OACAsD,EAAAvC,WAAAgD,SAAA,EAGAT,EAAApC,iBAAA,CAAA,EACAtD,aAAAiE,QAAAyB,EAAA1C,SAAA5B,YAAA,CACAyC,cAAAA,CACA,CAAA,CACA,EAEAlB,KAAAG,QAAAH,KAAAmC,YAAA,CAAA,CACA,CAAA,EAAA,CAAAnB,IAAA,qBAAAC,MAEA,WAAA,IAAAwC,EAAAzD,KACA3C,aAAAqG,GAAA1D,KAAAK,SAAAxB,sBAAA,SAAA8E,GACAA,EAAA3C,MAAA5C,aAIAqF,EAAAb,QAAAlD,SACA+D,EAAAtC,KAAA,EAIAsC,EAAAG,2BAAA,EACA,CAAA,EAEAvG,aAAAqG,GAAArB,OAAA3D,aAAA,WACA+E,EAAA/C,UAAA,CAAA+C,EAAA9C,kBACA8C,EAAA7B,cAAA,CAEA,CAAA,EAEAvE,aAAAqG,GAAA1D,KAAAK,SAAAzB,wBAAA,SAAA+E,GAEAtG,aAAAwG,IAAAJ,EAAApD,SAAA1B,oBAAA,SAAAmF,GACAL,EAAApD,WAAAsD,EAAAI,QAAAN,EAAApD,WAAAyD,EAAAC,SAIA,WAAAN,EAAAb,QAAApD,SACAiE,EAAAG,2BAAA,EAIAH,EAAAb,QAAApD,UACAiE,EAAAtC,KAAA,EAEA,CAAA,CACA,CAAA,CACA,CAAA,EAAA,CAAAH,IAAA,aAAAC,MAEA,WAAA,IAAA+C,EAAAhE,KACAA,KAAAK,SAAA8C,MAAAC,QAAA,OACApD,KAAAK,SAAAiD,aAAA,cAAA,CAAA,CAAA,EACAtD,KAAAK,SAAAgD,gBAAA,YAAA,EACArD,KAAAK,SAAAgD,gBAAA,MAAA,EACArD,KAAAW,iBAAA,CAAA,EAEAX,KAAAM,UAAAa,KAAA,WACAK,SAAAC,KAAAC,UAAAM,OAAAjD,eAAA,EACAiF,EAAAC,kBAAA,EACAD,EAAApD,WAAAsD,MAAA,EACA7G,aAAAiE,QAAA0C,EAAA3D,SAAA9B,YAAA,CACA,CAAA,CACA,CAAA,EAAA,CAAAyC,IAAA,cAAAC,MAEA,WACA,OAAAjB,KAAAK,SAAAqB,UAAAuB,SAAAjE,eAAA,CACA,CAAA,EAAA,CAAAgC,IAAA,6BAAAC,MAEA,WAAA,IAMAkD,EACAC,EAPAC,EAAArE,KACA3C,aAAAiE,QAAAtB,KAAAK,SAAA/B,oBAAA,EACAiD,mBAIA4C,EAAAnE,KAAAK,SAAAiE,aAAA9C,SAAA+C,gBAAAC,aAGA,YAFAJ,EAAApE,KAAAK,SAAA8C,MAAAsB,aAEAzE,KAAAK,SAAAqB,UAAAuB,SAAA/D,iBAAA,IAIAiF,IACAnE,KAAAK,SAAA8C,MAAAsB,UAAA,UAGAzE,KAAAK,SAAAqB,UAAAC,IAAAzC,iBAAA,EACAc,KAAAiC,eAAA,WACAoC,EAAAhE,SAAAqB,UAAAM,OAAA9C,iBAAA,EAUAmF,EAAApC,eAAA,WACAoC,EAAAhE,SAAA8C,MAAAsB,UAAAL,CARA,EAAAC,EAAAlE,OAAA,CACA,EAAAH,KAAAG,OAAA,EAEAH,KAAAK,SAAAZ,MAAA,EACA,CAEA,EAAA,CAAAuB,IAAA,gBAAAC,MAIA,WACA,IAUAyD,EAVAP,EAAAnE,KAAAK,SAAAiE,aAAA9C,SAAA+C,gBAAAC,aACAG,EAAA3E,KAAAY,WAAAgE,SAAA,EACAC,EAAA,EAAAF,EAEAE,GAAA,CAAAV,IACAO,EAAA/G,MAAA,EAAA,cAAA,eACAqC,KAAAK,SAAA8C,MAAAuB,GAAA,GAAAxG,OAAAyG,EAAA,IAAA,GAGA,CAAAE,GAAAV,IACAO,EAAA/G,MAAA,EAAA,eAAA,cACAqC,KAAAK,SAAA8C,MAAAuB,GAAA,GAAAxG,OAAAyG,EAAA,IAAA,EAEA,CAAA,EAAA,CAAA3D,IAAA,oBAAAC,MAEA,WACAjB,KAAAK,SAAA8C,MAAA2B,YAAA,GACA9E,KAAAK,SAAA8C,MAAA4B,aAAA,EACA,CAEA,GAAA,CAAA,CAAA/D,IAAA,UAAAgE,IA5OA,WACA,OAAAzF,OACA,CAAA,EAAA,CAAAyB,IAAA,cAAAgE,IAEA,WACA,OAAArF,WACA,CAAA,EAAA,CAAAqB,IAAA,OAAAgE,IAEA,WACA,OAAAjH,IACA,CAAA,EAAA,CAAAiD,IAAA,kBAAAC,MAmOA,SAAAnB,EAAAoB,GACA,OAAAlB,KAAAiF,KAAA,WACA,IAAAC,EAAAtF,EAAAuF,oBAAAnF,KAAAF,CAAA,EAEA,GAAA,UAAA,OAAAA,EAAA,CAIA,GAAA,KAAA,IAAAoF,EAAApF,GACA,MAAA,IAAAsF,UAAA,oBAAAlH,OAAA4B,EAAA,GAAA,CAAA,EAGAoF,EAAApF,GAAAoB,CAAA,CANA,CAOA,CAAA,CACA,CAAA,EAAA,CAAA,EA1QA,EA0QA7D,aAAAqG,GAAAlC,SAAA1C,qBAAAQ,qBAAA,SAAAqE,GAAA,IAAA0B,EAAArF,KAGA+D,EAAAzG,eAAAgI,uBAAAtF,IAAA,EAyBAuF,GAvBA,CAAA,IAAA,QAAAC,SAAAxF,KAAAyF,OAAA,GAEApI,EAAAA,eAAAA,EAOAA,aAAAwG,IAAAE,EAAAvF,WAAA,SAAAkH,GACAA,EAAAnE,kBAKAlE,aAAAwG,IAAAE,EAAAxF,aAAA,WACAX,UAAAyH,CAAA,GACAA,EAAA5F,MAAA,CAEA,CAAA,CACA,CAAA,EAGAnC,eAAA8C,QAAAjB,aAAA,GACAoG,GACA3F,MAAA+F,YAAAJ,CAAA,EAAApE,KAAA,EAGAvB,MAAAuF,oBAAApB,CAAA,EAEA6B,OAAA5F,IAAA,CACA,CAAA,EAEAxC,qBAAAoC,KAAA,EAQAlC,mBAAAkC,KAAA,iBAAAA","file":"modal.js","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n 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 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\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._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.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](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n"]}