bootstrap 4.4.1 → 5.0.1

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 +13 -2
  3. data/README.md +7 -4
  4. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  5. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  6. data/assets/javascripts/bootstrap-sprockets.js +15 -8
  7. data/assets/javascripts/bootstrap.js +3244 -2770
  8. data/assets/javascripts/bootstrap.min.js +4 -4
  9. data/assets/javascripts/bootstrap/alert.js +130 -124
  10. data/assets/javascripts/bootstrap/base-component.js +168 -0
  11. data/assets/javascripts/bootstrap/button.js +85 -179
  12. data/assets/javascripts/bootstrap/carousel.js +430 -405
  13. data/assets/javascripts/bootstrap/collapse.js +325 -264
  14. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +315 -0
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
  18. data/assets/javascripts/bootstrap/dropdown.js +464 -400
  19. data/assets/javascripts/bootstrap/modal.js +604 -464
  20. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  21. data/assets/javascripts/bootstrap/popover.js +119 -192
  22. data/assets/javascripts/bootstrap/scrollspy.js +250 -238
  23. data/assets/javascripts/bootstrap/tab.js +189 -151
  24. data/assets/javascripts/bootstrap/toast.js +215 -192
  25. data/assets/javascripts/bootstrap/tooltip.js +604 -544
  26. data/assets/stylesheets/_bootstrap-grid.scss +54 -18
  27. data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
  28. data/assets/stylesheets/_bootstrap.scss +19 -11
  29. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  30. data/assets/stylesheets/bootstrap/_alert.scss +15 -9
  31. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  32. data/assets/stylesheets/bootstrap/_breadcrumb.scss +4 -18
  33. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  34. data/assets/stylesheets/bootstrap/_buttons.scss +27 -55
  35. data/assets/stylesheets/bootstrap/_card.scss +43 -106
  36. data/assets/stylesheets/bootstrap/_carousel.scss +65 -33
  37. data/assets/stylesheets/bootstrap/_close.scss +30 -31
  38. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  39. data/assets/stylesheets/bootstrap/_dropdown.scss +87 -38
  40. data/assets/stylesheets/bootstrap/_forms.scss +9 -338
  41. data/assets/stylesheets/bootstrap/_functions.scss +99 -28
  42. data/assets/stylesheets/bootstrap/_grid.scss +3 -50
  43. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  44. data/assets/stylesheets/bootstrap/_list-group.scss +38 -22
  45. data/assets/stylesheets/bootstrap/_mixins.scss +8 -13
  46. data/assets/stylesheets/bootstrap/_modal.scss +45 -65
  47. data/assets/stylesheets/bootstrap/_nav.scss +28 -9
  48. data/assets/stylesheets/bootstrap/_navbar.scss +51 -69
  49. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  50. data/assets/stylesheets/bootstrap/_pagination.scss +11 -20
  51. data/assets/stylesheets/bootstrap/_popover.scss +15 -27
  52. data/assets/stylesheets/bootstrap/_progress.scss +6 -4
  53. data/assets/stylesheets/bootstrap/_reboot.scss +339 -200
  54. data/assets/stylesheets/bootstrap/_root.scss +5 -9
  55. data/assets/stylesheets/bootstrap/_spinners.scss +21 -7
  56. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  57. data/assets/stylesheets/bootstrap/_toasts.scss +21 -14
  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 -17
  62. data/assets/stylesheets/bootstrap/_variables.scss +810 -489
  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/{utilities → helpers}/_clearfix.scss +0 -0
  74. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  75. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  76. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  77. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  78. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  79. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  80. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  81. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
  82. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  83. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  84. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +75 -52
  85. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  86. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  87. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  88. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  89. data/assets/stylesheets/bootstrap/mixins/_forms.scss +42 -75
  90. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  91. data/assets/stylesheets/bootstrap/mixins/_grid.scss +90 -34
  92. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  93. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  94. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  95. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  96. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  97. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  98. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  99. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  100. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  101. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  102. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
  103. data/bootstrap.gemspec +1 -3
  104. data/lib/bootstrap/version.rb +2 -2
  105. data/tasks/updater/js.rb +20 -5
  106. data/tasks/updater/network.rb +8 -2
  107. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  108. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  109. data/test/dummy_rails/app/views/pages/root.html +89 -0
  110. data/test/dummy_rails/config/application.rb +0 -3
  111. data/test/gemfiles/rails_6_0.gemfile +7 -0
  112. data/test/gemfiles/rails_6_1.gemfile +7 -0
  113. metadata +48 -73
  114. data/assets/javascripts/bootstrap/util.js +0 -188
  115. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  116. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -521
  117. data/assets/stylesheets/bootstrap/_input-group.scss +0 -191
  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 -141
  121. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -22
  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 -71
  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/_overflow.scss +0 -5
  141. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  142. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  143. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  144. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  145. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  146. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  147. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  148. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  149. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -1,135 +1,188 @@
