Passed
Push — master ( e95921...ddbd1b )
by Dimas
13:28 queued 05:15
created

assets/mdb-dashboard/js/bootstrap.js   F

Complexity

Total Complexity 704
Complexity/F 2.19

Size

Lines of Code 4429
Function Count 321

Duplication

Duplicated Lines 18
Ratio 0.41 %

Importance

Changes 0
Metric Value
eloc 2520
dl 18
loc 4429
rs 0.8
c 0
b 0
f 0
wmc 704
mnd 383
bc 383
fnc 321
bpm 1.1931
cpm 2.1931
noi 11

How to fix   Duplicated Code    Complexity   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

Complexity

 Tip:   Before tackling complexity, make sure that you eliminate any duplication first. This often can reduce the size of classes significantly.

Complex classes like assets/mdb-dashboard/js/bootstrap.js often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
/*!
2
  * Bootstrap v4.3.1 (https://getbootstrap.com/)
3
  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
(function (global, factory) {
7
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
8
  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
9
  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
10
}(this, function (exports, $, Popper) { 'use strict';
11
12
  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
14
15
  function _defineProperties(target, props) {
16
    for (var i = 0; i < props.length; i++) {
17
      var descriptor = props[i];
18
      descriptor.enumerable = descriptor.enumerable || false;
19
      descriptor.configurable = true;
20
      if ("value" in descriptor) descriptor.writable = true;
21
      Object.defineProperty(target, descriptor.key, descriptor);
22
    }
23
  }
24
25
  function _createClass(Constructor, protoProps, staticProps) {
26
    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
    if (staticProps) _defineProperties(Constructor, staticProps);
28
    return Constructor;
29
  }
30
31
  function _defineProperty(obj, key, value) {
32
    if (key in obj) {
33
      Object.defineProperty(obj, key, {
34
        value: value,
35
        enumerable: true,
36
        configurable: true,
37
        writable: true
38
      });
39
    } else {
40
      obj[key] = value;
41
    }
42
43
    return obj;
44
  }
45
46
  function _objectSpread(target) {
47
    for (var i = 1; i < arguments.length; i++) {
48
      var source = arguments[i] != null ? arguments[i] : {};
49
      var ownKeys = Object.keys(source);
50
51
      if (typeof Object.getOwnPropertySymbols === 'function') {
52
        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
53
          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
54
        }));
55
      }
56
57
      ownKeys.forEach(function (key) {
58
        _defineProperty(target, key, source[key]);
59
      });
60
    }
61
62
    return target;
63
  }
64
65
  function _inheritsLoose(subClass, superClass) {
66
    subClass.prototype = Object.create(superClass.prototype);
67
    subClass.prototype.constructor = subClass;
68
    subClass.__proto__ = superClass;
69
  }
70
71
  /**
72
   * --------------------------------------------------------------------------
73
   * Bootstrap (v4.3.1): util.js
74
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
75
   * --------------------------------------------------------------------------
76
   */
77
  /**
78
   * ------------------------------------------------------------------------
79
   * Private TransitionEnd Helpers
80
   * ------------------------------------------------------------------------
81
   */
82
83
  var TRANSITION_END = 'transitionend';
84
  var MAX_UID = 1000000;
85
  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
86
87
  function toType(obj) {
88
    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
89
  }
90
91
  function getSpecialTransitionEndEvent() {
92
    return {
93
      bindType: TRANSITION_END,
94
      delegateType: TRANSITION_END,
95
      handle: function handle(event) {
96
        if ($(event.target).is(this)) {
97
          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
98
        }
99
100
        return undefined; // eslint-disable-line no-undefined
101
      }
102
    };
103
  }
104
105
  function transitionEndEmulator(duration) {
106
    var _this = this;
107
108
    var called = false;
109
    $(this).one(Util.TRANSITION_END, function () {
110
      called = true;
111
    });
112
    setTimeout(function () {
113
      if (!called) {
114
        Util.triggerTransitionEnd(_this);
115
      }
116
    }, duration);
117
    return this;
118
  }
119
120
  function setTransitionEndSupport() {
121
    $.fn.emulateTransitionEnd = transitionEndEmulator;
122
    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
123
  }
124
  /**
125
   * --------------------------------------------------------------------------
126
   * Public Util Api
127
   * --------------------------------------------------------------------------
128
   */
129
130
131
  var Util = {
132
    TRANSITION_END: 'bsTransitionEnd',
133
    getUID: function getUID(prefix) {
134
      do {
135
        // eslint-disable-next-line no-bitwise
136
        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
137
      } while (document.getElementById(prefix));
138
139
      return prefix;
140
    },
141
    getSelectorFromElement: function getSelectorFromElement(element) {
142
      var selector = element.getAttribute('data-target');
143
144
      if (!selector || selector === '#') {
145
        var hrefAttr = element.getAttribute('href');
146
        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
147
      }
148
149
      try {
150
        return document.querySelector(selector) ? selector : null;
151
      } catch (err) {
152
        return null;
153
      }
154
    },
155
    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
156
      if (!element) {
157
        return 0;
158
      } // Get transition-duration of the element
159
160
161
      var transitionDuration = $(element).css('transition-duration');
162
      var transitionDelay = $(element).css('transition-delay');
163
      var floatTransitionDuration = parseFloat(transitionDuration);
164
      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
165
166
      if (!floatTransitionDuration && !floatTransitionDelay) {
167
        return 0;
168
      } // If multiple durations are defined, take the first
169
170
171
      transitionDuration = transitionDuration.split(',')[0];
172
      transitionDelay = transitionDelay.split(',')[0];
173
      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
174
    },
175
    reflow: function reflow(element) {
176
      return element.offsetHeight;
177
    },
178
    triggerTransitionEnd: function triggerTransitionEnd(element) {
179
      $(element).trigger(TRANSITION_END);
180
    },
181
    // TODO: Remove in v5
182
    supportsTransitionEnd: function supportsTransitionEnd() {
183
      return Boolean(TRANSITION_END);
184
    },
185
    isElement: function isElement(obj) {
186
      return (obj[0] || obj).nodeType;
187
    },
188
    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
189
      for (var property in configTypes) {
190
        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
191
          var expectedTypes = configTypes[property];
192
          var value = config[property];
193
          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
194
195
          if (!new RegExp(expectedTypes).test(valueType)) {
196
            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
197
          }
198
        }
199
      }
200
    },
201
    findShadowRoot: function findShadowRoot(element) {
202
      if (!document.documentElement.attachShadow) {
203
        return null;
204
      } // Can find the shadow root otherwise it'll return the document
205
206
207
      if (typeof element.getRootNode === 'function') {
208
        var root = element.getRootNode();
209
        return root instanceof ShadowRoot ? root : null;
210
      }
211
212
      if (element instanceof ShadowRoot) {
213
        return element;
214
      } // when we don't find a shadow root
215
216
217
      if (!element.parentNode) {
218
        return null;
219
      }
220
221
      return Util.findShadowRoot(element.parentNode);
222
    }
223
  };
224
  setTransitionEndSupport();
225
226
  /**
227
   * ------------------------------------------------------------------------
228
   * Constants
229
   * ------------------------------------------------------------------------
230
   */
231
232
  var NAME = 'alert';
233
  var VERSION = '4.3.1';
234
  var DATA_KEY = 'bs.alert';
235
  var EVENT_KEY = "." + DATA_KEY;
236
  var DATA_API_KEY = '.data-api';
237
  var JQUERY_NO_CONFLICT = $.fn[NAME];
238
  var Selector = {
239
    DISMISS: '[data-dismiss="alert"]'
240
  };
241
  var Event = {
242
    CLOSE: "close" + EVENT_KEY,
243
    CLOSED: "closed" + EVENT_KEY,
244
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
245
  };
246
  var ClassName = {
247
    ALERT: 'alert',
248
    FADE: 'fade',
249
    SHOW: 'show'
250
    /**
251
     * ------------------------------------------------------------------------
252
     * Class Definition
253
     * ------------------------------------------------------------------------
254
     */
255
256
  };
257
258
  var Alert =
259
  /*#__PURE__*/
260
  function () {
261
    function Alert(element) {
262
      this._element = element;
263
    } // Getters
264
265
266
    var _proto = Alert.prototype;
267
268
    // Public
269
    _proto.close = function close(element) {
270
      var rootElement = this._element;
271
272
      if (element) {
273
        rootElement = this._getRootElement(element);
274
      }
275
276
      var customEvent = this._triggerCloseEvent(rootElement);
277
278
      if (customEvent.isDefaultPrevented()) {
279
        return;
280
      }
281
282
      this._removeElement(rootElement);
283
    };
284
285
    _proto.dispose = function dispose() {
286
      $.removeData(this._element, DATA_KEY);
287
      this._element = null;
288
    } // Private
289
    ;
290
291
    _proto._getRootElement = function _getRootElement(element) {
292
      var selector = Util.getSelectorFromElement(element);
293
      var parent = false;
294
295
      if (selector) {
296
        parent = document.querySelector(selector);
297
      }
298
299
      if (!parent) {
300
        parent = $(element).closest("." + ClassName.ALERT)[0];
301
      }
302
303
      return parent;
304
    };
305
306
    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
307
      var closeEvent = $.Event(Event.CLOSE);
308
      $(element).trigger(closeEvent);
309
      return closeEvent;
310
    };
311
312
    _proto._removeElement = function _removeElement(element) {
313
      var _this = this;
314
315
      $(element).removeClass(ClassName.SHOW);
316
317
      if (!$(element).hasClass(ClassName.FADE)) {
318
        this._destroyElement(element);
319
320
        return;
321
      }
322
323
      var transitionDuration = Util.getTransitionDurationFromElement(element);
324
      $(element).one(Util.TRANSITION_END, function (event) {
325
        return _this._destroyElement(element, event);
326
      }).emulateTransitionEnd(transitionDuration);
327
    };
328
329
    _proto._destroyElement = function _destroyElement(element) {
330
      $(element).detach().trigger(Event.CLOSED).remove();
331
    } // Static
332
    ;
333
334
    Alert._jQueryInterface = function _jQueryInterface(config) {
335
      return this.each(function () {
336
        var $element = $(this);
337
        var data = $element.data(DATA_KEY);
338
339
        if (!data) {
340
          data = new Alert(this);
341
          $element.data(DATA_KEY, data);
342
        }
343
344
        if (config === 'close') {
345
          data[config](this);
346
        }
347
      });
348
    };
349
350
    Alert._handleDismiss = function _handleDismiss(alertInstance) {
351
      return function (event) {
352
        if (event) {
353
          event.preventDefault();
354
        }
355
356
        alertInstance.close(this);
357
      };
358
    };
359
360
    _createClass(Alert, null, [{
361
      key: "VERSION",
362
      get: function get() {
363
        return VERSION;
364
      }
365
    }]);
366
367
    return Alert;
368
  }();
369
  /**
370
   * ------------------------------------------------------------------------
371
   * Data Api implementation
372
   * ------------------------------------------------------------------------
373
   */
374
375
376
  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
377
  /**
378
   * ------------------------------------------------------------------------
379
   * jQuery
380
   * ------------------------------------------------------------------------
381
   */
382
383
  $.fn[NAME] = Alert._jQueryInterface;
384
  $.fn[NAME].Constructor = Alert;
385
386
  $.fn[NAME].noConflict = function () {
387
    $.fn[NAME] = JQUERY_NO_CONFLICT;
388
    return Alert._jQueryInterface;
389
  };
390
391
  /**
392
   * ------------------------------------------------------------------------
393
   * Constants
394
   * ------------------------------------------------------------------------
395
   */
396
397
  var NAME$1 = 'button';
398
  var VERSION$1 = '4.3.1';
399
  var DATA_KEY$1 = 'bs.button';
400
  var EVENT_KEY$1 = "." + DATA_KEY$1;
401
  var DATA_API_KEY$1 = '.data-api';
402
  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
403
  var ClassName$1 = {
404
    ACTIVE: 'active',
405
    BUTTON: 'btn',
406
    FOCUS: 'focus'
407
  };
408
  var Selector$1 = {
409
    DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
410
    DATA_TOGGLE: '[data-toggle="buttons"]',
411
    INPUT: 'input:not([type="hidden"])',
412
    ACTIVE: '.active',
413
    BUTTON: '.btn'
414
  };
415
  var Event$1 = {
416
    CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1,
417
    FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1)
418
    /**
419
     * ------------------------------------------------------------------------
420
     * Class Definition
421
     * ------------------------------------------------------------------------
422
     */
423
424
  };
425
426
  var Button =
427
  /*#__PURE__*/
428
  function () {
429
    function Button(element) {
430
      this._element = element;
431
    } // Getters
432
433
434
    var _proto = Button.prototype;
435
436
    // Public
437
    _proto.toggle = function toggle() {
438
      var triggerChangeEvent = true;
439
      var addAriaPressed = true;
440
      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];
441
442
      if (rootElement) {
443
        var input = this._element.querySelector(Selector$1.INPUT);
444
445
        if (input) {
446
          if (input.type === 'radio') {
447
            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {
448
              triggerChangeEvent = false;
449
            } else {
450
              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);
451
452
              if (activeElement) {
453
                $(activeElement).removeClass(ClassName$1.ACTIVE);
454
              }
455
            }
456
          }
457
458
          if (triggerChangeEvent) {
459
            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
460
              return;
461
            }
462
463
            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);
464
            $(input).trigger('change');
465
          }
466
467
          input.focus();
468
          addAriaPressed = false;
469
        }
470
      }
471
472
      if (addAriaPressed) {
473
        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));
474
      }
475
476
      if (triggerChangeEvent) {
477
        $(this._element).toggleClass(ClassName$1.ACTIVE);
478
      }
479
    };
480
481
    _proto.dispose = function dispose() {
482
      $.removeData(this._element, DATA_KEY$1);
483
      this._element = null;
484
    } // Static
485
    ;
486
487
    Button._jQueryInterface = function _jQueryInterface(config) {
488
      return this.each(function () {
489
        var data = $(this).data(DATA_KEY$1);
490
491
        if (!data) {
492
          data = new Button(this);
493
          $(this).data(DATA_KEY$1, data);
494
        }
495
496
        if (config === 'toggle') {
497
          data[config]();
498
        }
499
      });
500
    };
501
502
    _createClass(Button, null, [{
503
      key: "VERSION",
504
      get: function get() {
505
        return VERSION$1;
506
      }
507
    }]);
508
509
    return Button;
510
  }();
511
  /**
512
   * ------------------------------------------------------------------------
513
   * Data Api implementation
514
   * ------------------------------------------------------------------------
515
   */
516
517
518
  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
519
    event.preventDefault();
520
    var button = event.target;
521
522
    if (!$(button).hasClass(ClassName$1.BUTTON)) {
523
      button = $(button).closest(Selector$1.BUTTON);
524
    }
525
526
    Button._jQueryInterface.call($(button), 'toggle');
527
  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
528
    var button = $(event.target).closest(Selector$1.BUTTON)[0];
529
    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));
530
  });
531
  /**
532
   * ------------------------------------------------------------------------
533
   * jQuery
534
   * ------------------------------------------------------------------------
535
   */
536
537
  $.fn[NAME$1] = Button._jQueryInterface;
538
  $.fn[NAME$1].Constructor = Button;
539
540
  $.fn[NAME$1].noConflict = function () {
541
    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;
542
    return Button._jQueryInterface;
543
  };
544
545
  /**
546
   * ------------------------------------------------------------------------
547
   * Constants
548
   * ------------------------------------------------------------------------
549
   */
550
551
  var NAME$2 = 'carousel';
552
  var VERSION$2 = '4.3.1';
553
  var DATA_KEY$2 = 'bs.carousel';
554
  var EVENT_KEY$2 = "." + DATA_KEY$2;
555
  var DATA_API_KEY$2 = '.data-api';
556
  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];
557
  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
558
559
  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
560
561
  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
562
563
  var SWIPE_THRESHOLD = 40;
564
  var Default = {
565
    interval: 5000,
566
    keyboard: true,
567
    slide: false,
568
    pause: 'hover',
569
    wrap: true,
570
    touch: true
571
  };
572
  var DefaultType = {
573
    interval: '(number|boolean)',
574
    keyboard: 'boolean',
575
    slide: '(boolean|string)',
576
    pause: '(string|boolean)',
577
    wrap: 'boolean',
578
    touch: 'boolean'
579
  };
