bootstrap 4.6.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -1
  3. data/README.md +7 -4
  4. data/assets/javascripts/bootstrap/alert.js +192 -115
  5. data/assets/javascripts/bootstrap/base-component.js +63 -0
  6. data/assets/javascripts/bootstrap/button.js +96 -179
  7. data/assets/javascripts/bootstrap/carousel.js +472 -359
  8. data/assets/javascripts/bootstrap/collapse.js +379 -225
  9. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  10. data/assets/javascripts/bootstrap/dom/event-handler.js +322 -0
  11. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  12. data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
  13. data/assets/javascripts/bootstrap/dropdown.js +472 -355
  14. data/assets/javascripts/bootstrap/modal.js +612 -438
  15. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  16. data/assets/javascripts/bootstrap/popover.js +138 -167
  17. data/assets/javascripts/bootstrap/scrollspy.js +250 -192
  18. data/assets/javascripts/bootstrap/tab.js +241 -144
  19. data/assets/javascripts/bootstrap/toast.js +223 -157
  20. data/assets/javascripts/bootstrap/tooltip.js +651 -487
  21. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  22. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  23. data/assets/javascripts/bootstrap-sprockets.js +8 -1
  24. data/assets/javascripts/bootstrap.js +3277 -2590
  25. data/assets/javascripts/bootstrap.min.js +3 -3
  26. data/assets/stylesheets/_bootstrap-grid.scss +53 -18
  27. data/assets/stylesheets/_bootstrap-reboot.scss +6 -3
  28. data/assets/stylesheets/_bootstrap.scss +18 -10
  29. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  30. data/assets/stylesheets/bootstrap/_alert.scss +15 -10
  31. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  32. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -17
  33. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  34. data/assets/stylesheets/bootstrap/_buttons.scss +29 -60
  35. data/assets/stylesheets/bootstrap/_card.scss +20 -91
  36. data/assets/stylesheets/bootstrap/_carousel.scss +64 -35
  37. data/assets/stylesheets/bootstrap/_close.scss +30 -30
  38. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  39. data/assets/stylesheets/bootstrap/_dropdown.scss +84 -36
  40. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  41. data/assets/stylesheets/bootstrap/_functions.scss +84 -69
  42. data/assets/stylesheets/bootstrap/_grid.scss +3 -54
  43. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  44. data/assets/stylesheets/bootstrap/_images.scss +1 -1
  45. data/assets/stylesheets/bootstrap/_list-group.scss +28 -8
  46. data/assets/stylesheets/bootstrap/_mixins.scss +8 -13
  47. data/assets/stylesheets/bootstrap/_modal.scss +45 -57
  48. data/assets/stylesheets/bootstrap/_nav.scss +20 -6
  49. data/assets/stylesheets/bootstrap/_navbar.scss +45 -71
  50. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  51. data/assets/stylesheets/bootstrap/_pagination.scss +10 -20
  52. data/assets/stylesheets/bootstrap/_popover.scss +24 -36
  53. data/assets/stylesheets/bootstrap/_progress.scss +5 -4
  54. data/assets/stylesheets/bootstrap/_reboot.scss +316 -179
  55. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  56. data/assets/stylesheets/bootstrap/_spinners.scss +11 -7
  57. data/assets/stylesheets/bootstrap/_tables.scss +79 -114
  58. data/assets/stylesheets/bootstrap/_toasts.scss +20 -15
  59. data/assets/stylesheets/bootstrap/_tooltip.scss +21 -21
  60. data/assets/stylesheets/bootstrap/_transitions.scss +2 -7
  61. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  62. data/assets/stylesheets/bootstrap/_utilities.scss +594 -18
  63. data/assets/stylesheets/bootstrap/_variables.scss +800 -485
  64. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  65. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  66. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  67. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
  70. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  71. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  72. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  73. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  74. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  75. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  76. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  77. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  78. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  79. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  80. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  81. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  82. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  83. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  84. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +71 -48
  85. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  86. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  87. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  88. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  89. data/assets/stylesheets/bootstrap/mixins/_forms.scss +39 -97
  90. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  91. data/assets/stylesheets/bootstrap/mixins/_grid.scss +90 -34
  92. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  93. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  94. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  95. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  96. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +3 -3
  97. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  98. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  99. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  100. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  101. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  102. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +214 -130
  103. data/bootstrap.gemspec +1 -3
  104. data/lib/bootstrap/version.rb +2 -2
  105. data/tasks/updater/js.rb +19 -16
  106. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  107. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  108. data/test/dummy_rails/app/views/pages/root.html +89 -0
  109. data/test/dummy_rails/config/application.rb +0 -3
  110. data/test/gemfiles/rails_6_1.gemfile +7 -0
  111. metadata +45 -73
  112. data/assets/javascripts/bootstrap/util.js +0 -189
  113. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  114. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  115. data/assets/stylesheets/bootstrap/_input-group.scss +0 -211
  116. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  117. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  118. data/assets/stylesheets/bootstrap/_print.scss +0 -132
  119. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  120. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  121. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  122. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  123. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  124. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  125. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  126. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  127. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  128. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  129. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  130. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  131. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  132. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  133. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  134. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  135. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  136. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  137. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  138. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  139. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  140. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  141. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  142. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  143. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  144. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  145. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  146. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  147. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  148. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  149. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,154 +1,488 @@
1
1
  /*!
2
- * Bootstrap modal.js v4.6.2 (https://getbootstrap.com/)
3
- * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap modal.js v5.0.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.jQuery, global.Util));
10
- })(this, (function ($, Util) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
+ }(this, (function (EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
14
- var $__default = /*#__PURE__*/_interopDefaultLegacy($);
15
- var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
14
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
17
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
16
18
 
