bootstrap 4.6.0 → 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 (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