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