bootstrap 4.6.1 → 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 (150) 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 -112
  5. data/assets/javascripts/bootstrap/base-component.js +63 -0
  6. data/assets/javascripts/bootstrap/button.js +96 -176
  7. data/assets/javascripts/bootstrap/carousel.js +470 -355
  8. data/assets/javascripts/bootstrap/collapse.js +377 -221
  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 +470 -351
  14. data/assets/javascripts/bootstrap/modal.js +611 -435
  15. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  16. data/assets/javascripts/bootstrap/popover.js +137 -165
  17. data/assets/javascripts/bootstrap/scrollspy.js +249 -191
  18. data/assets/javascripts/bootstrap/tab.js +241 -141
  19. data/assets/javascripts/bootstrap/toast.js +221 -153
  20. data/assets/javascripts/bootstrap/tooltip.js +649 -483
  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 +14 -7
  24. data/assets/javascripts/bootstrap.js +3272 -2586
  25. data/assets/javascripts/bootstrap.min.js +2 -2
  26. data/assets/stylesheets/_bootstrap-grid.scss +51 -16
  27. data/assets/stylesheets/_bootstrap-reboot.scss +4 -1
  28. data/assets/stylesheets/_bootstrap.scss +16 -8
  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 +23 -4
  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 +9 -5
  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 -1
  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 +801 -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/{utilities → helpers}/_clearfix.scss +0 -0
  75. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  76. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  77. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  78. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  79. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  80. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  81. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  82. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  83. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  84. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  85. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +71 -48
  86. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  87. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  88. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  89. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  90. data/assets/stylesheets/bootstrap/mixins/_forms.scss +39 -97
  91. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  92. data/assets/stylesheets/bootstrap/mixins/_grid.scss +90 -34
  93. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  94. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  95. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  96. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  97. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  98. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  99. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  100. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  101. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  102. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  103. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +214 -130
  104. data/bootstrap.gemspec +1 -3
  105. data/lib/bootstrap/version.rb +2 -2
  106. data/tasks/updater/js.rb +20 -5
  107. data/tasks/updater/network.rb +7 -1
  108. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  109. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  110. data/test/dummy_rails/app/views/pages/root.html +89 -0
  111. data/test/dummy_rails/config/application.rb +0 -3
  112. data/test/gemfiles/rails_6_1.gemfile +7 -0
  113. metadata +45 -73
  114. data/assets/javascripts/bootstrap/util.js +0 -189
  115. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  116. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  117. data/assets/stylesheets/bootstrap/_input-group.scss +0 -211
  118. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  119. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  120. data/assets/stylesheets/bootstrap/_print.scss +0 -132
  121. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  122. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  123. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  124. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  125. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  126. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  127. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  128. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  129. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  130. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  131. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  132. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  133. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  134. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  135. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  136. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  137. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  138. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  139. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  140. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  141. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  142. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  143. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  144. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  145. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  146. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  147. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  148. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  149. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  150. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -1,152 +1,488 @@
1
1
  /*!
2
- * Bootstrap modal.js v4.6.1 (https://getbootstrap.com/)
2
+ * Bootstrap modal.js v5.0.0 (https://getbootstrap.com/)
3
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
- return Constructor;
31
- }
33
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
34
+ };
32
35
 
33
- function _extends() {
34
- _extends = Object.assign || function (target) {
35
- for (var i = 1; i < arguments.length; i++) {
36
- var source = arguments[i];
36
+ const getSelector = element => {
37
+ let selector = element.getAttribute('data-bs-target');
37
38
 
38
- for (var key in source) {
39
- if (Object.prototype.hasOwnProperty.call(source, key)) {
40
- target[key] = source[key];
41
- }
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
+ }
121
+ });
122
+ };
123
+
124
+ const isVisible = element => {
125
+ if (!element) {
126
+ return false;
127
+ }
128
+
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);
42
334
  }
335
+
336
+ this._element = backdrop;
43
337
  }
44
338
 
45
- return target;
46
- };
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
+ }
47
385
 
48
- return _extends.apply(this, arguments);
49
386
  }
50
387
 
51
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
+ * ------------------------------------------------------------------------
52
396
  * Constants
397
+ * ------------------------------------------------------------------------
53
398
  */
