bootstrap 5.2.0 → 5.3.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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +55 -0
  3. data/README.md +25 -5
  4. data/assets/javascripts/bootstrap/alert.js +22 -32
  5. data/assets/javascripts/bootstrap/base-component.js +22 -38
  6. data/assets/javascripts/bootstrap/button.js +19 -22
  7. data/assets/javascripts/bootstrap/carousel.js +52 -135
  8. data/assets/javascripts/bootstrap/collapse.js +40 -102
  9. data/assets/javascripts/bootstrap/dom/data.js +8 -12
  10. data/assets/javascripts/bootstrap/dom/event-handler.js +19 -66
  11. data/assets/javascripts/bootstrap/dom/manipulator.js +4 -17
  12. data/assets/javascripts/bootstrap/dom/selector-engine.js +42 -24
  13. data/assets/javascripts/bootstrap/dropdown.js +74 -143
  14. data/assets/javascripts/bootstrap/modal.js +66 -143
  15. data/assets/javascripts/bootstrap/offcanvas.js +50 -102
  16. data/assets/javascripts/bootstrap/popover.js +23 -29
  17. data/assets/javascripts/bootstrap/scrollspy.js +64 -97
  18. data/assets/javascripts/bootstrap/tab.js +55 -112
  19. data/assets/javascripts/bootstrap/toast.js +39 -77
  20. data/assets/javascripts/bootstrap/tooltip.js +99 -216
  21. data/assets/javascripts/bootstrap/util/backdrop.js +28 -54
  22. data/assets/javascripts/bootstrap/util/component-functions.js +13 -18
  23. data/assets/javascripts/bootstrap/util/config.js +15 -27
  24. data/assets/javascripts/bootstrap/util/focustrap.js +20 -36
  25. data/assets/javascripts/bootstrap/util/index.js +42 -111
  26. data/assets/javascripts/bootstrap/util/sanitizer.js +30 -42
  27. data/assets/javascripts/bootstrap/util/scrollbar.js +24 -50
  28. data/assets/javascripts/bootstrap/util/swipe.js +27 -48
  29. data/assets/javascripts/bootstrap/util/template-factory.js +25 -52
  30. data/assets/javascripts/bootstrap-sprockets.js +12 -12
  31. data/assets/javascripts/bootstrap.js +764 -1529
  32. data/assets/javascripts/bootstrap.min.js +3 -3
  33. data/assets/stylesheets/_bootstrap-grid.scss +1 -3
  34. data/assets/stylesheets/_bootstrap-reboot.scss +1 -0
  35. data/assets/stylesheets/_bootstrap.scss +1 -0
  36. data/assets/stylesheets/bootstrap/_accordion.scss +16 -4
  37. data/assets/stylesheets/bootstrap/_alert.scss +8 -11
  38. data/assets/stylesheets/bootstrap/_button-group.scss +3 -3
  39. data/assets/stylesheets/bootstrap/_buttons.scss +31 -10
  40. data/assets/stylesheets/bootstrap/_card.scss +5 -0
  41. data/assets/stylesheets/bootstrap/_carousel.scss +20 -5
  42. data/assets/stylesheets/bootstrap/_close.scss +32 -9
  43. data/assets/stylesheets/bootstrap/_dropdown.scss +3 -1
  44. data/assets/stylesheets/bootstrap/_functions.scss +3 -3
  45. data/assets/stylesheets/bootstrap/_grid.scss +6 -0
  46. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  47. data/assets/stylesheets/bootstrap/_list-group.scss +18 -12
  48. data/assets/stylesheets/bootstrap/_maps.scss +120 -0
  49. data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
  50. data/assets/stylesheets/bootstrap/_modal.scss +1 -1
  51. data/assets/stylesheets/bootstrap/_nav.scss +42 -5
  52. data/assets/stylesheets/bootstrap/_navbar.scss +17 -4
  53. data/assets/stylesheets/bootstrap/_offcanvas.scss +9 -6
  54. data/assets/stylesheets/bootstrap/_pagination.scss +1 -1
  55. data/assets/stylesheets/bootstrap/_popover.scss +5 -5
  56. data/assets/stylesheets/bootstrap/_progress.scss +10 -1
  57. data/assets/stylesheets/bootstrap/_reboot.scss +3 -3
  58. data/assets/stylesheets/bootstrap/_root.scss +121 -10
  59. data/assets/stylesheets/bootstrap/_tables.scss +18 -11
  60. data/assets/stylesheets/bootstrap/_toasts.scss +5 -2
  61. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -5
  62. data/assets/stylesheets/bootstrap/_utilities.scss +172 -13
  63. data/assets/stylesheets/bootstrap/_variables-dark.scss +85 -0
  64. data/assets/stylesheets/bootstrap/_variables.scss +272 -162
  65. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +4 -0
  66. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +23 -3
  67. data/assets/stylesheets/bootstrap/forms/_form-check.scss +24 -11
  68. data/assets/stylesheets/bootstrap/forms/_form-control.scss +23 -3
  69. data/assets/stylesheets/bootstrap/forms/_form-select.scss +11 -2
  70. data/assets/stylesheets/bootstrap/forms/_input-group.scss +7 -4
  71. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +0 -2
  72. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +20 -2
  73. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  74. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  75. data/assets/stylesheets/bootstrap/mixins/_alert.scss +4 -1
  76. data/assets/stylesheets/bootstrap/mixins/_banner.scss +3 -5
  77. data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
  78. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  79. data/assets/stylesheets/bootstrap/mixins/_forms.scss +18 -17
  80. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
  81. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +2 -2
  82. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +2 -2
  83. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +5 -1
  84. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
  85. data/bootstrap.gemspec +1 -1
  86. data/lib/bootstrap/version.rb +2 -2
  87. data/tasks/updater/js.rb +2 -2
  88. data/tasks/updater/network.rb +2 -2
  89. data/tasks/updater/scss.rb +1 -1
  90. data/tasks/updater.rb +2 -2
  91. data/test/gemfiles/rails_5_2.gemfile +8 -0
  92. data/test/gemfiles/rails_7_0.gemfile +7 -0
  93. data/test/test_helper.rb +3 -2
  94. metadata +17 -9
  95. data/.travis.yml +0 -32