17
- function _defineProperties(target, props) {
18
- for (var i = 0; i < props.length; i++) {
19
- var descriptor = props[i];
20
- descriptor.enumerable = descriptor.enumerable || false;
21
- descriptor.configurable = true;
22
- if ("value" in descriptor) descriptor.writable = true;
23
- Object.defineProperty(target, descriptor.key, descriptor);
19
+ /**
20
+ * --------------------------------------------------------------------------
21
+ * Bootstrap (v5.0.0): util/index.js
22
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23
+ * --------------------------------------------------------------------------
24
+ */
25
+ const MILLISECONDS_MULTIPLIER = 1000;
26
+ const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
27
+
28
+ const toType = obj => {
29
+ if (obj === null || obj === undefined) {
30
+ return `${obj}`;
24
31
  }
25
- }
26
32
 
27
- function _createClass(Constructor, protoProps, staticProps) {
28
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
29
- if (staticProps) _defineProperties(Constructor, staticProps);
30
- Object.defineProperty(Constructor, "prototype", {
31
- writable: false
33
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
34
+ };
35
+
36
+ const getSelector = element => {
37
+ let selector = element.getAttribute('data-bs-target');
38
+
39
+ if (!selector || selector === '#') {
40
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
41
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
42
+ // `document.querySelector` will rightfully complain it is invalid.
43
+ // See https://github.com/twbs/bootstrap/issues/32273
44
+
45
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
46
+ return null;
47
+ } // Just in case some CMS puts out a full URL with the anchor appended
48
+
49
+
50
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
51
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
52
+ }
53
+
54
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
55
+ }
56
+
57
+ return selector;
58
+ };
59
+
60
+ const getElementFromSelector = element => {
61
+ const selector = getSelector(element);
62
+ return selector ? document.querySelector(selector) : null;
63
+ };
64
+
65
+ const getTransitionDurationFromElement = element => {
66
+ if (!element) {
67
+ return 0;
68
+ } // Get transition-duration of the element
69
+
70
+
71
+ let {
72
+ transitionDuration,
73
+ transitionDelay
74
+ } = window.getComputedStyle(element);
75
+ const floatTransitionDuration = Number.parseFloat(transitionDuration);
76
+ const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
77
+
78
+ if (!floatTransitionDuration && !floatTransitionDelay) {
79
+ return 0;
80
+ } // If multiple durations are defined, take the first
81
+
82
+
83
+ transitionDuration = transitionDuration.split(',')[0];
84
+ transitionDelay = transitionDelay.split(',')[0];
85
+ return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
86
+ };
87
+
88
+ const triggerTransitionEnd = element => {
89
+ element.dispatchEvent(new Event(TRANSITION_END));
90
+ };
91
+
92
+ const isElement = obj => (obj[0] || obj).nodeType;
93
+
94
+ const emulateTransitionEnd = (element, duration) => {
95
+ let called = false;
96
+ const durationPadding = 5;
97
+ const emulatedDuration = duration + durationPadding;
98
+
99
+ function listener() {
100
+ called = true;
101
+ element.removeEventListener(TRANSITION_END, listener);
102
+ }
103
+
104
+ element.addEventListener(TRANSITION_END, listener);
105
+ setTimeout(() => {
106
+ if (!called) {
107
+ triggerTransitionEnd(element);
108
+ }
109
+ }, emulatedDuration);
110
+ };
111
+
112
+ const typeCheckConfig = (componentName, config, configTypes) => {
113
+ Object.keys(configTypes).forEach(property => {
114
+ const expectedTypes = configTypes[property];
115
+ const value = config[property];
116
+ const valueType = value && isElement(value) ? 'element' : toType(value);
117
+
118
+ if (!new RegExp(expectedTypes).test(valueType)) {
119
+ throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
120
+ }
32
121
  });
33
- return Constructor;
34
- }
122
+ };
35
123
 
36
- function _extends() {
37
- _extends = Object.assign ? Object.assign.bind() : function (target) {
38
- for (var i = 1; i < arguments.length; i++) {
39
- var source = arguments[i];
124
+ const isVisible = element => {
125
+ if (!element) {
126
+ return false;
127
+ }
40
128
 
41
- for (var key in source) {
42
- if (Object.prototype.hasOwnProperty.call(source, key)) {
43
- target[key] = source[key];
44
- }
129
+ if (element.style && element.parentNode && element.parentNode.style) {
130
+ const elementStyle = getComputedStyle(element);
131
+ const parentNodeStyle = getComputedStyle(element.parentNode);
132
+ return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
133
+ }
134
+
135
+ return false;
136
+ };
137
+
138
+ const reflow = element => element.offsetHeight;
139
+
140
+ const getjQuery = () => {
141
+ const {
142
+ jQuery
143
+ } = window;
144
+
145
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
146
+ return jQuery;
147
+ }
148
+
149
+ return null;
150
+ };
151
+
152
+ const onDOMContentLoaded = callback => {
153
+ if (document.readyState === 'loading') {
154
+ document.addEventListener('DOMContentLoaded', callback);
155
+ } else {
156
+ callback();
157
+ }
158
+ };
159
+
160
+ const isRTL = () => document.documentElement.dir === 'rtl';
161
+
162
+ const defineJQueryPlugin = (name, plugin) => {
163
+ onDOMContentLoaded(() => {
164
+ const $ = getjQuery();
165
+ /* istanbul ignore if */
166
+
167
+ if ($) {
168
+ const JQUERY_NO_CONFLICT = $.fn[name];
169
+ $.fn[name] = plugin.jQueryInterface;
170
+ $.fn[name].Constructor = plugin;
171
+
172
+ $.fn[name].noConflict = () => {
173
+ $.fn[name] = JQUERY_NO_CONFLICT;
174
+ return plugin.jQueryInterface;
175
+ };
176
+ }
177
+ });
178
+ };
179
+
180
+ const execute = callback => {
181
+ if (typeof callback === 'function') {
182
+ callback();
183
+ }
184
+ };
185
+
186
+ /**
187
+ * --------------------------------------------------------------------------
188
+ * Bootstrap (v5.0.0): util/scrollBar.js
189
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
190
+ * --------------------------------------------------------------------------
191
+ */
192
+ const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
193
+ const SELECTOR_STICKY_CONTENT = '.sticky-top';
194
+
195
+ const getWidth = () => {
196
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
197
+ const documentWidth = document.documentElement.clientWidth;
198
+ return Math.abs(window.innerWidth - documentWidth);
199
+ };
200
+
201
+ const hide = (width = getWidth()) => {
202
+ _disableOverFlow(); // give padding to element to balances the hidden scrollbar width
203
+
204
+
205
+ _setElementAttributes('body', 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements, to keep shown fullwidth
206
+
207
+
208
+ _setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);
209
+
210
+ _setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);
211
+ };
212
+
213
+ const _disableOverFlow = () => {
214
+ const actualValue = document.body.style.overflow;
215
+
216
+ if (actualValue) {
217
+ Manipulator__default['default'].setDataAttribute(document.body, 'overflow', actualValue);
218
+ }
219
+
220
+ document.body.style.overflow = 'hidden';
221
+ };
222
+
223
+ const _setElementAttributes = (selector, styleProp, callback) => {
224
+ const scrollbarWidth = getWidth();
225
+ SelectorEngine__default['default'].find(selector).forEach(element => {
226
+ if (element !== document.body && window.innerWidth > element.clientWidth + scrollbarWidth) {
227
+ return;
228
+ }
229
+
230
+ const actualValue = element.style[styleProp];
231
+ const calculatedValue = window.getComputedStyle(element)[styleProp];
232
+ Manipulator__default['default'].setDataAttribute(element, styleProp, actualValue);
233
+ element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;
234
+ });
235
+ };
236
+
237
+ const reset = () => {
238
+ _resetElementAttributes('body', 'overflow');
239
+
240
+ _resetElementAttributes('body', 'paddingRight');
241
+
242
+ _resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
243
+
244
+ _resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
245
+ };
246
+
247
+ const _resetElementAttributes = (selector, styleProp) => {
248
+ SelectorEngine__default['default'].find(selector).forEach(element => {
249
+ const value = Manipulator__default['default'].getDataAttribute(element, styleProp);
250
+
251
+ if (typeof value === 'undefined') {
252
+ element.style.removeProperty(styleProp);
253
+ } else {
254
+ Manipulator__default['default'].removeDataAttribute(element, styleProp);
255
+ element.style[styleProp] = value;
256
+ }
257
+ });
258
+ };
259
+
260
+ /**
261
+ * --------------------------------------------------------------------------
262
+ * Bootstrap (v5.0.0): util/backdrop.js
263
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
264
+ * --------------------------------------------------------------------------
265
+ */
266
+ const Default$1 = {
267
+ isVisible: true,
268
+ // if false, we use the backdrop helper without adding any element to the dom
269
+ isAnimated: false,
270
+ rootElement: document.body,
271
+ // give the choice to place backdrop under different elements
272
+ clickCallback: null
273
+ };
274
+ const DefaultType$1 = {
275
+ isVisible: 'boolean',
276
+ isAnimated: 'boolean',
277
+ rootElement: 'element',
278
+ clickCallback: '(function|null)'
279
+ };
280
+ const NAME$1 = 'backdrop';
281
+ const CLASS_NAME_BACKDROP = 'modal-backdrop';
282
+ const CLASS_NAME_FADE$1 = 'fade';
283
+ const CLASS_NAME_SHOW$1 = 'show';
284
+ const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$1}`;
285
+
286
+ class Backdrop {
287
+ constructor(config) {
288
+ this._config = this._getConfig(config);
289
+ this._isAppended = false;
290
+ this._element = null;
291
+ }
292
+
293
+ show(callback) {
294
+ if (!this._config.isVisible) {
295
+ execute(callback);
296
+ return;
297
+ }
298
+
299
+ this._append();
300
+
301
+ if (this._config.isAnimated) {
302
+ reflow(this._getElement());
303
+ }
304
+
305
+ this._getElement().classList.add(CLASS_NAME_SHOW$1);
306
+
307
+ this._emulateAnimation(() => {
308
+ execute(callback);
309
+ });
310
+ }
311
+
312
+ hide(callback) {
313
+ if (!this._config.isVisible) {
314
+ execute(callback);
315
+ return;
316
+ }
317
+
318
+ this._getElement().classList.remove(CLASS_NAME_SHOW$1);
319
+
320
+ this._emulateAnimation(() => {
321
+ this.dispose();
322
+ execute(callback);
323
+ });
324
+ } // Private
325
+
326
+
327
+ _getElement() {
328
+ if (!this._element) {
329
+ const backdrop = document.createElement('div');
330
+ backdrop.className = CLASS_NAME_BACKDROP;
331
+
332
+ if (this._config.isAnimated) {
333
+ backdrop.classList.add(CLASS_NAME_FADE$1);
45
334
  }
335
+
336
+ this._element = backdrop;
46
337
  }
47
338
 
48
- return target;
49
- };
50
- return _extends.apply(this, arguments);
339
+ return this._element;
340
+ }
341
+
342
+ _getConfig(config) {
343
+ config = { ...Default$1,
344
+ ...(typeof config === 'object' ? config : {})
345
+ };
346
+ typeCheckConfig(NAME$1, config, DefaultType$1);
347
+ return config;
348
+ }
349
+
350
+ _append() {
351
+ if (this._isAppended) {
352
+ return;
353
+ }
354
+
355
+ this._config.rootElement.appendChild(this._getElement());
356
+
357
+ EventHandler__default['default'].on(this._getElement(), EVENT_MOUSEDOWN, () => {
358
+ execute(this._config.clickCallback);
359
+ });
360
+ this._isAppended = true;
361
+ }
362
+
363
+ dispose() {
364
+ if (!this._isAppended) {
365
+ return;
366
+ }
367
+
368
+ EventHandler__default['default'].off(this._element, EVENT_MOUSEDOWN);
369
+
370
+ this._getElement().parentNode.removeChild(this._element);
371
+
372
+ this._isAppended = false;
373
+ }
374
+
375
+ _emulateAnimation(callback) {
376
+ if (!this._config.isAnimated) {
377
+ execute(callback);
378
+ return;
379
+ }
380
+
381
+ const backdropTransitionDuration = getTransitionDurationFromElement(this._getElement());
382
+ EventHandler__default['default'].one(this._getElement(), 'transitionend', () => execute(callback));
383
+ emulateTransitionEnd(this._getElement(), backdropTransitionDuration);
384
+ }
385
+
51
386
  }
52
387
 
53
388
  /**
389
+ * --------------------------------------------------------------------------
390
+ * Bootstrap (v5.0.0): modal.js
391
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
392
+ * --------------------------------------------------------------------------
393
+ */
394
+ /**
395
+ * ------------------------------------------------------------------------
54
396
  * Constants
397
+ * ------------------------------------------------------------------------
55
398
  */
56
399
 
57
- var NAME = 'modal';
58
- var VERSION = '4.6.2';
59
- var DATA_KEY = 'bs.modal';
60
- var EVENT_KEY = "." + DATA_KEY;
61
- var DATA_API_KEY = '.data-api';
62
- var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
63
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
64
-
65
- var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
66
- var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
67
- var CLASS_NAME_BACKDROP = 'modal-backdrop';
68
- var CLASS_NAME_OPEN = 'modal-open';
69
- var CLASS_NAME_FADE = 'fade';
70
- var CLASS_NAME_SHOW = 'show';
71
- var CLASS_NAME_STATIC = 'modal-static';
72
- var EVENT_HIDE = "hide" + EVENT_KEY;
73
- var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY;
74
- var EVENT_HIDDEN = "hidden" + EVENT_KEY;
75
- var EVENT_SHOW = "show" + EVENT_KEY;
76
- var EVENT_SHOWN = "shown" + EVENT_KEY;
77
- var EVENT_FOCUSIN = "focusin" + EVENT_KEY;
78
- var EVENT_RESIZE = "resize" + EVENT_KEY;
79
- var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
80
- var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY;
81
- var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY;
82
- var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY;
83
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
84
- var SELECTOR_DIALOG = '.modal-dialog';
85
- var SELECTOR_MODAL_BODY = '.modal-body';
86
- var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]';
87
- var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
88
- var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
89
- var SELECTOR_STICKY_CONTENT = '.sticky-top';
90
- var Default = {
400
+ const NAME = 'modal';
401
+ const DATA_KEY = 'bs.modal';
402
+ const EVENT_KEY = `.${DATA_KEY}`;
403
+ const DATA_API_KEY = '.data-api';
404
+ const ESCAPE_KEY = 'Escape';
405
+ const Default = {
91
406
  backdrop: true,
92
407
  keyboard: true,
93
- focus: true,
94
- show: true
408
+ focus: true
95
409
  };
96
- var DefaultType = {
410
+ const DefaultType = {
97
411
  backdrop: '(boolean|string)',
98
412
  keyboard: 'boolean',
99
- focus: 'boolean',
100
- show: 'boolean'
413
+ focus: 'boolean'
101
414
  };
415
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
416
+ const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;
417
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
418
+ const EVENT_SHOW = `show${EVENT_KEY}`;
419
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
420
+ const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
421
+ const EVENT_RESIZE = `resize${EVENT_KEY}`;
422
+ const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
423
+ const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
424
+ const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`;
425
+ const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;
426
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
427
+ const CLASS_NAME_OPEN = 'modal-open';
428
+ const CLASS_NAME_FADE = 'fade';
429
+ const CLASS_NAME_SHOW = 'show';
430
+ const CLASS_NAME_STATIC = 'modal-static';
431
+ const SELECTOR_DIALOG = '.modal-dialog';
432
+ const SELECTOR_MODAL_BODY = '.modal-body';
433
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]';
434
+ const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]';
102
435
  /**
103
- * Class definition
436
+ * ------------------------------------------------------------------------
437
+ * Class Definition
438
+ * ------------------------------------------------------------------------
104
439
  */
