bootstrap 4.4.1 → 5.0.0.alpha2

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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +12 -2
  3. data/README.md +1 -1
  4. data/assets/javascripts/bootstrap-sprockets.js +12 -8
  5. data/assets/javascripts/bootstrap.js +2094 -1562
  6. data/assets/javascripts/bootstrap.min.js +4 -4
  7. data/assets/javascripts/bootstrap/alert.js +145 -83
  8. data/assets/javascripts/bootstrap/button.js +66 -152
  9. data/assets/javascripts/bootstrap/carousel.js +307 -241
  10. data/assets/javascripts/bootstrap/collapse.js +287 -183
  11. data/assets/javascripts/bootstrap/dom/data.js +81 -0
  12. data/assets/javascripts/bootstrap/dom/event-handler.js +315 -0
  13. data/assets/javascripts/bootstrap/dom/manipulator.js +96 -0
  14. data/assets/javascripts/bootstrap/dom/polyfill.js +110 -0
  15. data/assets/javascripts/bootstrap/dom/selector-engine.js +98 -0
  16. data/assets/javascripts/bootstrap/dropdown.js +255 -261
  17. data/assets/javascripts/bootstrap/modal.js +364 -270
  18. data/assets/javascripts/bootstrap/popover.js +72 -113
  19. data/assets/javascripts/bootstrap/scrollspy.js +162 -147
  20. data/assets/javascripts/bootstrap/tab.js +176 -108
  21. data/assets/javascripts/bootstrap/toast.js +179 -139
  22. data/assets/javascripts/bootstrap/tooltip.js +369 -259
  23. data/assets/stylesheets/_bootstrap-grid.scss +54 -18
  24. data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
  25. data/assets/stylesheets/_bootstrap.scss +17 -11
  26. data/assets/stylesheets/bootstrap/_alert.scss +6 -7
  27. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  28. data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -17
  29. data/assets/stylesheets/bootstrap/_button-group.scss +16 -38
  30. data/assets/stylesheets/bootstrap/_buttons.scss +25 -40
  31. data/assets/stylesheets/bootstrap/_card.scss +43 -79
  32. data/assets/stylesheets/bootstrap/_carousel.scss +30 -15
  33. data/assets/stylesheets/bootstrap/_close.scss +31 -31
  34. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  35. data/assets/stylesheets/bootstrap/_dropdown.scss +54 -9
  36. data/assets/stylesheets/bootstrap/_forms.scss +9 -338
  37. data/assets/stylesheets/bootstrap/_functions.scss +97 -25
  38. data/assets/stylesheets/bootstrap/_grid.scss +3 -50
  39. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  40. data/assets/stylesheets/bootstrap/_list-group.scss +16 -17
  41. data/assets/stylesheets/bootstrap/_mixins.scss +7 -13
  42. data/assets/stylesheets/bootstrap/_modal.scss +41 -45
  43. data/assets/stylesheets/bootstrap/_nav.scss +16 -9
  44. data/assets/stylesheets/bootstrap/_navbar.scss +43 -74
  45. data/assets/stylesheets/bootstrap/_pagination.scss +11 -20
  46. data/assets/stylesheets/bootstrap/_popover.scss +5 -5
  47. data/assets/stylesheets/bootstrap/_progress.scss +2 -3
  48. data/assets/stylesheets/bootstrap/_reboot.scss +310 -175
  49. data/assets/stylesheets/bootstrap/_root.scss +5 -9
  50. data/assets/stylesheets/bootstrap/_spinners.scss +5 -4
  51. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  52. data/assets/stylesheets/bootstrap/_toasts.scss +6 -2
  53. data/assets/stylesheets/bootstrap/_tooltip.scss +5 -5
  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 +531 -17
  57. data/assets/stylesheets/bootstrap/_variables.scss +609 -444
  58. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  59. data/assets/stylesheets/bootstrap/forms/_form-check.scss +142 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-control.scss +116 -0
  61. data/assets/stylesheets/bootstrap/forms/_form-file.scss +91 -0
  62. data/assets/stylesheets/bootstrap/forms/_form-range.scss +136 -0
  63. data/assets/stylesheets/bootstrap/forms/_form-select.scss +82 -0
  64. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  65. data/assets/stylesheets/bootstrap/forms/_input-group.scss +140 -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 +0 -4
  76. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +35 -22
  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 +69 -51
  80. data/assets/stylesheets/bootstrap/mixins/_caret.scss +4 -4
  81. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  82. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  83. data/assets/stylesheets/bootstrap/mixins/_forms.scss +22 -66
  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 +2 -1
  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 +18 -8
  93. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +49 -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 +3 -3
  99. data/tasks/updater/network.rb +2 -2
  100. data/test/gemfiles/rails_6_0.gemfile +7 -0
  101. metadata +36 -41
  102. data/assets/javascripts/bootstrap/util.js +0 -188
  103. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  104. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -521
  105. data/assets/stylesheets/bootstrap/_input-group.scss +0 -191
  106. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  107. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  108. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  109. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -22
  110. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  111. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  112. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -71
  113. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  114. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  115. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  116. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  117. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  118. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  119. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  120. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  121. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  122. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  123. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  124. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  125. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  126. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  127. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  128. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  129. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  130. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  131. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  132. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  133. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  134. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  135. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  136. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
