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,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap v5.0.2 (https://getbootstrap.com/)
2
+ * Bootstrap 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,108 +7,34 @@
7
7
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core')) :
8
8
  typeof define === 'function' && define.amd ? define(['@popperjs/core'], factory) :
9
9
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper));
10
- }(this, (function (Popper) { 'use strict';
10
+ })(this, (function (Popper) { 'use strict';
11
11
 
12
12
  function _interopNamespace(e) {
13
13
  if (e && e.__esModule) return e;
14
- var n = Object.create(null);
14
+ const n = Object.create(null);
15
15
  if (e) {
16
- Object.keys(e).forEach(function (k) {
16
+ for (const k in e) {
17
17
  if (k !== 'default') {
18
- var d = Object.getOwnPropertyDescriptor(e, k);
18
+ const d = Object.getOwnPropertyDescriptor(e, k);
19
19
  Object.defineProperty(n, k, d.get ? d : {
20
20
  enumerable: true,
21
- get: function () {
22
- return e[k];
23
- }
21
+ get: () => e[k]
24
22
  });
25
23
  }
26
- });
24
+ }
27
25
  }
28
- n['default'] = e;
26
+ n.default = e;
29
27
  return Object.freeze(n);
30
28
  }
31
29
 
32
- var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
30
+ const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
33
31
 
34
32
  /**
35
33
  * --------------------------------------------------------------------------
36
- * Bootstrap (v5.0.2): dom/selector-engine.js
34
+ * Bootstrap (v5.1.3): util/index.js
37
35
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
38
36
  * --------------------------------------------------------------------------
39
37
  */
40
-
41
- /**
42
- * ------------------------------------------------------------------------
43
- * Constants
44
- * ------------------------------------------------------------------------
45
- */
46
- const NODE_TEXT = 3;
47
- const SelectorEngine = {
48
- find(selector, element = document.documentElement) {
49
- return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
50
- },
51
-
52
- findOne(selector, element = document.documentElement) {
53
- return Element.prototype.querySelector.call(element, selector);
54
- },
55
-
56
- children(element, selector) {
57
- return [].concat(...element.children).filter(child => child.matches(selector));
58
- },
59
-
60
- parents(element, selector) {
61
- const parents = [];
62
- let ancestor = element.parentNode;
63
-
64
- while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
65
- if (ancestor.matches(selector)) {
66
- parents.push(ancestor);
67
- }
68
-
69
- ancestor = ancestor.parentNode;
70
- }
71
-
72
- return parents;
73
- },
74
-
75
- prev(element, selector) {
76
- let previous = element.previousElementSibling;
77
-
78
- while (previous) {
79
- if (previous.matches(selector)) {
80
- return [previous];
81
- }
82
-
83
- previous = previous.previousElementSibling;
84
- }
85
-
86
- return [];
87
- },
88
-
89
- next(element, selector) {
90
- let next = element.nextElementSibling;
91
-
92
- while (next) {
93
- if (next.matches(selector)) {
94
- return [next];
95
- }
96
-
97
- next = next.nextElementSibling;
98
- }
99
-
100
- return [];
101
- }
102
-
103
- };
104
-
105
- /**
106
- * --------------------------------------------------------------------------
107
- * Bootstrap (v5.0.2): util/index.js
108
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
109
- * --------------------------------------------------------------------------
110
- */
111
-
112
38
  const MAX_UID = 1000000;
113
39
  const MILLISECONDS_MULTIPLIER = 1000;
114
40
  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
@@ -220,7 +146,7 @@
220
146
  }
221
147
 
222
148
  if (typeof obj === 'string' && obj.length > 0) {
223
- return SelectorEngine.findOne(obj);
149
+ return document.querySelector(obj);
224
150
  }
225
151
 
226
152
  return null;
@@ -286,8 +212,20 @@
286
212
  };
287
213
 
288
214
  const noop = () => {};
215
+ /**
216
+ * Trick to restart an element's animation
217
+ *
218
+ * @param {HTMLElement} element
219
+ * @return void
220
+ *
221
+ * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
222
+ */
289
223
 
290
- const reflow = element => element.offsetHeight;
224
+
225
+ const reflow = element => {
226
+ // eslint-disable-next-line no-unused-expressions
227
+ element.offsetHeight;
228
+ };
291
229
 
292
230
  const getjQuery = () => {
293
231
  const {
@@ -404,7 +342,7 @@
404
342
 
405
343
  /**
406
344
  * --------------------------------------------------------------------------
407
- * Bootstrap (v5.0.2): dom/event-handler.js
345
+ * Bootstrap (v5.1.3): dom/event-handler.js
408
346
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
409
347
  * --------------------------------------------------------------------------
410
348
  */
@@ -467,7 +405,6 @@
467
405
  event.delegateTarget = target;
468
406
 
469
407
  if (handler.oneOff) {
470
- // eslint-disable-next-line unicorn/consistent-destructuring
471
408
  EventHandler.off(element, event.type, selector, fn);
472
409
  }
473
410
 
@@ -693,7 +630,7 @@
693
630
 
694
631
  /**
695
632
  * --------------------------------------------------------------------------
696
- * Bootstrap (v5.0.2): dom/data.js
633
+ * Bootstrap (v5.1.3): dom/data.js
697
634
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
698
635
  * --------------------------------------------------------------------------
699
636
  */
@@ -704,7 +641,7 @@
704
641
  * ------------------------------------------------------------------------
705
642
  */
706
643
  const elementMap = new Map();
707
- var Data = {
644
+ const Data = {
708
645
  set(element, key, instance) {
709
646
  if (!elementMap.has(element)) {
710
647
  elementMap.set(element, new Map());
@@ -747,7 +684,7 @@
747
684
 
748
685
  /**
749
686
  * --------------------------------------------------------------------------
750
- * Bootstrap (v5.0.2): base-component.js
687
+ * Bootstrap (v5.1.3): base-component.js
751
688
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
752
689
  * --------------------------------------------------------------------------
753
690
  */
@@ -757,7 +694,7 @@
757
694
  * ------------------------------------------------------------------------
758
695
  */
759
696
 
760
- const VERSION = '5.0.2';
697
+ const VERSION = '5.1.3';
761
698
 
762
699
  class BaseComponent {
763
700
  constructor(element) {
@@ -786,7 +723,7 @@
786
723
 
787
724
 
788
725
  static getInstance(element) {
789
- return Data.get(element, this.DATA_KEY);
726
+ return Data.get(getElement(element), this.DATA_KEY);
790
727
  }
791
728
 
792
729
  static getOrCreateInstance(element, config = {}) {
@@ -813,7 +750,33 @@
813
750
 
814
751
  /**
815
752
  * --------------------------------------------------------------------------
816
- * Bootstrap (v5.0.2): alert.js
753
+ * Bootstrap (v5.1.3): util/component-functions.js
754
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
755
+ * --------------------------------------------------------------------------
756
+ */
757
+
758
+ const enableDismissTrigger = (component, method = 'hide') => {
759
+ const clickEvent = `click.dismiss${component.EVENT_KEY}`;
760
+ const name = component.NAME;
761
+ EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
762
+ if (['A', 'AREA'].includes(this.tagName)) {
763
+ event.preventDefault();
764
+ }
765
+
766
+ if (isDisabled(this)) {
767
+ return;
768
+ }
769
+
770
+ const target = getElementFromSelector(this) || this.closest(`.${name}`);
771
+ const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
772
+
773
+ instance[method]();
774
+ });
775
+ };
776
+
777
+ /**
778
+ * --------------------------------------------------------------------------
779
+ * Bootstrap (v5.1.3): alert.js
817
780
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
818
781
  * --------------------------------------------------------------------------
819
782
  */
@@ -823,17 +786,13 @@
823
786
  * ------------------------------------------------------------------------
824
787
  */
825
788
 
826
- const NAME$c = 'alert';
827
- const DATA_KEY$b = 'bs.alert';
828
- const EVENT_KEY$b = `.${DATA_KEY$b}`;
829
- const DATA_API_KEY$8 = '.data-api';
830
- const SELECTOR_DISMISS = '[data-bs-dismiss="alert"]';
831
- const EVENT_CLOSE = `close${EVENT_KEY$b}`;
832
- const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
833
- const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;
834
- const CLASS_NAME_ALERT = 'alert';
835
- const CLASS_NAME_FADE$6 = 'fade';
836
- const CLASS_NAME_SHOW$9 = 'show';
789
+ const NAME$d = 'alert';
790
+ const DATA_KEY$c = 'bs.alert';
791
+ const EVENT_KEY$c = `.${DATA_KEY$c}`;
792
+ const EVENT_CLOSE = `close${EVENT_KEY$c}`;
793
+ const EVENT_CLOSED = `closed${EVENT_KEY$c}`;
794
+ const CLASS_NAME_FADE$5 = 'fade';
795
+ const CLASS_NAME_SHOW$8 = 'show';
837
796
  /**
838
797
  * ------------------------------------------------------------------------
839
798
  * Class Definition
@@ -843,41 +802,30 @@
843
802
  class Alert extends BaseComponent {
844
803
  // Getters
845
804
  static get NAME() {
846
- return NAME$c;
805
+ return NAME$d;
847
806
  } // Public
848
807
 
849
808
 
850
- close(element) {
851
- const rootElement = element ? this._getRootElement(element) : this._element;
809
+ close() {
810
+ const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
852
811
 
853
- const customEvent = this._triggerCloseEvent(rootElement);
854
-
855
- if (customEvent === null || customEvent.defaultPrevented) {
812
+ if (closeEvent.defaultPrevented) {
856
813
  return;
857
814
  }
858
815
 
859
- this._removeElement(rootElement);
860
- } // Private
861
-
816
+ this._element.classList.remove(CLASS_NAME_SHOW$8);
862
817
 
863
- _getRootElement(element) {
864
- return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);
865
- }
818
+ const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
866
819
 
867
- _triggerCloseEvent(element) {
868
- return EventHandler.trigger(element, EVENT_CLOSE);
869
- }
820
+ this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
821
+ } // Private
870
822
 
871
- _removeElement(element) {
872
- element.classList.remove(CLASS_NAME_SHOW$9);
873
- const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);
874
823
 
875
- this._queueCallback(() => this._destroyElement(element), element, isAnimated);
876
- }
824
+ _destroyElement() {
825
+ this._element.remove();
877
826
 
878
- _destroyElement(element) {
879
- element.remove();
880
- EventHandler.trigger(element, EVENT_CLOSED);
827
+ EventHandler.trigger(this._element, EVENT_CLOSED);
828
+ this.dispose();
881
829
  } // Static
882
830
 
883
831
 
@@ -885,20 +833,16 @@
885
833
  return this.each(function () {
886
834
  const data = Alert.getOrCreateInstance(this);
887
835
 
888
- if (config === 'close') {
889
- data[config](this);
836
+ if (typeof config !== 'string') {
837
+ return;
890
838
  }
891
- });
892
- }
893
839
 
894
- static handleDismiss(alertInstance) {
895
- return function (event) {
896
- if (event) {
897
- event.preventDefault();
840
+ if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
841
+ throw new TypeError(`No method named "${config}"`);
898
842
  }
899
843
 
900
- alertInstance.close(this);
901
- };
844
+ data[config](this);
845
+ });
902
846
  }
903
847
 
904
848
  }
@@ -909,7 +853,7 @@
909
853
  */
910
854
 
911
855
 
912
- EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));
856
+ enableDismissTrigger(Alert, 'close');
913
857
  /**
914
858
  * ------------------------------------------------------------------------
915
859
  * jQuery
@@ -921,7 +865,7 @@
921
865
 
922
866
  /**
923
867
  * --------------------------------------------------------------------------
924
- * Bootstrap (v5.0.2): button.js
868
+ * Bootstrap (v5.1.3): button.js
925
869
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
926
870
  * --------------------------------------------------------------------------
927
871
  */
@@ -931,13 +875,13 @@
931
875
  * ------------------------------------------------------------------------
932
876
  */
933
877
 
934
- const NAME$b = 'button';
935
- const DATA_KEY$a = 'bs.button';
936
- const EVENT_KEY$a = `.${DATA_KEY$a}`;
878
+ const NAME$c = 'button';
879
+ const DATA_KEY$b = 'bs.button';
880
+ const EVENT_KEY$b = `.${DATA_KEY$b}`;
937
881
  const DATA_API_KEY$7 = '.data-api';
938
882
  const CLASS_NAME_ACTIVE$3 = 'active';
939
883
  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
940
- const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;
884
+ const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;
941
885
  /**
942
886
  * ------------------------------------------------------------------------
943
887
  * Class Definition
@@ -947,7 +891,7 @@
947
891
  class Button extends BaseComponent {
948
892
  // Getters
949
893
  static get NAME() {
950
- return NAME$b;
894
+ return NAME$c;
951
895
  } // Public
952
896
 
953
897
 
@@ -992,7 +936,7 @@
992
936
 
993
937
  /**
994
938
  * --------------------------------------------------------------------------
995
- * Bootstrap (v5.0.2): dom/manipulator.js
939
+ * Bootstrap (v5.1.3): dom/manipulator.js
996
940
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
997
941
  * --------------------------------------------------------------------------
998
942
  */
@@ -1050,8 +994,8 @@
1050
994
  offset(element) {
1051
995
  const rect = element.getBoundingClientRect();
1052
996
  return {
1053
- top: rect.top + document.body.scrollTop,
1054
- left: rect.left + document.body.scrollLeft
997
+ top: rect.top + window.pageYOffset,
998
+ left: rect.left + window.pageXOffset
1055
999
  };
1056
1000
  },
1057
1001
 
@@ -1066,7 +1010,77 @@
1066
1010
 
1067
1011
  /**
1068
1012
  * --------------------------------------------------------------------------
1069
- * Bootstrap (v5.0.2): carousel.js
1013
+ * Bootstrap (v5.1.3): dom/selector-engine.js
1014
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1015
+ * --------------------------------------------------------------------------
1016
+ */
1017
+ const NODE_TEXT = 3;
1018
+ const SelectorEngine = {
1019
+ find(selector, element = document.documentElement) {
1020
+ return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
1021
+ },
1022
+
1023
+ findOne(selector, element = document.documentElement) {
1024
+ return Element.prototype.querySelector.call(element, selector);
1025
+ },
1026
+
1027
+ children(element, selector) {
1028
+ return [].concat(...element.children).filter(child => child.matches(selector));
1029
+ },
1030
+
1031
+ parents(element, selector) {
1032
+ const parents = [];
1033
+ let ancestor = element.parentNode;
1034
+
1035
+ while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
1036
+ if (ancestor.matches(selector)) {
1037
+ parents.push(ancestor);
1038
+ }
1039
+
1040
+ ancestor = ancestor.parentNode;
1041
+ }
1042
+
1043
+ return parents;
1044
+ },
1045
+
1046
+ prev(element, selector) {
1047
+ let previous = element.previousElementSibling;
1048
+
1049
+ while (previous) {
1050
+ if (previous.matches(selector)) {
1051
+ return [previous];
1052
+ }
1053
+
1054
+ previous = previous.previousElementSibling;
1055
+ }
1056
+
1057
+ return [];
1058
+ },
1059
+
1060
+ next(element, selector) {
1061
+ let next = element.nextElementSibling;
1062
+
1063
+ while (next) {
1064
+ if (next.matches(selector)) {
1065
+ return [next];
1066
+ }
1067
+
1068
+ next = next.nextElementSibling;
1069
+ }
1070
+
1071
+ return [];
1072
+ },
1073
+
1074
+ focusableChildren(element) {
1075
+ const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
1076
+ return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
1077
+ }
1078
+
1079
+ };
1080
+
1081
+ /**
1082
+ * --------------------------------------------------------------------------
1083
+ * Bootstrap (v5.1.3): carousel.js
1070
1084
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1071
1085
  * --------------------------------------------------------------------------
1072
1086
  */
@@ -1076,16 +1090,16 @@
1076
1090
  * ------------------------------------------------------------------------
1077
1091
  */
1078
1092
 
1079
- const NAME$a = 'carousel';
1080
- const DATA_KEY$9 = 'bs.carousel';
1081
- const EVENT_KEY$9 = `.${DATA_KEY$9}`;
1093
+ const NAME$b = 'carousel';
1094
+ const DATA_KEY$a = 'bs.carousel';
1095
+ const EVENT_KEY$a = `.${DATA_KEY$a}`;
1082
1096
  const DATA_API_KEY$6 = '.data-api';
1083
1097
  const ARROW_LEFT_KEY = 'ArrowLeft';
1084
1098
  const ARROW_RIGHT_KEY = 'ArrowRight';
1085
1099
  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
1086
1100
 
1087
1101
  const SWIPE_THRESHOLD = 40;
1088
- const Default$9 = {
1102
+ const Default$a = {
1089
1103
  interval: 5000,
1090
1104
  keyboard: true,
1091
1105
  slide: false,
@@ -1093,7 +1107,7 @@
1093
1107
  wrap: true,
1094
1108
  touch: true
1095
1109
  };
1096
- const DefaultType$9 = {
1110
+ const DefaultType$a = {
1097
1111
  interval: '(number|boolean)',
1098
1112
  keyboard: 'boolean',
1099
1113
  slide: '(boolean|string)',
@@ -1109,19 +1123,19 @@
1109
1123
  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,
1110
1124
  [ARROW_RIGHT_KEY]: DIRECTION_LEFT
1111
1125
  };
1112
- const EVENT_SLIDE = `slide${EVENT_KEY$9}`;
1113
- const EVENT_SLID = `slid${EVENT_KEY$9}`;
1114
- const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;
1115
- const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;
1116
- const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;
1117
- const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
1118
- const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
1119
- const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
1120
- const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
1121
- const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
1122
- const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;
1123
- const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;
1124
- const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;
1126
+ const EVENT_SLIDE = `slide${EVENT_KEY$a}`;
1127
+ const EVENT_SLID = `slid${EVENT_KEY$a}`;
1128
+ const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;
1129
+ const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;
1130
+ const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;
1131
+ const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;
1132
+ const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;
1133
+ const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;
1134
+ const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;
1135
+ const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;
1136
+ const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;
1137
+ const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`;
1138
+ const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
1125
1139
  const CLASS_NAME_CAROUSEL = 'carousel';
1126
1140
  const CLASS_NAME_ACTIVE$2 = 'active';
1127
1141
  const CLASS_NAME_SLIDE = 'slide';
@@ -1168,11 +1182,11 @@
1168
1182
 
1169
1183
 
1170
1184
  static get Default() {
1171
- return Default$9;
1185
+ return Default$a;
1172
1186
  }
1173
1187
 
1174
1188
  static get NAME() {
1175
- return NAME$a;
1189
+ return NAME$b;
1176
1190
  } // Public
1177
1191
 
1178
1192
 
@@ -1250,11 +1264,11 @@
1250
1264
 
1251
1265
 
1252
1266
  _getConfig(config) {
1253
- config = { ...Default$9,
1267
+ config = { ...Default$a,
1254
1268
  ...Manipulator.getDataAttributes(this._element),
1255
1269
  ...(typeof config === 'object' ? config : {})
1256
1270
  };
1257
- typeCheckConfig(NAME$a, config, DefaultType$9);
1271
+ typeCheckConfig(NAME$b, config, DefaultType$a);
1258
1272
  return config;
1259
1273
  }
1260
1274
 
@@ -1291,8 +1305,12 @@
1291
1305
  }
1292
1306
 
1293
1307
  _addTouchEventListeners() {
1308
+ const hasPointerPenTouch = event => {
1309
+ return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
1310
+ };
1311
+
1294
1312
  const start = event => {
1295
- if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
1313
+ if (hasPointerPenTouch(event)) {
1296
1314
  this.touchStartX = event.clientX;
1297
1315
  } else if (!this._pointerEvent) {
1298
1316
  this.touchStartX = event.touches[0].clientX;
@@ -1305,7 +1323,7 @@
1305
1323
  };
1306
1324
 
1307
1325
  const end = event => {
1308
- if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
1326
+ if (hasPointerPenTouch(event)) {
1309
1327
  this.touchDeltaX = event.clientX - this.touchStartX;
1310
1328
  }
1311
1329
 
@@ -1330,7 +1348,7 @@
1330
1348
  };
1331
1349
 
1332
1350
  SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
1333
- EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());
1351
+ EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());
1334
1352
  });
1335
1353
 
1336
1354
  if (this._pointerEvent) {
@@ -1611,7 +1629,7 @@
1611
1629
 
1612
1630
  /**
1613
1631
  * --------------------------------------------------------------------------
1614
- * Bootstrap (v5.0.2): collapse.js
1632
+ * Bootstrap (v5.1.3): collapse.js
1615
1633
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1616
1634
  * --------------------------------------------------------------------------
1617
1635
  */
@@ -1621,30 +1639,32 @@
1621
1639
  * ------------------------------------------------------------------------
1622
1640
  */
1623
1641
 
1624
- const NAME$9 = 'collapse';
1625
- const DATA_KEY$8 = 'bs.collapse';
1626
- const EVENT_KEY$8 = `.${DATA_KEY$8}`;
1642
+ const NAME$a = 'collapse';
1643
+ const DATA_KEY$9 = 'bs.collapse';
1644
+ const EVENT_KEY$9 = `.${DATA_KEY$9}`;
1627
1645
  const DATA_API_KEY$5 = '.data-api';
1628
- const Default$8 = {
1646
+ const Default$9 = {
1629
1647
  toggle: true,
1630
- parent: ''
1648
+ parent: null
1631
1649
  };
1632
- const DefaultType$8 = {
1650
+ const DefaultType$9 = {
1633
1651
  toggle: 'boolean',
1634
- parent: '(string|element)'
1652
+ parent: '(null|element)'
1635
1653
  };
1636
- const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;
1637
- const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;
1638
- const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;
1639
- const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;
1640
- const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
1641
- const CLASS_NAME_SHOW$8 = 'show';
1654
+ const EVENT_SHOW$5 = `show${EVENT_KEY$9}`;
1655
+ const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;
1656
+ const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;
1657
+ const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;
1658
+ const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`;
1659
+ const CLASS_NAME_SHOW$7 = 'show';
1642
1660
  const CLASS_NAME_COLLAPSE = 'collapse';
1643
1661
  const CLASS_NAME_COLLAPSING = 'collapsing';
1644
1662
  const CLASS_NAME_COLLAPSED = 'collapsed';
1663
+ const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
1664
+ const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
1645
1665
  const WIDTH = 'width';
1646
1666
  const HEIGHT = 'height';
1647
- const SELECTOR_ACTIVES = '.show, .collapsing';
1667
+ const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
1648
1668
  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
1649
1669
  /**
1650
1670
  * ------------------------------------------------------------------------
@@ -1657,7 +1677,7 @@
1657
1677
  super(element);
1658
1678
  this._isTransitioning = false;
1659
1679
  this._config = this._getConfig(config);
1660
- this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href="#${this._element.id}"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target="#${this._element.id}"]`);
1680
+ this._triggerArray = [];
1661
1681
  const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
1662
1682
 
1663
1683
  for (let i = 0, len = toggleList.length; i < len; i++) {
@@ -1672,10 +1692,10 @@
1672
1692
  }
1673
1693
  }
1674
1694
 
1675
- this._parent = this._config.parent ? this._getParent() : null;
1695
+ this._initializeChildren();
1676
1696
 
1677
1697
  if (!this._config.parent) {
1678
- this._addAriaAndCollapsedClass(this._element, this._triggerArray);
1698
+ this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
1679
1699
  }
1680
1700
 
1681
1701
  if (this._config.toggle) {
@@ -1685,16 +1705,16 @@
1685
1705
 
1686
1706
 
1687
1707
  static get Default() {
1688
- return Default$8;
1708
+ return Default$9;
1689
1709
  }
1690
1710
 
1691
1711
  static get NAME() {
1692
- return NAME$9;
1712
+ return NAME$a;
1693
1713
  } // Public
1694
1714
 
1695
1715
 
1696
1716
  toggle() {
1697
- if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {
1717
+ if (this._isShown()) {
1698
1718
  this.hide();
1699
1719
  } else {
1700
1720
  this.show();
@@ -1702,30 +1722,21 @@
1702
1722
  }
1703
1723
 
1704
1724
  show() {
1705
- if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {
1725
+ if (this._isTransitioning || this._isShown()) {
1706
1726
  return;
1707
1727
  }
1708
1728
 
1709
- let actives;
1729
+ let actives = [];
1710
1730
  let activesData;
1711
1731
 
1712
- if (this._parent) {
1713
- actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {
1714
- if (typeof this._config.parent === 'string') {
1715
- return elem.getAttribute('data-bs-parent') === this._config.parent;
1716
- }
1717
-
1718
- return elem.classList.contains(CLASS_NAME_COLLAPSE);
1719
- });
1720
-
1721
- if (actives.length === 0) {
1722
- actives = null;
1723
- }
1732
+ if (this._config.parent) {
1733
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
1734
+ actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth
1724
1735
  }
1725
1736
 
1726
1737
  const container = SelectorEngine.findOne(this._selector);
1727
1738
 
1728
- if (actives) {
1739
+ if (actives.length) {
1729
1740
  const tempActiveData = actives.find(elem => container !== elem);
1730
1741
  activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
1731
1742
 
@@ -1740,17 +1751,17 @@
1740
1751
  return;
1741
1752
  }
1742
1753
 
1743
- if (actives) {
1744
- actives.forEach(elemActive => {
1745
- if (container !== elemActive) {
1746
- Collapse.collapseInterface(elemActive, 'hide');
1747
- }
1754
+ actives.forEach(elemActive => {
1755
+ if (container !== elemActive) {
1756
+ Collapse.getOrCreateInstance(elemActive, {
1757
+ toggle: false
1758
+ }).hide();
1759
+ }
1748
1760
 
1749
- if (!activesData) {
1750
- Data.set(elemActive, DATA_KEY$8, null);
1751
- }
1752
- });
1753
- }
1761
+ if (!activesData) {
1762
+ Data.set(elemActive, DATA_KEY$9, null);
1763
+ }
1764
+ });
1754
1765
 
1755
1766
  const dimension = this._getDimension();
1756
1767
 
@@ -1760,22 +1771,18 @@
1760
1771
 
1761
1772
  this._element.style[dimension] = 0;
1762
1773
 
1763
- if (this._triggerArray.length) {
1764
- this._triggerArray.forEach(element => {
1765
- element.classList.remove(CLASS_NAME_COLLAPSED);
1766
- element.setAttribute('aria-expanded', true);
1767
- });
1768
- }
1774
+ this._addAriaAndCollapsedClass(this._triggerArray, true);
1769
1775
 
1770
- this.setTransitioning(true);
1776
+ this._isTransitioning = true;
1771
1777
 
1772
1778
  const complete = () => {
1779
+ this._isTransitioning = false;
1780
+
1773
1781
  this._element.classList.remove(CLASS_NAME_COLLAPSING);
1774
1782
 
1775
- this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);
1783
+ this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
1776
1784
 
1777
1785
  this._element.style[dimension] = '';
1778
- this.setTransitioning(false);
1779
1786
  EventHandler.trigger(this._element, EVENT_SHOWN$5);
1780
1787
  };
1781
1788
 
@@ -1788,7 +1795,7 @@
1788
1795
  }
1789
1796
 
1790
1797
  hide() {
1791
- if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {
1798
+ if (this._isTransitioning || !this._isShown()) {
1792
1799
  return;
1793
1800
  }
1794
1801
 
@@ -1805,26 +1812,23 @@
1805
1812
 
1806
1813
  this._element.classList.add(CLASS_NAME_COLLAPSING);
1807
1814
 
1808
- this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);
1815
+ this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
1809
1816
 
1810
1817
  const triggerArrayLength = this._triggerArray.length;
1811
1818
 
1812
- if (triggerArrayLength > 0) {
1813
- for (let i = 0; i < triggerArrayLength; i++) {
1814
- const trigger = this._triggerArray[i];
1815
- const elem = getElementFromSelector(trigger);
1819
+ for (let i = 0; i < triggerArrayLength; i++) {
1820
+ const trigger = this._triggerArray[i];
1821
+ const elem = getElementFromSelector(trigger);
1816
1822
 
1817
- if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {
1818
- trigger.classList.add(CLASS_NAME_COLLAPSED);
1819
- trigger.setAttribute('aria-expanded', false);
1820
- }
1823
+ if (elem && !this._isShown(elem)) {
1824
+ this._addAriaAndCollapsedClass([trigger], false);
1821
1825
  }
1822
1826
  }
1823
1827
 
1824
- this.setTransitioning(true);
1828
+ this._isTransitioning = true;
1825
1829
 
1826
1830
  const complete = () => {
1827
- this.setTransitioning(false);
1831
+ this._isTransitioning = false;
1828
1832
 
1829
1833
  this._element.classList.remove(CLASS_NAME_COLLAPSING);
1830
1834
 
@@ -1838,45 +1842,47 @@
1838
1842
  this._queueCallback(complete, this._element, true);
1839
1843
  }
1840
1844
 
1841
- setTransitioning(isTransitioning) {
1842
- this._isTransitioning = isTransitioning;
1845
+ _isShown(element = this._element) {
1846
+ return element.classList.contains(CLASS_NAME_SHOW$7);
1843
1847
  } // Private
1844
1848
 
1845
1849
 
1846
1850
  _getConfig(config) {
1847
- config = { ...Default$8,
1851
+ config = { ...Default$9,
1852
+ ...Manipulator.getDataAttributes(this._element),
1848
1853
  ...config
1849
1854
  };
1850
1855
  config.toggle = Boolean(config.toggle); // Coerce string values
1851
1856
 
1852
- typeCheckConfig(NAME$9, config, DefaultType$8);
1857
+ config.parent = getElement(config.parent);
1858
+ typeCheckConfig(NAME$a, config, DefaultType$9);
1853
1859
  return config;
1854
1860
  }
1855
1861
 
1856
1862
  _getDimension() {
1857
- return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;
1863
+ return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
1858
1864
  }
1859
1865
 
1860
- _getParent() {
1861
- let {
1862
- parent
1863
- } = this._config;
1864
- parent = getElement(parent);
1865
- const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent="${parent}"]`;
1866
- SelectorEngine.find(selector, parent).forEach(element => {
1866
+ _initializeChildren() {
1867
+ if (!this._config.parent) {
1868
+ return;
1869
+ }
1870
+
1871
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
1872
+ SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {
1867
1873
  const selected = getElementFromSelector(element);
1868
1874
 
1869
- this._addAriaAndCollapsedClass(selected, [element]);
1875
+ if (selected) {
1876
+ this._addAriaAndCollapsedClass([element], this._isShown(selected));
1877
+ }
1870
1878
  });
1871
- return parent;
1872
1879
  }
1873
1880
 
1874
- _addAriaAndCollapsedClass(element, triggerArray) {
1875
- if (!element || !triggerArray.length) {
1881
+ _addAriaAndCollapsedClass(triggerArray, isOpen) {
1882
+ if (!triggerArray.length) {
1876
1883
  return;
1877
1884
  }
1878
1885
 
1879
- const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);
1880
1886
  triggerArray.forEach(elem => {
1881
1887
  if (isOpen) {
1882
1888
  elem.classList.remove(CLASS_NAME_COLLAPSED);
@@ -1889,33 +1895,23 @@
1889
1895
  } // Static
1890
1896
 
1891
1897
 
1892
- static collapseInterface(element, config) {
1893
- let data = Collapse.getInstance(element);
1894
- const _config = { ...Default$8,
1895
- ...Manipulator.getDataAttributes(element),
1896
- ...(typeof config === 'object' && config ? config : {})
1897
- };
1898
-
1899
- if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
1900
- _config.toggle = false;
1901
- }
1902
-
1903
- if (!data) {
1904
- data = new Collapse(element, _config);
1905
- }
1898
+ static jQueryInterface(config) {
1899
+ return this.each(function () {
1900
+ const _config = {};
1906
1901
 
1907
- if (typeof config === 'string') {
1908
- if (typeof data[config] === 'undefined') {
1909
- throw new TypeError(`No method named "${config}"`);
1902
+ if (typeof config === 'string' && /show|hide/.test(config)) {
1903
+ _config.toggle = false;
1910
1904
  }
1911
1905
 
1912
- data[config]();
1913
- }
1914
- }
1906
+ const data = Collapse.getOrCreateInstance(this, _config);
1915
1907
 
1916
- static jQueryInterface(config) {
1917
- return this.each(function () {
1918
- Collapse.collapseInterface(this, config);
1908
+ if (typeof config === 'string') {
1909
+ if (typeof data[config] === 'undefined') {
1910
+ throw new TypeError(`No method named "${config}"`);
1911
+ }
1912
+
1913
+ data[config]();
1914
+ }
1919
1915
  });
1920
1916
  }
1921
1917
 
@@ -1933,26 +1929,12 @@
1933
1929
  event.preventDefault();
1934
1930
  }
1935
1931
 
1936
- const triggerData = Manipulator.getDataAttributes(this);
1937
1932
  const selector = getSelectorFromElement(this);
1938
1933
  const selectorElements = SelectorEngine.find(selector);
1939
1934
  selectorElements.forEach(element => {
1940
- const data = Collapse.getInstance(element);
1941
- let config;
1942
-
1943
- if (data) {
1944
- // update parent attribute
1945
- if (data._parent === null && typeof triggerData.parent === 'string') {
1946
- data._config.parent = triggerData.parent;
1947
- data._parent = data._getParent();
1948
- }
1949
-
1950
- config = 'toggle';
1951
- } else {
1952
- config = triggerData;
1953
- }
1954
-
1955
- Collapse.collapseInterface(element, config);
1935
+ Collapse.getOrCreateInstance(element, {
1936
+ toggle: false
1937
+ }).toggle();
1956
1938
  });
1957
1939
  });
1958
1940
  /**
@@ -1966,7 +1948,7 @@
1966
1948
 
1967
1949
  /**
1968
1950
  * --------------------------------------------------------------------------
1969
- * Bootstrap (v5.0.2): dropdown.js
1951
+ * Bootstrap (v5.1.3): dropdown.js
1970
1952
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1971
1953
  * --------------------------------------------------------------------------
1972
1954
  */
@@ -1976,27 +1958,26 @@
1976
1958
  * ------------------------------------------------------------------------
1977
1959
  */
1978
1960
 
1979
- const NAME$8 = 'dropdown';
1980
- const DATA_KEY$7 = 'bs.dropdown';
1981
- const EVENT_KEY$7 = `.${DATA_KEY$7}`;
1961
+ const NAME$9 = 'dropdown';
1962
+ const DATA_KEY$8 = 'bs.dropdown';
1963
+ const EVENT_KEY$8 = `.${DATA_KEY$8}`;
1982
1964
  const DATA_API_KEY$4 = '.data-api';
1983
1965
  const ESCAPE_KEY$2 = 'Escape';
1984
1966
  const SPACE_KEY = 'Space';
1985
- const TAB_KEY = 'Tab';
1967
+ const TAB_KEY$1 = 'Tab';
1986
1968
  const ARROW_UP_KEY = 'ArrowUp';
1987
1969
  const ARROW_DOWN_KEY = 'ArrowDown';
1988
1970
  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
1989
1971
 
1990
1972
  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);
1991
- const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;
1992
- const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;
1993
- const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;
1994
- const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;
1995
- const EVENT_CLICK = `click${EVENT_KEY$7}`;
1996
- const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
1997
- const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;
1998
- const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;
1999
- const CLASS_NAME_SHOW$7 = 'show';
1973
+ const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`;
1974
+ const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;
1975
+ const EVENT_SHOW$4 = `show${EVENT_KEY$8}`;
1976
+ const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;
1977
+ const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`;
1978
+ const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;
1979
+ const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;
1980
+ const CLASS_NAME_SHOW$6 = 'show';
2000
1981
  const CLASS_NAME_DROPUP = 'dropup';
2001
1982
  const CLASS_NAME_DROPEND = 'dropend';
2002
1983
  const CLASS_NAME_DROPSTART = 'dropstart';
@@ -2011,7 +1992,7 @@
2011
1992
  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
2012
1993
  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
2013
1994
  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
2014
- const Default$7 = {
1995
+ const Default$8 = {
2015
1996
  offset: [0, 2],
2016
1997
  boundary: 'clippingParents',
2017
1998
  reference: 'toggle',
@@ -2019,7 +2000,7 @@
2019
2000
  popperConfig: null,
2020
2001
  autoClose: true
2021
2002
  };
2022
- const DefaultType$7 = {
2003
+ const DefaultType$8 = {
2023
2004
  offset: '(array|string|function)',
2024
2005
  boundary: '(string|element)',
2025
2006
  reference: '(string|element|object)',
@@ -2040,45 +2021,31 @@
2040
2021
  this._config = this._getConfig(config);
2041
2022
  this._menu = this._getMenuElement();
2042
2023
  this._inNavbar = this._detectNavbar();
2043
-
2044
- this._addEventListeners();
2045
2024
  } // Getters
2046
2025
 
2047
2026
 
2048
2027
  static get Default() {
2049
- return Default$7;
2028
+ return Default$8;
2050
2029
  }
2051
2030
 
2052
2031
  static get DefaultType() {
2053
- return DefaultType$7;
2032
+ return DefaultType$8;
2054
2033
  }
2055
2034
 
2056
2035
  static get NAME() {
2057
- return NAME$8;
2036
+ return NAME$9;
2058
2037
  } // Public
2059
2038
 
2060
2039
 
2061
2040
  toggle() {
2062
- if (isDisabled(this._element)) {
2063
- return;
2064
- }
2065
-
2066
- const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);
2067
-
2068
- if (isActive) {
2069
- this.hide();
2070
- return;
2071
- }
2072
-
2073
- this.show();
2041
+ return this._isShown() ? this.hide() : this.show();
2074
2042
  }
2075
2043
 
2076
2044
  show() {
2077
- if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {
2045
+ if (isDisabled(this._element) || this._isShown(this._menu)) {
2078
2046
  return;
2079
2047
  }
2080
2048
 
2081
- const parent = Dropdown.getParentFromElement(this._element);
2082
2049
  const relatedTarget = {
2083
2050
  relatedTarget: this._element
2084
2051
  };
@@ -2086,34 +2053,14 @@
2086
2053
 
2087
2054
  if (showEvent.defaultPrevented) {
2088
2055
  return;
2089
- } // Totally disable Popper for Dropdowns in Navbar
2056
+ }
2090
2057
 
2058
+ const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
2091
2059
 
2092
2060
  if (this._inNavbar) {
2093
2061
  Manipulator.setDataAttribute(this._menu, 'popper', 'none');
2094
2062
  } else {
2095
- if (typeof Popper__namespace === 'undefined') {
2096
- throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
2097
- }
2098
-
2099
- let referenceElement = this._element;
2100
-
2101
- if (this._config.reference === 'parent') {
2102
- referenceElement = parent;
2103
- } else if (isElement(this._config.reference)) {
2104
- referenceElement = getElement(this._config.reference);
2105
- } else if (typeof this._config.reference === 'object') {
2106
- referenceElement = this._config.reference;
2107
- }
2108
-
2109
- const popperConfig = this._getPopperConfig();
2110
-
2111
- const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
2112
- this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
2113
-
2114
- if (isDisplayStatic) {
2115
- Manipulator.setDataAttribute(this._menu, 'popper', 'static');
2116
- }
2063
+ this._createPopper(parent);
2117
2064
  } // If this is a touch-enabled device we add extra
2118
2065
  // empty mouseover listeners to the body's immediate children;
2119
2066
  // only needed because of broken event delegation on iOS
@@ -2128,15 +2075,15 @@
2128
2075
 
2129
2076
  this._element.setAttribute('aria-expanded', true);
2130
2077
 
2131
- this._menu.classList.toggle(CLASS_NAME_SHOW$7);
2078
+ this._menu.classList.add(CLASS_NAME_SHOW$6);
2132
2079
 
2133
- this._element.classList.toggle(CLASS_NAME_SHOW$7);
2080
+ this._element.classList.add(CLASS_NAME_SHOW$6);
2134
2081
 
2135
2082
  EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);
2136
2083
  }
2137
2084
 
2138
2085
  hide() {
2139
- if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {
2086
+ if (isDisabled(this._element) || !this._isShown(this._menu)) {
2140
2087
  return;
2141
2088
  }
2142
2089
 
@@ -2164,13 +2111,6 @@
2164
2111
  } // Private
2165
2112
 
2166
2113
 
2167
- _addEventListeners() {
2168
- EventHandler.on(this._element, EVENT_CLICK, event => {
2169
- event.preventDefault();
2170
- this.toggle();
2171
- });
2172
- }
2173
-
2174
2114
  _completeHide(relatedTarget) {
2175
2115
  const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);
2176
2116
 
@@ -2188,9 +2128,9 @@
2188
2128
  this._popper.destroy();
2189
2129
  }
2190
2130
 
2191
- this._menu.classList.remove(CLASS_NAME_SHOW$7);
2131
+ this._menu.classList.remove(CLASS_NAME_SHOW$6);
2192
2132
 
2193
- this._element.classList.remove(CLASS_NAME_SHOW$7);
2133
+ this._element.classList.remove(CLASS_NAME_SHOW$6);
2194
2134
 
2195
2135
  this._element.setAttribute('aria-expanded', 'false');
2196
2136
 
@@ -2203,16 +2143,45 @@
2203
2143
  ...Manipulator.getDataAttributes(this._element),
2204
2144
  ...config
2205
2145
  };
2206
- typeCheckConfig(NAME$8, config, this.constructor.DefaultType);
2146
+ typeCheckConfig(NAME$9, config, this.constructor.DefaultType);
2207
2147
 
2208
2148
  if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
2209
2149
  // Popper virtual elements require a getBoundingClientRect method
2210
- throw new TypeError(`${NAME$8.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
2150
+ throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
2211
2151
  }
2212
2152
 
2213
2153
  return config;
2214
2154
  }
2215
2155
 
2156
+ _createPopper(parent) {
2157
+ if (typeof Popper__namespace === 'undefined') {
2158
+ throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
2159
+ }
2160
+
2161
+ let referenceElement = this._element;
2162
+
2163
+ if (this._config.reference === 'parent') {
2164
+ referenceElement = parent;
2165
+ } else if (isElement(this._config.reference)) {
2166
+ referenceElement = getElement(this._config.reference);
2167
+ } else if (typeof this._config.reference === 'object') {
2168
+ referenceElement = this._config.reference;
2169
+ }
2170
+
2171
+ const popperConfig = this._getPopperConfig();
2172
+
2173
+ const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
2174
+ this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
2175
+
2176
+ if (isDisplayStatic) {
2177
+ Manipulator.setDataAttribute(this._menu, 'popper', 'static');
2178
+ }
2179
+ }
2180
+
2181
+ _isShown(element = this._element) {
2182
+ return element.classList.contains(CLASS_NAME_SHOW$6);
2183
+ }
2184
+
2216
2185
  _getMenuElement() {
2217
2186
  return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
2218
2187
  }
@@ -2302,26 +2271,24 @@
2302
2271
  } // Static
2303
2272
 
2304
2273
 
2305
- static dropdownInterface(element, config) {
2306
- const data = Dropdown.getOrCreateInstance(element, config);
2274
+ static jQueryInterface(config) {
2275
+ return this.each(function () {
2276
+ const data = Dropdown.getOrCreateInstance(this, config);
2277
+
2278
+ if (typeof config !== 'string') {
2279
+ return;
2280
+ }
2307
2281
 
2308
- if (typeof config === 'string') {
2309
2282
  if (typeof data[config] === 'undefined') {
2310
2283
  throw new TypeError(`No method named "${config}"`);
2311
2284
  }
2312
2285
 
2313
2286
  data[config]();
2314
- }
2315
- }
2316
-
2317
- static jQueryInterface(config) {
2318
- return this.each(function () {
2319
- Dropdown.dropdownInterface(this, config);
2320
2287
  });
2321
2288
  }
2322
2289
 
2323
2290
  static clearMenus(event) {
2324
- if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
2291
+ if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {
2325
2292
  return;
2326
2293
  }
2327
2294
 
@@ -2334,7 +2301,7 @@
2334
2301
  continue;
2335
2302
  }
2336
2303
 
2337
- if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {
2304
+ if (!context._isShown()) {
2338
2305
  continue;
2339
2306
  }
2340
2307
 
@@ -2351,7 +2318,7 @@
2351
2318
  } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
2352
2319
 
2353
2320
 
2354
- if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
2321
+ if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
2355
2322
  continue;
2356
2323
  }
2357
2324
 
@@ -2380,7 +2347,7 @@
2380
2347
  return;
2381
2348
  }
2382
2349
 
2383
- const isActive = this.classList.contains(CLASS_NAME_SHOW$7);
2350
+ const isActive = this.classList.contains(CLASS_NAME_SHOW$6);
2384
2351
 
2385
2352
  if (!isActive && event.key === ESCAPE_KEY$2) {
2386
2353
  return;
@@ -2393,20 +2360,20 @@
2393
2360
  return;
2394
2361
  }
2395
2362
 
2396
- const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];
2363
+ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];
2364
+ const instance = Dropdown.getOrCreateInstance(getToggleButton);
2397
2365
 
2398
2366
  if (event.key === ESCAPE_KEY$2) {
2399
- getToggleButton().focus();
2400
- Dropdown.clearMenus();
2367
+ instance.hide();
2401
2368
  return;
2402
2369
  }
2403
2370
 
2404
2371
  if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
2405
2372
  if (!isActive) {
2406
- getToggleButton().click();
2373
+ instance.show();
2407
2374
  }
2408
2375
 
2409
- Dropdown.getInstance(getToggleButton())._selectMenuItem(event);
2376
+ instance._selectMenuItem(event);
2410
2377
 
2411
2378
  return;
2412
2379
  }
@@ -2430,7 +2397,7 @@
2430
2397
  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
2431
2398
  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
2432
2399
  event.preventDefault();
2433
- Dropdown.dropdownInterface(this);
2400
+ Dropdown.getOrCreateInstance(this).toggle();
2434
2401
  });
2435
2402
  /**
2436
2403
  * ------------------------------------------------------------------------
@@ -2443,7 +2410,7 @@
2443
2410
 
2444
2411
  /**
2445
2412
  * --------------------------------------------------------------------------
2446
- * Bootstrap (v5.0.2): util/scrollBar.js
2413
+ * Bootstrap (v5.1.3): util/scrollBar.js
2447
2414
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2448
2415
  * --------------------------------------------------------------------------
2449
2416
  */
@@ -2547,11 +2514,12 @@
2547
2514
 
2548
2515
  /**
2549
2516
  * --------------------------------------------------------------------------
2550
- * Bootstrap (v5.0.2): util/backdrop.js
2551
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2517
+ * Bootstrap (v5.1.3): util/backdrop.js
2518
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2552
2519
  * --------------------------------------------------------------------------
2553
2520
  */
2554
- const Default$6 = {
2521
+ const Default$7 = {
2522
+ className: 'modal-backdrop',
2555
2523
  isVisible: true,
2556
2524
  // if false, we use the backdrop helper without adding any element to the dom
2557
2525
  isAnimated: false,
@@ -2559,17 +2527,17 @@
2559
2527
  // give the choice to place backdrop under different elements
2560
2528
  clickCallback: null
2561
2529
  };
2562
- const DefaultType$6 = {
2530
+ const DefaultType$7 = {
2531
+ className: 'string',
2563
2532
  isVisible: 'boolean',
2564
2533
  isAnimated: 'boolean',
2565
2534
  rootElement: '(element|string)',
2566
2535
  clickCallback: '(function|null)'
2567
2536
  };
2568
- const NAME$7 = 'backdrop';
2569
- const CLASS_NAME_BACKDROP = 'modal-backdrop';
2570
- const CLASS_NAME_FADE$5 = 'fade';
2571
- const CLASS_NAME_SHOW$6 = 'show';
2572
- const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;
2537
+ const NAME$8 = 'backdrop';
2538
+ const CLASS_NAME_FADE$4 = 'fade';
2539
+ const CLASS_NAME_SHOW$5 = 'show';
2540
+ const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;
2573
2541
 
2574
2542
  class Backdrop {
2575
2543
  constructor(config) {
@@ -2590,7 +2558,7 @@
2590
2558
  reflow(this._getElement());
2591
2559
  }
2592
2560
 
2593
- this._getElement().classList.add(CLASS_NAME_SHOW$6);
2561
+ this._getElement().classList.add(CLASS_NAME_SHOW$5);
2594
2562
 
2595
2563
  this._emulateAnimation(() => {
2596
2564
  execute(callback);
@@ -2603,7 +2571,7 @@
2603
2571
  return;
2604
2572
  }
2605
2573
 
2606
- this._getElement().classList.remove(CLASS_NAME_SHOW$6);
2574
+ this._getElement().classList.remove(CLASS_NAME_SHOW$5);
2607
2575
 
2608
2576
  this._emulateAnimation(() => {
2609
2577
  this.dispose();
@@ -2615,10 +2583,10 @@
2615
2583
  _getElement() {
2616
2584
  if (!this._element) {
2617
2585
  const backdrop = document.createElement('div');
2618
- backdrop.className = CLASS_NAME_BACKDROP;
2586
+ backdrop.className = this._config.className;
2619
2587
 
2620
2588
  if (this._config.isAnimated) {
2621
- backdrop.classList.add(CLASS_NAME_FADE$5);
2589
+ backdrop.classList.add(CLASS_NAME_FADE$4);
2622
2590
  }
2623
2591
 
2624
2592
  this._element = backdrop;
@@ -2628,12 +2596,12 @@
2628
2596
  }
2629
2597
 
2630
2598
  _getConfig(config) {
2631
- config = { ...Default$6,
2599
+ config = { ...Default$7,
2632
2600
  ...(typeof config === 'object' ? config : {})
2633
2601
  }; // use getElement() with the default "body" to get a fresh Element on each instantiation
2634
2602
 
2635
2603
  config.rootElement = getElement(config.rootElement);
2636
- typeCheckConfig(NAME$7, config, DefaultType$6);
2604
+ typeCheckConfig(NAME$8, config, DefaultType$7);
2637
2605
  return config;
2638
2606
  }
2639
2607
 
@@ -2642,7 +2610,7 @@
2642
2610
  return;
2643
2611
  }
2644
2612
 
2645
- this._config.rootElement.appendChild(this._getElement());
2613
+ this._config.rootElement.append(this._getElement());
2646
2614
 
2647
2615
  EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {
2648
2616
  execute(this._config.clickCallback);
@@ -2670,7 +2638,110 @@
2670
2638
 
2671
2639
  /**
2672
2640
  * --------------------------------------------------------------------------
2673
- * Bootstrap (v5.0.2): modal.js
2641
+ * Bootstrap (v5.1.3): util/focustrap.js
2642
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2643
+ * --------------------------------------------------------------------------
2644
+ */
2645
+ const Default$6 = {
2646
+ trapElement: null,
2647
+ // The element to trap focus inside of
2648
+ autofocus: true
2649
+ };
2650
+ const DefaultType$6 = {
2651
+ trapElement: 'element',
2652
+ autofocus: 'boolean'
2653
+ };
2654
+ const NAME$7 = 'focustrap';
2655
+ const DATA_KEY$7 = 'bs.focustrap';
2656
+ const EVENT_KEY$7 = `.${DATA_KEY$7}`;
2657
+ const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`;
2658
+ const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;
2659
+ const TAB_KEY = 'Tab';
2660
+ const TAB_NAV_FORWARD = 'forward';
2661
+ const TAB_NAV_BACKWARD = 'backward';
2662
+
2663
+ class FocusTrap {
2664
+ constructor(config) {
2665
+ this._config = this._getConfig(config);
2666
+ this._isActive = false;
2667
+ this._lastTabNavDirection = null;
2668
+ }
2669
+
2670
+ activate() {
2671
+ const {
2672
+ trapElement,
2673
+ autofocus
2674
+ } = this._config;
2675
+
2676
+ if (this._isActive) {
2677
+ return;
2678
+ }
2679
+
2680
+ if (autofocus) {
2681
+ trapElement.focus();
2682
+ }
2683
+
2684
+ EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop
2685
+
2686
+ EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));
2687
+ EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
2688
+ this._isActive = true;
2689
+ }
2690
+
2691
+ deactivate() {
2692
+ if (!this._isActive) {
2693
+ return;
2694
+ }
2695
+
2696
+ this._isActive = false;
2697
+ EventHandler.off(document, EVENT_KEY$7);
2698
+ } // Private
2699
+
2700
+
2701
+ _handleFocusin(event) {
2702
+ const {
2703
+ target
2704
+ } = event;
2705
+ const {
2706
+ trapElement
2707
+ } = this._config;
2708
+
2709
+ if (target === document || target === trapElement || trapElement.contains(target)) {
2710
+ return;
2711
+ }
2712
+
2713
+ const elements = SelectorEngine.focusableChildren(trapElement);
2714
+
2715
+ if (elements.length === 0) {
2716
+ trapElement.focus();
2717
+ } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
2718
+ elements[elements.length - 1].focus();
2719
+ } else {
2720
+ elements[0].focus();
2721
+ }
2722
+ }
2723
+
2724
+ _handleKeydown(event) {
2725
+ if (event.key !== TAB_KEY) {
2726
+ return;
2727
+ }
2728
+
2729
+ this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
2730
+ }
2731
+
2732
+ _getConfig(config) {
2733
+ config = { ...Default$6,
2734
+ ...(typeof config === 'object' ? config : {})
2735
+ };
2736
+ typeCheckConfig(NAME$7, config, DefaultType$6);
2737
+ return config;
2738
+ }
2739
+
2740
+ }
2741
+
2742
+ /**
2743
+ * --------------------------------------------------------------------------
2744
+ * Bootstrap (v5.1.3): modal.js
2674
2745
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2675
2746
  * --------------------------------------------------------------------------
2676
2747
  */
@@ -2700,21 +2771,20 @@
2700
2771
  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;
2701
2772
  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;
2702
2773
  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;
2703
- const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;
2704
2774
  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;
2705
- const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;
2775
+ const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;
2706
2776
  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;
2707
2777
  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;
2708
2778
  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;
2709
2779
  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
2710
2780
  const CLASS_NAME_OPEN = 'modal-open';
2711
- const CLASS_NAME_FADE$4 = 'fade';
2712
- const CLASS_NAME_SHOW$5 = 'show';
2781
+ const CLASS_NAME_FADE$3 = 'fade';
2782
+ const CLASS_NAME_SHOW$4 = 'show';
2713
2783
  const CLASS_NAME_STATIC = 'modal-static';
2784
+ const OPEN_SELECTOR$1 = '.modal.show';
2714
2785
  const SELECTOR_DIALOG = '.modal-dialog';
2715
2786
  const SELECTOR_MODAL_BODY = '.modal-body';
2716
2787
  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
2717
- const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss="modal"]';
2718
2788
  /**
2719
2789
  * ------------------------------------------------------------------------
2720
2790
  * Class Definition
@@ -2727,6 +2797,7 @@
2727
2797
  this._config = this._getConfig(config);
2728
2798
  this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
2729
2799
  this._backdrop = this._initializeBackDrop();
2800
+ this._focustrap = this._initializeFocusTrap();
2730
2801
  this._isShown = false;
2731
2802
  this._ignoreBackdropClick = false;
2732
2803
  this._isTransitioning = false;
@@ -2776,7 +2847,6 @@
2776
2847
 
2777
2848
  this._setResizeEvent();
2778
2849
 
2779
- EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));
2780
2850
  EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
2781
2851
  EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
2782
2852
  if (event.target === this._element) {
@@ -2788,11 +2858,7 @@
2788
2858
  this._showBackdrop(() => this._showElement(relatedTarget));
2789
2859
  }
2790
2860
 
2791
- hide(event) {
2792
- if (event && ['A', 'AREA'].includes(event.target.tagName)) {
2793
- event.preventDefault();
2794
- }
2795
-
2861
+ hide() {
2796
2862
  if (!this._isShown || this._isTransitioning) {
2797
2863
  return;
2798
2864
  }
@@ -2815,11 +2881,11 @@
2815
2881
 
2816
2882
  this._setResizeEvent();
2817
2883
 
2818
- EventHandler.off(document, EVENT_FOCUSIN$2);
2884
+ this._focustrap.deactivate();
2819
2885
 
2820
- this._element.classList.remove(CLASS_NAME_SHOW$5);
2886
+ this._element.classList.remove(CLASS_NAME_SHOW$4);
2821
2887
 
2822
- EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);
2888
+ EventHandler.off(this._element, EVENT_CLICK_DISMISS);
2823
2889
  EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
2824
2890
 
2825
2891
  this._queueCallback(() => this._hideModal(), this._element, isAnimated);
@@ -2830,14 +2896,9 @@
2830
2896
 
2831
2897
  this._backdrop.dispose();
2832
2898
 
2833
- super.dispose();
2834
- /**
2835
- * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
2836
- * Do not move `document` in `htmlElements` array
2837
- * It will remove `EVENT_CLICK_DATA_API` event that should remain
2838
- */
2899
+ this._focustrap.deactivate();
2839
2900
 
2840
- EventHandler.off(document, EVENT_FOCUSIN$2);
2901
+ super.dispose();
2841
2902
  }
2842
2903
 
2843
2904
  handleUpdate() {
@@ -2853,6 +2914,12 @@
2853
2914
  });