105
440
 
106
- var Modal = /*#__PURE__*/function () {
107
- function Modal(element, config) {
441
+ class Modal extends BaseComponent__default['default'] {
442
+ constructor(element, config) {
443
+ super(element);
108
444
  this._config = this._getConfig(config);
109
- this._element = element;
110
- this._dialog = element.querySelector(SELECTOR_DIALOG);
111
- this._backdrop = null;
445
+ this._dialog = SelectorEngine__default['default'].findOne(SELECTOR_DIALOG, this._element);
446
+ this._backdrop = this._initializeBackDrop();
112
447
  this._isShown = false;
113
- this._isBodyOverflowing = false;
114
448
  this._ignoreBackdropClick = false;
115
449
  this._isTransitioning = false;
116
- this._scrollbarWidth = 0;
117
450
  } // Getters
118
451
 
119
452
 
120
- var _proto = Modal.prototype;
453
+ static get Default() {
454
+ return Default;
455
+ }
121
456
 
122
- // Public
123
- _proto.toggle = function toggle(relatedTarget) {
124
- return this._isShown ? this.hide() : this.show(relatedTarget);
125
- };
457
+ static get DATA_KEY() {
458
+ return DATA_KEY;
459
+ } // Public
126
460
 
127
- _proto.show = function show(relatedTarget) {
128
- var _this = this;
129
461
 
462
+ toggle(relatedTarget) {
463
+ return this._isShown ? this.hide() : this.show(relatedTarget);
464
+ }
465
+
466
+ show(relatedTarget) {
130
467
  if (this._isShown || this._isTransitioning) {
131
468
  return;
132
469
  }
133
470
 
134
- var showEvent = $__default["default"].Event(EVENT_SHOW, {
135
- relatedTarget: relatedTarget
471
+ if (this._isAnimated()) {
472
+ this._isTransitioning = true;
473
+ }
474
+
475
+ const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
476
+ relatedTarget
136
477
  });
137
- $__default["default"](this._element).trigger(showEvent);
138
478
 
139
- if (showEvent.isDefaultPrevented()) {
479
+ if (this._isShown || showEvent.defaultPrevented) {
140
480
  return;
141
481
  }
142
482
 
143
483
  this._isShown = true;
144
-
145
- if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) {
146
- this._isTransitioning = true;
147
- }
148
-
149
- this._checkScrollbar();
150
-
151
- this._setScrollbar();
484
+ hide();
485
+ document.body.classList.add(CLASS_NAME_OPEN);
152
486
 
153
487
  this._adjustDialog();
154
488
 
@@ -156,25 +490,19 @@
156
490
 
157
491
  this._setResizeEvent();
158
492
 
159
- $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
160
- return _this.hide(event);
161
- });
162
- $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
163
- $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
164
- if ($__default["default"](event.target).is(_this._element)) {
165
- _this._ignoreBackdropClick = true;
493
+ EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, event => this.hide(event));
494
+ EventHandler__default['default'].on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
495
+ EventHandler__default['default'].one(this._element, EVENT_MOUSEUP_DISMISS, event => {
496
+ if (event.target === this._element) {
497
+ this._ignoreBackdropClick = true;
166
498
  }
167
499
  });
168
500
  });
169
501
 
170
- this._showBackdrop(function () {
171
- return _this._showElement(relatedTarget);
172
- });
173
- };
174
-
175
- _proto.hide = function hide(event) {
176
- var _this2 = this;
502
+ this._showBackdrop(() => this._showElement(relatedTarget));
503
+ }
177
504
 