1
1
  /*!
2
- * Bootstrap tab.js v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2
+ * Bootstrap tab.js v5.0.1 (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
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.js'], factory) :
9
- (global = global || self, global.Tab = factory(global.jQuery, global.Util));
10
- }(this, (function ($, Util) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
14
-
15
- function _defineProperties(target, props) {
16
- for (var i = 0; i < props.length; i++) {
17
- var descriptor = props[i];
18
- descriptor.enumerable = descriptor.enumerable || false;
19
- descriptor.configurable = true;
20
- if ("value" in descriptor) descriptor.writable = true;
21
- Object.defineProperty(target, descriptor.key, descriptor);
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/data', './dom/event-handler', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.SelectorEngine, global.Data, global.EventHandler, global.Base));
10
+ }(this, (function (SelectorEngine, Data, EventHandler, BaseComponent) { 'use strict';
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
16
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
17
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
+
19
+ const getSelector = element => {
20
+ let selector = element.getAttribute('data-bs-target');
21
+
22
+ if (!selector || selector === '#') {
23
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
24
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
25
+ // `document.querySelector` will rightfully complain it is invalid.
26
+ // See https://github.com/twbs/bootstrap/issues/32273
27
+
28
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
29
+ return null;
30
+ } // Just in case some CMS puts out a full URL with the anchor appended
31
+
32
+
33
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
34
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
35
+ }
36
+
37
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
22
38
  }
23
- }
24
39
 
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
40
+ return selector;
41
+ };
42
+
43
+ const getElementFromSelector = element => {
44
+ const selector = getSelector(element);
45
+ return selector ? document.querySelector(selector) : null;
46
+ };
47
+
48
+ const isDisabled = element => {
49
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
50
+ return true;
51
+ }
52
+
53
+ if (element.classList.contains('disabled')) {
54
+ return true;
55
+ }
56
+
57
+ if (typeof element.disabled !== 'undefined') {
58
+ return element.disabled;
59
+ }
60
+
61
+ return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
62
+ };
63
+
64
+ const reflow = element => element.offsetHeight;
65
+
66
+ const getjQuery = () => {
67
+ const {
68
+ jQuery
69
+ } = window;
70
+
71
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
72
+ return jQuery;
73
+ }
74
+
75
+ return null;
76
+ };
77
+
78
+ const onDOMContentLoaded = callback => {
79
+ if (document.readyState === 'loading') {
80
+ document.addEventListener('DOMContentLoaded', callback);
81
+ } else {
82
+ callback();
83
+ }
84
+ };
85
+
86
+ const defineJQueryPlugin = plugin => {
87
+ onDOMContentLoaded(() => {
88
+ const $ = getjQuery();
89
+ /* istanbul ignore if */
90
+
91
+ if ($) {
92
+ const name = plugin.NAME;
93
+ const JQUERY_NO_CONFLICT = $.fn[name];
94
+ $.fn[name] = plugin.jQueryInterface;
95
+ $.fn[name].Constructor = plugin;
96
+
97
+ $.fn[name].noConflict = () => {
98
+ $.fn[name] = JQUERY_NO_CONFLICT;
99
+ return plugin.jQueryInterface;
100
+ };
101
+ }
102
+ });
103
+ };
30
104
 
105
+ /**
106
+ * --------------------------------------------------------------------------
107
+ * Bootstrap (v5.0.1): tab.js
108
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
109
+ * --------------------------------------------------------------------------
110
+ */
31
111
  /**
32
112
  * ------------------------------------------------------------------------
33
113
  * Constants
34
114
  * ------------------------------------------------------------------------
35
115
  */
36
116
 
