@coreui/coreui 4.0.5 → 4.1.2

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 (143) hide show
  1. package/README.md +4 -7
  2. package/dist/css/coreui-grid.css +254 -205
  3. package/dist/css/coreui-grid.css.map +1 -1
  4. package/dist/css/coreui-grid.min.css +2 -2
  5. package/dist/css/coreui-grid.min.css.map +1 -1
  6. package/dist/css/coreui-grid.rtl.css +255 -206
  7. package/dist/css/coreui-grid.rtl.css.map +1 -1
  8. package/dist/css/coreui-grid.rtl.min.css +3 -3
  9. package/dist/css/coreui-grid.rtl.min.css.map +1 -1
  10. package/dist/css/coreui-reboot.css +63 -8
  11. package/dist/css/coreui-reboot.css.map +1 -1
  12. package/dist/css/coreui-reboot.min.css +2 -2
  13. package/dist/css/coreui-reboot.min.css.map +1 -1
  14. package/dist/css/coreui-reboot.rtl.css +64 -9
  15. package/dist/css/coreui-reboot.rtl.css.map +1 -1
  16. package/dist/css/coreui-reboot.rtl.min.css +3 -3
  17. package/dist/css/coreui-reboot.rtl.min.css.map +1 -1
  18. package/dist/css/coreui-utilities.css +181 -81
  19. package/dist/css/coreui-utilities.css.map +1 -1
  20. package/dist/css/coreui-utilities.min.css +2 -2
  21. package/dist/css/coreui-utilities.min.css.map +1 -1
  22. package/dist/css/coreui-utilities.rtl.css +182 -82
  23. package/dist/css/coreui-utilities.rtl.css.map +1 -1
  24. package/dist/css/coreui-utilities.rtl.min.css +3 -3
  25. package/dist/css/coreui-utilities.rtl.min.css.map +1 -1
  26. package/dist/css/coreui.css +713 -346
  27. package/dist/css/coreui.css.map +1 -1
  28. package/dist/css/coreui.min.css +2 -2
  29. package/dist/css/coreui.min.css.map +1 -1
  30. package/dist/css/coreui.rtl.css +699 -347
  31. package/dist/css/coreui.rtl.css.map +1 -1
  32. package/dist/css/coreui.rtl.min.css +3 -3
  33. package/dist/css/coreui.rtl.min.css.map +1 -1
  34. package/dist/js/coreui.bundle.js +851 -746
  35. package/dist/js/coreui.bundle.js.map +1 -1
  36. package/dist/js/coreui.bundle.min.js +3 -3
  37. package/dist/js/coreui.bundle.min.js.map +1 -1
  38. package/dist/js/coreui.esm.js +704 -644
  39. package/dist/js/coreui.esm.js.map +1 -1
  40. package/dist/js/coreui.esm.min.js +3 -3
  41. package/dist/js/coreui.esm.min.js.map +1 -1
  42. package/dist/js/coreui.js +714 -656
  43. package/dist/js/coreui.js.map +1 -1
  44. package/dist/js/coreui.min.js +3 -3
  45. package/dist/js/coreui.min.js.map +1 -1
  46. package/js/dist/alert.js +82 -49
  47. package/js/dist/alert.js.map +1 -1
  48. package/js/dist/base-component.js +26 -18
  49. package/js/dist/base-component.js.map +1 -1
  50. package/js/dist/button.js +23 -13
  51. package/js/dist/button.js.map +1 -1
  52. package/js/dist/carousel.js +95 -50
  53. package/js/dist/carousel.js.map +1 -1
  54. package/js/dist/collapse.js +125 -139
  55. package/js/dist/collapse.js.map +1 -1
  56. package/js/dist/dom/data.js +6 -6
  57. package/js/dist/dom/data.js.map +1 -1
  58. package/js/dist/dom/event-handler.js +15 -6
  59. package/js/dist/dom/event-handler.js.map +1 -1
  60. package/js/dist/dom/manipulator.js +7 -7
  61. package/js/dist/dom/manipulator.js.map +1 -1
  62. package/js/dist/dom/selector-engine.js +74 -9
  63. package/js/dist/dom/selector-engine.js.map +1 -1
  64. package/js/dist/dropdown.js +125 -112
  65. package/js/dist/dropdown.js.map +1 -1
  66. package/js/dist/modal.js +270 -93
  67. package/js/dist/modal.js.map +1 -1
  68. package/js/dist/offcanvas.js +231 -62
  69. package/js/dist/offcanvas.js.map +1 -1
  70. package/js/dist/popover.js +29 -59
  71. package/js/dist/popover.js.map +1 -1
  72. package/js/dist/scrollspy.js +45 -35
  73. package/js/dist/scrollspy.js.map +1 -1
  74. package/js/dist/tab.js +45 -23
  75. package/js/dist/tab.js.map +1 -1
  76. package/js/dist/toast.js +132 -34
  77. package/js/dist/toast.js.map +1 -1
  78. package/js/dist/tooltip.js +127 -109
  79. package/js/dist/tooltip.js.map +1 -1
  80. package/js/src/alert.js +21 -47
  81. package/js/src/base-component.js +3 -3
  82. package/js/src/button.js +1 -1
  83. package/js/src/carousel.js +10 -4
  84. package/js/src/collapse.js +66 -119
  85. package/js/src/dom/data.js +1 -1
  86. package/js/src/dom/event-handler.js +1 -2
  87. package/js/src/dom/manipulator.js +3 -3
  88. package/js/src/dom/selector-engine.js +18 -1
  89. package/js/src/dropdown.js +53 -68
  90. package/js/src/modal.js +24 -35
  91. package/js/src/navigation.js +1 -1
  92. package/js/src/offcanvas.js +16 -18
  93. package/js/src/popover.js +7 -49
  94. package/js/src/scrollspy.js +1 -1
  95. package/js/src/sidebar.js +21 -27
  96. package/js/src/tab.js +1 -1
  97. package/js/src/toast.js +11 -11
  98. package/js/src/tooltip.js +66 -50
  99. package/js/src/util/backdrop.js +6 -5
  100. package/js/src/util/component-functions.js +34 -0
  101. package/js/src/util/focustrap.js +105 -0
  102. package/js/src/util/index.js +39 -11
  103. package/js/src/util/sanitizer.js +21 -22
  104. package/js/src/util/scrollbar.js +1 -1
  105. package/package.json +54 -55
  106. package/scss/_buttons.scss +1 -2
  107. package/scss/_card.scss +2 -1
  108. package/scss/_dropdown.scss +1 -1
  109. package/scss/_functions.scss +51 -12
  110. package/scss/_grid.scss +0 -23
  111. package/scss/_helpers.scss +2 -0
  112. package/scss/_mixins.scss +1 -0
  113. package/scss/_modal.scss +2 -12
  114. package/scss/_nav.scss +1 -2
  115. package/scss/_navbar.scss +30 -1
  116. package/scss/_offcanvas.scss +6 -2
  117. package/scss/_placeholders.scss +51 -0
  118. package/scss/_reboot.scss +12 -8
  119. package/scss/_root.scss +36 -7
  120. package/scss/_tables.scss +9 -5
  121. package/scss/_toasts.scss +2 -2
  122. package/scss/_transitions.scss +6 -0
  123. package/scss/_utilities.scss +31 -8
  124. package/scss/_variables.scss +188 -13
  125. package/scss/coreui-grid.rtl.scss +1 -1
  126. package/scss/coreui-grid.scss +3 -1
  127. package/scss/coreui-reboot.rtl.scss +1 -1
  128. package/scss/coreui-reboot.scss +2 -4
  129. package/scss/coreui-utilities.rtl.scss +1 -1
  130. package/scss/coreui-utilities.scss +1 -1
  131. package/scss/coreui.rtl.scss +1 -1
  132. package/scss/coreui.scss +2 -1
  133. package/scss/forms/_form-control.scss +1 -1
  134. package/scss/forms/_form-select.scss +2 -0
  135. package/scss/helpers/_stacks.scss +15 -0
  136. package/scss/helpers/_vr.scss +8 -0
  137. package/scss/mixins/_backdrop.scss +14 -0
  138. package/scss/mixins/_grid.scss +26 -7
  139. package/scss/mixins/_ltr-rtl.scss +21 -0
  140. package/scss/mixins/_reset-text.scss +1 -1
  141. package/scss/mixins/_utilities.scss +28 -33
  142. package/scss/mixins/_visually-hidden.scss +1 -1
  143. package/scss/sidebar/_sidebar-nav.scss +1 -0
package/dist/js/coreui.js CHANGED
@@ -1,130 +1,53 @@
1
1
  /*!
2
- * CoreUI v4.0.5 (https://coreui.io)
3
- * Copyright 2021 The CoreUI Team (https://github.com/orgs/coreui/people)
2
+ * CoreUI v4.1.2 (https://coreui.io)
3
+ * Copyright 2022 The CoreUI Team (https://github.com/orgs/coreui/people)
4
4
  * Licensed under MIT (https://coreui.io)
5
5
  */
6
6
  (function (global, factory) {
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.coreui = 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, { [Symbol.toStringTag]: { value: 'Module' } });
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);
33
-
34
- /**
35
- * --------------------------------------------------------------------------
36
- * CoreUI (v4.0.5): dom/selector-engine.js
37
- * Licensed under MIT (https://coreui.io/license)
38
- *
39
- * This component is a modified version of the Bootstrap's dom/selector-engine.js
40
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
41
- * --------------------------------------------------------------------------
42
- */
43
-
44
- /**
45
- * ------------------------------------------------------------------------
46
- * Constants
47
- * ------------------------------------------------------------------------
48
- */
49
- const NODE_TEXT = 3;
50
- const SelectorEngine = {
51
- find(selector, element = document.documentElement) {
52
- return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
53
- },
54
-
55
- findOne(selector, element = document.documentElement) {
56
- return Element.prototype.querySelector.call(element, selector);
57
- },
58
-
59
- children(element, selector) {
60
- return [].concat(...element.children).filter(child => child.matches(selector));
61
- },
62
-
63
- parents(element, selector) {
64
- const parents = [];
65
- let ancestor = element.parentNode;
66
-
67
- while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
68
- if (ancestor.matches(selector)) {
69
- parents.push(ancestor);
70
- }
71
-
72
- ancestor = ancestor.parentNode;
73
- }
74
-
75
- return parents;
76
- },
77
-
78
- prev(element, selector) {
79
- let previous = element.previousElementSibling;
80
-
81
- while (previous) {
82
- if (previous.matches(selector)) {
83
- return [previous];
84
- }
85
-
86
- previous = previous.previousElementSibling;
87
- }
88
-
89
- return [];
90
- },
91
-
92
- next(element, selector) {
93
- let next = element.nextElementSibling;
94
-
95
- while (next) {
96
- if (next.matches(selector)) {
97
- return [next];
98
- }
99
-
100
- next = next.nextElementSibling;
101
- }
102
-
103
- return [];
104
- }
105
-
106
- };
30
+ const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
107
31
 
108
32
  /**
109
33
  * --------------------------------------------------------------------------
110
- * CoreUI (v4.0.5): alert.js
34
+ * CoreUI (v4.1.2): alert.js
111
35
  * Licensed under MIT (https://coreui.io/license)
112
36
  *
113
37
  * This component is a modified version of the Bootstrap's util/index.js
114
38
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
115
39
  * --------------------------------------------------------------------------
116
40
  */
117
-
118
41
  const MAX_UID = 1000000;
119
42
  const MILLISECONDS_MULTIPLIER = 1000;
120
43
  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
121
44
 
