bootstrap 5.0.2 → 5.1.3

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/javascripts/bootstrap/alert.js +78 -48
  4. data/assets/javascripts/bootstrap/base-component.js +22 -17
  5. data/assets/javascripts/bootstrap/button.js +19 -12
  6. data/assets/javascripts/bootstrap/carousel.js +66 -44
  7. data/assets/javascripts/bootstrap/collapse.js +114 -131
  8. data/assets/javascripts/bootstrap/dom/data.js +5 -5
  9. data/assets/javascripts/bootstrap/dom/event-handler.js +11 -5
  10. data/assets/javascripts/bootstrap/dom/manipulator.js +6 -6
  11. data/assets/javascripts/bootstrap/dom/selector-engine.js +49 -7
  12. data/assets/javascripts/bootstrap/dropdown.js +96 -106
  13. data/assets/javascripts/bootstrap/modal.js +241 -87
  14. data/assets/javascripts/bootstrap/offcanvas.js +203 -57
  15. data/assets/javascripts/bootstrap/popover.js +25 -58
  16. data/assets/javascripts/bootstrap/scrollspy.js +47 -66
  17. data/assets/javascripts/bootstrap/tab.js +41 -22
  18. data/assets/javascripts/bootstrap/toast.js +124 -29
  19. data/assets/javascripts/bootstrap/tooltip.js +122 -104
  20. data/assets/javascripts/bootstrap-sprockets.js +7 -7
  21. data/assets/javascripts/bootstrap.js +660 -630
  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 +2 -1
  27. data/assets/stylesheets/bootstrap/_functions.scss +51 -12
  28. data/assets/stylesheets/bootstrap/_grid.scss +11 -0
  29. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  30. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  31. data/assets/stylesheets/bootstrap/_modal.scss +1 -11
  32. data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
  33. data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -0
  34. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  35. data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
  36. data/assets/stylesheets/bootstrap/_root.scss +40 -2
  37. data/assets/stylesheets/bootstrap/_tables.scss +8 -4
  38. data/assets/stylesheets/bootstrap/_toasts.scss +2 -2
  39. data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
  40. data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
  41. data/assets/stylesheets/bootstrap/_variables.scss +184 -11
  42. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
  43. data/assets/stylesheets/bootstrap/forms/_form-control.scss +1 -1
  44. data/assets/stylesheets/bootstrap/forms/_form-select.scss +2 -0
  45. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  46. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  47. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  48. data/assets/stylesheets/bootstrap/mixins/_grid.scss +29 -10
  49. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
  50. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +1 -1
  51. data/bootstrap.gemspec +3 -3
  52. data/lib/bootstrap/version.rb +2 -2
  53. data/tasks/updater/js.rb +6 -2
  54. metadata +12 -8
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap offcanvas.js v5.0.2 (https://getbootstrap.com/)
2
+ * Bootstrap offcanvas.js v5.1.3 (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
  */
@@ -7,15 +7,21 @@
7
7
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/manipulator.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
8
8
  typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/manipulator', './dom/event-handler', './base-component'], factory) :
9
9
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Offcanvas = factory(global.SelectorEngine, global.Manipulator, global.EventHandler, global.Base));
10
- }(this, (function (SelectorEngine, Manipulator, EventHandler, BaseComponent) { 'use strict';
10
+ })(this, (function (SelectorEngine, Manipulator, EventHandler, BaseComponent) { 'use strict';
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
- var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
- var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
17
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
14
+ const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
+ const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
17
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
18
 
19
+ /**
20
+ * --------------------------------------------------------------------------
21
+ * Bootstrap (v5.1.3): util/index.js
22
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23
+ * --------------------------------------------------------------------------
24
+ */
19
25
  const MILLISECONDS_MULTIPLIER = 1000;
20
26
  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
21
27
 
@@ -102,7 +108,7 @@
102
108
  }
103
109
 
104
110
  if (typeof obj === 'string' && obj.length > 0) {
105
- return SelectorEngine__default['default'].findOne(obj);
111
+ return document.querySelector(obj);
106
112
  }
107
113
 
108
114
  return null;
@@ -143,8 +149,20 @@
143
149
 
144
150
  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
145
151
  };
152
+ /**
153
+ * Trick to restart an element's animation
154
+ *
155
+ * @param {HTMLElement} element
156
+ * @return void
157
+ *
158
+ * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
159
+ */
160
+
146
161
 
147
- const reflow = element => element.offsetHeight;
162
+ const reflow = element => {
163
+ // eslint-disable-next-line no-unused-expressions
164
+ element.offsetHeight;
165
+ };
148
166
 
149
167
  const getjQuery = () => {
150
168
  const {
@@ -232,7 +250,7 @@
232
250
 
233
251
  /**
234
252
  * --------------------------------------------------------------------------
235
- * Bootstrap (v5.0.2): util/scrollBar.js
253
+ * Bootstrap (v5.1.3): util/scrollBar.js
236
254
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
237
255
  * --------------------------------------------------------------------------
238
256
  */
@@ -301,18 +319,18 @@
301
319
  const actualValue = element.style[styleProp];
302
320
 
303
321
  if (actualValue) {
304
- Manipulator__default['default'].setDataAttribute(element, styleProp, actualValue);
322
+ Manipulator__default.default.setDataAttribute(element, styleProp, actualValue);
305
323
  }
306
324
  }
307
325
 
308
326
  _resetElementAttributes(selector, styleProp) {
309
327
  const manipulationCallBack = element => {
310
- const value = Manipulator__default['default'].getDataAttribute(element, styleProp);
328
+ const value = Manipulator__default.default.getDataAttribute(element, styleProp);
311
329
 
312
330
  if (typeof value === 'undefined') {
313
331
  element.style.removeProperty(styleProp);
314
332
  } else {
315
- Manipulator__default['default'].removeDataAttribute(element, styleProp);
333
+ Manipulator__default.default.removeDataAttribute(element, styleProp);
316
334
  element.style[styleProp] = value;
317
335
  }
318
336
  };
@@ -324,7 +342,7 @@
324
342
  if (isElement(selector)) {
325
343
  callBack(selector);
326
344
  } else {
327
- SelectorEngine__default['default'].find(selector, this._element).forEach(callBack);
345
+ SelectorEngine__default.default.find(selector, this._element).forEach(callBack);
328
346
  }
329
347
  }
330
348
 
@@ -336,11 +354,12 @@
336
354
 
337
355
  /**
338
356
  * --------------------------------------------------------------------------
339
- * Bootstrap (v5.0.2): util/backdrop.js
340
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
357
+ * Bootstrap (v5.1.3): util/backdrop.js
358
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
341
359
  * --------------------------------------------------------------------------
342
360
  */
343
- const Default$1 = {
361
+ const Default$2 = {
362
+ className: 'modal-backdrop',
344
363
  isVisible: true,
345
364
  // if false, we use the backdrop helper without adding any element to the dom
346
365
  isAnimated: false,
@@ -348,17 +367,17 @@
348
367
  // give the choice to place backdrop under different elements
349
368
  clickCallback: null
350
369
  };
351
- const DefaultType$1 = {
370
+ const DefaultType$2 = {
371
+ className: 'string',
352
372
  isVisible: 'boolean',
353
373
  isAnimated: 'boolean',
354
374
  rootElement: '(element|string)',
355
375
  clickCallback: '(function|null)'
356
376
  };
357
- const NAME$1 = 'backdrop';
358
- const CLASS_NAME_BACKDROP = 'modal-backdrop';
377
+ const NAME$2 = 'backdrop';
359
378
  const CLASS_NAME_FADE = 'fade';
360
379
  const CLASS_NAME_SHOW$1 = 'show';
361
- const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$1}`;
380
+ const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$2}`;
362
381
 
363
382
  class Backdrop {
364
383
  constructor(config) {
@@ -404,7 +423,7 @@
404
423
  _getElement() {
405
424
  if (!this._element) {
406
425
  const backdrop = document.createElement('div');
407
- backdrop.className = CLASS_NAME_BACKDROP;
426
+ backdrop.className = this._config.className;
408
427
 
409
428
  if (this._config.isAnimated) {
410
429
  backdrop.classList.add(CLASS_NAME_FADE);
@@ -417,12 +436,12 @@
417
436
  }
418
437
 
419
438
  _getConfig(config) {
420
- config = { ...Default$1,
439
+ config = { ...Default$2,
421
440
  ...(typeof config === 'object' ? config : {})
422
441
  }; // use getElement() with the default "body" to get a fresh Element on each instantiation
423
442
 
424
443
  config.rootElement = getElement(config.rootElement);
425
- typeCheckConfig(NAME$1, config, DefaultType$1);
444
+ typeCheckConfig(NAME$2, config, DefaultType$2);
426
445
  return config;
427
446
  }
428
447
 
@@ -431,9 +450,9 @@
431
450
  return;
432
451
  }
433
452
 
434
- this._config.rootElement.appendChild(this._getElement());
453
+ this._config.rootElement.append(this._getElement());
435
454
 
436
- EventHandler__default['default'].on(this._getElement(), EVENT_MOUSEDOWN, () => {
455
+ EventHandler__default.default.on(this._getElement(), EVENT_MOUSEDOWN, () => {
437
456
  execute(this._config.clickCallback);
438
457
  });
439
458
  this._isAppended = true;
@@ -444,7 +463,7 @@
444
463
  return;
445
464
  }
446
465
 
447
- EventHandler__default['default'].off(this._element, EVENT_MOUSEDOWN);
466
+ EventHandler__default.default.off(this._element, EVENT_MOUSEDOWN);
448
467
 
449
468
  this._element.remove();
450
469
 
@@ -459,8 +478,137 @@
459
478
 
460
479
  /**
461
480
  * --------------------------------------------------------------------------
462
- * Bootstrap (v5.0.2): offcanvas.js
463
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
481
+ * Bootstrap (v5.1.3): util/focustrap.js
482
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
483
+ * --------------------------------------------------------------------------
484
+ */
485
+ const Default$1 = {
486
+ trapElement: null,
487
+ // The element to trap focus inside of
488
+ autofocus: true
489
+ };
490
+ const DefaultType$1 = {
491
+ trapElement: 'element',
492
+ autofocus: 'boolean'
493
+ };
494
+ const NAME$1 = 'focustrap';
495
+ const DATA_KEY$1 = 'bs.focustrap';
496
+ const EVENT_KEY$1 = `.${DATA_KEY$1}`;
497
+ const EVENT_FOCUSIN = `focusin${EVENT_KEY$1}`;
498
+ const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$1}`;
499
+ const TAB_KEY = 'Tab';
500
+ const TAB_NAV_FORWARD = 'forward';
501
+ const TAB_NAV_BACKWARD = 'backward';
502
+
503
+ class FocusTrap {
504
+ constructor(config) {
505
+ this._config = this._getConfig(config);
506
+ this._isActive = false;
507
+ this._lastTabNavDirection = null;
508
+ }
509
+
510
+ activate() {
511
+ const {
512
+ trapElement,
513
+ autofocus
514
+ } = this._config;
515
+
516
+ if (this._isActive) {
517
+ return;
518
+ }
519
+
520
+ if (autofocus) {
521
+ trapElement.focus();
522
+ }
523
+
524
+ EventHandler__default.default.off(document, EVENT_KEY$1); // guard against infinite focus loop
525
+
526
+ EventHandler__default.default.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event));
527
+ EventHandler__default.default.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
528
+ this._isActive = true;
529
+ }
530
+
531
+ deactivate() {
532
+ if (!this._isActive) {
533
+ return;
534
+ }
535
+
536
+ this._isActive = false;
537
+ EventHandler__default.default.off(document, EVENT_KEY$1);
538
+ } // Private
539
+
540
+
541
+ _handleFocusin(event) {
542
+ const {
543
+ target
544
+ } = event;
545
+ const {
546
+ trapElement
547
+ } = this._config;
548
+
549
+ if (target === document || target === trapElement || trapElement.contains(target)) {
550
+ return;
551
+ }
552
+
553
+ const elements = SelectorEngine__default.default.focusableChildren(trapElement);
554
+
555
+ if (elements.length === 0) {
556
+ trapElement.focus();
557
+ } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
558
+ elements[elements.length - 1].focus();
559
+ } else {
560
+ elements[0].focus();
561
+ }
562
+ }
563
+
564
+ _handleKeydown(event) {
565
+ if (event.key !== TAB_KEY) {
566
+ return;
567
+ }
568
+
569
+ this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
570
+ }
571
+
572
+ _getConfig(config) {
573
+ config = { ...Default$1,
574
+ ...(typeof config === 'object' ? config : {})
575
+ };
576
+ typeCheckConfig(NAME$1, config, DefaultType$1);
577
+ return config;
578
+ }
579
+
580
+ }
581
+
582
+ /**
583
+ * --------------------------------------------------------------------------
584
+ * Bootstrap (v5.1.3): util/component-functions.js
585
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
586
+ * --------------------------------------------------------------------------
587
+ */
588
+
589
+ const enableDismissTrigger = (component, method = 'hide') => {
590
+ const clickEvent = `click.dismiss${component.EVENT_KEY}`;
591
+ const name = component.NAME;
592
+ EventHandler__default.default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
593
+ if (['A', 'AREA'].includes(this.tagName)) {
594
+ event.preventDefault();
595
+ }
596
+
597
+ if (isDisabled(this)) {
598
+ return;
599
+ }
600
+
601
+ const target = getElementFromSelector(this) || this.closest(`.${name}`);
602
+ const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
603
+
604
+ instance[method]();
605
+ });
606
+ };
607
+
608
+ /**
609
+ * --------------------------------------------------------------------------
610
+ * Bootstrap (v5.1.3): offcanvas.js
611
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
464
612
  * --------------------------------------------------------------------------
465
613
  */
466
614
  /**
@@ -486,16 +634,14 @@
486
634
  scroll: 'boolean'
487
635
  };
488
636
  const CLASS_NAME_SHOW = 'show';
637
+ const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
489
638
  const OPEN_SELECTOR = '.offcanvas.show';
490
639
  const EVENT_SHOW = `show${EVENT_KEY}`;
491
640
  const EVENT_SHOWN = `shown${EVENT_KEY}`;
492
641
  const EVENT_HIDE = `hide${EVENT_KEY}`;
493
642
  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
494
- const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
495
643
  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
496
- const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
497
644
  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
498
- const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="offcanvas"]';
499
645
  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="offcanvas"]';
500
646
  /**
501
647
  * ------------------------------------------------------------------------
@@ -503,12 +649,13 @@
503
649
  * ------------------------------------------------------------------------
504
650
  */
505
651
 
506
- class Offcanvas extends BaseComponent__default['default'] {
652
+ class Offcanvas extends BaseComponent__default.default {
507
653
  constructor(element, config) {
508
654
  super(element);
509
655
  this._config = this._getConfig(config);
510
656
  this._isShown = false;
511
657
  this._backdrop = this._initializeBackDrop();
658
+ this._focustrap = this._initializeFocusTrap();
512
659
 
513
660
  this._addEventListeners();
514
661
  } // Getters
@@ -532,7 +679,7 @@
532
679
  return;
533
680
  }
534
681
 
535
- const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
682
+ const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
536
683
  relatedTarget
537
684
  });
538
685
 
@@ -547,8 +694,6 @@
547
694
 
548
695
  if (!this._config.scroll) {
549
696
  new ScrollBarHelper().hide();
550
-
551
- this._enforceFocusOnElement(this._element);
552
697
  }
553
698
 
554
699
  this._element.removeAttribute('aria-hidden');
@@ -560,7 +705,11 @@
560
705
  this._element.classList.add(CLASS_NAME_SHOW);
561
706
 
562
707
  const completeCallBack = () => {
563
- EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
708
+ if (!this._config.scroll) {
709
+ this._focustrap.activate();
710
+ }
711
+
712
+ EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
564
713
  relatedTarget
565
714
  });
566
715
  };
@@ -573,13 +722,13 @@
573
722
  return;
574
723
  }
575
724
 
576
- const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
725
+ const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
577
726
 
578
727
  if (hideEvent.defaultPrevented) {
579
728
  return;
580
729
  }
581
730
 
582
- EventHandler__default['default'].off(document, EVENT_FOCUSIN);
731
+ this._focustrap.deactivate();
583
732
 
584
733
  this._element.blur();
585
734
 
@@ -602,7 +751,7 @@
602
751
  new ScrollBarHelper().reset();
603
752
  }
604
753
 
605
- EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
754
+ EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
606
755
  };
607
756
 
608
757
  this._queueCallback(completeCallback, this._element, true);
@@ -611,14 +760,15 @@
611
760
  dispose() {
612
761
  this._backdrop.dispose();
613
762
 
763
+ this._focustrap.deactivate();
764
+
614
765
  super.dispose();
615
- EventHandler__default['default'].off(document, EVENT_FOCUSIN);
616
766
  } // Private
617
767
 
618
768
 
619
769
  _getConfig(config) {
620
770
  config = { ...Default,
621
- ...Manipulator__default['default'].getDataAttributes(this._element),
771
+ ...Manipulator__default.default.getDataAttributes(this._element),
622
772
  ...(typeof config === 'object' ? config : {})
623
773
  };
624
774
  typeCheckConfig(NAME, config, DefaultType);
@@ -627,6 +777,7 @@
627
777
 
628
778
  _initializeBackDrop() {
629
779
  return new Backdrop({
780
+ className: CLASS_NAME_BACKDROP,
630
781
  isVisible: this._config.backdrop,
631
782
  isAnimated: true,
632
783
  rootElement: this._element.parentNode,
@@ -634,20 +785,14 @@
634
785
  });
635
786
  }
636
787
 
637
- _enforceFocusOnElement(element) {
638
- EventHandler__default['default'].off(document, EVENT_FOCUSIN); // guard against infinite focus loop
639
-
640
- EventHandler__default['default'].on(document, EVENT_FOCUSIN, event => {
641
- if (document !== event.target && element !== event.target && !element.contains(event.target)) {
642
- element.focus();
643
- }
788
+ _initializeFocusTrap() {
789
+ return new FocusTrap({
790
+ trapElement: this._element
644
791
  });
645
- element.focus();
646
792
  }
647
793
 
648
794
  _addEventListeners() {
649
- EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());
650
- EventHandler__default['default'].on(this._element, EVENT_KEYDOWN_DISMISS, event => {
795
+ EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
651
796
  if (this._config.keyboard && event.key === ESCAPE_KEY) {
652
797
  this.hide();
653
798
  }
@@ -679,7 +824,7 @@
679
824
  */
680
825
 
681
826
 
682
- EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
827
+ EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
683
828
  const target = getElementFromSelector(this);
684
829
 
685
830
  if (['A', 'AREA'].includes(this.tagName)) {
@@ -690,14 +835,14 @@
690
835
  return;
691
836
  }
692
837
 
693
- EventHandler__default['default'].one(target, EVENT_HIDDEN, () => {
838
+ EventHandler__default.default.one(target, EVENT_HIDDEN, () => {
694
839
  // focus on trigger when it is closed
695
840
  if (isVisible(this)) {
696
841
  this.focus();
697
842
  }
698
843
  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open
699
844
 
700
- const allReadyOpen = SelectorEngine__default['default'].findOne(OPEN_SELECTOR);
845
+ const allReadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
701
846
 
702
847
  if (allReadyOpen && allReadyOpen !== target) {
703
848
  Offcanvas.getInstance(allReadyOpen).hide();
@@ -706,7 +851,8 @@
706
851
  const data = Offcanvas.getOrCreateInstance(target);
707
852
  data.toggle(this);
708
853
  });
709
- EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => SelectorEngine__default['default'].find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
854
+ EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => SelectorEngine__default.default.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
855
+ enableDismissTrigger(Offcanvas);
710
856
  /**
711
857
  * ------------------------------------------------------------------------
712
858
  * jQuery
@@ -717,4 +863,4 @@
717
863
 
718
864
  return Offcanvas;
719
865
 
720
- })));
866
+ }));
@@ -1,18 +1,24 @@
1
1
  /*!
2
- * Bootstrap popover.js v5.0.2 (https://getbootstrap.com/)
2
+ * Bootstrap popover.js v5.1.3 (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('./dom/selector-engine.js'), require('./tooltip.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './tooltip'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.SelectorEngine, global.Tooltip));
10
- }(this, (function (SelectorEngine, Tooltip) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./tooltip.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./tooltip'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Tooltip));
10
+ })(this, (function (Tooltip) { 'use strict';
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
- var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
- var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
14
+ const Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
15
+
16
+ /**
17
+ * --------------------------------------------------------------------------
18
+ * Bootstrap (v5.1.3): util/index.js
19
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
20
+ * --------------------------------------------------------------------------
21
+ */
16
22
 
17
23
  const getjQuery = () => {
18
24
  const {
@@ -64,7 +70,7 @@
64
70
 
65
71
  /**
66
72
  * --------------------------------------------------------------------------
67
- * Bootstrap (v5.0.2): popover.js
73
+ * Bootstrap (v5.1.3): popover.js
68
74
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
69
75
  * --------------------------------------------------------------------------
70
76
  */
@@ -78,15 +84,14 @@
78
84
  const DATA_KEY = 'bs.popover';
79
85
  const EVENT_KEY = `.${DATA_KEY}`;
80
86
  const CLASS_PREFIX = 'bs-popover';
81
- const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
82
- const Default = { ...Tooltip__default['default'].Default,
87
+ const Default = { ...Tooltip__default.default.Default,
83
88
  placement: 'right',
84
89
  offset: [0, 8],
85
90
  trigger: 'click',
86
91
  content: '',
87
92
  template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
88
93
  };
89
- const DefaultType = { ...Tooltip__default['default'].DefaultType,
94
+ const DefaultType = { ...Tooltip__default.default.DefaultType,
90
95
  content: '(string|element|function)'
91
96
  };
92
97
  const Event = {
@@ -101,8 +106,6 @@
101
106
  MOUSEENTER: `mouseenter${EVENT_KEY}`,
102
107
  MOUSELEAVE: `mouseleave${EVENT_KEY}`
103
108
  };
104
- const CLASS_NAME_FADE = 'fade';
105
- const CLASS_NAME_SHOW = 'show';
106
109
  const SELECTOR_TITLE = '.popover-header';
107
110
  const SELECTOR_CONTENT = '.popover-body';
108
111
  /**
@@ -111,7 +114,7 @@
111
114
  * ------------------------------------------------------------------------
112
115
  */
113
116
 
114
- class Popover extends Tooltip__default['default'] {
117
+ class Popover extends Tooltip__default.default {
115
118
  // Getters
116
119
  static get Default() {
117
120
  return Default;
@@ -134,55 +137,19 @@
134
137
  return this.getTitle() || this._getContent();
135
138
  }
136
139
 
137
- getTipElement() {
138
- if (this.tip) {
139
- return this.tip;
140
- }
141
-
142
- this.tip = super.getTipElement();
143
-
144
- if (!this.getTitle()) {
145
- SelectorEngine__default['default'].findOne(SELECTOR_TITLE, this.tip).remove();
146
- }
147
-
148
- if (!this._getContent()) {
149
- SelectorEngine__default['default'].findOne(SELECTOR_CONTENT, this.tip).remove();
150
- }
140
+ setContent(tip) {
141
+ this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
151
142
 
152
- return this.tip;
153
- }
154
-
155
- setContent() {
156
- const tip = this.getTipElement(); // we use append for html objects to maintain js events
157
-
158
- this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TITLE, tip), this.getTitle());
159
-
160
- let content = this._getContent();
161
-
162
- if (typeof content === 'function') {
163
- content = content.call(this._element);
164
- }
165
-
166
- this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_CONTENT, tip), content);
167
- tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
143
+ this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
168
144
  } // Private
169
145
 
170
146
 
171
- _addAttachmentClass(attachment) {
172
- this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
173
- }
174
-
175
147
  _getContent() {
176
- return this._element.getAttribute('data-bs-content') || this._config.content;
148
+ return this._resolvePossibleFunction(this._config.content);
177
149
  }
178
150
 
179
- _cleanTipClass() {
180
- const tip = this.getTipElement();
181
- const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
182
-
183
- if (tabClass !== null && tabClass.length > 0) {
184
- tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
185
- }
151
+ _getBasicClassPrefix() {
152
+ return CLASS_PREFIX;
186
153
  } // Static
187
154
 
188
155
 
@@ -213,4 +180,4 @@
213
180
 
214
181
  return Popover;
215
182
 
216
- })));
183
+ }));