580
  var Direction = {
581
    NEXT: 'next',
582
    PREV: 'prev',
583
    LEFT: 'left',
584
    RIGHT: 'right'
585
  };
586
  var Event$2 = {
587
    SLIDE: "slide" + EVENT_KEY$2,
588
    SLID: "slid" + EVENT_KEY$2,
589
    KEYDOWN: "keydown" + EVENT_KEY$2,
590
    MOUSEENTER: "mouseenter" + EVENT_KEY$2,
591
    MOUSELEAVE: "mouseleave" + EVENT_KEY$2,
592
    TOUCHSTART: "touchstart" + EVENT_KEY$2,
593
    TOUCHMOVE: "touchmove" + EVENT_KEY$2,
594
    TOUCHEND: "touchend" + EVENT_KEY$2,
595
    POINTERDOWN: "pointerdown" + EVENT_KEY$2,
596
    POINTERUP: "pointerup" + EVENT_KEY$2,
597
    DRAG_START: "dragstart" + EVENT_KEY$2,
598
    LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2,
599
    CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2
600
  };
601
  var ClassName$2 = {
602
    CAROUSEL: 'carousel',
603
    ACTIVE: 'active',
604
    SLIDE: 'slide',
605
    RIGHT: 'carousel-item-right',
606
    LEFT: 'carousel-item-left',
607
    NEXT: 'carousel-item-next',
608
    PREV: 'carousel-item-prev',
609
    ITEM: 'carousel-item',
610
    POINTER_EVENT: 'pointer-event'
611
  };
612
  var Selector$2 = {
613
    ACTIVE: '.active',
614
    ACTIVE_ITEM: '.active.carousel-item',
615
    ITEM: '.carousel-item',
616
    ITEM_IMG: '.carousel-item img',
617
    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
618
    INDICATORS: '.carousel-indicators',
619
    DATA_SLIDE: '[data-slide], [data-slide-to]',
620
    DATA_RIDE: '[data-ride="carousel"]'
621
  };
622
  var PointerType = {
623
    TOUCH: 'touch',
624
    PEN: 'pen'
625
    /**
626
     * ------------------------------------------------------------------------
627
     * Class Definition
628
     * ------------------------------------------------------------------------
629
     */
630
631
  };
632
633
  var Carousel =
634
  /*#__PURE__*/
635
  function () {
636
    function Carousel(element, config) {
637
      this._items = null;
638
      this._interval = null;
639
      this._activeElement = null;
640
      this._isPaused = false;
641
      this._isSliding = false;
642
      this.touchTimeout = null;
643
      this.touchStartX = 0;
644
      this.touchDeltaX = 0;
645
      this._config = this._getConfig(config);
646
      this._element = element;
647
      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);
648
      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
649
      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
650
651
      this._addEventListeners();
652
    } // Getters
653
654
655
    var _proto = Carousel.prototype;
656
657
    // Public
658
    _proto.next = function next() {
659
      if (!this._isSliding) {
660
        this._slide(Direction.NEXT);
661
      }
662
    };
663
664
    _proto.nextWhenVisible = function nextWhenVisible() {
665
      // Don't call next when the page isn't visible
666
      // or the carousel or its parent isn't visible
667
      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {
668
        this.next();
669
      }
670
    };
671
672
    _proto.prev = function prev() {
673
      if (!this._isSliding) {
674
        this._slide(Direction.PREV);
675
      }
676
    };
677
678
    _proto.pause = function pause(event) {
679
      if (!event) {
680
        this._isPaused = true;
681
      }
682
683
      if (this._element.querySelector(Selector$2.NEXT_PREV)) {
684
        Util.triggerTransitionEnd(this._element);
685
        this.cycle(true);
686
      }
687
688
      clearInterval(this._interval);
689
      this._interval = null;
690
    };
691
692
    _proto.cycle = function cycle(event) {
693
      if (!event) {
694
        this._isPaused = false;
695
      }
696
697
      if (this._interval) {
698
        clearInterval(this._interval);
699
        this._interval = null;
700
      }
701
702
      if (this._config.interval && !this._isPaused) {
703
        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
704
      }
705
    };
706
707
    _proto.to = function to(index) {
708
      var _this = this;
709
710
      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
711
712
      var activeIndex = this._getItemIndex(this._activeElement);
713
714
      if (index > this._items.length - 1 || index < 0) {
715
        return;
716
      }
717
718
      if (this._isSliding) {
719
        $(this._element).one(Event$2.SLID, function () {
720
          return _this.to(index);
721
        });
722
        return;
723
      }
724
725
      if (activeIndex === index) {
726
        this.pause();
727
        this.cycle();
728
        return;
729
      }
730
731
      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
732
733
      this._slide(direction, this._items[index]);
734
    };
735
736
    _proto.dispose = function dispose() {
737
      $(this._element).off(EVENT_KEY$2);
738
      $.removeData(this._element, DATA_KEY$2);
739
      this._items = null;
740
      this._config = null;
741
      this._element = null;
742
      this._interval = null;
743
      this._isPaused = null;
744
      this._isSliding = null;
745
      this._activeElement = null;
746
      this._indicatorsElement = null;
747
    } // Private
748
    ;
749
750
    _proto._getConfig = function _getConfig(config) {
751
      config = _objectSpread({}, Default, config);
752
      Util.typeCheckConfig(NAME$2, config, DefaultType);
753
      return config;
754
    };
755
756
    _proto._handleSwipe = function _handleSwipe() {
757
      var absDeltax = Math.abs(this.touchDeltaX);
758
759
      if (absDeltax <= SWIPE_THRESHOLD) {
760
        return;
761
      }
762
763
      var direction = absDeltax / this.touchDeltaX; // swipe left
764
765
      if (direction > 0) {
766
        this.prev();
767
      } // swipe right
768
769
770
      if (direction < 0) {
771
        this.next();
772
      }
773
    };
774
775
    _proto._addEventListeners = function _addEventListeners() {
776
      var _this2 = this;
777
778
      if (this._config.keyboard) {
779
        $(this._element).on(Event$2.KEYDOWN, function (event) {
780
          return _this2._keydown(event);
781
        });
782
      }
783
784
      if (this._config.pause === 'hover') {
785
        $(this._element).on(Event$2.MOUSEENTER, function (event) {
786
          return _this2.pause(event);
787
        }).on(Event$2.MOUSELEAVE, function (event) {
788
          return _this2.cycle(event);
789
        });
790
      }
791
792
      if (this._config.touch) {
793
        this._addTouchEventListeners();
794
      }
795
    };
796
797
    _proto._addTouchEventListeners = function _addTouchEventListeners() {
798
      var _this3 = this;
799
800
      if (!this._touchSupported) {
801
        return;
802
      }
803
804
      var start = function start(event) {
805
        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
806
          _this3.touchStartX = event.originalEvent.clientX;
807
        } else if (!_this3._pointerEvent) {
808
          _this3.touchStartX = event.originalEvent.touches[0].clientX;
809
        }
810
      };
811
812
      var move = function move(event) {
813
        // ensure swiping with one touch and not pinching
814
        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
815
          _this3.touchDeltaX = 0;
816
        } else {
817
          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;
818
        }
819
      };
820
821
      var end = function end(event) {
822
        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
823
          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
824
        }
825
826
        _this3._handleSwipe();
827
828
        if (_this3._config.pause === 'hover') {
829
          // If it's a touch-enabled device, mouseenter/leave are fired as
830
          // part of the mouse compatibility events on first tap - the carousel
831
          // would stop cycling until user tapped out of it;
832
          // here, we listen for touchend, explicitly pause the carousel
833
          // (as if it's the second time we tap on it, mouseenter compat event
834
          // is NOT fired) and after a timeout (to allow for mouse compatibility
835
          // events to fire) we explicitly restart cycling
836
          _this3.pause();
837
838
          if (_this3.touchTimeout) {
839
            clearTimeout(_this3.touchTimeout);
840
          }
841
842
          _this3.touchTimeout = setTimeout(function (event) {
843
            return _this3.cycle(event);
844
          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
845
        }
846
      };
847
848
      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {
849
        return e.preventDefault();
850
      });
851
852
      if (this._pointerEvent) {
853
        $(this._element).on(Event$2.POINTERDOWN, function (event) {
854
          return start(event);
855
        });
856
        $(this._element).on(Event$2.POINTERUP, function (event) {
857
          return end(event);
858
        });
859
860
        this._element.classList.add(ClassName$2.POINTER_EVENT);
861
      } else {
862
        $(this._element).on(Event$2.TOUCHSTART, function (event) {
863
          return start(event);
864
        });
865
        $(this._element).on(Event$2.TOUCHMOVE, function (event) {
866
          return move(event);
867
        });
868
        $(this._element).on(Event$2.TOUCHEND, function (event) {
869
          return end(event);
870
        });
871
      }
872
    };
873
874
    _proto._keydown = function _keydown(event) {
875
      if (/input|textarea/i.test(event.target.tagName)) {
876
        return;
877
      }
878
879
      switch (event.which) {
880
        case ARROW_LEFT_KEYCODE:
881
          event.preventDefault();
882
          this.prev();
883
          break;
884
885
        case ARROW_RIGHT_KEYCODE:
886
          event.preventDefault();
887
          this.next();
888
          break;
889
890
        default:
891
      }
892
    };
893
894
    _proto._getItemIndex = function _getItemIndex(element) {
895
      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];
896
      return this._items.indexOf(element);
897
    };
898
899
    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
900
      var isNextDirection = direction === Direction.NEXT;
901
      var isPrevDirection = direction === Direction.PREV;
902
903
      var activeIndex = this._getItemIndex(activeElement);
904
905
      var lastItemIndex = this._items.length - 1;
906
      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
907
908
      if (isGoingToWrap && !this._config.wrap) {
909
        return activeElement;
910
      }
911
912
      var delta = direction === Direction.PREV ? -1 : 1;
913
      var itemIndex = (activeIndex + delta) % this._items.length;
914
      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
915
    };
916
917
    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
918
      var targetIndex = this._getItemIndex(relatedTarget);
919
920
      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));
921
922
      var slideEvent = $.Event(Event$2.SLIDE, {
923
        relatedTarget: relatedTarget,
924
        direction: eventDirectionName,
925
        from: fromIndex,
926
        to: targetIndex
927
      });
928
      $(this._element).trigger(slideEvent);
929
      return slideEvent;
930
    };
931
932
    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
933
      if (this._indicatorsElement) {
934
        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));
935
        $(indicators).removeClass(ClassName$2.ACTIVE);
936
937
        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
938
939
        if (nextIndicator) {
940
          $(nextIndicator).addClass(ClassName$2.ACTIVE);
941
        }
942
      }
943
    };
944
945
    _proto._slide = function _slide(direction, element) {
946
      var _this4 = this;
947
948
      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
949
950
      var activeElementIndex = this._getItemIndex(activeElement);
951
952
      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
953
954
      var nextElementIndex = this._getItemIndex(nextElement);
955
956
      var isCycling = Boolean(this._interval);
957
      var directionalClassName;
958
      var orderClassName;
959
      var eventDirectionName;
960
961
      if (direction === Direction.NEXT) {
962
        directionalClassName = ClassName$2.LEFT;
963
        orderClassName = ClassName$2.NEXT;
964
        eventDirectionName = Direction.LEFT;
965
      } else {
966
        directionalClassName = ClassName$2.RIGHT;
967
        orderClassName = ClassName$2.PREV;
968
        eventDirectionName = Direction.RIGHT;
969
      }
970
971
      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {
972
        this._isSliding = false;
973
        return;
974
      }
975
976
      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
977
978
      if (slideEvent.isDefaultPrevented()) {
979
        return;
980
      }
981
982
      if (!activeElement || !nextElement) {
983
        // Some weirdness is happening, so we bail
984
        return;
985
      }
986
987
      this._isSliding = true;
988
989
      if (isCycling) {
990
        this.pause();
991
      }
992
993
      this._setActiveIndicatorElement(nextElement);
994
995
      var slidEvent = $.Event(Event$2.SLID, {
996
        relatedTarget: nextElement,
997
        direction: eventDirectionName,
998
        from: activeElementIndex,
999
        to: nextElementIndex
1000
      });
1001
1002
      if ($(this._element).hasClass(ClassName$2.SLIDE)) {
1003
        $(nextElement).addClass(orderClassName);
1004
        Util.reflow(nextElement);
1005
        $(activeElement).addClass(directionalClassName);
1006
        $(nextElement).addClass(directionalClassName);
1007
        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);
1008
1009
        if (nextElementInterval) {
1010
          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
1011
          this._config.interval = nextElementInterval;
1012
        } else {
1013
          this._config.interval = this._config.defaultInterval || this._config.interval;
1014
        }
1015
1016
        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
1017
        $(activeElement).one(Util.TRANSITION_END, function () {
1018
          $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE);
1019
          $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName);
1020
          _this4._isSliding = false;
1021
          setTimeout(function () {
1022
            return $(_this4._element).trigger(slidEvent);
1023
          }, 0);
1024
        }).emulateTransitionEnd(transitionDuration);
1025
      } else {
1026
        $(activeElement).removeClass(ClassName$2.ACTIVE);
1027
        $(nextElement).addClass(ClassName$2.ACTIVE);
1028
        this._isSliding = false;
1029
        $(this._element).trigger(slidEvent);
1030
      }
1031
1032
      if (isCycling) {
1033
        this.cycle();
1034
      }
1035
    } // Static
1036
    ;
1037
1038
    Carousel._jQueryInterface = function _jQueryInterface(config) {
1039
      return this.each(function () {
1040
        var data = $(this).data(DATA_KEY$2);
1041
1042
        var _config = _objectSpread({}, Default, $(this).data());
1043
1044
        if (typeof config === 'object') {
1045
          _config = _objectSpread({}, _config, config);
1046
        }
1047
1048
        var action = typeof config === 'string' ? config : _config.slide;
1049
1050
        if (!data) {
1051
          data = new Carousel(this, _config);
1052
          $(this).data(DATA_KEY$2, data);
1053
        }
1054
1055
        if (typeof config === 'number') {
1056
          data.to(config);
1057
        } else if (typeof action === 'string') {
1058
          if (typeof data[action] === 'undefined') {
1059
            throw new TypeError("No method named \"" + action + "\"");
1060
          }
1061
1062
          data[action]();
1063
        } else if (_config.interval && _config.ride) {
1064
          data.pause();
1065
          data.cycle();
1066
        }
1067
      });
1068
    };
1069
1070
    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
1071
      var selector = Util.getSelectorFromElement(this);
1072
1073
      if (!selector) {
1074
        return;
1075
      }
1076
1077
      var target = $(selector)[0];
1078
1079
      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {
1080
        return;
1081
      }
1082
1083
      var config = _objectSpread({}, $(target).data(), $(this).data());
1084
1085
      var slideIndex = this.getAttribute('data-slide-to');
1086
1087
      if (slideIndex) {
1088
        config.interval = false;
1089
      }
1090
1091
      Carousel._jQueryInterface.call($(target), config);
1092
1093
      if (slideIndex) {
1094
        $(target).data(DATA_KEY$2).to(slideIndex);
1095
      }
1096
1097
      event.preventDefault();
1098
    };
1099
1100
    _createClass(Carousel, null, [{
1101
      key: "VERSION",
1102
      get: function get() {
1103
        return VERSION$2;
1104
      }
1105
    }, {
1106
      key: "Default",
1107
      get: function get() {
1108
        return Default;
1109
      }
1110
    }]);
1111
1112
    return Carousel;
1113
  }();
1114
  /**
1115
   * ------------------------------------------------------------------------
1116
   * Data Api implementation
1117
   * ------------------------------------------------------------------------
1118
   */
1119
1120
1121
  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);
1122
  $(window).on(Event$2.LOAD_DATA_API, function () {
1123
    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));
1124
1125
    for (var i = 0, len = carousels.length; i < len; i++) {
1126
      var $carousel = $(carousels[i]);
1127
1128
      Carousel._jQueryInterface.call($carousel, $carousel.data());
1129
    }
1130
  });
1131
  /**
1132
   * ------------------------------------------------------------------------
1133
   * jQuery
1134
   * ------------------------------------------------------------------------
1135
   */