122
- const toType = obj => {
123
- if (obj === null || obj === undefined) {
124
- return `${obj}`;
45
+ const toType = object => {
46
+ if (object === null || object === undefined) {
47
+ return `${object}`;
125
48
  }
126
49
 
127
- return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
50
+ return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
128
51
  };
129
52
  /**
130
53
  * --------------------------------------------------------------------------
@@ -226,7 +149,7 @@
226
149
  }
227
150
 
228
151
  if (typeof obj === 'string' && obj.length > 0) {
229
- return SelectorEngine.findOne(obj);
152
+ return document.querySelector(obj);
230
153
  }
231
154
 
232
155
  return null;
@@ -249,7 +172,27 @@
249
172
  return false;
250
173
  }
251
174
 
252
- return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
175
+ const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed
176
+
177
+ const closedDetails = element.closest('details:not([open])');
178
+
179
+ if (!closedDetails) {
180
+ return elementIsVisible;
181
+ }
182
+
183
+ if (closedDetails !== element) {
184
+ const summary = element.closest('summary');
185
+
186
+ if (summary && summary.parentNode !== closedDetails) {
187
+ return false;
188
+ }
189
+
190
+ if (summary === null) {
191
+ return false;
192
+ }
193
+ }
194
+
195
+ return elementIsVisible;
253
196
  };
254
197
 
255
198
  const isDisabled = element => {
@@ -292,8 +235,20 @@
292
235
  };
293
236
 
294
237
  const noop = () => {};
238
+ /**
239
+ * Trick to restart an element's animation
240
+ *
241
+ * @param {HTMLElement} element
242
+ * @return void
243
+ *
244
+ * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
245
+ */
295
246
 
296
- const reflow = element => element.offsetHeight;
247
+
248
+ const reflow = element => {
249
+ // eslint-disable-next-line no-unused-expressions
250
+ element.offsetHeight;
251
+ };
297
252
 
298
253
  const getjQuery = () => {
299
254
  const {
@@ -410,7 +365,7 @@
410
365
 
411
366
  /**
412
367
  * --------------------------------------------------------------------------
413
- * CoreUI (v4.0.5): dom/event-handler.js
368
+ * CoreUI (v4.1.2): dom/event-handler.js
414
369
  * Licensed under MIT (https://coreui.io/license)
415
370
  *
416
371
  * This component is a modified version of the Bootstrap's dom/event-handler.js
@@ -476,7 +431,6 @@
476
431
  event.delegateTarget = target;
477
432
 
478
433
  if (handler.oneOff) {
479
- // eslint-disable-next-line unicorn/consistent-destructuring
480
434
  EventHandler.off(element, event.type, selector, fn);
481
435
  }
482
436
 
@@ -702,7 +656,7 @@
702
656
 
703
657
  /**
704
658
  * --------------------------------------------------------------------------
705
- * CoreUI (v4.0.5): dom/data.js
659
+ * CoreUI (v4.1.2): dom/data.js
706
660
  * Licensed under MIT (https://coreui.io/license)
707
661
  *
708
662
  * This component is a modified version of the Bootstrap's dom/data.js
@@ -716,7 +670,7 @@
716
670
  * ------------------------------------------------------------------------
717
671
  */
718
672
  const elementMap = new Map();
719
- var Data = {
673
+ const Data = {
720
674
  set(element, key, instance) {
721
675
  if (!elementMap.has(element)) {
722
676
  elementMap.set(element, new Map());
@@ -759,7 +713,7 @@
759
713
 
760
714
  /**
761
715
  * --------------------------------------------------------------------------
762
- * CoreUI (v4.0.5): alert.js
716
+ * CoreUI (v4.1.2): alert.js
763
717
  * Licensed under MIT (https://coreui.io/license)
764
718
  *
765
719
  * This component is a modified version of the Bootstrap's base-component.js
@@ -772,7 +726,7 @@
772
726
  * ------------------------------------------------------------------------
773
727
  */
774
728
 
775
- const VERSION = '4.0.5';
729
+ const VERSION = '4.1.2';
776
730
 
777
731
  class BaseComponent {
778
732
  constructor(element) {
@@ -801,7 +755,7 @@
801
755
 
802
756
 
803
757
  static getInstance(element) {
804
- return Data.get(element, this.DATA_KEY);
758
+ return Data.get(getElement(element), this.DATA_KEY);
805
759
  }
806
760
 
807
761
  static getOrCreateInstance(element, config = {}) {
@@ -828,7 +782,33 @@
828
782
 
829
783
  /**
830
784
  * --------------------------------------------------------------------------
831
- * CoreUI (v4.0.5): alert.js
785
+ * Bootstrap (v5.1.3): util/component-functions.js
786
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
787
+ * --------------------------------------------------------------------------
788
+ */
789
+
790
+ const enableDismissTrigger = (component, method = 'hide') => {
791
+ const clickEvent = `click.dismiss${component.EVENT_KEY}`;
792
+ const name = component.NAME;
793
+ EventHandler.on(document, clickEvent, `[data-coreui-dismiss="${name}"]`, function (event) {
794
+ if (['A', 'AREA'].includes(this.tagName)) {
795
+ event.preventDefault();
796
+ }
797
+
798
+ if (isDisabled(this)) {
799
+ return;
800
+ }
801
+
802
+ const target = getElementFromSelector(this) || this.closest(`.${name}`);
803
+ const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
804
+
805
+ instance[method]();
806
+ });
807
+ };
808
+
809
+ /**
810
+ * --------------------------------------------------------------------------
811
+ * CoreUI (v4.1.2): alert.js
832
812
  * Licensed under MIT (https://coreui.io/license)
833
813
  *
834
814
  * This component is a modified version of the Bootstrap's alert.js
@@ -841,17 +821,13 @@
841
821
  * ------------------------------------------------------------------------
842
822
  */
843
823
 
844
- const NAME$e = 'alert';
845
- const DATA_KEY$d = 'coreui.alert';
846
- const EVENT_KEY$d = `.${DATA_KEY$d}`;
847
- const DATA_API_KEY$a = '.data-api';
848
- const SELECTOR_DISMISS = '[data-coreui-dismiss="alert"]';
849
- const EVENT_CLOSE = `close${EVENT_KEY$d}`;
850
- const EVENT_CLOSED = `closed${EVENT_KEY$d}`;
851
- const EVENT_CLICK_DATA_API$9 = `click${EVENT_KEY$d}${DATA_API_KEY$a}`;
852
- const CLASS_NAME_ALERT = 'alert';
853
- const CLASS_NAME_FADE$7 = 'fade';
854
- const CLASS_NAME_SHOW$b = 'show';
824
+ const NAME$f = 'alert';
825
+ const DATA_KEY$e = 'coreui.alert';
826
+ const EVENT_KEY$e = `.${DATA_KEY$e}`;
827
+ const EVENT_CLOSE = `close${EVENT_KEY$e}`;
828
+ const EVENT_CLOSED = `closed${EVENT_KEY$e}`;
829
+ const CLASS_NAME_FADE$5 = 'fade';
830
+ const CLASS_NAME_SHOW$a = 'show';
855
831
  /**
856
832
  * ------------------------------------------------------------------------
857
833
  * Class Definition
@@ -861,41 +837,30 @@
861
837
  class Alert extends BaseComponent {
862
838
  // Getters
863
839
  static get NAME() {
864
- return NAME$e;
840
+ return NAME$f;
865
841
  } // Public
866
842
 
867
843
 
868
- close(element) {
869
- const rootElement = element ? this._getRootElement(element) : this._element;
870
-
871
- const customEvent = this._triggerCloseEvent(rootElement);
844
+ close() {
845
+ const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
872
846
 
873
- if (customEvent === null || customEvent.defaultPrevented) {
847
+ if (closeEvent.defaultPrevented) {
874
848
  return;
875
849
  }
876
850
 
877
- this._removeElement(rootElement);
878
- } // Private
851
+ this._element.classList.remove(CLASS_NAME_SHOW$a);
879
852
 
853
+ const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
880
854
 
881
- _getRootElement(element) {
882
- return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);
883
- }
884
-
885
- _triggerCloseEvent(element) {
886
- return EventHandler.trigger(element, EVENT_CLOSE);
887
- }
855
+ this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
856
+ } // Private
888
857
 
889
- _removeElement(element) {
890
- element.classList.remove(CLASS_NAME_SHOW$b);
891
- const isAnimated = element.classList.contains(CLASS_NAME_FADE$7);
892
858
 
893
- this._queueCallback(() => this._destroyElement(element), element, isAnimated);
894
- }
859
+ _destroyElement() {
860
+ this._element.remove();
895
861
 
896
- _destroyElement(element) {
897
- element.remove();
898
- EventHandler.trigger(element, EVENT_CLOSED);
862
+ EventHandler.trigger(this._element, EVENT_CLOSED);
863
+ this.dispose();
899
864
  } // Static
900
865
 
901
866
 
@@ -903,20 +868,16 @@
903
868
  return this.each(function () {
904
869
  const data = Alert.getOrCreateInstance(this);
905
870
 
906
- if (config === 'close') {
907
- data[config](this);
871
+ if (typeof config !== 'string') {
872
+ return;
908
873
  }
909
- });
910
- }
911
874
 
912
- static handleDismiss(alertInstance) {
913
- return function (event) {
914
- if (event) {
915
- event.preventDefault();
875
+ if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
876
+ throw new TypeError(`No method named "${config}"`);
916
877
  }
917
878
 
918
- alertInstance.close(this);
919
- };
879
+ data[config](this);
880
+ });
920
881
  }
921
882
 
922
883
  }
@@ -927,7 +888,7 @@
927
888
  */
928
889
 
929
890
 
930
- EventHandler.on(document, EVENT_CLICK_DATA_API$9, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));
891
+ enableDismissTrigger(Alert, 'close');
931
892
  /**
932
893
  * ------------------------------------------------------------------------
933
894
  * jQuery
@@ -939,7 +900,7 @@
939
900
 
940
901
  /**
941
902
  * --------------------------------------------------------------------------
942
- * CoreUI (v4.0.5): alert.js
903
+ * CoreUI (v4.1.2): alert.js
943
904
  * Licensed under MIT (https://coreui.io/license)
944
905
  *
945
906
  * This component is a modified version of the Bootstrap's button.js
@@ -952,13 +913,13 @@
952
913
  * ------------------------------------------------------------------------
953
914
  */
954
915
 
955
- const NAME$d = 'button';
956
- const DATA_KEY$c = 'coreui.button';
957
- const EVENT_KEY$c = `.${DATA_KEY$c}`;
916
+ const NAME$e = 'button';
917
+ const DATA_KEY$d = 'coreui.button';
918
+ const EVENT_KEY$d = `.${DATA_KEY$d}`;
958
919
  const DATA_API_KEY$9 = '.data-api';
959
920
  const CLASS_NAME_ACTIVE$4 = 'active';
960
921
  const SELECTOR_DATA_TOGGLE$6 = '[data-coreui-toggle="button"]';
961
- const EVENT_CLICK_DATA_API$8 = `click${EVENT_KEY$c}${DATA_API_KEY$9}`;
922
+ const EVENT_CLICK_DATA_API$8 = `click${EVENT_KEY$d}${DATA_API_KEY$9}`;
962
923
  /**
963
924
  * ------------------------------------------------------------------------
964
925
  * Class Definition
@@ -968,7 +929,7 @@
968
929
  class Button extends BaseComponent {
969
930
  // Getters
970
931
  static get NAME() {
971
- return NAME$d;
932
+ return NAME$e;
972
933
  } // Public
973
934
 
974
935
 
@@ -1013,7 +974,7 @@
1013
974
 
1014
975
  /**
1015
976
  * --------------------------------------------------------------------------
1016
- * CoreUI (v4.0.5): dom/manipulator.js
977
+ * CoreUI (v4.1.2): dom/manipulator.js
1017
978
  * Licensed under MIT (https://coreui.io/license)
1018
979
  *
1019
980
  * This component is a modified version of the Bootstrap's dom/manipulator.js
@@ -1074,8 +1035,8 @@
1074
1035
  offset(element) {
1075
1036
  const rect = element.getBoundingClientRect();
1076
1037
  return {
1077
- top: rect.top + document.body.scrollTop,
1078
- left: rect.left + document.body.scrollLeft
1038
+ top: rect.top + window.pageYOffset,
1039
+ left: rect.left + window.pageXOffset
1079
1040
  };
1080
1041
  },
1081
1042
 
@@ -1090,7 +1051,80 @@
1090
1051
 
1091
1052
  /**
1092
1053
  * --------------------------------------------------------------------------
1093
- * CoreUI (v4.0.5): carousel.js
1054
+ * CoreUI (v4.1.2): dom/selector-engine.js
1055
+ * Licensed under MIT (https://coreui.io/license)
1056
+ *
1057
+ * This component is a modified version of the Bootstrap's dom/selector-engine.js
1058
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1059
+ * --------------------------------------------------------------------------
1060
+ */
1061
+ const NODE_TEXT = 3;
1062
+ const SelectorEngine = {
1063
+ find(selector, element = document.documentElement) {
1064
+ return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
1065
+ },
1066
+
1067
+ findOne(selector, element = document.documentElement) {
1068
+ return Element.prototype.querySelector.call(element, selector);
1069
+ },
1070
+
1071
+ children(element, selector) {
1072
+ return [].concat(...element.children).filter(child => child.matches(selector));
1073
+ },
1074
+
1075
+ parents(element, selector) {
1076
+ const parents = [];
1077
+ let ancestor = element.parentNode;
1078
+
1079
+ while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
1080
+ if (ancestor.matches(selector)) {
1081
+ parents.push(ancestor);
1082
+ }
1083
+
1084
+ ancestor = ancestor.parentNode;
1085
+ }
1086
+
1087
+ return parents;
1088
+ },
1089
+
1090
+ prev(element, selector) {
1091
+ let previous = element.previousElementSibling;
1092
+
1093
+ while (previous) {
1094
+ if (previous.matches(selector)) {
1095
+ return [previous];
1096
+ }
1097
+
1098
+ previous = previous.previousElementSibling;
1099
+ }
1100
+
1101
+ return [];
1102
+ },
1103
+
1104
+ next(element, selector) {
1105
+ let next = element.nextElementSibling;
1106
+
1107
+ while (next) {
1108
+ if (next.matches(selector)) {
1109
+ return [next];
1110
+ }
1111
+
1112
+ next = next.nextElementSibling;
1113
+ }
1114
+
1115
+ return [];
1116
+ },
1117
+
1118
+ focusableChildren(element) {
1119
+ const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
1120
+ return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
1121
+ }
1122
+
1123
+ };
1124
+
1125
+ /**
1126
+ * --------------------------------------------------------------------------
1127
+ * CoreUI (v4.1.2): carousel.js
1094
1128
  * Licensed under MIT (https://coreui.io/license)
1095
1129
  *
1096
1130
  * This component is a modified version of the Bootstrap's carousel.js
@@ -1103,16 +1137,16 @@
1103
1137
  * ------------------------------------------------------------------------
1104
1138
  */
1105
1139
 
1106
- const NAME$c = 'carousel';
1107
- const DATA_KEY$b = 'coreui.carousel';
1108
- const EVENT_KEY$b = `.${DATA_KEY$b}`;
1140
+ const NAME$d = 'carousel';
1141
+ const DATA_KEY$c = 'coreui.carousel';
1142
+ const EVENT_KEY$c = `.${DATA_KEY$c}`;
1109
1143
  const DATA_API_KEY$8 = '.data-api';
1110
1144
  const ARROW_LEFT_KEY = 'ArrowLeft';
1111
1145
  const ARROW_RIGHT_KEY = 'ArrowRight';
1112
1146
  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
1113
1147
 
1114
1148
  const SWIPE_THRESHOLD = 40;
1115
- const Default$b = {
1149
+ const Default$c = {
1116
1150
  interval: 5000,
1117
1151
  keyboard: true,
1118
1152
  slide: false,
@@ -1120,7 +1154,7 @@
1120
1154
  wrap: true,
1121
1155
  touch: true
1122
1156
  };
1123
- const DefaultType$b = {
1157
+ const DefaultType$c = {
1124
1158
  interval: '(number|boolean)',
1125
1159
  keyboard: 'boolean',
1126
1160
  slide: '(boolean|string)',
@@ -1136,19 +1170,19 @@
1136
1170
  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,
1137
1171
  [ARROW_RIGHT_KEY]: DIRECTION_LEFT
1138
1172
  };
1139
- const EVENT_SLIDE = `slide${EVENT_KEY$b}`;
1140
- const EVENT_SLID = `slid${EVENT_KEY$b}`;
1141
- const EVENT_KEYDOWN = `keydown${EVENT_KEY$b}`;
1142
- const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$b}`;
1143
- const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$b}`;
1144
- const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$b}`;
1145
- const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$b}`;
1146
- const EVENT_TOUCHEND = `touchend${EVENT_KEY$b}`;
1147
- const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$b}`;
1148
- const EVENT_POINTERUP = `pointerup${EVENT_KEY$b}`;
1149
- const EVENT_DRAG_START = `dragstart${EVENT_KEY$b}`;
1150
- const EVENT_LOAD_DATA_API$4 = `load${EVENT_KEY$b}${DATA_API_KEY$8}`;
1151
- const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;
1173
+ const EVENT_SLIDE = `slide${EVENT_KEY$c}`;
1174
+ const EVENT_SLID = `slid${EVENT_KEY$c}`;
1175
+ const EVENT_KEYDOWN = `keydown${EVENT_KEY$c}`;
1176
+ const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$c}`;
1177
+ const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$c}`;
1178
+ const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$c}`;
1179
+ const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$c}`;
1180
+ const EVENT_TOUCHEND = `touchend${EVENT_KEY$c}`;
1181
+ const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$c}`;
1182
+ const EVENT_POINTERUP = `pointerup${EVENT_KEY$c}`;
1183
+ const EVENT_DRAG_START = `dragstart${EVENT_KEY$c}`;
1184
+ const EVENT_LOAD_DATA_API$4 = `load${EVENT_KEY$c}${DATA_API_KEY$8}`;
1185
+ const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$c}${DATA_API_KEY$8}`;
1152
1186
  const CLASS_NAME_CAROUSEL = 'carousel';
1153
1187
  const CLASS_NAME_ACTIVE$3 = 'active';
1154
1188
  const CLASS_NAME_SLIDE = 'slide';
@@ -1195,11 +1229,11 @@
1195
1229
 
1196
1230
 
1197
1231
  static get Default() {
1198
- return Default$b;
1232
+ return Default$c;
1199
1233
  }
1200
1234
 
1201
1235
  static get NAME() {
1202
- return NAME$c;
1236
+ return NAME$d;
1203
1237
  } // Public
1204
1238
 
1205
1239
 
@@ -1277,11 +1311,11 @@
1277
1311
 
1278
1312
 
1279
1313
  _getConfig(config) {
1280
- config = { ...Default$b,
1314
+ config = { ...Default$c,
1281
1315
  ...Manipulator.getDataAttributes(this._element),
1282
1316
  ...(typeof config === 'object' ? config : {})
1283
1317
  };
1284
- typeCheckConfig(NAME$c, config, DefaultType$b);
1318
+ typeCheckConfig(NAME$d, config, DefaultType$c);
1285
1319
  return config;
1286
1320
  }
1287
1321
 
@@ -1318,8 +1352,12 @@
1318
1352
  }
1319
1353
 
1320
1354
  _addTouchEventListeners() {
1355
+ const hasPointerPenTouch = event => {
1356
+ return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
1357
+ };
1358
+
1321
1359
  const start = event => {
1322
- if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
1360
+ if (hasPointerPenTouch(event)) {
1323
1361
  this.touchStartX = event.clientX;
1324
1362
  } else if (!this._pointerEvent) {
1325
1363
  this.touchStartX = event.touches[0].clientX;
@@ -1332,7 +1370,7 @@
1332
1370
  };
1333
1371
 
1334
1372
  const end = event => {
1335
- if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
1373
+ if (hasPointerPenTouch(event)) {
1336
1374
  this.touchDeltaX = event.clientX - this.touchStartX;
1337
1375
  }
1338
1376
 
@@ -1357,7 +1395,7 @@
1357
1395
  };
1358
1396
 
1359
1397
  SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
1360
- EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());
1398
+ EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());
1361
1399
  });
1362
1400
 
1363
1401
  if (this._pointerEvent) {
@@ -1414,7 +1452,7 @@
1414
1452
  const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);
1415
1453
  activeIndicator.classList.remove(CLASS_NAME_ACTIVE$3);
1416
1454
  activeIndicator.removeAttribute('aria-current');
1417
- const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);
1455
+ const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement); // eslint-disable-next-line unicorn/no-for-loop
1418
1456
 
1419
1457
  for (let i = 0; i < indicators.length; i++) {
1420
1458
  if (Number.parseInt(indicators[i].getAttribute('data-coreui-slide-to'), 10) === this._getItemIndex(element)) {
@@ -1638,7 +1676,7 @@
1638
1676
 
1639
1677
  /**
1640
1678
  * --------------------------------------------------------------------------
1641
- * CoreUI (v4.0.5): collapse.js
1679
+ * CoreUI (v4.1.2): collapse.js
1642
1680
  * Licensed under MIT (https://coreui.io/license)
1643
1681
  *
1644
1682
  * This component is a modified version of the Bootstrap's collapse.js
@@ -1651,30 +1689,32 @@
1651
1689
  * ------------------------------------------------------------------------
1652
1690
  */
1653
1691
 
1654
- const NAME$b = 'collapse';
1655
- const DATA_KEY$a = 'coreui.collapse';
1656
- const EVENT_KEY$a = `.${DATA_KEY$a}`;
1692
+ const NAME$c = 'collapse';
1693
+ const DATA_KEY$b = 'coreui.collapse';
1694
+ const EVENT_KEY$b = `.${DATA_KEY$b}`;
1657
1695
  const DATA_API_KEY$7 = '.data-api';
1658
- const Default$a = {
1696
+ const Default$b = {
1659
1697
  toggle: true,
1660
- parent: ''
1698
+ parent: null
1661
1699
  };
1662
- const DefaultType$a = {
1700
+ const DefaultType$b = {
1663
1701
  toggle: 'boolean',
1664
- parent: '(string|element)'
1702
+ parent: '(null|element)'
1665
1703
  };
1666
- const EVENT_SHOW$6 = `show${EVENT_KEY$a}`;
1667
- const EVENT_SHOWN$6 = `shown${EVENT_KEY$a}`;
1668
- const EVENT_HIDE$6 = `hide${EVENT_KEY$a}`;
1669
- const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$a}`;
1670
- const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;
1671
- const CLASS_NAME_SHOW$a = 'show';
1704
+ const EVENT_SHOW$6 = `show${EVENT_KEY$b}`;
1705
+ const EVENT_SHOWN$6 = `shown${EVENT_KEY$b}`;
1706
+ const EVENT_HIDE$6 = `hide${EVENT_KEY$b}`;
1707
+ const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$b}`;
1708
+ const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;
1709
+ const CLASS_NAME_SHOW$9 = 'show';
1672
1710
  const CLASS_NAME_COLLAPSE = 'collapse';
1673
1711
  const CLASS_NAME_COLLAPSING = 'collapsing';
1674
1712
  const CLASS_NAME_COLLAPSED = 'collapsed';
1713
+ const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
1714
+ const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
1675
1715
  const WIDTH = 'width';
1676
1716
  const HEIGHT = 'height';
1677
- const SELECTOR_ACTIVES = '.show, .collapsing';
1717
+ const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
1678
1718
  const SELECTOR_DATA_TOGGLE$5 = '[data-coreui-toggle="collapse"]';
1679
1719
  /**
1680
1720
  * ------------------------------------------------------------------------
@@ -1687,7 +1727,7 @@
1687
1727
  super(element);
1688
1728
  this._isTransitioning = false;
1689
1729
  this._config = this._getConfig(config);
1690
- this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$5}[href="#${this._element.id}"],` + `${SELECTOR_DATA_TOGGLE$5}[data-coreui-target="#${this._element.id}"]`);
1730
+ this._triggerArray = [];
1691
1731
  const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$5);
1692
1732
 
1693
1733
  for (let i = 0, len = toggleList.length; i < len; i++) {
@@ -1702,10 +1742,10 @@
1702
1742
  }
1703
1743
  }
1704
1744
 
1705
- this._parent = this._config.parent ? this._getParent() : null;
1745
+ this._initializeChildren();
1706
1746
 
1707
1747
  if (!this._config.parent) {
1708
- this._addAriaAndCollapsedClass(this._element, this._triggerArray);
1748
+ this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
1709
1749
  }
1710
1750
 
1711
1751
  if (this._config.toggle) {
@@ -1715,16 +1755,16 @@
1715
1755
 
1716
1756
 
1717
1757
  static get Default() {
1718
- return Default$a;
1758
+ return Default$b;
1719
1759
  }
1720
1760
 
1721
1761
  static get NAME() {
1722
- return NAME$b;
1762
+ return NAME$c;
1723
1763
  } // Public
1724
1764
 
1725
1765
 
1726
1766
  toggle() {
1727
- if (this._element.classList.contains(CLASS_NAME_SHOW$a)) {
1767
+ if (this._isShown()) {
1728
1768
  this.hide();
1729
1769
  } else {
1730
1770
  this.show();
@@ -1732,30 +1772,21 @@
1732
1772
  }
1733
1773
 
1734
1774
  show() {
1735
- if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$a)) {
1775
+ if (this._isTransitioning || this._isShown()) {
1736
1776
  return;
1737
1777
  }
1738
1778
 
1739
- let actives;
1779
+ let actives = [];
1740
1780
  let activesData;
1741
1781
 
1742
- if (this._parent) {
1743
- actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {
1744
- if (typeof this._config.parent === 'string') {
1745
- return elem.getAttribute('data-coreui-parent') === this._config.parent;
1746
- }
1747
-
1748
- return elem.classList.contains(CLASS_NAME_COLLAPSE);
1749
- });
1750
-
1751
- if (actives.length === 0) {
1752
- actives = null;
1753
- }
1782
+ if (this._config.parent) {
1783
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
1784
+ actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth
1754
1785
  }
1755
1786
 
1756
1787
  const container = SelectorEngine.findOne(this._selector);
1757
1788
 
1758
- if (actives) {
1789
+ if (actives.length) {
1759
1790
  const tempActiveData = actives.find(elem => container !== elem);
1760
1791
  activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
1761
1792
 
@@ -1770,17 +1801,17 @@
1770
1801
  return;
1771
1802
  }
1772
1803
 
1773
- if (actives) {
1774
- actives.forEach(elemActive => {
1775
- if (container !== elemActive) {
1776
- Collapse.collapseInterface(elemActive, 'hide');
1777
- }
1804
+ actives.forEach(elemActive => {
1805
+ if (container !== elemActive) {
1806
+ Collapse.getOrCreateInstance(elemActive, {
1807
+ toggle: false
1808
+ }).hide();
1809
+ }
1778
1810
 
1779
- if (!activesData) {
1780
- Data.set(elemActive, DATA_KEY$a, null);
1781
- }
1782
- });
1783
- }
1811
+ if (!activesData) {
1812
+ Data.set(elemActive, DATA_KEY$b, null);
1813
+ }
1814
+ });
1784
1815
 
1785
1816
  const dimension = this._getDimension();
1786
1817
 
@@ -1790,22 +1821,18 @@
1790
1821
 
1791
1822
  this._element.style[dimension] = 0;
1792
1823
 
1793
- if (this._triggerArray.length) {
1794
- this._triggerArray.forEach(element => {
1795
- element.classList.remove(CLASS_NAME_COLLAPSED);
1796
- element.setAttribute('aria-expanded', true);
1797
- });
1798
- }
1824
+ this._addAriaAndCollapsedClass(this._triggerArray, true);
1799
1825
 
1800
- this.setTransitioning(true);
1826
+ this._isTransitioning = true;
1801
1827
 
1802
1828
  const complete = () => {
1829
+ this._isTransitioning = false;
1830
+
1803
1831
  this._element.classList.remove(CLASS_NAME_COLLAPSING);
1804
1832
 
1805
- this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$a);
1833
+ this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$9);
1806
1834
 
1807
1835
  this._element.style[dimension] = '';
1808
- this.setTransitioning(false);
1809
1836
  EventHandler.trigger(this._element, EVENT_SHOWN$6);
1810
1837
  };
1811
1838
 
@@ -1818,7 +1845,7 @@
1818
1845
  }
1819
1846
 
1820
1847
  hide() {
1821
- if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$a)) {
1848
+ if (this._isTransitioning || !this._isShown()) {
1822
1849
  return;
1823
1850
  }
1824
1851
 
@@ -1835,26 +1862,23 @@
1835
1862
 
1836
1863
  this._element.classList.add(CLASS_NAME_COLLAPSING);
1837
1864
 
1838
- this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$a);
1865
+ this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$9);
1839
1866
 
