bootstrap 5.1.1 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/javascripts/bootstrap/alert.js +18 -153
  4. data/assets/javascripts/bootstrap/base-component.js +44 -127
  5. data/assets/javascripts/bootstrap/button.js +16 -80
  6. data/assets/javascripts/bootstrap/carousel.js +225 -497
  7. data/assets/javascripts/bootstrap/collapse.js +79 -262
  8. data/assets/javascripts/bootstrap/dom/data.js +6 -8
  9. data/assets/javascripts/bootstrap/dom/event-handler.js +95 -133
  10. data/assets/javascripts/bootstrap/dom/manipulator.js +25 -29
  11. data/assets/javascripts/bootstrap/dom/selector-engine.js +17 -59
  12. data/assets/javascripts/bootstrap/dropdown.js +124 -342
  13. data/assets/javascripts/bootstrap/modal.js +122 -767
  14. data/assets/javascripts/bootstrap/offcanvas.js +102 -671
  15. data/assets/javascripts/bootstrap/popover.js +42 -124
  16. data/assets/javascripts/bootstrap/scrollspy.js +186 -269
  17. data/assets/javascripts/bootstrap/tab.js +222 -221
  18. data/assets/javascripts/bootstrap/toast.js +41 -227
  19. data/assets/javascripts/bootstrap/tooltip.js +283 -629
  20. data/assets/javascripts/bootstrap/util/backdrop.js +165 -0
  21. data/assets/javascripts/bootstrap/util/component-functions.js +46 -0
  22. data/assets/javascripts/bootstrap/util/config.js +79 -0
  23. data/assets/javascripts/bootstrap/util/focustrap.js +129 -0
  24. data/assets/javascripts/bootstrap/util/index.js +350 -0
  25. data/assets/javascripts/bootstrap/util/sanitizer.js +122 -0
  26. data/assets/javascripts/bootstrap/util/scrollbar.js +138 -0
  27. data/assets/javascripts/bootstrap/util/swipe.js +155 -0
  28. data/assets/javascripts/bootstrap/util/template-factory.js +177 -0
  29. data/assets/javascripts/bootstrap-global-this-define.js +1 -1
  30. data/assets/javascripts/bootstrap-sprockets.js +16 -7
  31. data/assets/javascripts/bootstrap.js +2094 -1891
  32. data/assets/javascripts/bootstrap.min.js +3 -3
  33. data/assets/stylesheets/_bootstrap-grid.scss +3 -6
  34. data/assets/stylesheets/_bootstrap-reboot.scss +3 -7
  35. data/assets/stylesheets/_bootstrap.scss +4 -6
  36. data/assets/stylesheets/bootstrap/_accordion.scss +52 -24
  37. data/assets/stylesheets/bootstrap/_alert.scss +18 -4
  38. data/assets/stylesheets/bootstrap/_badge.scss +14 -5
  39. data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -10
  40. data/assets/stylesheets/bootstrap/_button-group.scss +3 -0
  41. data/assets/stylesheets/bootstrap/_buttons.scss +97 -22
  42. data/assets/stylesheets/bootstrap/_card.scss +55 -37
  43. data/assets/stylesheets/bootstrap/_close.scss +1 -1
  44. data/assets/stylesheets/bootstrap/_containers.scss +1 -1
  45. data/assets/stylesheets/bootstrap/_dropdown.scss +83 -75
  46. data/assets/stylesheets/bootstrap/_functions.scss +7 -7
  47. data/assets/stylesheets/bootstrap/_grid.scss +3 -3
  48. data/assets/stylesheets/bootstrap/_helpers.scss +1 -0
  49. data/assets/stylesheets/bootstrap/_list-group.scss +44 -27
  50. data/assets/stylesheets/bootstrap/_maps.scss +54 -0
  51. data/assets/stylesheets/bootstrap/_modal.scss +71 -43
  52. data/assets/stylesheets/bootstrap/_nav.scss +53 -20
  53. data/assets/stylesheets/bootstrap/_navbar.scss +91 -150
  54. data/assets/stylesheets/bootstrap/_offcanvas.scss +119 -59
  55. data/assets/stylesheets/bootstrap/_pagination.scss +66 -21
  56. data/assets/stylesheets/bootstrap/_placeholders.scss +1 -1
  57. data/assets/stylesheets/bootstrap/_popover.scss +90 -52
  58. data/assets/stylesheets/bootstrap/_progress.scss +20 -9
  59. data/assets/stylesheets/bootstrap/_reboot.scss +25 -40
  60. data/assets/stylesheets/bootstrap/_root.scss +40 -21
  61. data/assets/stylesheets/bootstrap/_spinners.scss +38 -22
  62. data/assets/stylesheets/bootstrap/_tables.scss +38 -25
  63. data/assets/stylesheets/bootstrap/_toasts.scss +35 -16
  64. data/assets/stylesheets/bootstrap/_tooltip.scss +61 -56
  65. data/assets/stylesheets/bootstrap/_type.scss +2 -0
  66. data/assets/stylesheets/bootstrap/_utilities.scss +43 -26
  67. data/assets/stylesheets/bootstrap/_variables.scss +118 -124
  68. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +3 -6
  69. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +14 -3
  70. data/assets/stylesheets/bootstrap/forms/_form-check.scss +28 -5
  71. data/assets/stylesheets/bootstrap/forms/_form-control.scss +12 -37
  72. data/assets/stylesheets/bootstrap/forms/_form-select.scss +2 -1
  73. data/assets/stylesheets/bootstrap/forms/_input-group.scss +15 -7
  74. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +10 -0
  75. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
  76. data/assets/stylesheets/bootstrap/helpers/_position.scss +7 -1
  77. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
  78. data/assets/stylesheets/bootstrap/helpers/_vr.scss +1 -1
  79. data/assets/stylesheets/bootstrap/mixins/_alert.scss +7 -3
  80. data/assets/stylesheets/bootstrap/mixins/_banner.scss +9 -0
  81. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +8 -8
  82. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +32 -95
  83. data/assets/stylesheets/bootstrap/mixins/_container.scss +4 -2
  84. data/assets/stylesheets/bootstrap/mixins/_forms.scss +8 -0
  85. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -1
  86. data/assets/stylesheets/bootstrap/mixins/_grid.scss +13 -12
  87. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +4 -25
  88. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  89. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +12 -9
  90. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +12 -4
  91. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +1 -1
  92. data/bootstrap.gemspec +1 -1
  93. data/lib/bootstrap/version.rb +2 -2
  94. data/tasks/updater/js.rb +9 -4
  95. metadata +16 -4
