bootstrap 5.2.3 → 5.3.2

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +11 -5
  3. data/Gemfile +1 -0
  4. data/README.md +6 -2
  5. data/Rakefile +10 -1
  6. data/assets/javascripts/bootstrap/alert.js +22 -32
  7. data/assets/javascripts/bootstrap/base-component.js +22 -38
  8. data/assets/javascripts/bootstrap/button.js +19 -22
  9. data/assets/javascripts/bootstrap/carousel.js +52 -135
  10. data/assets/javascripts/bootstrap/collapse.js +40 -102
  11. data/assets/javascripts/bootstrap/dom/data.js +8 -12
  12. data/assets/javascripts/bootstrap/dom/event-handler.js +19 -66
  13. data/assets/javascripts/bootstrap/dom/manipulator.js +4 -17
  14. data/assets/javascripts/bootstrap/dom/selector-engine.js +42 -24
  15. data/assets/javascripts/bootstrap/dropdown.js +74 -145
  16. data/assets/javascripts/bootstrap/modal.js +53 -133
  17. data/assets/javascripts/bootstrap/offcanvas.js +50 -102
  18. data/assets/javascripts/bootstrap/popover.js +23 -29
  19. data/assets/javascripts/bootstrap/scrollspy.js +53 -90
  20. data/assets/javascripts/bootstrap/tab.js +63 -112
  21. data/assets/javascripts/bootstrap/toast.js +31 -73
  22. data/assets/javascripts/bootstrap/tooltip.js +75 -177
  23. data/assets/javascripts/bootstrap/util/backdrop.js +28 -54
  24. data/assets/javascripts/bootstrap/util/component-functions.js +13 -18
  25. data/assets/javascripts/bootstrap/util/config.js +15 -27
  26. data/assets/javascripts/bootstrap/util/focustrap.js +20 -36
  27. data/assets/javascripts/bootstrap/util/index.js +42 -111
  28. data/assets/javascripts/bootstrap/util/sanitizer.js +30 -42
  29. data/assets/javascripts/bootstrap/util/scrollbar.js +24 -50
  30. data/assets/javascripts/bootstrap/util/swipe.js +27 -48
  31. data/assets/javascripts/bootstrap/util/template-factory.js +25 -52
  32. data/assets/javascripts/bootstrap-sprockets.js +10 -10
  33. data/assets/javascripts/bootstrap.js +689 -1444
  34. data/assets/javascripts/bootstrap.min.js +3 -3
  35. data/assets/stylesheets/_bootstrap-grid.scss +1 -3
  36. data/assets/stylesheets/_bootstrap-reboot.scss +1 -0
  37. data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
  38. data/assets/stylesheets/_bootstrap.scss +1 -0
  39. data/assets/stylesheets/bootstrap/_accordion.scss +9 -0
  40. data/assets/stylesheets/bootstrap/_alert.scss +8 -11
  41. data/assets/stylesheets/bootstrap/_button-group.scss +2 -2
  42. data/assets/stylesheets/bootstrap/_buttons.scss +3 -3
  43. data/assets/stylesheets/bootstrap/_card.scss +5 -0
  44. data/assets/stylesheets/bootstrap/_carousel.scss +20 -2
  45. data/assets/stylesheets/bootstrap/_close.scss +32 -9
  46. data/assets/stylesheets/bootstrap/_dropdown.scss +1 -0
  47. data/assets/stylesheets/bootstrap/_functions.scss +1 -1
  48. data/assets/stylesheets/bootstrap/_grid.scss +6 -0
  49. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  50. data/assets/stylesheets/bootstrap/_list-group.scss +12 -7
  51. data/assets/stylesheets/bootstrap/_maps.scss +120 -0
  52. data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
  53. data/assets/stylesheets/bootstrap/_nav.scss +42 -17
  54. data/assets/stylesheets/bootstrap/_navbar.scss +15 -4
  55. data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -2
  56. data/assets/stylesheets/bootstrap/_pagination.scss +1 -1
  57. data/assets/stylesheets/bootstrap/_progress.scss +10 -1
  58. data/assets/stylesheets/bootstrap/_reboot.scss +8 -7
  59. data/assets/stylesheets/bootstrap/_root.scss +124 -10
  60. data/assets/stylesheets/bootstrap/_tables.scss +18 -11
  61. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -5
  62. data/assets/stylesheets/bootstrap/_utilities.scss +175 -16
  63. data/assets/stylesheets/bootstrap/_variables-dark.scss +87 -0
  64. data/assets/stylesheets/bootstrap/_variables.scss +282 -169
  65. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +23 -3
  66. data/assets/stylesheets/bootstrap/forms/_form-check.scss +26 -12
  67. data/assets/stylesheets/bootstrap/forms/_form-control.scss +24 -4
  68. data/assets/stylesheets/bootstrap/forms/_form-range.scss +3 -3
  69. data/assets/stylesheets/bootstrap/forms/_form-select.scss +12 -3
  70. data/assets/stylesheets/bootstrap/forms/_input-group.scss +1 -1
  71. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +1 -4
  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/helpers/_vr.scss +1 -1
  76. data/assets/stylesheets/bootstrap/mixins/_alert.scss +4 -1
  77. data/assets/stylesheets/bootstrap/mixins/_banner.scss +2 -4
  78. data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
  79. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  80. data/assets/stylesheets/bootstrap/mixins/_forms.scss +8 -7
  81. data/assets/stylesheets/bootstrap/mixins/_grid.scss +1 -1
  82. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
  83. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +1 -1
  84. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +5 -1
  85. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
  86. data/bootstrap.gemspec +4 -3
  87. data/lib/bootstrap/engine.rb +7 -1
  88. data/lib/bootstrap/version.rb +2 -2
  89. data/tasks/updater/js.rb +1 -1
  90. data/tasks/updater/scss.rb +2 -2
  91. data/test/gemfiles/rails_4_2.gemfile +1 -1
  92. data/test/gemfiles/rails_5_0.gemfile +1 -1
  93. data/test/gemfiles/rails_5_1.gemfile +1 -1
  94. data/test/gemfiles/rails_5_2.gemfile +1 -1
  95. data/test/gemfiles/rails_6_0.gemfile +1 -0
  96. data/test/gemfiles/rails_6_1.gemfile +1 -0
  97. data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
  98. data/test/gemfiles/{rails_7_0.gemfile → rails_7_0_sassc.gemfile} +1 -0
  99. metadata +35 -15
  100. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +0 -18
