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