2854
2915
  }
2855
2916
 
2917
+ _initializeFocusTrap() {
2918
+ return new FocusTrap({
2919
+ trapElement: this._element
2920
+ });
2921
+ }
2922
+
2856
2923
  _getConfig(config) {
2857
2924
  config = { ...Default$5,
2858
2925
  ...Manipulator.getDataAttributes(this._element),
@@ -2869,7 +2936,7 @@
2869
2936
 
2870
2937
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
2871
2938
  // Don't move modal's DOM position
2872
- document.body.appendChild(this._element);
2939
+ document.body.append(this._element);
2873
2940
  }
2874
2941
 
2875
2942
  this._element.style.display = 'block';
@@ -2890,15 +2957,11 @@
2890
2957
  reflow(this._element);
2891
2958
  }
2892
2959
 
2893
- this._element.classList.add(CLASS_NAME_SHOW$5);
2894
-
2895
- if (this._config.focus) {
2896
- this._enforceFocus();
2897
- }
2960
+ this._element.classList.add(CLASS_NAME_SHOW$4);
2898
2961
 
2899
2962
  const transitionComplete = () => {
2900
2963
  if (this._config.focus) {
2901
- this._element.focus();
2964
+ this._focustrap.activate();
2902
2965
  }
2903
2966
 
2904
2967
  this._isTransitioning = false;
@@ -2910,16 +2973,6 @@
2910
2973
  this._queueCallback(transitionComplete, this._dialog, isAnimated);
2911
2974
  }