@@ -0,0 +1,110 @@
1
+ /*!
2
+ * Bootstrap polyfill.js v5.0.0-alpha2 (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' ? factory(exports) :
8
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Polyfill = {}));
10
+ }(this, (function (exports) { 'use strict';
11
+
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap (v5.0.0-alpha2): util/index.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
18
+ var MAX_UID = 1000000;
19
+ /**
20
+ * --------------------------------------------------------------------------
21
+ * Public Util Api
22
+ * --------------------------------------------------------------------------
23
+ */
24
+
25
+
26
+ var getUID = function getUID(prefix) {
27
+ do {
28
+ prefix += Math.floor(Math.random() * MAX_UID);
29
+ } while (document.getElementById(prefix));
30
+
31
+ return prefix;
32
+ };
33
+
34
+ /* istanbul ignore file */
35
+ exports.find = Element.prototype.querySelectorAll;
36
+ exports.findOne = Element.prototype.querySelector; // MSEdge resets defaultPrevented flag upon dispatchEvent call if at least one listener is attached
37
+
38
+ var defaultPreventedPreservedOnDispatch = function () {
39
+ var e = new CustomEvent('Bootstrap', {
40
+ cancelable: true
41
+ });
42
+ var element = document.createElement('div');
43
+ element.addEventListener('Bootstrap', function () {
44
+ return null;
45
+ });
46
+ e.preventDefault();
47
+ element.dispatchEvent(e);
48
+ return e.defaultPrevented;
49
+ }();
50
+
51
+ var scopeSelectorRegex = /:scope\b/;
52
+
53
+ var supportScopeQuery = function () {
54
+ var element = document.createElement('div');
55
+
56
+ try {
57
+ element.querySelectorAll(':scope *');
58
+ } catch (_) {
59
+ return false;
60
+ }
61
+
62
+ return true;
63
+ }();
64
+
65
+ if (!supportScopeQuery) {
66
+ exports.find = function find(selector) {
67
+ if (!scopeSelectorRegex.test(selector)) {
68
+ return this.querySelectorAll(selector);
69
+ }
70
+
71
+ var hasId = Boolean(this.id);
72
+
73
+ if (!hasId) {
74
+ this.id = getUID('scope');
75
+ }
76
+
77
+ var nodeList = null;
78
+
79
+ try {
80
+ selector = selector.replace(scopeSelectorRegex, "#" + this.id);
81
+ nodeList = this.querySelectorAll(selector);
82
+ } finally {
83
+ if (!hasId) {
84
+ this.removeAttribute('id');
85
+ }
86
+ }
87
+
88
+ return nodeList;
89
+ };
90
+
91
+ exports.findOne = function findOne(selector) {
92
+ if (!scopeSelectorRegex.test(selector)) {
93
+ return this.querySelector(selector);
94
+ }
95
+
96
+ var matches = exports.find.call(this, selector);
97
+
98
+ if (typeof matches[0] !== 'undefined') {
99
+ return matches[0];
100
+ }
101
+
102
+ return null;
103
+ };
104
+ }
105
+
106
+ exports.defaultPreventedPreservedOnDispatch = defaultPreventedPreservedOnDispatch;
107
+
108
+ Object.defineProperty(exports, '__esModule', { value: true });
109
+
110
+ })));
@@ -0,0 +1,98 @@
1
+ /*!
2
+ * Bootstrap selector-engine.js v5.0.0-alpha2 (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(require('./polyfill.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./polyfill.js'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory(global.Polyfill));
10
+ }(this, (function (polyfill_js) { 'use strict';
11
+
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap (v5.0.0-alpha2): dom/selector-engine.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
18
+ /**
19
+ * ------------------------------------------------------------------------
20
+ * Constants
21
+ * ------------------------------------------------------------------------
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, polyfill_js.find.call(element, selector));
37
+ },
38
+ findOne: function findOne(selector, element) {
39
+ if (element === void 0) {
40
+ element = document.documentElement;
41
+ }
42
+
43
+ return polyfill_js.findOne.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,83 +1,103 @@
1
1
  /*!
2
- * Bootstrap dropdown.js v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2
+ * Bootstrap dropdown.js v5.0.0-alpha2 (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
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 = global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util));
10
- }(this, (function ($, Popper, Util) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
14
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
15
-
16
- function _defineProperties(target, props) {
17
- for (var i = 0; i < props.length; i++) {
18
- var descriptor = props[i];
19
- descriptor.enumerable = descriptor.enumerable || false;
20
- descriptor.configurable = true;
21
- if ("value" in descriptor) descriptor.writable = true;
22
- Object.defineProperty(target, descriptor.key, descriptor);
23
- }
24
- }
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('popper.js'), require('./dom/selector-engine.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/event-handler.js', './dom/manipulator.js', 'popper.js', './dom/selector-engine.js'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Data, global.EventHandler, global.Manipulator, global.Popper, global.SelectorEngine));
10
+ }(this, (function (Data, EventHandler, Manipulator, Popper, SelectorEngine) { 'use strict';
25
11
 
26
- function _createClass(Constructor, protoProps, staticProps) {
27
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
28
- if (staticProps) _defineProperties(Constructor, staticProps);
29
- return Constructor;
30
- }
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
31
13
 
32
- function _defineProperty(obj, key, value) {
33
- if (key in obj) {
34
- Object.defineProperty(obj, key, {
35
- value: value,
36
- enumerable: true,
37
- configurable: true,
38
- writable: true
39
- });
40
- } else {
41
- obj[key] = value;
14
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
+ var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
18
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
19
+
20
+ /**
21
+ * --------------------------------------------------------------------------
22
+ * Bootstrap (v5.0.0-alpha2): util/index.js
23
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
24
+ * --------------------------------------------------------------------------
25
+ */
26
+
27
+ var toType = function toType(obj) {
28
+ if (obj === null || obj === undefined) {
29
+ return "" + obj;
42
30
  }
43
31
 
44
- return obj;
45
- }
32
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
33
+ };
46
34
 
