bootstrap 4.1.3 → 5.0.0

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +17 -2
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +7 -4
  5. data/Rakefile +2 -2
  6. data/assets/javascripts/bootstrap/alert.js +226 -166
  7. data/assets/javascripts/bootstrap/base-component.js +63 -0
  8. data/assets/javascripts/bootstrap/button.js +119 -165
  9. data/assets/javascripts/bootstrap/carousel.js +634 -445
  10. data/assets/javascripts/bootstrap/collapse.js +447 -327
  11. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  12. data/assets/javascripts/bootstrap/dom/event-handler.js +322 -0
  13. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  14. data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
  15. data/assets/javascripts/bootstrap/dropdown.js +550 -425
  16. data/assets/javascripts/bootstrap/modal.js +695 -492
  17. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  18. data/assets/javascripts/bootstrap/popover.js +167 -217
  19. data/assets/javascripts/bootstrap/scrollspy.js +319 -302
  20. data/assets/javascripts/bootstrap/tab.js +303 -221
  21. data/assets/javascripts/bootstrap/toast.js +333 -0
  22. data/assets/javascripts/bootstrap/tooltip.js +896 -577
  23. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  24. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  25. data/assets/javascripts/bootstrap-sprockets.js +15 -7
  26. data/assets/javascripts/bootstrap.js +4262 -3163
  27. data/assets/javascripts/bootstrap.min.js +4 -4
  28. data/assets/stylesheets/_bootstrap-grid.scss +54 -21
  29. data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
  30. data/assets/stylesheets/_bootstrap.scss +21 -11
  31. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  32. data/assets/stylesheets/bootstrap/_alert.scss +15 -9
  33. data/assets/stylesheets/bootstrap/_badge.scss +3 -21
  34. data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -18
  35. data/assets/stylesheets/bootstrap/_button-group.scss +29 -62
  36. data/assets/stylesheets/bootstrap/_buttons.scss +33 -65
  37. data/assets/stylesheets/bootstrap/_card.scss +55 -141
  38. data/assets/stylesheets/bootstrap/_carousel.scss +94 -101
  39. data/assets/stylesheets/bootstrap/_close.scss +33 -28
  40. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  41. data/assets/stylesheets/bootstrap/_dropdown.scss +114 -40
  42. data/assets/stylesheets/bootstrap/_forms.scss +9 -333
  43. data/assets/stylesheets/bootstrap/_functions.scss +148 -29
  44. data/assets/stylesheets/bootstrap/_grid.scss +4 -34
  45. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  46. data/assets/stylesheets/bootstrap/_images.scss +4 -4
  47. data/assets/stylesheets/bootstrap/_list-group.scss +86 -27
  48. data/assets/stylesheets/bootstrap/_mixins.scss +17 -16
  49. data/assets/stylesheets/bootstrap/_modal.scss +90 -42
  50. data/assets/stylesheets/bootstrap/_nav.scss +31 -10
  51. data/assets/stylesheets/bootstrap/_navbar.scss +68 -61
  52. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  53. data/assets/stylesheets/bootstrap/_pagination.scss +13 -27
  54. data/assets/stylesheets/bootstrap/_popover.scss +63 -88
  55. data/assets/stylesheets/bootstrap/_progress.scss +20 -6
  56. data/assets/stylesheets/bootstrap/_reboot.scss +349 -211
  57. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  58. data/assets/stylesheets/bootstrap/_spinners.scss +69 -0
  59. data/assets/stylesheets/bootstrap/_tables.scss +79 -116
  60. data/assets/stylesheets/bootstrap/_toasts.scss +51 -0
  61. data/assets/stylesheets/bootstrap/_tooltip.scss +18 -18
  62. data/assets/stylesheets/bootstrap/_transitions.scss +2 -3
  63. data/assets/stylesheets/bootstrap/_type.scss +42 -63
  64. data/assets/stylesheets/bootstrap/_utilities.scss +594 -15
  65. data/assets/stylesheets/bootstrap/_variables.scss +952 -440
  66. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  67. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  70. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  71. data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
  72. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  73. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  74. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  75. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  76. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  77. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  78. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  79. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  80. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  81. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  82. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  83. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +57 -14
  84. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +14 -1
  85. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +13 -9
  86. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +77 -53
  87. data/assets/stylesheets/bootstrap/mixins/_caret.scss +14 -16
  88. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  89. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  90. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  91. data/assets/stylesheets/bootstrap/mixins/_deprecate.scss +10 -0
  92. data/assets/stylesheets/bootstrap/mixins/_forms.scss +87 -97
  93. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  94. data/assets/stylesheets/bootstrap/mixins/_grid.scss +106 -33
  95. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  96. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  97. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +18 -9
  98. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  99. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  100. data/assets/stylesheets/bootstrap/mixins/_transition.scss +19 -6
  101. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  102. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  103. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  104. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +312 -0
  105. data/bootstrap.gemspec +7 -6
  106. data/lib/bootstrap/engine.rb +3 -0
  107. data/lib/bootstrap/version.rb +4 -2
  108. data/lib/bootstrap.rb +10 -7
  109. data/tasks/updater/js.rb +20 -5
  110. data/tasks/updater/network.rb +8 -2
  111. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  112. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  113. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  114. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  115. data/test/dummy_rails/app/views/pages/root.html +89 -0
  116. data/test/dummy_rails/config/application.rb +0 -3
  117. data/test/gemfiles/rails_6_0.gemfile +7 -0
  118. data/test/gemfiles/rails_6_1.gemfile +7 -0
  119. data/test/support/dummy_rails_integration.rb +3 -1
  120. data/test/test_helper.rb +18 -13
  121. metadata +64 -79
  122. data/assets/javascripts/bootstrap/util.js +0 -143
  123. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  124. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -433
  125. data/assets/stylesheets/bootstrap/_input-group.scss +0 -173
  126. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -16
  127. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  128. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  129. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  130. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -12
  131. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -11
  132. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -67
  133. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  134. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  135. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
  136. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -6
  137. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -30
  138. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -14
  139. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -13
  140. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -7
  141. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  142. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  143. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -59
  144. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -38
  145. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -52
  146. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  147. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -9
  148. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -37
  149. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  150. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  151. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -12
  152. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -51
  153. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -58
  154. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -11
  155. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  156. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,276 +1,358 @@
