bootstrap 5.0.0.alpha2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  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 +10 -7
  7. data/assets/javascripts/bootstrap.js +2554 -2564
  8. data/assets/javascripts/bootstrap.min.js +3 -3
  9. data/assets/javascripts/bootstrap/alert.js +119 -115
  10. data/assets/javascripts/bootstrap/base-component.js +63 -0
  11. data/assets/javascripts/bootstrap/button.js +67 -69
  12. data/assets/javascripts/bootstrap/carousel.js +340 -331
  13. data/assets/javascripts/bootstrap/collapse.js +214 -209
  14. data/assets/javascripts/bootstrap/dom/data.js +35 -48
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +105 -98
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +26 -34
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +28 -41
  18. data/assets/javascripts/bootstrap/dropdown.js +392 -325
  19. data/assets/javascripts/bootstrap/modal.js +492 -434
  20. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  21. data/assets/javascripts/bootstrap/popover.js +114 -132
  22. data/assets/javascripts/bootstrap/scrollspy.js +172 -180
  23. data/assets/javascripts/bootstrap/tab.js +168 -144
  24. data/assets/javascripts/bootstrap/toast.js +141 -150
  25. data/assets/javascripts/bootstrap/tooltip.js +466 -452
  26. data/assets/stylesheets/_bootstrap-grid.scss +9 -9
  27. data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
  28. data/assets/stylesheets/_bootstrap.scss +5 -3
  29. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  30. data/assets/stylesheets/bootstrap/_alert.scss +10 -3
  31. data/assets/stylesheets/bootstrap/_breadcrumb.scss +2 -4
  32. data/assets/stylesheets/bootstrap/_button-group.scss +5 -7
  33. data/assets/stylesheets/bootstrap/_buttons.scss +2 -15
  34. data/assets/stylesheets/bootstrap/_card.scss +2 -29
  35. data/assets/stylesheets/bootstrap/_carousel.scss +35 -18
  36. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  37. data/assets/stylesheets/bootstrap/_dropdown.scss +33 -29
  38. data/assets/stylesheets/bootstrap/_forms.scss +1 -1
  39. data/assets/stylesheets/bootstrap/_functions.scss +11 -12
  40. data/assets/stylesheets/bootstrap/_list-group.scss +23 -6
  41. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  42. data/assets/stylesheets/bootstrap/_modal.scss +2 -9
  43. data/assets/stylesheets/bootstrap/_nav.scss +12 -0
  44. data/assets/stylesheets/bootstrap/_navbar.scss +15 -2
  45. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  46. data/assets/stylesheets/bootstrap/_pagination.scss +3 -3
  47. data/assets/stylesheets/bootstrap/_popover.scss +10 -22
  48. data/assets/stylesheets/bootstrap/_progress.scss +4 -1
  49. data/assets/stylesheets/bootstrap/_reboot.scss +48 -44
  50. data/assets/stylesheets/bootstrap/_root.scss +5 -5
  51. data/assets/stylesheets/bootstrap/_spinners.scss +18 -5
  52. data/assets/stylesheets/bootstrap/_tables.scss +15 -16
  53. data/assets/stylesheets/bootstrap/_toasts.scss +15 -12
  54. data/assets/stylesheets/bootstrap/_tooltip.scss +12 -12
  55. data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
  56. data/assets/stylesheets/bootstrap/_utilities.scss +133 -70
  57. data/assets/stylesheets/bootstrap/_variables.scss +363 -207
  58. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +5 -5
  59. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-check.scss +21 -11
  61. data/assets/stylesheets/bootstrap/forms/_form-control.scss +112 -9
  62. data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -46
  63. data/assets/stylesheets/bootstrap/forms/_form-select.scss +1 -16
  64. data/assets/stylesheets/bootstrap/forms/_input-group.scss +21 -40
  65. data/assets/stylesheets/bootstrap/forms/_validation.scss +1 -1
  66. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
  67. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
  68. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +1 -1
  69. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -1
  70. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -6
  71. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +10 -5
  72. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -6
  73. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  74. data/assets/stylesheets/bootstrap/mixins/_container.scss +2 -4
  75. data/assets/stylesheets/bootstrap/mixins/_forms.scss +26 -22
  76. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +5 -1
  77. data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -13
  78. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -1
  79. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +5 -3
  80. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +7 -7
  81. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +19 -0
  82. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +3 -2
  83. data/assets/stylesheets/bootstrap/utilities/_api.scss +1 -1
  84. data/bootstrap.gemspec +1 -3
  85. data/lib/bootstrap/version.rb +2 -2
  86. data/tasks/updater/js.rb +20 -5
  87. data/tasks/updater/network.rb +7 -1
  88. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  89. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  90. data/test/dummy_rails/app/views/pages/root.html +89 -0
  91. data/test/dummy_rails/config/application.rb +0 -3
  92. data/test/gemfiles/rails_6_1.gemfile +7 -0
  93. metadata +20 -40
  94. data/assets/javascripts/bootstrap/dom/polyfill.js +0 -110
  95. data/assets/stylesheets/bootstrap/forms/_form-file.scss +0 -91
  96. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -1,13 +1,13 @@