1840
1867
  const triggerArrayLength = this._triggerArray.length;
1841
1868
 
1842
- if (triggerArrayLength > 0) {
1843
- for (let i = 0; i < triggerArrayLength; i++) {
1844
- const trigger = this._triggerArray[i];
1845
- const elem = getElementFromSelector(trigger);
1869
+ for (let i = 0; i < triggerArrayLength; i++) {
1870
+ const trigger = this._triggerArray[i];
1871
+ const elem = getElementFromSelector(trigger);
1846
1872
 
1847
- if (elem && !elem.classList.contains(CLASS_NAME_SHOW$a)) {
1848
- trigger.classList.add(CLASS_NAME_COLLAPSED);
1849
- trigger.setAttribute('aria-expanded', false);
1850
- }
1873
+ if (elem && !this._isShown(elem)) {
1874
+ this._addAriaAndCollapsedClass([trigger], false);
1851
1875
  }
1852
1876
  }
1853
1877
 
1854
- this.setTransitioning(true);
1878
+ this._isTransitioning = true;
1855
1879
 
1856
1880
  const complete = () => {
1857
- this.setTransitioning(false);
1881
+ this._isTransitioning = false;
1858
1882
 
1859
1883
  this._element.classList.remove(CLASS_NAME_COLLAPSING);
1860
1884
 
@@ -1868,45 +1892,47 @@
1868
1892
  this._queueCallback(complete, this._element, true);
1869
1893
  }
1870
1894
 
1871
- setTransitioning(isTransitioning) {
1872
- this._isTransitioning = isTransitioning;
1895
+ _isShown(element = this._element) {
1896
+ return element.classList.contains(CLASS_NAME_SHOW$9);
1873
1897
  } // Private
1874
1898
 
1875
1899
 
1876
1900
  _getConfig(config) {
1877
- config = { ...Default$a,
1901
+ config = { ...Default$b,
1902
+ ...Manipulator.getDataAttributes(this._element),
1878
1903
  ...config
1879
1904
  };
1880
1905
  config.toggle = Boolean(config.toggle); // Coerce string values
1881
1906
 
1882
- typeCheckConfig(NAME$b, config, DefaultType$a);
1907
+ config.parent = getElement(config.parent);
1908
+ typeCheckConfig(NAME$c, config, DefaultType$b);
1883
1909
  return config;
1884
1910
  }
1885
1911
 
1886
1912
  _getDimension() {
1887
- return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;
1913
+ return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
1888
1914
  }
1889
1915
 
1890
- _getParent() {
1891
- let {
1892
- parent
1893
- } = this._config;
1894
- parent = getElement(parent);
1895
- const selector = `${SELECTOR_DATA_TOGGLE$5}[data-coreui-parent="${parent}"]`;
1896
- SelectorEngine.find(selector, parent).forEach(element => {
1916
+ _initializeChildren() {
1917
+ if (!this._config.parent) {
1918
+ return;
1919
+ }
1920
+
1921
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
1922
+ SelectorEngine.find(SELECTOR_DATA_TOGGLE$5, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {
1897
1923
  const selected = getElementFromSelector(element);
1898
1924
 
1899
- this._addAriaAndCollapsedClass(selected, [element]);
1925
+ if (selected) {
1926
+ this._addAriaAndCollapsedClass([element], this._isShown(selected));
1927
+ }
1900
1928
  });
1901
- return parent;
1902
1929
  }
1903
1930
 
1904
- _addAriaAndCollapsedClass(element, triggerArray) {
1905
- if (!element || !triggerArray.length) {
1931
+ _addAriaAndCollapsedClass(triggerArray, isOpen) {
1932
+ if (!triggerArray.length) {
1906
1933
  return;
1907
1934
  }
1908
1935
 
1909
- const isOpen = element.classList.contains(CLASS_NAME_SHOW$a);
1910
1936
  triggerArray.forEach(elem => {
1911
1937
  if (isOpen) {
1912
1938
  elem.classList.remove(CLASS_NAME_COLLAPSED);
@@ -1919,33 +1945,23 @@
1919
1945
  } // Static
1920
1946
 
1921
1947
 
1922
- static collapseInterface(element, config) {
1923
- let data = Collapse.getInstance(element);
1924
- const _config = { ...Default$a,
1925
- ...Manipulator.getDataAttributes(element),
1926
- ...(typeof config === 'object' && config ? config : {})
1927
- };
1928
-
1929
- if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
1930
- _config.toggle = false;
1931
- }
1932
-
1933
- if (!data) {
1934
- data = new Collapse(element, _config);
1935
- }
1948
+ static jQueryInterface(config) {
1949
+ return this.each(function () {
1950
+ const _config = {};
1936
1951
 
1937
- if (typeof config === 'string') {
1938
- if (typeof data[config] === 'undefined') {
1939
- throw new TypeError(`No method named "${config}"`);
1952
+ if (typeof config === 'string' && /show|hide/.test(config)) {
1953
+ _config.toggle = false;
1940
1954
  }
1941
1955
 
1942
- data[config]();
1943
- }
1944
- }
1956
+ const data = Collapse.getOrCreateInstance(this, _config);
1945
1957
 
1946
- static jQueryInterface(config) {
1947
- return this.each(function () {
1948
- Collapse.collapseInterface(this, config);
1958
+ if (typeof config === 'string') {
1959
+ if (typeof data[config] === 'undefined') {
1960
+ throw new TypeError(`No method named "${config}"`);
1961
+ }
1962
+
1963
+ data[config]();
1964
+ }
1949
1965
  });
1950
1966
  }
1951
1967
 
@@ -1963,26 +1979,12 @@
1963
1979
  event.preventDefault();
1964
1980
  }
1965
1981
 
1966
- const triggerData = Manipulator.getDataAttributes(this);
1967
1982
  const selector = getSelectorFromElement(this);
1968
1983
  const selectorElements = SelectorEngine.find(selector);
1969
1984
  selectorElements.forEach(element => {
1970
- const data = Collapse.getInstance(element);
1971
- let config;
1972
-
1973
- if (data) {
1974
- // update parent attribute
1975
- if (data._parent === null && typeof triggerData.parent === 'string') {
1976
- data._config.parent = triggerData.parent;
1977
- data._parent = data._getParent();
1978
- }
1979
-
1980
- config = 'toggle';
1981
- } else {
1982
- config = triggerData;
1983
- }
1984
-
1985
- Collapse.collapseInterface(element, config);
1985
+ Collapse.getOrCreateInstance(element, {
1986
+ toggle: false
1987
+ }).toggle();
1986
1988
  });
1987
1989
  });
1988
1990
  /**
@@ -1996,7 +1998,7 @@
1996
1998
 
1997
1999
  /**
1998
2000
  * --------------------------------------------------------------------------
1999
- * CoreUI (v4.0.5): dropdown.js
2001
+ * CoreUI (v4.1.2): dropdown.js
2000
2002
  * Licensed under MIT (https://coreui.io/license)
2001
2003
  *
2002
2004
  * This component is a modified version of the Bootstrap's dropdown.js
@@ -2009,27 +2011,26 @@
2009
2011
  * ------------------------------------------------------------------------
2010
2012
  */
2011
2013
 
2012
- const NAME$a = 'dropdown';
2013
- const DATA_KEY$9 = 'coreui.dropdown';
2014
- const EVENT_KEY$9 = `.${DATA_KEY$9}`;
2014
+ const NAME$b = 'dropdown';
2015
+ const DATA_KEY$a = 'coreui.dropdown';
2016
+ const EVENT_KEY$a = `.${DATA_KEY$a}`;
2015
2017
  const DATA_API_KEY$6 = '.data-api';
2016
2018
  const ESCAPE_KEY$2 = 'Escape';
2017
2019
  const SPACE_KEY = 'Space';
2018
- const TAB_KEY = 'Tab';
2020
+ const TAB_KEY$1 = 'Tab';
2019
2021
  const ARROW_UP_KEY = 'ArrowUp';
2020
2022
  const ARROW_DOWN_KEY = 'ArrowDown';
2021
2023
  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
2022
2024
 
2023
2025
  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);
2024
- const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;
2025
- const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;
2026
- const EVENT_SHOW$5 = `show${EVENT_KEY$9}`;
2027
- const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;
2028
- const EVENT_CLICK = `click${EVENT_KEY$9}`;
2029
- const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;
2030
- const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$9}${DATA_API_KEY$6}`;
2031
- const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$9}${DATA_API_KEY$6}`;
2032
- const CLASS_NAME_SHOW$9 = 'show';
2026
+ const EVENT_HIDE$5 = `hide${EVENT_KEY$a}`;
2027
+ const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$a}`;
2028
+ const EVENT_SHOW$5 = `show${EVENT_KEY$a}`;
2029
+ const EVENT_SHOWN$5 = `shown${EVENT_KEY$a}`;
2030
+ const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
2031
+ const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$a}${DATA_API_KEY$6}`;
2032
+ const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$a}${DATA_API_KEY$6}`;
2033
+ const CLASS_NAME_SHOW$8 = 'show';
2033
2034
  const CLASS_NAME_DROPUP = 'dropup';
2034
2035
  const CLASS_NAME_DROPEND = 'dropend';
2035
2036
  const CLASS_NAME_DROPSTART = 'dropstart';
@@ -2044,7 +2045,7 @@
2044
2045
  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
2045
2046
  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
2046
2047
  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
2047
- const Default$9 = {
2048
+ const Default$a = {
2048
2049
  offset: [0, 2],
2049
2050
  boundary: 'clippingParents',
2050
2051
  reference: 'toggle',
@@ -2052,7 +2053,7 @@
2052
2053
  popperConfig: null,
2053
2054
  autoClose: true
2054
2055
  };
2055
- const DefaultType$9 = {
2056
+ const DefaultType$a = {
2056
2057
  offset: '(array|string|function)',
2057
2058
  boundary: '(string|element)',
2058
2059
  reference: '(string|element|object)',
@@ -2073,45 +2074,31 @@
2073
2074
  this._config = this._getConfig(config);
2074
2075
  this._menu = this._getMenuElement();
2075
2076
  this._inNavbar = this._detectNavbar();
2076
-
2077
- this._addEventListeners();
2078
2077
  } // Getters
2079
2078
 
2080
2079
 
2081
2080
  static get Default() {
2082
- return Default$9;
2081
+ return Default$a;
2083
2082
  }
2084
2083
 
2085
2084
  static get DefaultType() {
2086
- return DefaultType$9;
2085
+ return DefaultType$a;
2087
2086
  }
2088
2087
 
2089
2088
  static get NAME() {
2090
- return NAME$a;
2091
- } // Public
2092
-
2093
-
2094
- toggle() {
2095
- if (isDisabled(this._element)) {
2096
- return;
2097
- }
2098
-
2099
- const isActive = this._element.classList.contains(CLASS_NAME_SHOW$9);
2100
-
2101
- if (isActive) {
2102
- this.hide();
2103
- return;
2104
- }
2089
+ return NAME$b;
2090
+ } // Public
2105
2091
 
2106
- this.show();
2092
+
2093
+ toggle() {
2094
+ return this._isShown() ? this.hide() : this.show();
2107
2095
  }
2108
2096
 
2109
2097
  show() {
2110
- if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$9)) {
2098
+ if (isDisabled(this._element) || this._isShown(this._menu)) {
2111
2099
  return;
2112
2100
  }
2113
2101
 
2114
- const parent = Dropdown.getParentFromElement(this._element);
2115
2102
  const relatedTarget = {
2116
2103
  relatedTarget: this._element
2117
2104
  };
@@ -2119,34 +2106,14 @@
2119
2106
 
2120
2107
  if (showEvent.defaultPrevented) {
2121
2108
  return;
2122
- } // Totally disable Popper for Dropdowns in Navbar
2109
+ }
2123
2110
 
2111
+ const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
2124
2112
 
2125
2113
  if (this._inNavbar) {
2126
2114
  Manipulator.setDataAttribute(this._menu, 'popper', 'none');
2127
2115
  } else {
2128
- if (typeof Popper__namespace === 'undefined') {
2129
- throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
2130
- }
2131
-
2132
- let referenceElement = this._element;
2133
-
2134
- if (this._config.reference === 'parent') {
2135
- referenceElement = parent;
2136
- } else if (isElement(this._config.reference)) {
2137
- referenceElement = getElement(this._config.reference);
2138
- } else if (typeof this._config.reference === 'object') {
2139
- referenceElement = this._config.reference;
2140
- }
2141
-
2142
- const popperConfig = this._getPopperConfig();
2143
-
2144
- const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
2145
- this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
2146
-
2147
- if (isDisplayStatic) {
2148
- Manipulator.setDataAttribute(this._menu, 'popper', 'static');
2149
- }
2116
+ this._createPopper(parent);
2150
2117
  } // If this is a touch-enabled device we add extra
2151
2118
  // empty mouseover listeners to the body's immediate children;
2152
2119
  // only needed because of broken event delegation on iOS
@@ -2161,15 +2128,15 @@
2161
2128
 
2162
2129
  this._element.setAttribute('aria-expanded', true);
2163
2130
 
2164
- this._menu.classList.toggle(CLASS_NAME_SHOW$9);
2131
+ this._menu.classList.add(CLASS_NAME_SHOW$8);
2165
2132
 
2166
- this._element.classList.toggle(CLASS_NAME_SHOW$9);
2133
+ this._element.classList.add(CLASS_NAME_SHOW$8);
2167
2134
 
2168
2135
  EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
2169
2136
  }
2170
2137
 
2171
2138
  hide() {
2172
- if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$9)) {
2139
+ if (isDisabled(this._element) || !this._isShown(this._menu)) {
2173
2140
  return;
2174
2141
  }
2175
2142
 
@@ -2197,13 +2164,6 @@
2197
2164
  } // Private
2198
2165
 
2199
2166
 
2200
- _addEventListeners() {
2201
- EventHandler.on(this._element, EVENT_CLICK, event => {
2202
- event.preventDefault();
2203
- this.toggle();
2204
- });
2205
- }
2206
-
2207
2167
  _completeHide(relatedTarget) {
2208
2168
  const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
2209
2169
 
@@ -2221,9 +2181,9 @@
2221
2181
  this._popper.destroy();
2222
2182
  }
2223
2183
 
2224
- this._menu.classList.remove(CLASS_NAME_SHOW$9);
2184
+ this._menu.classList.remove(CLASS_NAME_SHOW$8);
2225
2185
 
2226
- this._element.classList.remove(CLASS_NAME_SHOW$9);
2186
+ this._element.classList.remove(CLASS_NAME_SHOW$8);
2227
2187
 
2228
2188
  this._element.setAttribute('aria-expanded', 'false');
2229
2189
 
@@ -2236,16 +2196,45 @@
2236
2196
  ...Manipulator.getDataAttributes(this._element),
2237
2197
  ...config
2238
2198
  };
2239
- typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
2199
+ typeCheckConfig(NAME$b, config, this.constructor.DefaultType);
2240
2200
 
2241
2201
  if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
2242
2202
  // Popper virtual elements require a getBoundingClientRect method
2243
- throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
2203
+ throw new TypeError(`${NAME$b.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
2244
2204
  }
2245
2205
 
2246
2206
  return config;
2247
2207
  }
2248
2208
 
2209
+ _createPopper(parent) {
2210
+ if (typeof Popper__namespace === 'undefined') {
2211
+ throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
2212
+ }
2213
+
2214
+ let referenceElement = this._element;
2215
+
2216
+ if (this._config.reference === 'parent') {
2217
+ referenceElement = parent;
2218
+ } else if (isElement(this._config.reference)) {
2219
+ referenceElement = getElement(this._config.reference);
2220
+ } else if (typeof this._config.reference === 'object') {
2221
+ referenceElement = this._config.reference;
2222
+ }
2223
+
2224
+ const popperConfig = this._getPopperConfig();
2225
+
2226
+ const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
2227
+ this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
2228
+
2229
+ if (isDisplayStatic) {
2230
+ Manipulator.setDataAttribute(this._menu, 'popper', 'static');
2231
+ }
2232
+ }
2233
+
2234
+ _isShown(element = this._element) {
2235
+ return element.classList.contains(CLASS_NAME_SHOW$8);
2236
+ }
2237
+
2249
2238
  _getMenuElement() {
2250
2239
  return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
2251
2240
  }
@@ -2335,26 +2324,24 @@
2335
2324
  } // Static
2336
2325
 
2337
2326
 
2338
- static dropdownInterface(element, config) {
2339
- const data = Dropdown.getOrCreateInstance(element, config);
2327
+ static jQueryInterface(config) {
2328
+ return this.each(function () {
2329
+ const data = Dropdown.getOrCreateInstance(this, config);
2330
+
2331
+ if (typeof config !== 'string') {
2332
+ return;
2333
+ }
2340
2334
 
2341
- if (typeof config === 'string') {
2342
2335
  if (typeof data[config] === 'undefined') {
2343
2336
  throw new TypeError(`No method named "${config}"`);
2344
2337
  }
2345
2338
 
2346
2339
  data[config]();
2347
- }
2348
- }
2349
-
2350
- static jQueryInterface(config) {
2351
- return this.each(function () {
2352
- Dropdown.dropdownInterface(this, config);
2353
2340
  });
2354
2341
  }
2355
2342
 
2356
2343
  static clearMenus(event) {
2357
- if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
2344
+ if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {
2358
2345
  return;
2359
2346
  }
2360
2347
 
@@ -2367,7 +2354,7 @@
2367
2354
  continue;
2368
2355
  }
2369
2356
 
2370
- if (!context._element.classList.contains(CLASS_NAME_SHOW$9)) {
2357
+ if (!context._isShown()) {
2371
2358
  continue;
2372
2359
  }
2373
2360
 
@@ -2384,7 +2371,7 @@
2384
2371
  } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
2385
2372
 
2386
2373
 
2387
- if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
2374
+ if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
2388
2375
  continue;
2389
2376
  }
2390
2377
 
@@ -2413,7 +2400,7 @@
2413
2400
  return;
2414
2401
  }
2415
2402
 
2416
- const isActive = this.classList.contains(CLASS_NAME_SHOW$9);
2403
+ const isActive = this.classList.contains(CLASS_NAME_SHOW$8);
2417
2404
 
2418
2405
  if (!isActive && event.key === ESCAPE_KEY$2) {
2419
2406
  return;
@@ -2426,20 +2413,20 @@
2426
2413
  return;
2427
2414
  }
2428
2415
 
2429
- const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$4) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$4)[0];
2416
+ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$4) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$4)[0];
2417
+ const instance = Dropdown.getOrCreateInstance(getToggleButton);
2430
2418
 
2431
2419
  if (event.key === ESCAPE_KEY$2) {
2432
- getToggleButton().focus();
2433
- Dropdown.clearMenus();
2420
+ instance.hide();
2434
2421
  return;
2435
2422
  }
2436
2423
 
2437
2424
  if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
2438
2425
  if (!isActive) {
2439
- getToggleButton().click();
2426
+ instance.show();
2440
2427
  }
2441
2428
 
2442
- Dropdown.getInstance(getToggleButton())._selectMenuItem(event);
2429
+ instance._selectMenuItem(event);
2443
2430
 
2444
2431
  return;
2445
2432
  }
@@ -2463,7 +2450,7 @@
2463
2450
  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
2464
2451
  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$4, function (event) {
2465
2452
  event.preventDefault();
2466
- Dropdown.dropdownInterface(this);
2453
+ Dropdown.getOrCreateInstance(this).toggle();
2467
2454
  });
2468
2455
  /**
2469
2456
  * ------------------------------------------------------------------------
@@ -2476,7 +2463,7 @@
2476
2463
 
2477
2464
  /**
2478
2465
  * --------------------------------------------------------------------------
2479
- * Bootstrap (v5.0.2): util/scrollBar.js
2466
+ * Bootstrap (v5.1.3): util/scrollBar.js
2480
2467
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2481
2468
  * --------------------------------------------------------------------------
2482
2469
  */
@@ -2580,11 +2567,12 @@
2580
2567
 
2581
2568
  /**
2582
2569
  * --------------------------------------------------------------------------
2583
- * Bootstrap (v5.0.2): util/backdrop.js
2584
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2570
+ * Bootstrap (v5.1.3): util/backdrop.js
2571
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2585
2572
  * --------------------------------------------------------------------------
2586
2573
  */
2587
- const Default$8 = {
2574
+ const Default$9 = {
2575
+ className: 'modal-backdrop',
2588
2576
  isVisible: true,
2589
2577
  // if false, we use the backdrop helper without adding any element to the dom
2590
2578
  isAnimated: false,
@@ -2592,17 +2580,17 @@
2592
2580
  // give the choice to place backdrop under different elements
2593
2581
  clickCallback: null
2594
2582
  };
2595
- const DefaultType$8 = {
2583
+ const DefaultType$9 = {
2584
+ className: 'string',
2596
2585
  isVisible: 'boolean',
2597
2586
  isAnimated: 'boolean',
2598
2587
  rootElement: '(element|string)',
2599
2588
  clickCallback: '(function|null)'
2600
2589
  };
2601
- const NAME$9 = 'backdrop';
2602
- const CLASS_NAME_BACKDROP$1 = 'modal-backdrop';
2603
- const CLASS_NAME_FADE$6 = 'fade';
2604
- const CLASS_NAME_SHOW$8 = 'show';
2605
- const EVENT_MOUSEDOWN = `mousedown.coreui.${NAME$9}`;
2590
+ const NAME$a = 'backdrop';
2591
+ const CLASS_NAME_FADE$4 = 'fade';
2592
+ const CLASS_NAME_SHOW$7 = 'show';
2593
+ const EVENT_MOUSEDOWN = `mousedown.coreui.${NAME$a}`;
2606
2594
 
2607
2595
  class Backdrop {
2608
2596
  constructor(config) {
@@ -2623,7 +2611,7 @@
2623
2611
  reflow(this._getElement());
2624
2612
  }
2625
2613
 
2626
- this._getElement().classList.add(CLASS_NAME_SHOW$8);
2614
+ this._getElement().classList.add(CLASS_NAME_SHOW$7);
2627
2615
 
2628
2616
  this._emulateAnimation(() => {
2629
2617
  execute(callback);
@@ -2636,7 +2624,7 @@
2636
2624
  return;
2637
2625
  }
2638
2626
 
2639
- this._getElement().classList.remove(CLASS_NAME_SHOW$8);
2627
+ this._getElement().classList.remove(CLASS_NAME_SHOW$7);
2640
2628
 
2641
2629
  this._emulateAnimation(() => {
2642
2630
  this.dispose();
@@ -2648,10 +2636,10 @@
2648
2636
  _getElement() {
2649
2637
  if (!this._element) {
2650
2638
  const backdrop = document.createElement('div');
2651
- backdrop.className = CLASS_NAME_BACKDROP$1;
2639
+ backdrop.className = this._config.className;
2652
2640
 
2653
2641
  if (this._config.isAnimated) {
2654
- backdrop.classList.add(CLASS_NAME_FADE$6);
2642
+ backdrop.classList.add(CLASS_NAME_FADE$4);
2655
2643
  }
2656
2644
 
2657
2645
  this._element = backdrop;
@@ -2661,12 +2649,12 @@
2661
2649
  }
2662
2650
 
2663
2651
  _getConfig(config) {
2664
- config = { ...Default$8,
2652
+ config = { ...Default$9,
2665
2653
  ...(typeof config === 'object' ? config : {})
2666
2654
  }; // use getElement() with the default "body" to get a fresh Element on each instantiation
2667
2655
 
2668
2656
  config.rootElement = getElement(config.rootElement);
2669
- typeCheckConfig(NAME$9, config, DefaultType$8);
2657
+ typeCheckConfig(NAME$a, config, DefaultType$9);
2670
2658
  return config;
2671
2659
  }
2672
2660
 
@@ -2675,7 +2663,7 @@
2675
2663
  return;
2676
2664
  }
2677
2665
 
2678
- this._config.rootElement.appendChild(this._getElement());
2666
+ this._config.rootElement.append(this._getElement());
2679
2667
 
2680
2668
  EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {
2681
2669
  execute(this._config.clickCallback);
@@ -2703,7 +2691,110 @@
2703
2691
 
2704
2692
  /**
2705
2693
  * --------------------------------------------------------------------------
2706
- * CoreUI (v4.0.5): modal.js
2694
+ * Bootstrap (v5.1.3): util/focustrap.js
2695
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2696
+ * --------------------------------------------------------------------------
2697
+ */
2698
+ const Default$8 = {
2699
+ trapElement: null,
2700
+ // The element to trap focus inside of
2701
+ autofocus: true
2702
+ };
2703
+ const DefaultType$8 = {
2704
+ trapElement: 'element',
2705
+ autofocus: 'boolean'
2706
+ };
2707
+ const NAME$9 = 'focustrap';
2708
+ const DATA_KEY$9 = 'coreui.focustrap';
2709
+ const EVENT_KEY$9 = `.${DATA_KEY$9}`;
2710
+ const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$9}`;
2711
+ const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$9}`;
2712
+ const TAB_KEY = 'Tab';
2713
+ const TAB_NAV_FORWARD = 'forward';
2714
+ const TAB_NAV_BACKWARD = 'backward';
2715
+
2716
+ class FocusTrap {
2717
+ constructor(config) {
2718
+ this._config = this._getConfig(config);
2719
+ this._isActive = false;
2720
+ this._lastTabNavDirection = null;
2721
+ }
2722
+
2723
+ activate() {
2724
+ const {
2725
+ trapElement,
2726
+ autofocus
2727
+ } = this._config;
2728
+
2729
+ if (this._isActive) {
2730
+ return;
2731
+ }
2732
+
2733
+ if (autofocus) {
2734
+ trapElement.focus();
2735
+ }
2736
+
2737
+ EventHandler.off(document, EVENT_KEY$9); // guard against infinite focus loop
2738
+
2739
+ EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));
2740
+ EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
2741
+ this._isActive = true;
2742
+ }
2743
+
2744
+ deactivate() {
2745
+ if (!this._isActive) {
2746
+ return;
2747
+ }
2748
+
2749
+ this._isActive = false;
2750
+ EventHandler.off(document, EVENT_KEY$9);
2751
+ } // Private
2752
+
2753
+
2754
+ _handleFocusin(event) {
2755
+ const {
2756
+ target
2757
+ } = event;
2758
+ const {
2759
+ trapElement
2760
+ } = this._config;
2761
+
2762
+ if (target === document || target === trapElement || trapElement.contains(target)) {
2763
+ return;
2764
+ }
2765
+
2766
+ const elements = SelectorEngine.focusableChildren(trapElement);
2767
+
2768
+ if (elements.length === 0) {
2769
+ trapElement.focus();
2770
+ } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
2771
+ elements[elements.length - 1].focus();
2772
+ } else {
2773
+ elements[0].focus();
2774
+ }
2775
+ }
2776
+
2777
+ _handleKeydown(event) {
2778
+ if (event.key !== TAB_KEY) {
2779
+ return;
2780
+ }
2781
+
2782
+ this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
2783
+ }
2784
+
2785
+ _getConfig(config) {
2786
+ config = { ...Default$8,
2787
+ ...(typeof config === 'object' ? config : {})
2788
+ };
2789
+ typeCheckConfig(NAME$9, config, DefaultType$8);
2790
+ return config;
2791
+ }
2792
+
2793
+ }
2794
+
2795
+ /**
2796
+ * --------------------------------------------------------------------------
2797
+ * CoreUI (v4.1.2): modal.js
2707
2798
  * Licensed under MIT (https://coreui.io/license)
2708
2799
  *
2709
2800
  * This component is a modified version of the Bootstrap's modal.js
@@ -2736,21 +2827,20 @@
2736
2827
  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;
2737
2828
  const EVENT_SHOW$4 = `show${EVENT_KEY$8}`;
2738
2829
  const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;
2739
- const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$8}`;
2740
2830
  const EVENT_RESIZE$1 = `resize${EVENT_KEY$8}`;
2741
- const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$8}`;
2831
+ const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$8}`;
2742
2832
  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$8}`;
2743
2833
  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$8}`;
2744
2834
  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$8}`;
2745
2835
  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
2746
2836
  const CLASS_NAME_OPEN = 'modal-open';
2747
- const CLASS_NAME_FADE$5 = 'fade';
2748
- const CLASS_NAME_SHOW$7 = 'show';
2837
+ const CLASS_NAME_FADE$3 = 'fade';
2838
+ const CLASS_NAME_SHOW$6 = 'show';
2749
2839
  const CLASS_NAME_STATIC = 'modal-static';
2840
+ const OPEN_SELECTOR$1 = '.modal.show';
2750
2841
  const SELECTOR_DIALOG = '.modal-dialog';
2751
2842
  const SELECTOR_MODAL_BODY = '.modal-body';
2752
2843
  const SELECTOR_DATA_TOGGLE$3 = '[data-coreui-toggle="modal"]';
2753
- const SELECTOR_DATA_DISMISS$2 = '[data-coreui-dismiss="modal"]';
2754
2844
  /**
2755
2845
  * ------------------------------------------------------------------------
2756
2846
  * Class Definition
@@ -2763,6 +2853,7 @@
2763
2853
  this._config = this._getConfig(config);
2764
2854
  this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
2765
2855
  this._backdrop = this._initializeBackDrop();
2856
+ this._focustrap = this._initializeFocusTrap();
2766
2857
  this._isShown = false;
2767
2858
  this._ignoreBackdropClick = false;
2768
2859
  this._isTransitioning = false;
@@ -2812,7 +2903,6 @@
2812
2903
 
2813
2904
  this._setResizeEvent();
2814
2905
 
2815
- EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));
2816
2906
  EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
2817
2907
  EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
2818
2908
  if (event.target === this._element) {
@@ -2824,11 +2914,7 @@
2824
2914
  this._showBackdrop(() => this._showElement(relatedTarget));
2825
2915
  }
2826
2916
 
2827
- hide(event) {
2828
- if (event && ['A', 'AREA'].includes(event.target.tagName)) {
2829
- event.preventDefault();
2830
- }
2831
-
2917
+ hide() {
2832
2918
  if (!this._isShown || this._isTransitioning) {
2833
2919
  return;
2834
2920
  }
@@ -2851,11 +2937,11 @@
2851
2937
 
2852
2938
  this._setResizeEvent();
2853
2939
 
2854
- EventHandler.off(document, EVENT_FOCUSIN$2);
2940
+ this._focustrap.deactivate();
2855
2941
 
2856
- this._element.classList.remove(CLASS_NAME_SHOW$7);
2942
+ this._element.classList.remove(CLASS_NAME_SHOW$6);
2857
2943
 
2858
- EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);
2944
+ EventHandler.off(this._element, EVENT_CLICK_DISMISS);
2859
2945
  EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
2860
2946
 
2861
2947
  this._queueCallback(() => this._hideModal(), this._element, isAnimated);
@@ -2866,14 +2952,9 @@
2866
2952
 
2867
2953
  this._backdrop.dispose();
2868
2954
 
2869
- super.dispose();
2870
- /**
2871
- * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
2872
- * Do not move `document` in `htmlElements` array
2873
- * It will remove `EVENT_CLICK_DATA_API` event that should remain
2874
- */
2955
+ this._focustrap.deactivate();
2875
2956
 
2876
- EventHandler.off(document, EVENT_FOCUSIN$2);
2957
+ super.dispose();
2877
2958
  }
2878
2959
 
2879
2960
  handleUpdate() {
@@ -2889,6 +2970,12 @@
2889
2970
  });
2890
2971
  }
2891
2972
 
2973
+ _initializeFocusTrap() {
2974
+ return new FocusTrap({
2975
+ trapElement: this._element
2976
+ });
2977
+ }
2978
+
2892
2979
  _getConfig(config) {
2893
2980
  config = { ...Default$7,
2894
2981
  ...Manipulator.getDataAttributes(this._element),
@@ -2905,7 +2992,7 @@
2905
2992
 
2906
2993
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
2907
2994
  // Don't move modal's DOM position
2908
- document.body.appendChild(this._element);
2995
+ document.body.append(this._element);
2909
2996
  }
2910
2997
 
2911
2998
  this._element.style.display = 'block';
@@ -2926,15 +3013,11 @@
2926
3013
  reflow(this._element);
2927
3014
  }
2928
3015
 
2929
- this._element.classList.add(CLASS_NAME_SHOW$7);
2930
-
2931
- if (this._config.focus) {
2932
- this._enforceFocus();
2933
- }
3016
+ this._element.classList.add(CLASS_NAME_SHOW$6);
2934
3017
 
2935
3018
  const transitionComplete = () => {
2936
3019
  if (this._config.focus) {
2937
- this._element.focus();
3020
+ this._focustrap.activate();
2938
3021
  }
2939
3022
 
2940
3023
  this._isTransitioning = false;
@@ -2946,16 +3029,6 @@
2946
3029
  this._queueCallback(transitionComplete, this._dialog, isAnimated);
2947
3030
  }
2948
3031
 
2949
- _enforceFocus() {
2950
- EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop
2951
-
2952
- EventHandler.on(document, EVENT_FOCUSIN$2, event => {
2953
- if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {
2954
- this._element.focus();
2955
- }
2956
- });
2957
- }
2958
-
2959
3032
  _setEscapeEvent() {
2960
3033
  if (this._isShown) {
2961
3034
  EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
@@ -3002,7 +3075,7 @@
3002
3075
  }
3003
3076
 
3004
3077
  _showBackdrop(callback) {
3005
- EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {
3078
+ EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
3006
3079
  if (this._ignoreBackdropClick) {
3007
3080
  this._ignoreBackdropClick = false;
3008
3081
  return;
@@ -3023,7 +3096,7 @@
3023
3096
  }
3024
3097
 
3025
3098
  _isAnimated() {
3026
- return this._element.classList.contains(CLASS_NAME_FADE$5);
3099
+ return this._element.classList.contains(CLASS_NAME_FADE$3);
3027
3100
  }
3028
3101
 
3029
3102
  _triggerBackdropTransition() {
@@ -3130,10 +3203,18 @@
3130
3203
  this.focus();
3131
3204
  }
3132
3205
  });
3133
- });
3206
+ }); // avoid conflict when clicking moddal toggler while another one is open
3207
+
3208
+ const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
3209
+
3210
+ if (allReadyOpen) {
3211
+ Modal.getInstance(allReadyOpen).hide();
3212
+ }
3213
+
3134
3214
  const data = Modal.getOrCreateInstance(target);
