bootstrap 4.6.0 → 5.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -1
  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 +14 -8
  7. data/assets/javascripts/bootstrap.js +2152 -1633
  8. data/assets/javascripts/bootstrap.min.js +2 -2
  9. data/assets/javascripts/bootstrap/alert.js +179 -64
  10. data/assets/javascripts/bootstrap/base-component.js +75 -0
  11. data/assets/javascripts/bootstrap/button.js +94 -143
  12. data/assets/javascripts/bootstrap/carousel.js +386 -202
  13. data/assets/javascripts/bootstrap/collapse.js +349 -132
  14. data/assets/javascripts/bootstrap/dom/data.js +81 -0
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +310 -0
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +86 -0
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +93 -0
  18. data/assets/javascripts/bootstrap/dropdown.js +387 -224
  19. data/assets/javascripts/bootstrap/modal.js +391 -220
  20. data/assets/javascripts/bootstrap/popover.js +94 -49
  21. data/assets/javascripts/bootstrap/scrollspy.js +212 -80
  22. data/assets/javascripts/bootstrap/tab.js +198 -79
  23. data/assets/javascripts/bootstrap/toast.js +211 -78
  24. data/assets/javascripts/bootstrap/tooltip.js +558 -300
  25. data/assets/stylesheets/_bootstrap-grid.scss +51 -16
  26. data/assets/stylesheets/_bootstrap-reboot.scss +4 -1
  27. data/assets/stylesheets/_bootstrap.scss +15 -8
  28. data/assets/stylesheets/bootstrap/_accordion.scss +126 -0
  29. data/assets/stylesheets/bootstrap/_alert.scss +15 -10
  30. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  31. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -17
  32. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  33. data/assets/stylesheets/bootstrap/_buttons.scss +27 -60
  34. data/assets/stylesheets/bootstrap/_card.scss +21 -92
  35. data/assets/stylesheets/bootstrap/_carousel.scss +65 -33
  36. data/assets/stylesheets/bootstrap/_close.scss +30 -30
  37. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  38. data/assets/stylesheets/bootstrap/_dropdown.scss +95 -38
  39. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  40. data/assets/stylesheets/bootstrap/_functions.scss +84 -23
  41. data/assets/stylesheets/bootstrap/_grid.scss +3 -54
  42. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  43. data/assets/stylesheets/bootstrap/_list-group.scss +17 -8
  44. data/assets/stylesheets/bootstrap/_mixins.scss +7 -13
  45. data/assets/stylesheets/bootstrap/_modal.scss +41 -46
  46. data/assets/stylesheets/bootstrap/_nav.scss +16 -4
  47. data/assets/stylesheets/bootstrap/_navbar.scss +43 -71
  48. data/assets/stylesheets/bootstrap/_pagination.scss +10 -20
  49. data/assets/stylesheets/bootstrap/_popover.scss +15 -27
  50. data/assets/stylesheets/bootstrap/_progress.scss +2 -4
  51. data/assets/stylesheets/bootstrap/_reboot.scss +314 -163
  52. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  53. data/assets/stylesheets/bootstrap/_spinners.scss +5 -5
  54. data/assets/stylesheets/bootstrap/_tables.scss +79 -114
  55. data/assets/stylesheets/bootstrap/_toasts.scss +20 -15
  56. data/assets/stylesheets/bootstrap/_tooltip.scss +17 -17
  57. data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
  58. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  59. data/assets/stylesheets/bootstrap/_utilities.scss +566 -18
  60. data/assets/stylesheets/bootstrap/_variables.scss +673 -463
  61. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  62. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  63. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  64. data/assets/stylesheets/bootstrap/forms/_form-control.scss +223 -0
  65. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  66. data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
  67. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  68. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  69. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  70. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  71. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  72. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  73. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  74. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  75. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  76. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  77. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  78. data/assets/stylesheets/bootstrap/mixins/_alert.scss +1 -5
  79. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -8
  80. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  81. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  82. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +65 -47
  83. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
  84. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  85. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  86. data/assets/stylesheets/bootstrap/mixins/_forms.scss +27 -88
  87. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  88. data/assets/stylesheets/bootstrap/mixins/_grid.scss +83 -32
  89. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  90. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -2
  91. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  92. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +15 -8
  93. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  94. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  95. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  96. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  97. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  98. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  99. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
  100. data/bootstrap.gemspec +1 -3
  101. data/lib/bootstrap/version.rb +2 -2
  102. data/tasks/updater/js.rb +20 -5
  103. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  104. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  105. data/test/dummy_rails/app/views/pages/root.html +89 -0
  106. data/test/dummy_rails/config/application.rb +0 -3
  107. data/test/gemfiles/rails_6_1.gemfile +7 -0
  108. metadata +44 -75
  109. data/assets/javascripts/bootstrap/util.js +0 -192
  110. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  111. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  112. data/assets/stylesheets/bootstrap/_input-group.scss +0 -208
  113. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  114. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  115. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  116. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  117. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  118. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  119. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  120. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  121. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  122. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  123. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  124. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  125. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  126. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  127. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  128. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  129. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  130. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  131. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  132. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  133. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  134. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  135. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  136. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  137. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  138. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  139. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  140. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  141. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  142. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  143. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  144. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  145. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -0,0 +1,93 @@
