bootstrap 5.0.0.alpha1 → 5.0.0.alpha2

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/README.md +1 -1
  4. data/assets/javascripts/bootstrap-sprockets.js +6 -6
  5. data/assets/javascripts/bootstrap.js +142 -155
  6. data/assets/javascripts/bootstrap.min.js +2 -2
  7. data/assets/javascripts/bootstrap/alert.js +17 -19
  8. data/assets/javascripts/bootstrap/button.js +14 -12
  9. data/assets/javascripts/bootstrap/carousel.js +47 -49
  10. data/assets/javascripts/bootstrap/collapse.js +50 -55
  11. data/assets/javascripts/bootstrap/dom/data.js +11 -11
  12. data/assets/javascripts/bootstrap/dom/event-handler.js +9 -5
  13. data/assets/javascripts/bootstrap/dom/manipulator.js +5 -9
  14. data/assets/javascripts/bootstrap/dom/polyfill.js +3 -3
  15. data/assets/javascripts/bootstrap/dom/selector-engine.js +3 -3
  16. data/assets/javascripts/bootstrap/dropdown.js +46 -48
  17. data/assets/javascripts/bootstrap/modal.js +77 -65
  18. data/assets/javascripts/bootstrap/popover.js +21 -23
  19. data/assets/javascripts/bootstrap/scrollspy.js +33 -39
  20. data/assets/javascripts/bootstrap/tab.js +24 -22
  21. data/assets/javascripts/bootstrap/toast.js +32 -28
  22. data/assets/javascripts/bootstrap/tooltip.js +67 -66
  23. data/assets/stylesheets/_bootstrap-grid.scss +2 -2
  24. data/assets/stylesheets/_bootstrap-reboot.scss +1 -1
  25. data/assets/stylesheets/_bootstrap.scss +1 -1
  26. data/assets/stylesheets/bootstrap/_alert.scss +3 -4
  27. data/assets/stylesheets/bootstrap/_card.scss +6 -4
  28. data/assets/stylesheets/bootstrap/_carousel.scss +17 -0
  29. data/assets/stylesheets/bootstrap/_close.scss +25 -20
  30. data/assets/stylesheets/bootstrap/_dropdown.scss +42 -1
  31. data/assets/stylesheets/bootstrap/_functions.scss +4 -1
  32. data/assets/stylesheets/bootstrap/_helpers.scss +2 -2
  33. data/assets/stylesheets/bootstrap/_list-group.scss +1 -1
  34. data/assets/stylesheets/bootstrap/_mixins.scss +1 -1
  35. data/assets/stylesheets/bootstrap/_modal.scss +7 -7
  36. data/assets/stylesheets/bootstrap/_nav.scss +4 -0
  37. data/assets/stylesheets/bootstrap/_navbar.scss +1 -0
  38. data/assets/stylesheets/bootstrap/_pagination.scss +3 -0
  39. data/assets/stylesheets/bootstrap/_reboot.scss +7 -6
  40. data/assets/stylesheets/bootstrap/_spinners.scss +2 -2
  41. data/assets/stylesheets/bootstrap/_tables.scss +1 -1
  42. data/assets/stylesheets/bootstrap/_toasts.scss +6 -2
  43. data/assets/stylesheets/bootstrap/_utilities.scss +29 -1
  44. data/assets/stylesheets/bootstrap/_variables.scss +92 -44
  45. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
  46. data/assets/stylesheets/bootstrap/forms/_form-check.scss +1 -1
  47. data/assets/stylesheets/bootstrap/forms/_input-group.scss +2 -2
  48. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +1 -1
  49. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  50. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  51. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +9 -9
  52. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  53. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +4 -3
  54. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +11 -8
  55. data/assets/stylesheets/bootstrap/mixins/_container.scss +5 -3
  56. data/assets/stylesheets/bootstrap/mixins/_grid.scss +6 -7
  57. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  58. data/assets/stylesheets/bootstrap/mixins/{_screen-reader.scss → _visually-hidden.scss} +5 -5
  59. data/lib/bootstrap/version.rb +2 -2
  60. metadata +5 -5
  61. data/assets/stylesheets/bootstrap/helpers/_embed.scss +0 -31
  62. data/assets/stylesheets/bootstrap/helpers/_screenreaders.scss +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da3029d47624ce88dca2ddb395d250b689f2bea68844f66718189fd25dff9b24
4
- data.tar.gz: 99158148a82693decf171b07d999e45eeff3ab6fa157084b5b592ecda230426c
3
+ metadata.gz: 5d82d17b7c1e4618af15d37b06361560d575c967688b5e95b50d8d68c20ece5b
4
+ data.tar.gz: 89e8445ac7043ca51f704f76e54d791892a6606a00fb44f5e94a443b8bd031d4
5
5
  SHA512:
6
- metadata.gz: e1790921eb6fefab26c74b036f316daec352870f6a9b2dfb795f0a51ae0fd65cd3c3b23f082d2de6b17bf59045bcf3db000f9ffc41c0ebfe809cabc370b79600
7
- data.tar.gz: e2b21f142c4761d751d964b12fe4ed27b045f8df89ce87c6ad09a0d403e9e5d3ea9744f64d13a99bba76ce9058fe1e5f3f892804ff55a388dd630d2a1a60dfa0
6
+ metadata.gz: 5a16b3c4232f431af4d9e76f32d24a24eefd58b357724090486df3a8201a936513ff12eca44605e39fa69c1c7dd39fa42cc01823e5e38c63148648e2b3765a75
7
+ data.tar.gz: 6effd1cececdf9a4a5580be195032dbdba25486777114714b203030d07a275c55345fc7f09fa2bd1f7c310cd17ecd149a5af8941877e0b5952aec5c209a6c7e9
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
- sudo: false
2
+ dist: focal
3
3
  addons:
4
4
  apt:
5
5
  packages:
data/README.md CHANGED
@@ -17,7 +17,7 @@ Please see the appropriate guide for your environment of choice:
17
17
  Add `bootstrap` to your Gemfile:
18
18
 
19
19
  ```ruby
20
- gem 'bootstrap', '~> 5.0.0.alpha1'
20
+ gem 'bootstrap', '~> 5.0.0.alpha2'
21
21
  ```
22
22
 
23
23
  Ensure that `sprockets-rails` is at least v2.3.2.
@@ -1,16 +1,16 @@
1
1
  //= require ./bootstrap/dom/data
2
2
  //= require ./bootstrap/dom/event-handler
3
- //= require ./bootstrap/alert
4
- //= require ./bootstrap/button
5
3
  //= require ./bootstrap/dom/manipulator
6
4
  //= require ./bootstrap/dom/selector-engine
7
- //= require ./bootstrap/carousel
8
5
  //= require ./bootstrap/collapse
9
6
  //= require ./bootstrap/dom/polyfill
10
- //= require ./bootstrap/dropdown
11
7
  //= require ./bootstrap/modal
8
+ //= require ./bootstrap/alert
9
+ //= require ./bootstrap/dropdown
12
10
  //= require ./bootstrap/tooltip
13
- //= require ./bootstrap/popover
11
+ //= require ./bootstrap/toast
14
12
  //= require ./bootstrap/scrollspy
13
+ //= require ./bootstrap/button
14
+ //= require ./bootstrap/popover
15
15
  //= require ./bootstrap/tab
16
- //= require ./bootstrap/toast
16
+ //= require ./bootstrap/carousel
@@ -1,15 +1,17 @@
1
1
  /*!
2
- * Bootstrap v5.0.0-alpha1 (https://getbootstrap.com/)
2
+ * Bootstrap v5.0.0-alpha2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2020 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
7
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('popper.js')) :
8
8
  typeof define === 'function' && define.amd ? define(['popper.js'], factory) :
9
- (global = global || self, global.bootstrap = factory(global.Popper));
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper));
10
10
  }(this, (function (Popper) { 'use strict';
11
11
 
12
- Popper = Popper && Object.prototype.hasOwnProperty.call(Popper, 'default') ? Popper['default'] : Popper;
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
13
15
 
14
16
  function _defineProperties(target, props) {
15
17
  for (var i = 0; i < props.length; i++) {
@@ -27,53 +29,22 @@
27
29
  return Constructor;
28
30
  }
29
31
 
30
- function _defineProperty(obj, key, value) {
31
- if (key in obj) {
32
- Object.defineProperty(obj, key, {
33
- value: value,
34
- enumerable: true,
35
- configurable: true,
36
- writable: true
37
- });
38
- } else {
39
- obj[key] = value;
40
- }
41
-
42
- return obj;
43
- }
44
-
45
- function ownKeys(object, enumerableOnly) {
46
- var keys = Object.keys(object);
32
+ function _extends() {
33
+ _extends = Object.assign || function (target) {
34
+ for (var i = 1; i < arguments.length; i++) {
35
+ var source = arguments[i];
47
36
 
48
- if (Object.getOwnPropertySymbols) {
49
- var symbols = Object.getOwnPropertySymbols(object);
50
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
51
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
52
- });
53
- keys.push.apply(keys, symbols);
54
- }
55
-
56
- return keys;
57
- }
58
-
59
- function _objectSpread2(target) {
60
- for (var i = 1; i < arguments.length; i++) {
61
- var source = arguments[i] != null ? arguments[i] : {};
62
-
63
- if (i % 2) {
64
- ownKeys(Object(source), true).forEach(function (key) {
65
- _defineProperty(target, key, source[key]);
66
- });
67
- } else if (Object.getOwnPropertyDescriptors) {
68
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
69
- } else {
70
- ownKeys(Object(source)).forEach(function (key) {
71
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
72
- });
37
+ for (var key in source) {
38
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
39
+ target[key] = source[key];
40
+ }
41
+ }
73
42
  }
74
- }
75
43
 
76
- return target;
44
+ return target;
45
+ };
46
+
47
+ return _extends.apply(this, arguments);
77
48
  }
78
49
 
79
50
  function _inheritsLoose(subClass, superClass) {
@@ -84,7 +55,7 @@
84
55
 
85
56
  /**
86
57
  * --------------------------------------------------------------------------
87
- * Bootstrap (v5.0.0-alpha1): util/index.js
58
+ * Bootstrap (v5.0.0-alpha2): util/index.js
88
59
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
89
60
  * --------------------------------------------------------------------------
90
61
  */
@@ -259,7 +230,7 @@
259
230
 
260
231
  /**
261
232
  * --------------------------------------------------------------------------
262
- * Bootstrap (v5.0.0-alpha1): dom/data.js
233
+ * Bootstrap (v5.0.0-alpha2): dom/data.js
263
234
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
264
235
  * --------------------------------------------------------------------------
265
236
  */
@@ -274,22 +245,22 @@
274
245
  var id = 1;
