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