1
+ /*!
2
+ * Bootstrap selector-engine.js v5.0.0-beta2 (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
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
+ typeof define === 'function' && define.amd ? define(factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory());
10
+ }(this, (function () { 'use strict';
11
+
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap (v5.0.0-beta2): dom/selector-engine.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
18
+
19
+ /**
20
+ * ------------------------------------------------------------------------
21
+ * Constants
22
+ * ------------------------------------------------------------------------
23
+ */
24
+ var NODE_TEXT = 3;
25
+ var SelectorEngine = {
26
+ find: function find(selector, element) {
27
+ var _ref;
28
+
29
+ if (element === void 0) {
30
+ element = document.documentElement;
31
+ }
32
+
33
+ return (_ref = []).concat.apply(_ref, Element.prototype.querySelectorAll.call(element, selector));
34
+ },
35
+ findOne: function findOne(selector, element) {
36
+ if (element === void 0) {
37
+ element = document.documentElement;
38
+ }
39
+
40
+ return Element.prototype.querySelector.call(element, selector);
41
+ },
42
+ children: function children(element, selector) {
43
+ var _ref2;
44
+
45
+ return (_ref2 = []).concat.apply(_ref2, element.children).filter(function (child) {
46
+ return child.matches(selector);
47
+ });
48
+ },
49
+ parents: function parents(element, selector) {
50
+ var parents = [];
51
+ var ancestor = element.parentNode;
52
+
53
+ while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
54
+ if (ancestor.matches(selector)) {
55
+ parents.push(ancestor);
56
+ }
57
+
58
+ ancestor = ancestor.parentNode;
59
+ }
60
+
61
+ return parents;
62
+ },
63
+ prev: function prev(element, selector) {
64
+ var previous = element.previousElementSibling;
65
+
66
+ while (previous) {
67
+ if (previous.matches(selector)) {
68
+ return [previous];
69
+ }
70
+
71
+ previous = previous.previousElementSibling;
72
+ }
73
+
74
+ return [];
75
+ },
76
+ next: function next(element, selector) {
77
+ var next = element.nextElementSibling;
78
+
79
+ while (next) {
80
+ if (next.matches(selector)) {
81
+ return [next];
82
+ }
83
+
84
+ next = next.nextElementSibling;
85
+ }
86
+
87
+ return [];
88
+ }
89
+ };
90
+
91
+ return SelectorEngine;
92
+
93
+ })));
@@ -1,19 +1,42 @@
1
1
  /*!
2
- * Bootstrap dropdown.js v4.6.0 (https://getbootstrap.com/)
2
+ * Bootstrap dropdown.js v5.0.0-beta2 (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('popper.js'), require('./util.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util));
10
- }(this, (function ($, Popper, Util) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
+ }(this, (function (Popper, Data, EventHandler, Manipulator, 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 Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
16
- var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
14
+ function _interopNamespace(e) {
15
+ if (e && e.__esModule) return e;
16
+ var n = Object.create(null);
17
+ if (e) {
18
+ Object.keys(e).forEach(function (k) {
19
+ if (k !== 'default') {
20
+ var d = Object.getOwnPropertyDescriptor(e, k);
21
+ Object.defineProperty(n, k, d.get ? d : {
22
+ enumerable: true,
23
+ get: function () {
24
+ return e[k];
25
+ }
26
+ });
27
+ }
28
+ });
29
+ }
30
+ n['default'] = e;
31
+ return Object.freeze(n);
32
+ }
33
+
34
+ var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
35
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
36
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
37
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
38
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
39
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
17
40
 
18
41
  function _defineProperties(target, props) {
19
42
  for (var i = 0; i < props.length; i++) {
@@ -49,6 +72,139 @@
49
72
  return _extends.apply(this, arguments);
50
73
  }
51
74
 
75
+ function _inheritsLoose(subClass, superClass) {
76
+ subClass.prototype = Object.create(superClass.prototype);
77
+ subClass.prototype.constructor = subClass;
78
+
79
+ _setPrototypeOf(subClass, superClass);
80
+ }
81
+
82
+ function _setPrototypeOf(o, p) {
83
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
84
+ o.__proto__ = p;
85
+ return o;
86
+ };
87
+
88
+ return _setPrototypeOf(o, p);
89
+ }
90
+
91
+ /**
92
+ * --------------------------------------------------------------------------
93
+ * Bootstrap (v5.0.0-beta2): util/index.js
94
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
95
+ * --------------------------------------------------------------------------
96
+ */
97
+
98
+ var toType = function toType(obj) {
99
+ if (obj === null || obj === undefined) {
100
+ return "" + obj;
101
+ }
102
+
103
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
104
+ };
105
+
106
+ var getSelector = function getSelector(element) {
107
+ var selector = element.getAttribute('data-bs-target');
108
+
109
+ if (!selector || selector === '#') {
110
+ var hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
111
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
112
+ // `document.querySelector` will rightfully complain it is invalid.
113
+ // See https://github.com/twbs/bootstrap/issues/32273
114
+
115
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
116
+ return null;
117
+ } // Just in case some CMS puts out a full URL with the anchor appended
118
+
119
+
120
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
121
+ hrefAttr = '#' + hrefAttr.split('#')[1];
122
+ }
123
+
124
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
125
+ }
126
+
127
+ return selector;
128
+ };
129
+
130
+ var getElementFromSelector = function getElementFromSelector(element) {
131
+ var selector = getSelector(element);
132
+ return selector ? document.querySelector(selector) : null;
133
+ };
134
+
135
+ var isElement = function isElement(obj) {
136
+ return (obj[0] || obj).nodeType;
137
+ };
138
+
139
+ var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
140
+ Object.keys(configTypes).forEach(function (property) {
141
+ var expectedTypes = configTypes[property];
142
+ var value = config[property];
143
+ var valueType = value && isElement(value) ? 'element' : toType(value);
144
+
145
+ if (!new RegExp(expectedTypes).test(valueType)) {
146
+ throw new TypeError(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
147
+ }
148
+ });
149
+ };
150
+
151
+ var isVisible = function isVisible(element) {
152
+ if (!element) {
153
+ return false;
154
+ }
155
+
156
+ if (element.style && element.parentNode && element.parentNode.style) {
157
+ var elementStyle = getComputedStyle(element);
158
+ var parentNodeStyle = getComputedStyle(element.parentNode);
159
+ return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
160
+ }
161
+
162
+ return false;
163
+ };
164
+
165
+ var noop = function noop() {
166
+ return function () {};
167
+ };
168
+
169
+ var getjQuery = function getjQuery() {
170
+ var _window = window,
171
+ jQuery = _window.jQuery;
172
+
173
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
174
+ return jQuery;
175
+ }
176
+
177
+ return null;
178
+ };
179
+
180
+ var onDOMContentLoaded = function onDOMContentLoaded(callback) {
181
+ if (document.readyState === 'loading') {
182
+ document.addEventListener('DOMContentLoaded', callback);
183
+ } else {
184
+ callback();
185
+ }
186
+ };
187
+
188
+ var isRTL = document.documentElement.dir === 'rtl';
189
+
190
+ var defineJQueryPlugin = function defineJQueryPlugin(name, plugin) {
191
+ onDOMContentLoaded(function () {
192
+ var $ = getjQuery();
193
+ /* istanbul ignore if */
194
+
195
+ if ($) {
196
+ var JQUERY_NO_CONFLICT = $.fn[name];
197
+ $.fn[name] = plugin.jQueryInterface;
198
+ $.fn[name].Constructor = plugin;
199
+
200
+ $.fn[name].noConflict = function () {
201
+ $.fn[name] = JQUERY_NO_CONFLICT;
202
+ return plugin.jQueryInterface;
203
+ };
204
+ }
205
+ });
206
+ };
207
+
52
208
  /**
53
209
  * ------------------------------------------------------------------------
54
210
  * Constants
@@ -56,24 +212,17 @@
56
212
  */
