bootstrap 4.5.3 → 5.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +55 -0
  3. data/README.md +28 -5
  4. data/assets/javascripts/bootstrap/alert.js +54 -133
  5. data/assets/javascripts/bootstrap/base-component.js +99 -0
  6. data/assets/javascripts/bootstrap/button.js +44 -183
  7. data/assets/javascripts/bootstrap/carousel.js +308 -450
  8. data/assets/javascripts/bootstrap/collapse.js +180 -243
  9. data/assets/javascripts/bootstrap/dom/data.js +66 -0
  10. data/assets/javascripts/bootstrap/dom/event-handler.js +283 -0
  11. data/assets/javascripts/bootstrap/dom/manipulator.js +84 -0
  12. data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
  13. data/assets/javascripts/bootstrap/dropdown.js +320 -387
  14. data/assets/javascripts/bootstrap/modal.js +238 -478
  15. data/assets/javascripts/bootstrap/offcanvas.js +297 -0
  16. data/assets/javascripts/bootstrap/popover.js +58 -163
  17. data/assets/javascripts/bootstrap/scrollspy.js +223 -228
  18. data/assets/javascripts/bootstrap/tab.js +251 -166
  19. data/assets/javascripts/bootstrap/toast.js +147 -149
  20. data/assets/javascripts/bootstrap/tooltip.js +434 -646
  21. data/assets/javascripts/bootstrap/util/backdrop.js +165 -0
  22. data/assets/javascripts/bootstrap/util/component-functions.js +46 -0
  23. data/assets/javascripts/bootstrap/util/config.js +79 -0
  24. data/assets/javascripts/bootstrap/util/focustrap.js +129 -0
  25. data/assets/javascripts/bootstrap/util/index.js +350 -0
  26. data/assets/javascripts/bootstrap/util/sanitizer.js +122 -0
  27. data/assets/javascripts/bootstrap/util/scrollbar.js +138 -0
  28. data/assets/javascripts/bootstrap/util/swipe.js +155 -0
  29. data/assets/javascripts/bootstrap/util/template-factory.js +177 -0
  30. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  31. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  32. data/assets/javascripts/bootstrap-sprockets.js +24 -8
  33. data/assets/javascripts/bootstrap.js +4037 -3206
  34. data/assets/javascripts/bootstrap.min.js +3 -3
  35. data/assets/stylesheets/_bootstrap-grid.scss +56 -21
  36. data/assets/stylesheets/_bootstrap-reboot.scss +4 -7
  37. data/assets/stylesheets/_bootstrap.scss +20 -13
  38. data/assets/stylesheets/bootstrap/_accordion.scss +149 -0
  39. data/assets/stylesheets/bootstrap/_alert.scss +33 -14
  40. data/assets/stylesheets/bootstrap/_badge.scss +15 -31
  41. data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -27
  42. data/assets/stylesheets/bootstrap/_button-group.scss +25 -46
  43. data/assets/stylesheets/bootstrap/_buttons.scss +136 -71
  44. data/assets/stylesheets/bootstrap/_card.scss +61 -113
  45. data/assets/stylesheets/bootstrap/_carousel.scss +64 -35
  46. data/assets/stylesheets/bootstrap/_close.scss +30 -30
  47. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  48. data/assets/stylesheets/bootstrap/_dropdown.scss +128 -71
  49. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  50. data/assets/stylesheets/bootstrap/_functions.scss +181 -23
  51. data/assets/stylesheets/bootstrap/_grid.scss +13 -53
  52. data/assets/stylesheets/bootstrap/_helpers.scss +10 -0
  53. data/assets/stylesheets/bootstrap/_images.scss +1 -1
  54. data/assets/stylesheets/bootstrap/_list-group.scss +72 -34
  55. data/assets/stylesheets/bootstrap/_maps.scss +54 -0
  56. data/assets/stylesheets/bootstrap/_mixins.scss +9 -13
  57. data/assets/stylesheets/bootstrap/_modal.scss +107 -110
  58. data/assets/stylesheets/bootstrap/_nav.scss +72 -23
  59. data/assets/stylesheets/bootstrap/_navbar.scss +127 -173
  60. data/assets/stylesheets/bootstrap/_offcanvas.scss +144 -0
  61. data/assets/stylesheets/bootstrap/_pagination.scss +72 -37
  62. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  63. data/assets/stylesheets/bootstrap/_popover.scss +99 -73
  64. data/assets/stylesheets/bootstrap/_progress.scss +26 -14
  65. data/assets/stylesheets/bootstrap/_reboot.scss +326 -200
  66. data/assets/stylesheets/bootstrap/_root.scss +62 -9
  67. data/assets/stylesheets/bootstrap/_spinners.scss +51 -22
  68. data/assets/stylesheets/bootstrap/_tables.scss +94 -115
  69. data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
  70. data/assets/stylesheets/bootstrap/_tooltip.scss +68 -63
  71. data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
  72. data/assets/stylesheets/bootstrap/_type.scss +40 -59
  73. data/assets/stylesheets/bootstrap/_utilities.scss +647 -18
  74. data/assets/stylesheets/bootstrap/_variables.scss +1018 -526
  75. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  76. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +75 -0
  77. data/assets/stylesheets/bootstrap/forms/_form-check.scss +175 -0
  78. data/assets/stylesheets/bootstrap/forms/_form-control.scss +194 -0
  79. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  80. data/assets/stylesheets/bootstrap/forms/_form-select.scss +71 -0
  81. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  82. data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
  83. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  84. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  85. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +10 -0
  86. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  87. data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
  88. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  89. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  90. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  91. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  92. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  93. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  94. data/assets/stylesheets/bootstrap/mixins/_alert.scss +8 -6
  95. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  96. data/assets/stylesheets/bootstrap/mixins/_banner.scss +9 -0
  97. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  98. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  99. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
  100. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -100
  101. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  102. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  103. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  104. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  105. data/assets/stylesheets/bootstrap/mixins/_forms.scss +48 -74
  106. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  107. data/assets/stylesheets/bootstrap/mixins/_grid.scss +119 -37
  108. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  109. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  110. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  111. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
  112. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +3 -3
  113. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
  114. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  115. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
  116. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  117. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  118. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +278 -128
  119. data/bootstrap.gemspec +3 -5
  120. data/lib/bootstrap/version.rb +2 -2
  121. data/tasks/updater/js.rb +31 -7
  122. data/tasks/updater/network.rb +9 -3
  123. data/tasks/updater.rb +2 -2
  124. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  125. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  126. data/test/dummy_rails/app/views/pages/root.html +89 -0
  127. data/test/dummy_rails/config/application.rb +0 -3
  128. data/test/gemfiles/rails_5_2.gemfile +8 -0
  129. data/test/gemfiles/rails_6_1.gemfile +7 -0
  130. data/test/gemfiles/rails_7_0.gemfile +7 -0
  131. data/test/test_helper.rb +3 -2
  132. metadata +70 -78
  133. data/.travis.yml +0 -31
  134. data/assets/javascripts/bootstrap/util.js +0 -192
  135. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  136. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -524
  137. data/assets/stylesheets/bootstrap/_input-group.scss +0 -192
  138. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  139. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  140. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  141. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  142. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  143. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  144. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  145. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  146. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  147. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  148. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  149. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  150. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  151. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  152. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  153. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  154. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  155. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  156. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  157. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  158. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  159. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  160. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  161. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  162. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  163. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  164. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  165. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  166. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  167. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  168. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  169. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  170. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  171. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,539 +1,472 @@