37
- var NAME = 'tab';
38
- var VERSION = '4.4.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 = $.fn[NAME];
43
- var Event = {
44
- HIDE: "hide" + EVENT_KEY,
45
- HIDDEN: "hidden" + EVENT_KEY,
46
- SHOW: "show" + EVENT_KEY,
47
- SHOWN: "shown" + EVENT_KEY,
48
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
49
- };
50
- var ClassName = {
51
- DROPDOWN_MENU: 'dropdown-menu',
52
- ACTIVE: 'active',
53
- DISABLED: 'disabled',
54
- FADE: 'fade',
55
- SHOW: 'show'
56
- };
57
- var Selector = {
58
- DROPDOWN: '.dropdown',
59
- NAV_LIST_GROUP: '.nav, .list-group',
60
- ACTIVE: '.active',
61
- ACTIVE_UL: '> li > .active',
62
- DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
63
- DROPDOWN_TOGGLE: '.dropdown-toggle',
64
- DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
65
- };
117
+ const NAME = 'tab';
118
+ const DATA_KEY = 'bs.tab';
119
+ const EVENT_KEY = `.${DATA_KEY}`;
120
+ const DATA_API_KEY = '.data-api';
121
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
122
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
123
+ const EVENT_SHOW = `show${EVENT_KEY}`;
124
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
125
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
126
+ const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
127
+ const CLASS_NAME_ACTIVE = 'active';
128
+ const CLASS_NAME_FADE = 'fade';
129
+ const CLASS_NAME_SHOW = 'show';
130
+ const SELECTOR_DROPDOWN = '.dropdown';
131
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
132
+ const SELECTOR_ACTIVE = '.active';
133
+ const SELECTOR_ACTIVE_UL = ':scope > li > .active';
134
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
135
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
136
+ const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
66
137
  /**
67
138
  * ------------------------------------------------------------------------
68
139
  * Class Definition
69
140
  * ------------------------------------------------------------------------
70
141
  */
71
142
 
72
- var Tab =
73
- /*#__PURE__*/
74
- function () {
75
- function Tab(element) {
76
- this._element = element;
77
- } // Getters
143
+ class Tab extends BaseComponent__default['default'] {
144
+ // Getters
145
+ static get NAME() {
146
+ return NAME;
147
+ } // Public
78
148
 
79
149
 
80
- var _proto = Tab.prototype;
81
-
82
- // Public
83
- _proto.show = function show() {
84
- var _this = this;
85
-
86
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
150
+ show() {
151
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
87
152
  return;
88
153
  }
89
154
 
90
- var target;
91
- var previous;
92
- var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];
93
- var selector = Util.getSelectorFromElement(this._element);
155
+ let previous;
156
+ const target = getElementFromSelector(this._element);
157
+
158
+ const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
94
159
 
95
160
  if (listElement) {
96
- var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE;
97
- previous = $.makeArray($(listElement).find(itemSelector));
161
+ const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
162
+ previous = SelectorEngine__default['default'].find(itemSelector, listElement);
98
163
  previous = previous[previous.length - 1];
99
164
  }
100
165
 
101
- var hideEvent = $.Event(Event.HIDE, {
166
+ const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
102
167
  relatedTarget: this._element
103
- });
104
- var showEvent = $.Event(Event.SHOW, {
168
+ }) : null;
169
+ const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
105
170
  relatedTarget: previous
106
171
  });
107
172
 
108
- if (previous) {
109
- $(previous).trigger(hideEvent);
110
- }
111
-
112
- $(this._element).trigger(showEvent);
113
-
114
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
173
+ if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
115
174
  return;
116
175
  }
117
176
 
118
- if (selector) {
119
- target = document.querySelector(selector);
120
- }
121
-
122
177
  this._activate(this._element, listElement);
123
178
 
124
- var complete = function complete() {
125
- var hiddenEvent = $.Event(Event.HIDDEN, {
126
- relatedTarget: _this._element
179
+ const complete = () => {
180
+ EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
181
+ relatedTarget: this._element
127
182
  });
128
- var shownEvent = $.Event(Event.SHOWN, {
183
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
129
184
  relatedTarget: previous
130
185
  });
131
- $(previous).trigger(hiddenEvent);
132
- $(_this._element).trigger(shownEvent);
133
186
  };
134
187
 
135
188
  if (target) {
@@ -137,40 +190,32 @@
137
190
  } else {
138
191
  complete();
139
192
  }
140
- };
141
-
142
- _proto.dispose = function dispose() {
143
- $.removeData(this._element, DATA_KEY);
144
- this._element = null;
145
193
  } // Private