57
213
 
58
214
  var NAME = 'dropdown';
59
- var VERSION = '4.6.0';
60
215
  var DATA_KEY = 'bs.dropdown';
61
216
  var EVENT_KEY = "." + DATA_KEY;
62
217
  var DATA_API_KEY = '.data-api';
63
- var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
64
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
65
-
66
- var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
67
-
68
- var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
69
-
70
- var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
71
-
72
- var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
73
-
74
- var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
75
-
76
- var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
218
+ var ESCAPE_KEY = 'Escape';
219
+ var SPACE_KEY = 'Space';
220
+ var TAB_KEY = 'Tab';
221
+ var ARROW_UP_KEY = 'ArrowUp';
222
+ var ARROW_DOWN_KEY = 'ArrowDown';
223
+ var RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
224
+
225
+ var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEY + "|" + ARROW_DOWN_KEY + "|" + ESCAPE_KEY);
77
226
  var EVENT_HIDE = "hide" + EVENT_KEY;
78
227
  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
79
228
  var EVENT_SHOW = "show" + EVENT_KEY;
@@ -85,36 +234,35 @@
85
234
  var CLASS_NAME_DISABLED = 'disabled';
86
235
  var CLASS_NAME_SHOW = 'show';
87
236
  var CLASS_NAME_DROPUP = 'dropup';