1
1
  /*!
2
- * Bootstrap dropdown.js v4.5.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap dropdown.js v5.2.3 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 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';
11
-
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
-
14
- var $__default = /*#__PURE__*/_interopDefaultLegacy($);
15
- var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
16
- var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
17
-
18
- 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); }
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index'), require('./dom/event-handler'), require('./dom/manipulator'), require('./dom/selector-engine'), require('./base-component')) :
8
+ typeof define === 'function' && define.amd ? define(['@popperjs/core', './util/index', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global["@popperjs/core"], global.Index, global.EventHandler, global.Manipulator, global.SelectorEngine, global.BaseComponent));
10
+ })(this, (function (Popper, index, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
11
+
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
+
14
+ function _interopNamespace(e) {
15
+ if (e && e.__esModule) return e;
16
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
17
+ if (e) {
18
+ for (const k in e) {
19
+ if (k !== 'default') {
20
+ const d = Object.getOwnPropertyDescriptor(e, k);
21
+ Object.defineProperty(n, k, d.get ? d : {
22
+ enumerable: true,
23
+ get: () => e[k]
24
+ });
25
+ }
26
+ }
27
+ }
28
+ n.default = e;
29
+ return Object.freeze(n);
30
+ }
19
31
 
20
- 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); } }
32
+ const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
33
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
34
+ const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
35
+ const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
36
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
21
37
 