146
- ;
147
194
 
148
- _proto._activate = function _activate(element, container, callback) {
149
- var _this2 = this;
150
195
 
151
- var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector.ACTIVE_UL) : $(container).children(Selector.ACTIVE);
152
- var active = activeElements[0];
153
- var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);
196
+ _activate(element, container, callback) {
197
+ const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
198
+ const active = activeElements[0];
199
+ const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
154
200
 
155
- var complete = function complete() {
156
- return _this2._transitionComplete(element, active, callback);
157
- };
201
+ const complete = () => this._transitionComplete(element, active, callback);
158
202
 
159
203
  if (active && isTransitioning) {
160
- var transitionDuration = Util.getTransitionDurationFromElement(active);
161
- $(active).removeClass(ClassName.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
204
+ active.classList.remove(CLASS_NAME_SHOW);
205
+
206
+ this._queueCallback(complete, element, true);
162
207
  } else {
163
208
  complete();
164
209
  }
165
- };
210
+ }
166
211
 
167
- _proto._transitionComplete = function _transitionComplete(element, active, callback) {
212
+ _transitionComplete(element, active, callback) {
168
213
  if (active) {
169
- $(active).removeClass(ClassName.ACTIVE);
170
- var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
214
+ active.classList.remove(CLASS_NAME_ACTIVE);
215
+ const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
171
216
 
172
217
  if (dropdownChild) {
173
- $(dropdownChild).removeClass(ClassName.ACTIVE);
218
+ dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
174
219
  }
175
220
 
176
221
  if (active.getAttribute('role') === 'tab') {
@@ -178,24 +223,29 @@
178
223
  }
179
224
  }
180
225
 
181
- $(element).addClass(ClassName.ACTIVE);
226
+ element.classList.add(CLASS_NAME_ACTIVE);
182
227
 
183
228
  if (element.getAttribute('role') === 'tab') {
184
229
  element.setAttribute('aria-selected', true);
185
230
  }
186
231
 
187
- Util.reflow(element);
232
+ reflow(element);
233
+
234
+ if (element.classList.contains(CLASS_NAME_FADE)) {
235
+ element.classList.add(CLASS_NAME_SHOW);
236
+ }
237
+
238
+ let parent = element.parentNode;
188
239
 
189
- if (element.classList.contains(ClassName.FADE)) {
190
- element.classList.add(ClassName.SHOW);
240
+ if (parent && parent.nodeName === 'LI') {
241
+ parent = parent.parentNode;
191
242
  }
192
243
 
193
- if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
194
- var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
244
+ if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
245
+ const dropdownElement = element.closest(SELECTOR_DROPDOWN);
195
246
 
196
247
  if (dropdownElement) {
197
- var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));
198
- $(dropdownToggleList).addClass(ClassName.ACTIVE);
248
+ SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
199
249
  }
200
250
 
201
251
  element.setAttribute('aria-expanded', true);
@@ -205,37 +255,23 @@
205
255
  callback();
206
256
  }
207
257
  } // Static
208
- ;
209
258
 
210
- Tab._jQueryInterface = function _jQueryInterface(config) {
211
- return this.each(function () {
212
- var $this = $(this);
213
- var data = $this.data(DATA_KEY);
214
259
 
215
- if (!data) {
216
- data = new Tab(this);
217
- $this.data(DATA_KEY, data);
218
- }
260
+ static jQueryInterface(config) {
261
+ return this.each(function () {
262
+ const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
219
263
 
220
264
  if (typeof config === 'string') {
221
265
  if (typeof data[config] === 'undefined') {
222
- throw new TypeError("No method named \"" + config + "\"");
266
+ throw new TypeError(`No method named "${config}"`);
223
267
  }
224
268
 
225
269
  data[config]();
226
270
  }
227
271
  });
228
- };
229
-
230
- _createClass(Tab, null, [{
231
- key: "VERSION",
232
- get: function get() {
233
- return VERSION;
234
- }
235
- }]);
272
+ }
236
273
 
237
- return Tab;
238
- }();
274
+ }
239
275
  /**
240
276
  * ------------------------------------------------------------------------
241
277
  * Data Api implementation
@@ -243,24 +279,26 @@
243
279
  */