@@ -1,18 +1,15 @@
1
1
  /*!
2
- * Bootstrap dropdown.js v5.2.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap dropdown.js v5.3.2 (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('@popperjs/core'), require('./util/index'), require('./dom/event-handler'), require('./dom/manipulator'), require('./dom/selector-engine'), require('./base-component')) :
8
- typeof define === 'function' && define.amd ? define(['@popperjs/core', './util/index', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global["@popperjs/core"], global.Index, global.EventHandler, global.Manipulator, global.SelectorEngine, global.BaseComponent));
10
- })(this, (function (Popper, index, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./util/index.js')) :
8
+ typeof define === 'function' && define.amd ? define(['@popperjs/core', './base-component', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './util/index'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global["@popperjs/core"], global.BaseComponent, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Index));
10
+ })(this, (function (Popper, BaseComponent, EventHandler, Manipulator, SelectorEngine, index_js) { 'use strict';
11
11
 
12
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
-
14
- function _interopNamespace(e) {
15
- if (e && e.__esModule) return e;
12
+ function _interopNamespaceDefault(e) {
16
13
  const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
17
14
  if (e) {
18
15
  for (const k in e) {
@@ -29,18 +26,16 @@
29
26
  return Object.freeze(n);
30
27
  }
31
28
 
32
- const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
33
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
34
- const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
35
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
36
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
29
+ const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
37
30
 
38
31
  /**
39
32
  * --------------------------------------------------------------------------
40
- * Bootstrap (v5.2.3): dropdown.js
33
+ * Bootstrap dropdown.js
41
34
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
42
35
  * --------------------------------------------------------------------------
43
36
  */
37
+
38
+
44
39
  /**
45
40
  * Constants
46
41
  */
@@ -74,12 +69,12 @@
74
69
  const SELECTOR_NAVBAR = '.navbar';
75
70
  const SELECTOR_NAVBAR_NAV = '.navbar-nav';
76
71
  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
77
- const PLACEMENT_TOP = index.isRTL() ? 'top-end' : 'top-start';
78
- const PLACEMENT_TOPEND = index.isRTL() ? 'top-start' : 'top-end';
79
- const PLACEMENT_BOTTOM = index.isRTL() ? 'bottom-end' : 'bottom-start';
80
- const PLACEMENT_BOTTOMEND = index.isRTL() ? 'bottom-start' : 'bottom-end';
81
- const PLACEMENT_RIGHT = index.isRTL() ? 'left-start' : 'right-start';
82
- const PLACEMENT_LEFT = index.isRTL() ? 'right-start' : 'left-start';
72
+ const PLACEMENT_TOP = index_js.isRTL() ? 'top-end' : 'top-start';
73
+ const PLACEMENT_TOPEND = index_js.isRTL() ? 'top-start' : 'top-end';
74
+ const PLACEMENT_BOTTOM = index_js.isRTL() ? 'bottom-end' : 'bottom-start';
75
+ const PLACEMENT_BOTTOMEND = index_js.isRTL() ? 'bottom-start' : 'bottom-end';
76
+ const PLACEMENT_RIGHT = index_js.isRTL() ? 'left-start' : 'right-start';
77
+ const PLACEMENT_LEFT = index_js.isRTL() ? 'right-start' : 'left-start';
83
78
  const PLACEMENT_TOPCENTER = 'top';