275
246
  return {
276
247
  set: function set(element, key, data) {
277
- if (typeof element.key === 'undefined') {
278
- element.key = {
248
+ if (typeof element.bsKey === 'undefined') {
249
+ element.bsKey = {
279
250
  key: key,
280
251
  id: id
281
252
  };
282
253
  id++;
283
254
  }
284
255
 
285
- storeData[element.key.id] = data;
256
+ storeData[element.bsKey.id] = data;
286
257
  },
287
258
  get: function get(element, key) {
288
- if (!element || typeof element.key === 'undefined') {
259
+ if (!element || typeof element.bsKey === 'undefined') {
289
260
  return null;
290
261
  }
291
262
 
292
- var keyProperties = element.key;
263
+ var keyProperties = element.bsKey;
293
264
 
294
265
  if (keyProperties.key === key) {
295
266
  return storeData[keyProperties.id];
@@ -298,15 +269,15 @@
298
269
  return null;
299
270
  },
300
271
  delete: function _delete(element, key) {
301
- if (typeof element.key === 'undefined') {
272
+ if (typeof element.bsKey === 'undefined') {
302
273
  return;
303
274
  }
304
275
 
305
- var keyProperties = element.key;
276
+ var keyProperties = element.bsKey;
306
277
 
307
278
  if (keyProperties.key === key) {
308
279
  delete storeData[keyProperties.id];
309
- delete element.key;
280
+ delete element.bsKey;
310
281
  }
311
282
  }
312
283
  };
@@ -398,7 +369,7 @@
398
369
 
399
370
  /**
400
371
  * --------------------------------------------------------------------------
401
- * Bootstrap (v5.0.0-alpha1): dom/event-handler.js
372
+ * Bootstrap (v5.0.0-alpha2): dom/event-handler.js
402
373
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
403
374
  * --------------------------------------------------------------------------
404
375
  */
@@ -439,6 +410,8 @@
439
410
 
440
411
  function bootstrapHandler(element, fn) {
441
412
  return function handler(event) {
413
+ event.delegateTarget = element;
414
+
442
415
  if (handler.oneOff) {
443
416
  EventHandler.off(element, event.type, fn);
444
417
  }
@@ -454,6 +427,8 @@
454
427
  for (var target = event.target; target && target !== this; target = target.parentNode) {
455
428
  for (var i = domElements.length; i--;) {
456
429
  if (domElements[i] === target) {
430
+ event.delegateTarget = target;
431
+
457
432
  if (handler.oneOff) {
458
433
  EventHandler.off(element, event.type, fn);
459
434
  }
@@ -638,7 +613,7 @@
638
613
  bubbles: bubbles,
639
614
  cancelable: true
640
615
  });
641
- } // merge custom informations in our event
616
+ } // merge custom information in our event
642
617
 
643
618
 
644
619
  if (typeof args !== 'undefined') {
@@ -682,7 +657,7 @@
682
657
  */
683
658
 
684
659
  var NAME = 'alert';
685
- var VERSION = '5.0.0-alpha1';
660
+ var VERSION = '5.0.0-alpha2';
686
661
  var DATA_KEY = 'bs.alert';
687
662
  var EVENT_KEY = "." + DATA_KEY;
688
663
  var DATA_API_KEY = '.data-api';
@@ -713,11 +688,7 @@
713
688
 
714
689
  // Public
715
690
  _proto.close = function close(element) {
716
- var rootElement = this._element;
717
-
718
- if (element) {
719
- rootElement = this._getRootElement(element);
720
- }
691
+ var rootElement = element ? this._getRootElement(element) : this._element;
721
692
 
722
693
  var customEvent = this._triggerCloseEvent(rootElement);
723
694
 
@@ -842,7 +813,7 @@
842
813
  */
843
814
 
844
815
  var NAME$1 = 'button';
845
- var VERSION$1 = '5.0.0-alpha1';
816
+ var VERSION$1 = '5.0.0-alpha2';
846
817
  var DATA_KEY$1 = 'bs.button';
847
818
  var EVENT_KEY$1 = "." + DATA_KEY$1;
848
819
  var DATA_API_KEY$1 = '.data-api';
@@ -944,7 +915,7 @@
944
915
 
945
916
  /**
946
917
  * --------------------------------------------------------------------------
947
- * Bootstrap (v5.0.0-alpha1): dom/manipulator.js
918
+ * Bootstrap (v5.0.0-alpha2): dom/manipulator.js
948
919
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
949
920
  * --------------------------------------------------------------------------
950
921
  */
@@ -986,7 +957,7 @@
986
957
  return {};
987
958
  }
988
959
 
989
- var attributes = _objectSpread2({}, element.dataset);
960
+ var attributes = _extends({}, element.dataset);
990
961
 
991
962
  Object.keys(attributes).forEach(function (key) {
992
963
  attributes[key] = normalizeData(attributes[key]);
@@ -1024,7 +995,7 @@
1024
995
 
1025
996
  /**
1026
997
  * --------------------------------------------------------------------------
1027
- * Bootstrap (v5.0.0-alpha1): dom/selector-engine.js
998
+ * Bootstrap (v5.0.0-alpha2): dom/selector-engine.js
1028
999
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1029
1000
  * --------------------------------------------------------------------------
1030
1001
  */
@@ -1113,7 +1084,7 @@
1113
1084
  */
1114
1085
 
1115
1086
  var NAME$2 = 'carousel';
1116
- var VERSION$2 = '5.0.0-alpha1';
1087
+ var VERSION$2 = '5.0.0-alpha2';
1117
1088
  var DATA_KEY$2 = 'bs.carousel';
1118
1089
  var EVENT_KEY$2 = "." + DATA_KEY$2;
1119
1090
  var DATA_API_KEY$2 = '.data-api';
@@ -1299,7 +1270,7 @@
1299
1270
  ;
1300
1271
 
1301
1272
  _proto._getConfig = function _getConfig(config) {
1302
- config = _objectSpread2(_objectSpread2({}, Default), config);
1273
+ config = _extends({}, Default, config);
1303
1274
  typeCheckConfig(NAME$2, config, DefaultType);
1304
1275
  return config;
1305
1276
  };
@@ -1593,10 +1564,10 @@
1593
1564
  Carousel.carouselInterface = function carouselInterface(element, config) {
1594
1565
  var data = Data.getData(element, DATA_KEY$2);
1595
1566
 
1596
- var _config = _objectSpread2(_objectSpread2({}, Default), Manipulator.getDataAttributes(element));
1567
+ var _config = _extends({}, Default, Manipulator.getDataAttributes(element));
1597
1568
 
1598
1569
  if (typeof config === 'object') {
1599
- _config = _objectSpread2(_objectSpread2({}, _config), config);
1570
+ _config = _extends({}, _config, config);
1600
1571
  }
1601
1572
 
1602
1573
  var action = typeof config === 'string' ? config : _config.slide;
@@ -1632,7 +1603,7 @@
1632
1603
  return;
1633
1604
  }
1634
1605
 
1635
- var config = _objectSpread2(_objectSpread2({}, Manipulator.getDataAttributes(target)), Manipulator.getDataAttributes(this));
1606
+ var config = _extends({}, Manipulator.getDataAttributes(target), Manipulator.getDataAttributes(this));
1636
1607
 
1637
1608
  var slideIndex = this.getAttribute('data-slide-to');
1638
1609
 
@@ -1710,7 +1681,7 @@
1710
1681
  */
1711
1682
 
1712
1683
  var NAME$3 = 'collapse';
1713
- var VERSION$3 = '5.0.0-alpha1';
1684
+ var VERSION$3 = '5.0.0-alpha2';
1714
1685
  var DATA_KEY$3 = 'bs.collapse';
1715
1686
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1716
1687
  var DATA_API_KEY$3 = '.data-api';
@@ -1949,7 +1920,7 @@
1949
1920
  ;
1950
1921
 
1951
1922
  _proto._getConfig = function _getConfig(config) {
1952
- config = _objectSpread2(_objectSpread2({}, Default$1), config);
1923
+ config = _extends({}, Default$1, config);
1953
1924
  config.toggle = Boolean(config.toggle); // Coerce string values
1954
1925
 
1955
1926
  typeCheckConfig(NAME$3, config, DefaultType$1);
@@ -1957,9 +1928,7 @@
1957
1928
  };
1958
1929
 
1959
1930
  _proto._getDimension = function _getDimension() {
1960
- var hasWidth = this._element.classList.contains(WIDTH);
1961
-
1962
- return hasWidth ? WIDTH : HEIGHT;
1931
+ return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;
1963
1932
  };
1964
1933
 
1965
1934
  _proto._getParent = function _getParent() {
@@ -1986,28 +1955,27 @@
1986
1955
  };
1987
1956
 
1988
1957
  _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1989
- if (element) {
1990
- var isOpen = element.classList.contains(CLASS_NAME_SHOW);
1991
-
1992
- if (triggerArray.length) {
1993
- triggerArray.forEach(function (elem) {
1994
- if (isOpen) {
1995
- elem.classList.remove(CLASS_NAME_COLLAPSED);
1996
- } else {
1997
- elem.classList.add(CLASS_NAME_COLLAPSED);
1998
- }
1958
+ if (!element || !triggerArray.length) {
1959
+ return;
1960
+ }
1999
1961
 
2000
- elem.setAttribute('aria-expanded', isOpen);
2001
- });
1962
+ var isOpen = element.classList.contains(CLASS_NAME_SHOW);
1963
+ triggerArray.forEach(function (elem) {
1964
+ if (isOpen) {
1965
+ elem.classList.remove(CLASS_NAME_COLLAPSED);
1966
+ } else {
1967
+ elem.classList.add(CLASS_NAME_COLLAPSED);
2002
1968
  }
2003
- }
1969
+
1970
+ elem.setAttribute('aria-expanded', isOpen);
1971
+ });
2004
1972
  } // Static
2005
1973
  ;
2006
1974
 
2007
1975
  Collapse.collapseInterface = function collapseInterface(element, config) {
2008
1976
  var data = Data.getData(element, DATA_KEY$3);
2009
1977
 
2010
- var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$1), Manipulator.getDataAttributes(element)), typeof config === 'object' && config ? config : {});
1978
+ var _config = _extends({}, Default$1, Manipulator.getDataAttributes(element), typeof config === 'object' && config ? config : {});
2011
1979
 
2012
1980
  if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
2013
1981
  _config.toggle = false;
@@ -2113,7 +2081,7 @@
2113
2081
  */
2114
2082
 
2115
2083
  var NAME$4 = 'dropdown';
2116
- var VERSION$4 = '5.0.0-alpha1';
2084
+ var VERSION$4 = '5.0.0-alpha2';
2117
2085
  var DATA_KEY$4 = 'bs.dropdown';
2118
2086
  var EVENT_KEY$4 = "." + DATA_KEY$4;
2119
2087
  var DATA_API_KEY$4 = '.data-api';
@@ -2224,7 +2192,7 @@
2224
2192
 
2225
2193
 
2226
2194
  if (!this._inNavbar) {
2227
- if (typeof Popper === 'undefined') {
2195
+ if (typeof Popper__default['default'] === 'undefined') {
2228
2196
  throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org)');
2229
2197
  }
2230
2198
 
@@ -2247,7 +2215,7 @@
2247
2215
  parent.classList.add(CLASS_NAME_POSITION_STATIC);
2248
2216
  }
2249
2217
 
2250
- this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
2218
+ this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());
2251
2219
  } // If this is a touch-enabled device we add extra
2252
2220
  // empty mouseover listeners to the body's immediate children;
2253
2221
  // only needed because of broken event delegation on iOS
@@ -2329,7 +2297,7 @@
2329
2297
  };
2330
2298
 
2331
2299
  _proto._getConfig = function _getConfig(config) {
2332
- config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), Manipulator.getDataAttributes(this._element)), config);
2300
+ config = _extends({}, this.constructor.Default, Manipulator.getDataAttributes(this._element), config);
2333
2301
  typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
2334
2302
  return config;
2335
2303
  };
@@ -2370,7 +2338,7 @@
2370
2338
 
2371
2339
  if (typeof this._config.offset === 'function') {
2372
2340
  offset.fn = function (data) {
2373
- data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
2341
+ data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
2374
2342
  return data;
2375
2343
  };
2376
2344
  } else {
@@ -2400,7 +2368,7 @@
2400
2368
  };
2401
2369
  }
