bootstrap 5.0.1 → 5.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/assets/javascripts/bootstrap/alert.js +89 -58
  4. data/assets/javascripts/bootstrap/base-component.js +53 -39
  5. data/assets/javascripts/bootstrap/button.js +31 -25
  6. data/assets/javascripts/bootstrap/carousel.js +126 -89
  7. data/assets/javascripts/bootstrap/collapse.js +125 -133
  8. data/assets/javascripts/bootstrap/dom/data.js +5 -5
  9. data/assets/javascripts/bootstrap/dom/event-handler.js +11 -5
  10. data/assets/javascripts/bootstrap/dom/manipulator.js +6 -6
  11. data/assets/javascripts/bootstrap/dom/selector-engine.js +49 -7
  12. data/assets/javascripts/bootstrap/dropdown.js +147 -140
  13. data/assets/javascripts/bootstrap/modal.js +397 -180
  14. data/assets/javascripts/bootstrap/offcanvas.js +333 -138
  15. data/assets/javascripts/bootstrap/popover.js +36 -54
  16. data/assets/javascripts/bootstrap/scrollspy.js +58 -68
  17. data/assets/javascripts/bootstrap/tab.js +53 -26
  18. data/assets/javascripts/bootstrap/toast.js +138 -41
  19. data/assets/javascripts/bootstrap/tooltip.js +137 -120
  20. data/assets/javascripts/bootstrap-sprockets.js +8 -8
  21. data/assets/javascripts/bootstrap.js +937 -886
  22. data/assets/javascripts/bootstrap.min.js +2 -2
  23. data/assets/stylesheets/_bootstrap-grid.scss +3 -1
  24. data/assets/stylesheets/_bootstrap-reboot.scss +2 -4
  25. data/assets/stylesheets/_bootstrap.scss +2 -1
  26. data/assets/stylesheets/bootstrap/_buttons.scss +1 -0
  27. data/assets/stylesheets/bootstrap/_card.scss +7 -6
  28. data/assets/stylesheets/bootstrap/_carousel.scss +2 -2
  29. data/assets/stylesheets/bootstrap/_dropdown.scss +4 -4
  30. data/assets/stylesheets/bootstrap/_functions.scss +100 -3
  31. data/assets/stylesheets/bootstrap/_grid.scss +11 -0
  32. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  33. data/assets/stylesheets/bootstrap/_images.scss +1 -1
  34. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  35. data/assets/stylesheets/bootstrap/_modal.scss +5 -15
  36. data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
  37. data/assets/stylesheets/bootstrap/_offcanvas.scss +8 -2
  38. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  39. data/assets/stylesheets/bootstrap/_popover.scss +10 -10
  40. data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
  41. data/assets/stylesheets/bootstrap/_root.scss +40 -2
  42. data/assets/stylesheets/bootstrap/_tables.scss +9 -5
  43. data/assets/stylesheets/bootstrap/_toasts.scss +3 -3
  44. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
  45. data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
  46. data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
  47. data/assets/stylesheets/bootstrap/_variables.scss +206 -29
  48. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
  49. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +3 -1
  50. data/assets/stylesheets/bootstrap/forms/_form-check.scss +1 -1
  51. data/assets/stylesheets/bootstrap/forms/_form-control.scss +1 -1
  52. data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -1
  53. data/assets/stylesheets/bootstrap/forms/_form-select.scss +5 -0
  54. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  55. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  56. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  57. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +1 -1
  58. data/assets/stylesheets/bootstrap/mixins/_grid.scss +35 -9
  59. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
  60. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +1 -1
  61. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +55 -13
  62. data/bootstrap.gemspec +3 -3
  63. data/lib/bootstrap/version.rb +2 -2
  64. data/tasks/updater/js.rb +6 -2
  65. metadata +12 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e00e53f08ddcb226fbc4ba5d5d0803e9040879a2d260d3597304550b6a9bff0b
4
- data.tar.gz: 0f239d578988e6faa40b51476f065b64f2b6ba84f291f2a71209aa1609bc6d91
3
+ metadata.gz: a581703e37a15500e6877790e3174a9938610cd3d6250e9058a00315bc560dcd
4
+ data.tar.gz: 6fac8e4322b8bbcb368381c10dc19036f46ece7544dd58fd66e7d0f23e1ddde3
5
5
  SHA512:
6
- metadata.gz: 40448c17c92f5767dc6791b559a129d2842f74ad667d8cb21402058383bad293dbd37cd0173fae40ecf1b8f8620ff3d37f932631056bcdae1ac7b99275d6a2b8
7
- data.tar.gz: 79518238b77d51ece52c474e17aeba9a1dc6af2567c376e22e1f45fb0b43e95966b6d184837aceb5dd33b7825fcd514e5f6ae9f60537262707a0464974599f8d
6
+ metadata.gz: 9f78f85046b10501027d059fda1e760ac4e1f583120bb71f2b2a05a16b148b7db5d3ece5397068a2febd1ba293d810eec9c02992742ffadd79dd931a0c178acd
7
+ data.tar.gz: b72e89c5d2a9aba75fce2fbb8249d0bee925cc2d2db51002f16ecdae3249f26e8a597ffda733192c773870f6aea1e7654733232856acbe8e33898c31ffefefce
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Bootstrap Ruby Gem [![Build Status](https://travis-ci.org/twbs/bootstrap-rubygem.svg?branch=master)](https://travis-ci.org/twbs/bootstrap-rubygem) [![Gem](https://img.shields.io/gem/v/bootstrap.svg)](https://rubygems.org/gems/bootstrap)
2
2
 
3
- [Bootstrap 4][bootstrap-home] ruby gem for Ruby on Rails (*Sprockets*) and Hanami (formerly Lotus).
3
+ [Bootstrap 5][bootstrap-home] ruby gem for Ruby on Rails (*Sprockets*) and Hanami (formerly Lotus).
4
4
 
5
5
  For Sass versions of Bootstrap 3 and 2 see [bootstrap-sass](https://github.com/twbs/bootstrap-sass) instead.
6
6
 
@@ -20,7 +20,7 @@ Please see the appropriate guide for your environment of choice:
20
20
  Add `bootstrap` to your Gemfile:
21
21
 
22
22
  ```ruby
23
- gem 'bootstrap', '~> 5.0.1'
23
+ gem 'bootstrap', '~> 5.1.2'
24
24
  ```
25
25
 
26
26
  Ensure that `sprockets-rails` is at least v2.3.2.
@@ -1,19 +1,25 @@
1
1
  /*!
2
- * Bootstrap alert.js v5.0.1 (https://getbootstrap.com/)
2
+ * Bootstrap alert.js v5.1.2 (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('./dom/selector-engine.js'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/data', './dom/event-handler', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.SelectorEngine, global.Data, global.EventHandler, global.Base));
10
- }(this, (function (SelectorEngine, Data, EventHandler, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/event-handler', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.EventHandler, global.Base));
10
+ })(this, (function (EventHandler, BaseComponent) { 'use strict';
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
- var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
14
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
16
+
17
+ /**
18
+ * --------------------------------------------------------------------------
19
+ * Bootstrap (v5.1.2): util/index.js
20
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
21
+ * --------------------------------------------------------------------------
22
+ */
17
23
 
18
24
  const getSelector = element => {
19
25
  let selector = element.getAttribute('data-bs-target');
@@ -44,6 +50,22 @@
44
50
  return selector ? document.querySelector(selector) : null;
45
51
  };
46
52
 
53
+ const isDisabled = element => {
54
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
55
+ return true;
56
+ }
57
+
58
+ if (element.classList.contains('disabled')) {
59
+ return true;
60
+ }
61
+
62
+ if (typeof element.disabled !== 'undefined') {
63
+ return element.disabled;
64
+ }
65
+
66
+ return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
67
+ };
68
+
47
69
  const getjQuery = () => {
48
70
  const {
49
71
  jQuery
@@ -56,9 +78,18 @@
56
78
  return null;
57
79
  };
58
80
 
81
+ const DOMContentLoadedCallbacks = [];
82
+
59
83
  const onDOMContentLoaded = callback => {
60
84
  if (document.readyState === 'loading') {
61
- document.addEventListener('DOMContentLoaded', callback);
85
+ // add listener on the first call when the document is in loading state
86
+ if (!DOMContentLoadedCallbacks.length) {
87
+ document.addEventListener('DOMContentLoaded', () => {
88
+ DOMContentLoadedCallbacks.forEach(callback => callback());
89
+ });
90
+ }
91
+
92
+ DOMContentLoadedCallbacks.push(callback);
62
93
  } else {
63
94
  callback();
64
95
  }
@@ -85,7 +116,33 @@
85
116
 
86
117
  /**
87
118
  * --------------------------------------------------------------------------
88
- * Bootstrap (v5.0.1): alert.js
119
+ * Bootstrap (v5.1.2): util/component-functions.js
120
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
121
+ * --------------------------------------------------------------------------
122
+ */
123
+
124
+ const enableDismissTrigger = (component, method = 'hide') => {
125
+ const clickEvent = `click.dismiss${component.EVENT_KEY}`;
126
+ const name = component.NAME;
127
+ EventHandler__default.default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
128
+ if (['A', 'AREA'].includes(this.tagName)) {
129
+ event.preventDefault();
130
+ }
131
+
132
+ if (isDisabled(this)) {
133
+ return;
134
+ }
135
+
136
+ const target = getElementFromSelector(this) || this.closest(`.${name}`);
137
+ const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
138
+
139
+ instance[method]();
140
+ });
141
+ };
142
+
143
+ /**
144
+ * --------------------------------------------------------------------------
145
+ * Bootstrap (v5.1.2): alert.js
89
146
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
90
147
  * --------------------------------------------------------------------------
91
148
  */
@@ -98,12 +155,8 @@
98
155
  const NAME = 'alert';
99
156
  const DATA_KEY = 'bs.alert';
100
157
  const EVENT_KEY = `.${DATA_KEY}`;
101
- const DATA_API_KEY = '.data-api';
102
- const SELECTOR_DISMISS = '[data-bs-dismiss="alert"]';
103
158
  const EVENT_CLOSE = `close${EVENT_KEY}`;
104
159
  const EVENT_CLOSED = `closed${EVENT_KEY}`;
105
- const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
106
- const CLASS_NAME_ALERT = 'alert';
107
160
  const CLASS_NAME_FADE = 'fade';
108
161
  const CLASS_NAME_SHOW = 'show';
109
162
  /**
@@ -112,72 +165,50 @@
112
165
  * ------------------------------------------------------------------------
113
166
  */
114
167
 
115
- class Alert extends BaseComponent__default['default'] {
168
+ class Alert extends BaseComponent__default.default {
116
169
  // Getters
117
170
  static get NAME() {
118
171
  return NAME;
119
172
  } // Public
120
173
 
121
174
 
122
- close(element) {
123
- const rootElement = element ? this._getRootElement(element) : this._element;
175
+ close() {
176
+ const closeEvent = EventHandler__default.default.trigger(this._element, EVENT_CLOSE);
124
177
 
125
- const customEvent = this._triggerCloseEvent(rootElement);
126
-
127
- if (customEvent === null || customEvent.defaultPrevented) {
178
+ if (closeEvent.defaultPrevented) {
128
179
  return;
129
180
  }
130
181
 
131
- this._removeElement(rootElement);
132
- } // Private
182
+ this._element.classList.remove(CLASS_NAME_SHOW);
133
183
 
184
+ const isAnimated = this._element.classList.contains(CLASS_NAME_FADE);
134
185
 
135
- _getRootElement(element) {
136
- return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);
137
- }
138
-
139
- _triggerCloseEvent(element) {
140
- return EventHandler__default['default'].trigger(element, EVENT_CLOSE);
141
- }
142
-
143
- _removeElement(element) {
144
- element.classList.remove(CLASS_NAME_SHOW);
145
- const isAnimated = element.classList.contains(CLASS_NAME_FADE);
186
+ this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
187
+ } // Private
146
188
 
147
- this._queueCallback(() => this._destroyElement(element), element, isAnimated);
148
- }
149
189
 
150
- _destroyElement(element) {
151
- if (element.parentNode) {
152
- element.parentNode.removeChild(element);
153
- }
190
+ _destroyElement() {
191
+ this._element.remove();
154
192
 
155
- EventHandler__default['default'].trigger(element, EVENT_CLOSED);
193
+ EventHandler__default.default.trigger(this._element, EVENT_CLOSED);
194
+ this.dispose();
156
195
  } // Static
157
196
 
158
197
 
159
198
  static jQueryInterface(config) {
160
199
  return this.each(function () {
161
- let data = Data__default['default'].get(this, DATA_KEY);
200
+ const data = Alert.getOrCreateInstance(this);
162
201
 
163
- if (!data) {
164
- data = new Alert(this);
202
+ if (typeof config !== 'string') {
203
+ return;
165
204
  }
166
205
 
167
- if (config === 'close') {
168
- data[config](this);
206
+ if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
207
+ throw new TypeError(`No method named "${config}"`);
169
208
  }
170
- });
171
- }
172
209
 
173
- static handleDismiss(alertInstance) {
174
- return function (event) {
175
- if (event) {
176
- event.preventDefault();
177
- }
178
-
179
- alertInstance.close(this);
180
- };
210
+ data[config](this);
211
+ });
181
212
  }
182
213
 
183
214
  }
@@ -188,7 +219,7 @@
188
219
  */
189
220
 
190
221
 
191
- EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));
222
+ enableDismissTrigger(Alert, 'close');
192
223
  /**
193
224
  * ------------------------------------------------------------------------
194
225
  * jQuery
@@ -200,4 +231,4 @@
200
231
 
201
232
  return Alert;
202
233
 
203
- })));
234
+ }));
@@ -1,20 +1,25 @@
1
1
  /*!
2
- * Bootstrap base-component.js v5.0.1 (https://getbootstrap.com/)
2
+ * Bootstrap base-component.js v5.1.2 (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('./dom/data.js'), require('./dom/selector-engine.js'), require('./dom/event-handler.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/data', './dom/selector-engine', './dom/event-handler'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Base = factory(global.Data, global.SelectorEngine, global.EventHandler));
10
- }(this, (function (Data, SelectorEngine, EventHandler) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Base = factory(global.Data, global.EventHandler));
10
+ })(this, (function (Data, EventHandler) { 'use strict';
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
- var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
- var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
16
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
14
+ const Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
17
16
 
17
+ /**
18
+ * --------------------------------------------------------------------------
19
+ * Bootstrap (v5.1.2): util/index.js
20
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
21
+ * --------------------------------------------------------------------------
22
+ */
18
23
  const MILLISECONDS_MULTIPLIER = 1000;
19
24
  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
20
25
 
@@ -64,39 +69,51 @@
64
69
  }