1136
1137
  $.fn[NAME$2] = Carousel._jQueryInterface;
1138
  $.fn[NAME$2].Constructor = Carousel;
1139
1140
  $.fn[NAME$2].noConflict = function () {
1141
    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;
1142
    return Carousel._jQueryInterface;
1143
  };
1144
1145
  /**
1146
   * ------------------------------------------------------------------------
1147
   * Constants
1148
   * ------------------------------------------------------------------------
1149
   */
1150
1151
  var NAME$3 = 'collapse';
1152
  var VERSION$3 = '4.3.1';
1153
  var DATA_KEY$3 = 'bs.collapse';
1154
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1155
  var DATA_API_KEY$3 = '.data-api';
1156
  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];
1157
  var Default$1 = {
1158
    toggle: true,
1159
    parent: ''
1160
  };
1161
  var DefaultType$1 = {
1162
    toggle: 'boolean',
1163
    parent: '(string|element)'
1164
  };
1165
  var Event$3 = {
1166
    SHOW: "show" + EVENT_KEY$3,
1167
    SHOWN: "shown" + EVENT_KEY$3,
1168
    HIDE: "hide" + EVENT_KEY$3,
1169
    HIDDEN: "hidden" + EVENT_KEY$3,
1170
    CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3
1171
  };
1172
  var ClassName$3 = {
1173
    SHOW: 'show',
1174
    COLLAPSE: 'collapse',
1175
    COLLAPSING: 'collapsing',
1176
    COLLAPSED: 'collapsed'
1177
  };
1178
  var Dimension = {
1179
    WIDTH: 'width',
1180
    HEIGHT: 'height'
1181
  };
1182
  var Selector$3 = {
1183
    ACTIVES: '.show, .collapsing',
1184
    DATA_TOGGLE: '[data-toggle="collapse"]'
1185
    /**
1186
     * ------------------------------------------------------------------------
1187
     * Class Definition
1188
     * ------------------------------------------------------------------------
1189
     */
1190
1191
  };
1192
1193
  var Collapse =
1194
  /*#__PURE__*/
1195
  function () {
1196
    function Collapse(element, config) {
1197
      this._isTransitioning = false;
1198
      this._element = element;
1199
      this._config = this._getConfig(config);
1200
      this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
1201
      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));
1202
1203
      for (var i = 0, len = toggleList.length; i < len; i++) {
1204
        var elem = toggleList[i];
1205
        var selector = Util.getSelectorFromElement(elem);
1206
        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
1207
          return foundElem === element;
1208
        });
1209
1210
        if (selector !== null && filterElement.length > 0) {
1211
          this._selector = selector;
1212
1213
          this._triggerArray.push(elem);
1214
        }
1215
      }
1216
1217
      this._parent = this._config.parent ? this._getParent() : null;
1218
1219
      if (!this._config.parent) {
1220
        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
1221
      }
1222
1223
      if (this._config.toggle) {
1224
        this.toggle();
1225
      }
1226
    } // Getters
1227
1228
1229
    var _proto = Collapse.prototype;
1230
1231
    // Public
1232
    _proto.toggle = function toggle() {
1233
      if ($(this._element).hasClass(ClassName$3.SHOW)) {
1234
        this.hide();
1235
      } else {
1236
        this.show();
1237
      }
1238
    };
1239
1240
    _proto.show = function show() {
1241
      var _this = this;
1242
1243
      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {
1244
        return;
1245
      }
1246
1247
      var actives;
1248
      var activesData;
1249
1250
      if (this._parent) {
1251
        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {
1252
          if (typeof _this._config.parent === 'string') {
1253
            return elem.getAttribute('data-parent') === _this._config.parent;
1254
          }
1255
1256
          return elem.classList.contains(ClassName$3.COLLAPSE);
1257
        });
1258
1259
        if (actives.length === 0) {
1260
          actives = null;
1261
        }
1262
      }
1263
1264
      if (actives) {
1265
        activesData = $(actives).not(this._selector).data(DATA_KEY$3);
1266
1267
        if (activesData && activesData._isTransitioning) {
1268
          return;
1269
        }
1270
      }
1271
1272
      var startEvent = $.Event(Event$3.SHOW);
1273
      $(this._element).trigger(startEvent);
1274
1275
      if (startEvent.isDefaultPrevented()) {
1276
        return;
1277
      }
1278
1279
      if (actives) {
1280
        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');
1281
1282
        if (!activesData) {
1283
          $(actives).data(DATA_KEY$3, null);
1284
        }
1285
      }
1286
1287
      var dimension = this._getDimension();
1288
1289
      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);
1290
      this._element.style[dimension] = 0;
1291
1292
      if (this._triggerArray.length) {
1293
        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);
1294
      }
1295
1296
      this.setTransitioning(true);
1297
1298
      var complete = function complete() {
1299
        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);
1300
        _this._element.style[dimension] = '';
1301
1302
        _this.setTransitioning(false);
1303
1304
        $(_this._element).trigger(Event$3.SHOWN);
1305
      };
1306
1307
      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1308
      var scrollSize = "scroll" + capitalizedDimension;
1309
      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
1310
      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
1311
      this._element.style[dimension] = this._element[scrollSize] + "px";
1312
    };
1313
1314
    _proto.hide = function hide() {
1315
      var _this2 = this;
1316
1317
      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {
1318
        return;
1319
      }
1320
1321
      var startEvent = $.Event(Event$3.HIDE);
1322
      $(this._element).trigger(startEvent);
1323
1324
      if (startEvent.isDefaultPrevented()) {
1325
        return;
1326
      }
1327
1328
      var dimension = this._getDimension();
1329
1330
      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
1331
      Util.reflow(this._element);
1332
      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);
1333
      var triggerArrayLength = this._triggerArray.length;
1334
1335
      if (triggerArrayLength > 0) {
1336
        for (var i = 0; i < triggerArrayLength; i++) {
1337
          var trigger = this._triggerArray[i];
1338
          var selector = Util.getSelectorFromElement(trigger);
1339
1340
          if (selector !== null) {
1341
            var $elem = $([].slice.call(document.querySelectorAll(selector)));
1342
1343
            if (!$elem.hasClass(ClassName$3.SHOW)) {
1344
              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);
1345
            }
1346
          }
1347
        }
1348
      }
1349
1350
      this.setTransitioning(true);
1351
1352
      var complete = function complete() {
1353
        _this2.setTransitioning(false);
1354
1355
        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);
1356
      };
1357
1358
      this._element.style[dimension] = '';
1359
      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
1360
      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
1361
    };
1362
1363
    _proto.setTransitioning = function setTransitioning(isTransitioning) {
1364
      this._isTransitioning = isTransitioning;
1365
    };
1366
1367
    _proto.dispose = function dispose() {
1368
      $.removeData(this._element, DATA_KEY$3);
1369
      this._config = null;
1370
      this._parent = null;
1371
      this._element = null;
1372
      this._triggerArray = null;
1373
      this._isTransitioning = null;
1374
    } // Private
1375
    ;
1376
1377
    _proto._getConfig = function _getConfig(config) {
1378
      config = _objectSpread({}, Default$1, config);
1379
      config.toggle = Boolean(config.toggle); // Coerce string values
1380
1381
      Util.typeCheckConfig(NAME$3, config, DefaultType$1);
1382
      return config;
1383
    };
1384
1385
    _proto._getDimension = function _getDimension() {
1386
      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
1387
      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
1388
    };
1389
1390
    _proto._getParent = function _getParent() {
1391
      var _this3 = this;
1392
1393
      var parent;
1394
1395
      if (Util.isElement(this._config.parent)) {
1396
        parent = this._config.parent; // It's a jQuery object
1397
1398
        if (typeof this._config.parent.jquery !== 'undefined') {
1399
          parent = this._config.parent[0];
1400
        }
1401
      } else {
1402
        parent = document.querySelector(this._config.parent);
1403
      }
1404
1405
      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
1406
      var children = [].slice.call(parent.querySelectorAll(selector));
1407
      $(children).each(function (i, element) {
1408
        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
1409
      });
1410
      return parent;
1411
    };
1412
1413
    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1414
      var isOpen = $(element).hasClass(ClassName$3.SHOW);
1415
1416
      if (triggerArray.length) {
1417
        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1418
      }
1419
    } // Static
1420
    ;
1421
1422
    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
1423
      var selector = Util.getSelectorFromElement(element);
1424
      return selector ? document.querySelector(selector) : null;
1425
    };
1426
1427
    Collapse._jQueryInterface = function _jQueryInterface(config) {
1428
      return this.each(function () {
1429
        var $this = $(this);
1430
        var data = $this.data(DATA_KEY$3);
1431
1432
        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});
1433
1434
        if (!data && _config.toggle && /show|hide/.test(config)) {
1435
          _config.toggle = false;
1436
        }
1437
1438
        if (!data) {
1439
          data = new Collapse(this, _config);
1440
          $this.data(DATA_KEY$3, data);
1441
        }
1442
1443
        if (typeof config === 'string') {
1444
          if (typeof data[config] === 'undefined') {
1445
            throw new TypeError("No method named \"" + config + "\"");
1446
          }
1447
1448
          data[config]();
1449
        }
1450
      });
1451
    };
1452
1453
    _createClass(Collapse, null, [{
1454
      key: "VERSION",
1455
      get: function get() {
1456
        return VERSION$3;
1457
      }
1458
    }, {
1459
      key: "Default",
1460
      get: function get() {
1461
        return Default$1;
1462
      }
1463
    }]);
1464
1465
    return Collapse;
1466
  }();
1467
  /**
1468
   * ------------------------------------------------------------------------
1469
   * Data Api implementation
1470
   * ------------------------------------------------------------------------
1471
   */
1472
1473
1474
  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {
1475
    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1476
    if (event.currentTarget.tagName === 'A') {
1477
      event.preventDefault();
1478
    }
1479
1480
    var $trigger = $(this);
1481
    var selector = Util.getSelectorFromElement(this);
1482
    var selectors = [].slice.call(document.querySelectorAll(selector));
1483
    $(selectors).each(function () {
1484
      var $target = $(this);
1485
      var data = $target.data(DATA_KEY$3);
1486
      var config = data ? 'toggle' : $trigger.data();
1487
1488
      Collapse._jQueryInterface.call($target, config);
1489
    });
1490
  });
1491
  /**
1492
   * ------------------------------------------------------------------------
1493
   * jQuery
1494
   * ------------------------------------------------------------------------
1495
   */
1496
1497
  $.fn[NAME$3] = Collapse._jQueryInterface;
1498
  $.fn[NAME$3].Constructor = Collapse;
1499
1500
  $.fn[NAME$3].noConflict = function () {
1501
    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;
1502
    return Collapse._jQueryInterface;
1503
  };
1504
1505
  /**
1506
   * ------------------------------------------------------------------------
1507
   * Constants
1508
   * ------------------------------------------------------------------------
1509
   */
1510
1511
  var NAME$4 = 'dropdown';
1512
  var VERSION$4 = '4.3.1';
1513
  var DATA_KEY$4 = 'bs.dropdown';
1514
  var EVENT_KEY$4 = "." + DATA_KEY$4;
1515
  var DATA_API_KEY$4 = '.data-api';
1516
  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];
1517
  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
1518
1519
  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
1520
1521
  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
1522
1523
  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
1524
1525
  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
1526
1527
  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
1528
1529
  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
1530
  var Event$4 = {
1531
    HIDE: "hide" + EVENT_KEY$4,
1532
    HIDDEN: "hidden" + EVENT_KEY$4,
1533
    SHOW: "show" + EVENT_KEY$4,
1534
    SHOWN: "shown" + EVENT_KEY$4,
1535
    CLICK: "click" + EVENT_KEY$4,
1536
    CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4,
1537
    KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4,
1538
    KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4
1539
  };
1540
  var ClassName$4 = {
1541
    DISABLED: 'disabled',
1542
    SHOW: 'show',
1543
    DROPUP: 'dropup',
1544
    DROPRIGHT: 'dropright',
1545
    DROPLEFT: 'dropleft',
1546
    MENURIGHT: 'dropdown-menu-right',
1547
    MENULEFT: 'dropdown-menu-left',
1548
    POSITION_STATIC: 'position-static'
1549
  };
1550
  var Selector$4 = {
1551
    DATA_TOGGLE: '[data-toggle="dropdown"]',
1552
    FORM_CHILD: '.dropdown form',
1553
    MENU: '.dropdown-menu',
1554
    NAVBAR_NAV: '.navbar-nav',
1555
    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
1556
  };
1557
  var AttachmentMap = {
1558
    TOP: 'top-start',
1559
    TOPEND: 'top-end',
1560
    BOTTOM: 'bottom-start',
1561
    BOTTOMEND: 'bottom-end',
1562
    RIGHT: 'right-start',
1563
    RIGHTEND: 'right-end',
1564
    LEFT: 'left-start',
1565
    LEFTEND: 'left-end'
1566
  };
1567
  var Default$2 = {
1568
    offset: 0,
1569
    flip: true,
1570
    boundary: 'scrollParent',
1571
    reference: 'toggle',
1572
    display: 'dynamic'
1573
  };
1574
  var DefaultType$2 = {
1575
    offset: '(number|string|function)',
1576
    flip: 'boolean',
1577
    boundary: '(string|element)',
1578
    reference: '(string|element)',
1579
    display: 'string'
1580
    /**
1581
     * ------------------------------------------------------------------------
1582
     * Class Definition
1583
     * ------------------------------------------------------------------------
1584
     */
1585
1586
  };
1587
1588
  var Dropdown =
1589
  /*#__PURE__*/
1590
  function () {
1591
    function Dropdown(element, config) {
1592
      this._element = element;
1593
      this._popper = null;
1594
      this._config = this._getConfig(config);
1595
      this._menu = this._getMenuElement();
1596
      this._inNavbar = this._detectNavbar();
1597
1598
      this._addEventListeners();
1599
    } // Getters
1600
1601
1602
    var _proto = Dropdown.prototype;
1603
1604
    // Public
1605
    _proto.toggle = function toggle() {
1606
      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {
1607
        return;
1608
      }
1609
1610
      var parent = Dropdown._getParentFromElement(this._element);
1611
1612
      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);
1613
1614
      Dropdown._clearMenus();
1615
1616
      if (isActive) {
1617
        return;
1618
      }
1619
1620
      var relatedTarget = {
1621
        relatedTarget: this._element
1622
      };
1623
      var showEvent = $.Event(Event$4.SHOW, relatedTarget);
1624
      $(parent).trigger(showEvent);
1625
1626
      if (showEvent.isDefaultPrevented()) {
1627
        return;
1628
      } // Disable totally Popper.js for Dropdown in Navbar
1629
1630
1631
      if (!this._inNavbar) {
1632
        /**
1633
         * Check for Popper dependency
1634
         * Popper - https://popper.js.org
1635
         */
1636
        if (typeof Popper === 'undefined') {
1637
          throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
1638
        }
1639
1640
        var referenceElement = this._element;
1641
1642
        if (this._config.reference === 'parent') {
1643
          referenceElement = parent;
1644
        } else if (Util.isElement(this._config.reference)) {
1645
          referenceElement = this._config.reference; // Check if it's jQuery element
1646
1647
          if (typeof this._config.reference.jquery !== 'undefined') {
1648
            referenceElement = this._config.reference[0];
1649
          }
1650
        } // If boundary is not `scrollParent`, then set position to `static`
1651
        // to allow the menu to "escape" the scroll parent's boundaries
1652
        // https://github.com/twbs/bootstrap/issues/24251
1653
1654
1655
        if (this._config.boundary !== 'scrollParent') {
1656
          $(parent).addClass(ClassName$4.POSITION_STATIC);
1657
        }
1658
1659
        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
1660
      } // If this is a touch-enabled device we add extra
1661
      // empty mouseover listeners to the body's immediate children;
1662
      // only needed because of broken event delegation on iOS
1663
      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
1664
1665
1666
      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {
1667
        $(document.body).children().on('mouseover', null, $.noop);
1668
      }
1669
1670
      this._element.focus();
1671
1672
      this._element.setAttribute('aria-expanded', true);
1673
1674
      $(this._menu).toggleClass(ClassName$4.SHOW);
1675
      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));
1676
    };
