bootstrap 5.0.2 → 5.1.3

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/javascripts/bootstrap/alert.js +78 -48
  4. data/assets/javascripts/bootstrap/base-component.js +22 -17
  5. data/assets/javascripts/bootstrap/button.js +19 -12
  6. data/assets/javascripts/bootstrap/carousel.js +66 -44
  7. data/assets/javascripts/bootstrap/collapse.js +114 -131
  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 +96 -106
  13. data/assets/javascripts/bootstrap/modal.js +241 -87
  14. data/assets/javascripts/bootstrap/offcanvas.js +203 -57
  15. data/assets/javascripts/bootstrap/popover.js +25 -58
  16. data/assets/javascripts/bootstrap/scrollspy.js +47 -66
  17. data/assets/javascripts/bootstrap/tab.js +41 -22
  18. data/assets/javascripts/bootstrap/toast.js +124 -29
  19. data/assets/javascripts/bootstrap/tooltip.js +122 -104
  20. data/assets/javascripts/bootstrap-sprockets.js +7 -7
  21. data/assets/javascripts/bootstrap.js +660 -630
  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/_card.scss +2 -1
  27. data/assets/stylesheets/bootstrap/_functions.scss +51 -12
  28. data/assets/stylesheets/bootstrap/_grid.scss +11 -0
  29. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  30. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  31. data/assets/stylesheets/bootstrap/_modal.scss +1 -11
  32. data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
  33. data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -0
  34. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  35. data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
  36. data/assets/stylesheets/bootstrap/_root.scss +40 -2
  37. data/assets/stylesheets/bootstrap/_tables.scss +8 -4
  38. data/assets/stylesheets/bootstrap/_toasts.scss +2 -2
  39. data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
  40. data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
  41. data/assets/stylesheets/bootstrap/_variables.scss +184 -11
  42. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
  43. data/assets/stylesheets/bootstrap/forms/_form-control.scss +1 -1
  44. data/assets/stylesheets/bootstrap/forms/_form-select.scss +2 -0
  45. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  46. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  47. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  48. data/assets/stylesheets/bootstrap/mixins/_grid.scss +29 -10
  49. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
  50. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +1 -1
  51. data/bootstrap.gemspec +3 -3
  52. data/lib/bootstrap/version.rb +2 -2
  53. data/tasks/updater/js.rb +6 -2
  54. metadata +12 -8
@@ -1,30 +1,28 @@
1
1
  /*!
2
- * Bootstrap scrollspy.js v5.0.2 (https://getbootstrap.com/)
2
+ * Bootstrap scrollspy.js v5.1.3 (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/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/event-handler', './dom/manipulator', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.SelectorEngine, global.EventHandler, global.Manipulator, global.Base));
10
- }(this, (function (SelectorEngine, EventHandler, Manipulator, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(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/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
+ })(this, (function (EventHandler, Manipulator, SelectorEngine, 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 SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
- var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
14
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
+ const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
17
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
18
 
19
19
  /**
20
20
  * --------------------------------------------------------------------------
21
- * Bootstrap (v5.0.2): util/index.js
21
+ * Bootstrap (v5.1.3): util/index.js
22
22
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23
23
  * --------------------------------------------------------------------------
24
24
  */
25
25
 