54
399
 
55
- var NAME = 'modal';
56
- var VERSION = '4.6.1';
57
- var DATA_KEY = 'bs.modal';
58
- var EVENT_KEY = "." + DATA_KEY;
59
- var DATA_API_KEY = '.data-api';
60
- var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
61
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
62
-
63
- var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
64
- var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
65
- var CLASS_NAME_BACKDROP = 'modal-backdrop';
66
- var CLASS_NAME_OPEN = 'modal-open';
67
- var CLASS_NAME_FADE = 'fade';
68
- var CLASS_NAME_SHOW = 'show';
69
- var CLASS_NAME_STATIC = 'modal-static';
70
- var EVENT_HIDE = "hide" + EVENT_KEY;
71
- var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY;
72
- var EVENT_HIDDEN = "hidden" + EVENT_KEY;
73
- var EVENT_SHOW = "show" + EVENT_KEY;
74
- var EVENT_SHOWN = "shown" + EVENT_KEY;
75
- var EVENT_FOCUSIN = "focusin" + EVENT_KEY;
76
- var EVENT_RESIZE = "resize" + EVENT_KEY;
77
- var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
78
- var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY;
79
- var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY;
80
- var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY;
81
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
82
- var SELECTOR_DIALOG = '.modal-dialog';
83
- var SELECTOR_MODAL_BODY = '.modal-body';
84
- var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]';
85
- var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
86
- var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
87
- var SELECTOR_STICKY_CONTENT = '.sticky-top';
88
- 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 = {
89
406
  backdrop: true,
90
407
  keyboard: true,
91
- focus: true,
92
- show: true
408
+ focus: true
93
409
  };
94
- var DefaultType = {
410
+ const DefaultType = {
95
411
  backdrop: '(boolean|string)',
96
412
  keyboard: 'boolean',
97
- focus: 'boolean',
98
- show: 'boolean'
413
+ focus: 'boolean'
99
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"]';
100
435
  /**
101
- * Class definition
436
+ * ------------------------------------------------------------------------
437
+ * Class Definition
438
+ * ------------------------------------------------------------------------
102
439
  */
103
440
 
104
- var Modal = /*#__PURE__*/function () {
105
- function Modal(element, config) {
441
+ class Modal extends BaseComponent__default['default'] {
442
+ constructor(element, config) {
443
+ super(element);
106
444
  this._config = this._getConfig(config);
107
- this._element = element;
108
- this._dialog = element.querySelector(SELECTOR_DIALOG);
109
- this._backdrop = null;
445
+ this._dialog = SelectorEngine__default['default'].findOne(SELECTOR_DIALOG, this._element);
446
+ this._backdrop = this._initializeBackDrop();
110
447
  this._isShown = false;
111
- this._isBodyOverflowing = false;
112
448
  this._ignoreBackdropClick = false;
113
449
  this._isTransitioning = false;
114
- this._scrollbarWidth = 0;
115
450
  } // Getters
116
451
 
117
452
 
118
- var _proto = Modal.prototype;
453
+ static get Default() {
454
+ return Default;
455
+ }
119
456
 
120
- // Public
121
- _proto.toggle = function toggle(relatedTarget) {
122
- return this._isShown ? this.hide() : this.show(relatedTarget);
123
- };
457
+ static get DATA_KEY() {
458
+ return DATA_KEY;
459
+ } // Public
124
460
 
125
- _proto.show = function show(relatedTarget) {
126
- var _this = this;
127
461
 
462
+ toggle(relatedTarget) {
463
+ return this._isShown ? this.hide() : this.show(relatedTarget);
464
+ }
465
+
466
+ show(relatedTarget) {
128
467
  if (this._isShown || this._isTransitioning) {
129
468
  return;
130
469
  }
131
470
 
132
- var showEvent = $__default["default"].Event(EVENT_SHOW, {
133
- 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
134
477
  });
135
- $__default["default"](this._element).trigger(showEvent);
136
478
 
137
- if (showEvent.isDefaultPrevented()) {
479
+ if (this._isShown || showEvent.defaultPrevented) {
138
480
  return;
139
481
  }
140
482
 
141
483
  this._isShown = true;
142
-
143
- if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) {
144
- this._isTransitioning = true;
145
- }
146
-
147
- this._checkScrollbar();
148
-
149
- this._setScrollbar();
484
+ hide();
485
+ document.body.classList.add(CLASS_NAME_OPEN);
150
486
 
151
487
  this._adjustDialog();
152
488
 
@@ -154,25 +490,19 @@
154
490
 
155
491
  this._setResizeEvent();
156
492
 
157
- $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
158
- return _this.hide(event);
159
- });
160
- $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
161
- $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
162
- if ($__default["default"](event.target).is(_this._element)) {
163
- _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;
164
498
  }
165
499
  });
166
500
  });
167
501
 
168
- this._showBackdrop(function () {
169
- return _this._showElement(relatedTarget);
170
- });
171
- };
172
-
173
- _proto.hide = function hide(event) {
174
- var _this2 = this;
502
+ this._showBackdrop(() => this._showElement(relatedTarget));
503
+ }
175
504
 