47
- function ownKeys(object, enumerableOnly) {
48
- var keys = Object.keys(object);
35
+ var getSelector = function getSelector(element) {
36
+ var selector = element.getAttribute('data-target');
49
37
 
50
- if (Object.getOwnPropertySymbols) {
51
- var symbols = Object.getOwnPropertySymbols(object);
52
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
53
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
54
- });
55
- keys.push.apply(keys, symbols);
38
+ if (!selector || selector === '#') {
39
+ var hrefAttr = element.getAttribute('href');
40
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
56
41
  }
57
42
 
58
- return keys;
59
- }
43
+ return selector;
44
+ };
60
45
 
61
- function _objectSpread2(target) {
62
- for (var i = 1; i < arguments.length; i++) {
63
- var source = arguments[i] != null ? arguments[i] : {};
46
+ var getElementFromSelector = function getElementFromSelector(element) {
47
+ var selector = getSelector(element);
48
+ return selector ? document.querySelector(selector) : null;
49
+ };
64
50
 
65
- if (i % 2) {
66
- ownKeys(Object(source), true).forEach(function (key) {
67
- _defineProperty(target, key, source[key]);
68
- });
69
- } else if (Object.getOwnPropertyDescriptors) {
70
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
71
- } else {
72
- ownKeys(Object(source)).forEach(function (key) {
73
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
74
- });
51
+ var isElement = function isElement(obj) {
52
+ return (obj[0] || obj).nodeType;
53
+ };
54
+
55
+ var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
56
+ Object.keys(configTypes).forEach(function (property) {
57
+ var expectedTypes = configTypes[property];
58
+ var value = config[property];
59
+ var valueType = value && isElement(value) ? 'element' : toType(value);
60
+
61
+ if (!new RegExp(expectedTypes).test(valueType)) {
62
+ throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
75
63
  }
64
+ });
65
+ };
66
+
67
+ var isVisible = function isVisible(element) {
68
+ if (!element) {
69
+ return false;
76
70
  }
77
71
 
78
- return target;
79
- }
72
+ if (element.style && element.parentNode && element.parentNode.style) {
73
+ var elementStyle = getComputedStyle(element);
74
+ var parentNodeStyle = getComputedStyle(element.parentNode);
75
+ return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
76
+ }
77
+
78
+ return false;
79
+ };
80
+
81
+ var noop = function noop() {
82
+ return function () {};
83
+ };
84
+
85
+ var getjQuery = function getjQuery() {
86
+ var _window = window,
87
+ jQuery = _window.jQuery;
88
+
89
+ if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
90
+ return jQuery;
91
+ }
92
+
93
+ return null;
94
+ };
95
+
96
+ 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); }
80
97
 
98
+ 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); } }
99
+
100
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
81
101
  /**
82
102
  * ------------------------------------------------------------------------
83
103
  * Constants
@@ -85,61 +105,45 @@
85
105
  */
86
106
 
87
107
  var NAME = 'dropdown';
88
- var VERSION = '4.4.1';
108
+ var VERSION = '5.0.0-alpha2';
89
109
  var DATA_KEY = 'bs.dropdown';
