bootstrap 4.6.2.1 → 5.3.5

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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +61 -0
  3. data/CHANGELOG.md +7 -2
  4. data/Gemfile +1 -0
  5. data/README.md +33 -15
  6. data/Rakefile +1 -2
  7. data/assets/javascripts/bootstrap/alert.js +50 -147
  8. data/assets/javascripts/bootstrap/base-component.js +83 -0
  9. data/assets/javascripts/bootstrap/button.js +40 -190
  10. data/assets/javascripts/bootstrap/carousel.js +282 -537
  11. data/assets/javascripts/bootstrap/collapse.js +166 -314
  12. data/assets/javascripts/bootstrap/dom/data.js +62 -0
  13. data/assets/javascripts/bootstrap/dom/event-handler.js +236 -0
  14. data/assets/javascripts/bootstrap/dom/manipulator.js +71 -0
  15. data/assets/javascripts/bootstrap/dom/selector-engine.js +103 -0
  16. data/assets/javascripts/bootstrap/dropdown.js +297 -455
  17. data/assets/javascripts/bootstrap/modal.js +223 -566
  18. data/assets/javascripts/bootstrap/offcanvas.js +245 -0
  19. data/assets/javascripts/bootstrap/popover.js +59 -208
  20. data/assets/javascripts/bootstrap/scrollspy.js +213 -276
  21. data/assets/javascripts/bootstrap/tab.js +222 -200
  22. data/assets/javascripts/bootstrap/toast.js +137 -206
  23. data/assets/javascripts/bootstrap/tooltip.js +403 -747
  24. data/assets/javascripts/bootstrap/util/backdrop.js +138 -0
  25. data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
  26. data/assets/javascripts/bootstrap/util/config.js +67 -0
  27. data/assets/javascripts/bootstrap/util/focustrap.js +112 -0
  28. data/assets/javascripts/bootstrap/util/index.js +280 -0
  29. data/assets/javascripts/bootstrap/util/sanitizer.js +113 -0
  30. data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
  31. data/assets/javascripts/bootstrap/util/swipe.js +134 -0
  32. data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
  33. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  34. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  35. data/assets/javascripts/bootstrap-sprockets.js +21 -5
  36. data/assets/javascripts/bootstrap.js +3625 -3488
  37. data/assets/javascripts/bootstrap.min.js +3 -3
  38. data/assets/stylesheets/_bootstrap-grid.scss +53 -21
  39. data/assets/stylesheets/_bootstrap-reboot.scss +5 -7
  40. data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
  41. data/assets/stylesheets/_bootstrap.scss +21 -13
  42. data/assets/stylesheets/bootstrap/_accordion.scss +153 -0
  43. data/assets/stylesheets/bootstrap/_alert.scss +32 -16
  44. data/assets/stylesheets/bootstrap/_badge.scss +15 -31
  45. data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -24
  46. data/assets/stylesheets/bootstrap/_button-group.scss +32 -48
  47. data/assets/stylesheets/bootstrap/_buttons.scss +145 -71
  48. data/assets/stylesheets/bootstrap/_card.scss +67 -115
  49. data/assets/stylesheets/bootstrap/_carousel.scss +63 -37
  50. data/assets/stylesheets/bootstrap/_close.scss +53 -27
  51. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  52. data/assets/stylesheets/bootstrap/_dropdown.scss +129 -71
  53. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  54. data/assets/stylesheets/bootstrap/_functions.scss +135 -23
  55. data/assets/stylesheets/bootstrap/_grid.scss +18 -52
  56. data/assets/stylesheets/bootstrap/_helpers.scss +12 -0
  57. data/assets/stylesheets/bootstrap/_list-group.scss +93 -48
  58. data/assets/stylesheets/bootstrap/_maps.scss +174 -0
  59. data/assets/stylesheets/bootstrap/_mixins.scss +10 -15
  60. data/assets/stylesheets/bootstrap/_modal.scss +112 -112
  61. data/assets/stylesheets/bootstrap/_nav.scss +100 -28
  62. data/assets/stylesheets/bootstrap/_navbar.scss +130 -173
  63. data/assets/stylesheets/bootstrap/_offcanvas.scss +147 -0
  64. data/assets/stylesheets/bootstrap/_pagination.scss +72 -37
  65. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  66. data/assets/stylesheets/bootstrap/_popover.scss +99 -73
  67. data/assets/stylesheets/bootstrap/_progress.scss +35 -14
  68. data/assets/stylesheets/bootstrap/_reboot.scss +319 -192
  69. data/assets/stylesheets/bootstrap/_root.scss +177 -9
  70. data/assets/stylesheets/bootstrap/_spinners.scss +43 -23
  71. data/assets/stylesheets/bootstrap/_tables.scss +101 -115
  72. data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
  73. data/assets/stylesheets/bootstrap/_tooltip.scss +67 -63
  74. data/assets/stylesheets/bootstrap/_transitions.scss +3 -2
  75. data/assets/stylesheets/bootstrap/_type.scss +40 -59
  76. data/assets/stylesheets/bootstrap/_utilities.scss +806 -18
  77. data/assets/stylesheets/bootstrap/_variables-dark.scss +102 -0
  78. data/assets/stylesheets/bootstrap/_variables.scss +1210 -606
  79. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +97 -0
  80. data/assets/stylesheets/bootstrap/forms/_form-check.scss +189 -0
  81. data/assets/stylesheets/bootstrap/forms/_form-control.scss +214 -0
  82. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  83. data/assets/stylesheets/bootstrap/forms/_form-select.scss +80 -0
  84. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  85. data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
  86. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  87. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  88. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
  89. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +30 -0
  90. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  91. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  92. data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
  93. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  94. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  95. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  96. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  97. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  98. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  99. data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -6
  100. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  101. data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
  102. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  103. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  104. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
  105. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -100
  106. data/assets/stylesheets/bootstrap/mixins/_caret.scss +34 -27
  107. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  108. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  109. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  110. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  111. data/assets/stylesheets/bootstrap/mixins/_forms.scss +64 -96
  112. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  113. data/assets/stylesheets/bootstrap/mixins/_grid.scss +118 -36
  114. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  115. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +7 -2
  116. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  117. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
  118. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  119. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
  120. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  121. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
  122. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +33 -0
  123. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  124. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +211 -91
  125. data/bootstrap.gemspec +6 -6
  126. data/lib/bootstrap/engine.rb +0 -1
  127. data/lib/bootstrap/version.rb +2 -2
  128. data/tasks/updater/js.rb +17 -5
  129. data/tasks/updater/network.rb +2 -2
  130. data/tasks/updater/scss.rb +2 -2
  131. data/tasks/updater.rb +2 -2
  132. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  133. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  134. data/test/dummy_rails/app/views/pages/root.html +89 -0
  135. data/test/dummy_rails/config/application.rb +0 -5
  136. data/test/dummy_rails/public/favicon.ico +0 -0
  137. data/test/gemfiles/rails_4_2.gemfile +2 -1
  138. data/test/gemfiles/rails_5_0.gemfile +1 -2
  139. data/test/gemfiles/rails_5_1.gemfile +1 -2
  140. data/test/gemfiles/rails_5_2.gemfile +7 -0
  141. data/test/gemfiles/rails_6_0.gemfile +1 -1
  142. data/test/gemfiles/rails_6_1.gemfile +7 -0
  143. data/test/gemfiles/rails_7_0_dartsass.gemfile +0 -1
  144. data/test/gemfiles/rails_7_0_sassc.gemfile +0 -1
  145. data/test/rails_test.rb +0 -5
  146. data/test/test_helper.rb +3 -2
  147. metadata +92 -86
  148. data/.travis.yml +0 -31
  149. data/assets/javascripts/bootstrap/util.js +0 -189
  150. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  151. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  152. data/assets/stylesheets/bootstrap/_input-group.scss +0 -211
  153. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  154. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  155. data/assets/stylesheets/bootstrap/_print.scss +0 -132
  156. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  157. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  158. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  159. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  160. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  161. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  162. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  163. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  164. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  165. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  166. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  167. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  168. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  169. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  170. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  171. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  172. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  173. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  174. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  175. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  176. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  177. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  178. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  179. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  180. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  181. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  182. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  183. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  184. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  185. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  186. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,395 +1,247 @@