2912
2975
 
2913
- _enforceFocus() {
2914
- EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop
2915
-
2916
- EventHandler.on(document, EVENT_FOCUSIN$2, event => {
2917
- if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {
2918
- this._element.focus();
2919
- }
2920
- });
2921
- }
2922
-
2923
2976
  _setEscapeEvent() {
2924
2977
  if (this._isShown) {
2925
2978
  EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
@@ -2966,7 +3019,7 @@
2966
3019
  }
2967
3020
 
2968
3021
  _showBackdrop(callback) {
2969
- EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {
3022
+ EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
2970
3023
  if (this._ignoreBackdropClick) {
2971
3024
  this._ignoreBackdropClick = false;
2972
3025
  return;
@@ -2987,7 +3040,7 @@
2987
3040
  }
2988
3041
 
2989
3042
  _isAnimated() {
2990
- return this._element.classList.contains(CLASS_NAME_FADE$4);
3043
+ return this._element.classList.contains(CLASS_NAME_FADE$3);
2991
3044
  }
2992
3045
 
2993
3046
  _triggerBackdropTransition() {
@@ -3094,10 +3147,18 @@
3094
3147
  this.focus();
3095
3148
  }
3096
3149
  });
3097
- });
3150
+ }); // avoid conflict when clicking moddal toggler while another one is open
3151
+
3152
+ const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
3153
+
3154
+ if (allReadyOpen) {
3155
+ Modal.getInstance(allReadyOpen).hide();
3156
+ }
3157
+
3098
3158
  const data = Modal.getOrCreateInstance(target);