@@ -1,199 +1,34 @@
1
1
  /*!
2
- * Bootstrap collapse.js v5.1.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap collapse.js v5.2.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 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('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
- }(this, (function (Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
8
+ typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
10
+ })(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
- var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
- var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
- var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
18
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
14
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
16
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
19
17
 
20
18
  /**
21
19
  * --------------------------------------------------------------------------
22
- * Bootstrap (v5.1.1): util/index.js
20
+ * Bootstrap (v5.2.0): collapse.js
23
21
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
24
22
  * --------------------------------------------------------------------------
25
23
  */
26
-
27
- const toType = obj => {
28
- if (obj === null || obj === undefined) {
29
- return `${obj}`;
30
- }
31
-
32
- return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
33
- };
34
-
35
- const getSelector = element => {
36
- let selector = element.getAttribute('data-bs-target');
37
-
38
- if (!selector || selector === '#') {
39
- let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
40
- // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
41
- // `document.querySelector` will rightfully complain it is invalid.
42
- // See https://github.com/twbs/bootstrap/issues/32273
43
-
44
- if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
45
- return null;
46
- } // Just in case some CMS puts out a full URL with the anchor appended
47
-
48
-
49
- if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
50
- hrefAttr = `#${hrefAttr.split('#')[1]}`;
51
- }
52
-
53
- selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
54
- }
55
-
56
- return selector;
57
- };
58
-
59
- const getSelectorFromElement = element => {
60
- const selector = getSelector(element);
61
-
62
- if (selector) {
63
- return document.querySelector(selector) ? selector : null;
64
- }
65
-
66
- return null;
67
- };
68
-
69
- const getElementFromSelector = element => {
70
- const selector = getSelector(element);
71
- return selector ? document.querySelector(selector) : null;
72
- };
73
-
74
- const isElement = obj => {
75
- if (!obj || typeof obj !== 'object') {
76
- return false;
77
- }
78
-
79
- if (typeof obj.jquery !== 'undefined') {
80
- obj = obj[0];
81
- }
82
-
83
- return typeof obj.nodeType !== 'undefined';
84
- };
85
-
86
- const getElement = obj => {
87
- if (isElement(obj)) {
88
- // it's a jQuery object or a node element
89
- return obj.jquery ? obj[0] : obj;
90
- }
91
-
92
- if (typeof obj === 'string' && obj.length > 0) {
93
- return document.querySelector(obj);
94
- }
95
-
96
- return null;
97
- };
98
-
99
- const typeCheckConfig = (componentName, config, configTypes) => {
100
- Object.keys(configTypes).forEach(property => {
101
- const expectedTypes = configTypes[property];
102
- const value = config[property];
103
- const valueType = value && isElement(value) ? 'element' : toType(value);
104
-
105
- if (!new RegExp(expectedTypes).test(valueType)) {
106
- throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
107
- }
108
- });
109
- };
110
- /**
111
- * Trick to restart an element's animation
112
- *
113
- * @param {HTMLElement} element
114
- * @return void
115
- *
116
- * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
117
- */
118
-
119
-
120
- const reflow = element => {
121
- // eslint-disable-next-line no-unused-expressions
122
- element.offsetHeight;
123
- };
124
-
125
- const getjQuery = () => {
126
- const {
127
- jQuery
128
- } = window;
129
-
130
- if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
131
- return jQuery;
132
- }
133
-
134
- return null;
135
- };
136
-
137
- const DOMContentLoadedCallbacks = [];
138
-
139
- const onDOMContentLoaded = callback => {
140
- if (document.readyState === 'loading') {
141
- // add listener on the first call when the document is in loading state
142
- if (!DOMContentLoadedCallbacks.length) {
143
- document.addEventListener('DOMContentLoaded', () => {
144
- DOMContentLoadedCallbacks.forEach(callback => callback());
145
- });
146
- }
147
-
148
- DOMContentLoadedCallbacks.push(callback);
149
- } else {
150
- callback();
151
- }
152
- };
153
-
154
- const defineJQueryPlugin = plugin => {
155
- onDOMContentLoaded(() => {
156
- const $ = getjQuery();
157
- /* istanbul ignore if */
158
-
159
- if ($) {
160
- const name = plugin.NAME;
161
- const JQUERY_NO_CONFLICT = $.fn[name];
162
- $.fn[name] = plugin.jQueryInterface;
163
- $.fn[name].Constructor = plugin;
164
-
165
- $.fn[name].noConflict = () => {
166
- $.fn[name] = JQUERY_NO_CONFLICT;
167
- return plugin.jQueryInterface;
168
- };
169
- }
170
- });
171
- };
172
-
173
24
  /**
174
- * --------------------------------------------------------------------------
175
- * Bootstrap (v5.1.1): collapse.js
176
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
177
- * --------------------------------------------------------------------------
178
- */
179
- /**
180
- * ------------------------------------------------------------------------
181
25
  * Constants
182
- * ------------------------------------------------------------------------
183
26
  */
