bootstrap 5.0.0 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/assets/javascripts/bootstrap/alert.js +77 -106
  4. data/assets/javascripts/bootstrap/base-component.js +126 -7
  5. data/assets/javascripts/bootstrap/button.js +24 -24
  6. data/assets/javascripts/bootstrap/carousel.js +115 -128
  7. data/assets/javascripts/bootstrap/collapse.js +119 -176
  8. data/assets/javascripts/bootstrap/dom/data.js +2 -2
  9. data/assets/javascripts/bootstrap/dom/event-handler.js +3 -4
  10. data/assets/javascripts/bootstrap/dom/manipulator.js +4 -4
  11. data/assets/javascripts/bootstrap/dom/selector-engine.js +47 -5
  12. data/assets/javascripts/bootstrap/dropdown.js +142 -130
  13. data/assets/javascripts/bootstrap/modal.js +376 -171
  14. data/assets/javascripts/bootstrap/offcanvas.js +328 -133
  15. data/assets/javascripts/bootstrap/popover.js +27 -59
  16. data/assets/javascripts/bootstrap/scrollspy.js +51 -56
  17. data/assets/javascripts/bootstrap/tab.js +39 -66
  18. data/assets/javascripts/bootstrap/toast.js +175 -86
  19. data/assets/javascripts/bootstrap/tooltip.js +141 -185
  20. data/assets/javascripts/bootstrap-sprockets.js +6 -6
  21. data/assets/javascripts/bootstrap.js +1031 -1026
  22. data/assets/javascripts/bootstrap.min.js +2 -2
  23. data/assets/stylesheets/_bootstrap-grid.scss +3 -1
  24. data/assets/stylesheets/_bootstrap-reboot.scss +2 -4
  25. data/assets/stylesheets/_bootstrap.scss +2 -1
  26. data/assets/stylesheets/bootstrap/_card.scss +7 -6
  27. data/assets/stylesheets/bootstrap/_carousel.scss +2 -2
  28. data/assets/stylesheets/bootstrap/_dropdown.scss +4 -4
  29. data/assets/stylesheets/bootstrap/_functions.scss +100 -3
  30. data/assets/stylesheets/bootstrap/_grid.scss +11 -0
  31. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  32. data/assets/stylesheets/bootstrap/_images.scss +1 -1
  33. data/assets/stylesheets/bootstrap/_list-group.scss +5 -5
  34. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  35. data/assets/stylesheets/bootstrap/_modal.scss +7 -26
  36. data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
  37. data/assets/stylesheets/bootstrap/_offcanvas.scss +8 -2
  38. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  39. data/assets/stylesheets/bootstrap/_popover.scss +10 -10
  40. data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
  41. data/assets/stylesheets/bootstrap/_root.scss +40 -2
  42. data/assets/stylesheets/bootstrap/_tables.scss +1 -0
  43. data/assets/stylesheets/bootstrap/_toasts.scss +3 -3
  44. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
  45. data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
  46. data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
  47. data/assets/stylesheets/bootstrap/_variables.scss +200 -25
  48. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
  49. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +3 -1
  50. data/assets/stylesheets/bootstrap/forms/_form-check.scss +1 -1
  51. data/assets/stylesheets/bootstrap/forms/_form-control.scss +6 -6
  52. data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -1
  53. data/assets/stylesheets/bootstrap/forms/_form-select.scss +3 -0
  54. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  55. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  56. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  57. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +1 -1
  58. data/assets/stylesheets/bootstrap/mixins/_forms.scss +8 -1
  59. data/assets/stylesheets/bootstrap/mixins/_grid.scss +33 -8
  60. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
  61. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +55 -13
  62. data/bootstrap.gemspec +3 -3
  63. data/lib/bootstrap/version.rb +2 -2
  64. data/tasks/updater/js.rb +6 -2
  65. metadata +12 -8