3099
3159
  data.toggle(this);
3100
3160
  });
3161
+ enableDismissTrigger(Modal);
3101
3162
  /**
3102
3163
  * ------------------------------------------------------------------------
3103
3164
  * jQuery
@@ -3109,8 +3170,8 @@
3109
3170
 
3110
3171
  /**
3111
3172
  * --------------------------------------------------------------------------
3112
- * Bootstrap (v5.0.2): offcanvas.js
3113
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3173
+ * Bootstrap (v5.1.3): offcanvas.js
3174
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3114
3175
  * --------------------------------------------------------------------------
3115
3176
  */
3116
3177
  /**
@@ -3135,17 +3196,15 @@
3135
3196
  keyboard: 'boolean',
3136
3197
  scroll: 'boolean'
3137
3198
  };
3138
- const CLASS_NAME_SHOW$4 = 'show';
3199
+ const CLASS_NAME_SHOW$3 = 'show';
3200
+ const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
3139
3201
  const OPEN_SELECTOR = '.offcanvas.show';
3140
3202
  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;
3141
3203
  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;
3142
3204
  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;
3143
3205
  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;
3144
- const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;
3145
3206
  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;
3146
- const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;
3147
3207
  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;
3148
- const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss="offcanvas"]';
3149
3208
  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
3150
3209
  /**
3151
3210
  * ------------------------------------------------------------------------
@@ -3159,6 +3218,7 @@
3159
3218
  this._config = this._getConfig(config);
3160
3219
  this._isShown = false;
3161
3220
  this._backdrop = this._initializeBackDrop();
3221
+ this._focustrap = this._initializeFocusTrap();
3162
3222
 
3163
3223
  this._addEventListeners();
3164
3224
  } // Getters
@@ -3197,8 +3257,6 @@
3197
3257
 
3198
3258
  if (!this._config.scroll) {
3199
3259
  new ScrollBarHelper().hide();
3200
-
3201
- this._enforceFocusOnElement(this._element);
3202
3260
  }
3203
3261
 
3204
3262
  this._element.removeAttribute('aria-hidden');
@@ -3207,9 +3265,13 @@
3207
3265
 
3208
3266
  this._element.setAttribute('role', 'dialog');
3209
3267
 
3210
- this._element.classList.add(CLASS_NAME_SHOW$4);
3268
+ this._element.classList.add(CLASS_NAME_SHOW$3);
3211
3269
 
3212
3270
  const completeCallBack = () => {
3271
+ if (!this._config.scroll) {
3272
+ this._focustrap.activate();
3273
+ }
3274
+
3213
3275
  EventHandler.trigger(this._element, EVENT_SHOWN$2, {
3214
3276
  relatedTarget
3215
3277
  });
@@ -3229,13 +3291,13 @@
3229
3291
  return;
3230
3292
  }
3231
3293
 
3232
- EventHandler.off(document, EVENT_FOCUSIN$1);
3294
+ this._focustrap.deactivate();
3233
3295
 
3234
3296
  this._element.blur();
3235
3297
 
3236
3298
  this._isShown = false;
3237
3299
 
3238
- this._element.classList.remove(CLASS_NAME_SHOW$4);
3300
+ this._element.classList.remove(CLASS_NAME_SHOW$3);
3239
3301
 
3240
3302
  this._backdrop.hide();
3241
3303
 
@@ -3261,8 +3323,9 @@
3261
3323
  dispose() {
3262
3324
  this._backdrop.dispose();
3263
3325
 
3326
+ this._focustrap.deactivate();
3327
+
3264
3328
  super.dispose();
3265
- EventHandler.off(document, EVENT_FOCUSIN$1);
3266
3329
  } // Private
3267
3330
 
3268
3331
 
@@ -3277,6 +3340,7 @@
3277
3340
 
3278
3341
  _initializeBackDrop() {
3279
3342
  return new Backdrop({
3343
+ className: CLASS_NAME_BACKDROP,
3280
3344
  isVisible: this._config.backdrop,
3281
3345
  isAnimated: true,
3282
3346
  rootElement: this._element.parentNode,
@@ -3284,19 +3348,13 @@
3284
3348
  });
3285
3349
  }
3286
3350
 
3287
- _enforceFocusOnElement(element) {
3288
- EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop
3289
-
3290
- EventHandler.on(document, EVENT_FOCUSIN$1, event => {
3291
- if (document !== event.target && element !== event.target && !element.contains(event.target)) {
3292
- element.focus();
3293
- }
3351
+ _initializeFocusTrap() {
3352
+ return new FocusTrap({
3353
+ trapElement: this._element
3294
3354
  });
3295
- element.focus();
3296
3355
  }
3297
3356
 
3298
3357
  _addEventListeners() {
3299
- EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());
3300
3358
  EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
3301
3359
  if (this._config.keyboard && event.key === ESCAPE_KEY) {
3302
3360
  this.hide();
@@ -3357,6 +3415,7 @@
3357
3415
  data.toggle(this);
3358
3416
  });
3359
3417
  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
3418
+ enableDismissTrigger(Offcanvas);
3360
3419
  /**
3361
3420
  * ------------------------------------------------------------------------
3362
3421
  * jQuery
@@ -3367,42 +3426,42 @@
3367
3426
 
3368
3427
  /**
3369
3428
  * --------------------------------------------------------------------------
3370
- * Bootstrap (v5.0.2): util/sanitizer.js
3429
+ * Bootstrap (v5.1.3): util/sanitizer.js
3371
3430
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3372
3431
  * --------------------------------------------------------------------------
3373
3432
  */