505
+ hide(event) {
176
506
  if (event) {
177
507
  event.preventDefault();
178
508
  }
@@ -181,17 +511,17 @@
181
511
  return;
182
512
  }
183
513
 
184
- var hideEvent = $__default["default"].Event(EVENT_HIDE);
185
- $__default["default"](this._element).trigger(hideEvent);
514
+ const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
186
515
 
187
- if (!this._isShown || hideEvent.isDefaultPrevented()) {
516
+ if (hideEvent.defaultPrevented) {
188
517
  return;
189
518
  }
190
519
 
191
520
  this._isShown = false;
192
- var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE);
193
521
 
194
- if (transition) {
522
+ const isAnimated = this._isAnimated();
523
+
524
+ if (isAnimated) {
195
525
  this._isTransitioning = true;
196
526
  }
197
527
 
@@ -199,93 +529,69 @@
199
529
 
200
530
  this._setResizeEvent();
201
531
 
202
- $__default["default"](document).off(EVENT_FOCUSIN);
203
- $__default["default"](this._element).removeClass(CLASS_NAME_SHOW);
204
- $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
205
- $__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);
206
535
 
207
- if (transition) {
208
- var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
209
- $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function (event) {
210
- return _this2._hideModal(event);
211
- }).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);
212
543
  } else {
213
544
  this._hideModal();
214
545
  }
215
- };
546
+ }
216
547
 
217
- _proto.dispose = function dispose() {
218
- [window, this._element, this._dialog].forEach(function (htmlElement) {
219
- return $__default["default"](htmlElement).off(EVENT_KEY);
220
- });
548
+ dispose() {
549
+ [window, this._dialog].forEach(htmlElement => EventHandler__default['default'].off(htmlElement, EVENT_KEY));
550
+ super.dispose();
221
551
  /**
222
552
  * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
223
553
  * Do not move `document` in `htmlElements` array
224
554
  * It will remove `EVENT_CLICK_DATA_API` event that should remain
225
555
  */
226
556
 
227
- $__default["default"](document).off(EVENT_FOCUSIN);
228
- $__default["default"].removeData(this._element, DATA_KEY);
557
+ EventHandler__default['default'].off(document, EVENT_FOCUSIN);
229
558
  this._config = null;
230
- this._element = null;
231
559
  this._dialog = null;
560
+
561
+ this._backdrop.dispose();
562
+
232
563
  this._backdrop = null;
233
564
  this._isShown = null;
234
- this._isBodyOverflowing = null;
235
565
  this._ignoreBackdropClick = null;
236
566
  this._isTransitioning = null;
237
- this._scrollbarWidth = null;
238
- };
567
+ }
239
568
 
