bootstrap 5.0.2 → 5.1.3

Sign up to get free protection for your applications and to get access to all the features.
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
+ }));