505
+ hide(event) {
178
506
  if (event) {
179
507
  event.preventDefault();
180
508
  }
@@ -183,17 +511,17 @@
183
511
  return;
184
512
  }
185
513
 
186
- var hideEvent = $__default["default"].Event(EVENT_HIDE);
187
- $__default["default"](this._element).trigger(hideEvent);
514
+ const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
188
515
 
189
- if (!this._isShown || hideEvent.isDefaultPrevented()) {
516
+ if (hideEvent.defaultPrevented) {
190
517
  return;
191
518
  }
192
519
 
193
520
  this._isShown = false;
194
- var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE);
195
521
 
196
- if (transition) {
522
+ const isAnimated = this._isAnimated();
523
+
524
+ if (isAnimated) {
197
525
  this._isTransitioning = true;
198
526
  }
199
527
 
@@ -201,93 +529,69 @@
201
529
 
202
530
  this._setResizeEvent();
203
531
 
204
- $__default["default"](document).off(EVENT_FOCUSIN);
205
- $__default["default"](this._element).removeClass(CLASS_NAME_SHOW);
206
- $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
207
- $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
532
+ EventHandler__default['default'].off(document, EVENT_FOCUSIN);
533
+
534
+ this._element.classList.remove(CLASS_NAME_SHOW);
208
535
 
209
- if (transition) {
210
- var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
211
- $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function (event) {
212
- return _this2._hideModal(event);
213
- }).emulateTransitionEnd(transitionDuration);
536
+ EventHandler__default['default'].off(this._element, EVENT_CLICK_DISMISS);
537
+ EventHandler__default['default'].off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
538
+
539
+ if (isAnimated) {
540
+ const transitionDuration = getTransitionDurationFromElement(this._element);
541
+ EventHandler__default['default'].one(this._element, 'transitionend', event => this._hideModal(event));
542
+ emulateTransitionEnd(this._element, transitionDuration);
214
543
  } else {
215
544
  this._hideModal();
216
545
  }
217
- };
546
+ }
218
547
 