1
1
  /*!
2
- * Bootstrap collapse.js v5.0.0-alpha2 (https://getbootstrap.com/)
3
- * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap collapse.js v5.0.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/event-handler.js', './dom/manipulator.js', './dom/selector-engine.js'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine));
10
- }(this, (function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict';
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';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
@@ -15,37 +15,51 @@
15
15
  var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
16
  var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
17
  var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
18
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
19
 
19
20
  /**
20
21
  * --------------------------------------------------------------------------
21
- * Bootstrap (v5.0.0-alpha2): util/index.js
22
+ * Bootstrap (v5.0.0): util/index.js
22
23
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23
24
  * --------------------------------------------------------------------------
24
25
  */
25
- var MILLISECONDS_MULTIPLIER = 1000;
26
- var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
26
+ const MILLISECONDS_MULTIPLIER = 1000;
27
+ const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
27
28
 
28
- var toType = function toType(obj) {
29
+ const toType = obj => {
29
30
  if (obj === null || obj === undefined) {
30
- return "" + obj;
31
+ return `${obj}`;
31
32
  }
32
33
 
33
34
  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
34
35
  };
35
36
 
36
- var getSelector = function getSelector(element) {
37
- var selector = element.getAttribute('data-target');
37
+ const getSelector = element => {
38
+ let selector = element.getAttribute('data-bs-target');
38
39
 
39
40
  if (!selector || selector === '#') {
40
- var hrefAttr = element.getAttribute('href');
41
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
42
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
43
+ // `document.querySelector` will rightfully complain it is invalid.
44
+ // See https://github.com/twbs/bootstrap/issues/32273
45
+
46
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
47
+ return null;
48
+ } // Just in case some CMS puts out a full URL with the anchor appended
49
+
50
+
51
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
52
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
53
+ }
54
+
41
55
  selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
42
56
  }
43
57
 
44
58
  return selector;
45
59
  };
46
60
 
