bootstrap 4.4.1 → 5.0.1

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