65
70
 
66
71
  if (typeof obj === 'string' && obj.length > 0) {
67
- return SelectorEngine__default['default'].findOne(obj);
72
+ return document.querySelector(obj);
68
73
  }
69
74
 
70
75
  return null;
71
76
  };
72
77
 
73
- const emulateTransitionEnd = (element, duration) => {
74
- let called = false;
78
+ const execute = callback => {
79
+ if (typeof callback === 'function') {
80
+ callback();
81
+ }
82
+ };
83
+
84
+ const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
85
+ if (!waitForTransition) {
86
+ execute(callback);
87
+ return;
88
+ }
89
+
75
90
  const durationPadding = 5;
76
- const emulatedDuration = duration + durationPadding;
91
+ const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
92
+ let called = false;
93
+
94
+ const handler = ({
95
+ target
96
+ }) => {
97
+ if (target !== transitionElement) {
98
+ return;
99
+ }
77
100
 
78
- function listener() {
79
101
  called = true;
80
- element.removeEventListener(TRANSITION_END, listener);
81
- }
102
+ transitionElement.removeEventListener(TRANSITION_END, handler);
103
+ execute(callback);
104
+ };
82
105
 
83
- element.addEventListener(TRANSITION_END, listener);
106
+ transitionElement.addEventListener(TRANSITION_END, handler);
84
107
  setTimeout(() => {
85
108
  if (!called) {
86
- triggerTransitionEnd(element);
109
+ triggerTransitionEnd(transitionElement);
87
110
  }
88
111
  }, emulatedDuration);
89
112
  };