1
1
  /*!
2
- * Bootstrap collapse.js v4.6.2 (https://getbootstrap.com/)
3
- * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap collapse.js v5.3.5 (https://getbootstrap.com/)
3
+ * Copyright 2011-2025 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('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/index.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Index));
10
+ })(this, (function (BaseComponent, EventHandler, SelectorEngine, index_js) { 'use strict';
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
-
14
- var $__default = /*#__PURE__*/_interopDefaultLegacy($);
15
- var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
16
-
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);
24
- }
25
- }
26
-
27
- function _createClass(Constructor, protoProps, staticProps) {
28
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
29
- if (staticProps) _defineProperties(Constructor, staticProps);
30
- Object.defineProperty(Constructor, "prototype", {
31
- writable: false
32
- });
33
- return Constructor;
34
- }
35
-
36
- function _extends() {
37
- _extends = Object.assign ? Object.assign.bind() : function (target) {
38
- for (var i = 1; i < arguments.length; i++) {
39
- var source = arguments[i];
40
-
41
- for (var key in source) {
42
- if (Object.prototype.hasOwnProperty.call(source, key)) {
43
- target[key] = source[key];
44
- }
45
- }
46
- }
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap collapse.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
47
18
 
48
- return target;
49
- };
50
- return _extends.apply(this, arguments);
51
- }
52
19
 
