bootstrap 4.6.0 → 5.0.0

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