90
113
 
91
- const execute = callback => {
92
- if (typeof callback === 'function') {
93
- callback();
94
- }
95
- };
96
-
97
114
  /**
98
115
  * --------------------------------------------------------------------------
99
- * Bootstrap (v5.0.1): base-component.js
116
+ * Bootstrap (v5.1.2): base-component.js
100
117
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
101
118
  * --------------------------------------------------------------------------
102
119
  */
@@ -106,7 +123,7 @@
106
123
  * ------------------------------------------------------------------------
107
124
  */
108
125
 
109
- const VERSION = '5.0.1';
126
+ const VERSION = '5.1.2';
110
127
 
111
128
  class BaseComponent {
112
129
  constructor(element) {
@@ -117,32 +134,29 @@
117
134
  }
118
135
 
119
136
  this._element = element;
120
- Data__default['default'].set(this._element, this.constructor.DATA_KEY, this);
137
+ Data__default.default.set(this._element, this.constructor.DATA_KEY, this);
121
138
  }
122
139
 
123
140
  dispose() {
124
- Data__default['default'].remove(this._element, this.constructor.DATA_KEY);
125
- EventHandler__default['default'].off(this._element, this.constructor.EVENT_KEY);
141
+ Data__default.default.remove(this._element, this.constructor.DATA_KEY);
142
+ EventHandler__default.default.off(this._element, this.constructor.EVENT_KEY);
126
143
  Object.getOwnPropertyNames(this).forEach(propertyName => {
127
144
  this[propertyName] = null;
128
145
  });
129
146
  }