@@ -1,29 +1,22 @@
1
1
  /*!
2
- * Bootstrap modal.js v5.2.0 (https://getbootstrap.com/)
3
- * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap modal.js v5.3.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2023 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('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./util/scrollbar'), require('./base-component'), require('./util/backdrop'), require('./util/focustrap'), require('./util/component-functions')) :
8
- typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './util/scrollbar', './base-component', './util/backdrop', './util/focustrap', './util/component-functions'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Index, global.EventHandler, global.SelectorEngine, global.Scrollbar, global.BaseComponent, global.Backdrop, global.Focustrap, global.ComponentFunctions));
10
- })(this, (function (index, EventHandler, SelectorEngine, ScrollBarHelper, BaseComponent, Backdrop, FocusTrap, componentFunctions) { 'use strict';
11
-
12
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
-
14
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
16
- const ScrollBarHelper__default = /*#__PURE__*/_interopDefaultLegacy(ScrollBarHelper);
17
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
- const Backdrop__default = /*#__PURE__*/_interopDefaultLegacy(Backdrop);
19
- const FocusTrap__default = /*#__PURE__*/_interopDefaultLegacy(FocusTrap);
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/backdrop.js'), require('./util/component-functions.js'), require('./util/focustrap.js'), require('./util/index.js'), require('./util/scrollbar.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/backdrop', './util/component-functions', './util/focustrap', './util/index', './util/scrollbar'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Backdrop, global.ComponentFunctions, global.Focustrap, global.Index, global.Scrollbar));
10
+ })(this, (function (BaseComponent, EventHandler, SelectorEngine, Backdrop, componentFunctions_js, FocusTrap, index_js, ScrollBarHelper) { 'use strict';
20
11
 
21
12
  /**
22
13
  * --------------------------------------------------------------------------
23
- * Bootstrap (v5.2.0): modal.js
14
+ * Bootstrap modal.js
24
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
25
16
  * --------------------------------------------------------------------------
26
17
  */
18
+
19
+
27
20
  /**
28
21
  * Constants
29
22
  */
@@ -39,6 +32,7 @@
39
32
  const EVENT_SHOW = `show${EVENT_KEY}`;
40
33
  const EVENT_SHOWN = `shown${EVENT_KEY}`;
41
34
  const EVENT_RESIZE = `resize${EVENT_KEY}`;
35
+ const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
42
36
  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;
43
37
  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
44
38
  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
@@ -60,336 +54,265 @@
60
54
  focus: 'boolean',
61
55
  keyboard: 'boolean'
62
56
  };
57
+
63
58
  /**
64
59
  * Class definition
65
60
  */
66
61
 
67
- class Modal extends BaseComponent__default.default {
62
+ class Modal extends BaseComponent {
68
63
  constructor(element, config) {
69
64
  super(element, config);
70
- this._dialog = SelectorEngine__default.default.findOne(SELECTOR_DIALOG, this._element);
65
+ this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
71
66
  this._backdrop = this._initializeBackDrop();
72
67
  this._focustrap = this._initializeFocusTrap();
73
68
  this._isShown = false;
74
69
  this._isTransitioning = false;
75
- this._scrollBar = new ScrollBarHelper__default.default();
76
-
70
+ this._scrollBar = new ScrollBarHelper();
77
71
  this._addEventListeners();
78
- } // Getters
79
-
72
+ }
80
73
 
74
+ // Getters
81
75
  static get Default() {
82
76
  return Default;
83
77
  }
84
-
85
78
  static get DefaultType() {
86
79
  return DefaultType;
87
80
  }
88
-
89
81
  static get NAME() {
90
82
  return NAME;
91
- } // Public
92
-
83
+ }
93
84
 
85
+ // Public
94
86
  toggle(relatedTarget) {
95
87
  return this._isShown ? this.hide() : this.show(relatedTarget);
96
88
  }
97
-
98
89
  show(relatedTarget) {
99
90
  if (this._isShown || this._isTransitioning) {
100
91
  return;
101
92
  }
102
-
103
- const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
93
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
104
94
  relatedTarget
105
95
  });
106
-
107
96
  if (showEvent.defaultPrevented) {
108
97
  return;
109
98
  }
110
-
111
99
  this._isShown = true;
112
100
  this._isTransitioning = true;
113
-
114
101
  this._scrollBar.hide();
115
-
116
102
  document.body.classList.add(CLASS_NAME_OPEN);
117
-
118
103
  this._adjustDialog();
119
-
120
104
  this._backdrop.show(() => this._showElement(relatedTarget));
121
105
  }
