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