26
- const MAX_UID = 1000000;
27
-
28
26
  const toType = obj => {
29
27
  if (obj === null || obj === undefined) {
30
28
  return `${obj}`;
@@ -32,20 +30,6 @@
32
30
 
33
31
  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
34
32
  };
35
- /**
36
- * --------------------------------------------------------------------------
37
- * Public Util Api
38
- * --------------------------------------------------------------------------
39
- */
40
-
41
-
42
- const getUID = prefix => {
43
- do {
44
- prefix += Math.floor(Math.random() * MAX_UID);
45
- } while (document.getElementById(prefix));
46
-
47
- return prefix;
48
- };
49
33
 
50
34
  const getSelector = element => {
51
35
  let selector = element.getAttribute('data-bs-target');
@@ -93,6 +77,19 @@
93
77
  return typeof obj.nodeType !== 'undefined';
94
78
  };
95
79
 
80
+ const getElement = obj => {
81
+ if (isElement(obj)) {
82
+ // it's a jQuery object or a node element
83
+ return obj.jquery ? obj[0] : obj;
84
+ }
85
+
86
+ if (typeof obj === 'string' && obj.length > 0) {
87
+ return document.querySelector(obj);
88
+ }
89
+
90
+ return null;
91
+ };
92
+
96
93
  const typeCheckConfig = (componentName, config, configTypes) => {
97
94
  Object.keys(configTypes).forEach(property => {
98
95
  const expectedTypes = configTypes[property];
@@ -155,7 +152,7 @@
155
152
 
156
153
  /**
157
154
  * --------------------------------------------------------------------------
158
- * Bootstrap (v5.0.2): scrollspy.js
155
+ * Bootstrap (v5.1.3): scrollspy.js
159
156
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
160
157
  * --------------------------------------------------------------------------
161
158
  */
@@ -189,6 +186,7 @@
189
186
  const SELECTOR_NAV_LINKS = '.nav-link';
190
187
  const SELECTOR_NAV_ITEMS = '.nav-item';
191
188
  const SELECTOR_LIST_ITEMS = '.list-group-item';
189
+ const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
192
190
  const SELECTOR_DROPDOWN = '.dropdown';
193
191
  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
194
192
  const METHOD_OFFSET = 'offset';
@@ -199,17 +197,16 @@
199
197
  * ------------------------------------------------------------------------
200
198
  */
201
199
 
202
- class ScrollSpy extends BaseComponent__default['default'] {
200
+ class ScrollSpy extends BaseComponent__default.default {
203
201
  constructor(element, config) {
204
202
  super(element);
205
203
  this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
206
204
  this._config = this._getConfig(config);
207
- this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;
208
205
  this._offsets = [];
209
206
  this._targets = [];
210
207
  this._activeTarget = null;
211
208
  this._scrollHeight = 0;
212
- EventHandler__default['default'].on(this._scrollElement, EVENT_SCROLL, () => this._process());
209
+ EventHandler__default.default.on(this._scrollElement, EVENT_SCROLL, () => this._process());
213
210
  this.refresh();
214
211
 
215
212
  this._process();
@@ -232,16 +229,16 @@
232
229
  this._offsets = [];
233
230
  this._targets = [];
234
231
  this._scrollHeight = this._getScrollHeight();
235
- const targets = SelectorEngine__default['default'].find(this._selector);
232
+ const targets = SelectorEngine__default.default.find(SELECTOR_LINK_ITEMS, this._config.target);
236
233
  targets.map(element => {
237
234
  const targetSelector = getSelectorFromElement(element);
238
- const target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
235
+ const target = targetSelector ? SelectorEngine__default.default.findOne(targetSelector) : null;
239
236
 
240
237
  if (target) {
241
238
  const targetBCR = target.getBoundingClientRect();
242
239
 
243
240
  if (targetBCR.width || targetBCR.height) {
244
- return [Manipulator__default['default'][offsetMethod](target).top + offsetBase, targetSelector];
241
+ return [Manipulator__default.default[offsetMethod](target).top + offsetBase, targetSelector];
245
242
  }
246
243
  }
247
244
 
@@ -254,30 +251,17 @@
254
251
  }
255
252
 
256
253
  dispose() {
257
- EventHandler__default['default'].off(this._scrollElement, EVENT_KEY);
254
+ EventHandler__default.default.off(this._scrollElement, EVENT_KEY);
258
255
  super.dispose();
259
256
  } // Private
260
257
 
261
258
 
262
259
  _getConfig(config) {
263
260
  config = { ...Default,
264
- ...Manipulator__default['default'].getDataAttributes(this._element),
261
+ ...Manipulator__default.default.getDataAttributes(this._element),
265
262
  ...(typeof config === 'object' && config ? config : {})
266
263
  };
267
-
268
- if (typeof config.target !== 'string' && isElement(config.target)) {
269
- let {
270
- id
271
- } = config.target;
272
-
273
- if (!id) {
274
- id = getUID(NAME);
275
- config.target.id = id;
276
- }
277
-
278
- config.target = `#${id}`;
279
- }
280
-
264
+ config.target = getElement(config.target) || document.documentElement;
281
265
  typeCheckConfig(NAME, config, DefaultType);
282
266
  return config;
283
267
  }
@@ -337,34 +321,31 @@
337
321
 
338
322
  this._clear();
339
323
 
340
- const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
341
-
342
- const link = SelectorEngine__default['default'].findOne(queries.join(','));
324
+ const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
325
+ const link = SelectorEngine__default.default.findOne(queries.join(','), this._config.target);
326
+ link.classList.add(CLASS_NAME_ACTIVE);
343
327
 
344
328
  if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
345
- SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
346
- link.classList.add(CLASS_NAME_ACTIVE);
329
+ SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
347
330
  } else {
348
- // Set triggered link as active
349
- link.classList.add(CLASS_NAME_ACTIVE);
350
- SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
331
+ SelectorEngine__default.default.parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
351
332
  // Set triggered links parents as active
352
333
  // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
353
- SelectorEngine__default['default'].prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE)); // Handle special case when .nav-link is inside .nav-item
334
+ SelectorEngine__default.default.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE)); // Handle special case when .nav-link is inside .nav-item
354
335
 
355
- SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
356
- SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
336
+ SelectorEngine__default.default.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
337
+ SelectorEngine__default.default.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
357
338
  });
358
339
  });