184
27
 
185
28
  const NAME = 'collapse';
186
29
  const DATA_KEY = 'bs.collapse';
187
30
  const EVENT_KEY = `.${DATA_KEY}`;
188
31
  const DATA_API_KEY = '.data-api';
189
- const Default = {
190
- toggle: true,
191
- parent: null
192
- };
193
- const DefaultType = {
194
- toggle: 'boolean',
195
- parent: '(null|element)'
196
- };
197
32
  const EVENT_SHOW = `show${EVENT_KEY}`;
198
33
  const EVENT_SHOWN = `shown${EVENT_KEY}`;
199
34
  const EVENT_HIDE = `hide${EVENT_KEY}`;
@@ -203,33 +38,36 @@
203
38
  const CLASS_NAME_COLLAPSE = 'collapse';
204
39
  const CLASS_NAME_COLLAPSING = 'collapsing';
205
40
  const CLASS_NAME_COLLAPSED = 'collapsed';
41
+ const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
206
42
  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
207
43
  const WIDTH = 'width';
208
44
  const HEIGHT = 'height';
209
45
  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
210
46
  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]';
47
+ const Default = {
48
+ parent: null,
49
+ toggle: true
50
+ };
51
+ const DefaultType = {
52
+ parent: '(null|element)',
53
+ toggle: 'boolean'
54
+ };
211
55
  /**
212
- * ------------------------------------------------------------------------
213
- * Class Definition
214
- * ------------------------------------------------------------------------
56
+ * Class definition
215
57
  */
216
58
 