1
+ /*!
2
+ * Bootstrap tab.js v5.0.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ */
1
6
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
3
- typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
4
- (global.Tab = factory(global.jQuery,global.Util));
5
- }(this, (function ($,Util) { 'use strict';
6
-
7
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
8
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
9
-
10
- function _defineProperties(target, props) {
11
- for (var i = 0; i < props.length; i++) {
12
- var descriptor = props[i];
13
- descriptor.enumerable = descriptor.enumerable || false;
14
- descriptor.configurable = true;
15
- if ("value" in descriptor) descriptor.writable = true;
16
- Object.defineProperty(target, descriptor.key, descriptor);
17
- }
18
- }
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.Data, global.EventHandler, global.SelectorEngine, global.Base));
10
+ }(this, (function (Data, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
19
11
 
20
- function _createClass(Constructor, protoProps, staticProps) {
21
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
22
- if (staticProps) _defineProperties(Constructor, staticProps);
23
- return Constructor;
24
- }
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
17
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
25
18
 
26
19
  /**
27
20
  * --------------------------------------------------------------------------
28
- * Bootstrap (v4.1.3): tab.js
29
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
21
+ * Bootstrap (v5.0.0): util/index.js
22
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
30
23
  * --------------------------------------------------------------------------
31
24
  */
25
+ const MILLISECONDS_MULTIPLIER = 1000;
26
+ const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
32
27
 
33
- var Tab = function ($$$1) {
34
- /**
35
- * ------------------------------------------------------------------------
36
- * Constants
37
- * ------------------------------------------------------------------------
38
- */
39
- var NAME = 'tab';
40
- var VERSION = '4.1.3';
41
- var DATA_KEY = 'bs.tab';
42
- var EVENT_KEY = "." + DATA_KEY;
43
- var DATA_API_KEY = '.data-api';
44
- var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
45
- var Event = {
46
- HIDE: "hide" + EVENT_KEY,
47
- HIDDEN: "hidden" + EVENT_KEY,
48
- SHOW: "show" + EVENT_KEY,
49
- SHOWN: "shown" + EVENT_KEY,
50
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
51
- };
52
- var ClassName = {
53
- DROPDOWN_MENU: 'dropdown-menu',
54
- ACTIVE: 'active',
55
- DISABLED: 'disabled',
56
- FADE: 'fade',
57
- SHOW: 'show'
58
- };
59
- var Selector = {
60
- DROPDOWN: '.dropdown',
61
- NAV_LIST_GROUP: '.nav, .list-group',
62
- ACTIVE: '.active',
63
- ACTIVE_UL: '> li > .active',
64
- DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
65
- DROPDOWN_TOGGLE: '.dropdown-toggle',
66
- DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
67
- /**
68
- * ------------------------------------------------------------------------
69
- * Class Definition
70
- * ------------------------------------------------------------------------
71
- */
72
-
73
- };
74
-
75
- var Tab =
76
- /*#__PURE__*/
77
- function () {
78
- function Tab(element) {
79
- this._element = element;
80
- } // Getters
81
-
82
-
83
- var _proto = Tab.prototype;
84
-
85
- // Public
86
- _proto.show = function show() {
87
- var _this = this;
88
-
89
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) {
90
- return;
91
- }
28
+ const getSelector = element => {
29
+ let selector = element.getAttribute('data-bs-target');
92
30
 
93
- var target;
94
- var previous;
95
- var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0];
96
- var selector = Util.getSelectorFromElement(this._element);
31
+ if (!selector || selector === '#') {
32
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
33
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
34
+ // `document.querySelector` will rightfully complain it is invalid.
35
+ // See https://github.com/twbs/bootstrap/issues/32273
97
36
 
98
- if (listElement) {
99
- var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;
100
- previous = $$$1.makeArray($$$1(listElement).find(itemSelector));
101
- previous = previous[previous.length - 1];
102
- }
37
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
38
+ return null;
39
+ } // Just in case some CMS puts out a full URL with the anchor appended
103
40
 
104
- var hideEvent = $$$1.Event(Event.HIDE, {
105
- relatedTarget: this._element
106
- });
107
- var showEvent = $$$1.Event(Event.SHOW, {
108
- relatedTarget: previous
109
- });
110
41
 
111
- if (previous) {
112
- $$$1(previous).trigger(hideEvent);
113
- }
42
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
43
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
44
+ }
114
45
 
115
- $$$1(this._element).trigger(showEvent);
46
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
47
+ }
116
48
 
117
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
118
- return;
119
- }
49
+ return selector;
50
+ };
120
51
 
121
- if (selector) {
122
- target = document.querySelector(selector);
123
- }
52
+ const getElementFromSelector = element => {
53
+ const selector = getSelector(element);
54
+ return selector ? document.querySelector(selector) : null;
55
+ };
124
56
 
125
- this._activate(this._element, listElement);
126
-
127
- var complete = function complete() {
128
- var hiddenEvent = $$$1.Event(Event.HIDDEN, {
129
- relatedTarget: _this._element
130
- });
131
- var shownEvent = $$$1.Event(Event.SHOWN, {
132
- relatedTarget: previous
133
- });
134
- $$$1(previous).trigger(hiddenEvent);
135
- $$$1(_this._element).trigger(shownEvent);
136
- };
57
+ const getTransitionDurationFromElement = element => {
58
+ if (!element) {
59
+ return 0;
60
+ } // Get transition-duration of the element
137
61
 
138
- if (target) {
139
- this._activate(target, target.parentNode, complete);
140
- } else {
141
- complete();
142
- }
143
- };
144
62
 
145
- _proto.dispose = function dispose() {
146
- $$$1.removeData(this._element, DATA_KEY);
147
- this._element = null;
148
- }; // Private
63
+ let {
64
+ transitionDuration,
65
+ transitionDelay
66
+ } = window.getComputedStyle(element);
67
+ const floatTransitionDuration = Number.parseFloat(transitionDuration);
68
+ const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
149
69
 
70
+ if (!floatTransitionDuration && !floatTransitionDelay) {
71
+ return 0;
72
+ } // If multiple durations are defined, take the first
150
73
 
151
- _proto._activate = function _activate(element, container, callback) {
152
- var _this2 = this;
153
74
 
154
- var activeElements;
75
+ transitionDuration = transitionDuration.split(',')[0];
76
+ transitionDelay = transitionDelay.split(',')[0];
77
+ return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
78
+ };
155
79
 
156
- if (container.nodeName === 'UL') {
157
- activeElements = $$$1(container).find(Selector.ACTIVE_UL);
158
- } else {
159
- activeElements = $$$1(container).children(Selector.ACTIVE);
160
- }
80
+ const triggerTransitionEnd = element => {
81
+ element.dispatchEvent(new Event(TRANSITION_END));
82
+ };
83
+
84
+ const emulateTransitionEnd = (element, duration) => {
85
+ let called = false;
86
+ const durationPadding = 5;
87
+ const emulatedDuration = duration + durationPadding;
88
+
89
+ function listener() {
90
+ called = true;
91
+ element.removeEventListener(TRANSITION_END, listener);
92
+ }
161
93
 
162
- var active = activeElements[0];
163
- var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);
94
+ element.addEventListener(TRANSITION_END, listener);
95
+ setTimeout(() => {
96
+ if (!called) {
97
+ triggerTransitionEnd(element);
98
+ }
99
+ }, emulatedDuration);
100
+ };
101
+
102
+ const isDisabled = element => {
103
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
104
+ return true;
105
+ }
106
+
107
+ if (element.classList.contains('disabled')) {
108
+ return true;
109
+ }
110
+
111
+ if (typeof element.disabled !== 'undefined') {
112
+ return element.disabled;
113
+ }
114
+
115
+ return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
116
+ };
117
+
118
+ const reflow = element => element.offsetHeight;
119
+
120
+ const getjQuery = () => {
121
+ const {
122
+ jQuery
123
+ } = window;
124
+
125
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
126
+ return jQuery;
127
+ }
128
+
129
+ return null;
130
+ };
164
131
 