122
-
123
106
  hide() {
124
107
  if (!this._isShown || this._isTransitioning) {
125
108
  return;
126
109
  }
127
-
128
- const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
129
-
110
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
130
111
  if (hideEvent.defaultPrevented) {
131
112
  return;
132
113
  }
133
-
134
114
  this._isShown = false;
135
115
  this._isTransitioning = true;
136
-
137
116
  this._focustrap.deactivate();
138
-
139
117
  this._element.classList.remove(CLASS_NAME_SHOW);
140
-
141
118
  this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
142
119
  }
143
-
144
120
  dispose() {
145
- for (const htmlElement of [window, this._dialog]) {
146
- EventHandler__default.default.off(htmlElement, EVENT_KEY);
147
- }
148
-
121
+ EventHandler.off(window, EVENT_KEY);
122
+ EventHandler.off(this._dialog, EVENT_KEY);
149
123
  this._backdrop.dispose();
150
-
151
124
  this._focustrap.deactivate();
152
-
153
125
  super.dispose();
154
126
  }
155
-
156
127
  handleUpdate() {
157
128
  this._adjustDialog();
158
- } // Private
159
-
129
+ }
160
130
 
131
+ // Private
161
132
  _initializeBackDrop() {
162
- return new Backdrop__default.default({
133
+ return new Backdrop({
163
134
  isVisible: Boolean(this._config.backdrop),
164
135
  // 'static' option will be translated to true, and booleans will keep their value,
165
136
  isAnimated: this._isAnimated()
166
137
  });
167
138
  }
168
-
169
139
  _initializeFocusTrap() {
170
- return new FocusTrap__default.default({
140
+ return new FocusTrap({
171
141
  trapElement: this._element
172
142
  });
173
143
  }
174
-
175
144
  _showElement(relatedTarget) {
176
145
  // try to append dynamic modal
177
146
  if (!document.body.contains(this._element)) {
178
147
  document.body.append(this._element);
179
148
  }
180
-
181
149
  this._element.style.display = 'block';
182
-
183
150
  this._element.removeAttribute('aria-hidden');
184
-
185
151
  this._element.setAttribute('aria-modal', true);
186
-
187
152
  this._element.setAttribute('role', 'dialog');
188
-
189
153
  this._element.scrollTop = 0;
190
- const modalBody = SelectorEngine__default.default.findOne(SELECTOR_MODAL_BODY, this._dialog);
191
-
154
+ const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
192
155
  if (modalBody) {
193
156
  modalBody.scrollTop = 0;
194
157
  }
195
-
196
- index.reflow(this._element);
197
-
158
+ index_js.reflow(this._element);
198
159
  this._element.classList.add(CLASS_NAME_SHOW);
199
-
200
160
  const transitionComplete = () => {
201
161
  if (this._config.focus) {
202
162
  this._focustrap.activate();
203
163
  }
204
-
205
164
  this._isTransitioning = false;
206
- EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
165
+ EventHandler.trigger(this._element, EVENT_SHOWN, {
207
166
  relatedTarget
208
167
  });
209
168
  };
210
-
211
169
  this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
212
170
  }
213
-
214
171
  _addEventListeners() {
215
- EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
172
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
216
173
  if (event.key !== ESCAPE_KEY) {
217
174
  return;
218
175
  }
219
-
220
176
  if (this._config.keyboard) {
221
- event.preventDefault();
222
177
  this.hide();
223
178
  return;
224
179
  }
225
-
226
180
  this._triggerBackdropTransition();
227
181
  });
228
- EventHandler__default.default.on(window, EVENT_RESIZE, () => {
182
+ EventHandler.on(window, EVENT_RESIZE, () => {
229
183
  if (this._isShown && !this._isTransitioning) {
230
184
  this._adjustDialog();
231
185
  }
232
186
  });
233
- EventHandler__default.default.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
234
- if (event.target !== event.currentTarget) {
235
- // click is inside modal-dialog
236
- return;
237
- }
238
-
239
- if (this._config.backdrop === 'static') {
240
- this._triggerBackdropTransition();
241
-
242
- return;
243
- }
244
-
245
- if (this._config.backdrop) {
246
- this.hide();
247
- }
187
+ EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
188
+ // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
189
+ EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
190
+ if (this._element !== event.target || this._element !== event2.target) {
191
+ return;
192
+ }
193
+ if (this._config.backdrop === 'static') {
194
+ this._triggerBackdropTransition();
195
+ return;
196
+ }
197
+ if (this._config.backdrop) {
198
+ this.hide();
199
+ }
200
+ });
248
201
  });
249
202
  }