3135
3215
  data.toggle(this);
3136
3216
  });
3217
+ enableDismissTrigger(Modal);
3137
3218
  /**
3138
3219
  * ------------------------------------------------------------------------
3139
3220
  * jQuery
@@ -3145,7 +3226,7 @@
3145
3226
 
3146
3227
  /**
3147
3228
  * --------------------------------------------------------------------------
3148
- * CoreUI (v4.0.5): navigation.js
3229
+ * CoreUI (v4.1.2): navigation.js
3149
3230
  * Licensed under MIT (https://coreui.io/license)
3150
3231
  * --------------------------------------------------------------------------
3151
3232
  */
@@ -3168,7 +3249,7 @@
3168
3249
  groupsAutoCollapse: '(string|boolean)'
3169
3250
  };
3170
3251
  const CLASS_NAME_ACTIVE$2 = 'active';
3171
- const CLASS_NAME_SHOW$6 = 'show';
3252
+ const CLASS_NAME_SHOW$5 = 'show';
3172
3253
  const CLASS_NAME_NAV_GROUP = 'nav-group';
3173
3254
  const CLASS_NAME_NAV_GROUP_TOGGLE = 'nav-group-toggle';
3174
3255
  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
@@ -3245,7 +3326,7 @@
3245
3326
  if (this._config.activeLinksExact && element.href === currentUrl) {
3246
3327
  element.classList.add(CLASS_NAME_ACTIVE$2);
3247
3328
  Array.from(this._getParents(element, SELECTOR_NAV_GROUP)).forEach(element => {
3248
- element.classList.add(CLASS_NAME_SHOW$6);
3329
+ element.classList.add(CLASS_NAME_SHOW$5);
3249
3330
  element.setAttribute('aria-expanded', true);
3250
3331
  });
3251
3332
  }