217
- class Collapse extends BaseComponent__default['default'] {
59
+ class Collapse extends BaseComponent__default.default {
218
60
  constructor(element, config) {
219
- super(element);
61
+ super(element, config);
220
62
  this._isTransitioning = false;
221
- this._config = this._getConfig(config);
222
63
  this._triggerArray = [];
223
- const toggleList = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
64
+ const toggleList = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE);
224
65
 
225
- for (let i = 0, len = toggleList.length; i < len; i++) {
226
- const elem = toggleList[i];
227
- const selector = getSelectorFromElement(elem);
228
- const filterElement = SelectorEngine__default['default'].find(selector).filter(foundElem => foundElem === this._element);
66
+ for (const elem of toggleList) {
67
+ const selector = index.getSelectorFromElement(elem);
68
+ const filterElement = SelectorEngine__default.default.find(selector).filter(foundElement => foundElement === this._element);
229
69
 
230
70
  if (selector !== null && filterElement.length) {
231
- this._selector = selector;
232
-
233
71
  this._triggerArray.push(elem);
234
72
  }
235
73
  }
@@ -250,6 +88,10 @@
250
88
  return Default;
251
89
  }
252
90
 
91
+ static get DefaultType() {
92
+ return DefaultType;
93
+ }
94
+
253
95
  static get NAME() {
254
96
  return NAME;
255
97
  } // Public
@@ -268,42 +110,27 @@
268
110
  return;
269
111
  }
270
112
 
271
- let actives = [];
272
- let activesData;
113
+ let activeChildren = []; // find active children
273
114
 
274
115
  if (this._config.parent) {
275
- const children = SelectorEngine__default['default'].find(`.${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`, this._config.parent);
276
- actives = SelectorEngine__default['default'].find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth
116
+ activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
117
+ toggle: false
118
+ }));
277
119
  }
278
120
 
279
- const container = SelectorEngine__default['default'].findOne(this._selector);
280
-
281
- if (actives.length) {
282
- const tempActiveData = actives.find(elem => container !== elem);
283
- activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
284
-
285
- if (activesData && activesData._isTransitioning) {
286
- return;
287
- }
121
+ if (activeChildren.length && activeChildren[0]._isTransitioning) {
122
+ return;
288
123
  }
289
124
 
290
- const startEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW);
125
+ const startEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
291
126
 
292
127
  if (startEvent.defaultPrevented) {
293
128
  return;
294
129
  }
295
130
 
296
- actives.forEach(elemActive => {
297
- if (container !== elemActive) {
298
- Collapse.getOrCreateInstance(elemActive, {
299
- toggle: false
300
- }).hide();
301
- }
302
-
303
- if (!activesData) {
304
- Data__default['default'].set(elemActive, DATA_KEY, null);
305
- }
306
- });
131
+ for (const activeInstance of activeChildren) {
132
+ activeInstance.hide();
133
+ }
307
134
 
308
135
  const dimension = this._getDimension();
309
136
 
@@ -325,7 +152,7 @@
325
152
  this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
326
153
 
327
154
  this._element.style[dimension] = '';
328
- EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
155
+ EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
329
156
  };
330
157
 
331
158
  const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
@@ -341,7 +168,7 @@
341
168
  return;
342
169
  }
343
170
 
344
- const startEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
171
+ const startEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
345
172
 
346
173
  if (startEvent.defaultPrevented) {
347
174
  return;
@@ -350,19 +177,16 @@
350
177
  const dimension = this._getDimension();
351
178
 
352
179
  this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
353
- reflow(this._element);
180
+ index.reflow(this._element);
354
181
 
355
182
  this._element.classList.add(CLASS_NAME_COLLAPSING);
356
183
 
357
184
  this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
358
185
 
359
- const triggerArrayLength = this._triggerArray.length;
186
+ for (const trigger of this._triggerArray) {
187
+ const element = index.getElementFromSelector(trigger);
360
188
 
361
- for (let i = 0; i < triggerArrayLength; i++) {
362
- const trigger = this._triggerArray[i];
363
- const elem = getElementFromSelector(trigger);
364
-
365
- if (elem && !this._isShown(elem)) {
189
+ if (element && !this._isShown(element)) {
366
190
  this._addAriaAndCollapsedClass([trigger], false);
367
191
  }
368
192
  }
@@ -376,7 +200,7 @@
376
200
 
377
201
  this._element.classList.add(CLASS_NAME_COLLAPSE);
378
202
 
379
- EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
203
+ EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
380
204
  };
381
205
 
382
206
  this._element.style[dimension] = '';
@@ -389,15 +213,10 @@
389
213
  } // Private
390
214
 
391
215
 
392
- _getConfig(config) {
393
- config = { ...Default,
394
- ...Manipulator__default['default'].getDataAttributes(this._element),
395
- ...config
396
- };
216
+ _configAfterMerge(config) {
397
217
  config.toggle = Boolean(config.toggle); // Coerce string values
398
218
 
399
- config.parent = getElement(config.parent);
400
- typeCheckConfig(NAME, config, DefaultType);
219
+ config.parent = index.getElement(config.parent);
401
220
  return config;
402
221
  }
403
222
 
@@ -410,14 +229,21 @@
410
229
  return;
411
230
  }
412
231
 
413
- const children = SelectorEngine__default['default'].find(`.${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`, this._config.parent);
414
- SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {
415
- const selected = getElementFromSelector(element);
232
+ const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);
233
+
234
+ for (const element of children) {
235
+ const selected = index.getElementFromSelector(element);
416
236
 
417
237
  if (selected) {
418
238
  this._addAriaAndCollapsedClass([element], this._isShown(selected));
419
239
  }
420
- });
240
+ }
241
+ }
242
+
243
+ _getFirstLevelChildren(selector) {
244
+ const children = SelectorEngine__default.default.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth
245
+
246
+ return SelectorEngine__default.default.find(selector, this._config.parent).filter(element => !children.includes(element));
421
247
  }