84
79
  const PLACEMENT_BOTTOMCENTER = 'bottom';
85
80
  const Default = {
@@ -98,218 +93,172 @@
98
93
  popperConfig: '(null|object|function)',
99
94
  reference: '(string|element|object)'
100
95
  };
96
+
101
97
  /**
102
98
  * Class definition
103
99
  */
104
100
 
105
- class Dropdown extends BaseComponent__default.default {
101
+ class Dropdown extends BaseComponent {
106
102
  constructor(element, config) {
107
103
  super(element, config);
108
104
  this._popper = null;
109
105
  this._parent = this._element.parentNode; // dropdown wrapper
110
- // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
111
-
112
- this._menu = SelectorEngine__default.default.next(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.findOne(SELECTOR_MENU, this._parent);
106
+ // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
107
+ this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
113
108
  this._inNavbar = this._detectNavbar();
114
- } // Getters
115
-
109
+ }
116
110
 
111
+ // Getters
117
112
  static get Default() {
118
113
  return Default;
119
114
  }
120
-
121
115
  static get DefaultType() {
122
116
  return DefaultType;
123
117
  }
124
-
125
118
  static get NAME() {
126
119
  return NAME;
127
- } // Public
128
-
120
+ }
129
121
 
122
+ // Public
130
123
  toggle() {
131
124
  return this._isShown() ? this.hide() : this.show();
132
125
  }
133
-
134
126
  show() {
135
- if (index.isDisabled(this._element) || this._isShown()) {
127
+ if (index_js.isDisabled(this._element) || this._isShown()) {
136
128
  return;
137
129
  }
138
-
139
130
  const relatedTarget = {
140
131
  relatedTarget: this._element
141
132
  };
142
- const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, relatedTarget);
143
-
133
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);
144
134
  if (showEvent.defaultPrevented) {
145
135
  return;
146
136
  }
137
+ this._createPopper();
147
138
 
148
- this._createPopper(); // If this is a touch-enabled device we add extra
139
+ // If this is a touch-enabled device we add extra
149
140
  // empty mouseover listeners to the body's immediate children;
150
141
  // only needed because of broken event delegation on iOS
151
142
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
152
-
153
-
154
143
  if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
155
144
  for (const element of [].concat(...document.body.children)) {
156
- EventHandler__default.default.on(element, 'mouseover', index.noop);
145
+ EventHandler.on(element, 'mouseover', index_js.noop);
157
146
  }
158
147
  }
159
-
160
148
  this._element.focus();
161
-
162
149
  this._element.setAttribute('aria-expanded', true);
163
-
164
150
  this._menu.classList.add(CLASS_NAME_SHOW);
165
-
166
151
  this._element.classList.add(CLASS_NAME_SHOW);
167
-
168
- EventHandler__default.default.trigger(this._element, EVENT_SHOWN, relatedTarget);
152
+ EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);
169
153
  }
170
-
171
154
  hide() {
172
- if (index.isDisabled(this._element) || !this._isShown()) {
155
+ if (index_js.isDisabled(this._element) || !this._isShown()) {
173
156
  return;
174
157
  }
175
-
176
158
  const relatedTarget = {
177
159
  relatedTarget: this._element
178
160
  };
179
-
180
161
  this._completeHide(relatedTarget);
181
162
  }
182
-
183
163
  dispose() {
184
164
  if (this._popper) {
185
165
  this._popper.destroy();
186
166
  }
187
-
188
167
  super.dispose();
189
168
  }
190
-
191
169
  update() {
192
170
  this._inNavbar = this._detectNavbar();
193
-
194
171
  if (this._popper) {
195
172
  this._popper.update();
196
173
  }
197
- } // Private
198
-
174
+ }
199
175
 
176
+ // Private
200
177
  _completeHide(relatedTarget) {
201
- const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE, relatedTarget);
202
-
178
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);
203
179
  if (hideEvent.defaultPrevented) {
204
180
  return;
205
- } // If this is a touch-enabled device we remove the extra
206
- // empty mouseover listeners we added for iOS support
207
-
181
+ }
208
182
 