359
340
  }
360
341
 
361
- EventHandler__default['default'].trigger(this._scrollElement, EVENT_ACTIVATE, {
342
+ EventHandler__default.default.trigger(this._scrollElement, EVENT_ACTIVATE, {
362
343
  relatedTarget: target
363
344
  });
364
345
  }
365
346
 
366
347
  _clear() {
367
- SelectorEngine__default['default'].find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
348
+ SelectorEngine__default.default.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
368
349
  } // Static
369
350
 
370
351
 
@@ -392,8 +373,8 @@
392
373
  */
393
374
 
394
375
 
395
- EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
396
- SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
376
+ EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
377
+ SelectorEngine__default.default.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
397
378
  });
398
379
  /**
399
380
  * ------------------------------------------------------------------------
@@ -406,4 +387,4 @@
406
387
 
407
388
  return ScrollSpy;
408
389
 
409
- })));
390
+ }));
@@ -1,19 +1,26 @@
1
1
  /*!
2
- * Bootstrap tab.js v5.0.2 (https://getbootstrap.com/)
2
+ * Bootstrap tab.js v5.1.3 (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/event-handler.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/event-handler', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.SelectorEngine, global.EventHandler, global.Base));
10
- }(this, (function (SelectorEngine, EventHandler, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.EventHandler, global.SelectorEngine, global.Base));
10
+ })(this, (function (EventHandler, SelectorEngine, 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 SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
14
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
16
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
17
+
18
+ /**
19
+ * --------------------------------------------------------------------------
20
+ * Bootstrap (v5.1.3): util/index.js
21
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
22
+ * --------------------------------------------------------------------------
23
+ */
17
24
 
18
25
  const getSelector = element => {
19
26
  let selector = element.getAttribute('data-bs-target');
@@ -59,8 +66,20 @@
59
66
 
60
67
  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
61
68
  };
69
+ /**
70
+ * Trick to restart an element's animation
71
+ *
72
+ * @param {HTMLElement} element
73
+ * @return void
74
+ *
75
+ * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
76
+ */
62
77
 