240
- _proto.handleUpdate = function handleUpdate() {
569
+ handleUpdate() {
241
570
  this._adjustDialog();
242
571
  } // Private
243
- ;
244
-
245
- _proto._getConfig = function _getConfig(config) {
246
- config = _extends({}, Default, config);
247
- Util__default["default"].typeCheckConfig(NAME, config, DefaultType);
248
- return config;
249
- };
250
-
251
- _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
252
- var _this3 = this;
253
-
254
- var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
255
- $__default["default"](this._element).trigger(hideEventPrevented);
256
-
257
- if (hideEventPrevented.isDefaultPrevented()) {
258
- return;
259
- }
260
-
261
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
262
-
263
- if (!isModalOverflowing) {
264
- this._element.style.overflowY = 'hidden';
265
- }
266
572
 
267
- this._element.classList.add(CLASS_NAME_STATIC);
268
573
 
269
- var modalTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog);
270
- $__default["default"](this._element).off(Util__default["default"].TRANSITION_END);
271
- $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function () {
272
- _this3._element.classList.remove(CLASS_NAME_STATIC);
273
-
274
- if (!isModalOverflowing) {
275
- $__default["default"](_this3._element).one(Util__default["default"].TRANSITION_END, function () {
276
- _this3._element.style.overflowY = '';
277
- }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
278
- }
279
- }).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
+ }
280
581
 
281
- this._element.focus();
282
- };
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
+ }
283
590
 
284
- _proto._showElement = function _showElement(relatedTarget) {
285
- var _this4 = this;
591
+ _showElement(relatedTarget) {
592
+ const isAnimated = this._isAnimated();
286
593
 
287
- var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE);
288
- var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
594
+ const modalBody = SelectorEngine__default['default'].findOne(SELECTOR_MODAL_BODY, this._dialog);
289
595
 
290
596
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
291
597
  // Don't move modal's DOM position
@@ -300,87 +606,76 @@
300
606
 
301
607
  this._element.setAttribute('role', 'dialog');
302
608
 
303
- if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
609
+ this._element.scrollTop = 0;
610
+
611
+ if (modalBody) {
304
612
  modalBody.scrollTop = 0;
305
- } else {
306
- this._element.scrollTop = 0;
307
613
  }
308
614
 
309
- if (transition) {
310
- Util__default["default"].reflow(this._element);
615
+ if (isAnimated) {
616
+ reflow(this._element);
311
617
  }
312
618
 
313
- $__default["default"](this._element).addClass(CLASS_NAME_SHOW);
619
+ this._element.classList.add(CLASS_NAME_SHOW);
314
620
 
315
621
  if (this._config.focus) {
316
622
  this._enforceFocus();
317
623
  }
318
624
 
319
- var shownEvent = $__default["default"].Event(EVENT_SHOWN, {
320
- relatedTarget: relatedTarget
321
- });
322
-
323
- var transitionComplete = function transitionComplete() {
324
- if (_this4._config.focus) {
325
- _this4._element.focus();
625
+ const transitionComplete = () => {
626
+ if (this._config.focus) {
627
+ this._element.focus();
326
628
  }
327
629
 
328
- _this4._isTransitioning = false;
329
- $__default["default"](_this4._element).trigger(shownEvent);
630
+ this._isTransitioning = false;
631
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
632
+ relatedTarget
633
+ });
330
634
  };
331
635
 
332
- if (transition) {
333
- var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog);
334
- $__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);
335
640
  } else {
336
641
  transitionComplete();
337
642
  }
338
- };
643
+ }
339
644
 
340
- _proto._enforceFocus = function _enforceFocus() {
341
- var _this5 = this;
645
+ _enforceFocus() {
646
+ EventHandler__default['default'].off(document, EVENT_FOCUSIN); // guard against infinite focus loop
342
647
 
343
- $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
344
- .on(EVENT_FOCUSIN, function (event) {
345
- if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
346
- _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();
347
651
  }
348
652
  });
349
- };
350
-
351
- _proto._setEscapeEvent = function _setEscapeEvent() {
352
- var _this6 = this;
653
+ }
353
654
 