88
- var CLASS_NAME_DROPRIGHT = 'dropright';
89
- var CLASS_NAME_DROPLEFT = 'dropleft';
90
- var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
91
- var CLASS_NAME_POSITION_STATIC = 'position-static';
92
- var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]';
237
+ var CLASS_NAME_DROPEND = 'dropend';
238
+ var CLASS_NAME_DROPSTART = 'dropstart';
239
+ var CLASS_NAME_NAVBAR = 'navbar';
240
+ var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]';
93
241
  var SELECTOR_FORM_CHILD = '.dropdown form';
94
242
  var SELECTOR_MENU = '.dropdown-menu';
95
243
  var SELECTOR_NAVBAR_NAV = '.navbar-nav';
96
244
  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
97
- var PLACEMENT_TOP = 'top-start';
98
- var PLACEMENT_TOPEND = 'top-end';
99
- var PLACEMENT_BOTTOM = 'bottom-start';
100
- var PLACEMENT_BOTTOMEND = 'bottom-end';
101
- var PLACEMENT_RIGHT = 'right-start';
102
- var PLACEMENT_LEFT = 'left-start';
245
+ var PLACEMENT_TOP = isRTL ? 'top-end' : 'top-start';
246
+ var PLACEMENT_TOPEND = isRTL ? 'top-start' : 'top-end';
247
+ var PLACEMENT_BOTTOM = isRTL ? 'bottom-end' : 'bottom-start';
248
+ var PLACEMENT_BOTTOMEND = isRTL ? 'bottom-start' : 'bottom-end';
249
+ var PLACEMENT_RIGHT = isRTL ? 'left-start' : 'right-start';
250
+ var PLACEMENT_LEFT = isRTL ? 'right-start' : 'left-start';
103
251
  var Default = {
104
- offset: 0,
252
+ offset: [0, 2],
105
253
  flip: true,
106
- boundary: 'scrollParent',
254
+ boundary: 'clippingParents',
107
255
  reference: 'toggle',
108
256
  display: 'dynamic',
109
257
  popperConfig: null
110
258
  };
111
259
  var DefaultType = {
112
- offset: '(number|string|function)',
260
+ offset: '(array|string|function)',
113
261
  flip: 'boolean',
114
262
  boundary: '(string|element)',
115
- reference: '(string|element)',
263
+ reference: '(string|element|object)',
116
264
  display: 'string',
117
- popperConfig: '(null|object)'
265
+ popperConfig: '(null|object|function)'
118
266
  };
119
267
  /**
120
268
  * ------------------------------------------------------------------------
@@ -122,15 +270,21 @@
122
270
  * ------------------------------------------------------------------------
123
271
  */
124
272
 