250
-
251
203
  _hideModal() {
252
204
  this._element.style.display = 'none';
253
-
254
205
  this._element.setAttribute('aria-hidden', true);
255
-
256
206
  this._element.removeAttribute('aria-modal');
257
-
258
207
  this._element.removeAttribute('role');
259
-
260
208
  this._isTransitioning = false;
261
-
262
209
  this._backdrop.hide(() => {
263
210
  document.body.classList.remove(CLASS_NAME_OPEN);
264
-
265
211
  this._resetAdjustments();
266
-
267
212
  this._scrollBar.reset();
268
-
269
- EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
213
+ EventHandler.trigger(this._element, EVENT_HIDDEN);
270
214
  });
271
215
  }
272
-
273
216
  _isAnimated() {
274
217
  return this._element.classList.contains(CLASS_NAME_FADE);
275
218
  }
276
-
277
219
  _triggerBackdropTransition() {
278
- const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE_PREVENTED);
279
-
220
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
280
221
  if (hideEvent.defaultPrevented) {
281
222
  return;
282
223
  }
283
-
284
224
  const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
285
- const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed
286
-
225
+ const initialOverflowY = this._element.style.overflowY;
226
+ // return if the following background transition hasn't yet completed
287
227
  if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
288
228
  return;
289
229
  }
290
-
291
230
  if (!isModalOverflowing) {
292
231
  this._element.style.overflowY = 'hidden';
293
232
  }