1677
1678
    _proto.show = function show() {
1679
      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {
1680
        return;
1681
      }
1682
1683
      var relatedTarget = {
1684
        relatedTarget: this._element
1685
      };
1686
      var showEvent = $.Event(Event$4.SHOW, relatedTarget);
1687
1688
      var parent = Dropdown._getParentFromElement(this._element);
1689
1690
      $(parent).trigger(showEvent);
1691
1692
      if (showEvent.isDefaultPrevented()) {
1693
        return;
1694
      }
1695
1696
      $(this._menu).toggleClass(ClassName$4.SHOW);
1697
      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));
1698
    };
1699
1700
    _proto.hide = function hide() {
1701
      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {
1702
        return;
1703
      }
1704
1705
      var relatedTarget = {
1706
        relatedTarget: this._element
1707
      };
1708
      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
1709
1710
      var parent = Dropdown._getParentFromElement(this._element);
1711
1712
      $(parent).trigger(hideEvent);
1713
1714
      if (hideEvent.isDefaultPrevented()) {
1715
        return;
1716
      }
1717
1718
      $(this._menu).toggleClass(ClassName$4.SHOW);
1719
      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
1720
    };
1721
1722
    _proto.dispose = function dispose() {
1723
      $.removeData(this._element, DATA_KEY$4);
1724
      $(this._element).off(EVENT_KEY$4);
1725
      this._element = null;
1726
      this._menu = null;
1727
1728
      if (this._popper !== null) {
1729
        this._popper.destroy();
1730
1731
        this._popper = null;
1732
      }
1733
    };
1734
1735
    _proto.update = function update() {
1736
      this._inNavbar = this._detectNavbar();
1737
1738
      if (this._popper !== null) {
1739
        this._popper.scheduleUpdate();
1740
      }
1741
    } // Private
1742
    ;
1743
1744
    _proto._addEventListeners = function _addEventListeners() {
1745
      var _this = this;
1746
1747
      $(this._element).on(Event$4.CLICK, function (event) {
1748
        event.preventDefault();
1749
        event.stopPropagation();
1750
1751
        _this.toggle();
1752
      });
1753
    };
1754
1755
    _proto._getConfig = function _getConfig(config) {
1756
      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);
1757
      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
1758
      return config;
1759
    };
1760
1761
    _proto._getMenuElement = function _getMenuElement() {
1762
      if (!this._menu) {
1763
        var parent = Dropdown._getParentFromElement(this._element);
1764
1765
        if (parent) {
1766
          this._menu = parent.querySelector(Selector$4.MENU);
1767
        }
1768
      }
1769
1770
      return this._menu;
1771
    };
1772
1773
    _proto._getPlacement = function _getPlacement() {
1774
      var $parentDropdown = $(this._element.parentNode);
1775
      var placement = AttachmentMap.BOTTOM; // Handle dropup
1776
1777
      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {
1778
        placement = AttachmentMap.TOP;
1779
1780
        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
1781
          placement = AttachmentMap.TOPEND;
1782
        }
1783
      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {
1784
        placement = AttachmentMap.RIGHT;
1785
      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {
1786
        placement = AttachmentMap.LEFT;
1787
      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
1788
        placement = AttachmentMap.BOTTOMEND;
1789
      }
1790
1791
      return placement;
1792
    };
1793
1794
    _proto._detectNavbar = function _detectNavbar() {
1795
      return $(this._element).closest('.navbar').length > 0;
1796
    };
1797
1798
    _proto._getOffset = function _getOffset() {
1799
      var _this2 = this;
1800
1801
      var offset = {};
1802
1803
      if (typeof this._config.offset === 'function') {
1804
        offset.fn = function (data) {
1805
          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
1806
          return data;
1807
        };
1808
      } else {
1809
        offset.offset = this._config.offset;
1810
      }
1811
1812
      return offset;
1813
    };
1814
1815
    _proto._getPopperConfig = function _getPopperConfig() {
1816
      var popperConfig = {
1817
        placement: this._getPlacement(),
1818
        modifiers: {
1819
          offset: this._getOffset(),
1820
          flip: {
1821
            enabled: this._config.flip
1822
          },
1823
          preventOverflow: {
1824
            boundariesElement: this._config.boundary
1825
          }
1826
        } // Disable Popper.js if we have a static display
1827
1828
      };
1829
1830
      if (this._config.display === 'static') {
1831
        popperConfig.modifiers.applyStyle = {
1832
          enabled: false
1833
        };
1834
      }
1835
1836
      return popperConfig;
1837
    } // Static
1838
    ;
1839
1840
    Dropdown._jQueryInterface = function _jQueryInterface(config) {
1841
      return this.each(function () {
1842
        var data = $(this).data(DATA_KEY$4);
1843
1844
        var _config = typeof config === 'object' ? config : null;
1845
1846
        if (!data) {
1847
          data = new Dropdown(this, _config);
1848
          $(this).data(DATA_KEY$4, data);
1849
        }
1850
1851
        if (typeof config === 'string') {
1852
          if (typeof data[config] === 'undefined') {
1853
            throw new TypeError("No method named \"" + config + "\"");
1854
          }
1855
1856
          data[config]();
1857
        }
1858
      });
1859
    };
1860
1861
    Dropdown._clearMenus = function _clearMenus(event) {
1862
      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
1863
        return;
1864
      }
1865
1866
      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));
1867
1868
      for (var i = 0, len = toggles.length; i < len; i++) {
1869
        var parent = Dropdown._getParentFromElement(toggles[i]);
1870
1871
        var context = $(toggles[i]).data(DATA_KEY$4);
1872
        var relatedTarget = {
1873
          relatedTarget: toggles[i]
1874
        };
1875
1876
        if (event && event.type === 'click') {
1877
          relatedTarget.clickEvent = event;
1878
        }
1879
1880
        if (!context) {
1881
          continue;
1882
        }
1883
1884
        var dropdownMenu = context._menu;
1885
1886
        if (!$(parent).hasClass(ClassName$4.SHOW)) {
1887
          continue;
1888
        }
1889
1890
        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
1891
          continue;
1892
        }
1893
1894
        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
1895
        $(parent).trigger(hideEvent);
1896
1897
        if (hideEvent.isDefaultPrevented()) {
1898
          continue;
1899
        } // If this is a touch-enabled device we remove the extra
1900
        // empty mouseover listeners we added for iOS support
1901
1902
1903
        if ('ontouchstart' in document.documentElement) {
1904
          $(document.body).children().off('mouseover', null, $.noop);
1905
        }
1906
1907
        toggles[i].setAttribute('aria-expanded', 'false');
1908
        $(dropdownMenu).removeClass(ClassName$4.SHOW);
1909
        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
1910
      }
1911
    };
1912
1913
    Dropdown._getParentFromElement = function _getParentFromElement(element) {
1914
      var parent;
1915
      var selector = Util.getSelectorFromElement(element);
1916
1917
      if (selector) {
1918
        parent = document.querySelector(selector);
1919
      }
1920
1921
      return parent || element.parentNode;
1922
    } // eslint-disable-next-line complexity
1923
    ;
1924
1925
    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
1926
      // If not input/textarea:
1927
      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
1928
      // If input/textarea:
1929
      //  - If space key => not a dropdown command
1930
      //  - If key is other than escape
1931
      //    - If key is not up or down => not a dropdown command
1932
      //    - If trigger inside the menu => not a dropdown command
1933
      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
1934
        return;
1935
      }
1936
1937
      event.preventDefault();
1938
      event.stopPropagation();
1939
1940
      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {
1941
        return;
1942
      }
1943
1944
      var parent = Dropdown._getParentFromElement(this);
1945
1946
      var isActive = $(parent).hasClass(ClassName$4.SHOW);
1947
1948
      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
1949
        if (event.which === ESCAPE_KEYCODE) {
1950
          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);
1951
          $(toggle).trigger('focus');
1952
        }
1953
1954
        $(this).trigger('click');
1955
        return;
1956
      }
1957
1958
      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));
1959
1960
      if (items.length === 0) {
1961
        return;
1962
      }
1963
1964
      var index = items.indexOf(event.target);
1965
1966
      if (event.which === ARROW_UP_KEYCODE && index > 0) {
1967
        // Up
1968
        index--;
1969
      }
1970
1971
      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
1972
        // Down
1973
        index++;
1974
      }
1975
1976
      if (index < 0) {
1977
        index = 0;
1978
      }
1979
1980
      items[index].focus();
1981
    };
1982
1983
    _createClass(Dropdown, null, [{
1984
      key: "VERSION",
1985
      get: function get() {
1986
        return VERSION$4;
1987
      }
1988
    }, {
1989
      key: "Default",
1990
      get: function get() {
1991
        return Default$2;
1992
      }
1993
    }, {
1994
      key: "DefaultType",
1995
      get: function get() {
1996
        return DefaultType$2;
1997
      }
1998
    }]);
1999
2000
    return Dropdown;
2001
  }();
2002
  /**
2003
   * ------------------------------------------------------------------------
2004
   * Data Api implementation
2005
   * ------------------------------------------------------------------------
2006
   */
2007
2008
2009
  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {
2010
    event.preventDefault();
2011
    event.stopPropagation();
2012
2013
    Dropdown._jQueryInterface.call($(this), 'toggle');
2014
  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {
2015
    e.stopPropagation();
2016
  });
2017
  /**
2018
   * ------------------------------------------------------------------------
2019
   * jQuery
2020
   * ------------------------------------------------------------------------
2021
   */
2022
2023
  $.fn[NAME$4] = Dropdown._jQueryInterface;
2024
  $.fn[NAME$4].Constructor = Dropdown;
2025
2026
  $.fn[NAME$4].noConflict = function () {
2027
    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;
2028
    return Dropdown._jQueryInterface;
2029
  };
2030
2031
  /**
2032
   * ------------------------------------------------------------------------
2033
   * Constants
2034
   * ------------------------------------------------------------------------
2035
   */
2036
2037
  var NAME$5 = 'modal';
2038
  var VERSION$5 = '4.3.1';
2039
  var DATA_KEY$5 = 'bs.modal';
2040
  var EVENT_KEY$5 = "." + DATA_KEY$5;
2041
  var DATA_API_KEY$5 = '.data-api';
2042
  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];
2043
  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
2044
2045
  var Default$3 = {
2046
    backdrop: true,
2047
    keyboard: true,
2048
    focus: true,
2049
    show: true
2050
  };
2051
  var DefaultType$3 = {
2052
    backdrop: '(boolean|string)',
2053
    keyboard: 'boolean',
2054
    focus: 'boolean',
2055
    show: 'boolean'
2056
  };
2057
  var Event$5 = {
2058
    HIDE: "hide" + EVENT_KEY$5,
2059
    HIDDEN: "hidden" + EVENT_KEY$5,
2060
    SHOW: "show" + EVENT_KEY$5,
2061
    SHOWN: "shown" + EVENT_KEY$5,
2062
    FOCUSIN: "focusin" + EVENT_KEY$5,
2063
    RESIZE: "resize" + EVENT_KEY$5,
2064
    CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5,
2065
    KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5,
2066
    MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5,
2067
    MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5,
2068
    CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
2069
  };
2070
  var ClassName$5 = {
2071
    SCROLLABLE: 'modal-dialog-scrollable',
2072
    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
2073
    BACKDROP: 'modal-backdrop',
2074
    OPEN: 'modal-open',
2075
    FADE: 'fade',
2076
    SHOW: 'show'
2077
  };
2078
  var Selector$5 = {
2079
    DIALOG: '.modal-dialog',
2080
    MODAL_BODY: '.modal-body',
2081
    DATA_TOGGLE: '[data-toggle="modal"]',
2082
    DATA_DISMISS: '[data-dismiss="modal"]',
2083
    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
2084
    STICKY_CONTENT: '.sticky-top'
2085
    /**
2086
     * ------------------------------------------------------------------------
2087
     * Class Definition
2088
     * ------------------------------------------------------------------------
2089
     */
2090
2091
  };
2092
2093
  var Modal =
2094
  /*#__PURE__*/
2095
  function () {
2096
    function Modal(element, config) {
2097
      this._config = this._getConfig(config);
2098
      this._element = element;
2099
      this._dialog = element.querySelector(Selector$5.DIALOG);
2100
      this._backdrop = null;
2101
      this._isShown = false;
2102
      this._isBodyOverflowing = false;
2103
      this._ignoreBackdropClick = false;
2104
      this._isTransitioning = false;
2105
      this._scrollbarWidth = 0;
2106
    } // Getters
2107
2108
2109
    var _proto = Modal.prototype;
2110
2111
    // Public
2112
    _proto.toggle = function toggle(relatedTarget) {
2113
      return this._isShown ? this.hide() : this.show(relatedTarget);
2114
    };
2115
2116
    _proto.show = function show(relatedTarget) {
2117
      var _this = this;
2118
2119
      if (this._isShown || this._isTransitioning) {
2120
        return;
2121
      }
2122
2123
      if ($(this._element).hasClass(ClassName$5.FADE)) {
2124
        this._isTransitioning = true;
2125
      }
2126
2127
      var showEvent = $.Event(Event$5.SHOW, {
2128
        relatedTarget: relatedTarget
2129
      });
2130
      $(this._element).trigger(showEvent);
2131
2132
      if (this._isShown || showEvent.isDefaultPrevented()) {
2133
        return;
2134
      }
2135
2136
      this._isShown = true;
2137
2138
      this._checkScrollbar();
2139
2140
      this._setScrollbar();
2141
2142
      this._adjustDialog();
2143
2144
      this._setEscapeEvent();
2145
2146
      this._setResizeEvent();
2147
2148
      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {
2149
        return _this.hide(event);
2150
      });
2151
      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {
2152
        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {
2153
          if ($(event.target).is(_this._element)) {
2154
            _this._ignoreBackdropClick = true;
2155
          }
2156
        });
2157
      });
2158
2159
      this._showBackdrop(function () {
2160
        return _this._showElement(relatedTarget);
2161
      });
2162
    };
2163
2164
    _proto.hide = function hide(event) {
2165
      var _this2 = this;
2166
2167
      if (event) {
2168
        event.preventDefault();
2169
      }
2170
2171
      if (!this._isShown || this._isTransitioning) {
2172
        return;
2173
      }
2174
2175
      var hideEvent = $.Event(Event$5.HIDE);
2176
      $(this._element).trigger(hideEvent);
2177
2178
      if (!this._isShown || hideEvent.isDefaultPrevented()) {
2179
        return;
2180
      }
2181
2182
      this._isShown = false;
2183
      var transition = $(this._element).hasClass(ClassName$5.FADE);
2184
2185
      if (transition) {
2186
        this._isTransitioning = true;
2187
      }
2188
2189
      this._setEscapeEvent();
2190
2191
      this._setResizeEvent();
2192
2193
      $(document).off(Event$5.FOCUSIN);
2194
      $(this._element).removeClass(ClassName$5.SHOW);
2195
      $(this._element).off(Event$5.CLICK_DISMISS);
2196
      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);
2197
2198
      if (transition) {
2199
        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
2200
        $(this._element).one(Util.TRANSITION_END, function (event) {
2201
          return _this2._hideModal(event);
2202
        }).emulateTransitionEnd(transitionDuration);
2203
      } else {
2204
        this._hideModal();
2205
      }
2206
    };
2207
2208
    _proto.dispose = function dispose() {
2209
      [window, this._element, this._dialog].forEach(function (htmlElement) {
2210
        return $(htmlElement).off(EVENT_KEY$5);
2211
      });
2212
      /**
2213
       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
2214
       * Do not move `document` in `htmlElements` array
2215
       * It will remove `Event.CLICK_DATA_API` event that should remain
2216
       */
2217
2218
      $(document).off(Event$5.FOCUSIN);
2219
      $.removeData(this._element, DATA_KEY$5);
2220
      this._config = null;
2221
      this._element = null;
2222
      this._dialog = null;
2223
      this._backdrop = null;
2224
      this._isShown = null;
2225
      this._isBodyOverflowing = null;
2226
      this._ignoreBackdropClick = null;
2227
      this._isTransitioning = null;
2228
      this._scrollbarWidth = null;
2229
    };
2230
2231
    _proto.handleUpdate = function handleUpdate() {
2232
      this._adjustDialog();
2233
    } // Private
2234
    ;