3374
- const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
3433
+ const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
3375
3434
  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
3376
3435
  /**
3377
3436
  * A pattern that recognizes a commonly useful subset of URLs that are safe.
3378
3437
  *
3379
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
3438
+ * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
3380
3439
  */
3381
3440
 
3382
- const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;
3441
+ const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
3383
3442
  /**
3384
3443
  * A pattern that matches safe data URLs. Only matches image, video and audio types.
3385
3444
  *
3386
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
3445
+ * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
3387
3446
  */
3388
3447
 
3389
3448
  const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
3390
3449
 
3391
- const allowedAttribute = (attr, allowedAttributeList) => {
3392
- const attrName = attr.nodeName.toLowerCase();
3450
+ const allowedAttribute = (attribute, allowedAttributeList) => {
3451
+ const attributeName = attribute.nodeName.toLowerCase();
3393
3452
 
3394
- if (allowedAttributeList.includes(attrName)) {
3395
- if (uriAttrs.has(attrName)) {
3396
- return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
3453
+ if (allowedAttributeList.includes(attributeName)) {
3454
+ if (uriAttributes.has(attributeName)) {
3455
+ return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
3397
3456
  }
3398
3457
 
3399
3458
  return true;
3400
3459
  }
3401
3460
 
3402
- const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.
3461
+ const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.
3403
3462
 
3404
3463
  for (let i = 0, len = regExp.length; i < len; i++) {
3405
- if (regExp[i].test(attrName)) {
3464
+ if (regExp[i].test(attributeName)) {
3406
3465
  return true;
3407
3466
  }
3408
3467
  }
@@ -3454,23 +3513,22 @@
3454
3513
 
3455
3514
  const domParser = new window.DOMParser();
3456
3515
  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
3457
- const allowlistKeys = Object.keys(allowList);
3458
3516
  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
3459
3517
 
3460
3518
  for (let i = 0, len = elements.length; i < len; i++) {
3461
- const el = elements[i];
3462
- const elName = el.nodeName.toLowerCase();
3519
+ const element = elements[i];
3520
+ const elementName = element.nodeName.toLowerCase();
3463
3521
 
3464
- if (!allowlistKeys.includes(elName)) {
3465
- el.remove();
3522
+ if (!Object.keys(allowList).includes(elementName)) {
3523
+ element.remove();
3466
3524
  continue;
3467
3525
  }
3468
3526
 
3469
- const attributeList = [].concat(...el.attributes);
3470
- const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);
3471
- attributeList.forEach(attr => {
3472
- if (!allowedAttribute(attr, allowedAttributes)) {
3473
- el.removeAttribute(attr.nodeName);
3527
+ const attributeList = [].concat(...element.attributes);
3528
+ const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
3529
+ attributeList.forEach(attribute => {
3530
+ if (!allowedAttribute(attribute, allowedAttributes)) {
3531
+ element.removeAttribute(attribute.nodeName);
3474
3532
  }
3475
3533
  });
3476
3534
  }
@@ -3480,7 +3538,7 @@
3480
3538
 
3481
3539
  /**
3482
3540
  * --------------------------------------------------------------------------
3483
- * Bootstrap (v5.0.2): tooltip.js
3541
+ * Bootstrap (v5.1.3): tooltip.js
3484
3542
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3485
3543
  * --------------------------------------------------------------------------
3486
3544
  */
@@ -3494,7 +3552,6 @@
3494
3552
  const DATA_KEY$4 = 'bs.tooltip';
3495
3553
  const EVENT_KEY$4 = `.${DATA_KEY$4}`;
3496
3554
  const CLASS_PREFIX$1 = 'bs-tooltip';
3497
- const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\s)${CLASS_PREFIX$1}\\S+`, 'g');
3498
3555
  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
3499
3556
  const DefaultType$3 = {
3500
3557
  animation: 'boolean',
@@ -3553,12 +3610,14 @@
3553
3610
  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,
3554
3611
  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`
3555
3612
  };
3556
- const CLASS_NAME_FADE$3 = 'fade';
3613
+ const CLASS_NAME_FADE$2 = 'fade';
3557
3614
  const CLASS_NAME_MODAL = 'modal';
3558
- const CLASS_NAME_SHOW$3 = 'show';
3615
+ const CLASS_NAME_SHOW$2 = 'show';
3559
3616
  const HOVER_STATE_SHOW = 'show';
3560
3617
  const HOVER_STATE_OUT = 'out';
3561
3618
  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
3619
+ const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
3620
+ const EVENT_MODAL_HIDE = 'hide.bs.modal';
3562
3621
  const TRIGGER_HOVER = 'hover';
3563
3622
  const TRIGGER_FOCUS = 'focus';
3564
3623
  const TRIGGER_CLICK = 'click';
@@ -3635,7 +3694,7 @@
3635
3694
  context._leave(null, context);
3636
3695
  }
3637
3696
  } else {
3638
- if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {
3697
+ if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) {
3639
3698
  this._leave(null, this);
3640
3699
 
3641
3700
  return;
@@ -3647,15 +3706,13 @@
3647
3706
 
3648
3707
  dispose() {
3649
3708
  clearTimeout(this._timeout);
3650
- EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);
3709
+ EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
3651
3710
 
3652
3711
  if (this.tip) {
3653
3712
  this.tip.remove();
3654
3713
  }
3655
3714
 
3656
- if (this._popper) {
3657
- this._popper.destroy();
3658
- }
3715
+ this._disposePopper();
3659
3716
 
3660
3717
  super.dispose();
3661
3718
  }
@@ -3675,6 +3732,15 @@
3675
3732
 
3676
3733
  if (showEvent.defaultPrevented || !isInTheDom) {
3677
3734
  return;
3735
+ } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`
3736
+ // This will be removed later in favor of a `setContent` method
3737
+
3738
+
3739
+ if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {
3740
+ this._disposePopper();
3741
+
3742
+ this.tip.remove();
3743
+ this.tip = null;
3678
3744
  }
3679
3745
 
3680
3746
  const tip = this.getTipElement();
@@ -3683,10 +3749,8 @@
3683
3749
 
3684
3750
  this._element.setAttribute('aria-describedby', tipId);
3685
3751
 
3686
- this.setContent();
3687
-
3688
3752
  if (this._config.animation) {
3689
- tip.classList.add(CLASS_NAME_FADE$3);
3753
+ tip.classList.add(CLASS_NAME_FADE$2);
3690
3754
  }
3691
3755
 
3692
3756
  const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
@@ -3701,7 +3765,7 @@
3701
3765
  Data.set(tip, this.constructor.DATA_KEY, this);
3702
3766
 
3703
3767
  if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
3704
- container.appendChild(tip);
3768
+ container.append(tip);
3705
3769
  EventHandler.trigger(this._element, this.constructor.Event.INSERTED);
3706
3770
  }
3707
3771
 
@@ -3711,8 +3775,9 @@
3711
3775
  this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
3712
3776
  }
3713
3777
 
3714
- tip.classList.add(CLASS_NAME_SHOW$3);
3715
- const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;
3778
+ tip.classList.add(CLASS_NAME_SHOW$2);
3779
+
3780
+ const customClass = this._resolvePossibleFunction(this._config.customClass);
3716
3781
 
3717
3782
  if (customClass) {
3718
3783
  tip.classList.add(...customClass.split(' '));
@@ -3738,7 +3803,7 @@
3738
3803
  }
3739
3804
  };
3740
3805
 
3741
- const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);
3806
+ const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
3742
3807
 
3743
3808
  this._queueCallback(complete, this.tip, isAnimated);
3744
3809
  }
@@ -3765,11 +3830,7 @@
3765
3830
 
3766
3831
  EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);
3767
3832
 
3768
- if (this._popper) {
3769
- this._popper.destroy();
3770
-
3771
- this._popper = null;
3772
- }
3833
+ this._disposePopper();
3773
3834
  };
3774
3835
 
3775
3836
  const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);
@@ -3778,7 +3839,7 @@
3778
3839
  return;
3779
3840
  }
3780
3841
 
3781
- tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra
3842
+ tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
3782
3843
  // empty mouseover listeners we added for iOS support
3783
3844
 
3784
3845
  if ('ontouchstart' in document.documentElement) {
@@ -3788,7 +3849,7 @@
3788
3849
  this._activeTrigger[TRIGGER_CLICK] = false;
3789
3850
  this._activeTrigger[TRIGGER_FOCUS] = false;
3790
3851
  this._activeTrigger[TRIGGER_HOVER] = false;
3791
- const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);
3852
+ const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
3792
3853
 
3793
3854
  this._queueCallback(complete, this.tip, isAnimated);
3794
3855
 
@@ -3813,14 +3874,27 @@
3813
3874
 
3814
3875
  const element = document.createElement('div');
3815
3876
  element.innerHTML = this._config.template;
3816
- this.tip = element.children[0];
3877
+ const tip = element.children[0];
3878
+ this.setContent(tip);
3879
+ tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
3880
+ this.tip = tip;
3817
3881
  return this.tip;
3818
3882
  }
3819
3883
 
3820
- setContent() {
3821
- const tip = this.getTipElement();
3822
- this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());
3823
- tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);
3884
+ setContent(tip) {
3885
+ this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);
3886
+ }
3887
+
3888
+ _sanitizeAndSetContent(template, content, selector) {
3889
+ const templateElement = SelectorEngine.findOne(selector, template);
3890
+
3891
+ if (!content && templateElement) {
3892
+ templateElement.remove();
3893
+ return;
3894
+ } // we use append for html objects to maintain js events
3895
+
3896
+
3897
+ this.setElementContent(templateElement, content);
3824
3898
  }
3825
3899
 
3826
3900
  setElementContent(element, content) {
@@ -3834,7 +3908,7 @@
3834
3908
  if (this._config.html) {
3835
3909
  if (content.parentNode !== element) {
3836
3910
  element.innerHTML = '';
3837
- element.appendChild(content);
3911
+ element.append(content);
3838
3912
  }
3839
3913
  } else {
3840
3914
  element.textContent = content.textContent;
@@ -3855,13 +3929,9 @@
3855
3929
  }
3856
3930
 
3857
3931
  getTitle() {
3858
- let title = this._element.getAttribute('data-bs-original-title');
3859
-
3860
- if (!title) {
3861
- title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;
3862
- }
3932
+ const title = this._element.getAttribute('data-bs-original-title') || this._config.title;
3863
3933
 
3864
- return title;
3934
+ return this._resolvePossibleFunction(title);
3865
3935
  }
3866
3936
 
3867
3937
  updateAttachment(attachment) {
@@ -3878,15 +3948,7 @@
3878
3948
 
3879
3949
 
3880
3950
  _initializeOnDelegatedTarget(event, context) {
3881
- const dataKey = this.constructor.DATA_KEY;
3882
- context = context || Data.get(event.delegateTarget, dataKey);
3883
-
3884
- if (!context) {
3885
- context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
3886
- Data.set(event.delegateTarget, dataKey, context);
3887
- }
3888
-
3889
- return context;
3951
+ return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
3890
3952
  }
3891
3953
 
3892
3954
  _getOffset() {
@@ -3905,6 +3967,10 @@
3905
3967
  return offset;
3906
3968
  }
3907
3969
 
3970
+ _resolvePossibleFunction(content) {
3971
+ return typeof content === 'function' ? content.call(this._element) : content;
3972
+ }
3973
+
3908
3974
  _getPopperConfig(attachment) {
3909
3975
  const defaultBsPopperConfig = {
3910
3976
  placement: attachment,
@@ -3946,7 +4012,7 @@
3946
4012
  }
3947
4013
 
3948
4014
  _addAttachmentClass(attachment) {
3949
- this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);
4015
+ this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);
3950
4016
  }
3951
4017
 
3952
4018
  _getAttachment(placement) {
@@ -3973,7 +4039,7 @@
3973
4039
  }
3974
4040
  };
3975
4041
 
3976
- EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);
4042
+ EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
3977
4043
 
3978
4044
  if (this._config.selector) {
3979
4045
  this._config = { ...this._config,
@@ -4008,7 +4074,7 @@
4008
4074
  context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
4009
4075
  }
4010
4076
 
4011
- if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {
4077
+ if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) {
4012
4078
  context._hoverState = HOVER_STATE_SHOW;
4013
4079
  return;
4014
4080
  }
@@ -4104,26 +4170,32 @@
4104
4170
  _getDelegateConfig() {
4105
4171
  const config = {};
4106
4172
 
4107
- if (this._config) {
4108
- for (const key in this._config) {
4109
- if (this.constructor.Default[key] !== this._config[key]) {
4110
- config[key] = this._config[key];
4111
- }
4173
+ for (const key in this._config) {
4174
+ if (this.constructor.Default[key] !== this._config[key]) {
4175
+ config[key] = this._config[key];
4112
4176
  }
4113
- }
4177
+ } // In the future can be replaced with:
4178
+ // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
4179
+ // `Object.fromEntries(keysWithDifferentValues)`
4180
+
4114
4181
 
4115
4182
  return config;
4116
4183
  }
4117
4184
 
4118
4185
  _cleanTipClass() {
4119
4186
  const tip = this.getTipElement();
4120
- const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);
4187
+ const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g');
4188
+ const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);
4121
4189
 
4122
4190
  if (tabClass !== null && tabClass.length > 0) {
4123
4191
  tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
4124
4192
  }
4125
4193
  }
4126
4194
 
4195
+ _getBasicClassPrefix() {
4196
+ return CLASS_PREFIX$1;
4197
+ }
4198
+
4127
4199
  _handlePopperPlacementChange(popperData) {
4128
4200
  const {
4129
4201
  state
@@ -4138,6 +4210,14 @@
4138
4210
  this._cleanTipClass();
4139
4211
 
4140
4212
  this._addAttachmentClass(this._getAttachment(state.placement));
4213
+ }
4214
+
4215
+ _disposePopper() {
4216
+ if (this._popper) {
4217
+ this._popper.destroy();
4218
+
4219
+ this._popper = null;
4220
+ }
4141
4221
  } // Static
4142
4222
 
4143
4223
 
@@ -4168,7 +4248,7 @@
4168
4248
 
4169
4249
  /**
4170
4250
  * --------------------------------------------------------------------------
4171
- * Bootstrap (v5.0.2): popover.js
4251
+ * Bootstrap (v5.1.3): popover.js
4172
4252
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4173
4253
  * --------------------------------------------------------------------------
4174
4254
  */
@@ -4182,7 +4262,6 @@
4182
4262
  const DATA_KEY$3 = 'bs.popover';
4183
4263
  const EVENT_KEY$3 = `.${DATA_KEY$3}`;
4184
4264
  const CLASS_PREFIX = 'bs-popover';
4185
- const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
4186
4265
  const Default$2 = { ...Tooltip.Default,
4187
4266
  placement: 'right',
4188
4267
  offset: [0, 8],
@@ -4205,8 +4284,6 @@
4205
4284
  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,
4206
4285
  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`
4207
4286
  };
4208
- const CLASS_NAME_FADE$2 = 'fade';
4209
- const CLASS_NAME_SHOW$2 = 'show';
4210
4287
  const SELECTOR_TITLE = '.popover-header';
4211
4288
  const SELECTOR_CONTENT = '.popover-body';
4212
4289
  /**
@@ -4238,55 +4315,19 @@
4238
4315
  return this.getTitle() || this._getContent();
4239
4316
  }
4240
4317
 
4241
- getTipElement() {
4242
- if (this.tip) {
4243
- return this.tip;
4244
- }
4245
-
4246
- this.tip = super.getTipElement();
4247
-
4248
- if (!this.getTitle()) {
4249
- SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();
4250
- }
4251
-
4252
- if (!this._getContent()) {
4253
- SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();
4254
- }
4255
-
4256
- return this.tip;
4257
- }
4258
-
4259
- setContent() {
4260
- const tip = this.getTipElement(); // we use append for html objects to maintain js events
4261
-
4262
- this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());
4318
+ setContent(tip) {
4319
+ this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
4263
4320
 
4264
- let content = this._getContent();
4265
-
4266
- if (typeof content === 'function') {
4267
- content = content.call(this._element);
4268
- }
4269
-
4270
- this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);
4271
- tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
4321
+ this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
4272
4322
  } // Private
4273
4323
 
4274
4324
 
4275
- _addAttachmentClass(attachment) {
4276
- this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
4277
- }
4278
-
4279
4325
  _getContent() {
4280
- return this._element.getAttribute('data-bs-content') || this._config.content;
4326
+ return this._resolvePossibleFunction(this._config.content);
4281
4327
  }
4282
4328
 
4283
- _cleanTipClass() {
4284
- const tip = this.getTipElement();
4285
- const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
4286
-
4287
- if (tabClass !== null && tabClass.length > 0) {
4288
- tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
4289
- }
4329
+ _getBasicClassPrefix() {
4330
+ return CLASS_PREFIX;
4290
4331
  } // Static
4291
4332
 
4292
4333
 
@@ -4317,7 +4358,7 @@
4317
4358
 
4318
4359
  /**
4319
4360
  * --------------------------------------------------------------------------
4320
- * Bootstrap (v5.0.2): scrollspy.js
4361
+ * Bootstrap (v5.1.3): scrollspy.js
4321
4362
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4322
4363
  * --------------------------------------------------------------------------
4323
4364
  */
@@ -4351,6 +4392,7 @@
4351
4392
  const SELECTOR_NAV_LINKS = '.nav-link';
4352
4393
  const SELECTOR_NAV_ITEMS = '.nav-item';
4353
4394
  const SELECTOR_LIST_ITEMS = '.list-group-item';
4395
+ const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
4354
4396
  const SELECTOR_DROPDOWN$1 = '.dropdown';
4355
4397
  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
4356
4398
  const METHOD_OFFSET = 'offset';
@@ -4366,7 +4408,6 @@
4366
4408
  super(element);
4367
4409
  this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
4368
4410
  this._config = this._getConfig(config);
4369
- this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;
4370
4411
  this._offsets = [];
4371
4412
  this._targets = [];
4372
4413
  this._activeTarget = null;
@@ -4394,7 +4435,7 @@
4394
4435
  this._offsets = [];
4395
4436
  this._targets = [];
4396
4437
  this._scrollHeight = this._getScrollHeight();
4397
- const targets = SelectorEngine.find(this._selector);
4438
+ const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);
4398
4439
  targets.map(element => {
4399
4440
  const targetSelector = getSelectorFromElement(element);
4400
4441
  const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
@@ -4426,20 +4467,7 @@
4426
4467
  ...Manipulator.getDataAttributes(this._element),
4427
4468
  ...(typeof config === 'object' && config ? config : {})
4428
4469
  };
4429
-
4430
- if (typeof config.target !== 'string' && isElement(config.target)) {
4431
- let {
4432
- id
4433
- } = config.target;
4434
-
4435
- if (!id) {
4436
- id = getUID(NAME$2);
4437
- config.target.id = id;
4438
- }
4439
-
4440
- config.target = `#${id}`;
4441
- }
4442
-
4470
+ config.target = getElement(config.target) || document.documentElement;
4443
4471
  typeCheckConfig(NAME$2, config, DefaultType$1);
4444
4472
  return config;
4445
4473
  }
@@ -4499,16 +4527,13 @@
4499
4527
 
4500
4528
  this._clear();
4501
4529
 
4502
- const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
4503
-
4504
- const link = SelectorEngine.findOne(queries.join(','));
4530
+ const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
4531
+ const link = SelectorEngine.findOne(queries.join(','), this._config.target);
4532
+ link.classList.add(CLASS_NAME_ACTIVE$1);
4505
4533
 
4506
4534
  if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
4507
4535
  SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);
4508
- link.classList.add(CLASS_NAME_ACTIVE$1);
4509
4536
  } else {
4510
- // Set triggered link as active
4511
- link.classList.add(CLASS_NAME_ACTIVE$1);
4512
4537
  SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {
4513
4538
  // Set triggered links parents as active
4514
4539
  // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
@@ -4526,7 +4551,7 @@
4526
4551
  }
4527
4552
 
4528
4553
  _clear() {
4529
- SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));
4554
+ SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));
4530
4555
  } // Static