183
+ // If this is a touch-enabled device we remove the extra
184
+ // empty mouseover listeners we added for iOS support
209
185
  if ('ontouchstart' in document.documentElement) {
210
186
  for (const element of [].concat(...document.body.children)) {
211
- EventHandler__default.default.off(element, 'mouseover', index.noop);
187
+ EventHandler.off(element, 'mouseover', index_js.noop);
212
188
  }
213
189
  }
214
-
215
190
  if (this._popper) {
216
191
  this._popper.destroy();
217
192
  }
218
-
219
193
  this._menu.classList.remove(CLASS_NAME_SHOW);
220
-
221
194
  this._element.classList.remove(CLASS_NAME_SHOW);
222
-
223
195
  this._element.setAttribute('aria-expanded', 'false');
224
-
225
- Manipulator__default.default.removeDataAttribute(this._menu, 'popper');
226
- EventHandler__default.default.trigger(this._element, EVENT_HIDDEN, relatedTarget);
196
+ Manipulator.removeDataAttribute(this._menu, 'popper');
197
+ EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);
227
198
  }
228
-
229
199
  _getConfig(config) {
230
200
  config = super._getConfig(config);
231
-
232
- if (typeof config.reference === 'object' && !index.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
201
+ if (typeof config.reference === 'object' && !index_js.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
233
202
  // Popper virtual elements require a getBoundingClientRect method
234
203
  throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
235
204
  }
236
-
237
205
  return config;
238
206
  }
239
-
240
207
  _createPopper() {
241
208
  if (typeof Popper__namespace === 'undefined') {
242
209
  throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
243
210
  }
244
-
245
211
  let referenceElement = this._element;
246
-
247
212
  if (this._config.reference === 'parent') {
248
213
  referenceElement = this._parent;
249
- } else if (index.isElement(this._config.reference)) {
250
- referenceElement = index.getElement(this._config.reference);
214
+ } else if (index_js.isElement(this._config.reference)) {
215
+ referenceElement = index_js.getElement(this._config.reference);
251
216
  } else if (typeof this._config.reference === 'object') {
252
217
  referenceElement = this._config.reference;
253
218
  }
254
-
255
219
  const popperConfig = this._getPopperConfig();
256
-
257
220
  this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
258
221
  }
259
-
260
222
  _isShown() {
261
223
  return this._menu.classList.contains(CLASS_NAME_SHOW);
262
224
  }
263
-
264
225
  _getPlacement() {
265
226
  const parentDropdown = this._parent;
266
-
267
227
  if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
268
228
  return PLACEMENT_RIGHT;
269
229
  }
270
-
271
230
  if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
272
231
  return PLACEMENT_LEFT;
273
232
  }
274
-
275
233
  if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
276
234
  return PLACEMENT_TOPCENTER;
277
235
  }
278
-
279
236
  if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
280
237
  return PLACEMENT_BOTTOMCENTER;
281
- } // We need to trim the value because custom properties can also include spaces
282
-
238
+ }
283
239
 
240
+ // We need to trim the value because custom properties can also include spaces
284
241
  const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
285
-
286
242
  if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
287
243
  return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
288
244
  }
289
-
290
245
  return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
291
246
  }
292
-
293
247
  _detectNavbar() {
294
248
  return this._element.closest(SELECTOR_NAVBAR) !== null;
295
249
  }
296
-
297
250
  _getOffset() {
298
251
  const {
299
252
  offset
300
253
  } = this._config;
301
-
302
254
  if (typeof offset === 'string') {
303
255
  return offset.split(',').map(value => Number.parseInt(value, 10));
304
256
  }
305
-
306
257
  if (typeof offset === 'function') {
307
258
  return popperData => offset(popperData, this._element);
308
259
  }
309
-
310
260
  return offset;
311
261
  }
312
-
313
262
  _getPopperConfig() {
314
263
  const defaultBsPopperConfig = {
315
264
  placement: this._getPlacement(),
@@ -324,121 +273,101 @@
324
273
  offset: this._getOffset()
325
274
  }
326
275
  }]
327
- }; // Disable Popper if we have a static display or Dropdown is in Navbar
276
+ };
328
277
 
278
+ // Disable Popper if we have a static display or Dropdown is in Navbar
329
279
  if (this._inNavbar || this._config.display === 'static') {
330
- Manipulator__default.default.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove
331
-
280
+ Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
332
281
  defaultBsPopperConfig.modifiers = [{
333
282
  name: 'applyStyles',
334
283
  enabled: false
335
284
  }];
336
285
  }