2402
2370
 
2403
- return _objectSpread2(_objectSpread2({}, popperConfig), this._config.popperConfig);
2371
+ return _extends({}, popperConfig, this._config.popperConfig);
2404
2372
  } // Static
2405
2373
  ;
2406
2374
 
@@ -2619,7 +2587,7 @@
2619
2587
  */
2620
2588
 
2621
2589
  var NAME$5 = 'modal';
2622
- var VERSION$5 = '5.0.0-alpha1';
2590
+ var VERSION$5 = '5.0.0-alpha2';
2623
2591
  var DATA_KEY$5 = 'bs.modal';
2624
2592
  var EVENT_KEY$5 = "." + DATA_KEY$5;
2625
2593
  var DATA_API_KEY$5 = '.data-api';
@@ -2811,7 +2779,7 @@
2811
2779
  ;
2812
2780
 
2813
2781
  _proto._getConfig = function _getConfig(config) {
2814
- config = _objectSpread2(_objectSpread2({}, Default$3), config);
2782
+ config = _extends({}, Default$3, config);
2815
2783
  typeCheckConfig(NAME$5, config, DefaultType$3);
2816
2784
  return config;
2817
2785
  };
@@ -3017,11 +2985,25 @@
3017
2985
  return;
3018
2986
  }