130
147
 
131
148
  _queueCallback(callback, element, isAnimated = true) {
132
- if (!isAnimated) {
133
- execute(callback);
134
- return;
135
- }
136
-
137
- const transitionDuration = getTransitionDurationFromElement(element);
138
- EventHandler__default['default'].one(element, 'transitionend', () => execute(callback));
139
- emulateTransitionEnd(element, transitionDuration);
149
+ executeAfterTransition(callback, element, isAnimated);
140
150
  }
141
151
  /** Static */
142
152
 
143
153
 
144
154
  static getInstance(element) {
145
- return Data__default['default'].get(element, this.DATA_KEY);
155
+ return Data__default.default.get(getElement(element), this.DATA_KEY);
156
+ }
157
+
158
+ static getOrCreateInstance(element, config = {}) {
159
+ return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
146
160
  }
147
161
 
148
162
  static get VERSION() {
@@ -165,4 +179,4 @@
165
179
 
166
180
  return BaseComponent;
167
181
 
168
- })));
182
+ }));
@@ -1,19 +1,25 @@
1
1
  /*!
2
- * Bootstrap button.js v5.0.1 (https://getbootstrap.com/)
2
+ * Bootstrap button.js v5.1.2 (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('./dom/selector-engine.js'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/data', './dom/event-handler', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.SelectorEngine, global.Data, global.EventHandler, global.Base));
10
- }(this, (function (SelectorEngine, Data, EventHandler, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/event-handler', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.EventHandler, global.Base));
10
+ })(this, (function (EventHandler, BaseComponent) { 'use strict';
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
- var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
14
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
16
+
17
+ /**
18
+ * --------------------------------------------------------------------------
19
+ * Bootstrap (v5.1.2): util/index.js
20
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
21
+ * --------------------------------------------------------------------------
22
+ */
17
23
 
18
24
  const getjQuery = () => {
19
25
  const {
@@ -27,9 +33,18 @@
27
33
  return null;
28
34
  };
29
35
 
36
+ const DOMContentLoadedCallbacks = [];
37
+
30
38
  const onDOMContentLoaded = callback => {
31
39
  if (document.readyState === 'loading') {
32
- document.addEventListener('DOMContentLoaded', callback);
40
+ // add listener on the first call when the document is in loading state
41
+ if (!DOMContentLoadedCallbacks.length) {
42
+ document.addEventListener('DOMContentLoaded', () => {
43
+ DOMContentLoadedCallbacks.forEach(callback => callback());
44
+ });
45
+ }
46
+
47
+ DOMContentLoadedCallbacks.push(callback);
33
48
  } else {
34
49
  callback();
35
50
  }
@@ -56,7 +71,7 @@
56
71
 
57
72
  /**
58
73
  * --------------------------------------------------------------------------
59
- * Bootstrap (v5.0.1): button.js
74
+ * Bootstrap (v5.1.2): button.js
60
75
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
61
76
  * --------------------------------------------------------------------------
62
77
  */
@@ -79,7 +94,7 @@
79
94
  * ------------------------------------------------------------------------
80
95
  */
81
96
 
82
- class Button extends BaseComponent__default['default'] {
97
+ class Button extends BaseComponent__default.default {
83
98
  // Getters
84
99
  static get NAME() {
85
100
  return NAME;
@@ -94,11 +109,7 @@
94
109
 
95
110
  static jQueryInterface(config) {
96
111
  return this.each(function () {
97
- let data = Data__default['default'].get(this, DATA_KEY);
98
-
99
- if (!data) {
100
- data = new Button(this);
101
- }
112
+ const data = Button.getOrCreateInstance(this);
102
113
 
103
114
  if (config === 'toggle') {
104
115
  data[config]();
@@ -114,15 +125,10 @@
114
125
  */
115
126
 
116
127
 
117
- EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
128
+ EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
118
129
  event.preventDefault();
119
130
  const button = event.target.closest(SELECTOR_DATA_TOGGLE);
120
- let data = Data__default['default'].get(button, DATA_KEY);
121
-
122
- if (!data) {
123
- data = new Button(button);
124
- }
125
-
131
+ const data = Button.getOrCreateInstance(button);
126
132
  data.toggle();
127
133
  });
128
134
  /**
@@ -136,4 +142,4 @@
136
142
 
137
143
  return Button;
138
144
 
139
- })));
145
+ }));