655
+ _setEscapeEvent() {
354
656
  if (this._isShown) {
355
- $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
356
- 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) {
357
659
  event.preventDefault();
358
-
359
- _this6.hide();
360
- } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
361
- _this6._triggerBackdropTransition();
660
+ this.hide();
661
+ } else if (!this._config.keyboard && event.key === ESCAPE_KEY) {
662
+ this._triggerBackdropTransition();
362
663
  }
363
664
  });
364
- } else if (!this._isShown) {
365
- $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
665
+ } else {
666
+ EventHandler__default['default'].off(this._element, EVENT_KEYDOWN_DISMISS);
366
667
  }
367
- };
368
-
369
- _proto._setResizeEvent = function _setResizeEvent() {
370
- var _this7 = this;
668
+ }
371
669
 
670
+ _setResizeEvent() {
372
671
  if (this._isShown) {
373
- $__default["default"](window).on(EVENT_RESIZE, function (event) {
374
- return _this7.handleUpdate(event);
375
- });
672
+ EventHandler__default['default'].on(window, EVENT_RESIZE, () => this._adjustDialog());
376
673
  } else {
377
- $__default["default"](window).off(EVENT_RESIZE);
674
+ EventHandler__default['default'].off(window, EVENT_RESIZE);
378
675
  }
379
- };
380
-
381
- _proto._hideModal = function _hideModal() {
382
- var _this8 = this;
676
+ }
383
677
 
678
+ _hideModal() {
384
679
  this._element.style.display = 'none';
385
680
 
386
681
  this._element.setAttribute('aria-hidden', true);
@@ -391,270 +686,151 @@
391
686
 
392
687
  this._isTransitioning = false;
393
688
 
394
- this._showBackdrop(function () {
395
- $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
396
-
397
- _this8._resetAdjustments();
689
+ this._backdrop.hide(() => {
690
+ document.body.classList.remove(CLASS_NAME_OPEN);
398
691
 
399
- _this8._resetScrollbar();
692
+ this._resetAdjustments();
400
693
 
401
- $__default["default"](_this8._element).trigger(EVENT_HIDDEN);
694
+ reset();
695
+ EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
402
696
  });
403
- };
404
-
405
- _proto._removeBackdrop = function _removeBackdrop() {
406
- if (this._backdrop) {
407
- $__default["default"](this._backdrop).remove();
408
- this._backdrop = null;
409
- }
410
- };
411
-
412
- _proto._showBackdrop = function _showBackdrop(callback) {
413
- var _this9 = this;
414
-
415
- var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
416
-
417
- if (this._isShown && this._config.backdrop) {
418
- this._backdrop = document.createElement('div');
419
- this._backdrop.className = CLASS_NAME_BACKDROP;
697
+ }
420
698
 
421
- if (animate) {
422
- 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;
423
704
  }
424
705
 
425
- $__default["default"](this._backdrop).appendTo(document.body);
426
- $__default["default"](this._element).on(EVENT_CLICK_DISMISS, function (event) {
427
- if (_this9._ignoreBackdropClick) {
428
- _this9._ignoreBackdropClick = false;
429
- return;
430
- }
431
-
432
- if (event.target !== event.currentTarget) {
433
- return;
434
- }
435
-
436
- if (_this9._config.backdrop === 'static') {
437
- _this9._triggerBackdropTransition();
438
- } else {
439
- _this9.hide();
440
- }
441
- });
706
+ if (event.target !== event.currentTarget) {
707
+ return;
708
+ }
442
709
 
443
- if (animate) {
444
- 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();
445
714
  }
715
+ });
446
716
 
447
- $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW);
717
+ this._backdrop.show(callback);
718
+ }
448
719
 
449
- if (!callback) {
450
- return;
451
- }
720
+ _isAnimated() {
721
+ return this._element.classList.contains(CLASS_NAME_FADE);
722
+ }
452
723
 
453
- if (!animate) {
454
- callback();
455
- return;
456
- }
724
+ _triggerBackdropTransition() {
725
+ const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE_PREVENTED);
726
+
727
+ if (hideEvent.defaultPrevented) {
728
+ return;
729
+ }
457
730
 