125
- var Dropdown = /*#__PURE__*/function () {
273
+ var Dropdown = /*#__PURE__*/function (_BaseComponent) {
274
+ _inheritsLoose(Dropdown, _BaseComponent);
275
+
126
276
  function Dropdown(element, config) {
127
- this._element = element;
128
- this._popper = null;
129
- this._config = this._getConfig(config);
130
- this._menu = this._getMenuElement();
131
- this._inNavbar = this._detectNavbar();
277
+ var _this;
278
+
279
+ _this = _BaseComponent.call(this, element) || this;
280
+ _this._popper = null;
281
+ _this._config = _this._getConfig(config);
282
+ _this._menu = _this._getMenuElement();
283
+ _this._inNavbar = _this._detectNavbar();
132
284
 
133
- this._addEventListeners();
285
+ _this._addEventListeners();
286
+
287
+ return _this;
134
288
  } // Getters
135
289
 
136
290
 
@@ -138,50 +292,41 @@
138
292
 
139
293
  // Public
140
294
  _proto.toggle = function toggle() {
141
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {
295
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
142
296
  return;
143
297
  }
144
298
 
145
- var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW);
299
+ var isActive = this._element.classList.contains(CLASS_NAME_SHOW);
146
300
 
147
- Dropdown._clearMenus();
301
+ Dropdown.clearMenus();
148
302
 
149
303
  if (isActive) {
150
304
  return;
151
305
  }
152
306
 
153
- this.show(true);
307
+ this.show();
154
308
  };
155
309
 
156
- _proto.show = function show(usePopper) {
157
- if (usePopper === void 0) {
158
- usePopper = false;
159
- }
160
-
161
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
310
+ _proto.show = function show() {
311
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
162
312
  return;
163
313
  }
164
314
 
315
+ var parent = Dropdown.getParentFromElement(this._element);
165
316
  var relatedTarget = {
166
317
  relatedTarget: this._element
167
318
  };
168
- var showEvent = $__default['default'].Event(EVENT_SHOW, relatedTarget);
169
-
170
- var parent = Dropdown._getParentFromElement(this._element);
319
+ var showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, relatedTarget);
171
320
 
172
- $__default['default'](parent).trigger(showEvent);
173
-
174
- if (showEvent.isDefaultPrevented()) {
321
+ if (showEvent.defaultPrevented) {
175
322
  return;
176
323
  } // Totally disable Popper for Dropdowns in Navbar
177
324
 
178
325
 
179
- if (!this._inNavbar && usePopper) {
180
- /**
181
- * Check for Popper dependency
182
- * Popper - https://popper.js.org
183
- */
184
- if (typeof Popper__default['default'] === 'undefined') {
326
+ if (this._inNavbar) {
327
+ Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'none');
328
+ } else {
329
+ if (typeof Popper__namespace === 'undefined') {
185
330
  throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
186
331
  }
187
332
 
@@ -189,55 +334,62 @@
189
334
 
190
335
  if (this._config.reference === 'parent') {
191
336
  referenceElement = parent;
192
- } else if (Util__default['default'].isElement(this._config.reference)) {
337
+ } else if (isElement(this._config.reference)) {
193
338
  referenceElement = this._config.reference; // Check if it's jQuery element
194
339
 
195
340
  if (typeof this._config.reference.jquery !== 'undefined') {
196
341
  referenceElement = this._config.reference[0];
197
342
  }
198
- } // If boundary is not `scrollParent`, then set position to `static`
199
- // to allow the menu to "escape" the scroll parent's boundaries
200
- // https://github.com/twbs/bootstrap/issues/24251
343
+ } else if (typeof this._config.reference === 'object') {
344
+ referenceElement = this._config.reference;
345
+ }
201
346
 
347
+ var popperConfig = this._getPopperConfig();
202
348
 
203
- if (this._config.boundary !== 'scrollParent') {
204
- $__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);
205
- }
349
+ var isDisplayStatic = popperConfig.modifiers.find(function (modifier) {
350
+ return modifier.name === 'applyStyles' && modifier.enabled === false;
351
+ });
352
+ this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);
206
353
 
207
- this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());
354
+ if (isDisplayStatic) {
355
+ Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
356
+ }
208
357
  } // If this is a touch-enabled device we add extra
209
358
  // empty mouseover listeners to the body's immediate children;
210
359
  // only needed because of broken event delegation on iOS
211
360
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
212
361
 
213
362
 
214
- if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
215
- $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);
363
+ if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
364
+ var _ref;
365
+
366
+ (_ref = []).concat.apply(_ref, document.body.children).forEach(function (elem) {
367
+ return EventHandler__default['default'].on(elem, 'mouseover', null, noop());
368
+ });
216
369
  }
217
370
 
218
371
  this._element.focus();
219
372
 
220
373
  this._element.setAttribute('aria-expanded', true);
221
374
 
222
- $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
223
- $__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_SHOWN, relatedTarget));
375
+ this._menu.classList.toggle(CLASS_NAME_SHOW);
376
+
377
+ this._element.classList.toggle(CLASS_NAME_SHOW);
378
+
379
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, relatedTarget);
224
380
  };
225
381
 
226
382
  _proto.hide = function hide() {
227
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
383
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
228
384
  return;
229
385
  }
230
386
 
231
387
  var relatedTarget = {
232
388
  relatedTarget: this._element
233
389
  };
234
- var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
235
-
236
- var parent = Dropdown._getParentFromElement(this._element);
237
-
238
- $__default['default'](parent).trigger(hideEvent);
390
+ var hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE, relatedTarget);
239
391
 
240
- if (hideEvent.isDefaultPrevented()) {
392
+ if (hideEvent.defaultPrevented) {
241
393
  return;
242
394
  }
243
395
 
@@ -245,17 +397,21 @@
245
397
  this._popper.destroy();
246
398
  }
247
399
 
248
- $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
249
- $__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
400
+ this._menu.classList.toggle(CLASS_NAME_SHOW);
401
+
402
+ this._element.classList.toggle(CLASS_NAME_SHOW);
403
+
404
+ Manipulator__default['default'].removeDataAttribute(this._menu, 'popper');
405
+ EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN, relatedTarget);
250
406
  };
251
407
 