@@ -3253,7 +3334,7 @@
3253
3334
  if (!this._config.activeLinksExact && element.href.startsWith(currentUrl)) {
3254
3335
  element.classList.add(CLASS_NAME_ACTIVE$2);
3255
3336
  Array.from(this._getParents(element, SELECTOR_NAV_GROUP)).forEach(element => {
3256
- element.classList.add(CLASS_NAME_SHOW$6);
3337
+ element.classList.add(CLASS_NAME_SHOW$5);
3257
3338
  element.setAttribute('aria-expanded', true);
3258
3339
  });
3259
3340
  }
@@ -3352,28 +3433,28 @@
3352
3433
  toggler = toggler.closest(SELECTOR_NAV_GROUP_TOGGLE);
3353
3434
  }
3354
3435
 
3355
- const filter = element => Boolean(element.classList.contains(CLASS_NAME_NAV_GROUP) && element.classList.contains(CLASS_NAME_SHOW$6)); // Close other groups
3436
+ const filter = element => Boolean(element.classList.contains(CLASS_NAME_NAV_GROUP) && element.classList.contains(CLASS_NAME_SHOW$5)); // Close other groups
3356
3437
 
3357
3438
 
3358
3439
  if (this._config.groupsAutoCollapse === true) {
3359
3440
  this._getSiblings(toggler.parentNode, filter).forEach(element => {
3360
3441
  this._slideUp(SelectorEngine.findOne(SELECTOR_NAV_GROUP_ITEMS, element), () => {
3361
- element.classList.remove(CLASS_NAME_SHOW$6);
3442
+ element.classList.remove(CLASS_NAME_SHOW$5);
3362
3443
  element.setAttribute('aria-expanded', false);
3363
3444
  });
3364
3445
  });
3365
3446
  }