458
- var backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop);
459
- $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
460
- } else if (!this._isShown && this._backdrop) {
461
- $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW);
731
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
462
732
 
463
- var callbackRemove = function callbackRemove() {
464
- _this9._removeBackdrop();
733
+ if (!isModalOverflowing) {
734
+ this._element.style.overflowY = 'hidden';
735
+ }
465
736
 
466
- if (callback) {
467
- callback();
468
- }
469
- };
737
+ this._element.classList.add(CLASS_NAME_STATIC);
470
738
 
471
- if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) {
472
- 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);
473
743
 
474
- $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
475
- } else {
476
- callbackRemove();
744
+ if (!isModalOverflowing) {
745
+ EventHandler__default['default'].one(this._element, 'transitionend', () => {
746
+ this._element.style.overflowY = '';
747
+ });
748
+ emulateTransitionEnd(this._element, modalTransitionDuration);
477
749
  }
478
- } else if (callback) {
479
- callback();
480
- }
750
+ });
751
+ emulateTransitionEnd(this._element, modalTransitionDuration);
752
+
753
+ this._element.focus();
481
754
  } // ----------------------------------------------------------------------
482
755
  // the following methods are used to handle overflowing modals
483
- // todo (fat): these should probably be refactored out of modal.js
484
756
  // ----------------------------------------------------------------------
485
- ;
486
757
 