47
- var getSelectorFromElement = function getSelectorFromElement(element) {
48
- var selector = getSelector(element);
61
+ const getSelectorFromElement = element => {
62
+ const selector = getSelector(element);
49
63
 
50
64
  if (selector) {
51
65
  return document.querySelector(selector) ? selector : null;
@@ -54,23 +68,23 @@
54
68
  return null;
55
69
  };
56
70
 
57
- var getElementFromSelector = function getElementFromSelector(element) {
58
- var selector = getSelector(element);
71
+ const getElementFromSelector = element => {
72
+ const selector = getSelector(element);
59
73
  return selector ? document.querySelector(selector) : null;
60
74
  };
61
75
 
62
- var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
76
+ const getTransitionDurationFromElement = element => {
63
77
  if (!element) {
64
78
  return 0;
65
79
  } // Get transition-duration of the element
66
80
 
67
81
 
68
- var _window$getComputedSt = window.getComputedStyle(element),
69
- transitionDuration = _window$getComputedSt.transitionDuration,
70
- transitionDelay = _window$getComputedSt.transitionDelay;
71
-
72
- var floatTransitionDuration = parseFloat(transitionDuration);
73
- var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
82
+ let {
83
+ transitionDuration,
84
+ transitionDelay
85
+ } = window.getComputedStyle(element);
86
+ const floatTransitionDuration = Number.parseFloat(transitionDuration);
87
+ const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
74
88
 
75
89
  if (!floatTransitionDuration && !floatTransitionDelay) {
76
90
  return 0;
@@ -79,21 +93,19 @@
79
93
 
80
94
  transitionDuration = transitionDuration.split(',')[0];
81
95
  transitionDelay = transitionDelay.split(',')[0];
82
- return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
96
+ return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
83
97
  };
84
98
 
85
- var triggerTransitionEnd = function triggerTransitionEnd(element) {
99
+ const triggerTransitionEnd = element => {
86
100
  element.dispatchEvent(new Event(TRANSITION_END));
87
101
  };
88
102
 
89
- var isElement = function isElement(obj) {
90
- return (obj[0] || obj).nodeType;
91
- };
103
+ const isElement = obj => (obj[0] || obj).nodeType;
92
104
 
93
- var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
94
- var called = false;
95
- var durationPadding = 5;
96
- var emulatedDuration = duration + durationPadding;
105
+ const emulateTransitionEnd = (element, duration) => {
106
+ let called = false;
107
+ const durationPadding = 5;
108
+ const emulatedDuration = duration + durationPadding;
97
109
 
98
110
  function listener() {
99
111
  called = true;
@@ -101,97 +113,120 @@
101
113
  }
102
114
 
103
115
  element.addEventListener(TRANSITION_END, listener);
104
- setTimeout(function () {
116
+ setTimeout(() => {
105
117
  if (!called) {
106
118
  triggerTransitionEnd(element);
107
119
  }
108
120
  }, emulatedDuration);
109
121
  };
110
122
 
111
- var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
112
- Object.keys(configTypes).forEach(function (property) {
113
- var expectedTypes = configTypes[property];
114
- var value = config[property];
115
- var valueType = value && isElement(value) ? 'element' : toType(value);
123
+ const typeCheckConfig = (componentName, config, configTypes) => {
124
+ Object.keys(configTypes).forEach(property => {
125
+ const expectedTypes = configTypes[property];
126
+ const value = config[property];
127
+ const valueType = value && isElement(value) ? 'element' : toType(value);
116
128
 
117
129
  if (!new RegExp(expectedTypes).test(valueType)) {
118
- throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
130
+ throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
119
131
  }
120
132
  });
121
133
  };
122
134
 
123
- var reflow = function reflow(element) {
124
- return element.offsetHeight;
125
- };
135
+ const reflow = element => element.offsetHeight;
126
136
 
127
- var getjQuery = function getjQuery() {
128
- var _window = window,
129
- jQuery = _window.jQuery;
137
+ const getjQuery = () => {
138
+ const {
139
+ jQuery
140
+ } = window;
130
141
 
131
- if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
142
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
132
143
  return jQuery;
133
144
  }
134
145
 
135
146
  return null;
136
147
  };
137
148
 
138
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
149
+ const onDOMContentLoaded = callback => {
150
+ if (document.readyState === 'loading') {
151
+ document.addEventListener('DOMContentLoaded', callback);
152
+ } else {
153
+ callback();
154
+ }
155
+ };
156
+
157
+ const defineJQueryPlugin = (name, plugin) => {
158
+ onDOMContentLoaded(() => {
159
+ const $ = getjQuery();
160
+ /* istanbul ignore if */
161
+
162
+ if ($) {
163
+ const JQUERY_NO_CONFLICT = $.fn[name];
164
+ $.fn[name] = plugin.jQueryInterface;
165
+ $.fn[name].Constructor = plugin;
139
166
 
140
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
167
+ $.fn[name].noConflict = () => {
168
+ $.fn[name] = JQUERY_NO_CONFLICT;
169
+ return plugin.jQueryInterface;
170
+ };
171
+ }
172
+ });
173
+ };
141
174
 
142
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
175
+ /**
176
+ * --------------------------------------------------------------------------
177
+ * Bootstrap (v5.0.0): collapse.js
178
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
179
+ * --------------------------------------------------------------------------
180
+ */
143
181
  /**
144
182
  * ------------------------------------------------------------------------
145
183
  * Constants
146
184
  * ------------------------------------------------------------------------
147
185
  */
148
186
 
149
- var NAME = 'collapse';
150
- var VERSION = '5.0.0-alpha2';
151
- var DATA_KEY = 'bs.collapse';
152
- var EVENT_KEY = "." + DATA_KEY;
153
- var DATA_API_KEY = '.data-api';
154
- var Default = {
187
+ const NAME = 'collapse';
188
+ const DATA_KEY = 'bs.collapse';
189
+ const EVENT_KEY = `.${DATA_KEY}`;
190
+ const DATA_API_KEY = '.data-api';
191
+ const Default = {
155
192
  toggle: true,
156
193
  parent: ''
157
194
  };
158
- var DefaultType = {
195
+ const DefaultType = {
159
196
  toggle: 'boolean',
160
197
  parent: '(string|element)'
161
198
  };
162
- var EVENT_SHOW = "show" + EVENT_KEY;
163
- var EVENT_SHOWN = "shown" + EVENT_KEY;
164
- var EVENT_HIDE = "hide" + EVENT_KEY;
165
- var EVENT_HIDDEN = "hidden" + EVENT_KEY;
166
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
167
- var CLASS_NAME_SHOW = 'show';
168
- var CLASS_NAME_COLLAPSE = 'collapse';
169
- var CLASS_NAME_COLLAPSING = 'collapsing';
170
- var CLASS_NAME_COLLAPSED = 'collapsed';
171
- var WIDTH = 'width';
172
- var HEIGHT = 'height';
173
- var SELECTOR_ACTIVES = '.show, .collapsing';
174
- var SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]';
199
+ const EVENT_SHOW = `show${EVENT_KEY}`;
200
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
201
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
202
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
203
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
204
+ const CLASS_NAME_SHOW = 'show';
205
+ const CLASS_NAME_COLLAPSE = 'collapse';
206
+ const CLASS_NAME_COLLAPSING = 'collapsing';
207
+ const CLASS_NAME_COLLAPSED = 'collapsed';
208
+ const WIDTH = 'width';
209
+ const HEIGHT = 'height';
210
+ const SELECTOR_ACTIVES = '.show, .collapsing';
211
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]';
175
212
  /**
176
213
  * ------------------------------------------------------------------------
177
214
  * Class Definition
178
215
  * ------------------------------------------------------------------------
179
216
  */
180
217
 
181
- var Collapse = /*#__PURE__*/function () {
182
- function Collapse(element, config) {
218
+ class Collapse extends BaseComponent__default['default'] {
219
+ constructor(element, config) {
220
+ super(element);
183
221
  this._isTransitioning = false;
184
- this._element = element;
185
222
  this._config = this._getConfig(config);
186
- this._triggerArray = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE + "[href=\"#" + element.id + "\"]," + (SELECTOR_DATA_TOGGLE + "[data-target=\"#" + element.id + "\"]"));
187
- var toggleList = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
188
-
189
- for (var i = 0, len = toggleList.length; i < len; i++) {
190
- var elem = toggleList[i];
191
- var selector = getSelectorFromElement(elem);
192
- var filterElement = SelectorEngine__default['default'].find(selector).filter(function (foundElem) {
193
- return foundElem === element;
194
- });
223
+ this._triggerArray = SelectorEngine__default['default'].find(`${SELECTOR_DATA_TOGGLE}[href="#${this._element.id}"],` + `${SELECTOR_DATA_TOGGLE}[data-bs-target="#${this._element.id}"]`);
224
+ const toggleList = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
225
+
226
+ for (let i = 0, len = toggleList.length; i < len; i++) {
227
+ const elem = toggleList[i];
228
+ const selector = getSelectorFromElement(elem);
229
+ const filterElement = SelectorEngine__default['default'].find(selector).filter(foundElem => foundElem === this._element);
195
230
 
196
231
  if (selector !== null && filterElement.length) {
197
232
  this._selector = selector;
@@ -209,36 +244,38 @@
209
244
  if (this._config.toggle) {
210
245
  this.toggle();
211
246
  }
212
-
213
- Data__default['default'].setData(element, DATA_KEY, this);
214
247
  } // Getters
215
248
 
216
249
 
217
- var _proto = Collapse.prototype;
250
+ static get Default() {
251
+ return Default;
252
+ }
253
+
254
+ static get DATA_KEY() {
255
+ return DATA_KEY;
256
+ } // Public
257
+
218
258
 
219
- // Public
220
- _proto.toggle = function toggle() {
259
+ toggle() {
221
260
  if (this._element.classList.contains(CLASS_NAME_SHOW)) {
222
261
  this.hide();
223
262
  } else {
224
263
  this.show();
225
264
  }
226
- };
227
-
228
- _proto.show = function show() {
229
- var _this = this;
265
+ }
230
266
 
267
+ show() {
231
268
  if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW)) {
232
269
  return;
233
270
  }
234
271
 
235
- var actives;
236
- var activesData;
272
+ let actives;
273
+ let activesData;
237
274
 
238
275
  if (this._parent) {
239
- actives = SelectorEngine__default['default'].find(SELECTOR_ACTIVES, this._parent).filter(function (elem) {
240
- if (typeof _this._config.parent === 'string') {
241
- return elem.getAttribute('data-parent') === _this._config.parent;
276
+ actives = SelectorEngine__default['default'].find(SELECTOR_ACTIVES, this._parent).filter(elem => {
277
+ if (typeof this._config.parent === 'string') {
278
+ return elem.getAttribute('data-bs-parent') === this._config.parent;
242
279
  }
243
280
 
244
281
  return elem.classList.contains(CLASS_NAME_COLLAPSE);
@@ -249,38 +286,36 @@
249
286
  }
250
287
  }
251
288
 
252
- var container = SelectorEngine__default['default'].findOne(this._selector);
289
+ const container = SelectorEngine__default['default'].findOne(this._selector);
253
290
 
254
291
  if (actives) {
255
- var tempActiveData = actives.filter(function (elem) {
256
- return container !== elem;
257
- });
258
- activesData = tempActiveData[0] ? Data__default['default'].getData(tempActiveData[0], DATA_KEY) : null;
292
+ const tempActiveData = actives.find(elem => container !== elem);
293
+ activesData = tempActiveData ? Data__default['default'].get(tempActiveData, DATA_KEY) : null;
259
294
 
260
295
  if (activesData && activesData._isTransitioning) {
261
296
  return;
262
297
  }
263
298
  }
264
299
 
265
- var startEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW);
300
+ const startEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW);
266
301
 
267
302
  if (startEvent.defaultPrevented) {
268
303
  return;
269
304
  }
270
305
 
271
306
  if (actives) {
272
- actives.forEach(function (elemActive) {
307
+ actives.forEach(elemActive => {
273
308
  if (container !== elemActive) {
274
309
  Collapse.collapseInterface(elemActive, 'hide');
275
310
  }
276
311
 
277
312
  if (!activesData) {
278
- Data__default['default'].setData(elemActive, DATA_KEY, null);
313
+ Data__default['default'].set(elemActive, DATA_KEY, null);
279
314
  }
280
315
  });
281
316
  }
282
317
 
283
- var dimension = this._getDimension();
318
+ const dimension = this._getDimension();
284
319
 
285
320
  this._element.classList.remove(CLASS_NAME_COLLAPSE);
286
321
 
@@ -289,7 +324,7 @@
289
324
  this._element.style[dimension] = 0;
290
325
 
291
326
  if (this._triggerArray.length) {
292
- this._triggerArray.forEach(function (element) {
327
+ this._triggerArray.forEach(element => {
293
328
  element.classList.remove(CLASS_NAME_COLLAPSED);
294
329
  element.setAttribute('aria-expanded', true);
295
330
  });
@@ -297,54 +332,50 @@
297
332
 
298
333
  this.setTransitioning(true);
299
334
 
300
- var complete = function complete() {
301
- _this._element.classList.remove(CLASS_NAME_COLLAPSING);
302
-
303
- _this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
335
+ const complete = () => {
336
+ this._element.classList.remove(CLASS_NAME_COLLAPSING);
304
337
 
305
- _this._element.style[dimension] = '';
338
+ this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
306
339
 
307
- _this.setTransitioning(false);
308
-
309
- EventHandler__default['default'].trigger(_this._element, EVENT_SHOWN);
340
+ this._element.style[dimension] = '';
341
+ this.setTransitioning(false);
342
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
310
343
  };
311
344
 
312
- var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
313
- var scrollSize = "scroll" + capitalizedDimension;
314
- var transitionDuration = getTransitionDurationFromElement(this._element);
315
- EventHandler__default['default'].one(this._element, TRANSITION_END, complete);
345
+ const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
346
+ const scrollSize = `scroll${capitalizedDimension}`;
347
+ const transitionDuration = getTransitionDurationFromElement(this._element);
348
+ EventHandler__default['default'].one(this._element, 'transitionend', complete);
316
349
  emulateTransitionEnd(this._element, transitionDuration);
317
- this._element.style[dimension] = this._element[scrollSize] + "px";
318
- };
319
-
320
- _proto.hide = function hide() {
321
- var _this2 = this;
350
+ this._element.style[dimension] = `${this._element[scrollSize]}px`;
351
+ }
322
352
 
353
+ hide() {
323
354
  if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW)) {
324
355
  return;
325
356
  }
326
357
 
327
- var startEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
358
+ const startEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
328
359
 
329
360
  if (startEvent.defaultPrevented) {
330
361
  return;
331
362
  }
332
363
 
333
- var dimension = this._getDimension();
364
+ const dimension = this._getDimension();
334
365
 
335
- this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
366
+ this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
336
367
  reflow(this._element);
337
368
 
338
369
  this._element.classList.add(CLASS_NAME_COLLAPSING);
339
370
 
340
371
  this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
341
372
 
342
- var triggerArrayLength = this._triggerArray.length;
373
+ const triggerArrayLength = this._triggerArray.length;
343
374
 
344
375
  if (triggerArrayLength > 0) {
345
- for (var i = 0; i < triggerArrayLength; i++) {
346
- var trigger = this._triggerArray[i];
347
- var elem = getElementFromSelector(trigger);
376
+ for (let i = 0; i < triggerArrayLength; i++) {
377
+ const trigger = this._triggerArray[i];
378
+ const elem = getElementFromSelector(trigger);
348
379
 
349
380
  if (elem && !elem.classList.contains(CLASS_NAME_SHOW)) {
350
381
  trigger.classList.add(CLASS_NAME_COLLAPSED);
@@ -355,52 +386,53 @@
355
386
 
356
387
  this.setTransitioning(true);
357
388
 
358
- var complete = function complete() {
359
- _this2.setTransitioning(false);
389
+ const complete = () => {
390
+ this.setTransitioning(false);
360
391
 
361
- _this2._element.classList.remove(CLASS_NAME_COLLAPSING);
392
+ this._element.classList.remove(CLASS_NAME_COLLAPSING);
362
393
 
363
- _this2._element.classList.add(CLASS_NAME_COLLAPSE);
394
+ this._element.classList.add(CLASS_NAME_COLLAPSE);
364
395
 
365
- EventHandler__default['default'].trigger(_this2._element, EVENT_HIDDEN);
396
+ EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
366
397
  };
367
398
 
368
399
  this._element.style[dimension] = '';
369
- var transitionDuration = getTransitionDurationFromElement(this._element);
370
- EventHandler__default['default'].one(this._element, TRANSITION_END, complete);
400
+ const transitionDuration = getTransitionDurationFromElement(this._element);
401
+ EventHandler__default['default'].one(this._element, 'transitionend', complete);
371
402
  emulateTransitionEnd(this._element, transitionDuration);
372
- };
403
+ }
373
404
 
374
- _proto.setTransitioning = function setTransitioning(isTransitioning) {
405
+ setTransitioning(isTransitioning) {
375
406
  this._isTransitioning = isTransitioning;
376
- };
407
+ }
377
408
 
378
- _proto.dispose = function dispose() {
379
- Data__default['default'].removeData(this._element, DATA_KEY);
409
+ dispose() {
410
+ super.dispose();
380
411
  this._config = null;
381
412
  this._parent = null;
382
- this._element = null;
383
413
  this._triggerArray = null;
384
414
  this._isTransitioning = null;
385
415
  } // Private
386
- ;
387
416
 
388
- _proto._getConfig = function _getConfig(config) {
389
- config = _extends({}, Default, config);
417
+
418
+ _getConfig(config) {
419
+ config = { ...Default,
420
+ ...config
421
+ };
390
422
  config.toggle = Boolean(config.toggle); // Coerce string values
391
423
 
392
424
  typeCheckConfig(NAME, config, DefaultType);
393
425
  return config;
394
- };
426
+ }
395
427
 
396
- _proto._getDimension = function _getDimension() {
428
+ _getDimension() {
397
429
  return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;
398
- };
399
-
400
- _proto._getParent = function _getParent() {
401
- var _this3 = this;
430
+ }
402
431
 
403
- var parent = this._config.parent;
432
+ _getParent() {
433
+ let {
434
+ parent
435
+ } = this._config;
404
436
 
405
437
  if (isElement(parent)) {
406
438
  // it's a jQuery object
@@ -411,22 +443,22 @@
411
443
  parent = SelectorEngine__default['default'].findOne(parent);
412
444
  }
413
445
 
414
- var selector = SELECTOR_DATA_TOGGLE + "[data-parent=\"" + parent + "\"]";
415
- SelectorEngine__default['default'].find(selector, parent).forEach(function (element) {
416
- var selected = getElementFromSelector(element);
446
+ const selector = `${SELECTOR_DATA_TOGGLE}[data-bs-parent="${parent}"]`;
447
+ SelectorEngine__default['default'].find(selector, parent).forEach(element => {
448
+ const selected = getElementFromSelector(element);
417
449
 
418
- _this3._addAriaAndCollapsedClass(selected, [element]);
450
+ this._addAriaAndCollapsedClass(selected, [element]);
419
451
  });
420
452
  return parent;
421
- };
453
+ }
422
454
 
423
- _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
455
+ _addAriaAndCollapsedClass(element, triggerArray) {
424
456
  if (!element || !triggerArray.length) {
425
457
  return;
426
458
  }
427
459
 
428
- var isOpen = element.classList.contains(CLASS_NAME_SHOW);
429
- triggerArray.forEach(function (elem) {
460
+ const isOpen = element.classList.contains(CLASS_NAME_SHOW);
461
+ triggerArray.forEach(elem => {
430
462
  if (isOpen) {
431
463
  elem.classList.remove(CLASS_NAME_COLLAPSED);
432
464
  } else {
@@ -436,12 +468,14 @@
436
468
  elem.setAttribute('aria-expanded', isOpen);
437
469
  });
438
470
  } // Static
439
- ;
440
471
 
441
- Collapse.collapseInterface = function collapseInterface(element, config) {
442
- var data = Data__default['default'].getData(element, DATA_KEY);
443
472
 
444
- var _config = _extends({}, Default, Manipulator__default['default'].getDataAttributes(element), typeof config === 'object' && config ? config : {});
473
+ static collapseInterface(element, config) {
474
+ let data = Data__default['default'].get(element, DATA_KEY);
475
+ const _config = { ...Default,
476
+ ...Manipulator__default['default'].getDataAttributes(element),
477
+ ...(typeof config === 'object' && config ? config : {})
478
+ };
445
479
 
446
480
  if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
447
481
  _config.toggle = false;
@@ -453,37 +487,20 @@
453
487
 
454
488
  if (typeof config === 'string') {
455
489
  if (typeof data[config] === 'undefined') {
456
- throw new TypeError("No method named \"" + config + "\"");
490
+ throw new TypeError(`No method named "${config}"`);
457
491
  }
458
492
 
459
493
  data[config]();
460
494
  }
461
- };
495
+ }
462
496
 
463
- Collapse.jQueryInterface = function jQueryInterface(config) {
497
+ static jQueryInterface(config) {
464
498
  return this.each(function () {
465
499
  Collapse.collapseInterface(this, config);
466
500
  });
467
- };
468
-
469
- Collapse.getInstance = function getInstance(element) {
470
- return Data__default['default'].getData(element, DATA_KEY);
471
- };
472
-
473
- _createClass(Collapse, null, [{
474
- key: "VERSION",
475
- get: function get() {
476
- return VERSION;
477
- }
478
- }, {
479
- key: "Default",
480
- get: function get() {
481
- return Default;
482
- }
483
- }]);
501
+ }
484
502
 
485
- return Collapse;
486
- }();
503
+ }
487
504
  /**
488
505
  * ------------------------------------------------------------------------
489
506
  * Data Api implementation
@@ -493,16 +510,16 @@
493
510
 
494
511
  EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
495
512
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
496
- if (event.target.tagName === 'A') {
513
+ if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
497
514
  event.preventDefault();
498
515
  }
499
516
 
500
- var triggerData = Manipulator__default['default'].getDataAttributes(this);
501
- var selector = getSelectorFromElement(this);
502
- var selectorElements = SelectorEngine__default['default'].find(selector);
503
- selectorElements.forEach(function (element) {
504
- var data = Data__default['default'].getData(element, DATA_KEY);
505
- var config;
517
+ const triggerData = Manipulator__default['default'].getDataAttributes(this);
518
+ const selector = getSelectorFromElement(this);
519
+ const selectorElements = SelectorEngine__default['default'].find(selector);
520
+ selectorElements.forEach(element => {
521
+ const data = Data__default['default'].get(element, DATA_KEY);
522
+ let config;
506
523
 
507
524
  if (data) {
508
525
  // update parent attribute
@@ -519,26 +536,14 @@
519
536
  Collapse.collapseInterface(element, config);
520
537
  });
521
538
  });
522
- var $ = getjQuery();
523
539
  /**
524
540
  * ------------------------------------------------------------------------
525
541
  * jQuery
526
542
  * ------------------------------------------------------------------------
527
- * add .collapse to jQuery only if jQuery is present
543
+ * add .Collapse to jQuery only if jQuery is present
528
544
  */
529
545
 
530
- /* istanbul ignore if */
531
-
532
- if ($) {
533
- var JQUERY_NO_CONFLICT = $.fn[NAME];
534
- $.fn[NAME] = Collapse.jQueryInterface;
535
- $.fn[NAME].Constructor = Collapse;
536
-
537
- $.fn[NAME].noConflict = function () {
538
- $.fn[NAME] = JQUERY_NO_CONFLICT;
539
- return Collapse.jQueryInterface;
540
- };
541
- }
546
+ defineJQueryPlugin(NAME, Collapse);
542
547
 
543
548
  return Collapse;
544
549