@@ -1,13 +1,13 @@
1
1
  /*!
2
- * Bootstrap dropdown.js v5.0.0 (https://getbootstrap.com/)
2
+ * Bootstrap dropdown.js v5.1.1 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
- }(this, (function (Popper, Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
+ }(this, (function (Popper, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
@@ -32,7 +32,6 @@
32
32
  }
33
33
 
34
34
  var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
35
- var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
36
35
  var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
37
36
  var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
38
37
  var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
@@ -40,7 +39,7 @@
40
39
 
41
40
  /**
42
41
  * --------------------------------------------------------------------------
43
- * Bootstrap (v5.0.0): util/index.js
42
+ * Bootstrap (v5.1.1): util/index.js
44
43
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
45
44
  * --------------------------------------------------------------------------
46
45
  */
@@ -82,7 +81,30 @@
82
81
  return selector ? document.querySelector(selector) : null;
83
82
  };
84
83
 
85
- const isElement = obj => (obj[0] || obj).nodeType;
84
+ const isElement = obj => {
85
+ if (!obj || typeof obj !== 'object') {
86
+ return false;
87
+ }
88
+
89
+ if (typeof obj.jquery !== 'undefined') {
90
+ obj = obj[0];
91
+ }
92
+
93
+ return typeof obj.nodeType !== 'undefined';
94
+ };
95
+
96
+ const getElement = obj => {
97
+ if (isElement(obj)) {
98
+ // it's a jQuery object or a node element
99
+ return obj.jquery ? obj[0] : obj;
100
+ }
101
+
102
+ if (typeof obj === 'string' && obj.length > 0) {
103
+ return document.querySelector(obj);
104
+ }
105
+
106
+ return null;
107
+ };
86
108
 