53
20
  /**
54
21
  * Constants
55
22
  */
56
23
 
57
- var NAME = 'collapse';
58
- var VERSION = '4.6.2';
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 CLASS_NAME_SHOW = 'show';
64
- var CLASS_NAME_COLLAPSE = 'collapse';
65
- var CLASS_NAME_COLLAPSING = 'collapsing';
66
- var CLASS_NAME_COLLAPSED = 'collapsed';
67
- var DIMENSION_WIDTH = 'width';
68
- var DIMENSION_HEIGHT = 'height';
69
- var EVENT_SHOW = "show" + EVENT_KEY;
70
- var EVENT_SHOWN = "shown" + EVENT_KEY;
71
- var EVENT_HIDE = "hide" + EVENT_KEY;
72
- var EVENT_HIDDEN = "hidden" + EVENT_KEY;
73
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
74
- var SELECTOR_ACTIVES = '.show, .collapsing';
75
- var SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]';
76
- var Default = {
77
- toggle: true,
78
- parent: ''
24
+ const NAME = 'collapse';
25
+ const DATA_KEY = 'bs.collapse';
26
+ const EVENT_KEY = `.${DATA_KEY}`;
27
+ const DATA_API_KEY = '.data-api';
28
+ const EVENT_SHOW = `show${EVENT_KEY}`;
29
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
30
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
31
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
32
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
33
+ const CLASS_NAME_SHOW = 'show';
34
+ const CLASS_NAME_COLLAPSE = 'collapse';
35
+ const CLASS_NAME_COLLAPSING = 'collapsing';
36
+ const CLASS_NAME_COLLAPSED = 'collapsed';
37
+ const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
38
+ const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
39
+ const WIDTH = 'width';
40
+ const HEIGHT = 'height';
41
+ const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
42
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]';
43
+ const Default = {
44
+ parent: null,
45
+ toggle: true
79
46
  };