63
- const reflow = element => element.offsetHeight;
78
+
79
+ const reflow = element => {
80
+ // eslint-disable-next-line no-unused-expressions
81
+ element.offsetHeight;
82
+ };
64
83
 
65
84
  const getjQuery = () => {
66
85
  const {
@@ -112,7 +131,7 @@
112
131
 
113
132
  /**
114
133
  * --------------------------------------------------------------------------
115
- * Bootstrap (v5.0.2): tab.js
134
+ * Bootstrap (v5.1.3): tab.js
116
135
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
117
136
  * --------------------------------------------------------------------------
118
137
  */
@@ -148,7 +167,7 @@
148
167
  * ------------------------------------------------------------------------
149
168
  */
150
169
 
151
- class Tab extends BaseComponent__default['default'] {
170
+ class Tab extends BaseComponent__default.default {
152
171
  // Getters
153
172
  static get NAME() {
154
173
  return NAME;
@@ -167,14 +186,14 @@
167
186
 
168
187
  if (listElement) {
169
188
  const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
170
- previous = SelectorEngine__default['default'].find(itemSelector, listElement);
189
+ previous = SelectorEngine__default.default.find(itemSelector, listElement);
171
190
  previous = previous[previous.length - 1];
172
191
  }
173
192
 
174
- const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
193
+ const hideEvent = previous ? EventHandler__default.default.trigger(previous, EVENT_HIDE, {
175
194
  relatedTarget: this._element
176
195
  }) : null;
177
- const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
196
+ const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
178
197
  relatedTarget: previous
179
198
  });
180
199
 
@@ -185,10 +204,10 @@
185
204
  this._activate(this._element, listElement);
186
205
 
187
206
  const complete = () => {
188
- EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
207
+ EventHandler__default.default.trigger(previous, EVENT_HIDDEN, {
189
208
  relatedTarget: this._element
190
209
  });
191
- EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
210
+ EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
192
211
  relatedTarget: previous
193
212
  });
194
213
  };
@@ -202,7 +221,7 @@
202
221
 
203
222
 
204
223
  _activate(element, container, callback) {
205
- const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
224
+ const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default.default.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default.default.children(container, SELECTOR_ACTIVE);
206
225
  const active = activeElements[0];
207
226
  const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
208
227
 
@@ -220,7 +239,7 @@
220
239
  _transitionComplete(element, active, callback) {
221
240
  if (active) {
222
241
  active.classList.remove(CLASS_NAME_ACTIVE);
223
- const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
242
+ const dropdownChild = SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
224
243
 
225
244
  if (dropdownChild) {
226
245
  dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
@@ -253,7 +272,7 @@
253
272
  const dropdownElement = element.closest(SELECTOR_DROPDOWN);
254
273
 
255
274
  if (dropdownElement) {
256
- SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
275
+ SelectorEngine__default.default.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
257
276
  }
258
277
 
259
278
  element.setAttribute('aria-expanded', true);
@@ -287,7 +306,7 @@
287
306
  */
288
307
 
289
308
 
290
- EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
309
+ EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
291
310
  if (['A', 'AREA'].includes(this.tagName)) {
292
311
  event.preventDefault();
293
312
  }
@@ -310,4 +329,4 @@
310
329
 
311
330
  return Tab;
312
331
 
313
- })));
332
+ }));
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap toast.js v5.0.2 (https://getbootstrap.com/)
2
+ * Bootstrap toast.js v5.1.3 (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
  */
@@ -7,13 +7,20 @@
7
7
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
8
8
  typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/manipulator', './base-component'], factory) :
9
9
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.EventHandler, global.Manipulator, global.Base));
10
- }(this, (function (EventHandler, Manipulator, BaseComponent) { 'use strict';
10
+ })(this, (function (EventHandler, Manipulator, 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 EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
- var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
14
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
17
+
18
+ /**
19
+ * --------------------------------------------------------------------------
20
+ * Bootstrap (v5.1.3): util/index.js
21
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
22
+ * --------------------------------------------------------------------------
23
+ */
17
24
 
18
25
  const toType = obj => {
19
26
  if (obj === null || obj === undefined) {
@@ -23,6 +30,35 @@
23
30
  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
24
31
  };
25
32
 
33
+ const getSelector = element => {
34
+ let selector = element.getAttribute('data-bs-target');
35
+
36
+ if (!selector || selector === '#') {
37
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
38
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
39
+ // `document.querySelector` will rightfully complain it is invalid.
40
+ // See https://github.com/twbs/bootstrap/issues/32273
41
+
42
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
43
+ return null;
44
+ } // Just in case some CMS puts out a full URL with the anchor appended
45
+
46
+
47
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
48
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
49
+ }
50
+
51
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
52
+ }
53
+
54
+ return selector;
55
+ };
56
+
57
+ const getElementFromSelector = element => {
58
+ const selector = getSelector(element);
59
+ return selector ? document.querySelector(selector) : null;
60
+ };
61
+
26
62
  const isElement = obj => {
27
63
  if (!obj || typeof obj !== 'object') {
28
64
  return false;
@@ -47,7 +83,35 @@
47
83
  });
48
84
  };
49
85
 
50
- const reflow = element => element.offsetHeight;
86
+ const isDisabled = element => {
87
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
88
+ return true;
89
+ }
90
+
91
+ if (element.classList.contains('disabled')) {
92
+ return true;
93
+ }
94
+
95
+ if (typeof element.disabled !== 'undefined') {
96
+ return element.disabled;
97
+ }
98
+
99
+ return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
100
+ };
101
+ /**
102
+ * Trick to restart an element's animation
103
+ *
104
+ * @param {HTMLElement} element
105
+ * @return void
106
+ *
107
+ * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
108
+ */
109
+
110
+
111
+ const reflow = element => {
112
+ // eslint-disable-next-line no-unused-expressions
113
+ element.offsetHeight;
114
+ };
51
115
 
52
116
  const getjQuery = () => {
53
117
  const {
@@ -99,7 +163,33 @@
99
163
 
100
164
  /**
101
165
  * --------------------------------------------------------------------------
102
- * Bootstrap (v5.0.2): toast.js
166
+ * Bootstrap (v5.1.3): util/component-functions.js
167
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
168
+ * --------------------------------------------------------------------------
169
+ */
170
+
171
+ const enableDismissTrigger = (component, method = 'hide') => {
172
+ const clickEvent = `click.dismiss${component.EVENT_KEY}`;
173
+ const name = component.NAME;
174
+ EventHandler__default.default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
175
+ if (['A', 'AREA'].includes(this.tagName)) {
176
+ event.preventDefault();
177
+ }
178
+
179
+ if (isDisabled(this)) {
180
+ return;
181
+ }
182
+
183
+ const target = getElementFromSelector(this) || this.closest(`.${name}`);
184
+ const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
185
+
186
+ instance[method]();
187
+ });
188
+ };
189
+
190
+ /**
191
+ * --------------------------------------------------------------------------
192
+ * Bootstrap (v5.1.3): toast.js
103
193
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
104
194
  * --------------------------------------------------------------------------
105
195
  */
@@ -112,7 +202,6 @@
112
202
  const NAME = 'toast';
113
203
  const DATA_KEY = 'bs.toast';
114
204
  const EVENT_KEY = `.${DATA_KEY}`;
115
- const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
116
205
  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
117
206
  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
118
207
  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
@@ -122,7 +211,8 @@
122
211
  const EVENT_SHOW = `show${EVENT_KEY}`;
123
212
  const EVENT_SHOWN = `shown${EVENT_KEY}`;
124
213
  const CLASS_NAME_FADE = 'fade';
125
- const CLASS_NAME_HIDE = 'hide';
214
+ const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
215
+
126
216
  const CLASS_NAME_SHOW = 'show';
127
217
  const CLASS_NAME_SHOWING = 'showing';
128
218
  const DefaultType = {
@@ -135,14 +225,13 @@
135
225
  autohide: true,
136
226
  delay: 5000
137
227
  };
138
- const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="toast"]';
139
228
  /**
140
229
  * ------------------------------------------------------------------------
141
230
  * Class Definition
142
231
  * ------------------------------------------------------------------------
143
232
  */