3019
2987
 
2988
+ var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
2989
+
2990
+ if (!isModalOverflowing) {
2991
+ this._element.style.overflowY = 'hidden';
2992
+ }
2993
+
3020
2994
  this._element.classList.add(CLASS_NAME_STATIC);
3021
2995
 
3022
- var modalTransitionDuration = getTransitionDurationFromElement(this._element);
2996
+ var modalTransitionDuration = getTransitionDurationFromElement(this._dialog);
2997
+ EventHandler.off(this._element, TRANSITION_END);
3023
2998
  EventHandler.one(this._element, TRANSITION_END, function () {
3024
2999
  _this9._element.classList.remove(CLASS_NAME_STATIC);
3000
+
3001
+ if (!isModalOverflowing) {
3002
+ EventHandler.one(_this9._element, TRANSITION_END, function () {
3003
+ _this9._element.style.overflowY = '';
3004
+ });
3005
+ emulateTransitionEnd(_this9._element, modalTransitionDuration);
3006
+ }
3025
3007
  });
3026
3008
  emulateTransitionEnd(this._element, modalTransitionDuration);
3027
3009
 
@@ -3132,7 +3114,7 @@
3132
3114
  return this.each(function () {
3133
3115
  var data = Data.getData(this, DATA_KEY$5);
3134
3116
 
3135
- var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$3), Manipulator.getDataAttributes(this)), typeof config === 'object' && config ? config : {});
3117
+ var _config = _extends({}, Default$3, Manipulator.getDataAttributes(this), typeof config === 'object' && config ? config : {});
3136
3118
 
3137
3119
  if (!data) {
3138
3120
  data = new Modal(this, _config);
@@ -3199,7 +3181,7 @@
3199
3181
  var data = Data.getData(target, DATA_KEY$5);
3200
3182
 
3201
3183
  if (!data) {
3202
- var config = _objectSpread2(_objectSpread2({}, Manipulator.getDataAttributes(target)), Manipulator.getDataAttributes(this));
3184
+ var config = _extends({}, Manipulator.getDataAttributes(target), Manipulator.getDataAttributes(this));
3203
3185
 
3204
3186
  data = new Modal(target, config);
3205
3187
  }
@@ -3229,7 +3211,7 @@
3229
3211
 
3230
3212
  /**
3231
3213
  * --------------------------------------------------------------------------
3232
- * Bootstrap (v5.0.0-alpha1): util/sanitizer.js
3214
+ * Bootstrap (v5.0.0-alpha2): util/sanitizer.js
3233
3215
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3234
3216
  * --------------------------------------------------------------------------
3235
3217
  */
@@ -3274,7 +3256,7 @@
3274
3256
  return false;
3275
3257
  };
3276
3258
 