87
109
  const typeCheckConfig = (componentName, config, configTypes) => {
88
110
  Object.keys(configTypes).forEach(property => {
@@ -97,17 +119,11 @@
97
119
  };
98
120
 
99
121
  const isVisible = element => {
100
- if (!element) {
122
+ if (!isElement(element) || element.getClientRects().length === 0) {
101
123
  return false;
102
124
  }
103
125
 
104
- if (element.style && element.parentNode && element.parentNode.style) {
105
- const elementStyle = getComputedStyle(element);
106
- const parentNodeStyle = getComputedStyle(element.parentNode);
107
- return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
108
- }
109
-
110
- return false;
126
+ return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
111
127
  };
112
128
 
113
129
  const isDisabled = element => {
@@ -140,9 +156,18 @@
140
156
  return null;
141
157
  };
142
158
 
159
+ const DOMContentLoadedCallbacks = [];
160
+
143
161
  const onDOMContentLoaded = callback => {
144
162
  if (document.readyState === 'loading') {
145
- document.addEventListener('DOMContentLoaded', callback);
163
+ // add listener on the first call when the document is in loading state
164
+ if (!DOMContentLoadedCallbacks.length) {
165
+ document.addEventListener('DOMContentLoaded', () => {
166
+ DOMContentLoadedCallbacks.forEach(callback => callback());
167
+ });
168
+ }
169
+
170
+ DOMContentLoadedCallbacks.push(callback);
146
171
  } else {
147
172
  callback();
148
173
  }
@@ -150,12 +175,13 @@
150
175
 
151
176
  const isRTL = () => document.documentElement.dir === 'rtl';
152
177
 
153
- const defineJQueryPlugin = (name, plugin) => {
178
+ const defineJQueryPlugin = plugin => {
154
179
  onDOMContentLoaded(() => {
155
180
  const $ = getjQuery();
156
181
  /* istanbul ignore if */
157
182
 
158
183
  if ($) {
184
+ const name = plugin.NAME;
159
185
  const JQUERY_NO_CONFLICT = $.fn[name];
160
186
  $.fn[name] = plugin.jQueryInterface;
161
187
  $.fn[name].Constructor = plugin;
@@ -167,10 +193,37 @@
167
193
  }
168
194
  });
169
195
  };
196
+ /**
197
+ * Return the previous/next element of a list.
198
+ *
199
+ * @param {array} list The list of elements
200
+ * @param activeElement The active element
201
+ * @param shouldGetNext Choose to get next or previous element
202
+ * @param isCycleAllowed
203
+ * @return {Element|elem} The proper element
204
+ */
205
+
206
+
207
+ const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
208
+ let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed
209
+
210
+ if (index === -1) {
211
+ return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
212
+ }
213
+
214
+ const listLength = list.length;
215
+ index += shouldGetNext ? 1 : -1;
216
+
217
+ if (isCycleAllowed) {
218
+ index = (index + listLength) % listLength;
219
+ }
220
+
221
+ return list[Math.max(0, Math.min(index, listLength - 1))];
222
+ };
170
223
 
171
224
  /**
172
225
  * --------------------------------------------------------------------------
173
- * Bootstrap (v5.0.0): dropdown.js
226
+ * Bootstrap (v5.1.1): dropdown.js
174
227
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
175
228
  * --------------------------------------------------------------------------
176
229
  */
@@ -196,7 +249,6 @@
196
249
  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
197
250
  const EVENT_SHOW = `show${EVENT_KEY}`;
198
251
  const EVENT_SHOWN = `shown${EVENT_KEY}`;
199
- const EVENT_CLICK = `click${EVENT_KEY}`;
200
252
  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
201
253
  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;
202
254
  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;
@@ -244,8 +296,6 @@
244
296
  this._config = this._getConfig(config);
245
297
  this._menu = this._getMenuElement();
246
298
  this._inNavbar = this._detectNavbar();
247
-
248
- this._addEventListeners();
249
299
  } // Getters
250
300
 
251
301
 
@@ -257,32 +307,20 @@
257
307
  return DefaultType;
258
308
  }
259
309
 
260
- static get DATA_KEY() {
261
- return DATA_KEY;
310
+ static get NAME() {
311
+ return NAME;
262
312
  } // Public
263
313
 
264
314
 
265
315
  toggle() {
266
- if (isDisabled(this._element)) {
267
- return;
268
- }
269
-
270
- const isActive = this._element.classList.contains(CLASS_NAME_SHOW);
271
-
272
- if (isActive) {
273
- this.hide();
274
- return;
275
- }
276
-
277
- this.show();
316
+ return this._isShown() ? this.hide() : this.show();
278
317
  }
279
318
 
280
319
  show() {
281
- if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
320
+ if (isDisabled(this._element) || this._isShown(this._menu)) {
282
321
  return;
283
322
  }
284
323
 
285
- const parent = Dropdown.getParentFromElement(this._element);
286
324
  const relatedTarget = {
287
325
  relatedTarget: this._element
288
326
  };
@@ -290,38 +328,14 @@
290
328
 
291
329
  if (showEvent.defaultPrevented) {
292
330
  return;
293
- } // Totally disable Popper for Dropdowns in Navbar
331
+ }
294
332
 
333
+ const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
295
334
 
296
335
  if (this._inNavbar) {
297
336
  Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'none');
298
337
  } else {
299
- if (typeof Popper__namespace === 'undefined') {
300
- throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
301
- }
302
-
303
- let referenceElement = this._element;
304
-
305
- if (this._config.reference === 'parent') {
306
- referenceElement = parent;
307
- } else if (isElement(this._config.reference)) {
308
- referenceElement = this._config.reference; // Check if it's jQuery element
309
-
310
- if (typeof this._config.reference.jquery !== 'undefined') {
311
- referenceElement = this._config.reference[0];
312
- }
313
- } else if (typeof this._config.reference === 'object') {
314
- referenceElement = this._config.reference;
315
- }
316
-
317
- const popperConfig = this._getPopperConfig();
318
-
319
- const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
320
- this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
321
-
322
- if (isDisplayStatic) {
323
- Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
324
- }
338
+ this._createPopper(parent);
325
339
  } // If this is a touch-enabled device we add extra
326
340
  // empty mouseover listeners to the body's immediate children;
327
341
  // only needed because of broken event delegation on iOS
@@ -336,15 +350,15 @@
336
350
 
337
351
  this._element.setAttribute('aria-expanded', true);
338
352
 
339
- this._menu.classList.toggle(CLASS_NAME_SHOW);
353
+ this._menu.classList.add(CLASS_NAME_SHOW);
340
354
 
341
- this._element.classList.toggle(CLASS_NAME_SHOW);
355
+ this._element.classList.add(CLASS_NAME_SHOW);
342
356
 
343
357
  EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, relatedTarget);
344
358
  }