4531
4556
 
4532
4557
 
@@ -4568,7 +4593,7 @@
4568
4593
 
4569
4594
  /**
4570
4595
  * --------------------------------------------------------------------------
4571
- * Bootstrap (v5.0.2): tab.js
4596
+ * Bootstrap (v5.1.3): tab.js
4572
4597
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4573
4598
  * --------------------------------------------------------------------------
4574
4599
  */
@@ -4766,7 +4791,7 @@
4766
4791
 
4767
4792
  /**
4768
4793
  * --------------------------------------------------------------------------
4769
- * Bootstrap (v5.0.2): toast.js
4794
+ * Bootstrap (v5.1.3): toast.js
4770
4795
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4771
4796
  * --------------------------------------------------------------------------
4772
4797
  */
@@ -4779,7 +4804,6 @@
4779
4804
  const NAME = 'toast';
4780
4805
  const DATA_KEY = 'bs.toast';
4781
4806
  const EVENT_KEY = `.${DATA_KEY}`;
4782
- const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
4783
4807
  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
4784
4808
  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
4785
4809
  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
@@ -4789,7 +4813,8 @@
4789
4813
  const EVENT_SHOW = `show${EVENT_KEY}`;
4790
4814
  const EVENT_SHOWN = `shown${EVENT_KEY}`;