252
408
  _proto.dispose = function dispose() {
253
- $__default['default'].removeData(this._element, DATA_KEY);
254
- $__default['default'](this._element).off(EVENT_KEY);
255
- this._element = null;
409
+ _BaseComponent.prototype.dispose.call(this);
410
+
411
+ EventHandler__default['default'].off(this._element, EVENT_KEY);
256
412
  this._menu = null;
257
413
 
258
- if (this._popper !== null) {
414
+ if (this._popper) {
259
415
  this._popper.destroy();
260
416
 
261
417
  this._popper = null;
@@ -265,135 +421,145 @@
265
421
  _proto.update = function update() {
266
422
  this._inNavbar = this._detectNavbar();
267
423
 
268
- if (this._popper !== null) {
269
- this._popper.scheduleUpdate();
424
+ if (this._popper) {
425
+ this._popper.update();
270
426
  }
271
427
  } // Private
272
428
  ;
273
429
 
274
430
  _proto._addEventListeners = function _addEventListeners() {
275
- var _this = this;
431
+ var _this2 = this;
276
432
 
277
- $__default['default'](this._element).on(EVENT_CLICK, function (event) {
433
+ EventHandler__default['default'].on(this._element, EVENT_CLICK, function (event) {
278
434
  event.preventDefault();
279
435
  event.stopPropagation();
280
436
 
281
- _this.toggle();
437
+ _this2.toggle();
282
438
  });
283
439
  };
284
440
 
285
441
  _proto._getConfig = function _getConfig(config) {
286
- config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);
287
- Util__default['default'].typeCheckConfig(NAME, config, this.constructor.DefaultType);
442
+ config = _extends({}, this.constructor.Default, Manipulator__default['default'].getDataAttributes(this._element), config);
443
+ typeCheckConfig(NAME, config, this.constructor.DefaultType);
444
+
445
+ if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
446
+ // Popper virtual elements require a getBoundingClientRect method
447
+ throw new TypeError(NAME.toUpperCase() + ": Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.");
448
+ }
449
+
288
450
  return config;
289
451
  };
290
452
 
291
453
  _proto._getMenuElement = function _getMenuElement() {
292
- if (!this._menu) {
293
- var parent = Dropdown._getParentFromElement(this._element);
454
+ return SelectorEngine__default['default'].next(this._element, SELECTOR_MENU)[0];
455
+ };
294
456
 
295
- if (parent) {
296
- this._menu = parent.querySelector(SELECTOR_MENU);
297
- }
457
+ _proto._getPlacement = function _getPlacement() {
458
+ var parentDropdown = this._element.parentNode;
459
+
460
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
461
+ return PLACEMENT_RIGHT;
298
462
  }
299
463
 
300
- return this._menu;
301
- };
464
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
465
+ return PLACEMENT_LEFT;
466
+ } // We need to trim the value because custom properties can also include spaces
302
467
 
303
- _proto._getPlacement = function _getPlacement() {
304
- var $parentDropdown = $__default['default'](this._element.parentNode);
305
- var placement = PLACEMENT_BOTTOM; // Handle dropup
306
468
 
307
- if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
308
- placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
309
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
310
- placement = PLACEMENT_RIGHT;
311
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
312
- placement = PLACEMENT_LEFT;
313
- } else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
314
- placement = PLACEMENT_BOTTOMEND;
469
+ var isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
470
+
471
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
472
+ return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
315
473
  }
316
474
 
317
- return placement;
475
+ return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
318
476
  };
319
477
 
320
478
  _proto._detectNavbar = function _detectNavbar() {
321
- return $__default['default'](this._element).closest('.navbar').length > 0;
479
+ return this._element.closest("." + CLASS_NAME_NAVBAR) !== null;
322
480
  };
323
481
 
324
482
  _proto._getOffset = function _getOffset() {
325
- var _this2 = this;
483
+ var _this3 = this;
484
+
485
+ var offset = this._config.offset;
326
486
 
327
- var offset = {};
487
+ if (typeof offset === 'string') {
488
+ return offset.split(',').map(function (val) {
489
+ return Number.parseInt(val, 10);
490
+ });
491
+ }
328
492
 
329
- if (typeof this._config.offset === 'function') {
330
- offset.fn = function (data) {
331
- data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
332
- return data;
493
+ if (typeof offset === 'function') {
494
+ return function (popperData) {
495
+ return offset(popperData, _this3._element);
333
496
  };
334
- } else {
335
- offset.offset = this._config.offset;
336
497
  }
337
498
 
338
499
  return offset;
339
500
  };
340
501
 
341
502
  _proto._getPopperConfig = function _getPopperConfig() {
342
- var popperConfig = {
503
+ var defaultBsPopperConfig = {
343
504
  placement: this._getPlacement(),
344
- modifiers: {
345
- offset: this._getOffset(),
346
- flip: {
347
- enabled: this._config.flip
348
- },
349
- preventOverflow: {
350
- boundariesElement: this._config.boundary
505
+ modifiers: [{
506
+ name: 'preventOverflow',
507
+ options: {
508
+ altBoundary: this._config.flip,
509
+ boundary: this._config.boundary
351
510
  }
352
- }
511
+ }, {
512
+ name: 'offset',
513
+ options: {
514
+ offset: this._getOffset()
515
+ }
516
+ }]
353
517
  }; // Disable Popper if we have a static display
354
518
 
355
519
  if (this._config.display === 'static') {
356
- popperConfig.modifiers.applyStyle = {
520
+ defaultBsPopperConfig.modifiers = [{
521
+ name: 'applyStyles',
357
522
  enabled: false
358
- };
523
+ }];
359
524
  }
360
525
 
361
- return _extends({}, popperConfig, this._config.popperConfig);
526
+ return _extends({}, defaultBsPopperConfig, typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig);
362
527
  } // Static
363
528
  ;
364
529
 
365
- Dropdown._jQueryInterface = function _jQueryInterface(config) {
366
- return this.each(function () {
367
- var data = $__default['default'](this).data(DATA_KEY);
530
+ Dropdown.dropdownInterface = function dropdownInterface(element, config) {
531
+ var data = Data__default['default'].getData(element, DATA_KEY);
532
+
533
+ var _config = typeof config === 'object' ? config : null;
368
534
 
369
- var _config = typeof config === 'object' ? config : null;
535
+ if (!data) {
536
+ data = new Dropdown(element, _config);
537
+ }
370
538
 
371
- if (!data) {
372
- data = new Dropdown(this, _config);
373
- $__default['default'](this).data(DATA_KEY, data);
539
+ if (typeof config === 'string') {
540
+ if (typeof data[config] === 'undefined') {
541
+ throw new TypeError("No method named \"" + config + "\"");
374
542
  }
375
543
 
376
- if (typeof config === 'string') {
377
- if (typeof data[config] === 'undefined') {
378
- throw new TypeError("No method named \"" + config + "\"");
379
- }
544
+ data[config]();
545
+ }
546
+ };
380
547
 
381
- data[config]();
382
- }
548
+ Dropdown.jQueryInterface = function jQueryInterface(config) {
549
+ return this.each(function () {
550
+ Dropdown.dropdownInterface(this, config);
383
551
  });
384
552
  };
385
553
 
386
- Dropdown._clearMenus = function _clearMenus(event) {
387
- if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
554
+ Dropdown.clearMenus = function clearMenus(event) {
555
+ if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
388
556
  return;
389
557
  }
390
558
 
391
- var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
559
+ var toggles = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
392
560
 
393
561
  for (var i = 0, len = toggles.length; i < len; i++) {
394
- var parent = Dropdown._getParentFromElement(toggles[i]);
395
-
396
- var context = $__default['default'](toggles[i]).data(DATA_KEY);
562
+ var context = Data__default['default'].getData(toggles[i], DATA_KEY);
397
563
  var relatedTarget = {
398
564
  relatedTarget: toggles[i]
399
565
  };
@@ -408,25 +574,28 @@
408
574
 
409
575
  var dropdownMenu = context._menu;
410
576
 
411
- if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW)) {
577
+ if (!toggles[i].classList.contains(CLASS_NAME_SHOW)) {
412
578
  continue;
413
579
  }
414
580
 
415
- if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].contains(parent, event.target)) {
581
+ if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.key === TAB_KEY) && dropdownMenu.contains(event.target)) {
416
582
  continue;
417
583
  }
418
584
 
419
- var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
420
- $__default['default'](parent).trigger(hideEvent);
585
+ var hideEvent = EventHandler__default['default'].trigger(toggles[i], EVENT_HIDE, relatedTarget);
421
586
 
422
- if (hideEvent.isDefaultPrevented()) {
587
+ if (hideEvent.defaultPrevented) {
423
588
  continue;
424
589
  } // If this is a touch-enabled device we remove the extra
425
590
  // empty mouseover listeners we added for iOS support
426
591
 
427
592
 
428
593
  if ('ontouchstart' in document.documentElement) {
429
- $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);
594
+ var _ref2;
595
+
596
+ (_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
597
+ return EventHandler__default['default'].off(elem, 'mouseover', null, noop());
598
+ });
430
599
  }
431
600
 
432
601
  toggles[i].setAttribute('aria-expanded', 'false');
@@ -435,24 +604,18 @@
435
604
  context._popper.destroy();
436
605
  }
437
606
 
438
- $__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW);
439
- $__default['default'](parent).removeClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
607
+ dropdownMenu.classList.remove(CLASS_NAME_SHOW);
608
+ toggles[i].classList.remove(CLASS_NAME_SHOW);
609
+ Manipulator__default['default'].removeDataAttribute(dropdownMenu, 'popper');
610
+ EventHandler__default['default'].trigger(toggles[i], EVENT_HIDDEN, relatedTarget);
440
611
  }
441
612
  };
442
613
 
443
- Dropdown._getParentFromElement = function _getParentFromElement(element) {
444
- var parent;
445
- var selector = Util__default['default'].getSelectorFromElement(element);
446
-
447
- if (selector) {
448
- parent = document.querySelector(selector);
449
- }
450
-
451
- return parent || element.parentNode;
452
- } // eslint-disable-next-line complexity
453
- ;
614
+ Dropdown.getParentFromElement = function getParentFromElement(element) {
615
+ return getElementFromSelector(element) || element.parentNode;
616
+ };
454
617
 
455
- Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
618
+ Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
456
619
  // If not input/textarea:
457
620
  // - And not a key in REGEXP_KEYDOWN => not a dropdown command
458
621
  // If input/textarea:
@@ -460,67 +623,63 @@
460
623
  // - If key is other than escape
461
624
  // - If key is not up or down => not a dropdown command
462
625
  // - If trigger inside the menu => not a dropdown command
463
- if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default['default'](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
626
+ if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {
464
627
  return;
465
628
  }
466
629
 
467
- if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {
630
+ event.preventDefault();
631
+ event.stopPropagation();
632
+
633
+ if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
468
634
  return;
469
635
  }
470
636
 
471
- var parent = Dropdown._getParentFromElement(this);
637
+ var parent = Dropdown.getParentFromElement(this);
638
+ var isActive = this.classList.contains(CLASS_NAME_SHOW);
472
639
 
473
- var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW);
474
-
475
- if (!isActive && event.which === ESCAPE_KEYCODE) {
640
+ if (event.key === ESCAPE_KEY) {
641
+ var button = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
642
+ button.focus();
643
+ Dropdown.clearMenus();
476
644
  return;
477
645
  }
478
646
 
479
- event.preventDefault();
480
- event.stopPropagation();
647
+ if (!isActive && (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY)) {
648
+ var _button = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
481
649
 
482
- if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {
483
- if (event.which === ESCAPE_KEYCODE) {
484
- $__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus');
485
- }
650
+ _button.click();
486
651
 
487
- $__default['default'](this).trigger('click');
488
652
  return;
489
653
  }
490
654
 
491
- var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
492
- return $__default['default'](item).is(':visible');
493
- });
655
+ if (!isActive || event.key === SPACE_KEY) {
656
+ Dropdown.clearMenus();
657
+ return;
658
+ }
494
659
 
495
- if (items.length === 0) {
660
+ var items = SelectorEngine__default['default'].find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
661
+
662
+ if (!items.length) {
496
663
  return;
497
664
  }
498
665
 
499
- var index = items.indexOf(event.target);
666
+ var index = items.indexOf(event.target); // Up
500
667
 
501
- if (event.which === ARROW_UP_KEYCODE && index > 0) {
502
- // Up
668
+ if (event.key === ARROW_UP_KEY && index > 0) {
503
669
  index--;
504
- }
670
+ } // Down
505
671
 
506
- if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
507
- // Down
672
+
673
+ if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
508
674
  index++;
509
- }
675
+ } // index is -1 if the first keydown is an ArrowUp
510
676
 
511
- if (index < 0) {
512
- index = 0;
513
- }
514
677
 
678
+ index = index === -1 ? 0 : index;
515
679
  items[index].focus();
516
680
  };