2235
2236
    _proto._getConfig = function _getConfig(config) {
2237
      config = _objectSpread({}, Default$3, config);
2238
      Util.typeCheckConfig(NAME$5, config, DefaultType$3);
2239
      return config;
2240
    };
2241
2242
    _proto._showElement = function _showElement(relatedTarget) {
2243
      var _this3 = this;
2244
2245
      var transition = $(this._element).hasClass(ClassName$5.FADE);
2246
2247
      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
2248
        // Don't move modal's DOM position
2249
        document.body.appendChild(this._element);
2250
      }
2251
2252
      this._element.style.display = 'block';
2253
2254
      this._element.removeAttribute('aria-hidden');
2255
2256
      this._element.setAttribute('aria-modal', true);
2257
2258
      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
2259
        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
2260
      } else {
2261
        this._element.scrollTop = 0;
2262
      }
2263
2264
      if (transition) {
2265
        Util.reflow(this._element);
2266
      }
2267
2268
      $(this._element).addClass(ClassName$5.SHOW);
2269
2270
      if (this._config.focus) {
2271
        this._enforceFocus();
2272
      }
2273
2274
      var shownEvent = $.Event(Event$5.SHOWN, {
2275
        relatedTarget: relatedTarget
2276
      });
2277
2278
      var transitionComplete = function transitionComplete() {
2279
        if (_this3._config.focus) {
2280
          _this3._element.focus();
2281
        }
2282
2283
        _this3._isTransitioning = false;
2284
        $(_this3._element).trigger(shownEvent);
2285
      };
2286
2287
      if (transition) {
2288
        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
2289
        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
2290
      } else {
2291
        transitionComplete();
2292
      }
2293
    };
2294
2295
    _proto._enforceFocus = function _enforceFocus() {
2296
      var _this4 = this;
2297
2298
      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop
2299
      .on(Event$5.FOCUSIN, function (event) {
2300
        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {
2301
          _this4._element.focus();
2302
        }
2303
      });
2304
    };
2305
2306
    _proto._setEscapeEvent = function _setEscapeEvent() {
2307
      var _this5 = this;
2308
2309
      if (this._isShown && this._config.keyboard) {
2310
        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {
2311
          if (event.which === ESCAPE_KEYCODE$1) {
2312
            event.preventDefault();
2313
2314
            _this5.hide();
2315
          }
2316
        });
2317
      } else if (!this._isShown) {
2318
        $(this._element).off(Event$5.KEYDOWN_DISMISS);
2319
      }
2320
    };
2321
2322
    _proto._setResizeEvent = function _setResizeEvent() {
2323
      var _this6 = this;
2324
2325
      if (this._isShown) {
2326
        $(window).on(Event$5.RESIZE, function (event) {
2327
          return _this6.handleUpdate(event);
2328
        });
2329
      } else {
2330
        $(window).off(Event$5.RESIZE);
2331
      }
2332
    };
2333
2334
    _proto._hideModal = function _hideModal() {
2335
      var _this7 = this;
2336
2337
      this._element.style.display = 'none';
2338
2339
      this._element.setAttribute('aria-hidden', true);
2340
2341
      this._element.removeAttribute('aria-modal');
2342
2343
      this._isTransitioning = false;
2344
2345
      this._showBackdrop(function () {
2346
        $(document.body).removeClass(ClassName$5.OPEN);
2347
2348
        _this7._resetAdjustments();
2349
2350
        _this7._resetScrollbar();
2351
2352
        $(_this7._element).trigger(Event$5.HIDDEN);
2353
      });
2354
    };
2355
2356
    _proto._removeBackdrop = function _removeBackdrop() {
2357
      if (this._backdrop) {
2358
        $(this._backdrop).remove();
2359
        this._backdrop = null;
2360
      }
2361
    };
2362
2363
    _proto._showBackdrop = function _showBackdrop(callback) {
2364
      var _this8 = this;
2365
2366
      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';
2367
2368
      if (this._isShown && this._config.backdrop) {
2369
        this._backdrop = document.createElement('div');
2370
        this._backdrop.className = ClassName$5.BACKDROP;
2371
2372
        if (animate) {
2373
          this._backdrop.classList.add(animate);
2374
        }
2375
2376
        $(this._backdrop).appendTo(document.body);
2377
        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {
2378
          if (_this8._ignoreBackdropClick) {
2379
            _this8._ignoreBackdropClick = false;
2380
            return;
2381
          }
2382
2383
          if (event.target !== event.currentTarget) {
2384
            return;
2385
          }
2386
2387
          if (_this8._config.backdrop === 'static') {
2388
            _this8._element.focus();
2389
          } else {
2390
            _this8.hide();
2391
          }
2392
        });
2393
2394
        if (animate) {
2395
          Util.reflow(this._backdrop);
2396
        }
2397
2398
        $(this._backdrop).addClass(ClassName$5.SHOW);
2399
2400
        if (!callback) {
2401
          return;
2402
        }
2403
2404
        if (!animate) {
2405
          callback();
2406
          return;
2407
        }
2408
2409
        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
2410
        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
2411
      } else if (!this._isShown && this._backdrop) {
2412
        $(this._backdrop).removeClass(ClassName$5.SHOW);
2413
2414
        var callbackRemove = function callbackRemove() {
2415
          _this8._removeBackdrop();
2416
2417
          if (callback) {
2418
            callback();
2419
          }
2420
        };
2421
2422
        if ($(this._element).hasClass(ClassName$5.FADE)) {
2423
          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
2424
2425
          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
2426
        } else {
2427
          callbackRemove();
2428
        }
2429
      } else if (callback) {
2430
        callback();
2431
      }
2432
    } // ----------------------------------------------------------------------
2433
    // the following methods are used to handle overflowing modals
2434
    // todo (fat): these should probably be refactored out of modal.js
2435
    // ----------------------------------------------------------------------
2436
    ;
2437
2438
    _proto._adjustDialog = function _adjustDialog() {
2439
      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
2440
2441
      if (!this._isBodyOverflowing && isModalOverflowing) {
2442
        this._element.style.paddingLeft = this._scrollbarWidth + "px";
2443
      }
2444
2445
      if (this._isBodyOverflowing && !isModalOverflowing) {
2446
        this._element.style.paddingRight = this._scrollbarWidth + "px";
2447
      }
2448
    };
2449
2450
    _proto._resetAdjustments = function _resetAdjustments() {
2451
      this._element.style.paddingLeft = '';
2452
      this._element.style.paddingRight = '';
2453
    };
2454
2455
    _proto._checkScrollbar = function _checkScrollbar() {
2456
      var rect = document.body.getBoundingClientRect();
2457
      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
2458
      this._scrollbarWidth = this._getScrollbarWidth();
2459
    };
2460
2461
    _proto._setScrollbar = function _setScrollbar() {
2462
      var _this9 = this;
2463
2464
      if (this._isBodyOverflowing) {
2465
        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
2466
        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
2467
        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
2468
        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding
2469
2470
        $(fixedContent).each(function (index, element) {
2471
          var actualPadding = element.style.paddingRight;
2472
          var calculatedPadding = $(element).css('padding-right');
2473
          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px");
2474
        }); // Adjust sticky content margin
2475
2476
        $(stickyContent).each(function (index, element) {
2477
          var actualMargin = element.style.marginRight;
2478
          var calculatedMargin = $(element).css('margin-right');
2479
          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px");
2480
        }); // Adjust body padding
2481
2482
        var actualPadding = document.body.style.paddingRight;
2483
        var calculatedPadding = $(document.body).css('padding-right');
2484
        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
2485
      }
2486
2487
      $(document.body).addClass(ClassName$5.OPEN);
2488
    };
2489
2490
    _proto._resetScrollbar = function _resetScrollbar() {
2491
      // Restore fixed content padding
2492
      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
2493
      $(fixedContent).each(function (index, element) {
2494
        var padding = $(element).data('padding-right');
2495
        $(element).removeData('padding-right');
2496
        element.style.paddingRight = padding ? padding : '';
2497
      }); // Restore sticky content
2498
2499
      var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT));
2500
      $(elements).each(function (index, element) {
2501
        var margin = $(element).data('margin-right');
2502
2503
        if (typeof margin !== 'undefined') {
2504
          $(element).css('margin-right', margin).removeData('margin-right');
2505
        }
2506
      }); // Restore body padding
2507
2508
      var padding = $(document.body).data('padding-right');
2509
      $(document.body).removeData('padding-right');
2510
      document.body.style.paddingRight = padding ? padding : '';
2511
    };
2512
2513
    _proto._getScrollbarWidth = function _getScrollbarWidth() {
2514
      // thx d.walsh
2515
      var scrollDiv = document.createElement('div');
2516
      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;
2517
      document.body.appendChild(scrollDiv);
2518
      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
2519
      document.body.removeChild(scrollDiv);
2520
      return scrollbarWidth;
2521
    } // Static
2522
    ;
2523
2524
    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
2525
      return this.each(function () {
2526
        var data = $(this).data(DATA_KEY$5);
2527
2528
        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});
2529
2530
        if (!data) {
2531
          data = new Modal(this, _config);
2532
          $(this).data(DATA_KEY$5, data);
2533
        }
2534
2535
        if (typeof config === 'string') {
2536
          if (typeof data[config] === 'undefined') {
2537
            throw new TypeError("No method named \"" + config + "\"");
2538
          }
2539
2540
          data[config](relatedTarget);
2541
        } else if (_config.show) {
2542
          data.show(relatedTarget);
2543
        }
2544
      });
2545
    };
2546
2547
    _createClass(Modal, null, [{
2548
      key: "VERSION",
2549
      get: function get() {
2550
        return VERSION$5;
2551
      }
2552
    }, {
2553
      key: "Default",
2554
      get: function get() {
2555
        return Default$3;
2556
      }
2557
    }]);
2558
2559
    return Modal;
2560
  }();
2561
  /**
2562
   * ------------------------------------------------------------------------
2563
   * Data Api implementation
2564
   * ------------------------------------------------------------------------
2565
   */
2566
2567
2568
  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {
2569
    var _this10 = this;
2570
2571
    var target;
2572
    var selector = Util.getSelectorFromElement(this);
2573
2574
    if (selector) {
2575
      target = document.querySelector(selector);
2576
    }
2577
2578
    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());
2579
2580
    if (this.tagName === 'A' || this.tagName === 'AREA') {
2581
      event.preventDefault();
2582
    }
2583
2584
    var $target = $(target).one(Event$5.SHOW, function (showEvent) {
2585
      if (showEvent.isDefaultPrevented()) {
2586
        // Only register focus restorer if modal will actually get shown
2587
        return;
2588
      }
2589
2590
      $target.one(Event$5.HIDDEN, function () {
2591
        if ($(_this10).is(':visible')) {
2592
          _this10.focus();
2593
        }
2594
      });
2595
    });
2596
2597
    Modal._jQueryInterface.call($(target), config, this);
2598
  });
2599
  /**
2600
   * ------------------------------------------------------------------------
2601
   * jQuery
2602
   * ------------------------------------------------------------------------
2603
   */
2604
2605
  $.fn[NAME$5] = Modal._jQueryInterface;
2606
  $.fn[NAME$5].Constructor = Modal;
2607
2608
  $.fn[NAME$5].noConflict = function () {
2609
    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;
2610
    return Modal._jQueryInterface;
2611
  };
2612
2613
  /**
2614
   * --------------------------------------------------------------------------
2615
   * Bootstrap (v4.3.1): tools/sanitizer.js
2616
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2617
   * --------------------------------------------------------------------------
2618
   */
2619
  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
2620
  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
2621
  var DefaultWhitelist = {
2622
    // Global attributes allowed on any supplied element below.
2623
    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
2624
    a: ['target', 'href', 'title', 'rel'],
2625
    area: [],
2626
    b: [],
2627
    br: [],
2628
    col: [],
2629
    code: [],
2630
    div: [],
2631
    em: [],
2632
    hr: [],
2633
    h1: [],
2634
    h2: [],
2635
    h3: [],
2636
    h4: [],
2637
    h5: [],
2638
    h6: [],
2639
    i: [],
2640
    img: ['src', 'alt', 'title', 'width', 'height'],
2641
    li: [],
2642
    ol: [],
2643
    p: [],
2644
    pre: [],
2645
    s: [],
2646
    small: [],
2647
    span: [],
2648
    sub: [],
2649
    sup: [],
2650
    strong: [],
2651
    u: [],
2652
    ul: []
2653
    /**
2654
     * A pattern that recognizes a commonly useful subset of URLs that are safe.
2655
     *
2656
     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
2657
     */
2658
2659
  };
2660
  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
2661
  /**
2662
   * A pattern that matches safe data URLs. Only matches image, video and audio types.
2663
   *
2664
   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
2665
   */
2666
2667
  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
2668
2669
  function allowedAttribute(attr, allowedAttributeList) {
2670
    var attrName = attr.nodeName.toLowerCase();
2671
2672
    if (allowedAttributeList.indexOf(attrName) !== -1) {
2673
      if (uriAttrs.indexOf(attrName) !== -1) {
2674
        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
2675
      }
2676
2677
      return true;
2678
    }
2679
2680
    var regExp = allowedAttributeList.filter(function (attrRegex) {
2681
      return attrRegex instanceof RegExp;
2682
    }); // Check if a regular expression validates the attribute.
2683
2684
    for (var i = 0, l = regExp.length; i < l; i++) {
2685
      if (attrName.match(regExp[i])) {
2686
        return true;
2687
      }
2688
    }
2689
2690
    return false;
2691
  }
2692
2693
  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
2694
    if (unsafeHtml.length === 0) {
2695
      return unsafeHtml;
2696
    }
2697
2698
    if (sanitizeFn && typeof sanitizeFn === 'function') {
2699
      return sanitizeFn(unsafeHtml);
2700
    }
2701
2702
    var domParser = new window.DOMParser();
2703
    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
2704
    var whitelistKeys = Object.keys(whiteList);
2705
    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
2706
2707
    var _loop = function _loop(i, len) {
2708
      var el = elements[i];
2709
      var elName = el.nodeName.toLowerCase();
2710
2711
      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
2712
        el.parentNode.removeChild(el);
2713
        return "continue";
2714
      }
2715
2716
      var attributeList = [].slice.call(el.attributes);
2717
      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
2718
      attributeList.forEach(function (attr) {
2719
        if (!allowedAttribute(attr, whitelistedAttributes)) {
2720
          el.removeAttribute(attr.nodeName);
2721
        }
2722
      });
2723
    };
2724
2725
    for (var i = 0, len = elements.length; i < len; i++) {
2726
      var _ret = _loop(i, len);
2727
2728
      if (_ret === "continue") continue;
2729
    }
2730
2731
    return createdDocument.body.innerHTML;
2732
  }
2733
2734
  /**
2735
   * ------------------------------------------------------------------------
2736
   * Constants
2737
   * ------------------------------------------------------------------------
2738
   */
2739
2740
  var NAME$6 = 'tooltip';
2741
  var VERSION$6 = '4.3.1';
2742
  var DATA_KEY$6 = 'bs.tooltip';
2743
  var EVENT_KEY$6 = "." + DATA_KEY$6;
2744
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
2745
  var CLASS_PREFIX = 'bs-tooltip';
2746
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
2747
  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
2748
  var DefaultType$4 = {
2749
    animation: 'boolean',
2750
    template: 'string',
2751
    title: '(string|element|function)',
2752
    trigger: 'string',
2753
    delay: '(number|object)',
2754
    html: 'boolean',
2755
    selector: '(string|boolean)',
2756
    placement: '(string|function)',
2757
    offset: '(number|string|function)',
2758
    container: '(string|element|boolean)',
2759
    fallbackPlacement: '(string|array)',
2760
    boundary: '(string|element)',
2761
    sanitize: 'boolean',
2762
    sanitizeFn: '(null|function)',
2763
    whiteList: 'object'
2764
  };
2765
  var AttachmentMap$1 = {
2766
    AUTO: 'auto',
2767
    TOP: 'top',
2768
    RIGHT: 'right',
2769
    BOTTOM: 'bottom',
2770
    LEFT: 'left'
2771
  };