144
233
 
145
- class Toast extends BaseComponent__default['default'] {
234
+ class Toast extends BaseComponent__default.default {
146
235
  constructor(element, config) {
147
236
  super(element);
148
237
  this._config = this._getConfig(config);
@@ -168,7 +257,7 @@
168
257
 
169
258
 
170
259
  show() {
171
- const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW);
260
+ const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
172
261
 
173
262
  if (showEvent.defaultPrevented) {
174
263
  return;
@@ -183,17 +272,18 @@
183
272
  const complete = () => {
184
273
  this._element.classList.remove(CLASS_NAME_SHOWING);
185
274
 
186
- this._element.classList.add(CLASS_NAME_SHOW);
187
-
188
- EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
275
+ EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
189
276
 
190
277
  this._maybeScheduleHide();
191
278
  };
192
279
 
193
- this._element.classList.remove(CLASS_NAME_HIDE);
280
+ this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
281
+
194
282
 
195
283
  reflow(this._element);
196
284
 
285
+ this._element.classList.add(CLASS_NAME_SHOW);
286
+
197
287
  this._element.classList.add(CLASS_NAME_SHOWING);
198
288
 
199
289
  this._queueCallback(complete, this._element, this._config.animation);
@@ -204,19 +294,24 @@
204
294
  return;
205
295
  }
206
296
 
207
- const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
297
+ const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
208
298
 
209
299
  if (hideEvent.defaultPrevented) {
210
300
  return;
211
301
  }
212
302
 
213
303
  const complete = () => {
214
- this._element.classList.add(CLASS_NAME_HIDE);
304
+ this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
305
+
215
306
 
216
- EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
307
+ this._element.classList.remove(CLASS_NAME_SHOWING);
308
+
309
+ this._element.classList.remove(CLASS_NAME_SHOW);
310
+
311
+ EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
217
312
  };
218
313
 
219
- this._element.classList.remove(CLASS_NAME_SHOW);
314
+ this._element.classList.add(CLASS_NAME_SHOWING);
220
315
 
221
316
  this._queueCallback(complete, this._element, this._config.animation);
222
317
  }
@@ -234,7 +329,7 @@
234
329
 
235
330
  _getConfig(config) {
236
331
  config = { ...Default,
237
- ...Manipulator__default['default'].getDataAttributes(this._element),
332
+ ...Manipulator__default.default.getDataAttributes(this._element),
238
333
  ...(typeof config === 'object' && config ? config : {})
239
334
  };
240
335
  typeCheckConfig(NAME, config, this.constructor.DefaultType);
@@ -284,11 +379,10 @@
284
379
  }
285
380
 
286
381
  _setListeners() {
287
- EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());
288
- EventHandler__default['default'].on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
289
- EventHandler__default['default'].on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
290
- EventHandler__default['default'].on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
291
- EventHandler__default['default'].on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
382
+ EventHandler__default.default.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
383
+ EventHandler__default.default.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
384
+ EventHandler__default.default.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
385
+ EventHandler__default.default.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
292
386
  }
293
387
 
294
388
  _clearTimeout() {
@@ -312,6 +406,8 @@
312
406
  }
313
407
 
314
408
  }
409
+
410
+ enableDismissTrigger(Toast);
315
411
  /**
316
412
  * ------------------------------------------------------------------------
317
413
  * jQuery
@@ -319,9 +415,8 @@
319
415
  * add .Toast to jQuery only if jQuery is present
320
416
  */
321
417
 
322
-
323
418
  defineJQueryPlugin(Toast);
324
419
 
325
420
  return Toast;
326
421
 
327
- })));
422
+ }));