219
- _proto.dispose = function dispose() {
220
- [window, this._element, this._dialog].forEach(function (htmlElement) {
221
- return $__default["default"](htmlElement).off(EVENT_KEY);
222
- });
548
+ dispose() {
549
+ [window, this._dialog].forEach(htmlElement => EventHandler__default['default'].off(htmlElement, EVENT_KEY));
550
+ super.dispose();
223
551
  /**
224
552
  * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
225
553
  * Do not move `document` in `htmlElements` array
226
554
  * It will remove `EVENT_CLICK_DATA_API` event that should remain
227
555
  */
228
556
 
229
- $__default["default"](document).off(EVENT_FOCUSIN);
230
- $__default["default"].removeData(this._element, DATA_KEY);
557
+ EventHandler__default['default'].off(document, EVENT_FOCUSIN);
231
558
  this._config = null;
232
- this._element = null;
233
559
  this._dialog = null;
560
+
561
+ this._backdrop.dispose();
562
+
234
563
  this._backdrop = null;
235
564
  this._isShown = null;
236
- this._isBodyOverflowing = null;
237
565
  this._ignoreBackdropClick = null;
238
566
  this._isTransitioning = null;
239
- this._scrollbarWidth = null;
240
- };
567
+ }
241
568
 
242
- _proto.handleUpdate = function handleUpdate() {
569
+ handleUpdate() {
243
570
  this._adjustDialog();
244
571
  } // Private
245
- ;
246
-
247
- _proto._getConfig = function _getConfig(config) {
248
- config = _extends({}, Default, config);
249
- Util__default["default"].typeCheckConfig(NAME, config, DefaultType);
250
- return config;
251
- };
252
-
253
- _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
254
- var _this3 = this;
255
-
256
- var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
257
- $__default["default"](this._element).trigger(hideEventPrevented);
258
-
259
- if (hideEventPrevented.isDefaultPrevented()) {
260
- return;
261
- }
262
-
263
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
264
-
265
- if (!isModalOverflowing) {
266
- this._element.style.overflowY = 'hidden';
267
- }
268
572
 
269
- this._element.classList.add(CLASS_NAME_STATIC);
270
573
 
271
- var modalTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog);
272
- $__default["default"](this._element).off(Util__default["default"].TRANSITION_END);
273
- $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function () {
274
- _this3._element.classList.remove(CLASS_NAME_STATIC);
275
-
276
- if (!isModalOverflowing) {
277
- $__default["default"](_this3._element).one(Util__default["default"].TRANSITION_END, function () {
278
- _this3._element.style.overflowY = '';
279
- }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
280
- }
281
- }).emulateTransitionEnd(modalTransitionDuration);
574
+ _initializeBackDrop() {
575
+ return new Backdrop({
576
+ isVisible: Boolean(this._config.backdrop),
577
+ // 'static' option will be translated to true, and booleans will keep their value
578
+ isAnimated: this._isAnimated()
579
+ });
580
+ }
282
581
 