345
359
 
346
360
  hide() {
347
- if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
361
+ if (isDisabled(this._element) || !this._isShown(this._menu)) {
348
362
  return;
349
363
  }
350
364
 
@@ -356,12 +370,8 @@
356
370
  }
357
371
 
358
372
  dispose() {
359
- this._menu = null;
360
-
361
373
  if (this._popper) {
362
374
  this._popper.destroy();
363
-
364
- this._popper = null;
365
375
  }
366
376
 
367
377
  super.dispose();
@@ -376,13 +386,6 @@
376
386
  } // Private
377
387
 
378
388
 
379
- _addEventListeners() {
380
- EventHandler__default['default'].on(this._element, EVENT_CLICK, event => {
381
- event.preventDefault();
382
- this.toggle();
383
- });
384
- }
385
-
386
389
  _completeHide(relatedTarget) {
387
390
  const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE, relatedTarget);
388
391
 
@@ -425,6 +428,35 @@
425
428
  return config;
426
429
  }
427
430
 
431
+ _createPopper(parent) {
432
+ if (typeof Popper__namespace === 'undefined') {
433
+ throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
434
+ }
435
+
436
+ let referenceElement = this._element;
437
+
438
+ if (this._config.reference === 'parent') {
439
+ referenceElement = parent;
440
+ } else if (isElement(this._config.reference)) {
441
+ referenceElement = getElement(this._config.reference);
442
+ } else if (typeof this._config.reference === 'object') {
443
+ referenceElement = this._config.reference;
444
+ }
445
+
446
+ const popperConfig = this._getPopperConfig();
447
+
448
+ const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
449
+ this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
450
+
451
+ if (isDisplayStatic) {
452
+ Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
453
+ }
454
+ }
455
+
456
+ _isShown(element = this._element) {
457
+ return element.classList.contains(CLASS_NAME_SHOW);
458
+ }
459
+
428
460
  _getMenuElement() {
429
461
  return SelectorEngine__default['default'].next(this._element, SELECTOR_MENU)[0];
430
462
  }
@@ -498,75 +530,53 @@
498
530
  };
499
531
  }
500
532
 
501
- _selectMenuItem(event) {
533
+ _selectMenuItem({
534
+ key,
535
+ target
536
+ }) {
502
537
  const items = SelectorEngine__default['default'].find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);
503
538
 
504
539
  if (!items.length) {
505
540
  return;
506
- }
507
-
508
- let index = items.indexOf(event.target); // Up
509
-
510
- if (event.key === ARROW_UP_KEY && index > 0) {
511
- index--;
512
- } // Down
513
-
514
-
515
- if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
516
- index++;
517
- } // index is -1 if the first keydown is an ArrowUp
541
+ } // if target isn't included in items (e.g. when expanding the dropdown)
542
+ // allow cycling to get the last item in case key equals ARROW_UP_KEY
518
543
 
519
544
 
520
- index = index === -1 ? 0 : index;
521
- items[index].focus();
545
+ getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
522
546
  } // Static
523
547
 
524
548
 