80
- var DefaultType = {
81
- toggle: 'boolean',
82
- parent: '(string|element)'
47
+ const DefaultType = {
48
+ parent: '(null|element)',
49
+ toggle: 'boolean'
83
50
  };
51
+
84
52
  /**
85
53
  * Class definition
86
54
  */
87
55
 
88
- var Collapse = /*#__PURE__*/function () {
89
- function Collapse(element, config) {
56
+ class Collapse extends BaseComponent {
57
+ constructor(element, config) {
58
+ super(element, config);
90
59
  this._isTransitioning = false;
91
- this._element = element;
92
- this._config = this._getConfig(config);
93
- this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
94
- var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
95
-
96
- for (var i = 0, len = toggleList.length; i < len; i++) {
97
- var elem = toggleList[i];
98
- var selector = Util__default["default"].getSelectorFromElement(elem);
99
- var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
100
- return foundElem === element;
101
- });
102
-
103
- if (selector !== null && filterElement.length > 0) {
104
- this._selector = selector;
105
-
60
+ this._triggerArray = [];
61
+ const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
62
+ for (const elem of toggleList) {
63
+ const selector = SelectorEngine.getSelectorFromElement(elem);
64
+ const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
65
+ if (selector !== null && filterElement.length) {
106
66
  this._triggerArray.push(elem);
107
67
  }
108
68
  }
109
-
110
- this._parent = this._config.parent ? this._getParent() : null;
111
-
69
+ this._initializeChildren();
112
70
  if (!this._config.parent) {
113
- this._addAriaAndCollapsedClass(this._element, this._triggerArray);
71
+ this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
114
72
  }
115
-
116
73
  if (this._config.toggle) {
117
74
  this.toggle();
118
75
  }
119
- } // Getters
120
-
76
+ }
121
77
 
122
- var _proto = Collapse.prototype;
78
+ // Getters
79
+ static get Default() {
80
+ return Default;
81
+ }
82
+ static get DefaultType() {
83
+ return DefaultType;
84
+ }
85
+ static get NAME() {
86
+ return NAME;
87
+ }
123
88
 
124
89
  // Public
125
- _proto.toggle = function toggle() {
126
- if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) {
90
+ toggle() {
91
+ if (this._isShown()) {
127
92
  this.hide();
128
93
  } else {
129
94
  this.show();
130
95
  }
131
- };
132
-
133
- _proto.show = function show() {
134
- var _this = this;
135
-
136
- if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) {
96
+ }
97
+ show() {
98
+ if (this._isTransitioning || this._isShown()) {
137
99
  return;
138
100
  }
101
+ let activeChildren = [];
139
102
 
140
- var actives;
141
- var activesData;
142
-
143
- if (this._parent) {
144
- actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
145
- if (typeof _this._config.parent === 'string') {
146
- return elem.getAttribute('data-parent') === _this._config.parent;
147
- }
148
-
149
- return elem.classList.contains(CLASS_NAME_COLLAPSE);
150
- });
151
-
152
- if (actives.length === 0) {
153
- actives = null;
154
- }
103
+ // find active children
104
+ if (this._config.parent) {
105
+ activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
106
+ toggle: false
107
+ }));
155
108
  }
156
-
157
- if (actives) {
158
- activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY);
159
-
160
- if (activesData && activesData._isTransitioning) {
161
- return;
162
- }
109
+ if (activeChildren.length && activeChildren[0]._isTransitioning) {
110
+ return;
163
111
  }
164
-
165
- var startEvent = $__default["default"].Event(EVENT_SHOW);
166
- $__default["default"](this._element).trigger(startEvent);
167
-
168
- if (startEvent.isDefaultPrevented()) {
112
+ const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);
113
+ if (startEvent.defaultPrevented) {
169
114
  return;
170
115
  }
171
-
172
- if (actives) {
173
- Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide');
174
-
175
- if (!activesData) {
176
- $__default["default"](actives).data(DATA_KEY, null);
177
- }
116
+ for (const activeInstance of activeChildren) {
117
+ activeInstance.hide();
178
118
  }
179
-
180
- var dimension = this._getDimension();
181
-
182
- $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
119
+ const dimension = this._getDimension();
120
+ this._element.classList.remove(CLASS_NAME_COLLAPSE);
121
+ this._element.classList.add(CLASS_NAME_COLLAPSING);
183
122
  this._element.style[dimension] = 0;
184
-
185
- if (this._triggerArray.length) {
186
- $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
187
- }
188
-
189
- this.setTransitioning(true);
190
-
191
- var complete = function complete() {
192
- $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW);
193
- _this._element.style[dimension] = '';
194
-
195
- _this.setTransitioning(false);
196
-
197
- $__default["default"](_this._element).trigger(EVENT_SHOWN);
123
+ this._addAriaAndCollapsedClass(this._triggerArray, true);
124
+ this._isTransitioning = true;
125
+ const complete = () => {
126
+ this._isTransitioning = false;
127
+ this._element.classList.remove(CLASS_NAME_COLLAPSING);
128
+ this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
129
+ this._element.style[dimension] = '';
130
+ EventHandler.trigger(this._element, EVENT_SHOWN);
198
131
  };
199
-
200
- var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
201
- var scrollSize = "scroll" + capitalizedDimension;
202
- var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
203
- $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
204
- this._element.style[dimension] = this._element[scrollSize] + "px";
205
- };
206
-
207
- _proto.hide = function hide() {
208
- var _this2 = this;
209
-
210
- if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) {
132
+ const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
133
+ const scrollSize = `scroll${capitalizedDimension}`;
134
+ this._queueCallback(complete, this._element, true);
135
+ this._element.style[dimension] = `${this._element[scrollSize]}px`;
136
+ }
137
+ hide() {
138
+ if (this._isTransitioning || !this._isShown()) {
211
139
  return;
212
140
  }
213
-
214
- var startEvent = $__default["default"].Event(EVENT_HIDE);
215
- $__default["default"](this._element).trigger(startEvent);
216
-
217
- if (startEvent.isDefaultPrevented()) {
141
+ const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);
142
+ if (startEvent.defaultPrevented) {
218
143
  return;
219
144
  }
220
-
221
- var dimension = this._getDimension();
222
-
223
- this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
224
- Util__default["default"].reflow(this._element);
225
- $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW);
226
- var triggerArrayLength = this._triggerArray.length;
227
-
228
- if (triggerArrayLength > 0) {
229
- for (var i = 0; i < triggerArrayLength; i++) {
230
- var trigger = this._triggerArray[i];
231
- var selector = Util__default["default"].getSelectorFromElement(trigger);
232
-
233
- if (selector !== null) {
234
- var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector)));
235
-
236
- if (!$elem.hasClass(CLASS_NAME_SHOW)) {
237
- $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
238
- }
239
- }
145
+ const dimension = this._getDimension();
146
+ this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
147
+ index_js.reflow(this._element);
148
+ this._element.classList.add(CLASS_NAME_COLLAPSING);
149
+ this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
150
+ for (const trigger of this._triggerArray) {
151
+ const element = SelectorEngine.getElementFromSelector(trigger);
152
+ if (element && !this._isShown(element)) {
153
+ this._addAriaAndCollapsedClass([trigger], false);
240
154
  }
241
155
  }
