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

assets/mdb/js/bootstrap.js   F

Complexity

Total Complexity 728
Complexity/F 2.22

Size

Lines of Code 4515
Function Count 328

Duplication

Duplicated Lines 4515
Ratio 100 %

Importance

Changes 0
Metric Value
eloc 2587
dl 4515
loc 4515
rs 0.8
c 0
b 0
f 0
wmc 728
mnd 400
bc 400
fnc 328
bpm 1.2195
cpm 2.2195
noi 12

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