bootstrap 4.6.0 → 5.0.0.beta2

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