294
-
295
233
  this._element.classList.add(CLASS_NAME_STATIC);
296
-
297
234
  this._queueCallback(() => {
298
235
  this._element.classList.remove(CLASS_NAME_STATIC);
299
-
300
236
  this._queueCallback(() => {
301
237
  this._element.style.overflowY = initialOverflowY;
302
238
  }, this._dialog);
303
239
  }, this._dialog);
304
-
305
240
  this._element.focus();
306
241
  }
242
+
307
243
  /**
308
244
  * The following methods are used to handle overflowing modals
309
245
  */
310
246
 
311
-
312
247
  _adjustDialog() {
313
248
  const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
314
-
315
249
  const scrollbarWidth = this._scrollBar.getWidth();
316
-
317
250
  const isBodyOverflowing = scrollbarWidth > 0;
318
-
319
251
  if (isBodyOverflowing && !isModalOverflowing) {
320
- const property = index.isRTL() ? 'paddingLeft' : 'paddingRight';
252
+ const property = index_js.isRTL() ? 'paddingLeft' : 'paddingRight';
321
253
  this._element.style[property] = `${scrollbarWidth}px`;
322
254
  }
323
-
324
255
  if (!isBodyOverflowing && isModalOverflowing) {
325
- const property = index.isRTL() ? 'paddingRight' : 'paddingLeft';
256
+ const property = index_js.isRTL() ? 'paddingRight' : 'paddingLeft';
326
257
  this._element.style[property] = `${scrollbarWidth}px`;
327
258
  }
328
259
  }
329
-
330
260
  _resetAdjustments() {
331
261
  this._element.style.paddingLeft = '';
332
262
  this._element.style.paddingRight = '';
333
- } // Static
334
-
263
+ }
335
264
 
265
+ // Static
336
266
  static jQueryInterface(config, relatedTarget) {
337
267
  return this.each(function () {
338
268
  const data = Modal.getOrCreateInstance(this, config);
339
-
340
269
  if (typeof config !== 'string') {
341
270
  return;
342
271
  }
343
-
344
272
  if (typeof data[config] === 'undefined') {
345
273
  throw new TypeError(`No method named "${config}"`);
346
274
  }
347
-
348
275
  data[config](relatedTarget);
349
276
  });
350
277
  }
351
-
352
278
  }
279
+
353
280
  /**
354
281
  * Data API implementation
355
282
  */
356
283
 
357
-
358
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
359
- const target = index.getElementFromSelector(this);
360
-
284
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
285
+ const target = SelectorEngine.getElementFromSelector(this);
361
286
  if (['A', 'AREA'].includes(this.tagName)) {
362
287
  event.preventDefault();
363
288
  }
364
-
365
- EventHandler__default.default.one(target, EVENT_SHOW, showEvent => {
289
+ EventHandler.one(target, EVENT_SHOW, showEvent => {
366
290
  if (showEvent.defaultPrevented) {
367
291
  // only register focus restorer if modal will actually get shown
368
292
  return;
369
293
  }
370
-
371
- EventHandler__default.default.one(target, EVENT_HIDDEN, () => {
372
- if (index.isVisible(this)) {
294
+ EventHandler.one(target, EVENT_HIDDEN, () => {
295
+ if (index_js.isVisible(this)) {
373
296
  this.focus();
374
297
  }
375
298
  });
376
- }); // avoid conflict when clicking modal toggler while another one is open
377
-
378
- const alreadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
299
+ });
379
300
 
301
+ // avoid conflict when clicking modal toggler while another one is open
302
+ const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
380
303
  if (alreadyOpen) {
381
304
  Modal.getInstance(alreadyOpen).hide();
382
305
  }
383
-
384
306
  const data = Modal.getOrCreateInstance(target);
385
307
  data.toggle(this);
386
308
  });
387
- componentFunctions.enableDismissTrigger(Modal);
309
+ componentFunctions_js.enableDismissTrigger(Modal);
310
+
388
311
  /**
389
312
  * jQuery
390
313
  */
391
314
 
392
- index.defineJQueryPlugin(Modal);
315
+ index_js.defineJQueryPlugin(Modal);
393
316
 
394
317
  return Modal;
395
318