242
-
243
- this.setTransitioning(true);
244
-
245
- var complete = function complete() {
246
- _this2.setTransitioning(false);
247
-
248
- $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
156
+ this._isTransitioning = true;
157
+ const complete = () => {
158
+ this._isTransitioning = false;
159
+ this._element.classList.remove(CLASS_NAME_COLLAPSING);
160
+ this._element.classList.add(CLASS_NAME_COLLAPSE);
161
+ EventHandler.trigger(this._element, EVENT_HIDDEN);
249
162
  };
250
-
251
163
  this._element.style[dimension] = '';
252
- var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
253
- $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
254
- };
255
-
256
- _proto.setTransitioning = function setTransitioning(isTransitioning) {
257
- this._isTransitioning = isTransitioning;
258
- };
259
-
260
- _proto.dispose = function dispose() {
261
- $__default["default"].removeData(this._element, DATA_KEY);
262
- this._config = null;
263
- this._parent = null;
264
- this._element = null;
265
- this._triggerArray = null;
266
- this._isTransitioning = null;
267
- } // Private
268
- ;
164
+ this._queueCallback(complete, this._element, true);
165
+ }
166
+ _isShown(element = this._element) {
167
+ return element.classList.contains(CLASS_NAME_SHOW);
168
+ }
269
169
 