337
-
338
- return { ...defaultBsPopperConfig,
339
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
286
+ return {
287
+ ...defaultBsPopperConfig,
288
+ ...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig])
340
289
  };
341
290
  }
342
-
343
291
  _selectMenuItem({
344
292
  key,
345
293
  target
346
294
  }) {
347
- const items = SelectorEngine__default.default.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => index.isVisible(element));
348
-
295
+ const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => index_js.isVisible(element));
349
296
  if (!items.length) {
350
297
  return;
351
- } // if target isn't included in items (e.g. when expanding the dropdown)
352
- // allow cycling to get the last item in case key equals ARROW_UP_KEY
353
-
354
-
355
- index.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
356
- } // Static
298
+ }
357
299
 
300
+ // if target isn't included in items (e.g. when expanding the dropdown)
301
+ // allow cycling to get the last item in case key equals ARROW_UP_KEY
302
+ index_js.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
303
+ }
358
304
 
305
+ // Static
359
306
  static jQueryInterface(config) {
360
307
  return this.each(function () {
361
308
  const data = Dropdown.getOrCreateInstance(this, config);
362
-
363
309
  if (typeof config !== 'string') {
364
310
  return;
365
311
  }
366
-
367
312
  if (typeof data[config] === 'undefined') {
368
313
  throw new TypeError(`No method named "${config}"`);
369
314
  }
370
-
371
315
  data[config]();
372
316
  });
373
317
  }
374
-
375
318
  static clearMenus(event) {
376
319
  if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
377
320
  return;
378
321
  }
379
-
380
- const openToggles = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_SHOWN);
381
-
322
+ const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
382
323
  for (const toggle of openToggles) {
383
324
  const context = Dropdown.getInstance(toggle);
384
-
385
325
  if (!context || context._config.autoClose === false) {
386
326
  continue;
387
327
  }
388
-
389
328
  const composedPath = event.composedPath();
390
329
  const isMenuTarget = composedPath.includes(context._menu);
391
-
392
330
  if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
393
331
  continue;
394
- } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
395
-
332
+ }
396
333
 
334
+ // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
397
335
  if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
398
336
  continue;
399
337
  }
400
-
401
338
  const relatedTarget = {
402
339
  relatedTarget: context._element
403
340
  };
404
-
405
341
  if (event.type === 'click') {
406
342
  relatedTarget.clickEvent = event;
407
343
  }
408
-
409
344
  context._completeHide(relatedTarget);
410
345
  }
411
346
  }
412
-
413
347
  static dataApiKeydownHandler(event) {
414
348
  // If not an UP | DOWN | ESCAPE key => not a dropdown command
415
349
  // If input/textarea && if key is other than ESCAPE => not a dropdown command
350
+
416
351
  const isInput = /input|textarea/i.test(event.target.tagName);
417
352
  const isEscapeEvent = event.key === ESCAPE_KEY;
418
353
  const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);
419
-
420
354
  if (!isUpOrDownEvent && !isEscapeEvent) {
421
355
  return;
422
356
  }
423
-
424
357
  if (isInput && !isEscapeEvent) {
425
358
  return;
426
359
  }
360
+ event.preventDefault();
427
361
 
428
- event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
429
-
430
- const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default.default.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
362
+ // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
363
+ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
431
364
  const instance = Dropdown.getOrCreateInstance(getToggleButton);
432
-
433
365
  if (isUpOrDownEvent) {
434
366
  event.stopPropagation();
435
367
  instance.show();
436
-
437
368
  instance._selectMenuItem(event);
438
-
439
369
  return;
440
370
  }
441
-
442
371
  if (instance._isShown()) {
443
372
  // else is escape and we check if it is shown
444
373
  event.stopPropagation();
@@ -446,26 +375,26 @@
446
375
  getToggleButton.focus();
447
376
  }
448
377
  }
449
-
450
378
  }
379
+
451
380
  /**
452
381
  * Data API implementation
453
382
  */
454
383
 
455
-
456
- EventHandler__default.default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
457
- EventHandler__default.default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
458
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
459
- EventHandler__default.default.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
460
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
384
+ EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
385
+ EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
386
+ EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
387
+ EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
388
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
461
389
  event.preventDefault();
462
390
  Dropdown.getOrCreateInstance(this).toggle();
463
391
  });
392
+
464
393
  /**
465
394
  * jQuery
466
395
  */
467
396
 
468
- index.defineJQueryPlugin(Dropdown);
397
+ index_js.defineJQueryPlugin(Dropdown);
469
398
 
470
399
  return Dropdown;
471
400