165
- var complete = function complete() {
166
- return _this2._transitionComplete(element, active, callback);
132
+ const onDOMContentLoaded = callback => {
133
+ if (document.readyState === 'loading') {
134
+ document.addEventListener('DOMContentLoaded', callback);
135
+ } else {
136
+ callback();
137
+ }
138
+ };
139
+
140
+ const defineJQueryPlugin = (name, plugin) => {
141
+ onDOMContentLoaded(() => {
142
+ const $ = getjQuery();
143
+ /* istanbul ignore if */
144
+
145
+ if ($) {
146
+ const JQUERY_NO_CONFLICT = $.fn[name];
147
+ $.fn[name] = plugin.jQueryInterface;
148
+ $.fn[name].Constructor = plugin;
149
+
150
+ $.fn[name].noConflict = () => {
151
+ $.fn[name] = JQUERY_NO_CONFLICT;
152
+ return plugin.jQueryInterface;
167
153
  };
154
+ }
155
+ });
156
+ };
168
157
 
169
- if (active && isTransitioning) {
170
- var transitionDuration = Util.getTransitionDurationFromElement(active);
171
- $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
172
- } else {
173
- complete();
174
- }
158
+ /**
159
+ * --------------------------------------------------------------------------
160
+ * Bootstrap (v5.0.0): tab.js
161
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
162
+ * --------------------------------------------------------------------------
163
+ */
164
+ /**
165
+ * ------------------------------------------------------------------------
166
+ * Constants
167
+ * ------------------------------------------------------------------------
168
+ */
169
+
170
+ const NAME = 'tab';
171
+ const DATA_KEY = 'bs.tab';
172
+ const EVENT_KEY = `.${DATA_KEY}`;
173
+ const DATA_API_KEY = '.data-api';
174
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
175
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
176
+ const EVENT_SHOW = `show${EVENT_KEY}`;
177
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
178
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
179
+ const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
180
+ const CLASS_NAME_ACTIVE = 'active';
181
+ const CLASS_NAME_FADE = 'fade';
182
+ const CLASS_NAME_SHOW = 'show';
183
+ const SELECTOR_DROPDOWN = '.dropdown';
184
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
185
+ const SELECTOR_ACTIVE = '.active';
186
+ const SELECTOR_ACTIVE_UL = ':scope > li > .active';
187
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
188
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
189
+ const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
190
+ /**
191
+ * ------------------------------------------------------------------------
192
+ * Class Definition
193
+ * ------------------------------------------------------------------------
194
+ */
195
+
196
+ class Tab extends BaseComponent__default['default'] {
197
+ // Getters
198
+ static get DATA_KEY() {
199
+ return DATA_KEY;
200
+ } // Public
201
+
202
+
203
+ show() {
204
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
205
+ return;
206
+ }
207
+
208
+ let previous;
209
+ const target = getElementFromSelector(this._element);
210
+
211
+ const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
212
+
213
+ if (listElement) {
214
+ const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
215
+ previous = SelectorEngine__default['default'].find(itemSelector, listElement);
216
+ previous = previous[previous.length - 1];
217
+ }
218
+
219
+ const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
220
+ relatedTarget: this._element
221
+ }) : null;
222
+ const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
223
+ relatedTarget: previous
224
+ });
225
+
226
+ if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
227
+ return;
228
+ }
229
+
230
+ this._activate(this._element, listElement);
231
+
232
+ const complete = () => {
233
+ EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
234
+ relatedTarget: this._element
235
+ });
236
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
237
+ relatedTarget: previous
238
+ });
175
239
  };