517
681
 
518
682
  _createClass(Dropdown, null, [{
519
- key: "VERSION",
520
- get: function get() {
521
- return VERSION;
522
- }
523
- }, {
524
683
  key: "Default",
525
684
  get: function get() {
526
685
  return Default;
@@ -530,10 +689,15 @@
530
689
  get: function get() {
531
690
  return DefaultType;
532
691
  }
692
+ }, {
693
+ key: "DATA_KEY",
694
+ get: function get() {
695
+ return DATA_KEY;
696
+ }
533
697
  }]);
534
698
 
535
699
  return Dropdown;
536
- }();
700
+ }(BaseComponent__default['default']);
537
701
  /**
538
702
  * ------------------------------------------------------------------------
539
703
  * Data Api implementation
@@ -541,27 +705,26 @@
541
705
  */
542
706
 
543
707
 
544
- $__default['default'](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
708
+ EventHandler__default['default'].on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
709
+ EventHandler__default['default'].on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
710
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
711
+ EventHandler__default['default'].on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
712
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
545
713
  event.preventDefault();
546
714
  event.stopPropagation();
547
-
548
- Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');
549
- }).on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
550
- e.stopPropagation();
715
+ Dropdown.dropdownInterface(this, 'toggle');
716
+ });
717
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
718
+ return e.stopPropagation();
551
719
  });
552
720
  /**
553
721
  * ------------------------------------------------------------------------
554
722
  * jQuery
555
723
  * ------------------------------------------------------------------------
724
+ * add .Dropdown to jQuery only if jQuery is present
556
725
  */
557
726
 
558
- $__default['default'].fn[NAME] = Dropdown._jQueryInterface;
559
- $__default['default'].fn[NAME].Constructor = Dropdown;
560
-
561
- $__default['default'].fn[NAME].noConflict = function () {
562
- $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
563
- return Dropdown._jQueryInterface;
564
- };
727
+ defineJQueryPlugin(NAME, Dropdown);
565
728
 
566
729
  return Dropdown;
567
730