4791
4815
  const CLASS_NAME_FADE = 'fade';
4792
- const CLASS_NAME_HIDE = 'hide';
4816
+ const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
4817
+
4793
4818
  const CLASS_NAME_SHOW = 'show';
4794
4819
  const CLASS_NAME_SHOWING = 'showing';
4795
4820
  const DefaultType = {
@@ -4802,7 +4827,6 @@
4802
4827
  autohide: true,
4803
4828
  delay: 5000
4804
4829
  };
4805
- const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="toast"]';
4806
4830
  /**
4807
4831
  * ------------------------------------------------------------------------
4808
4832
  * Class Definition
@@ -4850,17 +4874,18 @@
4850
4874
  const complete = () => {
4851
4875
  this._element.classList.remove(CLASS_NAME_SHOWING);
4852
4876
 
4853
- this._element.classList.add(CLASS_NAME_SHOW);
4854
-
4855
4877
  EventHandler.trigger(this._element, EVENT_SHOWN);
4856
4878
 
4857
4879
  this._maybeScheduleHide();
4858
4880
  };
4859
4881
 
4860
- this._element.classList.remove(CLASS_NAME_HIDE);
4882
+ this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
4883
+
4861
4884
 
4862
4885
  reflow(this._element);
4863
4886
 
4887
+ this._element.classList.add(CLASS_NAME_SHOW);
4888
+
4864
4889
  this._element.classList.add(CLASS_NAME_SHOWING);
4865
4890
 
4866
4891
  this._queueCallback(complete, this._element, this._config.animation);
@@ -4878,12 +4903,17 @@
4878
4903
  }
4879
4904
 
4880
4905
  const complete = () => {
4881
- this._element.classList.add(CLASS_NAME_HIDE);
4906
+ this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
4907
+
4908
+
4909
+ this._element.classList.remove(CLASS_NAME_SHOWING);
4910
+
4911
+ this._element.classList.remove(CLASS_NAME_SHOW);
4882
4912
 
4883
4913
  EventHandler.trigger(this._element, EVENT_HIDDEN);
4884
4914
  };
4885
4915
 
4886
- this._element.classList.remove(CLASS_NAME_SHOW);
4916
+ this._element.classList.add(CLASS_NAME_SHOWING);
4887
4917
 
4888
4918
  this._queueCallback(complete, this._element, this._config.animation);
4889
4919
  }
@@ -4951,7 +4981,6 @@
4951
4981
  }
4952
4982
 
4953
4983
  _setListeners() {
4954
- EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());
4955
4984
  EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
4956
4985
  EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
4957
4986
  EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
@@ -4979,6 +5008,8 @@
4979
5008
  }
4980
5009
 
4981
5010
  }
5011
+
5012
+ enableDismissTrigger(Toast);
4982
5013
  /**
4983
5014
  * ------------------------------------------------------------------------
4984
5015
  * jQuery
@@ -4986,16 +5017,15 @@
4986
5017
  * add .Toast to jQuery only if jQuery is present
4987
5018
  */
4988
5019
 
4989
-
4990
5020
  defineJQueryPlugin(Toast);
4991
5021
 
4992
5022
  /**
4993
5023
  * --------------------------------------------------------------------------
4994
- * Bootstrap (v5.0.2): index.umd.js
5024
+ * Bootstrap (v5.1.3): index.umd.js
4995
5025
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4996
5026
  * --------------------------------------------------------------------------
4997
5027
  */
4998
- var index_umd = {
5028
+ const index_umd = {
4999
5029
  Alert,
5000
5030
  Button,
5001
5031
  Carousel,
@@ -5012,4 +5042,4 @@
5012
5042
 
5013
5043
  return index_umd;
5014
5044
 
5015
- })));
5045
+ }));