176
240
 
177
- _proto._transitionComplete = function _transitionComplete(element, active, callback) {
178
- if (active) {
179
- $$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
180
- var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
241
+ if (target) {
242
+ this._activate(target, target.parentNode, complete);
243
+ } else {
244
+ complete();
245
+ }
246
+ } // Private
247
+
248
+
249
+ _activate(element, container, callback) {
250
+ const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
251
+ const active = activeElements[0];
252
+ const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
253
+
254
+ const complete = () => this._transitionComplete(element, active, callback);
255
+
256
+ if (active && isTransitioning) {
257
+ const transitionDuration = getTransitionDurationFromElement(active);
258
+ active.classList.remove(CLASS_NAME_SHOW);
259
+ EventHandler__default['default'].one(active, 'transitionend', complete);
260
+ emulateTransitionEnd(active, transitionDuration);
261
+ } else {
262
+ complete();
263
+ }
264
+ }
181
265
 
182
- if (dropdownChild) {
183
- $$$1(dropdownChild).removeClass(ClassName.ACTIVE);
184
- }
266
+ _transitionComplete(element, active, callback) {
267
+ if (active) {
268
+ active.classList.remove(CLASS_NAME_ACTIVE);
269
+ const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
185
270
 
186
- if (active.getAttribute('role') === 'tab') {
187
- active.setAttribute('aria-selected', false);
188
- }
271
+ if (dropdownChild) {
272
+ dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
189
273
  }
190
274
 
191
- $$$1(element).addClass(ClassName.ACTIVE);
192
-
193
- if (element.getAttribute('role') === 'tab') {
194
- element.setAttribute('aria-selected', true);
275
+ if (active.getAttribute('role') === 'tab') {
276
+ active.setAttribute('aria-selected', false);
195
277
  }
278
+ }
196
279
 
197
- Util.reflow(element);
198
- $$$1(element).addClass(ClassName.SHOW);
280
+ element.classList.add(CLASS_NAME_ACTIVE);
199
281
 
200
- if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
201
- var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];
282
+ if (element.getAttribute('role') === 'tab') {
283
+ element.setAttribute('aria-selected', true);
284
+ }
202
285
 
203
- if (dropdownElement) {
204
- var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));
205
- $$$1(dropdownToggleList).addClass(ClassName.ACTIVE);
206
- }
286
+ reflow(element);
207
287
 