525
- static dropdownInterface(element, config) {
526
- let data = Data__default['default'].get(element, DATA_KEY);
527
-
528
- const _config = typeof config === 'object' ? config : null;
549
+ static jQueryInterface(config) {
550
+ return this.each(function () {
551
+ const data = Dropdown.getOrCreateInstance(this, config);
529
552
 
530
- if (!data) {
531
- data = new Dropdown(element, _config);
532
- }
553
+ if (typeof config !== 'string') {
554
+ return;
555
+ }
533
556
 
534
- if (typeof config === 'string') {
535
557
  if (typeof data[config] === 'undefined') {
536
558
  throw new TypeError(`No method named "${config}"`);
537
559
  }
538
560
 
539
561
  data[config]();
540
- }
541
- }
542
-
543
- static jQueryInterface(config) {
544
- return this.each(function () {
545
- Dropdown.dropdownInterface(this, config);
546
562
  });
547
563
  }
548
564
 
549
565
  static clearMenus(event) {
550
- if (event) {
551
- if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
552
- return;
553
- }
554
-
555
- if (/input|select|option|textarea|form/i.test(event.target.tagName)) {
556
- return;
557
- }
566
+ if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
567
+ return;
558
568
  }
559
569
 
560
570
  const toggles = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
561
571
 
562
572
  for (let i = 0, len = toggles.length; i < len; i++) {
563
- const context = Data__default['default'].get(toggles[i], DATA_KEY);
573
+ const context = Dropdown.getInstance(toggles[i]);
564
574
 
565
575
  if (!context || context._config.autoClose === false) {
566
576
  continue;
567
577
  }
568
578
 
569
- if (!context._element.classList.contains(CLASS_NAME_SHOW)) {
579
+ if (!context._isShown()) {
570
580
  continue;
571
581
  }
572
582
 
@@ -580,10 +590,10 @@
580
590
 
581
591
  if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
582
592
  continue;
583
- } // Tab navigation through the dropdown menu shouldn't close the menu
593
+ } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
584
594
 
585
595
 
586
- if (event.type === 'keyup' && event.key === TAB_KEY && context._menu.contains(event.target)) {
596
+ if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
587
597
  continue;
588
598
  }
589
599
 
@@ -625,25 +635,27 @@
625
635
  return;
626
636
  }
627
637
 
628
- const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
638
+ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
639
+ const instance = Dropdown.getOrCreateInstance(getToggleButton);
629
640
 
630
641
  if (event.key === ESCAPE_KEY) {
631
- getToggleButton().focus();
632
- Dropdown.clearMenus();
642
+ instance.hide();
633
643
  return;
634
644
  }
635
645
 
636
- if (!isActive && (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY)) {
637
- getToggleButton().click();
646
+ if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
647
+ if (!isActive) {
648
+ instance.show();
649
+ }
650
+
651
+ instance._selectMenuItem(event);
652
+
638
653
  return;
639
654
  }
640
655
 
641
656
  if (!isActive || event.key === SPACE_KEY) {
642
657
  Dropdown.clearMenus();
643
- return;
644
658
  }
645
-
646
- Dropdown.getInstance(getToggleButton())._selectMenuItem(event);
647
659
  }
648
660
 
649
661
  }
@@ -660,7 +672,7 @@
660
672
  EventHandler__default['default'].on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
661
673
  EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
662
674
  event.preventDefault();
663
- Dropdown.dropdownInterface(this);
675
+ Dropdown.getOrCreateInstance(this).toggle();
664
676
  });
665
677
  /**
666
678
  * ------------------------------------------------------------------------
@@ -669,7 +681,7 @@
669
681
  * add .Dropdown to jQuery only if jQuery is present
670
682
  */
671
683
 
672
- defineJQueryPlugin(NAME, Dropdown);
684
+ defineJQueryPlugin(Dropdown);
673
685
 
674
686
  return Dropdown;
675
687