2772
  var Default$4 = {
2773
    animation: true,
2774
    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
2775
    trigger: 'hover focus',
2776
    title: '',
2777
    delay: 0,
2778
    html: false,
2779
    selector: false,
2780
    placement: 'top',
2781
    offset: 0,
2782
    container: false,
2783
    fallbackPlacement: 'flip',
2784
    boundary: 'scrollParent',
2785
    sanitize: true,
2786
    sanitizeFn: null,
2787
    whiteList: DefaultWhitelist
2788
  };
2789
  var HoverState = {
2790
    SHOW: 'show',
2791
    OUT: 'out'
2792
  };
2793
  var Event$6 = {
2794
    HIDE: "hide" + EVENT_KEY$6,
2795
    HIDDEN: "hidden" + EVENT_KEY$6,
2796
    SHOW: "show" + EVENT_KEY$6,
2797
    SHOWN: "shown" + EVENT_KEY$6,
2798
    INSERTED: "inserted" + EVENT_KEY$6,
2799
    CLICK: "click" + EVENT_KEY$6,
2800
    FOCUSIN: "focusin" + EVENT_KEY$6,
2801
    FOCUSOUT: "focusout" + EVENT_KEY$6,
2802
    MOUSEENTER: "mouseenter" + EVENT_KEY$6,
2803
    MOUSELEAVE: "mouseleave" + EVENT_KEY$6
2804
  };
2805
  var ClassName$6 = {
2806
    FADE: 'fade',
2807
    SHOW: 'show'
2808
  };
2809
  var Selector$6 = {
2810
    TOOLTIP: '.tooltip',
2811
    TOOLTIP_INNER: '.tooltip-inner',
2812
    ARROW: '.arrow'
2813
  };
2814
  var Trigger = {
2815
    HOVER: 'hover',
2816
    FOCUS: 'focus',
2817
    CLICK: 'click',
2818
    MANUAL: 'manual'
2819
    /**
2820
     * ------------------------------------------------------------------------
2821
     * Class Definition
2822
     * ------------------------------------------------------------------------
2823
     */
2824
2825
  };
2826
2827
  var Tooltip =
2828
  /*#__PURE__*/
2829
  function () {
2830
    function Tooltip(element, config) {
2831
      /**
2832
       * Check for Popper dependency
2833
       * Popper - https://popper.js.org
2834
       */
2835
      if (typeof Popper === 'undefined') {
2836
        throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
2837
      } // private
2838
2839
2840
      this._isEnabled = true;
2841
      this._timeout = 0;
2842
      this._hoverState = '';
2843
      this._activeTrigger = {};
2844
      this._popper = null; // Protected
2845
2846
      this.element = element;
2847
      this.config = this._getConfig(config);
2848
      this.tip = null;
2849
2850
      this._setListeners();
2851
    } // Getters
2852
2853
2854
    var _proto = Tooltip.prototype;
2855
2856
    // Public
2857
    _proto.enable = function enable() {
2858
      this._isEnabled = true;
2859
    };
2860
2861
    _proto.disable = function disable() {
2862
      this._isEnabled = false;
2863
    };
2864
2865
    _proto.toggleEnabled = function toggleEnabled() {
2866
      this._isEnabled = !this._isEnabled;
2867
    };
2868
2869
    _proto.toggle = function toggle(event) {
2870
      if (!this._isEnabled) {
2871
        return;
2872
      }
2873
2874
      if (event) {
2875
        var dataKey = this.constructor.DATA_KEY;
2876
        var context = $(event.currentTarget).data(dataKey);
2877
2878
        if (!context) {
2879
          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
2880
          $(event.currentTarget).data(dataKey, context);
2881
        }
2882
2883
        context._activeTrigger.click = !context._activeTrigger.click;
2884
2885
        if (context._isWithActiveTrigger()) {
2886
          context._enter(null, context);
2887
        } else {
2888
          context._leave(null, context);
2889
        }
2890
      } else {
2891
        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {
2892
          this._leave(null, this);
2893
2894
          return;
2895
        }
2896
2897
        this._enter(null, this);
2898
      }
2899
    };
2900
2901
    _proto.dispose = function dispose() {
2902
      clearTimeout(this._timeout);
2903
      $.removeData(this.element, this.constructor.DATA_KEY);
2904
      $(this.element).off(this.constructor.EVENT_KEY);
2905
      $(this.element).closest('.modal').off('hide.bs.modal');
2906
2907
      if (this.tip) {
2908
        $(this.tip).remove();
2909
      }
2910
2911
      this._isEnabled = null;
2912
      this._timeout = null;
2913
      this._hoverState = null;
2914
      this._activeTrigger = null;
2915
2916
      if (this._popper !== null) {
2917
        this._popper.destroy();
2918
      }
2919
2920
      this._popper = null;
2921
      this.element = null;
2922
      this.config = null;
2923
      this.tip = null;
2924
    };
2925
2926
    _proto.show = function show() {
2927
      var _this = this;
2928
2929
      if ($(this.element).css('display') === 'none') {
2930
        throw new Error('Please use show on visible elements');
2931
      }
2932
2933
      var showEvent = $.Event(this.constructor.Event.SHOW);
2934
2935
      if (this.isWithContent() && this._isEnabled) {
2936
        $(this.element).trigger(showEvent);
2937
        var shadowRoot = Util.findShadowRoot(this.element);
2938
        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
2939
2940
        if (showEvent.isDefaultPrevented() || !isInTheDom) {
2941
          return;
2942
        }
2943
2944
        var tip = this.getTipElement();
2945
        var tipId = Util.getUID(this.constructor.NAME);
2946
        tip.setAttribute('id', tipId);
2947
        this.element.setAttribute('aria-describedby', tipId);
2948
        this.setContent();
2949
2950
        if (this.config.animation) {
2951
          $(tip).addClass(ClassName$6.FADE);
2952
        }
2953
2954
        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
2955
2956
        var attachment = this._getAttachment(placement);
2957
2958
        this.addAttachmentClass(attachment);
2959
2960
        var container = this._getContainer();
2961
2962
        $(tip).data(this.constructor.DATA_KEY, this);
2963
2964
        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {
2965
          $(tip).appendTo(container);
2966
        }
2967
2968
        $(this.element).trigger(this.constructor.Event.INSERTED);
2969
        this._popper = new Popper(this.element, tip, {
2970
          placement: attachment,
2971
          modifiers: {
2972
            offset: this._getOffset(),
2973
            flip: {
2974
              behavior: this.config.fallbackPlacement
2975
            },
2976
            arrow: {
2977
              element: Selector$6.ARROW
2978
            },
2979
            preventOverflow: {
2980
              boundariesElement: this.config.boundary
2981
            }
2982
          },
2983
          onCreate: function onCreate(data) {
2984
            if (data.originalPlacement !== data.placement) {
2985
              _this._handlePopperPlacementChange(data);
2986
            }
2987
          },
2988
          onUpdate: function onUpdate(data) {
2989
            return _this._handlePopperPlacementChange(data);
2990
          }
2991
        });
2992
        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra
2993
        // empty mouseover listeners to the body's immediate children;
2994
        // only needed because of broken event delegation on iOS
2995
        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
2996
2997
        if ('ontouchstart' in document.documentElement) {
2998
          $(document.body).children().on('mouseover', null, $.noop);
2999
        }
3000
3001
        var complete = function complete() {
3002
          if (_this.config.animation) {
3003
            _this._fixTransition();
3004
          }
3005
3006
          var prevHoverState = _this._hoverState;
3007
          _this._hoverState = null;
3008
          $(_this.element).trigger(_this.constructor.Event.SHOWN);
3009
3010
          if (prevHoverState === HoverState.OUT) {
3011
            _this._leave(null, _this);
3012
          }
3013
        };
3014
3015
        if ($(this.tip).hasClass(ClassName$6.FADE)) {
3016
          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
3017
          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3018
        } else {
3019
          complete();
3020
        }
3021
      }
3022
    };
3023
3024
    _proto.hide = function hide(callback) {
3025
      var _this2 = this;
3026
3027
      var tip = this.getTipElement();
3028
      var hideEvent = $.Event(this.constructor.Event.HIDE);
3029
3030
      var complete = function complete() {
3031
        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
3032
          tip.parentNode.removeChild(tip);
3033
        }
3034
3035
        _this2._cleanTipClass();
3036
3037
        _this2.element.removeAttribute('aria-describedby');
3038
3039
        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
3040
3041
        if (_this2._popper !== null) {
3042
          _this2._popper.destroy();
3043
        }
3044
3045
        if (callback) {
3046
          callback();
3047
        }
3048
      };
3049
3050
      $(this.element).trigger(hideEvent);
3051
3052
      if (hideEvent.isDefaultPrevented()) {
3053
        return;
3054
      }
3055
3056
      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra
3057
      // empty mouseover listeners we added for iOS support
3058
3059
      if ('ontouchstart' in document.documentElement) {
3060
        $(document.body).children().off('mouseover', null, $.noop);
3061
      }
3062
3063
      this._activeTrigger[Trigger.CLICK] = false;
3064
      this._activeTrigger[Trigger.FOCUS] = false;
3065
      this._activeTrigger[Trigger.HOVER] = false;
3066
3067
      if ($(this.tip).hasClass(ClassName$6.FADE)) {
3068
        var transitionDuration = Util.getTransitionDurationFromElement(tip);
3069
        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3070
      } else {
3071
        complete();
3072
      }
3073
3074
      this._hoverState = '';
3075
    };
3076
3077
    _proto.update = function update() {
3078
      if (this._popper !== null) {
3079
        this._popper.scheduleUpdate();
3080
      }
3081
    } // Protected
3082
    ;
3083
3084
    _proto.isWithContent = function isWithContent() {
3085
      return Boolean(this.getTitle());
3086
    };
3087
3088
    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
3089
      $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
3090
    };
3091
3092
    _proto.getTipElement = function getTipElement() {
3093
      this.tip = this.tip || $(this.config.template)[0];
3094
      return this.tip;
3095
    };
3096
3097
    _proto.setContent = function setContent() {
3098
      var tip = this.getTipElement();
3099
      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());
3100
      $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW);
3101
    };
3102
3103
    _proto.setElementContent = function setElementContent($element, content) {
3104
      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
3105
        // Content is a DOM node or a jQuery
3106
        if (this.config.html) {
3107
          if (!$(content).parent().is($element)) {
3108
            $element.empty().append(content);
3109
          }
3110
        } else {
3111
          $element.text($(content).text());
3112
        }
3113
3114
        return;
3115
      }
3116
3117
      if (this.config.html) {
3118
        if (this.config.sanitize) {
3119
          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
3120
        }
3121
3122
        $element.html(content);
3123
      } else {
3124
        $element.text(content);
3125
      }
3126
    };
3127
3128
    _proto.getTitle = function getTitle() {
3129
      var title = this.element.getAttribute('data-original-title');
3130
3131
      if (!title) {
3132
        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
3133
      }
3134
3135
      return title;
3136
    } // Private
3137
    ;
3138
3139
    _proto._getOffset = function _getOffset() {
3140
      var _this3 = this;
3141
3142
      var offset = {};
3143
3144
      if (typeof this.config.offset === 'function') {
3145
        offset.fn = function (data) {
3146
          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
3147
          return data;
3148
        };
3149
      } else {
3150
        offset.offset = this.config.offset;
3151
      }
3152
3153
      return offset;
3154
    };
3155
3156
    _proto._getContainer = function _getContainer() {
3157
      if (this.config.container === false) {
3158
        return document.body;
3159
      }
3160
3161
      if (Util.isElement(this.config.container)) {
3162
        return $(this.config.container);
3163
      }
3164
3165
      return $(document).find(this.config.container);
3166
    };
3167
3168
    _proto._getAttachment = function _getAttachment(placement) {
3169
      return AttachmentMap$1[placement.toUpperCase()];
3170
    };
3171
3172
    _proto._setListeners = function _setListeners() {
3173
      var _this4 = this;
3174
3175
      var triggers = this.config.trigger.split(' ');
3176
      triggers.forEach(function (trigger) {
3177
        if (trigger === 'click') {
3178
          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
3179
            return _this4.toggle(event);
3180
          });
3181
        } else if (trigger !== Trigger.MANUAL) {
3182
          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
3183
          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
3184
          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
3185
            return _this4._enter(event);
3186
          }).on(eventOut, _this4.config.selector, function (event) {
3187
            return _this4._leave(event);
3188
          });
3189
        }
3190
      });
3191
      $(this.element).closest('.modal').on('hide.bs.modal', function () {
3192
        if (_this4.element) {
3193
          _this4.hide();
3194
        }
3195
      });
3196
3197
      if (this.config.selector) {
3198
        this.config = _objectSpread({}, this.config, {
3199
          trigger: 'manual',
3200
          selector: ''
3201
        });
3202
      } else {
3203
        this._fixTitle();
3204
      }
3205
    };
3206
3207
    _proto._fixTitle = function _fixTitle() {
3208
      var titleType = typeof this.element.getAttribute('data-original-title');
3209
3210
      if (this.element.getAttribute('title') || titleType !== 'string') {
3211
        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
3212
        this.element.setAttribute('title', '');
3213
      }
3214
    };
3215
3216
    _proto._enter = function _enter(event, context) {
3217
      var dataKey = this.constructor.DATA_KEY;
3218
      context = context || $(event.currentTarget).data(dataKey);
3219
3220
      if (!context) {
3221
        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
3222
        $(event.currentTarget).data(dataKey, context);
3223
      }
3224
3225
      if (event) {
3226
        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
3227
      }
3228
3229
      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {
3230
        context._hoverState = HoverState.SHOW;
3231
        return;
3232
      }
3233
3234
      clearTimeout(context._timeout);
3235
      context._hoverState = HoverState.SHOW;
3236
3237
      if (!context.config.delay || !context.config.delay.show) {
3238
        context.show();
3239
        return;
3240
      }
3241
3242
      context._timeout = setTimeout(function () {
3243
        if (context._hoverState === HoverState.SHOW) {
3244
          context.show();
3245
        }
3246
      }, context.config.delay.show);
3247
    };
3248
3249
    _proto._leave = function _leave(event, context) {
3250
      var dataKey = this.constructor.DATA_KEY;
3251
      context = context || $(event.currentTarget).data(dataKey);
3252
3253
      if (!context) {
3254
        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
3255
        $(event.currentTarget).data(dataKey, context);
3256
      }
3257
3258
      if (event) {
3259
        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
3260
      }
3261
3262
      if (context._isWithActiveTrigger()) {
3263
        return;
3264
      }
3265
3266
      clearTimeout(context._timeout);
3267
      context._hoverState = HoverState.OUT;
3268
3269
      if (!context.config.delay || !context.config.delay.hide) {
3270
        context.hide();
3271
        return;
3272
      }
3273
3274
      context._timeout = setTimeout(function () {
3275
        if (context._hoverState === HoverState.OUT) {
3276
          context.hide();
3277
        }
3278
      }, context.config.delay.hide);
3279
    };
3280
3281
    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
3282
      for (var trigger in this._activeTrigger) {
3283
        if (this._activeTrigger[trigger]) {
3284
          return true;
3285
        }
3286
      }
3287
3288
      return false;
3289
    };
3290
3291
    _proto._getConfig = function _getConfig(config) {
3292
      var dataAttributes = $(this.element).data();
3293
      Object.keys(dataAttributes).forEach(function (dataAttr) {
3294
        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
3295
          delete dataAttributes[dataAttr];
3296
        }
3297
      });
3298
      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
3299
3300
      if (typeof config.delay === 'number') {
3301
        config.delay = {
3302
          show: config.delay,
3303
          hide: config.delay
3304
        };
3305
      }
3306
3307
      if (typeof config.title === 'number') {
3308
        config.title = config.title.toString();
3309
      }
3310
3311
      if (typeof config.content === 'number') {
3312
        config.content = config.content.toString();
3313
      }
3314
3315
      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
3316
3317
      if (config.sanitize) {
3318
        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
3319
      }
3320
3321
      return config;
3322
    };
3323
3324
    _proto._getDelegateConfig = function _getDelegateConfig() {
3325
      var config = {};
3326
3327
      if (this.config) {
3328
        for (var key in this.config) {
3329
          if (this.constructor.Default[key] !== this.config[key]) {
3330
            config[key] = this.config[key];
3331
          }
3332
        }
3333
      }
3334
3335
      return config;
3336
    };