90
110
  var EVENT_KEY = "." + DATA_KEY;
91
111
  var DATA_API_KEY = '.data-api';
92
- var JQUERY_NO_CONFLICT = $.fn[NAME];
93
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
94
-
95
- var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
96
-
97
- var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
98
-
99
- var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
100
-
101
- var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
102
-
103
- var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
104
-
105
- var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
106
- var Event = {
107
- HIDE: "hide" + EVENT_KEY,
108
- HIDDEN: "hidden" + EVENT_KEY,
109
- SHOW: "show" + EVENT_KEY,
110
- SHOWN: "shown" + EVENT_KEY,
111
- CLICK: "click" + EVENT_KEY,
112
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
113
- KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY,
114
- KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY
115
- };
116
- var ClassName = {
117
- DISABLED: 'disabled',
118
- SHOW: 'show',
119
- DROPUP: 'dropup',
120
- DROPRIGHT: 'dropright',
121
- DROPLEFT: 'dropleft',
122
- MENURIGHT: 'dropdown-menu-right',
123
- MENULEFT: 'dropdown-menu-left',
124
- POSITION_STATIC: 'position-static'
125
- };
126
- var Selector = {
127
- DATA_TOGGLE: '[data-toggle="dropdown"]',
128
- FORM_CHILD: '.dropdown form',
129
- MENU: '.dropdown-menu',
130
- NAVBAR_NAV: '.navbar-nav',
131
- VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
132
- };
133
- var AttachmentMap = {
134
- TOP: 'top-start',
135
- TOPEND: 'top-end',
136
- BOTTOM: 'bottom-start',
137
- BOTTOMEND: 'bottom-end',
138
- RIGHT: 'right-start',
139
- RIGHTEND: 'right-end',
140
- LEFT: 'left-start',
141
- LEFTEND: 'left-end'
142
- };
112
+ var ESCAPE_KEY = 'Escape';
113
+ var SPACE_KEY = 'Space';
114
+ var TAB_KEY = 'Tab';
115
+ var ARROW_UP_KEY = 'ArrowUp';
116
+ var ARROW_DOWN_KEY = 'ArrowDown';
117
+ var RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
118
+
119
+ var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEY + "|" + ARROW_DOWN_KEY + "|" + ESCAPE_KEY);
120
+ var EVENT_HIDE = "hide" + EVENT_KEY;
121
+ var EVENT_HIDDEN = "hidden" + EVENT_KEY;
122
+ var EVENT_SHOW = "show" + EVENT_KEY;
123
+ var EVENT_SHOWN = "shown" + EVENT_KEY;
124
+ var EVENT_CLICK = "click" + EVENT_KEY;
125
+ var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
126
+ var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY + DATA_API_KEY;
127
+ var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY + DATA_API_KEY;
128
+ var CLASS_NAME_DISABLED = 'disabled';
129
+ var CLASS_NAME_SHOW = 'show';
130
+ var CLASS_NAME_DROPUP = 'dropup';
131
+ var CLASS_NAME_DROPRIGHT = 'dropright';
132
+ var CLASS_NAME_DROPLEFT = 'dropleft';
133
+ var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
134
+ var CLASS_NAME_NAVBAR = 'navbar';
135
+ var CLASS_NAME_POSITION_STATIC = 'position-static';
136
+ var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]';
137
+ var SELECTOR_FORM_CHILD = '.dropdown form';
138
+ var SELECTOR_MENU = '.dropdown-menu';
139
+ var SELECTOR_NAVBAR_NAV = '.navbar-nav';
140
+ var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
141
+ var PLACEMENT_TOP = 'top-start';
142
+ var PLACEMENT_TOPEND = 'top-end';
143
+ var PLACEMENT_BOTTOM = 'bottom-start';
144
+ var PLACEMENT_BOTTOMEND = 'bottom-end';
145
+ var PLACEMENT_RIGHT = 'right-start';
146
+ var PLACEMENT_LEFT = 'left-start';
143
147
  var Default = {
144
148
  offset: 0,
145
149
  flip: true,
@@ -162,9 +166,7 @@
162
166
  * ------------------------------------------------------------------------
163
167
  */
164
168
 
165
- var Dropdown =
166
- /*#__PURE__*/
167
- function () {
169
+ var Dropdown = /*#__PURE__*/function () {
168
170
  function Dropdown(element, config) {
169
171
  this._element = element;
170
172
  this._popper = null;
@@ -173,6 +175,8 @@
173
175
  this._inNavbar = this._detectNavbar();
174
176
 
175
177
  this._addEventListeners();
178
+
179
+ Data__default['default'].setData(element, DATA_KEY, this);
176
180
  } // Getters
177
181
 
178
182
 
@@ -180,58 +184,47 @@
180
184
 
181
185
  // Public
182
186
  _proto.toggle = function toggle() {
183
- if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {
187
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
184
188
  return;
185
189
  }
186
190
 
187
- var isActive = $(this._menu).hasClass(ClassName.SHOW);
191
+ var isActive = this._element.classList.contains(CLASS_NAME_SHOW);
188
192
 
189
- Dropdown._clearMenus();
193
+ Dropdown.clearMenus();
190
194
 
191
195
  if (isActive) {
192
196
  return;
193
197
  }
194
198
 
195
- this.show(true);
199
+ this.show();
196
200
  };
197
201
 
198
- _proto.show = function show(usePopper) {
199
- if (usePopper === void 0) {
200
- usePopper = false;
201
- }
202
-
203
- if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {
202
+ _proto.show = function show() {
203
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
204
204
  return;
205
205
  }
206
206
 
207
+ var parent = Dropdown.getParentFromElement(this._element);
207
208
  var relatedTarget = {
208
209
  relatedTarget: this._element
209
210
  };
210
- var showEvent = $.Event(Event.SHOW, relatedTarget);
211
+ var showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, relatedTarget);
211
212
 
212
- var parent = Dropdown._getParentFromElement(this._element);
213
-
214
- $(parent).trigger(showEvent);
215
-
216
- if (showEvent.isDefaultPrevented()) {
213
+ if (showEvent.defaultPrevented) {
217
214
  return;
218
215
  } // Disable totally Popper.js for Dropdown in Navbar
219
216
 
220
217
 
221
- if (!this._inNavbar && usePopper) {
222
- /**
223
- * Check for Popper dependency
224
- * Popper - https://popper.js.org
225
- */
226
- if (typeof Popper === 'undefined') {
227
- throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
218
+ if (!this._inNavbar) {
219
+ if (typeof Popper__default['default'] === 'undefined') {
220
+ throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org)');
228
221
  }
229
222
 
230
223
  var referenceElement = this._element;
231
224
 
232
225
  if (this._config.reference === 'parent') {
233
226
  referenceElement = parent;
234
- } else if (Util.isElement(this._config.reference)) {
227
+ } else if (isElement(this._config.reference)) {
235
228
  referenceElement = this._config.reference; // Check if it's jQuery element
236
229
 
237
230
  if (typeof this._config.reference.jquery !== 'undefined') {
@@ -243,43 +236,45 @@
243
236
 
244
237
 
245
238
  if (this._config.boundary !== 'scrollParent') {
246
- $(parent).addClass(ClassName.POSITION_STATIC);
239
+ parent.classList.add(CLASS_NAME_POSITION_STATIC);
247
240
  }
248
241
 
249
- this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
242
+ this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());
250
243
  } // If this is a touch-enabled device we add extra
251
244
  // empty mouseover listeners to the body's immediate children;
252
245
  // only needed because of broken event delegation on iOS
253
246
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
254
247
 
255
248
 
256
- if ('ontouchstart' in document.documentElement && $(parent).closest(Selector.NAVBAR_NAV).length === 0) {
257
- $(document.body).children().on('mouseover', null, $.noop);
249
+ if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
250
+ var _ref;
251
+
252
+ (_ref = []).concat.apply(_ref, document.body.children).forEach(function (elem) {
253
+ return EventHandler__default['default'].on(elem, 'mouseover', null, noop());
254
+ });
258
255
  }
259
256
 
260
257
  this._element.focus();
261
258
 
262
259
  this._element.setAttribute('aria-expanded', true);
263
260
 
264
- $(this._menu).toggleClass(ClassName.SHOW);
265
- $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));
261
+ Manipulator__default['default'].toggleClass(this._menu, CLASS_NAME_SHOW);
262
+ Manipulator__default['default'].toggleClass(this._element, CLASS_NAME_SHOW);
263
+ EventHandler__default['default'].trigger(parent, EVENT_SHOWN, relatedTarget);
266
264
  };
267
265
 
268
266
  _proto.hide = function hide() {
269
- if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {
267
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
270
268
  return;
271
269
  }
272
270
 
271
+ var parent = Dropdown.getParentFromElement(this._element);
273
272
  var relatedTarget = {
274
273
  relatedTarget: this._element
275
274
  };
276
- var hideEvent = $.Event(Event.HIDE, relatedTarget);
277
-
278
- var parent = Dropdown._getParentFromElement(this._element);
279
-
280
- $(parent).trigger(hideEvent);
275
+ var hideEvent = EventHandler__default['default'].trigger(parent, EVENT_HIDE, relatedTarget);
281
276
 
282
- if (hideEvent.isDefaultPrevented()) {
277
+ if (hideEvent.defaultPrevented) {
283
278
  return;
284
279
  }
285
280
 
@@ -287,17 +282,18 @@
287
282
  this._popper.destroy();
288
283
  }
289
284
 
290
- $(this._menu).toggleClass(ClassName.SHOW);
291
- $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
285
+ Manipulator__default['default'].toggleClass(this._menu, CLASS_NAME_SHOW);
286
+ Manipulator__default['default'].toggleClass(this._element, CLASS_NAME_SHOW);
287
+ EventHandler__default['default'].trigger(parent, EVENT_HIDDEN, relatedTarget);
292
288
  };
293
289
 
294
290
  _proto.dispose = function dispose() {
295
- $.removeData(this._element, DATA_KEY);
296
- $(this._element).off(EVENT_KEY);
291
+ Data__default['default'].removeData(this._element, DATA_KEY);
292
+ EventHandler__default['default'].off(this._element, EVENT_KEY);
297
293
  this._element = null;
298
294
  this._menu = null;
299
295
 
300
- if (this._popper !== null) {
296
+ if (this._popper) {
301
297
  this._popper.destroy();
302
298
 
303
299
  this._popper = null;
@@ -307,7 +303,7 @@
307
303
  _proto.update = function update() {
308
304
  this._inNavbar = this._detectNavbar();
309
305
 
310
- if (this._popper !== null) {
306
+ if (this._popper) {
311
307
  this._popper.scheduleUpdate();
312
308
  }
313
309
  } // Private
@@ -316,7 +312,7 @@
316
312
  _proto._addEventListeners = function _addEventListeners() {
317
313
  var _this = this;
318
314
 
319
- $(this._element).on(Event.CLICK, function (event) {
315
+ EventHandler__default['default'].on(this._element, EVENT_CLICK, function (event) {
320
316
  event.preventDefault();
321
317
  event.stopPropagation();
322
318
 
@@ -325,46 +321,38 @@
325
321
  };
326
322
 
327
323
  _proto._getConfig = function _getConfig(config) {
328
- config = _objectSpread2({}, this.constructor.Default, {}, $(this._element).data(), {}, config);
329
- Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
324
+ config = _extends({}, this.constructor.Default, Manipulator__default['default'].getDataAttributes(this._element), config);
325
+ typeCheckConfig(NAME, config, this.constructor.DefaultType);
330
326
  return config;
331
327
  };
332
328
 
333
329
  _proto._getMenuElement = function _getMenuElement() {
334
- if (!this._menu) {
335
- var parent = Dropdown._getParentFromElement(this._element);
336
-
337
- if (parent) {
338
- this._menu = parent.querySelector(Selector.MENU);
339
- }
340
- }
341
-
342
- return this._menu;
330
+ return SelectorEngine__default['default'].next(this._element, SELECTOR_MENU)[0];
343
331
  };
344
332
 
345
333
  _proto._getPlacement = function _getPlacement() {
346
- var $parentDropdown = $(this._element.parentNode);
347
- var placement = AttachmentMap.BOTTOM; // Handle dropup
334
+ var parentDropdown = this._element.parentNode;
335
+ var placement = PLACEMENT_BOTTOM; // Handle dropup
348
336
 
349
- if ($parentDropdown.hasClass(ClassName.DROPUP)) {
350
- placement = AttachmentMap.TOP;
337
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
338
+ placement = PLACEMENT_TOP;
351
339
 
352
- if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
353
- placement = AttachmentMap.TOPEND;
340
+ if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
341
+ placement = PLACEMENT_TOPEND;
354
342
  }
355
- } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
356
- placement = AttachmentMap.RIGHT;
357
- } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
358
- placement = AttachmentMap.LEFT;
359
- } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
360
- placement = AttachmentMap.BOTTOMEND;
343
+ } else if (parentDropdown.classList.contains(CLASS_NAME_DROPRIGHT)) {
344
+ placement = PLACEMENT_RIGHT;
345
+ } else if (parentDropdown.classList.contains(CLASS_NAME_DROPLEFT)) {
346
+ placement = PLACEMENT_LEFT;
347
+ } else if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
348
+ placement = PLACEMENT_BOTTOMEND;
361
349
  }
362
350
 
363
351
  return placement;
364
352
  };
365
353
 
366
354
  _proto._detectNavbar = function _detectNavbar() {
367
- return $(this._element).closest('.navbar').length > 0;
355
+ return Boolean(this._element.closest("." + CLASS_NAME_NAVBAR));
368
356
  };
369
357
 
370
358
  _proto._getOffset = function _getOffset() {
@@ -374,7 +362,7 @@
374
362
 
375
363
  if (typeof this._config.offset === 'function') {
376
364
  offset.fn = function (data) {
377
- data.offsets = _objectSpread2({}, data.offsets, {}, _this2._config.offset(data.offsets, _this2._element) || {});
365
+ data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
378
366
  return data;
379
367
  };
380
368
  } else {
@@ -404,42 +392,44 @@
404
392
  };
405
393
  }
406
394
 
407
- return _objectSpread2({}, popperConfig, {}, this._config.popperConfig);
395
+ return _extends({}, popperConfig, this._config.popperConfig);
408
396
  } // Static
409
397
  ;
410
398
 
411
- Dropdown._jQueryInterface = function _jQueryInterface(config) {
412
- return this.each(function () {
413
- var data = $(this).data(DATA_KEY);
399
+ Dropdown.dropdownInterface = function dropdownInterface(element, config) {
400
+ var data = Data__default['default'].getData(element, DATA_KEY);
414
401
 
415
- var _config = typeof config === 'object' ? config : null;
402
+ var _config = typeof config === 'object' ? config : null;
416
403
 
417
- if (!data) {
418
- data = new Dropdown(this, _config);
419
- $(this).data(DATA_KEY, data);
404
+ if (!data) {
405
+ data = new Dropdown(element, _config);
406
+ }
407
+
408
+ if (typeof config === 'string') {
409
+ if (typeof data[config] === 'undefined') {
410
+ throw new TypeError("No method named \"" + config + "\"");
420
411
  }
421
412
 
422
- if (typeof config === 'string') {
423
- if (typeof data[config] === 'undefined') {
424
- throw new TypeError("No method named \"" + config + "\"");
425
- }
413
+ data[config]();
414
+ }
415
+ };
426
416
 
427
- data[config]();
428
- }
417
+ Dropdown.jQueryInterface = function jQueryInterface(config) {
418
+ return this.each(function () {
419
+ Dropdown.dropdownInterface(this, config);
429
420
  });
430
421
  };
431
422
 
432
- Dropdown._clearMenus = function _clearMenus(event) {
433
- if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
423
+ Dropdown.clearMenus = function clearMenus(event) {
424
+ if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
434
425
  return;
435
426
  }
436
427
 
437
- var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
428
+ var toggles = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
438
429
 
439
430
  for (var i = 0, len = toggles.length; i < len; i++) {
440
- var parent = Dropdown._getParentFromElement(toggles[i]);
441
-
442
- var context = $(toggles[i]).data(DATA_KEY);
431
+ var parent = Dropdown.getParentFromElement(toggles[i]);
432
+ var context = Data__default['default'].getData(toggles[i], DATA_KEY);
443
433
  var relatedTarget = {
444
434
  relatedTarget: toggles[i]
445
435
  };
@@ -454,25 +444,28 @@
454
444
 
455
445
  var dropdownMenu = context._menu;
456
446
 
457
- if (!$(parent).hasClass(ClassName.SHOW)) {
447
+ if (!toggles[i].classList.contains(CLASS_NAME_SHOW)) {
458
448
  continue;
459
449
  }
460
450
 
461
- if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
451
+ if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.key === TAB_KEY) && dropdownMenu.contains(event.target)) {
462
452
  continue;
463
453
  }
464
454
 
465
- var hideEvent = $.Event(Event.HIDE, relatedTarget);
466
- $(parent).trigger(hideEvent);
455
+ var hideEvent = EventHandler__default['default'].trigger(parent, EVENT_HIDE, relatedTarget);
467
456
 
468
- if (hideEvent.isDefaultPrevented()) {
457
+ if (hideEvent.defaultPrevented) {
469
458
  continue;
470
459
  } // If this is a touch-enabled device we remove the extra
471
460
  // empty mouseover listeners we added for iOS support
472
461
 
473
462
 
474
463
  if ('ontouchstart' in document.documentElement) {
475
- $(document.body).children().off('mouseover', null, $.noop);
464
+ var _ref2;
465
+
466
+ (_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
467
+ return EventHandler__default['default'].off(elem, 'mouseover', null, noop());
468
+ });
476
469
  }
477
470
 
478
471
  toggles[i].setAttribute('aria-expanded', 'false');
@@ -481,24 +474,17 @@
481
474
  context._popper.destroy();
482
475
  }
483
476
 
484
- $(dropdownMenu).removeClass(ClassName.SHOW);
485
- $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
477
+ dropdownMenu.classList.remove(CLASS_NAME_SHOW);
478
+ toggles[i].classList.remove(CLASS_NAME_SHOW);
479
+ EventHandler__default['default'].trigger(parent, EVENT_HIDDEN, relatedTarget);
486
480
  }
487
481
  };
488
482
 
489
- Dropdown._getParentFromElement = function _getParentFromElement(element) {
490
- var parent;
491
- var selector = Util.getSelectorFromElement(element);
492
-
493
- if (selector) {
494
- parent = document.querySelector(selector);
495
- }
496
-
497
- return parent || element.parentNode;
498
- } // eslint-disable-next-line complexity
499
- ;
483
+ Dropdown.getParentFromElement = function getParentFromElement(element) {
484
+ return getElementFromSelector(element) || element.parentNode;
485
+ };
500
486
 
501
- Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
487
+ Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
502
488
  // If not input/textarea:
503
489
  // - And not a key in REGEXP_KEYDOWN => not a dropdown command
504
490
  // If input/textarea:
@@ -506,62 +492,59 @@
506
492
  // - If key is other than escape
507
493
  // - If key is not up or down => not a dropdown command
508
494
  // - If trigger inside the menu => not a dropdown command
509
- 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)) {
495
+ 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)) {
510
496
  return;
511
497
  }
512
498
 
513
499
  event.preventDefault();
514
500
  event.stopPropagation();
515
501
 
516
- if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
502
+ if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
517
503
  return;
518
504
  }
519
505
 
520
- var parent = Dropdown._getParentFromElement(this);
521
-
522
- var isActive = $(parent).hasClass(ClassName.SHOW);
506
+ var parent = Dropdown.getParentFromElement(this);
507
+ var isActive = this.classList.contains(CLASS_NAME_SHOW);
523
508
 
524
- if (!isActive && event.which === ESCAPE_KEYCODE) {
509
+ if (event.key === ESCAPE_KEY) {
510
+ var button = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
511
+ button.focus();
512
+ Dropdown.clearMenus();
525
513
  return;
526
514
  }
527
515
 
528
- if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
529
- if (event.which === ESCAPE_KEYCODE) {
530
- var toggle = parent.querySelector(Selector.DATA_TOGGLE);
531
- $(toggle).trigger('focus');
532
- }
533
-
534
- $(this).trigger('click');
516
+ if (!isActive || event.key === SPACE_KEY) {
517
+ Dropdown.clearMenus();
535
518
  return;
536
519
  }
537
520
 
538
- var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)).filter(function (item) {
539
- return $(item).is(':visible');
540
- });
521
+ var items = SelectorEngine__default['default'].find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
541
522
 
542
- if (items.length === 0) {
523
+ if (!items.length) {
543
524
  return;
544
525
  }
545
526
 
546
527
  var index = items.indexOf(event.target);
547
528
 
548
- if (event.which === ARROW_UP_KEYCODE && index > 0) {
529
+ if (event.key === ARROW_UP_KEY && index > 0) {
549
530
  // Up
550
531
  index--;
551
532
  }
552
533
 
553
- if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
534
+ if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
554
535
  // Down
555
536
  index++;
556
- }
537
+ } // index is -1 if the first keydown is an ArrowUp
557
538
 
558
- if (index < 0) {
559
- index = 0;
560
- }
561
539
 
540
+ index = index === -1 ? 0 : index;
562
541
  items[index].focus();
563
542
  };
564
543
 
544
+ Dropdown.getInstance = function getInstance(element) {
545
+ return Data__default['default'].getData(element, DATA_KEY);
546
+ };
547
+
565
548
  _createClass(Dropdown, null, [{
566
549
  key: "VERSION",
567
550
  get: function get() {
@@ -588,27 +571,38 @@
588
571
  */
589
572
 
590
573
 
591
- $(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) {
574
+ EventHandler__default['default'].on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
575
+ EventHandler__default['default'].on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
576
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
577
+ EventHandler__default['default'].on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
578
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
592
579
  event.preventDefault();
593
580
  event.stopPropagation();
594
-
595
- Dropdown._jQueryInterface.call($(this), 'toggle');
596
- }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
597
- e.stopPropagation();
581
+ Dropdown.dropdownInterface(this, 'toggle');
598
582
  });
583
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
584
+ return e.stopPropagation();
585
+ });
586
+ var $ = getjQuery();
599
587
  /**
600
588
  * ------------------------------------------------------------------------
601
589
  * jQuery
602
590
  * ------------------------------------------------------------------------
591
+ * add .dropdown to jQuery only if jQuery is present
603
592
  */
604
593
 
605
- $.fn[NAME] = Dropdown._jQueryInterface;
606
- $.fn[NAME].Constructor = Dropdown;
594
+ /* istanbul ignore if */
607
595
 
608
- $.fn[NAME].noConflict = function () {
609
- $.fn[NAME] = JQUERY_NO_CONFLICT;
610
- return Dropdown._jQueryInterface;
611
- };
596
+ if ($) {
597
+ var JQUERY_NO_CONFLICT = $.fn[NAME];
598
+ $.fn[NAME] = Dropdown.jQueryInterface;
599
+ $.fn[NAME].Constructor = Dropdown;
600
+
601
+ $.fn[NAME].noConflict = function () {
602
+ $.fn[NAME] = JQUERY_NO_CONFLICT;
603
+ return Dropdown.jQueryInterface;
604
+ };
605
+ }
612
606
 
613
607
  return Dropdown;
614
608