bootstrap 5.0.2 → 5.1.3

Sign up to get free protection for your applications and to get access to all the features.
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
+ }));