22
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
23
38
  /**
24
- * ------------------------------------------------------------------------
39
+ * --------------------------------------------------------------------------
40
+ * Bootstrap (v5.2.3): dropdown.js
41
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
42
+ * --------------------------------------------------------------------------
43
+ */
44
+ /**
25
45
  * Constants
26
- * ------------------------------------------------------------------------
27
46
  */
28
47
 
29
- var NAME = 'dropdown';
30
- var VERSION = '4.5.3';
31
- var DATA_KEY = 'bs.dropdown';
32
- var EVENT_KEY = "." + DATA_KEY;
33
- var DATA_API_KEY = '.data-api';
34
- var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
35
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
36
-
37
- var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
38
-
39
- var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
40
-
41
- var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
42
-
43
- var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
44
-
45
- var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
46
-
47
- var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
48
- var EVENT_HIDE = "hide" + EVENT_KEY;
49
- var EVENT_HIDDEN = "hidden" + EVENT_KEY;
50
- var EVENT_SHOW = "show" + EVENT_KEY;
51
- var EVENT_SHOWN = "shown" + EVENT_KEY;
52
- var EVENT_CLICK = "click" + EVENT_KEY;
53
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
54
- var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY + DATA_API_KEY;
55
- var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY + DATA_API_KEY;
56
- var CLASS_NAME_DISABLED = 'disabled';
57
- var CLASS_NAME_SHOW = 'show';
58
- var CLASS_NAME_DROPUP = 'dropup';
59
- var CLASS_NAME_DROPRIGHT = 'dropright';
60
- var CLASS_NAME_DROPLEFT = 'dropleft';
61
- var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
62
- var CLASS_NAME_POSITION_STATIC = 'position-static';
63
- var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]';
64
- var SELECTOR_FORM_CHILD = '.dropdown form';
65
- var SELECTOR_MENU = '.dropdown-menu';
66
- var SELECTOR_NAVBAR_NAV = '.navbar-nav';
67
- var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
68
- var PLACEMENT_TOP = 'top-start';
69
- var PLACEMENT_TOPEND = 'top-end';
70
- var PLACEMENT_BOTTOM = 'bottom-start';
71
- var PLACEMENT_BOTTOMEND = 'bottom-end';
72
- var PLACEMENT_RIGHT = 'right-start';
73
- var PLACEMENT_LEFT = 'left-start';
74
- var Default = {
75
- offset: 0,
76
- flip: true,
77
- boundary: 'scrollParent',
78
- reference: 'toggle',
48
+ const NAME = 'dropdown';
49
+ const DATA_KEY = 'bs.dropdown';
50
+ const EVENT_KEY = `.${DATA_KEY}`;
51
+ const DATA_API_KEY = '.data-api';
52
+ const ESCAPE_KEY = 'Escape';
53
+ const TAB_KEY = 'Tab';
54
+ const ARROW_UP_KEY = 'ArrowUp';
55
+ const ARROW_DOWN_KEY = 'ArrowDown';
56
+ const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
57
+
58
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
59
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
60
+ const EVENT_SHOW = `show${EVENT_KEY}`;
61
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
62
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
63
+ const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;
64
+ const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;
65
+ const CLASS_NAME_SHOW = 'show';
66
+ const CLASS_NAME_DROPUP = 'dropup';
67
+ const CLASS_NAME_DROPEND = 'dropend';
68
+ const CLASS_NAME_DROPSTART = 'dropstart';
69
+ const CLASS_NAME_DROPUP_CENTER = 'dropup-center';
70
+ const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';
71
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
72
+ const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`;
73
+ const SELECTOR_MENU = '.dropdown-menu';
74
+ const SELECTOR_NAVBAR = '.navbar';
75
+ const SELECTOR_NAVBAR_NAV = '.navbar-nav';
76
+ const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
77
+ const PLACEMENT_TOP = index.isRTL() ? 'top-end' : 'top-start';
78
+ const PLACEMENT_TOPEND = index.isRTL() ? 'top-start' : 'top-end';
79
+ const PLACEMENT_BOTTOM = index.isRTL() ? 'bottom-end' : 'bottom-start';
80
+ const PLACEMENT_BOTTOMEND = index.isRTL() ? 'bottom-start' : 'bottom-end';
81
+ const PLACEMENT_RIGHT = index.isRTL() ? 'left-start' : 'right-start';
82
+ const PLACEMENT_LEFT = index.isRTL() ? 'right-start' : 'left-start';
83
+ const PLACEMENT_TOPCENTER = 'top';
84
+ const PLACEMENT_BOTTOMCENTER = 'bottom';
85
+ const Default = {
86
+ autoClose: true,
87
+ boundary: 'clippingParents',
79
88
  display: 'dynamic',
80
- popperConfig: null
89
+ offset: [0, 2],
90
+ popperConfig: null,
91
+ reference: 'toggle'
81
92
  };
82
- var DefaultType = {
83
- offset: '(number|string|function)',
84
- flip: 'boolean',
93
+ const DefaultType = {
94
+ autoClose: '(boolean|string)',
85
95
  boundary: '(string|element)',
86
- reference: '(string|element)',
87
96
  display: 'string',
88
- popperConfig: '(null|object)'
97
+ offset: '(array|string|function)',
98
+ popperConfig: '(null|object|function)',
99
+ reference: '(string|element|object)'
89
100
  };
90
101
  /**
91
- * ------------------------------------------------------------------------
92
- * Class Definition
93
- * ------------------------------------------------------------------------
102
+ * Class definition
94
103
  */
95
104
 
96
- var Dropdown = /*#__PURE__*/function () {
97
- function Dropdown(element, config) {
98
- this._element = element;
105
+ class Dropdown extends BaseComponent__default.default {
106
+ constructor(element, config) {
107
+ super(element, config);
99
108
  this._popper = null;
100
- this._config = this._getConfig(config);
101
- this._menu = this._getMenuElement();
102
- this._inNavbar = this._detectNavbar();
109
+ this._parent = this._element.parentNode; // dropdown wrapper
110
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
103
111
 
104
- this._addEventListeners();
112
+ this._menu = SelectorEngine__default.default.next(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.findOne(SELECTOR_MENU, this._parent);
113
+ this._inNavbar = this._detectNavbar();
105
114
  } // Getters
106
115
 
107
116
 
108
- var _proto = Dropdown.prototype;
109
-
110
- // Public
111
- _proto.toggle = function toggle() {
112
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {
113
- return;
114
- }
115
-
116
- var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW);
117
+ static get Default() {
118
+ return Default;
119
+ }
117
120
 
118
- Dropdown._clearMenus();
121
+ static get DefaultType() {
122
+ return DefaultType;
123
+ }
119
124
 
120
- if (isActive) {
121
- return;
122
- }
125
+ static get NAME() {
126
+ return NAME;
127
+ } // Public
123
128
 
124
- this.show(true);
125
- };
126
129
 
127
- _proto.show = function show(usePopper) {
128
- if (usePopper === void 0) {
129
- usePopper = false;
130
- }
130
+ toggle() {
131
+ return this._isShown() ? this.hide() : this.show();
132
+ }
131
133
 
132
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
134
+ show() {
135
+ if (index.isDisabled(this._element) || this._isShown()) {
133
136
  return;
134
137
  }
135
138
 
136
- var relatedTarget = {
139
+ const relatedTarget = {
137
140
  relatedTarget: this._element
138
141
  };
139
- var showEvent = $__default['default'].Event(EVENT_SHOW, relatedTarget);
142
+ const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, relatedTarget);
140
143
 
141
- var parent = Dropdown._getParentFromElement(this._element);
142
-
143
- $__default['default'](parent).trigger(showEvent);
144
-
145
- if (showEvent.isDefaultPrevented()) {
144
+ if (showEvent.defaultPrevented) {
146
145
  return;
147
- } // Disable totally Popper.js for Dropdown in Navbar
148
-
149
-
150
- if (!this._inNavbar && usePopper) {
151
- /**
152
- * Check for Popper dependency
153
- * Popper - https://popper.js.org
154
- */
155
- if (typeof Popper__default['default'] === 'undefined') {
156
- throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
157
- }
158
-
159
- var referenceElement = this._element;
160
-
161
- if (this._config.reference === 'parent') {
162
- referenceElement = parent;
163
- } else if (Util__default['default'].isElement(this._config.reference)) {
164
- referenceElement = this._config.reference; // Check if it's jQuery element
165
-
166
- if (typeof this._config.reference.jquery !== 'undefined') {
167
- referenceElement = this._config.reference[0];
168
- }
169
- } // If boundary is not `scrollParent`, then set position to `static`
170
- // to allow the menu to "escape" the scroll parent's boundaries
171
- // https://github.com/twbs/bootstrap/issues/24251
172
-
173
-
174
- if (this._config.boundary !== 'scrollParent') {
175
- $__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);
176
- }
146
+ }
177
147
 
178
- this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());
179
- } // If this is a touch-enabled device we add extra
148
+ this._createPopper(); // If this is a touch-enabled device we add extra
180
149
  // empty mouseover listeners to the body's immediate children;
181
150
  // only needed because of broken event delegation on iOS
182
151
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
183
152
 
184
153
 
185
- if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
186
- $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);
154
+ if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
155
+ for (const element of [].concat(...document.body.children)) {
156
+ EventHandler__default.default.on(element, 'mouseover', index.noop);
157
+ }
187
158
  }
188
159
 
189
160
  this._element.focus();
190
161
 
191
162
  this._element.setAttribute('aria-expanded', true);
192
163
 
193
- $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
194
- $__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_SHOWN, relatedTarget));
195
- };
164
+ this._menu.classList.add(CLASS_NAME_SHOW);
165
+
166
+ this._element.classList.add(CLASS_NAME_SHOW);
196
167
 
197
- _proto.hide = function hide() {
198
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
168
+ EventHandler__default.default.trigger(this._element, EVENT_SHOWN, relatedTarget);
169
+ }
170
+
171
+ hide() {
172
+ if (index.isDisabled(this._element) || !this._isShown()) {
199
173
  return;
200
174
  }
201
175
 
202
- var relatedTarget = {
176
+ const relatedTarget = {
203
177
  relatedTarget: this._element
204
178
  };
205
- var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
206
179
 
207
- var parent = Dropdown._getParentFromElement(this._element);
180
+ this._completeHide(relatedTarget);
181
+ }
182
+
183
+ dispose() {
184
+ if (this._popper) {
185
+ this._popper.destroy();
186
+ }
187
+
188
+ super.dispose();
189
+ }
208
190
 
209
- $__default['default'](parent).trigger(hideEvent);
191
+ update() {
192
+ this._inNavbar = this._detectNavbar();
210
193
 
211
- if (hideEvent.isDefaultPrevented()) {
194
+ if (this._popper) {
195
+ this._popper.update();
196
+ }
197
+ } // Private
198
+
199
+
200
+ _completeHide(relatedTarget) {
201
+ const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE, relatedTarget);
202
+
203
+ if (hideEvent.defaultPrevented) {
212
204
  return;
205
+ } // If this is a touch-enabled device we remove the extra
206
+ // empty mouseover listeners we added for iOS support
207
+
208
+
209
+ if ('ontouchstart' in document.documentElement) {
210
+ for (const element of [].concat(...document.body.children)) {
211
+ EventHandler__default.default.off(element, 'mouseover', index.noop);
212
+ }
213
213
  }
214
214
 
215
215
  if (this._popper) {
216
216
  this._popper.destroy();
217
217
  }
218
218
 
219
- $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
220
- $__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
221
- };
219
+ this._menu.classList.remove(CLASS_NAME_SHOW);
222
220
 
223
- _proto.dispose = function dispose() {
224
- $__default['default'].removeData(this._element, DATA_KEY);
225
- $__default['default'](this._element).off(EVENT_KEY);
226
- this._element = null;
227
- this._menu = null;
221
+ this._element.classList.remove(CLASS_NAME_SHOW);
228
222
 
229
- if (this._popper !== null) {
230
- this._popper.destroy();
223
+ this._element.setAttribute('aria-expanded', 'false');
224
+
225
+ Manipulator__default.default.removeDataAttribute(this._menu, 'popper');
226
+ EventHandler__default.default.trigger(this._element, EVENT_HIDDEN, relatedTarget);
227
+ }
228
+
229
+ _getConfig(config) {
230
+ config = super._getConfig(config);
231
231
 
232
- this._popper = null;
232
+ if (typeof config.reference === 'object' && !index.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
233
+ // Popper virtual elements require a getBoundingClientRect method
234
+ throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
233
235
  }
234
- };
235
236
 
236
- _proto.update = function update() {
237
- this._inNavbar = this._detectNavbar();
237
+ return config;
238
+ }
238
239
 
239
- if (this._popper !== null) {
240
- this._popper.scheduleUpdate();
240
+ _createPopper() {
241
+ if (typeof Popper__namespace === 'undefined') {
242
+ throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
241
243
  }
242
- } // Private
243
- ;
244
244
 
245
- _proto._addEventListeners = function _addEventListeners() {
246
- var _this = this;
245
+ let referenceElement = this._element;
247
246
 
248
- $__default['default'](this._element).on(EVENT_CLICK, function (event) {
249
- event.preventDefault();
250
- event.stopPropagation();
247
+ if (this._config.reference === 'parent') {
248
+ referenceElement = this._parent;
249
+ } else if (index.isElement(this._config.reference)) {
250
+ referenceElement = index.getElement(this._config.reference);
251
+ } else if (typeof this._config.reference === 'object') {
252
+ referenceElement = this._config.reference;
253
+ }
251
254
 
252
- _this.toggle();
253
- });
254
- };
255
+ const popperConfig = this._getPopperConfig();
255
256
 
256
- _proto._getConfig = function _getConfig(config) {
257
- config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);
258
- Util__default['default'].typeCheckConfig(NAME, config, this.constructor.DefaultType);
259
- return config;
260
- };
257
+ this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
258
+ }
261
259
 
262
- _proto._getMenuElement = function _getMenuElement() {
263
- if (!this._menu) {
264
- var parent = Dropdown._getParentFromElement(this._element);
260
+ _isShown() {
261
+ return this._menu.classList.contains(CLASS_NAME_SHOW);
262
+ }
265
263
 
266
- if (parent) {
267
- this._menu = parent.querySelector(SELECTOR_MENU);
268
- }
264
+ _getPlacement() {
265
+ const parentDropdown = this._parent;
266
+
267
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
268
+ return PLACEMENT_RIGHT;
269
269
  }
270
270
 
271
- return this._menu;
272
- };
273
-
274
- _proto._getPlacement = function _getPlacement() {
275
- var $parentDropdown = $__default['default'](this._element.parentNode);
276
- var placement = PLACEMENT_BOTTOM; // Handle dropup
277
-
278
- if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
279
- placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
280
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
281
- placement = PLACEMENT_RIGHT;
282
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
283
- placement = PLACEMENT_LEFT;
284
- } else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
285
- placement = PLACEMENT_BOTTOMEND;
271
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
272
+ return PLACEMENT_LEFT;
286
273
  }
287
274
 
288
- return placement;
289
- };
275
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
276
+ return PLACEMENT_TOPCENTER;
277
+ }
290
278
 
291
- _proto._detectNavbar = function _detectNavbar() {
292
- return $__default['default'](this._element).closest('.navbar').length > 0;
293
- };
279
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
280
+ return PLACEMENT_BOTTOMCENTER;
281
+ } // We need to trim the value because custom properties can also include spaces
294
282
 
295
- _proto._getOffset = function _getOffset() {
296
- var _this2 = this;
297
283
 
298
- var offset = {};
284
+ const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
299
285
 
300
- if (typeof this._config.offset === 'function') {
301
- offset.fn = function (data) {
302
- data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
303
- return data;
304
- };
305
- } else {
306
- offset.offset = this._config.offset;
286
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
287
+ return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
288
+ }
289
+
290
+ return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
291
+ }
292
+
293
+ _detectNavbar() {
294
+ return this._element.closest(SELECTOR_NAVBAR) !== null;
295
+ }
296
+
297
+ _getOffset() {
298
+ const {
299
+ offset
300
+ } = this._config;
301
+
302
+ if (typeof offset === 'string') {
303
+ return offset.split(',').map(value => Number.parseInt(value, 10));
304
+ }
305
+
306
+ if (typeof offset === 'function') {
307
+ return popperData => offset(popperData, this._element);
307
308
  }
308
309
 
309
310
  return offset;
310
- };
311
+ }
311
312
 
312
- _proto._getPopperConfig = function _getPopperConfig() {
313
- var popperConfig = {
313
+ _getPopperConfig() {
314
+ const defaultBsPopperConfig = {
314
315
  placement: this._getPlacement(),
315
- modifiers: {
316
- offset: this._getOffset(),
317
- flip: {
318
- enabled: this._config.flip
319
- },
320
- preventOverflow: {
321
- boundariesElement: this._config.boundary
316
+ modifiers: [{
317
+ name: 'preventOverflow',
318
+ options: {
319
+ boundary: this._config.boundary
322
320
  }
323
- }
324
- }; // Disable Popper.js if we have a static display
321
+ }, {
322
+ name: 'offset',
323
+ options: {
324
+ offset: this._getOffset()
325
+ }
326
+ }]
327
+ }; // Disable Popper if we have a static display or Dropdown is in Navbar
328
+
329
+ if (this._inNavbar || this._config.display === 'static') {
330
+ Manipulator__default.default.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove
325
331
 
326
- if (this._config.display === 'static') {
327
- popperConfig.modifiers.applyStyle = {
332
+ defaultBsPopperConfig.modifiers = [{
333
+ name: 'applyStyles',
328
334
  enabled: false
329
- };
335
+ }];
330
336
  }
331
337
 
332
- return _extends({}, popperConfig, this._config.popperConfig);
338
+ return { ...defaultBsPopperConfig,
339
+ ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
340
+ };
341
+ }
342
+
343
+ _selectMenuItem({
344
+ key,
345
+ target
346
+ }) {
347
+ const items = SelectorEngine__default.default.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => index.isVisible(element));
348
+
349
+ if (!items.length) {
350
+ return;
351
+ } // if target isn't included in items (e.g. when expanding the dropdown)
352
+ // allow cycling to get the last item in case key equals ARROW_UP_KEY
353
+
354
+
355
+ index.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
333
356
  } // Static
334
- ;
335
357
 
336
- Dropdown._jQueryInterface = function _jQueryInterface(config) {
337
- return this.each(function () {
338
- var data = $__default['default'](this).data(DATA_KEY);
339
358
 
340
- var _config = typeof config === 'object' ? config : null;
359
+ static jQueryInterface(config) {
360
+ return this.each(function () {
361
+ const data = Dropdown.getOrCreateInstance(this, config);
341
362
 
342
- if (!data) {
343
- data = new Dropdown(this, _config);
344
- $__default['default'](this).data(DATA_KEY, data);
363
+ if (typeof config !== 'string') {
364
+ return;
345
365
  }
346
366
 
347
- if (typeof config === 'string') {
348
- if (typeof data[config] === 'undefined') {
349
- throw new TypeError("No method named \"" + config + "\"");
350
- }
351
-
352
- data[config]();
367
+ if (typeof data[config] === 'undefined') {
368
+ throw new TypeError(`No method named "${config}"`);
353
369
  }
370
+
371
+ data[config]();
354
372
  });
355
- };
373
+ }
356
374
 
357
- Dropdown._clearMenus = function _clearMenus(event) {
358
- if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
375
+ static clearMenus(event) {
376
+ if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
359
377
  return;
360
378
  }
361
379
 
362
- var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
380
+ const openToggles = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_SHOWN);
363
381
 
364
- for (var i = 0, len = toggles.length; i < len; i++) {
365
- var parent = Dropdown._getParentFromElement(toggles[i]);
366
-
367
- var context = $__default['default'](toggles[i]).data(DATA_KEY);
368
- var relatedTarget = {
369
- relatedTarget: toggles[i]
370
- };
382
+ for (const toggle of openToggles) {
383
+ const context = Dropdown.getInstance(toggle);
371
384
 
372
- if (event && event.type === 'click') {
373
- relatedTarget.clickEvent = event;
374
- }
375
-
376
- if (!context) {
385
+ if (!context || context._config.autoClose === false) {
377
386
  continue;
378
387
  }
379
388
 
380
- var dropdownMenu = context._menu;
389
+ const composedPath = event.composedPath();
390
+ const isMenuTarget = composedPath.includes(context._menu);
381
391
 
382
- if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW)) {
392
+ if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
383
393
  continue;
384
- }
385
-
386
- if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].contains(parent, event.target)) {
387
- continue;
388
- }
394
+ } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
389
395
 
390
- var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
391
- $__default['default'](parent).trigger(hideEvent);
392
396
 
393
- if (hideEvent.isDefaultPrevented()) {
397
+ if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
394
398
  continue;
395
- } // If this is a touch-enabled device we remove the extra
396
- // empty mouseover listeners we added for iOS support
397
-
398
-
399
- if ('ontouchstart' in document.documentElement) {
400
- $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);
401
399
  }
402
400
 
403
- toggles[i].setAttribute('aria-expanded', 'false');
401
+ const relatedTarget = {
402
+ relatedTarget: context._element
403
+ };
404
404
 
405
- if (context._popper) {
406
- context._popper.destroy();
405
+ if (event.type === 'click') {
406
+ relatedTarget.clickEvent = event;
407
407
  }
408
408
 
409
- $__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW);
410
- $__default['default'](parent).removeClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
409
+ context._completeHide(relatedTarget);
411
410
  }
412
- };
411
+ }
413
412
 
414
- Dropdown._getParentFromElement = function _getParentFromElement(element) {
415
- var parent;
416
- var selector = Util__default['default'].getSelectorFromElement(element);
413
+ static dataApiKeydownHandler(event) {
414
+ // If not an UP | DOWN | ESCAPE key => not a dropdown command
415
+ // If input/textarea && if key is other than ESCAPE => not a dropdown command
416
+ const isInput = /input|textarea/i.test(event.target.tagName);
417
+ const isEscapeEvent = event.key === ESCAPE_KEY;
418
+ const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);
417
419
 
418
- if (selector) {
419
- parent = document.querySelector(selector);
420
- }
421
-
422
- return parent || element.parentNode;
423
- } // eslint-disable-next-line complexity
424
- ;
425
-
426
- Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
427
- // If not input/textarea:
428
- // - And not a key in REGEXP_KEYDOWN => not a dropdown command
429
- // If input/textarea:
430
- // - If space key => not a dropdown command
431
- // - If key is other than escape
432
- // - If key is not up or down => not a dropdown command
433
- // - If trigger inside the menu => not a dropdown command
434
- if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default['default'](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
420
+ if (!isUpOrDownEvent && !isEscapeEvent) {
435
421
  return;
436
422
  }
437
423
 
438
- if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {
424
+ if (isInput && !isEscapeEvent) {
439
425
  return;
440
426
  }
441
427
 
442
- var parent = Dropdown._getParentFromElement(this);
428
+ event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
443
429
 
444
- var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW);
430
+ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default.default.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
431
+ const instance = Dropdown.getOrCreateInstance(getToggleButton);
445
432
 
446
- if (!isActive && event.which === ESCAPE_KEYCODE) {
447
- return;
448
- }
449
-
450
- event.preventDefault();
451
- event.stopPropagation();
452
-
453
- if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {
454
- if (event.which === ESCAPE_KEYCODE) {
455
- $__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus');
456
- }
457
-
458
- $__default['default'](this).trigger('click');
459
- return;
460
- }
433
+ if (isUpOrDownEvent) {
434
+ event.stopPropagation();
435
+ instance.show();
461
436
 
462
- var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
463
- return $__default['default'](item).is(':visible');
464
- });
437
+ instance._selectMenuItem(event);
465
438
 
466
- if (items.length === 0) {
467
439
  return;
468
440
  }
469
441
 
470
- var index = items.indexOf(event.target);
471
-
472
- if (event.which === ARROW_UP_KEYCODE && index > 0) {
473
- // Up
474
- index--;
475
- }
476
-
477
- if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
478
- // Down
479
- index++;
480
- }
481
-
482
- if (index < 0) {
483
- index = 0;
484
- }
485
-
486
- items[index].focus();
487
- };
488
-
489
- _createClass(Dropdown, null, [{
490
- key: "VERSION",
491
- get: function get() {
492
- return VERSION;
493
- }
494
- }, {
495
- key: "Default",
496
- get: function get() {
497
- return Default;
498
- }
499
- }, {
500
- key: "DefaultType",
501
- get: function get() {
502
- return DefaultType;
442
+ if (instance._isShown()) {
443
+ // else is escape and we check if it is shown
444
+ event.stopPropagation();
445
+ instance.hide();
446
+ getToggleButton.focus();
503
447
  }
504
- }]);
448
+ }
505
449
 
506
- return Dropdown;
507
- }();
450
+ }
508
451
  /**
509
- * ------------------------------------------------------------------------
510
- * Data Api implementation
511
- * ------------------------------------------------------------------------
452
+ * Data API implementation
512
453
  */
513
454
 
514
455
 
515
- $__default['default'](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
456
+ EventHandler__default.default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
457
+ EventHandler__default.default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
458
+ EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
459
+ EventHandler__default.default.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
460
+ EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
516
461
  event.preventDefault();
517
- event.stopPropagation();
518
-
519
- Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');
520
- }).on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
521
- e.stopPropagation();
462
+ Dropdown.getOrCreateInstance(this).toggle();
522
463
  });
523
464
  /**
524
- * ------------------------------------------------------------------------
525
465
  * jQuery
526
- * ------------------------------------------------------------------------
527
466
  */
528
467
 
529
- $__default['default'].fn[NAME] = Dropdown._jQueryInterface;
530
- $__default['default'].fn[NAME].Constructor = Dropdown;
531
-
532
- $__default['default'].fn[NAME].noConflict = function () {
533
- $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
534
- return Dropdown._jQueryInterface;
535
- };
468
+ index.defineJQueryPlugin(Dropdown);
536
469
 
537
470
  return Dropdown;
538
471
 
539
- })));
472
+ }));