3337
3338
    _proto._cleanTipClass = function _cleanTipClass() {
3339
      var $tip = $(this.getTipElement());
3340
      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
3341
3342
      if (tabClass !== null && tabClass.length) {
3343
        $tip.removeClass(tabClass.join(''));
3344
      }
3345
    };
3346
3347
    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
3348
      var popperInstance = popperData.instance;
3349
      this.tip = popperInstance.popper;
3350
3351
      this._cleanTipClass();
3352
3353
      this.addAttachmentClass(this._getAttachment(popperData.placement));
3354
    };
3355
3356
    _proto._fixTransition = function _fixTransition() {
3357
      var tip = this.getTipElement();
3358
      var initConfigAnimation = this.config.animation;
3359
3360
      if (tip.getAttribute('x-placement') !== null) {
3361
        return;
3362
      }
3363
3364
      $(tip).removeClass(ClassName$6.FADE);
3365
      this.config.animation = false;
3366
      this.hide();
3367
      this.show();
3368
      this.config.animation = initConfigAnimation;
3369
    } // Static
3370
    ;
3371
3372
    Tooltip._jQueryInterface = function _jQueryInterface(config) {
3373
      return this.each(function () {
3374
        var data = $(this).data(DATA_KEY$6);
3375
3376
        var _config = typeof config === 'object' && config;
3377
3378
        if (!data && /dispose|hide/.test(config)) {
3379
          return;
3380
        }
3381
3382
        if (!data) {
3383
          data = new Tooltip(this, _config);
3384
          $(this).data(DATA_KEY$6, data);
3385
        }
3386
3387
        if (typeof config === 'string') {
3388
          if (typeof data[config] === 'undefined') {
3389
            throw new TypeError("No method named \"" + config + "\"");
3390
          }
3391
3392
          data[config]();
3393
        }
3394
      });
3395
    };
3396
3397
    _createClass(Tooltip, null, [{
3398
      key: "VERSION",
3399
      get: function get() {
3400
        return VERSION$6;
3401
      }
3402
    }, {
3403
      key: "Default",
3404
      get: function get() {
3405
        return Default$4;
3406
      }
3407
    }, {
3408
      key: "NAME",
3409
      get: function get() {
3410
        return NAME$6;
3411
      }
3412
    }, {
3413
      key: "DATA_KEY",
3414
      get: function get() {
3415
        return DATA_KEY$6;
3416
      }
3417
    }, {
3418
      key: "Event",
3419
      get: function get() {
3420
        return Event$6;
3421
      }
3422
    }, {
3423
      key: "EVENT_KEY",
3424
      get: function get() {
3425
        return EVENT_KEY$6;
3426
      }
3427
    }, {
3428
      key: "DefaultType",
3429
      get: function get() {
3430
        return DefaultType$4;
3431
      }
3432
    }]);
3433
3434
    return Tooltip;
3435
  }();
3436
  /**
3437
   * ------------------------------------------------------------------------
3438
   * jQuery
3439
   * ------------------------------------------------------------------------
3440
   */
3441
3442
3443
  $.fn[NAME$6] = Tooltip._jQueryInterface;
3444
  $.fn[NAME$6].Constructor = Tooltip;
3445
3446
  $.fn[NAME$6].noConflict = function () {
3447
    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;
3448
    return Tooltip._jQueryInterface;
3449
  };
3450
3451
  /**
3452
   * ------------------------------------------------------------------------
3453
   * Constants
3454
   * ------------------------------------------------------------------------
3455
   */
3456
3457
  var NAME$7 = 'popover';
3458
  var VERSION$7 = '4.3.1';
3459
  var DATA_KEY$7 = 'bs.popover';
3460
  var EVENT_KEY$7 = "." + DATA_KEY$7;
3461
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
3462
  var CLASS_PREFIX$1 = 'bs-popover';
3463
  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
3464
3465
  var Default$5 = _objectSpread({}, Tooltip.Default, {
3466
    placement: 'right',
3467
    trigger: 'click',
3468
    content: '',
3469
    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
3470
  });
3471
3472
  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {
3473
    content: '(string|element|function)'
3474
  });
3475
3476
  var ClassName$7 = {
3477
    FADE: 'fade',
3478
    SHOW: 'show'
3479
  };
3480
  var Selector$7 = {
3481
    TITLE: '.popover-header',
3482
    CONTENT: '.popover-body'
3483
  };
3484
  var Event$7 = {
3485
    HIDE: "hide" + EVENT_KEY$7,
3486
    HIDDEN: "hidden" + EVENT_KEY$7,
3487
    SHOW: "show" + EVENT_KEY$7,
3488
    SHOWN: "shown" + EVENT_KEY$7,
3489
    INSERTED: "inserted" + EVENT_KEY$7,
3490
    CLICK: "click" + EVENT_KEY$7,
3491
    FOCUSIN: "focusin" + EVENT_KEY$7,
3492
    FOCUSOUT: "focusout" + EVENT_KEY$7,
3493
    MOUSEENTER: "mouseenter" + EVENT_KEY$7,
3494
    MOUSELEAVE: "mouseleave" + EVENT_KEY$7
3495
    /**
3496
     * ------------------------------------------------------------------------
3497
     * Class Definition
3498
     * ------------------------------------------------------------------------
3499
     */
3500
3501
  };
3502
3503
  var Popover =
3504
  /*#__PURE__*/
3505
  function (_Tooltip) {
3506
    _inheritsLoose(Popover, _Tooltip);
3507
3508
    function Popover() {
3509
      return _Tooltip.apply(this, arguments) || this;
3510
    }
3511
3512
    var _proto = Popover.prototype;
3513
3514
    // Overrides
3515
    _proto.isWithContent = function isWithContent() {
3516
      return this.getTitle() || this._getContent();
3517
    };
3518
3519
    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
3520
      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
3521
    };
3522
3523
    _proto.getTipElement = function getTipElement() {
3524
      this.tip = this.tip || $(this.config.template)[0];
3525
      return this.tip;
3526
    };
3527
3528
    _proto.setContent = function setContent() {
3529
      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
3530
3531
      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());
3532
3533
      var content = this._getContent();
3534
3535
      if (typeof content === 'function') {
3536
        content = content.call(this.element);
3537
      }
3538
3539
      this.setElementContent($tip.find(Selector$7.CONTENT), content);
3540
      $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
3541
    } // Private
3542
    ;
3543
3544
    _proto._getContent = function _getContent() {
3545
      return this.element.getAttribute('data-content') || this.config.content;
3546
    };
3547
3548
    _proto._cleanTipClass = function _cleanTipClass() {
3549
      var $tip = $(this.getTipElement());
3550
      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
3551
3552
      if (tabClass !== null && tabClass.length > 0) {
3553
        $tip.removeClass(tabClass.join(''));
3554
      }
3555
    } // Static
3556
    ;
3557
3558
    Popover._jQueryInterface = function _jQueryInterface(config) {
3559
      return this.each(function () {
3560
        var data = $(this).data(DATA_KEY$7);
3561
3562
        var _config = typeof config === 'object' ? config : null;
3563
3564
        if (!data && /dispose|hide/.test(config)) {
3565
          return;
3566
        }
3567
3568
        if (!data) {
3569
          data = new Popover(this, _config);
3570
          $(this).data(DATA_KEY$7, data);
3571
        }
3572
3573
        if (typeof config === 'string') {
3574
          if (typeof data[config] === 'undefined') {
3575
            throw new TypeError("No method named \"" + config + "\"");
3576
          }
3577
3578
          data[config]();
3579
        }
3580
      });
3581
    };
3582
3583
    _createClass(Popover, null, [{
3584
      key: "VERSION",
3585
      // Getters
3586
      get: function get() {
3587
        return VERSION$7;
3588
      }
3589
    }, {
3590
      key: "Default",
3591
      get: function get() {
3592
        return Default$5;
3593
      }
3594
    }, {
3595
      key: "NAME",
3596
      get: function get() {
3597
        return NAME$7;
3598
      }
3599
    }, {
3600
      key: "DATA_KEY",
3601
      get: function get() {
3602
        return DATA_KEY$7;
3603
      }
3604
    }, {
3605
      key: "Event",
3606
      get: function get() {
3607
        return Event$7;
3608
      }
3609
    }, {
3610
      key: "EVENT_KEY",
3611
      get: function get() {
3612
        return EVENT_KEY$7;
3613
      }
3614
    }, {
3615
      key: "DefaultType",
3616
      get: function get() {
3617
        return DefaultType$5;
3618
      }
3619
    }]);
3620
3621
    return Popover;
3622
  }(Tooltip);
3623
  /**
3624
   * ------------------------------------------------------------------------
3625
   * jQuery
3626
   * ------------------------------------------------------------------------
3627
   */
3628
3629
3630
  $.fn[NAME$7] = Popover._jQueryInterface;
3631
  $.fn[NAME$7].Constructor = Popover;
3632
3633
  $.fn[NAME$7].noConflict = function () {
3634
    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;
3635
    return Popover._jQueryInterface;
3636
  };
3637
3638
  /**
3639
   * ------------------------------------------------------------------------
3640
   * Constants
3641
   * ------------------------------------------------------------------------
3642
   */
3643
3644
  var NAME$8 = 'scrollspy';
3645
  var VERSION$8 = '4.3.1';
3646
  var DATA_KEY$8 = 'bs.scrollspy';
3647
  var EVENT_KEY$8 = "." + DATA_KEY$8;
3648
  var DATA_API_KEY$6 = '.data-api';
3649
  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];
3650
  var Default$6 = {
3651
    offset: 10,
3652
    method: 'auto',
3653
    target: ''
3654
  };
3655
  var DefaultType$6 = {
3656
    offset: 'number',
3657
    method: 'string',
3658
    target: '(string|element)'
3659
  };
3660
  var Event$8 = {
3661
    ACTIVATE: "activate" + EVENT_KEY$8,
3662
    SCROLL: "scroll" + EVENT_KEY$8,
3663
    LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6
3664
  };
3665
  var ClassName$8 = {
3666
    DROPDOWN_ITEM: 'dropdown-item',
3667
    DROPDOWN_MENU: 'dropdown-menu',
3668
    ACTIVE: 'active'
3669
  };
3670
  var Selector$8 = {
3671
    DATA_SPY: '[data-spy="scroll"]',
3672
    ACTIVE: '.active',
3673
    NAV_LIST_GROUP: '.nav, .list-group',
3674
    NAV_LINKS: '.nav-link',
3675
    NAV_ITEMS: '.nav-item',
3676
    LIST_ITEMS: '.list-group-item',
3677
    DROPDOWN: '.dropdown',
3678
    DROPDOWN_ITEMS: '.dropdown-item',
3679
    DROPDOWN_TOGGLE: '.dropdown-toggle'
3680
  };
3681
  var OffsetMethod = {
3682
    OFFSET: 'offset',
3683
    POSITION: 'position'
3684
    /**
3685
     * ------------------------------------------------------------------------
3686
     * Class Definition
3687
     * ------------------------------------------------------------------------
3688
     */
3689
3690
  };
3691
3692
  var ScrollSpy =
3693
  /*#__PURE__*/
3694
  function () {
3695
    function ScrollSpy(element, config) {
3696
      var _this = this;
3697
3698
      this._element = element;
3699
      this._scrollElement = element.tagName === 'BODY' ? window : element;
3700
      this._config = this._getConfig(config);
3701
      this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS);
3702
      this._offsets = [];
3703
      this._targets = [];
3704
      this._activeTarget = null;
3705
      this._scrollHeight = 0;
3706
      $(this._scrollElement).on(Event$8.SCROLL, function (event) {
3707
        return _this._process(event);
3708
      });
3709
      this.refresh();
3710
3711
      this._process();
3712
    } // Getters
3713
3714
3715
    var _proto = ScrollSpy.prototype;
3716
3717
    // Public
3718
    _proto.refresh = function refresh() {
3719
      var _this2 = this;
3720
3721
      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
3722
      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
3723
      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
3724
      this._offsets = [];
3725
      this._targets = [];
3726
      this._scrollHeight = this._getScrollHeight();
3727
      var targets = [].slice.call(document.querySelectorAll(this._selector));
3728
      targets.map(function (element) {
3729
        var target;
3730
        var targetSelector = Util.getSelectorFromElement(element);
3731
3732
        if (targetSelector) {
3733
          target = document.querySelector(targetSelector);
3734
        }
3735
3736
        if (target) {
3737
          var targetBCR = target.getBoundingClientRect();
3738
3739
          if (targetBCR.width || targetBCR.height) {
3740
            // TODO (fat): remove sketch reliance on jQuery position/offset
3741
            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
3742
          }
3743
        }
3744
3745
        return null;
3746
      }).filter(function (item) {
3747
        return item;
3748
      }).sort(function (a, b) {
3749
        return a[0] - b[0];
3750
      }).forEach(function (item) {
3751
        _this2._offsets.push(item[0]);
3752
3753
        _this2._targets.push(item[1]);
3754
      });
3755
    };
3756
3757
    _proto.dispose = function dispose() {
3758
      $.removeData(this._element, DATA_KEY$8);
3759
      $(this._scrollElement).off(EVENT_KEY$8);
3760
      this._element = null;
3761
      this._scrollElement = null;
3762
      this._config = null;
3763
      this._selector = null;
3764
      this._offsets = null;
3765
      this._targets = null;
3766
      this._activeTarget = null;
3767
      this._scrollHeight = null;
3768
    } // Private
3769
    ;
3770
3771
    _proto._getConfig = function _getConfig(config) {
3772
      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
3773
3774
      if (typeof config.target !== 'string') {
3775
        var id = $(config.target).attr('id');
3776
3777
        if (!id) {
3778
          id = Util.getUID(NAME$8);
3779
          $(config.target).attr('id', id);
3780
        }
3781
3782
        config.target = "#" + id;
3783
      }
3784
3785
      Util.typeCheckConfig(NAME$8, config, DefaultType$6);
3786
      return config;
3787
    };
3788
3789
    _proto._getScrollTop = function _getScrollTop() {
3790
      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
3791
    };
3792
3793
    _proto._getScrollHeight = function _getScrollHeight() {
3794
      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
3795
    };
3796
3797
    _proto._getOffsetHeight = function _getOffsetHeight() {
3798
      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
3799
    };
3800
3801
    _proto._process = function _process() {
3802
      var scrollTop = this._getScrollTop() + this._config.offset;
3803
3804
      var scrollHeight = this._getScrollHeight();
3805
3806
      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
3807
3808
      if (this._scrollHeight !== scrollHeight) {
3809
        this.refresh();
3810
      }
3811
3812
      if (scrollTop >= maxScroll) {
3813
        var target = this._targets[this._targets.length - 1];
3814
3815
        if (this._activeTarget !== target) {
3816
          this._activate(target);
3817
        }
3818
3819
        return;
3820
      }
3821
3822
      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
3823
        this._activeTarget = null;
3824
3825
        this._clear();
3826
3827
        return;
3828
      }
3829
3830
      var offsetLength = this._offsets.length;
3831
3832
      for (var i = offsetLength; i--;) {
3833
        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
3834
3835
        if (isActiveTarget) {
3836
          this._activate(this._targets[i]);
3837
        }
3838
      }
3839
    };
3840
3841
    _proto._activate = function _activate(target) {
3842
      this._activeTarget = target;
3843
3844
      this._clear();
3845
3846
      var queries = this._selector.split(',').map(function (selector) {
3847
        return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
3848
      });
3849
3850
      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
3851
3852
      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {
3853
        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);
3854
        $link.addClass(ClassName$8.ACTIVE);
3855
      } else {
3856
        // Set triggered link as active
3857
        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active
3858
        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
3859
3860
        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + ", " + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item
3861
3862
        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);
3863
      }
3864
3865
      $(this._scrollElement).trigger(Event$8.ACTIVATE, {
3866
        relatedTarget: target
3867
      });
3868
    };
3869
3870
    _proto._clear = function _clear() {
3871
      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
3872
        return node.classList.contains(ClassName$8.ACTIVE);
3873
      }).forEach(function (node) {
3874
        return node.classList.remove(ClassName$8.ACTIVE);
3875
      });
3876
    } // Static
3877
    ;
3878
3879
    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