3366
3447
 
3367
- if (toggler.parentNode.classList.contains(CLASS_NAME_SHOW$6)) {
3448
+ if (toggler.parentNode.classList.contains(CLASS_NAME_SHOW$5)) {
3368
3449
  this._slideUp(SelectorEngine.findOne(SELECTOR_NAV_GROUP_ITEMS, toggler.parentNode), () => {
3369
- toggler.parentNode.classList.remove(CLASS_NAME_SHOW$6);
3450
+ toggler.parentNode.classList.remove(CLASS_NAME_SHOW$5);
3370
3451
  toggler.parentNode.setAttribute('aria-expanded', false);
3371
3452
  });
3372
3453
 
3373
3454
  return;
3374
3455
  }
3375
3456
 
3376
- toggler.parentNode.classList.add(CLASS_NAME_SHOW$6);
3457
+ toggler.parentNode.classList.add(CLASS_NAME_SHOW$5);
3377
3458
  toggler.parentNode.setAttribute('aria-expanded', true);
3378
3459
 
3379
3460
  this._slideDown(SelectorEngine.findOne(SELECTOR_NAV_GROUP_ITEMS, toggler.parentNode));
@@ -3430,7 +3511,7 @@
3430
3511
 
3431
3512
  /**
3432
3513
  * --------------------------------------------------------------------------
3433
- * CoreUI (v4.0.5): dropdown.js
3514
+ * CoreUI (v4.1.2): dropdown.js
3434
3515
  * Licensed under MIT (https://coreui.io/license)
3435
3516
  *
3436
3517
  * This component is a modified version of the Bootstrap's offcanvas.js
@@ -3459,17 +3540,15 @@
3459
3540
  keyboard: 'boolean',
3460
3541
  scroll: 'boolean'
3461
3542
  };
3462
- const CLASS_NAME_SHOW$5 = 'show';
3543
+ const CLASS_NAME_SHOW$4 = 'show';
3544
+ const CLASS_NAME_BACKDROP$1 = 'offcanvas-backdrop';
3463
3545
  const OPEN_SELECTOR = '.offcanvas.show';
3464
3546
  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;
3465
3547
  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;
3466
3548
  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;
3467
3549
  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;
3468
- const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$6}`;
3469
3550
  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
3470
- const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$6}`;
3471
3551
  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$6}`;
3472
- const SELECTOR_DATA_DISMISS$1 = '[data-coreui-dismiss="offcanvas"]';
3473
3552
  const SELECTOR_DATA_TOGGLE$2 = '[data-coreui-toggle="offcanvas"]';
3474
3553
  /**
3475
3554
  * ------------------------------------------------------------------------
@@ -3483,6 +3562,7 @@
3483
3562
  this._config = this._getConfig(config);
3484
3563
  this._isShown = false;
3485
3564
  this._backdrop = this._initializeBackDrop();
3565
+ this._focustrap = this._initializeFocusTrap();
3486
3566
 
3487
3567
  this._addEventListeners();
3488
3568
  } // Getters
@@ -3521,8 +3601,6 @@
3521
3601
 
3522
3602
  if (!this._config.scroll) {
3523
3603
  new ScrollBarHelper().hide();
3524
-
3525
- this._enforceFocusOnElement(this._element);
3526
3604
  }
3527
3605
 
3528
3606
  this._element.removeAttribute('aria-hidden');
@@ -3531,9 +3609,13 @@
3531
3609
 
3532
3610
  this._element.setAttribute('role', 'dialog');
3533
3611
 
3534
- this._element.classList.add(CLASS_NAME_SHOW$5);
3612
+ this._element.classList.add(CLASS_NAME_SHOW$4);
3535
3613
 
3536
3614
  const completeCallBack = () => {
3615
+ if (!this._config.scroll) {
3616
+ this._focustrap.activate();
3617
+ }
3618
+
3537
3619
  EventHandler.trigger(this._element, EVENT_SHOWN$3, {
3538
3620
  relatedTarget
3539
3621
  });
@@ -3553,13 +3635,13 @@
3553
3635
  return;
3554
3636
  }
3555
3637
 
3556
- EventHandler.off(document, EVENT_FOCUSIN$1);
3638
+ this._focustrap.deactivate();
3557
3639
 
3558
3640
  this._element.blur();
3559
3641
 
3560
3642
  this._isShown = false;
3561
3643
 
3562
- this._element.classList.remove(CLASS_NAME_SHOW$5);
3644
+ this._element.classList.remove(CLASS_NAME_SHOW$4);
3563
3645
 
3564
3646
  this._backdrop.hide();
3565
3647
 
@@ -3585,8 +3667,9 @@
3585
3667
  dispose() {
3586
3668
  this._backdrop.dispose();
3587
3669
 
3670
+ this._focustrap.deactivate();
3671
+
3588
3672
  super.dispose();
3589
- EventHandler.off(document, EVENT_FOCUSIN$1);
3590
3673
  } // Private
3591
3674
 
3592
3675
 
@@ -3601,6 +3684,7 @@
3601
3684
 
3602
3685
  _initializeBackDrop() {
3603
3686
  return new Backdrop({
3687
+ className: CLASS_NAME_BACKDROP$1,
3604
3688
  isVisible: this._config.backdrop,
3605
3689
  isAnimated: true,
3606
3690
  rootElement: this._element.parentNode,
@@ -3608,19 +3692,13 @@
3608
3692
  });
3609
3693
  }
3610
3694
 
3611
- _enforceFocusOnElement(element) {
3612
- EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop
3613
-
3614
- EventHandler.on(document, EVENT_FOCUSIN$1, event => {
3615
- if (document !== event.target && element !== event.target && !element.contains(event.target)) {
3616
- element.focus();
3617
- }
3695
+ _initializeFocusTrap() {
3696
+ return new FocusTrap({
3697
+ trapElement: this._element
3618
3698
  });
3619
- element.focus();
3620
3699
  }
3621
3700
 
3622
3701
  _addEventListeners() {
3623
- EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());
3624
3702
  EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
3625
3703
  if (this._config.keyboard && event.key === ESCAPE_KEY) {
3626
3704
  this.hide();
@@ -3681,6 +3759,7 @@
3681
3759
  data.toggle(this);
3682
3760
  });
3683
3761
  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
3762
+ enableDismissTrigger(Offcanvas);
3684
3763
  /**
3685
3764
  * ------------------------------------------------------------------------
3686
3765
  * jQuery
@@ -3691,45 +3770,45 @@
3691
3770
 
3692
3771
  /**
3693
3772
  * --------------------------------------------------------------------------
3694
- * CoreUI (v4.0.5): alert.js
3773
+ * CoreUI (v4.1.2): alert.js
3695
3774
  * Licensed under MIT (https://coreui.io/license)
3696
3775
  *
3697
3776
  * This component is a modified version of the Bootstrap's util/sanitizer.js
3698
3777
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3699
3778
  * --------------------------------------------------------------------------
3700
3779
  */
3701
- const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
3780
+ const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
3702
3781
  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
3703
3782
  /**
3704
3783
  * A pattern that recognizes a commonly useful subset of URLs that are safe.
3705
3784
  *
3706
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
3785
+ * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
3707
3786
  */
3708
3787
 
3709
- const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;
3788
+ const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
3710
3789
  /**
3711
3790
  * A pattern that matches safe data URLs. Only matches image, video and audio types.
3712
3791
  *
3713
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
3792
+ * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
3714
3793
  */
3715
3794
 
3716
3795
  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;
3717
3796
 
3718
- const allowedAttribute = (attr, allowedAttributeList) => {
3719
- const attrName = attr.nodeName.toLowerCase();
3797
+ const allowedAttribute = (attribute, allowedAttributeList) => {
3798
+ const attributeName = attribute.nodeName.toLowerCase();
3720
3799
 
3721
- if (allowedAttributeList.includes(attrName)) {
3722
- if (uriAttrs.has(attrName)) {
3723
- return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
3800
+ if (allowedAttributeList.includes(attributeName)) {
3801
+ if (uriAttributes.has(attributeName)) {
3802
+ return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
3724
3803
  }
3725
3804
 
3726
3805
  return true;
3727
3806
  }
3728
3807
 
3729
- const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.
3808
+ const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.
3730
3809
 
3731
3810
  for (let i = 0, len = regExp.length; i < len; i++) {
3732
- if (regExp[i].test(attrName)) {
3811
+ if (regExp[i].test(attributeName)) {
3733
3812
  return true;
3734
3813
  }
3735
3814
  }
@@ -3781,23 +3860,22 @@
3781
3860
 
3782
3861
  const domParser = new window.DOMParser();
3783
3862
  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
3784
- const allowlistKeys = Object.keys(allowList);
3785
3863
  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
3786
3864
 
3787
3865
  for (let i = 0, len = elements.length; i < len; i++) {
3788
- const el = elements[i];
3789
- const elName = el.nodeName.toLowerCase();
3866
+ const element = elements[i];
3867
+ const elementName = element.nodeName.toLowerCase();
3790
3868
 
3791
- if (!allowlistKeys.includes(elName)) {
3792
- el.remove();
3869
+ if (!Object.keys(allowList).includes(elementName)) {
3870
+ element.remove();
3793
3871
  continue;
3794
3872
  }
3795
3873
 
3796
- const attributeList = [].concat(...el.attributes);
3797
- const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);
3798
- attributeList.forEach(attr => {
3799
- if (!allowedAttribute(attr, allowedAttributes)) {
3800
- el.removeAttribute(attr.nodeName);
3874
+ const attributeList = [].concat(...element.attributes);
3875
+ const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
3876
+ attributeList.forEach(attribute => {
3877
+ if (!allowedAttribute(attribute, allowedAttributes)) {
3878
+ element.removeAttribute(attribute.nodeName);
3801
3879
  }
3802
3880
  });
3803
3881
  }
@@ -3807,7 +3885,7 @@
3807
3885
 
3808
3886
  /**
3809
3887
  * --------------------------------------------------------------------------
3810
- * CoreUI (v4.0.5): tooltip.js
3888
+ * CoreUI (v4.1.2): tooltip.js
3811
3889
  * Licensed under MIT (https://coreui.io/license)
3812
3890
  *
3813
3891
  * This component is a modified version of the Bootstrap's tooltip.js
@@ -3824,7 +3902,6 @@
3824
3902
  const DATA_KEY$5 = 'coreui.tooltip';
3825
3903
  const EVENT_KEY$5 = `.${DATA_KEY$5}`;
3826
3904
  const CLASS_PREFIX$1 = 'bs-tooltip';
3827
- const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\s)${CLASS_PREFIX$1}\\S+`, 'g');
3828
3905
  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
3829
3906
  const DefaultType$4 = {
3830
3907
  animation: 'boolean',
@@ -3883,12 +3960,14 @@
3883
3960
  MOUSEENTER: `mouseenter${EVENT_KEY$5}`,
3884
3961
  MOUSELEAVE: `mouseleave${EVENT_KEY$5}`
3885
3962
  };
3886
- const CLASS_NAME_FADE$4 = 'fade';
3963
+ const CLASS_NAME_FADE$2 = 'fade';
3887
3964
  const CLASS_NAME_MODAL = 'modal';
3888
- const CLASS_NAME_SHOW$4 = 'show';
3965
+ const CLASS_NAME_SHOW$3 = 'show';
3889
3966
  const HOVER_STATE_SHOW = 'show';
3890
3967
  const HOVER_STATE_OUT = 'out';
3891
3968
  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
3969
+ const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
3970
+ const EVENT_MODAL_HIDE = 'hide.coreui.modal';
3892
3971
  const TRIGGER_HOVER = 'hover';
3893
3972
  const TRIGGER_FOCUS = 'focus';
3894
3973
  const TRIGGER_CLICK = 'click';
@@ -3965,7 +4044,7 @@
3965
4044
  context._leave(null, context);
3966
4045
  }
3967
4046
  } else {
3968
- if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$4)) {
4047
+ if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {
3969
4048
  this._leave(null, this);
3970
4049
 
3971
4050
  return;
@@ -3977,15 +4056,13 @@
3977
4056
 
3978
4057
  dispose() {
3979
4058
  clearTimeout(this._timeout);
3980
- EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.coreui.modal', this._hideModalHandler);
4059
+ EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
3981
4060
 
3982
4061
  if (this.tip) {
3983
4062
  this.tip.remove();
3984
4063
  }
3985
4064
 
3986
- if (this._popper) {
3987
- this._popper.destroy();
3988
- }
4065
+ this._disposePopper();
3989
4066
 
3990
4067
  super.dispose();
3991
4068
  }
@@ -4005,6 +4082,15 @@
4005
4082
 
4006
4083
  if (showEvent.defaultPrevented || !isInTheDom) {
4007
4084
  return;
4085
+ } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-coreui-original-title`
4086
+ // This will be removed later in favor of a `setContent` method
4087
+
4088
+
4089
+ if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {
4090
+ this._disposePopper();
4091
+
4092
+ this.tip.remove();
4093
+ this.tip = null;
4008
4094
  }
4009
4095
 
4010
4096
  const tip = this.getTipElement();
@@ -4013,10 +4099,8 @@
4013
4099
 
4014
4100
  this._element.setAttribute('aria-describedby', tipId);
4015
4101
 
4016
- this.setContent();
4017
-
4018
4102
  if (this._config.animation) {
4019
- tip.classList.add(CLASS_NAME_FADE$4);
4103
+ tip.classList.add(CLASS_NAME_FADE$2);
4020
4104
  }
4021
4105
 
4022
4106
  const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
@@ -4031,7 +4115,7 @@
4031
4115
  Data.set(tip, this.constructor.DATA_KEY, this);
4032
4116
 
4033
4117
  if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
4034
- container.appendChild(tip);
4118
+ container.append(tip);
4035
4119
  EventHandler.trigger(this._element, this.constructor.Event.INSERTED);
4036
4120
  }
4037
4121
 
@@ -4041,8 +4125,9 @@
4041
4125
  this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
4042
4126
  }
4043
4127
 
4044
- tip.classList.add(CLASS_NAME_SHOW$4);
4045
- const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;
4128
+ tip.classList.add(CLASS_NAME_SHOW$3);
4129
+
4130
+ const customClass = this._resolvePossibleFunction(this._config.customClass);
4046
4131
 
4047
4132
  if (customClass) {
4048
4133
  tip.classList.add(...customClass.split(' '));
@@ -4068,7 +4153,7 @@
4068
4153
  }
4069
4154
  };
4070
4155
 
4071
- const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$4);
4156
+ const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
4072
4157
 
4073
4158
  this._queueCallback(complete, this.tip, isAnimated);
4074
4159
  }
@@ -4095,11 +4180,7 @@
4095
4180
 
4096
4181
  EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);
4097
4182
 
4098
- if (this._popper) {
4099
- this._popper.destroy();
4100
-
4101
- this._popper = null;
4102
- }
4183
+ this._disposePopper();
4103
4184
  };
4104
4185
 
4105
4186
  const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);
@@ -4108,7 +4189,7 @@
4108
4189
  return;
4109
4190
  }
4110
4191
 
4111
- tip.classList.remove(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra
4192
+ tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra
4112
4193
  // empty mouseover listeners we added for iOS support
4113
4194
 
4114
4195
  if ('ontouchstart' in document.documentElement) {
@@ -4118,7 +4199,7 @@
4118
4199
  this._activeTrigger[TRIGGER_CLICK] = false;
4119
4200
  this._activeTrigger[TRIGGER_FOCUS] = false;
4120
4201
  this._activeTrigger[TRIGGER_HOVER] = false;
4121
- const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$4);
4202
+ const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
4122
4203
 
4123
4204
  this._queueCallback(complete, this.tip, isAnimated);
4124
4205
 
@@ -4143,14 +4224,27 @@
4143
4224
 
4144
4225
  const element = document.createElement('div');
4145
4226
  element.innerHTML = this._config.template;
4146
- this.tip = element.children[0];
4227
+ const tip = element.children[0];
4228
+ this.setContent(tip);
4229
+ tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$3);
4230
+ this.tip = tip;
4147
4231
  return this.tip;
4148
4232
  }
4149
4233
 
4150
- setContent() {
4151
- const tip = this.getTipElement();
4152
- this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());
4153
- tip.classList.remove(CLASS_NAME_FADE$4, CLASS_NAME_SHOW$4);
4234
+ setContent(tip) {
4235
+ this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);
4236
+ }
4237
+
4238
+ _sanitizeAndSetContent(template, content, selector) {
4239
+ const templateElement = SelectorEngine.findOne(selector, template);
4240
+
4241
+ if (!content && templateElement) {
4242
+ templateElement.remove();
4243
+ return;
4244
+ } // we use append for html objects to maintain js events
4245
+
4246
+
4247
+ this.setElementContent(templateElement, content);
4154
4248
  }
4155
4249
 
4156
4250
  setElementContent(element, content) {
@@ -4164,7 +4258,7 @@
4164
4258
  if (this._config.html) {
4165
4259
  if (content.parentNode !== element) {
4166
4260
  element.innerHTML = '';
4167
- element.appendChild(content);
4261
+ element.append(content);
4168
4262
  }
4169
4263
  } else {
4170
4264
  element.textContent = content.textContent;
@@ -4185,13 +4279,9 @@
4185
4279
  }
4186
4280
 
4187
4281
  getTitle() {
4188
- let title = this._element.getAttribute('data-coreui-original-title');
4189
-
4190
- if (!title) {
4191
- title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;
4192
- }
4282
+ const title = this._element.getAttribute('data-coreui-original-title') || this._config.title;
4193
4283
 
4194
- return title;
4284
+ return this._resolvePossibleFunction(title);
4195
4285
  }
4196
4286
 
4197
4287
  updateAttachment(attachment) {
@@ -4208,15 +4298,7 @@
4208
4298
 
4209
4299
 
4210
4300
  _initializeOnDelegatedTarget(event, context) {
4211
- const dataKey = this.constructor.DATA_KEY;
4212
- context = context || Data.get(event.delegateTarget, dataKey);
4213
-
4214
- if (!context) {
4215
- context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
4216
- Data.set(event.delegateTarget, dataKey, context);
4217
- }
4218
-
4219
- return context;
4301
+ return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
4220
4302
  }
4221
4303
 
4222
4304
  _getOffset() {
@@ -4235,6 +4317,10 @@
4235
4317
  return offset;
4236
4318
  }
4237
4319
 
4320
+ _resolvePossibleFunction(content) {
4321
+ return typeof content === 'function' ? content.call(this._element) : content;
4322
+ }
4323
+
4238
4324
  _getPopperConfig(attachment) {
4239
4325
  const defaultBsPopperConfig = {
4240
4326
  placement: attachment,
@@ -4276,7 +4362,7 @@
4276
4362
  }
4277
4363
 
4278
4364
  _addAttachmentClass(attachment) {
4279
- this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);
4365
+ this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);
4280
4366
  }
4281
4367
 
4282
4368
  _getAttachment(placement) {
@@ -4303,7 +4389,7 @@
4303
4389
  }
4304
4390
  };
4305
4391
 
4306
- EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.coreui.modal', this._hideModalHandler);
4392
+ EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
4307
4393
 
4308
4394
  if (this._config.selector) {
4309
4395
  this._config = { ...this._config,
@@ -4338,7 +4424,7 @@
4338
4424
  context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
4339
4425
  }
4340
4426
 
4341
- if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {
4427
+ if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {
4342
4428
  context._hoverState = HOVER_STATE_SHOW;
4343
4429
  return;
4344
4430
  }
@@ -4434,26 +4520,32 @@
4434
4520
  _getDelegateConfig() {
4435
4521
  const config = {};
4436
4522
 
4437
- if (this._config) {
4438
- for (const key in this._config) {
4439
- if (this.constructor.Default[key] !== this._config[key]) {
4440
- config[key] = this._config[key];
4441
- }
4523
+ for (const key in this._config) {
4524
+ if (this.constructor.Default[key] !== this._config[key]) {
4525
+ config[key] = this._config[key];
4442
4526
  }
4443
- }
4527
+ } // In the future can be replaced with:
4528
+ // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
4529
+ // `Object.fromEntries(keysWithDifferentValues)`
4530
+
4444
4531
 
4445
4532
  return config;
4446
4533
  }
4447
4534
 
4448
4535
  _cleanTipClass() {
4449
4536
  const tip = this.getTipElement();
4450
- const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);
4537
+ const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g');
4538
+ const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);
4451
4539
 
4452
4540
  if (tabClass !== null && tabClass.length > 0) {
4453
4541
  tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
4454
4542
  }
4455
4543
  }
4456
4544
 
4545
+ _getBasicClassPrefix() {
4546
+ return CLASS_PREFIX$1;
4547
+ }
4548
+
4457
4549
  _handlePopperPlacementChange(popperData) {
4458
4550
  const {
4459
4551
  state
@@ -4468,6 +4560,14 @@
4468
4560
  this._cleanTipClass();
4469
4561
 
4470
4562
  this._addAttachmentClass(this._getAttachment(state.placement));
4563
+ }
4564
+
4565
+ _disposePopper() {
4566
+ if (this._popper) {
4567
+ this._popper.destroy();
4568
+
4569
+ this._popper = null;
4570
+ }
4471
4571
  } // Static
4472
4572
 
4473
4573
 
@@ -4498,7 +4598,7 @@
4498
4598
 
4499
4599
  /**
4500
4600
  * --------------------------------------------------------------------------
4501
- * CoreUI (v4.0.5): popover.js
4601
+ * CoreUI (v4.1.2): popover.js
4502
4602
  * Licensed under MIT (https://coreui.io/license)
4503
4603
  *
4504
4604
  * This component is a modified version of the Bootstrap's popover.js
@@ -4515,7 +4615,6 @@
4515
4615
  const DATA_KEY$4 = 'coreui.popover';
4516
4616
  const EVENT_KEY$4 = `.${DATA_KEY$4}`;
4517
4617
  const CLASS_PREFIX = 'bs-popover';
4518
- const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
4519
4618
  const Default$3 = { ...Tooltip.Default,
4520
4619
  placement: 'right',
4521
4620
  offset: [0, 8],
@@ -4538,8 +4637,6 @@
4538
4637
  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,
4539
4638
  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`
4540
4639
  };
4541
- const CLASS_NAME_FADE$3 = 'fade';
4542
- const CLASS_NAME_SHOW$3 = 'show';
4543
4640
  const SELECTOR_TITLE = '.popover-header';
4544
4641
  const SELECTOR_CONTENT = '.popover-body';
4545
4642
  /**
@@ -4571,55 +4668,19 @@
4571
4668
  return this.getTitle() || this._getContent();
4572
4669
  }
4573
4670
 
4574
- getTipElement() {
4575
- if (this.tip) {
4576
- return this.tip;
4577
- }
4578
-
4579
- this.tip = super.getTipElement();
4580
-
4581
- if (!this.getTitle()) {
4582
- SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();
4583
- }
4584
-
4585
- if (!this._getContent()) {
4586
- SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();
4587
- }
4588
-
4589
- return this.tip;
4590
- }
4591
-
4592
- setContent() {
4593
- const tip = this.getTipElement(); // we use append for html objects to maintain js events
4671
+ setContent(tip) {
4672
+ this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
4594
4673
 
4595
- this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());
4596
-
4597
- let content = this._getContent();
4598
-
4599
- if (typeof content === 'function') {
4600
- content = content.call(this._element);
4601
- }
4602
-
4603
- this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);
4604
- tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);
4674
+ this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
4605
4675
  } // Private
4606
4676
 
4607
4677
 
4608
- _addAttachmentClass(attachment) {
4609
- this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
4610
- }
4611
-
4612
4678
  _getContent() {
4613
- return this._element.getAttribute('data-coreui-content') || this._config.content;
4679
+ return this._resolvePossibleFunction(this._config.content);
4614
4680
  }
4615
4681
 
4616
- _cleanTipClass() {
4617
- const tip = this.getTipElement();
4618
- const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
4619
-
4620
- if (tabClass !== null && tabClass.length > 0) {
4621
- tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
4622
- }
4682
+ _getBasicClassPrefix() {
4683
+ return CLASS_PREFIX;
4623
4684
  } // Static
4624
4685
 
4625
4686
 
@@ -4650,7 +4711,7 @@
4650
4711
 
4651
4712
  /**
4652
4713
  * --------------------------------------------------------------------------
4653
- * CoreUI (v4.0.5): scrollspy.js
4714
+ * CoreUI (v4.1.2): scrollspy.js
4654
4715
  * Licensed under MIT (https://coreui.io/license)
4655
4716
  *
4656
4717
  * This component is a modified version of the Bootstrap's scrollspy.js
@@ -4888,7 +4949,7 @@
4888
4949
 
4889
4950
  /**
4890
4951
  * --------------------------------------------------------------------------
4891
- * CoreUI (v4.0.5): sidebar.js
4952
+ * CoreUI (v4.1.2): sidebar.js
4892
4953
  * Licensed under MIT (https://coreui.io/license)
4893
4954
  * --------------------------------------------------------------------------
4894
4955
  */
@@ -4905,7 +4966,6 @@
4905
4966
  const Default$1 = {};
4906
4967
  const DefaultType$1 = {};
4907
4968
  const CLASS_NAME_BACKDROP = 'sidebar-backdrop';
4908
- const CLASS_NAME_FADE$2 = 'fade';
4909
4969
  const CLASS_NAME_HIDE$1 = 'hide';
4910
4970
  const CLASS_NAME_SHOW$2 = 'show';
4911
4971
  const CLASS_NAME_SIDEBAR_NARROW = 'sidebar-narrow';
@@ -4936,7 +4996,7 @@
4936
4996
  this._overlaid = this._isOverlaid();
4937
4997
  this._narrow = this._isNarrow();
4938
4998
  this._unfoldable = this._isUnfoldable();
4939
- this._backdrop = null;
4999
+ this._backdrop = this._initializeBackDrop();
4940
5000
 
4941
5001
  this._addEventListeners();
4942
5002
  } // Getters
@@ -4965,7 +5025,9 @@
4965
5025
  if (this._isMobile()) {
4966
5026
  this._element.classList.add(CLASS_NAME_SHOW$2);
4967
5027
 
4968
- this._showBackdrop();
5028
+ this._backdrop.show();
5029
+
5030
+ new ScrollBarHelper().hide();
4969
5031
  }
4970
5032
 
4971
5033
  const complete = () => {
@@ -4991,7 +5053,9 @@
4991
5053
  }
4992
5054
 
4993
5055
  if (this._isMobile()) {
4994
- this._removeBackdrop();
5056
+ this._backdrop.hide();
5057
+
5058
+ new ScrollBarHelper().reset();
4995
5059
  } else {
4996
5060
  this._element.classList.add(CLASS_NAME_HIDE$1);
4997
5061
  }
@@ -5080,6 +5144,16 @@
5080
5144
  return config;
5081
5145
  }
5082
5146
 
5147
+ _initializeBackDrop() {
5148
+ return new Backdrop({
5149
+ className: CLASS_NAME_BACKDROP,
5150
+ isVisible: this._isMobile(),
5151
+ isAnimated: true,
5152
+ rootElement: this._element.parentNode,
5153
+ clickCallback: () => this.hide()
5154
+ });
5155
+ }
5156
+
5083
5157
  _isMobile() {
5084
5158
  return Boolean(window.getComputedStyle(this._element, null).getPropertyValue('--cui-is-mobile'));
5085
5159
  }
@@ -5099,35 +5173,13 @@
5099
5173
  _isVisible() {
5100
5174
  const rect = this._element.getBoundingClientRect();
5101
5175
 
5102
- return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
5176
+ return rect.top >= 0 && rect.left >= 0 && Math.floor(rect.bottom) <= (window.innerHeight || document.documentElement.clientHeight) && Math.floor(rect.right) <= (window.innerWidth || document.documentElement.clientWidth);
5103
5177
  }
5104
5178
 
5105
5179
  _addClassName(className) {
5106
5180
  this._element.classList.add(className);
5107
5181
  }
5108
5182
 
5109
- _removeBackdrop() {
5110
- if (this._backdrop) {
5111
- this._backdrop.parentNode.removeChild(this._backdrop);
5112
-
5113
- this._backdrop = null;
5114
- }
5115
- }
5116
-
5117
- _showBackdrop() {
5118
- if (!this._backdrop) {
5119
- this._backdrop = document.createElement('div');
5120
- this._backdrop.className = CLASS_NAME_BACKDROP;
5121
-
5122
- this._backdrop.classList.add(CLASS_NAME_FADE$2);
5123
-
5124
- document.body.appendChild(this._backdrop);
5125
- reflow(this._backdrop);
5126
-
5127
- this._backdrop.classList.add(CLASS_NAME_SHOW$2);
5128
- }
5129
- }
5130
-
5131
5183
  _clickOutListener(event, sidebar) {
5132
5184
  if (event.target.closest(SELECTOR_SIDEBAR) === null) {
5133
5185
  event.preventDefault();
@@ -5175,6 +5227,7 @@
5175
5227
  EventHandler.on(window, EVENT_RESIZE, () => {
5176
5228
  if (this._isMobile() && this._isVisible()) {
5177
5229
  this.hide();
5230
+ this._backdrop = this._initializeBackDrop();
5178
5231
  }
5179
5232
  });
5180
5233
  } // Static
@@ -5221,7 +5274,7 @@
5221
5274
 
5222
5275
  /**
5223
5276
  * --------------------------------------------------------------------------
5224
- * CoreUI (v4.0.5): tab.js
5277
+ * CoreUI (v4.1.2): tab.js
5225
5278
  * Licensed under MIT (https://coreui.io/license)
5226
5279
  *
5227
5280
  * This component is a modified version of the Bootstrap's tab.js
@@ -5422,7 +5475,7 @@
5422
5475
 
5423
5476
  /**
5424
5477
  * --------------------------------------------------------------------------
5425
- * CoreUI (v4.0.5): toast.js
5478
+ * CoreUI (v4.1.2): toast.js
5426
5479
  * Licensed under MIT (https://coreui.io/license)
5427
5480
  *
5428
5481
  * This component is a modified version of the Bootstrap's toast.js
@@ -5438,7 +5491,6 @@
5438
5491
  const NAME = 'toast';
5439
5492
  const DATA_KEY = 'coreui.toast';
5440
5493
  const EVENT_KEY = `.${DATA_KEY}`;
5441
- const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
5442
5494
  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
5443
5495
  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
5444
5496
  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
@@ -5448,7 +5500,8 @@
5448
5500
  const EVENT_SHOW = `show${EVENT_KEY}`;
5449
5501
  const EVENT_SHOWN = `shown${EVENT_KEY}`;
5450
5502
  const CLASS_NAME_FADE = 'fade';
5451
- const CLASS_NAME_HIDE = 'hide';
5503
+ const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
5504
+
5452
5505
  const CLASS_NAME_SHOW = 'show';
5453
5506
  const CLASS_NAME_SHOWING = 'showing';
5454
5507
  const DefaultType = {
@@ -5461,7 +5514,6 @@
5461
5514
  autohide: true,
5462
5515
  delay: 5000
5463
5516
  };
5464
- const SELECTOR_DATA_DISMISS = '[data-coreui-dismiss="toast"]';
5465
5517
  /**
5466
5518
  * ------------------------------------------------------------------------
5467
5519
  * Class Definition
@@ -5509,17 +5561,18 @@
5509
5561
  const complete = () => {
5510
5562
  this._element.classList.remove(CLASS_NAME_SHOWING);
5511
5563
 
5512
- this._element.classList.add(CLASS_NAME_SHOW);
5513
-
5514
5564
  EventHandler.trigger(this._element, EVENT_SHOWN);
5515
5565
 
5516
5566
  this._maybeScheduleHide();
5517
5567
  };
5518
5568
 
5519
- this._element.classList.remove(CLASS_NAME_HIDE);
5569
+ this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
5570
+
5520
5571
 
5521
5572
  reflow(this._element);
5522
5573
 
5574
+ this._element.classList.add(CLASS_NAME_SHOW);
5575
+
5523
5576
  this._element.classList.add(CLASS_NAME_SHOWING);
5524
5577
 
5525
5578
  this._queueCallback(complete, this._element, this._config.animation);
@@ -5537,12 +5590,17 @@
5537
5590
  }
5538
5591
 
5539
5592
  const complete = () => {
5540
- this._element.classList.add(CLASS_NAME_HIDE);
5593
+ this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
5594
+
5595
+
5596
+ this._element.classList.remove(CLASS_NAME_SHOWING);
5597
+
5598
+ this._element.classList.remove(CLASS_NAME_SHOW);
5541
5599
 
5542
5600
  EventHandler.trigger(this._element, EVENT_HIDDEN);
5543
5601
  };
5544
5602
 
5545
- this._element.classList.remove(CLASS_NAME_SHOW);
5603
+ this._element.classList.add(CLASS_NAME_SHOWING);
5546
5604
 
5547
5605
  this._queueCallback(complete, this._element, this._config.animation);
5548
5606
  }
@@ -5610,7 +5668,6 @@
5610
5668
  }
5611
5669
 
5612
5670
  _setListeners() {
5613
- EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());
5614
5671
  EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
5615
5672
  EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
5616
5673
  EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
@@ -5638,6 +5695,8 @@
5638
5695
  }
5639
5696
 
5640
5697
  }
5698
+
5699
+ enableDismissTrigger(Toast);
5641
5700
  /**
5642
5701
  * ------------------------------------------------------------------------
5643
5702
  * jQuery
@@ -5645,16 +5704,15 @@
5645
5704
  * add .Toast to jQuery only if jQuery is present
5646
5705
  */
5647
5706
 
5648
-
5649
5707
  defineJQueryPlugin(Toast);
5650
5708
 
5651
5709
  /**
5652
5710
  * --------------------------------------------------------------------------
5653
- * CoreUI (v4.0.5): index.esm.js
5711
+ * CoreUI (v4.1.2): index.esm.js
5654
5712
  * Licensed under MIT (https://coreui.io/license)
5655
5713
  * --------------------------------------------------------------------------
5656
5714
  */
5657
- var index_umd = {
5715
+ const index_umd = {
5658
5716
  Alert,
5659
5717
  Button,
5660
5718
  Carousel,
@@ -5673,5 +5731,5 @@
5673
5731
 
5674
5732
  return index_umd;
5675
5733
 
5676
- })));
5734
+ }));
5677
5735
  //# sourceMappingURL=coreui.js.map