244
280
 
245
281
 
246
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
247
- event.preventDefault();
282
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
283
+ if (['A', 'AREA'].includes(this.tagName)) {
284
+ event.preventDefault();
285
+ }
286
+
287
+ if (isDisabled(this)) {
288
+ return;
289
+ }
248
290
 
249
- Tab._jQueryInterface.call($(this), 'show');
291
+ const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
292
+ data.show();
250
293
  });
251
294
  /**
252
295
  * ------------------------------------------------------------------------
253
296
  * jQuery
254
297
  * ------------------------------------------------------------------------
298
+ * add .Tab to jQuery only if jQuery is present
255
299
  */
256
300
 
257
- $.fn[NAME] = Tab._jQueryInterface;
258
- $.fn[NAME].Constructor = Tab;
259
-
260
- $.fn[NAME].noConflict = function () {
261
- $.fn[NAME] = JQUERY_NO_CONFLICT;
262
- return Tab._jQueryInterface;
263
- };
301
+ defineJQueryPlugin(Tab);
264
302
 
265
303
  return Tab;
266
304
 
@@ -1,301 +1,324 @@
1
1
  /*!
2
- * Bootstrap toast.js v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2
+ * Bootstrap toast.js v5.0.1 (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
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.js'], factory) :
9
- (global = global || self, global.Toast = factory(global.jQuery, global.Util));
10
- }(this, (function ($, Util) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
14
-
15
- function _defineProperties(target, props) {
16
- for (var i = 0; i < props.length; i++) {
17
- var descriptor = props[i];
18
- descriptor.enumerable = descriptor.enumerable || false;
19
- descriptor.configurable = true;
20
- if ("value" in descriptor) descriptor.writable = true;
21
- Object.defineProperty(target, descriptor.key, descriptor);
22
- }
23
- }
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.Data, global.EventHandler, global.Manipulator, global.Base));
10
+ }(this, (function (Data, EventHandler, Manipulator, BaseComponent) { 'use strict';
24
11
 
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
30
13
 
31
- function _defineProperty(obj, key, value) {
32
- if (key in obj) {
33
- Object.defineProperty(obj, key, {
34
- value: value,
35
- enumerable: true,
36
- configurable: true,
37
- writable: true
38
- });
39
- } else {
40
- obj[key] = value;
14
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
+
19
+ const toType = obj => {
20
+ if (obj === null || obj === undefined) {
21
+ return `${obj}`;
41
22
  }
42
23
 
43
- return obj;
44
- }
24
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
25
+ };
45
26
 
46
- function ownKeys(object, enumerableOnly) {
47
- var keys = Object.keys(object);
27
+ const isElement = obj => {
28
+ if (!obj || typeof obj !== 'object') {
29
+ return false;
30
+ }
48
31
 
49
- if (Object.getOwnPropertySymbols) {
50
- var symbols = Object.getOwnPropertySymbols(object);
51
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
52
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
53
- });
54
- keys.push.apply(keys, symbols);
32
+ if (typeof obj.jquery !== 'undefined') {
33
+ obj = obj[0];
55
34
  }
56
35
 
57
- return keys;
58
- }
36
+ return typeof obj.nodeType !== 'undefined';
37
+ };
38
+
39
+ const typeCheckConfig = (componentName, config, configTypes) => {
40
+ Object.keys(configTypes).forEach(property => {
41
+ const expectedTypes = configTypes[property];
42
+ const value = config[property];
43
+ const valueType = value && isElement(value) ? 'element' : toType(value);
59
44
 
60
- function _objectSpread2(target) {
61
- for (var i = 1; i < arguments.length; i++) {
62
- var source = arguments[i] != null ? arguments[i] : {};
63
-
64
- if (i % 2) {
65
- ownKeys(Object(source), true).forEach(function (key) {
66
- _defineProperty(target, key, source[key]);
67
- });
68
- } else if (Object.getOwnPropertyDescriptors) {
69
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
70
- } else {
71
- ownKeys(Object(source)).forEach(function (key) {
72
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
73
- });
45
+ if (!new RegExp(expectedTypes).test(valueType)) {
46
+ throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
74
47
  }
48
+ });
49
+ };
50
+
51
+ const reflow = element => element.offsetHeight;
52
+
53
+ const getjQuery = () => {
54
+ const {
55
+ jQuery
56
+ } = window;
57
+
58
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
59
+ return jQuery;
75
60
  }
76
61
 
77
- return target;
78
- }
62
+ return null;
63
+ };
64
+
65
+ const onDOMContentLoaded = callback => {
66
+ if (document.readyState === 'loading') {
67
+ document.addEventListener('DOMContentLoaded', callback);
68
+ } else {
69
+ callback();
70
+ }
71
+ };
72
+
73
+ const defineJQueryPlugin = plugin => {
74
+ onDOMContentLoaded(() => {
75
+ const $ = getjQuery();
76
+ /* istanbul ignore if */
77
+
78
+ if ($) {
79
+ const name = plugin.NAME;
80
+ const JQUERY_NO_CONFLICT = $.fn[name];
81
+ $.fn[name] = plugin.jQueryInterface;
82
+ $.fn[name].Constructor = plugin;
83
+
84
+ $.fn[name].noConflict = () => {
85
+ $.fn[name] = JQUERY_NO_CONFLICT;
86
+ return plugin.jQueryInterface;
87
+ };
88
+ }
89
+ });
90
+ };
79
91
 