3880
      return this.each(function () {
3881
        var data = $(this).data(DATA_KEY$8);
3882
3883
        var _config = typeof config === 'object' && config;
3884
3885
        if (!data) {
3886
          data = new ScrollSpy(this, _config);
3887
          $(this).data(DATA_KEY$8, data);
3888
        }
3889
3890
        if (typeof config === 'string') {
3891
          if (typeof data[config] === 'undefined') {
3892
            throw new TypeError("No method named \"" + config + "\"");
3893
          }
3894
3895
          data[config]();
3896
        }
3897
      });
3898
    };
3899
3900
    _createClass(ScrollSpy, null, [{
3901
      key: "VERSION",
3902
      get: function get() {
3903
        return VERSION$8;
3904
      }
3905
    }, {
3906
      key: "Default",
3907
      get: function get() {
3908
        return Default$6;
3909
      }
3910
    }]);
3911
3912
    return ScrollSpy;
3913
  }();
3914
  /**
3915
   * ------------------------------------------------------------------------
3916
   * Data Api implementation
3917
   * ------------------------------------------------------------------------
3918
   */
3919
3920
3921
  $(window).on(Event$8.LOAD_DATA_API, function () {
3922
    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));
3923
    var scrollSpysLength = scrollSpys.length;
3924
3925
    for (var i = scrollSpysLength; i--;) {
3926
      var $spy = $(scrollSpys[i]);
3927
3928
      ScrollSpy._jQueryInterface.call($spy, $spy.data());
3929
    }
3930
  });
3931
  /**
3932
   * ------------------------------------------------------------------------
3933
   * jQuery
3934
   * ------------------------------------------------------------------------
3935
   */
3936
3937
  $.fn[NAME$8] = ScrollSpy._jQueryInterface;
3938
  $.fn[NAME$8].Constructor = ScrollSpy;
3939
3940
  $.fn[NAME$8].noConflict = function () {
3941
    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;
3942
    return ScrollSpy._jQueryInterface;
3943
  };
3944
3945
  /**
3946
   * ------------------------------------------------------------------------
3947
   * Constants
3948
   * ------------------------------------------------------------------------
3949
   */
3950
3951
  var NAME$9 = 'tab';
3952
  var VERSION$9 = '4.3.1';
3953
  var DATA_KEY$9 = 'bs.tab';
3954
  var EVENT_KEY$9 = "." + DATA_KEY$9;
3955
  var DATA_API_KEY$7 = '.data-api';
3956
  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
3957
  var Event$9 = {
3958
    HIDE: "hide" + EVENT_KEY$9,
3959
    HIDDEN: "hidden" + EVENT_KEY$9,
3960
    SHOW: "show" + EVENT_KEY$9,
3961
    SHOWN: "shown" + EVENT_KEY$9,
3962
    CLICK_DATA_API: "click" + EVENT_KEY$9 + DATA_API_KEY$7
3963
  };
3964
  var ClassName$9 = {
3965
    DROPDOWN_MENU: 'dropdown-menu',
3966
    ACTIVE: 'active',
3967
    DISABLED: 'disabled',
3968
    FADE: 'fade',
3969
    SHOW: 'show'
3970
  };
3971
  var Selector$9 = {
3972
    DROPDOWN: '.dropdown',
3973
    NAV_LIST_GROUP: '.nav, .list-group',
3974
    ACTIVE: '.active',
3975
    ACTIVE_UL: '> li > .active',
3976
    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
3977
    DROPDOWN_TOGGLE: '.dropdown-toggle',
3978
    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
3979
    /**
3980
     * ------------------------------------------------------------------------
3981
     * Class Definition
3982
     * ------------------------------------------------------------------------
3983
     */
3984
3985
  };
3986
3987
  var Tab =
3988
  /*#__PURE__*/
3989
  function () {
3990
    function Tab(element) {
3991
      this._element = element;
3992
    } // Getters
3993
3994
3995
    var _proto = Tab.prototype;
3996
3997
    // Public
3998
    _proto.show = function show() {
3999
      var _this = this;
4000
4001
      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {
4002
        return;
4003
      }
4004
4005
      var target;
4006
      var previous;
4007
      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];
4008
      var selector = Util.getSelectorFromElement(this._element);
4009
4010
      if (listElement) {
4011
        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;
4012
        previous = $.makeArray($(listElement).find(itemSelector));
4013
        previous = previous[previous.length - 1];
4014
      }
4015
4016
      var hideEvent = $.Event(Event$9.HIDE, {
4017
        relatedTarget: this._element
4018
      });
4019
      var showEvent = $.Event(Event$9.SHOW, {
4020
        relatedTarget: previous
4021
      });
4022
4023
      if (previous) {
4024
        $(previous).trigger(hideEvent);
4025
      }
4026
4027
      $(this._element).trigger(showEvent);
4028
4029
      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
4030
        return;
4031
      }
4032
4033
      if (selector) {
4034
        target = document.querySelector(selector);
4035
      }
4036
4037
      this._activate(this._element, listElement);
4038
4039
      var complete = function complete() {
4040
        var hiddenEvent = $.Event(Event$9.HIDDEN, {
4041
          relatedTarget: _this._element
4042
        });
4043
        var shownEvent = $.Event(Event$9.SHOWN, {
4044
          relatedTarget: previous
4045
        });
4046
        $(previous).trigger(hiddenEvent);
4047
        $(_this._element).trigger(shownEvent);
4048
      };
4049
4050
      if (target) {
4051
        this._activate(target, target.parentNode, complete);
4052
      } else {
4053
        complete();
4054
      }
4055
    };
4056
4057
    _proto.dispose = function dispose() {
4058
      $.removeData(this._element, DATA_KEY$9);
4059
      this._element = null;
4060
    } // Private
4061
    ;
4062
4063
    _proto._activate = function _activate(element, container, callback) {
4064
      var _this2 = this;
4065
4066
      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);
4067
      var active = activeElements[0];
4068
      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);
4069
4070
      var complete = function complete() {
4071
        return _this2._transitionComplete(element, active, callback);
4072
      };
4073
4074
      if (active && isTransitioning) {
4075
        var transitionDuration = Util.getTransitionDurationFromElement(active);
4076
        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
4077
      } else {
4078
        complete();
4079
      }
4080
    };
4081
4082
    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
4083
      if (active) {
4084
        $(active).removeClass(ClassName$9.ACTIVE);
4085
        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];
4086
4087
        if (dropdownChild) {
4088
          $(dropdownChild).removeClass(ClassName$9.ACTIVE);
4089
        }
4090
4091
        if (active.getAttribute('role') === 'tab') {
4092
          active.setAttribute('aria-selected', false);
4093
        }
4094
      }
4095
4096
      $(element).addClass(ClassName$9.ACTIVE);
4097
4098
      if (element.getAttribute('role') === 'tab') {
4099
        element.setAttribute('aria-selected', true);
4100
      }
4101
4102
      Util.reflow(element);
4103
4104
      if (element.classList.contains(ClassName$9.FADE)) {
4105
        element.classList.add(ClassName$9.SHOW);
4106
      }
4107
4108
      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
4109
        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
4110
4111
        if (dropdownElement) {
4112
          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));
4113
          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);
4114
        }
4115
4116
        element.setAttribute('aria-expanded', true);
4117
      }
4118
4119
      if (callback) {
4120
        callback();
4121
      }
4122
    } // Static
4123
    ;
4124
4125
    Tab._jQueryInterface = function _jQueryInterface(config) {
4126
      return this.each(function () {
4127
        var $this = $(this);
4128
        var data = $this.data(DATA_KEY$9);
4129
4130
        if (!data) {
4131
          data = new Tab(this);
4132
          $this.data(DATA_KEY$9, data);
4133
        }
4134
4135
        if (typeof config === 'string') {
4136
          if (typeof data[config] === 'undefined') {
4137
            throw new TypeError("No method named \"" + config + "\"");
4138
          }
4139
4140
          data[config]();
4141
        }
4142
      });
4143
    };
4144
4145
    _createClass(Tab, null, [{
4146
      key: "VERSION",
4147
      get: function get() {
4148
        return VERSION$9;
4149
      }
4150
    }]);
4151
4152
    return Tab;
4153
  }();
4154
  /**
4155
   * ------------------------------------------------------------------------
4156
   * Data Api implementation
4157
   * ------------------------------------------------------------------------
4158
   */
4159
4160
4161
  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {
4162
    event.preventDefault();
4163
4164
    Tab._jQueryInterface.call($(this), 'show');
4165
  });
4166
  /**
4167
   * ------------------------------------------------------------------------
4168
   * jQuery
4169
   * ------------------------------------------------------------------------
4170
   */
4171
4172
  $.fn[NAME$9] = Tab._jQueryInterface;
4173
  $.fn[NAME$9].Constructor = Tab;
4174
4175
  $.fn[NAME$9].noConflict = function () {
4176
    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;
4177
    return Tab._jQueryInterface;
4178
  };
4179
4180
  /**
4181
   * ------------------------------------------------------------------------
4182
   * Constants
4183
   * ------------------------------------------------------------------------
4184
   */
4185
4186
  var NAME$a = 'toast';
4187
  var VERSION$a = '4.3.1';
4188
  var DATA_KEY$a = 'bs.toast';
4189
  var EVENT_KEY$a = "." + DATA_KEY$a;
4190
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
4191
  var Event$a = {
4192
    CLICK_DISMISS: "click.dismiss" + EVENT_KEY$a,
4193
    HIDE: "hide" + EVENT_KEY$a,
4194
    HIDDEN: "hidden" + EVENT_KEY$a,
4195
    SHOW: "show" + EVENT_KEY$a,
4196
    SHOWN: "shown" + EVENT_KEY$a
4197
  };
4198
  var ClassName$a = {
4199
    FADE: 'fade',
4200
    HIDE: 'hide',
4201
    SHOW: 'show',
4202
    SHOWING: 'showing'
4203
  };
4204
  var DefaultType$7 = {
4205
    animation: 'boolean',
4206
    autohide: 'boolean',
4207
    delay: 'number'
4208
  };
4209
  var Default$7 = {
4210
    animation: true,
4211
    autohide: true,
4212
    delay: 500
4213
  };
4214
  var Selector$a = {
4215
    DATA_DISMISS: '[data-dismiss="toast"]'
4216
    /**
4217
     * ------------------------------------------------------------------------
4218
     * Class Definition
4219
     * ------------------------------------------------------------------------
4220
     */
4221
4222
  };
4223
4224
  var Toast =
4225
  /*#__PURE__*/
4226
  function () {
4227
    function Toast(element, config) {
4228
      this._element = element;
4229
      this._config = this._getConfig(config);
4230
      this._timeout = null;
4231
4232
      this._setListeners();
4233
    } // Getters
4234
4235
4236
    var _proto = Toast.prototype;
4237
4238
    // Public
4239
    _proto.show = function show() {
4240
      var _this = this;
4241
4242
      $(this._element).trigger(Event$a.SHOW);
4243
4244
      if (this._config.animation) {
4245
        this._element.classList.add(ClassName$a.FADE);
4246
      }
4247
4248
      var complete = function complete() {
4249
        _this._element.classList.remove(ClassName$a.SHOWING);
4250
4251
        _this._element.classList.add(ClassName$a.SHOW);
4252
4253
        $(_this._element).trigger(Event$a.SHOWN);
4254
4255
        if (_this._config.autohide) {
4256
          _this.hide();
4257
        }
4258
      };
4259
4260
      this._element.classList.remove(ClassName$a.HIDE);
4261
4262
      this._element.classList.add(ClassName$a.SHOWING);
4263
4264
      if (this._config.animation) {
4265
        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
4266
        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
4267
      } else {
4268
        complete();
4269
      }
4270
    };
4271
4272
    _proto.hide = function hide(withoutTimeout) {
4273
      var _this2 = this;
4274
4275
      if (!this._element.classList.contains(ClassName$a.SHOW)) {
4276
        return;
4277
      }
4278
4279
      $(this._element).trigger(Event$a.HIDE);
4280
4281
      if (withoutTimeout) {
4282
        this._close();
4283
      } else {
4284
        this._timeout = setTimeout(function () {
4285
          _this2._close();
4286
        }, this._config.delay);
4287
      }
4288
    };
4289
4290
    _proto.dispose = function dispose() {
4291
      clearTimeout(this._timeout);
4292
      this._timeout = null;
4293
4294
      if (this._element.classList.contains(ClassName$a.SHOW)) {
4295
        this._element.classList.remove(ClassName$a.SHOW);
4296
      }
4297
4298
      $(this._element).off(Event$a.CLICK_DISMISS);
4299
      $.removeData(this._element, DATA_KEY$a);
4300
      this._element = null;
4301
      this._config = null;
4302
    } // Private
4303
    ;
4304
4305
    _proto._getConfig = function _getConfig(config) {
4306
      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
4307
      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
4308
      return config;
4309
    };
4310
4311
    _proto._setListeners = function _setListeners() {
4312
      var _this3 = this;
4313
4314
      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {
4315
        return _this3.hide(true);
4316
      });
4317
    };
4318
4319
    _proto._close = function _close() {
4320
      var _this4 = this;
4321
4322
      var complete = function complete() {
4323
        _this4._element.classList.add(ClassName$a.HIDE);
4324
4325
        $(_this4._element).trigger(Event$a.HIDDEN);
4326
      };
4327
4328
      this._element.classList.remove(ClassName$a.SHOW);
4329
4330
      if (this._config.animation) {
4331
        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
4332
        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
4333
      } else {
4334
        complete();
4335
      }
4336
    } // Static
4337
    ;
4338
4339
    Toast._jQueryInterface = function _jQueryInterface(config) {
4340
      return this.each(function () {
4341
        var $element = $(this);
4342
        var data = $element.data(DATA_KEY$a);
4343
4344
        var _config = typeof config === 'object' && config;
4345
4346
        if (!data) {
4347
          data = new Toast(this, _config);
4348
          $element.data(DATA_KEY$a, data);
4349
        }
4350
4351
        if (typeof config === 'string') {
4352
          if (typeof data[config] === 'undefined') {
4353
            throw new TypeError("No method named \"" + config + "\"");
4354
          }
4355
4356
          data[config](this);
4357
        }
4358
      });
4359
    };
4360
4361
    _createClass(Toast, null, [{
4362
      key: "VERSION",
4363
      get: function get() {
4364
        return VERSION$a;
4365
      }
4366
    }, {
4367
      key: "DefaultType",
4368
      get: function get() {
4369
        return DefaultType$7;
4370
      }
4371
    }, {
4372
      key: "Default",
4373
      get: function get() {
4374
        return Default$7;
4375
      }
4376
    }]);
4377
4378
    return Toast;
4379
  }();
4380
  /**
4381
   * ------------------------------------------------------------------------
4382
   * jQuery
4383
   * ------------------------------------------------------------------------
4384
   */
4385
4386
4387
  $.fn[NAME$a] = Toast._jQueryInterface;
4388
  $.fn[NAME$a].Constructor = Toast;
4389
4390
  $.fn[NAME$a].noConflict = function () {
4391
    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;
4392
    return Toast._jQueryInterface;
4393
  };
4394
4395
  /**
4396
   * --------------------------------------------------------------------------
4397
   * Bootstrap (v4.3.1): index.js
4398
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4399
   * --------------------------------------------------------------------------
4400
   */
4401
4402
  (function () {
4403
    if (typeof $ === 'undefined') {
4404
      throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
4405
    }
4406
4407
    var version = $.fn.jquery.split(' ')[0].split('.');
4408
    var minMajor = 1;
4409
    var ltMajor = 2;
4410
    var minMinor = 9;
4411
    var minPatch = 1;
4412
    var maxMajor = 4;
4413
4414
    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
4415
      throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
4416
    }
4417
  })();
4418
4419
  exports.Util = Util;
4420
  exports.Alert = Alert;
4421
  exports.Button = Button;
4422
  exports.Carousel = Carousel;
4423
  exports.Collapse = Collapse;
4424
  exports.Dropdown = Dropdown;
4425
  exports.Modal = Modal;
4426
  exports.Popover = Popover;
4427
  exports.Scrollspy = ScrollSpy;
4428
  exports.Tab = Tab;
4429
  exports.Toast = Toast;
4430
  exports.Tooltip = Tooltip;
4431
4432
  Object.defineProperty(exports, '__esModule', { value: true });
4433
4434
}));
4435
//# sourceMappingURL=bootstrap.js.map
4436