422
248
 
423
249
  _addAriaAndCollapsedClass(triggerArray, isOpen) {
@@ -425,26 +251,21 @@
425
251
  return;
426
252
  }
427
253
 
428
- triggerArray.forEach(elem => {
429
- if (isOpen) {
430
- elem.classList.remove(CLASS_NAME_COLLAPSED);
431
- } else {
432
- elem.classList.add(CLASS_NAME_COLLAPSED);
433
- }
434
-
435
- elem.setAttribute('aria-expanded', isOpen);
436
- });
254
+ for (const element of triggerArray) {
255
+ element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
256
+ element.setAttribute('aria-expanded', isOpen);
257
+ }
437
258
  } // Static
438
259
 
439
260
 
440
261
  static jQueryInterface(config) {
441
- return this.each(function () {
442
- const _config = {};
262
+ const _config = {};
443
263
 
444
- if (typeof config === 'string' && /show|hide/.test(config)) {
445
- _config.toggle = false;
446
- }
264
+ if (typeof config === 'string' && /show|hide/.test(config)) {
265
+ _config.toggle = false;
266
+ }
447
267
 
268
+ return this.each(function () {
448
269
  const data = Collapse.getOrCreateInstance(this, _config);
449
270
 
450
271
  if (typeof config === 'string') {
@@ -459,35 +280,31 @@
459
280
 
460
281
  }
461
282
  /**
462
- * ------------------------------------------------------------------------
463
- * Data Api implementation
464
- * ------------------------------------------------------------------------
283
+ * Data API implementation
465
284
  */
466
285
 
467
286
 
468
- EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
287
+ EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
469
288
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
470
289
  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
471
290
  event.preventDefault();
472
291
  }
473
292
 
474
- const selector = getSelectorFromElement(this);
475
- const selectorElements = SelectorEngine__default['default'].find(selector);
476
- selectorElements.forEach(element => {
293
+ const selector = index.getSelectorFromElement(this);
294
+ const selectorElements = SelectorEngine__default.default.find(selector);
295
+
296
+ for (const element of selectorElements) {
477
297
  Collapse.getOrCreateInstance(element, {
478
298
  toggle: false
479
299
  }).toggle();
480
- });
300
+ }
481
301
  });
482
302
  /**
483
- * ------------------------------------------------------------------------
484
303
  * jQuery
485
- * ------------------------------------------------------------------------
486
- * add .Collapse to jQuery only if jQuery is present
487
304
  */
488
305
 
489
- defineJQueryPlugin(Collapse);
306
+ index.defineJQueryPlugin(Collapse);
490
307
 
491
308
  return Collapse;
492
309
 
493
- })));
310
+ }));
@@ -1,28 +1,26 @@
1
1
  /*!
2
- * Bootstrap data.js v5.1.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap data.js v5.2.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 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
7
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
8
  typeof define === 'function' && define.amd ? define(factory) :
9
9
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Data = factory());
10
- }(this, (function () { 'use strict';
10
+ })(this, (function () { 'use strict';
11
11
 
12
12
  /**
13
13
  * --------------------------------------------------------------------------
14
- * Bootstrap (v5.1.1): dom/data.js
14
+ * Bootstrap (v5.2.0): dom/data.js
15
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
16
  * --------------------------------------------------------------------------
17
17
  */
18
18
 
19
19
  /**
20
- * ------------------------------------------------------------------------
21
20
  * Constants
22
- * ------------------------------------------------------------------------
23
21
  */
24
22
  const elementMap = new Map();
25
- var data = {
23
+ const data = {
26
24
  set(element, key, instance) {
27
25
  if (!elementMap.has(element)) {
28
26
  elementMap.set(element, new Map());
@@ -65,4 +63,4 @@
65
63
 
66
64
  return data;
67
65
 
68
- })));
66
+ }));