92
+ /**
93
+ * --------------------------------------------------------------------------
94
+ * Bootstrap (v5.0.1): toast.js
95
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
96
+ * --------------------------------------------------------------------------
97
+ */
80
98
  /**
81
99
  * ------------------------------------------------------------------------
82
100
  * Constants
83
101
  * ------------------------------------------------------------------------
84
102
  */
85
103
 
86
- var NAME = 'toast';
87
- var VERSION = '4.4.1';
88
- var DATA_KEY = 'bs.toast';
89
- var EVENT_KEY = "." + DATA_KEY;
90
- var JQUERY_NO_CONFLICT = $.fn[NAME];
91
- var Event = {
92
- CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
93
- HIDE: "hide" + EVENT_KEY,
94
- HIDDEN: "hidden" + EVENT_KEY,
95
- SHOW: "show" + EVENT_KEY,
96
- SHOWN: "shown" + EVENT_KEY
97
- };
98
- var ClassName = {
99
- FADE: 'fade',
100
- HIDE: 'hide',
101
- SHOW: 'show',
102
- SHOWING: 'showing'
103
- };
104
- var DefaultType = {
104
+ const NAME = 'toast';
105
+ const DATA_KEY = 'bs.toast';
106
+ const EVENT_KEY = `.${DATA_KEY}`;
107
+ const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
108
+ const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
109
+ const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
110
+ const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
111
+ const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
112
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
113
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
114
+ const EVENT_SHOW = `show${EVENT_KEY}`;
115
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
116
+ const CLASS_NAME_FADE = 'fade';
117
+ const CLASS_NAME_HIDE = 'hide';
118
+ const CLASS_NAME_SHOW = 'show';
119
+ const CLASS_NAME_SHOWING = 'showing';
120
+ const DefaultType = {
105
121
  animation: 'boolean',
106
122
  autohide: 'boolean',
107
123
  delay: 'number'
108
124
  };
109
- var Default = {
125
+ const Default = {
110
126
  animation: true,
111
127
  autohide: true,
112
- delay: 500
113
- };
114
- var Selector = {
115
- DATA_DISMISS: '[data-dismiss="toast"]'
128
+ delay: 5000
116
129
  };
130
+ const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="toast"]';
117
131
  /**
118
132
  * ------------------------------------------------------------------------
119
133
  * Class Definition
120
134
  * ------------------------------------------------------------------------
121
135
  */
122
136
 
123
- var Toast =
124
- /*#__PURE__*/
125
- function () {
126
- function Toast(element, config) {
127
- this._element = element;
137
+ class Toast extends BaseComponent__default['default'] {
138
+ constructor(element, config) {
139
+ super(element);
128
140
  this._config = this._getConfig(config);
129
141
  this._timeout = null;
142
+ this._hasMouseInteraction = false;
143
+ this._hasKeyboardInteraction = false;
130
144
 
131
145
  this._setListeners();
132
146
  } // Getters
133
147
 
134
148
 
135
- var _proto = Toast.prototype;
149
+ static get DefaultType() {
150
+ return DefaultType;
151
+ }
152
+
153
+ static get Default() {
154
+ return Default;
155
+ }
156
+
157
+ static get NAME() {
158
+ return NAME;
159
+ } // Public
136
160
 
137
- // Public
138
- _proto.show = function show() {
139
- var _this = this;
140
161
 
141
- var showEvent = $.Event(Event.SHOW);
142
- $(this._element).trigger(showEvent);
162
+ show() {
163
+ const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW);
143
164
 
144
- if (showEvent.isDefaultPrevented()) {
165
+ if (showEvent.defaultPrevented) {
145
166
  return;
146
167
  }
147
168
 
169
+ this._clearTimeout();
170
+
148
171
  if (this._config.animation) {
149
- this._element.classList.add(ClassName.FADE);
172
+ this._element.classList.add(CLASS_NAME_FADE);
150
173
  }
151
174
 
152
- var complete = function complete() {
153
- _this._element.classList.remove(ClassName.SHOWING);
175
+ const complete = () => {
176
+ this._element.classList.remove(CLASS_NAME_SHOWING);
154
177
 
155
- _this._element.classList.add(ClassName.SHOW);
178
+ this._element.classList.add(CLASS_NAME_SHOW);
156
179
 
157
- $(_this._element).trigger(Event.SHOWN);
180
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
158
181
 
159
- if (_this._config.autohide) {
160
- _this._timeout = setTimeout(function () {
161
- _this.hide();
162
- }, _this._config.delay);
163
- }
182
+ this._maybeScheduleHide();
164
183
  };
165
184
 
166
- this._element.classList.remove(ClassName.HIDE);
185
+ this._element.classList.remove(CLASS_NAME_HIDE);
167
186
 
168
- Util.reflow(this._element);
187
+ reflow(this._element);
169
188
 
170
- this._element.classList.add(ClassName.SHOWING);
189
+ this._element.classList.add(CLASS_NAME_SHOWING);
171
190
 
172
- if (this._config.animation) {
173
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
174
- $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
175
- } else {
176
- complete();
177
- }
178
- };
191
+ this._queueCallback(complete, this._element, this._config.animation);
192
+ }
179
193
 
180
- _proto.hide = function hide() {
181
- if (!this._element.classList.contains(ClassName.SHOW)) {
194
+ hide() {
195
+ if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
182
196
  return;
183
197
  }
184
198
 
185
- var hideEvent = $.Event(Event.HIDE);
186
- $(this._element).trigger(hideEvent);
199
+ const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
187
200
 
188
- if (hideEvent.isDefaultPrevented()) {
201
+ if (hideEvent.defaultPrevented) {
189
202
  return;
190
203
  }
191
204
 
192
- this._close();
193
- };
205
+ const complete = () => {
206
+ this._element.classList.add(CLASS_NAME_HIDE);
194
207
 
195
- _proto.dispose = function dispose() {
196
- clearTimeout(this._timeout);
197
- this._timeout = null;
208
+ EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
209
+ };
210
+
211
+ this._element.classList.remove(CLASS_NAME_SHOW);
212
+
213
+ this._queueCallback(complete, this._element, this._config.animation);
214
+ }
215
+
216
+ dispose() {
217
+ this._clearTimeout();
198
218
 
199
- if (this._element.classList.contains(ClassName.SHOW)) {
200
- this._element.classList.remove(ClassName.SHOW);
219
+ if (this._element.classList.contains(CLASS_NAME_SHOW)) {
220
+ this._element.classList.remove(CLASS_NAME_SHOW);
201
221
  }
202
222
 
203
- $(this._element).off(Event.CLICK_DISMISS);
204
- $.removeData(this._element, DATA_KEY);
205
- this._element = null;
206
- this._config = null;
223
+ super.dispose();
207
224
  } // Private
208
- ;
209
225
 
210
- _proto._getConfig = function _getConfig(config) {
211
- config = _objectSpread2({}, Default, {}, $(this._element).data(), {}, typeof config === 'object' && config ? config : {});
212
- Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
226
+
227
+ _getConfig(config) {
228
+ config = { ...Default,
229
+ ...Manipulator__default['default'].getDataAttributes(this._element),
230
+ ...(typeof config === 'object' && config ? config : {})
231
+ };
232
+ typeCheckConfig(NAME, config, this.constructor.DefaultType);
213
233
  return config;
214
- };
234
+ }
215
235
 
216
- _proto._setListeners = function _setListeners() {
217
- var _this2 = this;
236
+ _maybeScheduleHide() {
237
+ if (!this._config.autohide) {
238
+ return;
239
+ }
218
240
 
219
- $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function () {
220
- return _this2.hide();
221
- });
222
- };
241
+ if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
242
+ return;
243
+ }
223
244
 
224
- _proto._close = function _close() {
225
- var _this3 = this;
245
+ this._timeout = setTimeout(() => {
246
+ this.hide();
247
+ }, this._config.delay);
248
+ }
226
249
 
227
- var complete = function complete() {
228
- _this3._element.classList.add(ClassName.HIDE);
250
+ _onInteraction(event, isInteracting) {
251
+ switch (event.type) {
252
+ case 'mouseover':
253
+ case 'mouseout':
254
+ this._hasMouseInteraction = isInteracting;
255
+ break;
256
+
257
+ case 'focusin':
258
+ case 'focusout':
259
+ this._hasKeyboardInteraction = isInteracting;
260
+ break;
261
+ }
229
262
 
230
- $(_this3._element).trigger(Event.HIDDEN);
231
- };
263
+ if (isInteracting) {
264
+ this._clearTimeout();
232
265
 
233
- this._element.classList.remove(ClassName.SHOW);
266
+ return;
267
+ }
234
268
 
235
- if (this._config.animation) {
236
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
237
- $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
238
- } else {
239
- complete();
269
+ const nextElement = event.relatedTarget;
270
+
271
+ if (this._element === nextElement || this._element.contains(nextElement)) {
272
+ return;
240
273
  }
274
+
275
+ this._maybeScheduleHide();
276
+ }
277
+
278
+ _setListeners() {
279
+ EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());
280
+ EventHandler__default['default'].on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
281
+ EventHandler__default['default'].on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
282
+ EventHandler__default['default'].on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
283
+ EventHandler__default['default'].on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
284
+ }
285
+
286
+ _clearTimeout() {
287
+ clearTimeout(this._timeout);
288
+ this._timeout = null;
241
289
  } // Static
242
- ;
243
290
 
244
- Toast._jQueryInterface = function _jQueryInterface(config) {
291
+
292
+ static jQueryInterface(config) {
245
293
  return this.each(function () {
246
- var $element = $(this);
247
- var data = $element.data(DATA_KEY);
294
+ let data = Data__default['default'].get(this, DATA_KEY);
248
295
 
249
- var _config = typeof config === 'object' && config;
296
+ const _config = typeof config === 'object' && config;
250
297
 
251
298
  if (!data) {
252
299
  data = new Toast(this, _config);
253
- $element.data(DATA_KEY, data);
254
300
  }
255
301
 
256
302
  if (typeof config === 'string') {
257
303
  if (typeof data[config] === 'undefined') {
258
- throw new TypeError("No method named \"" + config + "\"");
304
+ throw new TypeError(`No method named "${config}"`);
259
305
  }
260
306
 
261
307
  data[config](this);
262
308
  }
263
309
  });
264
- };
265
-
266
- _createClass(Toast, null, [{
267
- key: "VERSION",
268
- get: function get() {
269
- return VERSION;
270
- }
271
- }, {
272
- key: "DefaultType",
273
- get: function get() {
274
- return DefaultType;
275
- }
276
- }, {
277
- key: "Default",
278
- get: function get() {
279
- return Default;
280
- }
281
- }]);
310
+ }
282
311
 
283
- return Toast;
284
- }();
312
+ }
285
313
  /**
286
314
  * ------------------------------------------------------------------------
287
315
  * jQuery
288
316
  * ------------------------------------------------------------------------
317
+ * add .Toast to jQuery only if jQuery is present
289
318
  */
290
319
 
291
320
 
292
- $.fn[NAME] = Toast._jQueryInterface;
293
- $.fn[NAME].Constructor = Toast;
294
-
295
- $.fn[NAME].noConflict = function () {
296
- $.fn[NAME] = JQUERY_NO_CONFLICT;
297
- return Toast._jQueryInterface;
298
- };
321
+ defineJQueryPlugin(Toast);
299
322
 
300
323
  return Toast;
301
324