270
- _proto._getConfig = function _getConfig(config) {
271
- config = _extends({}, Default, config);
170
+ // Private
171
+ _configAfterMerge(config) {
272
172
  config.toggle = Boolean(config.toggle); // Coerce string values
273
-
274
- Util__default["default"].typeCheckConfig(NAME, config, DefaultType);
173
+ config.parent = index_js.getElement(config.parent);
275
174
  return config;
276
- };
277
-
278
- _proto._getDimension = function _getDimension() {
279
- var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH);
280
- return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
281
- };
282
-
283
- _proto._getParent = function _getParent() {
284
- var _this3 = this;
285
-
286
- var parent;
287
-
288
- if (Util__default["default"].isElement(this._config.parent)) {
289
- parent = this._config.parent; // It's a jQuery object
290
-
291
- if (typeof this._config.parent.jquery !== 'undefined') {
292
- parent = this._config.parent[0];
175
+ }
176
+ _getDimension() {
177
+ return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
178
+ }
179
+ _initializeChildren() {
180
+ if (!this._config.parent) {
181
+ return;
182
+ }
183
+ const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);
184
+ for (const element of children) {
185
+ const selected = SelectorEngine.getElementFromSelector(element);
186
+ if (selected) {
187
+ this._addAriaAndCollapsedClass([element], this._isShown(selected));
293
188
  }
294
- } else {
295
- parent = document.querySelector(this._config.parent);
296
189
  }
297
-
298
- var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
299
- var children = [].slice.call(parent.querySelectorAll(selector));
300
- $__default["default"](children).each(function (i, element) {
301
- _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
302
- });
303
- return parent;
304
- };
305
-
306
- _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
307
- var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW);
308
-
309
- if (triggerArray.length) {
310
- $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
190
+ }
191
+ _getFirstLevelChildren(selector) {
192
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
193
+ // remove children if greater depth
194
+ return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
195
+ }
196
+ _addAriaAndCollapsedClass(triggerArray, isOpen) {
197
+ if (!triggerArray.length) {
198
+ return;
311
199
  }
312
- } // Static
313
- ;
314
-
315
- Collapse._getTargetFromElement = function _getTargetFromElement(element) {
316
- var selector = Util__default["default"].getSelectorFromElement(element);
317
- return selector ? document.querySelector(selector) : null;
318
- };
200
+ for (const element of triggerArray) {
201
+ element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
202
+ element.setAttribute('aria-expanded', isOpen);
203
+ }
204
+ }
319
205
 