487
- _proto._adjustDialog = function _adjustDialog() {
488
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
489
758
 
490
- if (!this._isBodyOverflowing && isModalOverflowing) {
491
- 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`;
492
766
  }
493
767
 
494
- if (this._isBodyOverflowing && !isModalOverflowing) {
495
- this._element.style.paddingRight = this._scrollbarWidth + "px";
768
+ if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {
769
+ this._element.style.paddingRight = `${scrollbarWidth}px`;
496
770
  }
497
- };
771
+ }
498
772
 
499
- _proto._resetAdjustments = function _resetAdjustments() {
773
+ _resetAdjustments() {
500
774
  this._element.style.paddingLeft = '';
501
775
  this._element.style.paddingRight = '';
502
- };
503
-
504
- _proto._checkScrollbar = function _checkScrollbar() {
505
- var rect = document.body.getBoundingClientRect();
506
- this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
507
- this._scrollbarWidth = this._getScrollbarWidth();
508
- };
509
-
510
- _proto._setScrollbar = function _setScrollbar() {
511
- var _this10 = this;
512
-
513
- if (this._isBodyOverflowing) {
514
- // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
515
- // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
516
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
517
- var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
518
-
519
- $__default["default"](fixedContent).each(function (index, element) {
520
- var actualPadding = element.style.paddingRight;
521
- var calculatedPadding = $__default["default"](element).css('padding-right');
522
- $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
523
- }); // Adjust sticky content margin
524
-
525
- $__default["default"](stickyContent).each(function (index, element) {
526
- var actualMargin = element.style.marginRight;
527
- var calculatedMargin = $__default["default"](element).css('margin-right');
528
- $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
529
- }); // Adjust body padding
530
-
531
- var actualPadding = document.body.style.paddingRight;
532
- var calculatedPadding = $__default["default"](document.body).css('padding-right');
533
- $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
534
- }
535
-
536
- $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
537
- };
538
-
539
- _proto._resetScrollbar = function _resetScrollbar() {
540
- // Restore fixed content padding
541
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
542
- $__default["default"](fixedContent).each(function (index, element) {
543
- var padding = $__default["default"](element).data('padding-right');
544
- $__default["default"](element).removeData('padding-right');
545
- element.style.paddingRight = padding ? padding : '';
546
- }); // Restore sticky content
547
-
548
- var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
549
- $__default["default"](elements).each(function (index, element) {
550
- var margin = $__default["default"](element).data('margin-right');
551
-
552
- if (typeof margin !== 'undefined') {
553
- $__default["default"](element).css('margin-right', margin).removeData('margin-right');
554
- }
555
- }); // Restore body padding
556
-
557
- var padding = $__default["default"](document.body).data('padding-right');
558
- $__default["default"](document.body).removeData('padding-right');
559
- document.body.style.paddingRight = padding ? padding : '';
560
- };
561
-
562
- _proto._getScrollbarWidth = function _getScrollbarWidth() {
563
- // thx d.walsh
564
- var scrollDiv = document.createElement('div');
565
- scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
566
- document.body.appendChild(scrollDiv);
567
- var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
568
- document.body.removeChild(scrollDiv);
569
- return scrollbarWidth;
570
776
  } // Static
571
- ;
572
777
 
573
- Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
574
- return this.each(function () {
575
- var data = $__default["default"](this).data(DATA_KEY);
576
778
 
577
- 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 : {});
578
782
 
579
- if (!data) {
580
- data = new Modal(this, _config);
581
- $__default["default"](this).data(DATA_KEY, data);
783
+ if (typeof config !== 'string') {
784
+ return;
582
785
  }
583
786
 
584
- if (typeof config === 'string') {
585
- if (typeof data[config] === 'undefined') {
586
- throw new TypeError("No method named \"" + config + "\"");
587
- }
588
-
589
- data[config](relatedTarget);
590
- } else if (_config.show) {
591
- data.show(relatedTarget);
787
+ if (typeof data[config] === 'undefined') {
788
+ throw new TypeError(`No method named "${config}"`);
592
789
  }
593
- });
594
- };
595
790
 
596
- _createClass(Modal, null, [{
597
- key: "VERSION",
598
- get: function get() {
599
- return VERSION;
600
- }
601
- }, {
602
- key: "Default",
603
- get: function get() {
604
- return Default;
605
- }
606
- }]);
791
+ data[config](relatedTarget);
792
+ });
793
+ }
607
794
 
608
- return Modal;
609
- }();
795
+ }
610
796
  /**
611
- * Data API implementation
797
+ * ------------------------------------------------------------------------
798
+ * Data Api implementation
799
+ * ------------------------------------------------------------------------
612
800
  */
613
801
 
614
802
 
615
- $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
616
- var _this11 = this;
617
-
618
- var target;
619
- var selector = Util__default["default"].getSelectorFromElement(this);
620
-
621
- if (selector) {
622
- target = document.querySelector(selector);
623
- }
624
-
625
- 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);
626
805
 
627
- if (this.tagName === 'A' || this.tagName === 'AREA') {
806
+ if (['A', 'AREA'].includes(this.tagName)) {
628
807
  event.preventDefault();
629
808
  }
630
809
 
631
- var $target = $__default["default"](target).one(EVENT_SHOW, function (showEvent) {
632
- if (showEvent.isDefaultPrevented()) {
633
- // 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
634
813
  return;
635
814
  }
636
815
 
637
- $target.one(EVENT_HIDDEN, function () {
638
- if ($__default["default"](_this11).is(':visible')) {
639
- _this11.focus();
816
+ EventHandler__default['default'].one(target, EVENT_HIDDEN, () => {
817
+ if (isVisible(this)) {
818
+ this.focus();
640
819
  }
641
820
  });
642
821
  });
643
-
644
- Modal._jQueryInterface.call($__default["default"](target), config, this);
822
+ const data = Modal.getInstance(target) || new Modal(target);
823
+ data.toggle(this);
645
824
  });
646
825
  /**
826
+ * ------------------------------------------------------------------------
647
827
  * jQuery
828
+ * ------------------------------------------------------------------------
829
+ * add .Modal to jQuery only if jQuery is present
648
830
  */
649
831
 
650
- $__default["default"].fn[NAME] = Modal._jQueryInterface;
651
- $__default["default"].fn[NAME].Constructor = Modal;
652
-
653
- $__default["default"].fn[NAME].noConflict = function () {
654
- $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
655
- return Modal._jQueryInterface;
656
- };
832
+ defineJQueryPlugin(NAME, Modal);
657
833
 
658
834
  return Modal;
659
835
 
660
- }));
836
+ })));