3277
- var DefaultWhitelist = {
3259
+ var DefaultAllowlist = {
3278
3260
  // Global attributes allowed on any supplied element below.
3279
3261
  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
3280
3262
  a: ['target', 'href', 'title', 'rel'],
@@ -3307,7 +3289,7 @@
3307
3289
  u: [],
3308
3290
  ul: []
3309
3291
  };
3310
- function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
3292
+ function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
3311
3293
  var _ref;
3312
3294
 
3313
3295
  if (!unsafeHtml.length) {
@@ -3320,7 +3302,7 @@
3320
3302
 
3321
3303
  var domParser = new window.DOMParser();
3322
3304
  var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
3323
- var whitelistKeys = Object.keys(whiteList);
3305
+ var allowlistKeys = Object.keys(allowList);
3324
3306
 
3325
3307
  var elements = (_ref = []).concat.apply(_ref, createdDocument.body.querySelectorAll('*'));
3326
3308
 
@@ -3330,16 +3312,16 @@
3330
3312
  var el = elements[i];
3331
3313
  var elName = el.nodeName.toLowerCase();
3332
3314
 
3333
- if (whitelistKeys.indexOf(elName) === -1) {
3315
+ if (allowlistKeys.indexOf(elName) === -1) {
3334
3316
  el.parentNode.removeChild(el);
3335
3317
  return "continue";
3336
3318
  }
3337
3319
 
3338
3320
  var attributeList = (_ref2 = []).concat.apply(_ref2, el.attributes);
3339
3321
 
3340
- var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
3322
+ var allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);
3341
3323
  attributeList.forEach(function (attr) {
3342
- if (!allowedAttribute(attr, whitelistedAttributes)) {
3324
+ if (!allowedAttribute(attr, allowedAttributes)) {
3343
3325
  el.removeAttribute(attr.nodeName);
3344
3326
  }
3345
3327
  });
@@ -3361,12 +3343,12 @@
3361
3343
  */
3362
3344
 
3363
3345
  var NAME$6 = 'tooltip';
3364
- var VERSION$6 = '5.0.0-alpha1';
3346
+ var VERSION$6 = '5.0.0-alpha2';
3365
3347
  var DATA_KEY$6 = 'bs.tooltip';
3366
3348
  var EVENT_KEY$6 = "." + DATA_KEY$6;
3367
3349
  var CLASS_PREFIX = 'bs-tooltip';
3368
3350
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
3369
- var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
3351
+ var DISALLOWED_ATTRIBUTES = ['sanitize', 'allowList', 'sanitizeFn'];
3370
3352
  var DefaultType$4 = {
3371
3353
  animation: 'boolean',
3372
3354
  template: 'string',
@@ -3382,7 +3364,7 @@
3382
3364
  boundary: '(string|element)',
3383
3365
  sanitize: 'boolean',
3384
3366
  sanitizeFn: '(null|function)',
3385
- whiteList: 'object',
3367
+ allowList: 'object',
3386
3368
  popperConfig: '(null|object)'
3387
3369
  };
3388
3370
  var AttachmentMap = {
@@ -3407,7 +3389,7 @@
3407
3389
  boundary: 'scrollParent',
3408
3390
  sanitize: true,
3409
3391
  sanitizeFn: null,
3410
- whiteList: DefaultWhitelist,
3392
+ allowList: DefaultAllowlist,
3411
3393
  popperConfig: null
3412
3394
  };
3413
3395
  var Event$1 = {
@@ -3440,7 +3422,7 @@
3440
3422
 
3441
3423
  var Tooltip = /*#__PURE__*/function () {
3442
3424
  function Tooltip(element, config) {
3443
- if (typeof Popper === 'undefined') {
3425
+ if (typeof Popper__default['default'] === 'undefined') {
3444
3426
  throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org)');
3445
3427
  } // private
3446
3428
 
@@ -3483,11 +3465,11 @@
3483
3465
 
3484
3466
  if (event) {
3485
3467
  var dataKey = this.constructor.DATA_KEY;
3486
- var context = Data.getData(event.target, dataKey);
3468
+ var context = Data.getData(event.delegateTarget, dataKey);
3487
3469
 
3488
3470
  if (!context) {
3489
- context = new this.constructor(event.target, this._getDelegateConfig());
3490
- Data.setData(event.target, dataKey, context);
3471
+ context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
3472
+ Data.setData(event.delegateTarget, dataKey, context);
3491
3473
  }
3492
3474
 
3493
3475
  context._activeTrigger.click = !context._activeTrigger.click;
@@ -3574,7 +3556,7 @@
3574
3556
  }
3575
3557
 
3576
3558
  EventHandler.trigger(this.element, this.constructor.Event.INSERTED);
3577
- this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
3559
+ this._popper = new Popper__default['default'](this.element, tip, this._getPopperConfig(attachment));
3578
3560
  tip.classList.add(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we add extra
3579
3561
  // empty mouseover listeners to the body's immediate children;
3580
3562
  // only needed because of broken event delegation on iOS
@@ -3615,6 +3597,10 @@
3615
3597
  _proto.hide = function hide() {
3616
3598
  var _this2 = this;
3617
3599
 
3600
+ if (!this._popper) {
3601
+ return;
3602
+ }
3603
+
3618
3604
  var tip = this.getTipElement();
3619
3605
 
3620
3606
  var complete = function complete() {
@@ -3716,7 +3702,7 @@
3716
3702
 
3717
3703
  if (this.config.html) {
3718
3704
  if (this.config.sanitize) {
3719
- content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
3705
+ content = sanitizeHtml(content, this.config.allowList, this.config.sanitizeFn);
3720
3706
  }
3721
3707
 
3722
3708
  element.innerHTML = content;
@@ -3762,7 +3748,7 @@
3762
3748
  return _this3._handlePopperPlacementChange(data);
3763
3749
  }
3764
3750
  };
3765
- return _objectSpread2(_objectSpread2({}, defaultBsConfig), this.config.popperConfig);
3751
+ return _extends({}, defaultBsConfig, this.config.popperConfig);
3766
3752
  };
3767
3753
 
3768
3754
  _proto._addAttachmentClass = function _addAttachmentClass(attachment) {
@@ -3776,7 +3762,7 @@
3776
3762
 
3777
3763
  if (typeof this.config.offset === 'function') {
3778
3764
  offset.fn = function (data) {
3779
- data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this4.config.offset(data.offsets, _this4.element) || {});
3765
+ data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element) || {});
3780
3766
  return data;
3781
3767
  };
3782
3768
  } else {
@@ -3832,7 +3818,7 @@
3832
3818
  EventHandler.on(this.element.closest("." + CLASS_NAME_MODAL), 'hide.bs.modal', this._hideModalHandler);
3833
3819
 
3834
3820
  if (this.config.selector) {
3835
- this.config = _objectSpread2(_objectSpread2({}, this.config), {}, {
3821
+ this.config = _extends({}, this.config, {
3836
3822
  trigger: 'manual',
3837
3823
  selector: ''
3838
3824
  });
@@ -3852,11 +3838,11 @@
3852
3838
 
3853
3839
  _proto._enter = function _enter(event, context) {
3854
3840
  var dataKey = this.constructor.DATA_KEY;
3855
- context = context || Data.getData(event.target, dataKey);
3841
+ context = context || Data.getData(event.delegateTarget, dataKey);
3856
3842
 
3857
3843
  if (!context) {
3858
- context = new this.constructor(event.target, this._getDelegateConfig());
3859
- Data.setData(event.target, dataKey, context);
3844
+ context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
3845
+ Data.setData(event.delegateTarget, dataKey, context);
3860
3846
  }
3861
3847
 
3862
3848
  if (event) {
@@ -3885,11 +3871,11 @@
3885
3871
 
3886
3872
  _proto._leave = function _leave(event, context) {
3887
3873
  var dataKey = this.constructor.DATA_KEY;
3888
- context = context || Data.getData(event.target, dataKey);
3874
+ context = context || Data.getData(event.delegateTarget, dataKey);
3889
3875
 
3890
3876
  if (!context) {
3891
- context = new this.constructor(event.target, this._getDelegateConfig());
3892
- Data.setData(event.target, dataKey, context);
3877
+ context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
3878
+ Data.setData(event.delegateTarget, dataKey, context);
3893
3879
  }
3894
3880
 
3895
3881
  if (event) {
@@ -3937,7 +3923,7 @@
3937
3923
  config.container = config.container[0];
3938
3924
  }
3939
3925
 
3940
- config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), dataAttributes), typeof config === 'object' && config ? config : {});
3926
+ config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
3941
3927
 
3942
3928
  if (typeof config.delay === 'number') {
3943
3929
  config.delay = {
@@ -3957,7 +3943,7 @@
3957
3943
  typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
3958
3944
 
3959
3945
  if (config.sanitize) {
3960
- config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
3946
+ config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
3961
3947
  }
3962
3948
 
3963
3949
  return config;
@@ -3991,8 +3977,7 @@
3991
3977
  };
3992
3978
 
3993
3979
  _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
3994
- var popperInstance = popperData.instance;
3995
- this.tip = popperInstance.popper;
3980
+ this.tip = popperData.instance.popper;
3996
3981
 
3997
3982
  this._cleanTipClass();
3998
3983
 
@@ -4111,20 +4096,20 @@
4111
4096
  */
4112
4097
 
4113
4098
  var NAME$7 = 'popover';
4114
- var VERSION$7 = '5.0.0-alpha1';
4099
+ var VERSION$7 = '5.0.0-alpha2';
4115
4100
  var DATA_KEY$7 = 'bs.popover';
4116
4101
  var EVENT_KEY$7 = "." + DATA_KEY$7;
4117
4102
  var CLASS_PREFIX$1 = 'bs-popover';
4118
4103
  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
4119
4104
 
4120
- var Default$5 = _objectSpread2(_objectSpread2({}, Tooltip.Default), {}, {
4105
+ var Default$5 = _extends({}, Tooltip.Default, {
4121
4106
  placement: 'right',
4122
4107
  trigger: 'click',
4123
4108
  content: '',
4124
4109
  template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
4125
4110
  });
4126
4111
 
4127
- var DefaultType$5 = _objectSpread2(_objectSpread2({}, Tooltip.DefaultType), {}, {
4112
+ var DefaultType$5 = _extends({}, Tooltip.DefaultType, {
4128
4113
  content: '(string|element|function)'
4129
4114
  });
4130
4115
 
@@ -4177,12 +4162,12 @@
4177
4162
 
4178
4163
  this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);
4179
4164
  tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$4);
4180
- };
4165
+ } // Private
4166
+ ;
4181
4167
 
4182
4168
  _proto._addAttachmentClass = function _addAttachmentClass(attachment) {
4183
4169
  this.getTipElement().classList.add(CLASS_PREFIX$1 + "-" + attachment);
4184
- } // Private
4185
- ;
4170
+ };
4186
4171
 
4187
4172
  _proto._getContent = function _getContent() {
4188
4173
  return this.element.getAttribute('data-content') || this.config.content;
@@ -4299,7 +4284,7 @@
4299
4284
  */
4300
4285
 
4301
4286
  var NAME$8 = 'scrollspy';
4302
- var VERSION$8 = '5.0.0-alpha1';
4287
+ var VERSION$8 = '5.0.0-alpha2';
4303
4288
  var DATA_KEY$8 = 'bs.scrollspy';
4304
4289
  var EVENT_KEY$8 = "." + DATA_KEY$8;
4305
4290
  var DATA_API_KEY$6 = '.data-api';
@@ -4340,7 +4325,7 @@
4340
4325
  this._element = element;
4341
4326
  this._scrollElement = element.tagName === 'BODY' ? window : element;
4342
4327
  this._config = this._getConfig(config);
4343
- this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " ." + CLASS_NAME_DROPDOWN_ITEM);
4328
+ this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + ", " + this._config.target + " " + SELECTOR_LIST_ITEMS + ", " + this._config.target + " ." + CLASS_NAME_DROPDOWN_ITEM;
4344
4329
  this._offsets = [];
4345
4330
  this._targets = [];
4346
4331
  this._activeTarget = null;
@@ -4370,12 +4355,8 @@
4370
4355
  this._scrollHeight = this._getScrollHeight();
4371
4356
  var targets = SelectorEngine.find(this._selector);
4372
4357
  targets.map(function (element) {
4373
- var target;
4374
4358
  var targetSelector = getSelectorFromElement(element);
4375
-
4376
- if (targetSelector) {
4377
- target = SelectorEngine.findOne(targetSelector);
4378
- }
4359
+ var target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
4379
4360
 
4380
4361
  if (target) {
4381
4362
  var targetBCR = target.getBoundingClientRect();
@@ -4412,7 +4393,7 @@
4412
4393
  ;
4413
4394
 
4414
4395
  _proto._getConfig = function _getConfig(config) {
4415
- config = _objectSpread2(_objectSpread2({}, Default$6), typeof config === 'object' && config ? config : {});
4396
+ config = _extends({}, Default$6, typeof config === 'object' && config ? config : {});
4416
4397
 
4417
4398
  if (typeof config.target !== 'string' && isElement(config.target)) {
4418
4399
  var id = config.target.id;
@@ -4602,7 +4583,7 @@
4602
4583
  */
4603
4584
 
4604
4585
  var NAME$9 = 'tab';
4605
- var VERSION$9 = '5.0.0-alpha1';
4586
+ var VERSION$9 = '5.0.0-alpha2';
4606
4587
  var DATA_KEY$9 = 'bs.tab';
4607
4588
  var EVENT_KEY$9 = "." + DATA_KEY$9;
4608
4589
  var DATA_API_KEY$7 = '.data-api';
@@ -4829,7 +4810,7 @@
4829
4810
  */
4830
4811
 
4831
4812
  var NAME$a = 'toast';
4832
- var VERSION$a = '5.0.0-alpha1';
4813
+ var VERSION$a = '5.0.0-alpha2';
4833
4814
  var DATA_KEY$a = 'bs.toast';
4834
4815
  var EVENT_KEY$a = "." + DATA_KEY$a;
4835
4816
  var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$a;
@@ -4849,7 +4830,7 @@
4849
4830
  var Default$7 = {
4850
4831
  animation: true,
4851
4832
  autohide: true,
4852
- delay: 500
4833
+ delay: 5000
4853
4834
  };
4854
4835
  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="toast"]';
4855
4836
  /**
@@ -4882,6 +4863,8 @@
4882
4863
  return;
4883
4864
  }
4884
4865
 
4866
+ this._clearTimeout();
4867
+
4885
4868
  if (this._config.animation) {
4886
4869
  this._element.classList.add(CLASS_NAME_FADE$4);
4887
4870
  }
@@ -4946,8 +4929,7 @@
4946
4929
  };
4947
4930
 
4948
4931
  _proto.dispose = function dispose() {
4949
- clearTimeout(this._timeout);
4950
- this._timeout = null;
4932
+ this._clearTimeout();
4951
4933
 
4952
4934
  if (this._element.classList.contains(CLASS_NAME_SHOW$6)) {
4953
4935
  this._element.classList.remove(CLASS_NAME_SHOW$6);
@@ -4961,7 +4943,7 @@
4961
4943
  ;
4962
4944
 
4963
4945
  _proto._getConfig = function _getConfig(config) {
4964
- config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$7), Manipulator.getDataAttributes(this._element)), typeof config === 'object' && config ? config : {});
4946
+ config = _extends({}, Default$7, Manipulator.getDataAttributes(this._element), typeof config === 'object' && config ? config : {});
4965
4947
  typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
4966
4948
  return config;
4967
4949
  };
@@ -4972,6 +4954,11 @@
4972
4954
  EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {
4973
4955
  return _this3.hide();
4974
4956
  });
4957
+ };
4958
+
4959
+ _proto._clearTimeout = function _clearTimeout() {
4960
+ clearTimeout(this._timeout);
4961
+ this._timeout = null;
4975
4962
  } // Static
4976
4963
  ;
4977
4964
 
@@ -5042,7 +5029,7 @@
5042
5029
 
5043
5030
  /**
5044
5031
  * --------------------------------------------------------------------------
5045
- * Bootstrap (v5.0.0-alpha1): index.umd.js
5032
+ * Bootstrap (v5.0.0-alpha2): index.umd.js
5046
5033
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5047
5034
  * --------------------------------------------------------------------------
5048
5035
  */