bootstrap 4.5.2 → 5.0.0.beta1

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