320
- Collapse._jQueryInterface = function _jQueryInterface(config) {
206
+ // Static
207
+ static jQueryInterface(config) {
208
+ const _config = {};
209
+ if (typeof config === 'string' && /show|hide/.test(config)) {
210
+ _config.toggle = false;
211
+ }
321
212
  return this.each(function () {
322
- var $element = $__default["default"](this);
323
- var data = $element.data(DATA_KEY);
324
-
325
- var _config = _extends({}, Default, $element.data(), typeof config === 'object' && config ? config : {});
326
-
327
- if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
328
- _config.toggle = false;
329
- }
330
-
331
- if (!data) {
332
- data = new Collapse(this, _config);
333
- $element.data(DATA_KEY, data);
334
- }
335
-
213
+ const data = Collapse.getOrCreateInstance(this, _config);
336
214
  if (typeof config === 'string') {
337
215
  if (typeof data[config] === 'undefined') {
338
- throw new TypeError("No method named \"" + config + "\"");
216
+ throw new TypeError(`No method named "${config}"`);
339
217
  }
340
-
341
218
  data[config]();
342
219
  }
343
220
  });
344
- };
345
-
346
- _createClass(Collapse, null, [{
347
- key: "VERSION",
348
- get: function get() {
349
- return VERSION;
350
- }
351
- }, {
352
- key: "Default",
353
- get: function get() {
354
- return Default;
355
- }
356
- }]);
221
+ }
222
+ }
357
223
 
358
- return Collapse;
359
- }();
360
224
  /**
361
225
  * Data API implementation
362
226
  */
363
227
 
364
-
365
- $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
228
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
366
229
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
367
- if (event.currentTarget.tagName === 'A') {
230
+ if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
368
231
  event.preventDefault();
369
232
  }
370
-
371
- var $trigger = $__default["default"](this);
372
- var selector = Util__default["default"].getSelectorFromElement(this);
373
- var selectors = [].slice.call(document.querySelectorAll(selector));
374
- $__default["default"](selectors).each(function () {
375
- var $target = $__default["default"](this);
376
- var data = $target.data(DATA_KEY);
377
- var config = data ? 'toggle' : $trigger.data();
378
-
379
- Collapse._jQueryInterface.call($target, config);
380
- });
233
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
234
+ Collapse.getOrCreateInstance(element, {
235
+ toggle: false
236
+ }).toggle();
237
+ }
381
238
  });
239
+
382
240
  /**
383
241
  * jQuery
384
242
  */
385
243
 
386
- $__default["default"].fn[NAME] = Collapse._jQueryInterface;
387
- $__default["default"].fn[NAME].Constructor = Collapse;
388
-
389
- $__default["default"].fn[NAME].noConflict = function () {
390
- $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
391
- return Collapse._jQueryInterface;
392
- };
244
+ index_js.defineJQueryPlugin(Collapse);
393
245
 
394
246
  return Collapse;
395
247
 
@@ -0,0 +1,62 @@
1
+ /*!
2
+ * Bootstrap data.js v5.3.5 (https://getbootstrap.com/)
3
+ * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
+ typeof define === 'function' && define.amd ? define(factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Data = factory());
10
+ })(this, (function () { 'use strict';
11
+
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap dom/data.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
18
+
19
+ /**
20
+ * Constants
21
+ */
22
+
23
+ const elementMap = new Map();
24
+ const data = {
25
+ set(element, key, instance) {
26
+ if (!elementMap.has(element)) {
27
+ elementMap.set(element, new Map());
28
+ }
29
+ const instanceMap = elementMap.get(element);
30
+
31
+ // make it clear we only want one instance per element
32
+ // can be removed later when multiple key/instances are fine to be used
33
+ if (!instanceMap.has(key) && instanceMap.size !== 0) {
34
+ // eslint-disable-next-line no-console
35
+ console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
36
+ return;
37
+ }
38
+ instanceMap.set(key, instance);
39
+ },
40
+ get(element, key) {
41
+ if (elementMap.has(element)) {
42
+ return elementMap.get(element).get(key) || null;
43
+ }
44
+ return null;
45
+ },
46
+ remove(element, key) {
47
+ if (!elementMap.has(element)) {
48
+ return;
49
+ }
50
+ const instanceMap = elementMap.get(element);
51
+ instanceMap.delete(key);
52
+
53
+ // free up element references if there are no instances left for an element
54
+ if (instanceMap.size === 0) {
55
+ elementMap.delete(element);
56
+ }
57
+ }
58
+ };
59
+
60
+ return data;
61
+
62
+ }));