208
- element.setAttribute('aria-expanded', true);
209
- }
288
+ if (element.classList.contains(CLASS_NAME_FADE)) {
289
+ element.classList.add(CLASS_NAME_SHOW);
290
+ }
291
+
292
+ let parent = element.parentNode;
293
+
294
+ if (parent && parent.nodeName === 'LI') {
295
+ parent = parent.parentNode;
296
+ }
210
297
 
211
- if (callback) {
212
- callback();
298
+ if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
299
+ const dropdownElement = element.closest(SELECTOR_DROPDOWN);
300
+
301
+ if (dropdownElement) {
302
+ SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
213
303
  }
214
- }; // Static
215
304
 
305
+ element.setAttribute('aria-expanded', true);
306
+ }
216
307
 
217
- Tab._jQueryInterface = function _jQueryInterface(config) {
218
- return this.each(function () {
219
- var $this = $$$1(this);
220
- var data = $this.data(DATA_KEY);
308
+ if (callback) {
309
+ callback();
310
+ }
311
+ } // Static
221
312
 
222
- if (!data) {
223
- data = new Tab(this);
224
- $this.data(DATA_KEY, data);
225
- }
226
313
 
227
- if (typeof config === 'string') {
228
- if (typeof data[config] === 'undefined') {
229
- throw new TypeError("No method named \"" + config + "\"");
230
- }
314
+ static jQueryInterface(config) {
315
+ return this.each(function () {
316
+ const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
231
317
 
232
- data[config]();
318
+ if (typeof config === 'string') {
319
+ if (typeof data[config] === 'undefined') {
320
+ throw new TypeError(`No method named "${config}"`);
233
321
  }
234
- });
235
- };
236
322
 
237
- _createClass(Tab, null, [{
238
- key: "VERSION",
239
- get: function get() {
240
- return VERSION;
323
+ data[config]();
241
324
  }
242
- }]);
325
+ });
326
+ }
243
327
 
244
- return Tab;
245
- }();
246
- /**
247
- * ------------------------------------------------------------------------
248
- * Data Api implementation
249
- * ------------------------------------------------------------------------
250
- */
328
+ }
329
+ /**
330
+ * ------------------------------------------------------------------------
331
+ * Data Api implementation
332
+ * ------------------------------------------------------------------------
333
+ */
251
334
 
252
335
 
253
- $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
336
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
337
+ if (['A', 'AREA'].includes(this.tagName)) {
254
338
  event.preventDefault();
339
+ }
255
340
 
256
- Tab._jQueryInterface.call($$$1(this), 'show');
257
- });
258
- /**
259
- * ------------------------------------------------------------------------
260
- * jQuery
261
- * ------------------------------------------------------------------------
262
- */
263
-
264
- $$$1.fn[NAME] = Tab._jQueryInterface;
265
- $$$1.fn[NAME].Constructor = Tab;
266
-
267
- $$$1.fn[NAME].noConflict = function () {
268
- $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
269
- return Tab._jQueryInterface;
270
- };
271
-
272
- return Tab;
273
- }($);
341
+ if (isDisabled(this)) {
342
+ return;
343
+ }
344
+
345
+ const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
346
+ data.show();
347
+ });
348
+ /**
349
+ * ------------------------------------------------------------------------
350
+ * jQuery
351
+ * ------------------------------------------------------------------------
352
+ * add .Tab to jQuery only if jQuery is present
353
+ */
354
+
355
+ defineJQueryPlugin(NAME, Tab);
274
356
 
275
357
  return Tab;
276
358