283
- this._element.focus();
284
- };
582
+ _getConfig(config) {
583
+ config = { ...Default,
584
+ ...Manipulator__default['default'].getDataAttributes(this._element),
585
+ ...config
586
+ };
587
+ typeCheckConfig(NAME, config, DefaultType);
588
+ return config;
589
+ }
285
590
 
286
- _proto._showElement = function _showElement(relatedTarget) {
287
- var _this4 = this;
591
+ _showElement(relatedTarget) {
592
+ const isAnimated = this._isAnimated();
288
593
 
289
- var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE);
290
- var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
594
+ const modalBody = SelectorEngine__default['default'].findOne(SELECTOR_MODAL_BODY, this._dialog);
291
595
 
292
596
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
293
597
  // Don't move modal's DOM position
@@ -302,87 +606,76 @@
302
606
 
303
607
  this._element.setAttribute('role', 'dialog');
304
608
 
305
- if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
609
+ this._element.scrollTop = 0;
610
+
611
+ if (modalBody) {
306
612
  modalBody.scrollTop = 0;
307
- } else {
308
- this._element.scrollTop = 0;
309
613
  }
310
614
 
311
- if (transition) {
312
- Util__default["default"].reflow(this._element);
615
+ if (isAnimated) {
616
+ reflow(this._element);
313
617
  }
314
618
 
315
- $__default["default"](this._element).addClass(CLASS_NAME_SHOW);
619
+ this._element.classList.add(CLASS_NAME_SHOW);
316
620
 
317
621
  if (this._config.focus) {
318
622
  this._enforceFocus();
319
623
  }
320
624
 
321
- var shownEvent = $__default["default"].Event(EVENT_SHOWN, {
322
- relatedTarget: relatedTarget
323
- });
324
-
325
- var transitionComplete = function transitionComplete() {
326
- if (_this4._config.focus) {
327
- _this4._element.focus();
625
+ const transitionComplete = () => {
626
+ if (this._config.focus) {
627
+ this._element.focus();
328
628
  }
329
629
 
330
- _this4._isTransitioning = false;
331
- $__default["default"](_this4._element).trigger(shownEvent);
630
+ this._isTransitioning = false;
631
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
632
+ relatedTarget
633
+ });
332
634
  };
333
635
 
334
- if (transition) {
335
- var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog);
336
- $__default["default"](this._dialog).one(Util__default["default"].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
636
+ if (isAnimated) {
637
+ const transitionDuration = getTransitionDurationFromElement(this._dialog);
638
+ EventHandler__default['default'].one(this._dialog, 'transitionend', transitionComplete);
639
+ emulateTransitionEnd(this._dialog, transitionDuration);
337
640
  } else {
338
641
  transitionComplete();
339
642
  }
340
- };
643
+ }
341
644
 
342
- _proto._enforceFocus = function _enforceFocus() {
343
- var _this5 = this;
645
+ _enforceFocus() {
646
+ EventHandler__default['default'].off(document, EVENT_FOCUSIN); // guard against infinite focus loop
344
647
 
345
- $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
346
- .on(EVENT_FOCUSIN, function (event) {
347
- if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
348
- _this5._element.focus();
648
+ EventHandler__default['default'].on(document, EVENT_FOCUSIN, event => {
649
+ if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {
650
+ this._element.focus();
349
651
  }
350
652
  });
351
- };
352
-
353
- _proto._setEscapeEvent = function _setEscapeEvent() {
354
- var _this6 = this;
653
+ }
355
654
 
655
+ _setEscapeEvent() {
356
656
  if (this._isShown) {
357
- $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
358
- if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
657
+ EventHandler__default['default'].on(this._element, EVENT_KEYDOWN_DISMISS, event => {
658
+ if (this._config.keyboard && event.key === ESCAPE_KEY) {
359
659
  event.preventDefault();
360
-
361
- _this6.hide();
362
- } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
363
- _this6._triggerBackdropTransition();
660
+ this.hide();
661
+ } else if (!this._config.keyboard && event.key === ESCAPE_KEY) {
662
+ this._triggerBackdropTransition();
364
663
  }
365
664
  });
366
- } else if (!this._isShown) {
367
- $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
665
+ } else {
666
+ EventHandler__default['default'].off(this._element, EVENT_KEYDOWN_DISMISS);
368
667
  }
369
- };
370
-
371
- _proto._setResizeEvent = function _setResizeEvent() {
372
- var _this7 = this;
668
+ }
373
669
 
670
+ _setResizeEvent() {
374
671
  if (this._isShown) {
375
- $__default["default"](window).on(EVENT_RESIZE, function (event) {
376
- return _this7.handleUpdate(event);
377
- });
672
+ EventHandler__default['default'].on(window, EVENT_RESIZE, () => this._adjustDialog());
378
673
  } else {
379
- $__default["default"](window).off(EVENT_RESIZE);
674
+ EventHandler__default['default'].off(window, EVENT_RESIZE);
380
675
  }
381
- };
382
-
383
- _proto._hideModal = function _hideModal() {
384
- var _this8 = this;
676
+ }
385
677
 
678
+ _hideModal() {
386
679
  this._element.style.display = 'none';
387
680
 
388
681
  this._element.setAttribute('aria-hidden', true);
@@ -393,270 +686,151 @@
393
686
 
394
687
  this._isTransitioning = false;
395
688
 
396
- this._showBackdrop(function () {
397
- $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
398
-
399
- _this8._resetAdjustments();
689
+ this._backdrop.hide(() => {
690
+ document.body.classList.remove(CLASS_NAME_OPEN);
400
691
 
401
- _this8._resetScrollbar();
692
+ this._resetAdjustments();
402
693
 
403
- $__default["default"](_this8._element).trigger(EVENT_HIDDEN);
694
+ reset();
695
+ EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
404
696
  });
405
- };
406
-
407
- _proto._removeBackdrop = function _removeBackdrop() {
408
- if (this._backdrop) {
409
- $__default["default"](this._backdrop).remove();
410
- this._backdrop = null;
411
- }
412
- };
413
-
414
- _proto._showBackdrop = function _showBackdrop(callback) {
415
- var _this9 = this;
416
-
417
- var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
418
-
419
- if (this._isShown && this._config.backdrop) {
420
- this._backdrop = document.createElement('div');
421
- this._backdrop.className = CLASS_NAME_BACKDROP;
697
+ }
422
698
 
423
- if (animate) {
424
- this._backdrop.classList.add(animate);
699
+ _showBackdrop(callback) {
700
+ EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, event => {
701
+ if (this._ignoreBackdropClick) {
702
+ this._ignoreBackdropClick = false;
703
+ return;
425
704
  }
426
705
 
427
- $__default["default"](this._backdrop).appendTo(document.body);
428
- $__default["default"](this._element).on(EVENT_CLICK_DISMISS, function (event) {
429
- if (_this9._ignoreBackdropClick) {
430
- _this9._ignoreBackdropClick = false;
431
- return;
432
- }
433
-
434
- if (event.target !== event.currentTarget) {
435
- return;
436
- }
437
-
438
- if (_this9._config.backdrop === 'static') {
439
- _this9._triggerBackdropTransition();
440
- } else {
441
- _this9.hide();
442
- }
443
- });
706
+ if (event.target !== event.currentTarget) {
707
+ return;
708
+ }
444
709
 
445
- if (animate) {
446
- Util__default["default"].reflow(this._backdrop);
710
+ if (this._config.backdrop === true) {
711
+ this.hide();
712
+ } else if (this._config.backdrop === 'static') {
713
+ this._triggerBackdropTransition();
447
714
  }
715
+ });
448
716
 
449
- $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW);
717
+ this._backdrop.show(callback);
718
+ }
450
719
 
451
- if (!callback) {
452
- return;
453
- }
720
+ _isAnimated() {
721
+ return this._element.classList.contains(CLASS_NAME_FADE);
722
+ }
454
723
 
455
- if (!animate) {
456
- callback();
457
- return;
458
- }
724
+ _triggerBackdropTransition() {
725
+ const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE_PREVENTED);
726
+
727
+ if (hideEvent.defaultPrevented) {
728
+ return;
729
+ }
459
730
 
460
- var backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop);
461
- $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
462
- } else if (!this._isShown && this._backdrop) {
463
- $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW);
731
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
464
732
 
465
- var callbackRemove = function callbackRemove() {
466
- _this9._removeBackdrop();
733
+ if (!isModalOverflowing) {
734
+ this._element.style.overflowY = 'hidden';
735
+ }
467
736
 
468
- if (callback) {
469
- callback();
470
- }
471
- };
737
+ this._element.classList.add(CLASS_NAME_STATIC);
472
738
 
473
- if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) {
474
- var _backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop);
739
+ const modalTransitionDuration = getTransitionDurationFromElement(this._dialog);
740
+ EventHandler__default['default'].off(this._element, 'transitionend');
741
+ EventHandler__default['default'].one(this._element, 'transitionend', () => {
742
+ this._element.classList.remove(CLASS_NAME_STATIC);
475
743
 
476
- $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
477
- } else {
478
- callbackRemove();
744
+ if (!isModalOverflowing) {
745
+ EventHandler__default['default'].one(this._element, 'transitionend', () => {
746
+ this._element.style.overflowY = '';
747
+ });
748
+ emulateTransitionEnd(this._element, modalTransitionDuration);
479
749
  }
480
- } else if (callback) {
481
- callback();
482
- }
750
+ });
751
+ emulateTransitionEnd(this._element, modalTransitionDuration);
752
+
753
+ this._element.focus();
483
754
  } // ----------------------------------------------------------------------
484
755
  // the following methods are used to handle overflowing modals
485
- // todo (fat): these should probably be refactored out of modal.js
486
756
  // ----------------------------------------------------------------------
487
- ;
488
757
 
489
- _proto._adjustDialog = function _adjustDialog() {
490
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
491
758
 
492
- if (!this._isBodyOverflowing && isModalOverflowing) {
493
- this._element.style.paddingLeft = this._scrollbarWidth + "px";
759
+ _adjustDialog() {
760
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
761
+ const scrollbarWidth = getWidth();
762
+ const isBodyOverflowing = scrollbarWidth > 0;
763
+
764
+ if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {
765
+ this._element.style.paddingLeft = `${scrollbarWidth}px`;
494
766
  }
495
767
 
496
- if (this._isBodyOverflowing && !isModalOverflowing) {
497
- this._element.style.paddingRight = this._scrollbarWidth + "px";
768
+ if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {
769
+ this._element.style.paddingRight = `${scrollbarWidth}px`;
498
770
  }
499
- };
771
+ }
500
772
 
501
- _proto._resetAdjustments = function _resetAdjustments() {
773
+ _resetAdjustments() {
502
774
  this._element.style.paddingLeft = '';
503
775
  this._element.style.paddingRight = '';
504
- };
505
-
506
- _proto._checkScrollbar = function _checkScrollbar() {
507
- var rect = document.body.getBoundingClientRect();
508
- this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
509
- this._scrollbarWidth = this._getScrollbarWidth();
510
- };
511
-
512
- _proto._setScrollbar = function _setScrollbar() {
513
- var _this10 = this;
514
-
515
- if (this._isBodyOverflowing) {
516
- // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
517
- // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
518
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
519
- var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
520
-
521
- $__default["default"](fixedContent).each(function (index, element) {
522
- var actualPadding = element.style.paddingRight;
523
- var calculatedPadding = $__default["default"](element).css('padding-right');
524
- $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
525
- }); // Adjust sticky content margin
526
-
527
- $__default["default"](stickyContent).each(function (index, element) {
528
- var actualMargin = element.style.marginRight;
529
- var calculatedMargin = $__default["default"](element).css('margin-right');
530
- $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
531
- }); // Adjust body padding
532
-
533
- var actualPadding = document.body.style.paddingRight;
534
- var calculatedPadding = $__default["default"](document.body).css('padding-right');
535
- $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
536
- }
537
-
538
- $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
539
- };
540
-
541
- _proto._resetScrollbar = function _resetScrollbar() {
542
- // Restore fixed content padding
543
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
544
- $__default["default"](fixedContent).each(function (index, element) {
545
- var padding = $__default["default"](element).data('padding-right');
546
- $__default["default"](element).removeData('padding-right');
547
- element.style.paddingRight = padding ? padding : '';
548
- }); // Restore sticky content
549
-
550
- var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
551
- $__default["default"](elements).each(function (index, element) {
552
- var margin = $__default["default"](element).data('margin-right');
553
-
554
- if (typeof margin !== 'undefined') {
555
- $__default["default"](element).css('margin-right', margin).removeData('margin-right');
556
- }
557
- }); // Restore body padding
558
-
559
- var padding = $__default["default"](document.body).data('padding-right');
560
- $__default["default"](document.body).removeData('padding-right');
561
- document.body.style.paddingRight = padding ? padding : '';
562
- };
563
-
564
- _proto._getScrollbarWidth = function _getScrollbarWidth() {
565
- // thx d.walsh
566
- var scrollDiv = document.createElement('div');
567
- scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
568
- document.body.appendChild(scrollDiv);
569
- var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
570
- document.body.removeChild(scrollDiv);
571
- return scrollbarWidth;
572
776
  } // Static
573
- ;
574
777
 
575
- Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
576
- return this.each(function () {
577
- var data = $__default["default"](this).data(DATA_KEY);
578
778
 
579
- var _config = _extends({}, Default, $__default["default"](this).data(), typeof config === 'object' && config ? config : {});
779
+ static jQueryInterface(config, relatedTarget) {
780
+ return this.each(function () {
781
+ const data = Modal.getInstance(this) || new Modal(this, typeof config === 'object' ? config : {});
580
782
 
581
- if (!data) {
582
- data = new Modal(this, _config);
583
- $__default["default"](this).data(DATA_KEY, data);
783
+ if (typeof config !== 'string') {
784
+ return;
584
785
  }
585
786
 
586
- if (typeof config === 'string') {
587
- if (typeof data[config] === 'undefined') {
588
- throw new TypeError("No method named \"" + config + "\"");
589
- }
590
-
591
- data[config](relatedTarget);
592
- } else if (_config.show) {
593
- data.show(relatedTarget);
787
+ if (typeof data[config] === 'undefined') {
788
+ throw new TypeError(`No method named "${config}"`);
594
789
  }
595
- });
596
- };
597
790
 
598
- _createClass(Modal, null, [{
599
- key: "VERSION",
600
- get: function get() {
601
- return VERSION;
602
- }
603
- }, {
604
- key: "Default",
605
- get: function get() {
606
- return Default;
607
- }
608
- }]);
791
+ data[config](relatedTarget);
792
+ });
793
+ }
609
794
 
610
- return Modal;
611
- }();
795
+ }
612
796
  /**
613
- * Data API implementation
797
+ * ------------------------------------------------------------------------
798
+ * Data Api implementation
799
+ * ------------------------------------------------------------------------
614
800
  */
615
801
 
616
802
 
617
- $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
618
- var _this11 = this;
619
-
620
- var target;
621
- var selector = Util__default["default"].getSelectorFromElement(this);
622
-
623
- if (selector) {
624
- target = document.querySelector(selector);
625
- }
626
-
627
- var config = $__default["default"](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
803
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
804
+ const target = getElementFromSelector(this);
628
805
 
629
- if (this.tagName === 'A' || this.tagName === 'AREA') {
806
+ if (['A', 'AREA'].includes(this.tagName)) {
630
807
  event.preventDefault();
631
808
  }
632
809
 
633
- var $target = $__default["default"](target).one(EVENT_SHOW, function (showEvent) {
634
- if (showEvent.isDefaultPrevented()) {
635
- // Only register focus restorer if modal will actually get shown
810
+ EventHandler__default['default'].one(target, EVENT_SHOW, showEvent => {
811
+ if (showEvent.defaultPrevented) {
812
+ // only register focus restorer if modal will actually get shown
636
813
  return;
637
814
  }
638
815
 
639
- $target.one(EVENT_HIDDEN, function () {
640
- if ($__default["default"](_this11).is(':visible')) {
641
- _this11.focus();
816
+ EventHandler__default['default'].one(target, EVENT_HIDDEN, () => {
817
+ if (isVisible(this)) {
818
+ this.focus();
642
819
  }
643
820
  });
644
821
  });
645
-
646
- Modal._jQueryInterface.call($__default["default"](target), config, this);
822
+ const data = Modal.getInstance(target) || new Modal(target);
823
+ data.toggle(this);
647
824
  });
648
825
  /**
826
+ * ------------------------------------------------------------------------
649
827
  * jQuery
828
+ * ------------------------------------------------------------------------
829
+ * add .Modal to jQuery only if jQuery is present
650
830
  */
651
831
 
652
- $__default["default"].fn[NAME] = Modal._jQueryInterface;
653
- $__default["default"].fn[NAME].Constructor = Modal;
654
-
655
- $__default["default"].fn[NAME].noConflict = function () {
656
- $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
657
- return Modal._jQueryInterface;
658
- };
832
+ defineJQueryPlugin(NAME, Modal);
659
833
 
660
834
  return Modal;
661
835
 
662
- }));
836
+ })));