Vous êtes connecté en tant que anonymous Se Deconnecter
Browse code

intitial commit to branch nude-framework

git authored on 14/03/2019 10:43:54
Showing 1 changed files
1 1
deleted file mode 100644
... ...
@@ -1,7013 +0,0 @@
1
-/*!
2
-  * Bootstrap v4.3.1 (https://getbootstrap.com/)
3
-  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
-  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
-  */
6
-(function (global, factory) {
7
-  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
8
-  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
9
-  (global = global || self, factory(global.bootstrap = {}, global.jQuery));
10
-}(this, function (exports, $) { 'use strict';
11
-
12
-  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
-
14
-  function _defineProperties(target, props) {
15
-    for (var i = 0; i < props.length; i++) {
16
-      var descriptor = props[i];
17
-      descriptor.enumerable = descriptor.enumerable || false;
18
-      descriptor.configurable = true;
19
-      if ("value" in descriptor) descriptor.writable = true;
20
-      Object.defineProperty(target, descriptor.key, descriptor);
21
-    }
22
-  }
23
-
24
-  function _createClass(Constructor, protoProps, staticProps) {
25
-    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
26
-    if (staticProps) _defineProperties(Constructor, staticProps);
27
-    return Constructor;
28
-  }
29
-
30
-  function _defineProperty(obj, key, value) {
31
-    if (key in obj) {
32
-      Object.defineProperty(obj, key, {
33
-        value: value,
34
-        enumerable: true,
35
-        configurable: true,
36
-        writable: true
37
-      });
38
-    } else {
39
-      obj[key] = value;
40
-    }
41
-
42
-    return obj;
43
-  }
44
-
45
-  function _objectSpread(target) {
46
-    for (var i = 1; i < arguments.length; i++) {
47
-      var source = arguments[i] != null ? arguments[i] : {};
48
-      var ownKeys = Object.keys(source);
49
-
50
-      if (typeof Object.getOwnPropertySymbols === 'function') {
51
-        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
52
-          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
53
-        }));
54
-      }
55
-
56
-      ownKeys.forEach(function (key) {
57
-        _defineProperty(target, key, source[key]);
58
-      });
59
-    }
60
-
61
-    return target;
62
-  }
63
-
64
-  function _inheritsLoose(subClass, superClass) {
65
-    subClass.prototype = Object.create(superClass.prototype);
66
-    subClass.prototype.constructor = subClass;
67
-    subClass.__proto__ = superClass;
68
-  }
69
-
70
-  /**
71
-   * --------------------------------------------------------------------------
72
-   * Bootstrap (v4.3.1): util.js
73
-   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
74
-   * --------------------------------------------------------------------------
75
-   */
76
-  /**
77
-   * ------------------------------------------------------------------------
78
-   * Private TransitionEnd Helpers
79
-   * ------------------------------------------------------------------------
80
-   */
81
-
82
-  var TRANSITION_END = 'transitionend';
83
-  var MAX_UID = 1000000;
84
-  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
85
-
86
-  function toType(obj) {
87
-    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
88
-  }
89
-
90
-  function getSpecialTransitionEndEvent() {
91
-    return {
92
-      bindType: TRANSITION_END,
93
-      delegateType: TRANSITION_END,
94
-      handle: function handle(event) {
95
-        if ($(event.target).is(this)) {
96
-          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
97
-        }
98
-
99
-        return undefined; // eslint-disable-line no-undefined
100
-      }
101
-    };
102
-  }
103
-
104
-  function transitionEndEmulator(duration) {
105
-    var _this = this;
106
-
107
-    var called = false;
108
-    $(this).one(Util.TRANSITION_END, function () {
109
-      called = true;
110
-    });
111
-    setTimeout(function () {
112
-      if (!called) {
113
-        Util.triggerTransitionEnd(_this);
114
-      }
115
-    }, duration);
116
-    return this;
117
-  }
118
-
119
-  function setTransitionEndSupport() {
120
-    $.fn.emulateTransitionEnd = transitionEndEmulator;
121
-    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
122
-  }
123
-  /**
124
-   * --------------------------------------------------------------------------
125
-   * Public Util Api
126
-   * --------------------------------------------------------------------------
127
-   */
128
-
129
-
130
-  var Util = {
131
-    TRANSITION_END: 'bsTransitionEnd',
132
-    getUID: function getUID(prefix) {
133
-      do {
134
-        // eslint-disable-next-line no-bitwise
135
-        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
136
-      } while (document.getElementById(prefix));
137
-
138
-      return prefix;
139
-    },
140
-    getSelectorFromElement: function getSelectorFromElement(element) {
141
-      var selector = element.getAttribute('data-target');
142
-
143
-      if (!selector || selector === '#') {
144
-        var hrefAttr = element.getAttribute('href');
145
-        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
146
-      }
147
-
148
-      try {
149
-        return document.querySelector(selector) ? selector : null;
150
-      } catch (err) {
151
-        return null;
152
-      }
153
-    },
154
-    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
155
-      if (!element) {
156
-        return 0;
157
-      } // Get transition-duration of the element
158
-
159
-
160
-      var transitionDuration = $(element).css('transition-duration');
161
-      var transitionDelay = $(element).css('transition-delay');
162
-      var floatTransitionDuration = parseFloat(transitionDuration);
163
-      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
164
-
165
-      if (!floatTransitionDuration && !floatTransitionDelay) {
166
-        return 0;
167
-      } // If multiple durations are defined, take the first
168
-
169
-
170
-      transitionDuration = transitionDuration.split(',')[0];
171
-      transitionDelay = transitionDelay.split(',')[0];
172
-      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
173
-    },
174
-    reflow: function reflow(element) {
175
-      return element.offsetHeight;
176
-    },
177
-    triggerTransitionEnd: function triggerTransitionEnd(element) {
178
-      $(element).trigger(TRANSITION_END);
179
-    },
180
-    // TODO: Remove in v5
181
-    supportsTransitionEnd: function supportsTransitionEnd() {
182
-      return Boolean(TRANSITION_END);
183
-    },
184
-    isElement: function isElement(obj) {
185
-      return (obj[0] || obj).nodeType;
186
-    },
187
-    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
188
-      for (var property in configTypes) {
189
-        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
190
-          var expectedTypes = configTypes[property];
191
-          var value = config[property];
192
-          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
193
-
194
-          if (!new RegExp(expectedTypes).test(valueType)) {
195
-            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
196
-          }
197
-        }
198
-      }
199
-    },
200
-    findShadowRoot: function findShadowRoot(element) {
201
-      if (!document.documentElement.attachShadow) {
202
-        return null;
203
-      } // Can find the shadow root otherwise it'll return the document
204
-
205
-
206
-      if (typeof element.getRootNode === 'function') {
207
-        var root = element.getRootNode();
208
-        return root instanceof ShadowRoot ? root : null;
209
-      }
210
-
211
-      if (element instanceof ShadowRoot) {
212
-        return element;
213
-      } // when we don't find a shadow root
214
-
215
-
216
-      if (!element.parentNode) {
217
-        return null;
218
-      }
219
-
220
-      return Util.findShadowRoot(element.parentNode);
221
-    }
222
-  };
223
-  setTransitionEndSupport();
224
-
225
-  /**
226
-   * ------------------------------------------------------------------------
227
-   * Constants
228
-   * ------------------------------------------------------------------------
229
-   */
230
-
231
-  var NAME = 'alert';
232
-  var VERSION = '4.3.1';
233
-  var DATA_KEY = 'bs.alert';
234
-  var EVENT_KEY = "." + DATA_KEY;
235
-  var DATA_API_KEY = '.data-api';
236
-  var JQUERY_NO_CONFLICT = $.fn[NAME];
237
-  var Selector = {
238
-    DISMISS: '[data-dismiss="alert"]'
239
-  };
240
-  var Event = {
241
-    CLOSE: "close" + EVENT_KEY,
242
-    CLOSED: "closed" + EVENT_KEY,
243
-    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
244
-  };
245
-  var ClassName = {
246
-    ALERT: 'alert',
247
-    FADE: 'fade',
248
-    SHOW: 'show'
249
-    /**
250
-     * ------------------------------------------------------------------------
251
-     * Class Definition
252
-     * ------------------------------------------------------------------------
253
-     */
254
-
255
-  };
256
-
257
-  var Alert =
258
-  /*#__PURE__*/
259
-  function () {
260
-    function Alert(element) {
261
-      this._element = element;
262
-    } // Getters
263
-
264
-
265
-    var _proto = Alert.prototype;
266
-
267
-    // Public
268
-    _proto.close = function close(element) {
269
-      var rootElement = this._element;
270
-
271
-      if (element) {
272
-        rootElement = this._getRootElement(element);
273
-      }
274
-
275
-      var customEvent = this._triggerCloseEvent(rootElement);
276
-
277
-      if (customEvent.isDefaultPrevented()) {
278
-        return;
279
-      }
280
-
281
-      this._removeElement(rootElement);
282
-    };
283
-
284
-    _proto.dispose = function dispose() {
285
-      $.removeData(this._element, DATA_KEY);
286
-      this._element = null;
287
-    } // Private
288
-    ;
289
-
290
-    _proto._getRootElement = function _getRootElement(element) {
291
-      var selector = Util.getSelectorFromElement(element);
292
-      var parent = false;
293
-
294
-      if (selector) {
295
-        parent = document.querySelector(selector);
296
-      }
297
-
298
-      if (!parent) {
299
-        parent = $(element).closest("." + ClassName.ALERT)[0];
300
-      }
301
-
302
-      return parent;
303
-    };
304
-
305
-    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
306
-      var closeEvent = $.Event(Event.CLOSE);
307
-      $(element).trigger(closeEvent);
308
-      return closeEvent;
309
-    };
310
-
311
-    _proto._removeElement = function _removeElement(element) {
312
-      var _this = this;
313
-
314
-      $(element).removeClass(ClassName.SHOW);
315
-
316
-      if (!$(element).hasClass(ClassName.FADE)) {
317
-        this._destroyElement(element);
318
-
319
-        return;
320
-      }
321
-
322
-      var transitionDuration = Util.getTransitionDurationFromElement(element);
323
-      $(element).one(Util.TRANSITION_END, function (event) {
324
-        return _this._destroyElement(element, event);
325
-      }).emulateTransitionEnd(transitionDuration);
326
-    };
327
-
328
-    _proto._destroyElement = function _destroyElement(element) {
329
-      $(element).detach().trigger(Event.CLOSED).remove();
330
-    } // Static
331
-    ;
332
-
333
-    Alert._jQueryInterface = function _jQueryInterface(config) {
334
-      return this.each(function () {
335
-        var $element = $(this);
336
-        var data = $element.data(DATA_KEY);
337
-
338
-        if (!data) {
339
-          data = new Alert(this);
340
-          $element.data(DATA_KEY, data);
341
-        }
342
-
343
-        if (config === 'close') {
344
-          data[config](this);
345
-        }
346
-      });
347
-    };
348
-
349
-    Alert._handleDismiss = function _handleDismiss(alertInstance) {
350
-      return function (event) {
351
-        if (event) {
352
-          event.preventDefault();
353
-        }
354
-
355
-        alertInstance.close(this);
356
-      };
357
-    };
358
-
359
-    _createClass(Alert, null, [{
360
-      key: "VERSION",
361
-      get: function get() {
362
-        return VERSION;
363
-      }
364
-    }]);
365
-
366
-    return Alert;
367
-  }();
368
-  /**
369
-   * ------------------------------------------------------------------------
370
-   * Data Api implementation
371
-   * ------------------------------------------------------------------------
372
-   */
373
-
374
-
375
-  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
376
-  /**
377
-   * ------------------------------------------------------------------------
378
-   * jQuery
379
-   * ------------------------------------------------------------------------
380
-   */
381
-
382
-  $.fn[NAME] = Alert._jQueryInterface;
383
-  $.fn[NAME].Constructor = Alert;
384
-
385
-  $.fn[NAME].noConflict = function () {
386
-    $.fn[NAME] = JQUERY_NO_CONFLICT;
387
-    return Alert._jQueryInterface;
388
-  };
389
-
390
-  /**
391
-   * ------------------------------------------------------------------------
392
-   * Constants
393
-   * ------------------------------------------------------------------------
394
-   */
395
-
396
-  var NAME$1 = 'button';
397
-  var VERSION$1 = '4.3.1';
398
-  var DATA_KEY$1 = 'bs.button';
399
-  var EVENT_KEY$1 = "." + DATA_KEY$1;
400
-  var DATA_API_KEY$1 = '.data-api';
401
-  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
402
-  var ClassName$1 = {
403
-    ACTIVE: 'active',
404
-    BUTTON: 'btn',
405
-    FOCUS: 'focus'
406
-  };
407
-  var Selector$1 = {
408
-    DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
409
-    DATA_TOGGLE: '[data-toggle="buttons"]',
410
-    INPUT: 'input:not([type="hidden"])',
411
-    ACTIVE: '.active',
412
-    BUTTON: '.btn'
413
-  };
414
-  var Event$1 = {
415
-    CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1,
416
-    FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1)
417
-    /**
418
-     * ------------------------------------------------------------------------
419
-     * Class Definition
420
-     * ------------------------------------------------------------------------
421
-     */
422
-
423
-  };
424
-
425
-  var Button =
426
-  /*#__PURE__*/
427
-  function () {
428
-    function Button(element) {
429
-      this._element = element;
430
-    } // Getters
431
-
432
-
433
-    var _proto = Button.prototype;
434
-
435
-    // Public
436
-    _proto.toggle = function toggle() {
437
-      var triggerChangeEvent = true;
438
-      var addAriaPressed = true;
439
-      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];
440
-
441
-      if (rootElement) {
442
-        var input = this._element.querySelector(Selector$1.INPUT);
443
-
444
-        if (input) {
445
-          if (input.type === 'radio') {
446
-            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {
447
-              triggerChangeEvent = false;
448
-            } else {
449
-              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);
450
-
451
-              if (activeElement) {
452
-                $(activeElement).removeClass(ClassName$1.ACTIVE);
453
-              }
454
-            }
455
-          }
456
-
457
-          if (triggerChangeEvent) {
458
-            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
459
-              return;
460
-            }
461
-
462
-            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);
463
-            $(input).trigger('change');
464
-          }
465
-
466
-          input.focus();
467
-          addAriaPressed = false;
468
-        }
469
-      }
470
-
471
-      if (addAriaPressed) {
472
-        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));
473
-      }
474
-
475
-      if (triggerChangeEvent) {
476
-        $(this._element).toggleClass(ClassName$1.ACTIVE);
477
-      }
478
-    };
479
-
480
-    _proto.dispose = function dispose() {
481
-      $.removeData(this._element, DATA_KEY$1);
482
-      this._element = null;
483
-    } // Static
484
-    ;
485
-
486
-    Button._jQueryInterface = function _jQueryInterface(config) {
487
-      return this.each(function () {
488
-        var data = $(this).data(DATA_KEY$1);
489
-
490
-        if (!data) {
491
-          data = new Button(this);
492
-          $(this).data(DATA_KEY$1, data);
493
-        }
494
-
495
-        if (config === 'toggle') {
496
-          data[config]();
497
-        }
498
-      });
499
-    };
500
-
501
-    _createClass(Button, null, [{
502
-      key: "VERSION",
503
-      get: function get() {
504
-        return VERSION$1;
505
-      }
506
-    }]);
507
-
508
-    return Button;
509
-  }();
510
-  /**
511
-   * ------------------------------------------------------------------------
512
-   * Data Api implementation
513
-   * ------------------------------------------------------------------------
514
-   */
515
-
516
-
517
-  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
518
-    event.preventDefault();
519
-    var button = event.target;
520
-
521
-    if (!$(button).hasClass(ClassName$1.BUTTON)) {
522
-      button = $(button).closest(Selector$1.BUTTON);
523
-    }
524
-
525
-    Button._jQueryInterface.call($(button), 'toggle');
526
-  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
527
-    var button = $(event.target).closest(Selector$1.BUTTON)[0];
528
-    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));
529
-  });
530
-  /**
531
-   * ------------------------------------------------------------------------
532
-   * jQuery
533
-   * ------------------------------------------------------------------------
534
-   */
535
-
536
-  $.fn[NAME$1] = Button._jQueryInterface;
537
-  $.fn[NAME$1].Constructor = Button;
538
-
539
-  $.fn[NAME$1].noConflict = function () {
540
-    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;
541
-    return Button._jQueryInterface;
542
-  };
543
-
544
-  /**
545
-   * ------------------------------------------------------------------------
546
-   * Constants
547
-   * ------------------------------------------------------------------------
548
-   */
549
-
550
-  var NAME$2 = 'carousel';
551
-  var VERSION$2 = '4.3.1';
552
-  var DATA_KEY$2 = 'bs.carousel';
553
-  var EVENT_KEY$2 = "." + DATA_KEY$2;
554
-  var DATA_API_KEY$2 = '.data-api';
555
-  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];
556
-  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
557
-
558
-  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
559
-
560
-  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
561
-
562
-  var SWIPE_THRESHOLD = 40;
563
-  var Default = {
564
-    interval: 5000,
565
-    keyboard: true,
566
-    slide: false,
567
-    pause: 'hover',
568
-    wrap: true,
569
-    touch: true
570
-  };
571
-  var DefaultType = {
572
-    interval: '(number|boolean)',
573
-    keyboard: 'boolean',
574
-    slide: '(boolean|string)',
575
-    pause: '(string|boolean)',
576
-    wrap: 'boolean',
577
-    touch: 'boolean'
578
-  };
579
-  var Direction = {
580
-    NEXT: 'next',
581
-    PREV: 'prev',
582
-    LEFT: 'left',
583
-    RIGHT: 'right'
584
-  };
585
-  var Event$2 = {
586
-    SLIDE: "slide" + EVENT_KEY$2,
587
-    SLID: "slid" + EVENT_KEY$2,
588
-    KEYDOWN: "keydown" + EVENT_KEY$2,
589
-    MOUSEENTER: "mouseenter" + EVENT_KEY$2,
590
-    MOUSELEAVE: "mouseleave" + EVENT_KEY$2,
591
-    TOUCHSTART: "touchstart" + EVENT_KEY$2,
592
-    TOUCHMOVE: "touchmove" + EVENT_KEY$2,
593
-    TOUCHEND: "touchend" + EVENT_KEY$2,
594
-    POINTERDOWN: "pointerdown" + EVENT_KEY$2,
595
-    POINTERUP: "pointerup" + EVENT_KEY$2,
596
-    DRAG_START: "dragstart" + EVENT_KEY$2,
597
-    LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2,
598
-    CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2
599
-  };
600
-  var ClassName$2 = {
601
-    CAROUSEL: 'carousel',
602
-    ACTIVE: 'active',
603
-    SLIDE: 'slide',
604
-    RIGHT: 'carousel-item-right',
605
-    LEFT: 'carousel-item-left',
606
-    NEXT: 'carousel-item-next',
607
-    PREV: 'carousel-item-prev',
608
-    ITEM: 'carousel-item',
609
-    POINTER_EVENT: 'pointer-event'
610
-  };
611
-  var Selector$2 = {
612
-    ACTIVE: '.active',
613
-    ACTIVE_ITEM: '.active.carousel-item',
614
-    ITEM: '.carousel-item',
615
-    ITEM_IMG: '.carousel-item img',
616
-    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
617
-    INDICATORS: '.carousel-indicators',
618
-    DATA_SLIDE: '[data-slide], [data-slide-to]',
619
-    DATA_RIDE: '[data-ride="carousel"]'
620
-  };
621
-  var PointerType = {
622
-    TOUCH: 'touch',
623
-    PEN: 'pen'
624
-    /**
625
-     * ------------------------------------------------------------------------
626
-     * Class Definition
627
-     * ------------------------------------------------------------------------
628
-     */
629
-
630
-  };
631
-
632
-  var Carousel =
633
-  /*#__PURE__*/
634
-  function () {
635
-    function Carousel(element, config) {
636
-      this._items = null;
637
-      this._interval = null;
638
-      this._activeElement = null;
639
-      this._isPaused = false;
640
-      this._isSliding = false;
641
-      this.touchTimeout = null;
642
-      this.touchStartX = 0;
643
-      this.touchDeltaX = 0;
644
-      this._config = this._getConfig(config);
645
-      this._element = element;
646
-      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);
647
-      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
648
-      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
649
-
650
-      this._addEventListeners();
651
-    } // Getters
652
-
653
-
654
-    var _proto = Carousel.prototype;
655
-
656
-    // Public
657
-    _proto.next = function next() {
658
-      if (!this._isSliding) {
659
-        this._slide(Direction.NEXT);
660
-      }
661
-    };
662
-
663
-    _proto.nextWhenVisible = function nextWhenVisible() {
664
-      // Don't call next when the page isn't visible
665
-      // or the carousel or its parent isn't visible
666
-      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {
667
-        this.next();
668
-      }
669
-    };
670
-
671
-    _proto.prev = function prev() {
672
-      if (!this._isSliding) {
673
-        this._slide(Direction.PREV);
674
-      }
675
-    };
676
-
677
-    _proto.pause = function pause(event) {
678
-      if (!event) {
679
-        this._isPaused = true;
680
-      }
681
-
682
-      if (this._element.querySelector(Selector$2.NEXT_PREV)) {
683
-        Util.triggerTransitionEnd(this._element);
684
-        this.cycle(true);
685
-      }
686
-
687
-      clearInterval(this._interval);
688
-      this._interval = null;
689
-    };
690
-
691
-    _proto.cycle = function cycle(event) {
692
-      if (!event) {
693
-        this._isPaused = false;
694
-      }
695
-
696
-      if (this._interval) {
697
-        clearInterval(this._interval);
698
-        this._interval = null;
699
-      }
700
-
701
-      if (this._config.interval && !this._isPaused) {
702
-        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
703
-      }
704
-    };
705
-
706
-    _proto.to = function to(index) {
707
-      var _this = this;
708
-
709
-      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
710
-
711
-      var activeIndex = this._getItemIndex(this._activeElement);
712
-
713
-      if (index > this._items.length - 1 || index < 0) {
714
-        return;
715
-      }
716
-
717
-      if (this._isSliding) {
718
-        $(this._element).one(Event$2.SLID, function () {
719
-          return _this.to(index);
720
-        });
721
-        return;
722
-      }
723
-
724
-      if (activeIndex === index) {
725
-        this.pause();
726
-        this.cycle();
727
-        return;
728
-      }
729
-
730
-      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
731
-
732
-      this._slide(direction, this._items[index]);
733
-    };
734
-
735
-    _proto.dispose = function dispose() {
736
-      $(this._element).off(EVENT_KEY$2);
737
-      $.removeData(this._element, DATA_KEY$2);
738
-      this._items = null;
739
-      this._config = null;
740
-      this._element = null;
741
-      this._interval = null;
742
-      this._isPaused = null;
743
-      this._isSliding = null;
744
-      this._activeElement = null;
745
-      this._indicatorsElement = null;
746
-    } // Private
747
-    ;
748
-
749
-    _proto._getConfig = function _getConfig(config) {
750
-      config = _objectSpread({}, Default, config);
751
-      Util.typeCheckConfig(NAME$2, config, DefaultType);
752
-      return config;
753
-    };
754
-
755
-    _proto._handleSwipe = function _handleSwipe() {
756
-      var absDeltax = Math.abs(this.touchDeltaX);
757
-
758
-      if (absDeltax <= SWIPE_THRESHOLD) {
759
-        return;
760
-      }
761
-
762
-      var direction = absDeltax / this.touchDeltaX; // swipe left
763
-
764
-      if (direction > 0) {
765
-        this.prev();
766
-      } // swipe right
767
-
768
-
769
-      if (direction < 0) {
770
-        this.next();
771
-      }
772
-    };
773
-
774
-    _proto._addEventListeners = function _addEventListeners() {
775
-      var _this2 = this;
776
-
777
-      if (this._config.keyboard) {
778
-        $(this._element).on(Event$2.KEYDOWN, function (event) {
779
-          return _this2._keydown(event);
780
-        });
781
-      }
782
-
783
-      if (this._config.pause === 'hover') {
784
-        $(this._element).on(Event$2.MOUSEENTER, function (event) {
785
-          return _this2.pause(event);
786
-        }).on(Event$2.MOUSELEAVE, function (event) {
787
-          return _this2.cycle(event);
788
-        });
789
-      }
790
-
791
-      if (this._config.touch) {
792
-        this._addTouchEventListeners();
793
-      }
794
-    };
795
-
796
-    _proto._addTouchEventListeners = function _addTouchEventListeners() {
797
-      var _this3 = this;
798
-
799
-      if (!this._touchSupported) {
800
-        return;
801
-      }
802
-
803
-      var start = function start(event) {
804
-        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
805
-          _this3.touchStartX = event.originalEvent.clientX;
806
-        } else if (!_this3._pointerEvent) {
807
-          _this3.touchStartX = event.originalEvent.touches[0].clientX;
808
-        }
809
-      };
810
-
811
-      var move = function move(event) {
812
-        // ensure swiping with one touch and not pinching
813
-        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
814
-          _this3.touchDeltaX = 0;
815
-        } else {
816
-          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;
817
-        }
818
-      };
819
-
820
-      var end = function end(event) {
821
-        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
822
-          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
823
-        }
824
-
825
-        _this3._handleSwipe();
826
-
827
-        if (_this3._config.pause === 'hover') {
828
-          // If it's a touch-enabled device, mouseenter/leave are fired as
829
-          // part of the mouse compatibility events on first tap - the carousel
830
-          // would stop cycling until user tapped out of it;
831
-          // here, we listen for touchend, explicitly pause the carousel
832
-          // (as if it's the second time we tap on it, mouseenter compat event
833
-          // is NOT fired) and after a timeout (to allow for mouse compatibility
834
-          // events to fire) we explicitly restart cycling
835
-          _this3.pause();
836
-
837
-          if (_this3.touchTimeout) {
838
-            clearTimeout(_this3.touchTimeout);
839
-          }
840
-
841
-          _this3.touchTimeout = setTimeout(function (event) {
842
-            return _this3.cycle(event);
843
-          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
844
-        }
845
-      };
846
-
847
-      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {
848
-        return e.preventDefault();
849
-      });
850
-
851
-      if (this._pointerEvent) {
852
-        $(this._element).on(Event$2.POINTERDOWN, function (event) {
853
-          return start(event);
854
-        });
855
-        $(this._element).on(Event$2.POINTERUP, function (event) {
856
-          return end(event);
857
-        });
858
-
859
-        this._element.classList.add(ClassName$2.POINTER_EVENT);
860
-      } else {
861
-        $(this._element).on(Event$2.TOUCHSTART, function (event) {
862
-          return start(event);
863
-        });
864
-        $(this._element).on(Event$2.TOUCHMOVE, function (event) {
865
-          return move(event);
866
-        });
867
-        $(this._element).on(Event$2.TOUCHEND, function (event) {
868
-          return end(event);
869
-        });
870
-      }
871
-    };
872
-
873
-    _proto._keydown = function _keydown(event) {
874
-      if (/input|textarea/i.test(event.target.tagName)) {
875
-        return;
876
-      }
877
-
878
-      switch (event.which) {
879
-        case ARROW_LEFT_KEYCODE:
880
-          event.preventDefault();
881
-          this.prev();
882
-          break;
883
-
884
-        case ARROW_RIGHT_KEYCODE:
885
-          event.preventDefault();
886
-          this.next();
887
-          break;
888
-
889
-        default:
890
-      }
891
-    };
892
-
893
-    _proto._getItemIndex = function _getItemIndex(element) {
894
-      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];
895
-      return this._items.indexOf(element);
896
-    };
897
-
898
-    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
899
-      var isNextDirection = direction === Direction.NEXT;
900
-      var isPrevDirection = direction === Direction.PREV;
901
-
902
-      var activeIndex = this._getItemIndex(activeElement);
903
-
904
-      var lastItemIndex = this._items.length - 1;
905
-      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
906
-
907
-      if (isGoingToWrap && !this._config.wrap) {
908
-        return activeElement;
909
-      }
910
-
911
-      var delta = direction === Direction.PREV ? -1 : 1;
912
-      var itemIndex = (activeIndex + delta) % this._items.length;
913
-      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
914
-    };
915
-
916
-    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
917
-      var targetIndex = this._getItemIndex(relatedTarget);
918
-
919
-      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));
920
-
921
-      var slideEvent = $.Event(Event$2.SLIDE, {
922
-        relatedTarget: relatedTarget,
923
-        direction: eventDirectionName,
924
-        from: fromIndex,
925
-        to: targetIndex
926
-      });
927
-      $(this._element).trigger(slideEvent);
928
-      return slideEvent;
929
-    };
930
-
931
-    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
932
-      if (this._indicatorsElement) {
933
-        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));
934
-        $(indicators).removeClass(ClassName$2.ACTIVE);
935
-
936
-        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
937
-
938
-        if (nextIndicator) {
939
-          $(nextIndicator).addClass(ClassName$2.ACTIVE);
940
-        }
941
-      }
942
-    };
943
-
944
-    _proto._slide = function _slide(direction, element) {
945
-      var _this4 = this;
946
-
947
-      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
948
-
949
-      var activeElementIndex = this._getItemIndex(activeElement);
950
-
951
-      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
952
-
953
-      var nextElementIndex = this._getItemIndex(nextElement);
954
-
955
-      var isCycling = Boolean(this._interval);
956
-      var directionalClassName;
957
-      var orderClassName;
958
-      var eventDirectionName;
959
-
960
-      if (direction === Direction.NEXT) {
961
-        directionalClassName = ClassName$2.LEFT;
962
-        orderClassName = ClassName$2.NEXT;
963
-        eventDirectionName = Direction.LEFT;
964
-      } else {
965
-        directionalClassName = ClassName$2.RIGHT;
966
-        orderClassName = ClassName$2.PREV;
967
-        eventDirectionName = Direction.RIGHT;
968
-      }
969
-
970
-      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {
971
-        this._isSliding = false;
972
-        return;
973
-      }
974
-
975
-      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
976
-
977
-      if (slideEvent.isDefaultPrevented()) {
978
-        return;
979
-      }
980
-
981
-      if (!activeElement || !nextElement) {
982
-        // Some weirdness is happening, so we bail
983
-        return;
984
-      }
985
-
986
-      this._isSliding = true;
987
-
988
-      if (isCycling) {
989
-        this.pause();
990
-      }
991
-
992
-      this._setActiveIndicatorElement(nextElement);
993
-
994
-      var slidEvent = $.Event(Event$2.SLID, {
995
-        relatedTarget: nextElement,
996
-        direction: eventDirectionName,
997
-        from: activeElementIndex,
998
-        to: nextElementIndex
999
-      });
1000
-
1001
-      if ($(this._element).hasClass(ClassName$2.SLIDE)) {
1002
-        $(nextElement).addClass(orderClassName);
1003
-        Util.reflow(nextElement);
1004
-        $(activeElement).addClass(directionalClassName);
1005
-        $(nextElement).addClass(directionalClassName);
1006
-        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);
1007
-
1008
-        if (nextElementInterval) {
1009
-          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
1010
-          this._config.interval = nextElementInterval;
1011
-        } else {
1012
-          this._config.interval = this._config.defaultInterval || this._config.interval;
1013
-        }
1014
-
1015
-        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
1016
-        $(activeElement).one(Util.TRANSITION_END, function () {
1017
-          $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE);
1018
-          $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName);
1019
-          _this4._isSliding = false;
1020
-          setTimeout(function () {
1021
-            return $(_this4._element).trigger(slidEvent);
1022
-          }, 0);
1023
-        }).emulateTransitionEnd(transitionDuration);
1024
-      } else {
1025
-        $(activeElement).removeClass(ClassName$2.ACTIVE);
1026
-        $(nextElement).addClass(ClassName$2.ACTIVE);
1027
-        this._isSliding = false;
1028
-        $(this._element).trigger(slidEvent);
1029
-      }
1030
-
1031
-      if (isCycling) {
1032
-        this.cycle();
1033
-      }
1034
-    } // Static
1035
-    ;
1036
-
1037
-    Carousel._jQueryInterface = function _jQueryInterface(config) {
1038
-      return this.each(function () {
1039
-        var data = $(this).data(DATA_KEY$2);
1040
-
1041
-        var _config = _objectSpread({}, Default, $(this).data());
1042
-
1043
-        if (typeof config === 'object') {
1044
-          _config = _objectSpread({}, _config, config);
1045
-        }
1046
-
1047
-        var action = typeof config === 'string' ? config : _config.slide;
1048
-
1049
-        if (!data) {
1050
-          data = new Carousel(this, _config);
1051
-          $(this).data(DATA_KEY$2, data);
1052
-        }
1053
-
1054
-        if (typeof config === 'number') {
1055
-          data.to(config);
1056
-        } else if (typeof action === 'string') {
1057
-          if (typeof data[action] === 'undefined') {
1058
-            throw new TypeError("No method named \"" + action + "\"");
1059
-          }
1060
-
1061
-          data[action]();
1062
-        } else if (_config.interval && _config.ride) {
1063
-          data.pause();
1064
-          data.cycle();
1065
-        }
1066
-      });
1067
-    };
1068
-
1069
-    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
1070
-      var selector = Util.getSelectorFromElement(this);
1071
-
1072
-      if (!selector) {
1073
-        return;
1074
-      }
1075
-
1076
-      var target = $(selector)[0];
1077
-
1078
-      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {
1079
-        return;
1080
-      }
1081
-
1082
-      var config = _objectSpread({}, $(target).data(), $(this).data());
1083
-
1084
-      var slideIndex = this.getAttribute('data-slide-to');
1085
-
1086
-      if (slideIndex) {
1087
-        config.interval = false;
1088
-      }
1089
-
1090
-      Carousel._jQueryInterface.call($(target), config);
1091
-
1092
-      if (slideIndex) {
1093
-        $(target).data(DATA_KEY$2).to(slideIndex);
1094
-      }
1095
-
1096
-      event.preventDefault();
1097
-    };
1098
-
1099
-    _createClass(Carousel, null, [{
1100
-      key: "VERSION",
1101
-      get: function get() {
1102
-        return VERSION$2;
1103
-      }
1104
-    }, {
1105
-      key: "Default",
1106
-      get: function get() {
1107
-        return Default;
1108
-      }
1109
-    }]);
1110
-
1111
-    return Carousel;
1112
-  }();
1113
-  /**
1114
-   * ------------------------------------------------------------------------
1115
-   * Data Api implementation
1116
-   * ------------------------------------------------------------------------
1117
-   */
1118
-
1119
-
1120
-  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);
1121
-  $(window).on(Event$2.LOAD_DATA_API, function () {
1122
-    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));
1123
-
1124
-    for (var i = 0, len = carousels.length; i < len; i++) {
1125
-      var $carousel = $(carousels[i]);
1126
-
1127
-      Carousel._jQueryInterface.call($carousel, $carousel.data());
1128
-    }
1129
-  });
1130
-  /**
1131
-   * ------------------------------------------------------------------------
1132
-   * jQuery
1133
-   * ------------------------------------------------------------------------
1134
-   */
1135
-
1136
-  $.fn[NAME$2] = Carousel._jQueryInterface;
1137
-  $.fn[NAME$2].Constructor = Carousel;
1138
-
1139
-  $.fn[NAME$2].noConflict = function () {
1140
-    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;
1141
-    return Carousel._jQueryInterface;
1142
-  };
1143
-
1144
-  /**
1145
-   * ------------------------------------------------------------------------
1146
-   * Constants
1147
-   * ------------------------------------------------------------------------
1148
-   */
1149
-
1150
-  var NAME$3 = 'collapse';
1151
-  var VERSION$3 = '4.3.1';
1152
-  var DATA_KEY$3 = 'bs.collapse';
1153
-  var EVENT_KEY$3 = "." + DATA_KEY$3;
1154
-  var DATA_API_KEY$3 = '.data-api';
1155
-  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];
1156
-  var Default$1 = {
1157
-    toggle: true,
1158
-    parent: ''
1159
-  };
1160
-  var DefaultType$1 = {
1161
-    toggle: 'boolean',
1162
-    parent: '(string|element)'
1163
-  };
1164
-  var Event$3 = {
1165
-    SHOW: "show" + EVENT_KEY$3,
1166
-    SHOWN: "shown" + EVENT_KEY$3,
1167
-    HIDE: "hide" + EVENT_KEY$3,
1168
-    HIDDEN: "hidden" + EVENT_KEY$3,
1169
-    CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3
1170
-  };
1171
-  var ClassName$3 = {
1172
-    SHOW: 'show',
1173
-    COLLAPSE: 'collapse',
1174
-    COLLAPSING: 'collapsing',
1175
-    COLLAPSED: 'collapsed'
1176
-  };
1177
-  var Dimension = {
1178
-    WIDTH: 'width',
1179
-    HEIGHT: 'height'
1180
-  };
1181
-  var Selector$3 = {
1182
-    ACTIVES: '.show, .collapsing',
1183
-    DATA_TOGGLE: '[data-toggle="collapse"]'
1184
-    /**
1185
-     * ------------------------------------------------------------------------
1186
-     * Class Definition
1187
-     * ------------------------------------------------------------------------
1188
-     */
1189
-
1190
-  };
1191
-
1192
-  var Collapse =
1193
-  /*#__PURE__*/
1194
-  function () {
1195
-    function Collapse(element, config) {
1196
-      this._isTransitioning = false;
1197
-      this._element = element;
1198
-      this._config = this._getConfig(config);
1199
-      this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
1200
-      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));
1201
-
1202
-      for (var i = 0, len = toggleList.length; i < len; i++) {
1203
-        var elem = toggleList[i];
1204
-        var selector = Util.getSelectorFromElement(elem);
1205
-        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
1206
-          return foundElem === element;
1207
-        });
1208
-
1209
-        if (selector !== null && filterElement.length > 0) {
1210
-          this._selector = selector;
1211
-
1212
-          this._triggerArray.push(elem);
1213
-        }
1214
-      }
1215
-
1216
-      this._parent = this._config.parent ? this._getParent() : null;
1217
-
1218
-      if (!this._config.parent) {
1219
-        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
1220
-      }
1221
-
1222
-      if (this._config.toggle) {
1223
-        this.toggle();
1224
-      }
1225
-    } // Getters
1226
-
1227
-
1228
-    var _proto = Collapse.prototype;
1229
-
1230
-    // Public
1231
-    _proto.toggle = function toggle() {
1232
-      if ($(this._element).hasClass(ClassName$3.SHOW)) {
1233
-        this.hide();
1234
-      } else {
1235
-        this.show();
1236
-      }
1237
-    };
1238
-
1239
-    _proto.show = function show() {
1240
-      var _this = this;
1241
-
1242
-      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {
1243
-        return;
1244
-      }
1245
-
1246
-      var actives;
1247
-      var activesData;
1248
-
1249
-      if (this._parent) {
1250
-        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {
1251
-          if (typeof _this._config.parent === 'string') {
1252
-            return elem.getAttribute('data-parent') === _this._config.parent;
1253
-          }
1254
-
1255
-          return elem.classList.contains(ClassName$3.COLLAPSE);
1256
-        });
1257
-
1258
-        if (actives.length === 0) {
1259
-          actives = null;
1260
-        }
1261
-      }
1262
-
1263
-      if (actives) {
1264
-        activesData = $(actives).not(this._selector).data(DATA_KEY$3);
1265
-
1266
-        if (activesData && activesData._isTransitioning) {
1267
-          return;
1268
-        }
1269
-      }
1270
-
1271
-      var startEvent = $.Event(Event$3.SHOW);
1272
-      $(this._element).trigger(startEvent);
1273
-
1274
-      if (startEvent.isDefaultPrevented()) {
1275
-        return;
1276
-      }
1277
-
1278
-      if (actives) {
1279
-        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');
1280
-
1281
-        if (!activesData) {
1282
-          $(actives).data(DATA_KEY$3, null);
1283
-        }
1284
-      }
1285
-
1286
-      var dimension = this._getDimension();
1287
-
1288
-      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);
1289
-      this._element.style[dimension] = 0;
1290
-
1291
-      if (this._triggerArray.length) {
1292
-        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);
1293
-      }
1294
-
1295
-      this.setTransitioning(true);
1296
-
1297
-      var complete = function complete() {
1298
-        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);
1299
-        _this._element.style[dimension] = '';
1300
-
1301
-        _this.setTransitioning(false);
1302
-
1303
-        $(_this._element).trigger(Event$3.SHOWN);
1304
-      };
1305
-
1306
-      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1307
-      var scrollSize = "scroll" + capitalizedDimension;
1308
-      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
1309
-      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
1310
-      this._element.style[dimension] = this._element[scrollSize] + "px";
1311
-    };
1312
-
1313
-    _proto.hide = function hide() {
1314
-      var _this2 = this;
1315
-
1316
-      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {
1317
-        return;
1318
-      }
1319
-
1320
-      var startEvent = $.Event(Event$3.HIDE);
1321
-      $(this._element).trigger(startEvent);
1322
-
1323
-      if (startEvent.isDefaultPrevented()) {
1324
-        return;
1325
-      }
1326
-
1327
-      var dimension = this._getDimension();
1328
-
1329
-      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
1330
-      Util.reflow(this._element);
1331
-      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);
1332
-      var triggerArrayLength = this._triggerArray.length;
1333
-
1334
-      if (triggerArrayLength > 0) {
1335
-        for (var i = 0; i < triggerArrayLength; i++) {
1336
-          var trigger = this._triggerArray[i];
1337
-          var selector = Util.getSelectorFromElement(trigger);
1338
-
1339
-          if (selector !== null) {
1340
-            var $elem = $([].slice.call(document.querySelectorAll(selector)));
1341
-
1342
-            if (!$elem.hasClass(ClassName$3.SHOW)) {
1343
-              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);
1344
-            }
1345
-          }
1346
-        }
1347
-      }
1348
-
1349
-      this.setTransitioning(true);
1350
-
1351
-      var complete = function complete() {
1352
-        _this2.setTransitioning(false);
1353
-
1354
-        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);
1355
-      };
1356
-
1357
-      this._element.style[dimension] = '';
1358
-      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
1359
-      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
1360
-    };
1361
-
1362
-    _proto.setTransitioning = function setTransitioning(isTransitioning) {
1363
-      this._isTransitioning = isTransitioning;
1364
-    };
1365
-
1366
-    _proto.dispose = function dispose() {
1367
-      $.removeData(this._element, DATA_KEY$3);
1368
-      this._config = null;
1369
-      this._parent = null;
1370
-      this._element = null;
1371
-      this._triggerArray = null;
1372
-      this._isTransitioning = null;
1373
-    } // Private
1374
-    ;
1375
-
1376
-    _proto._getConfig = function _getConfig(config) {
1377
-      config = _objectSpread({}, Default$1, config);
1378
-      config.toggle = Boolean(config.toggle); // Coerce string values
1379
-
1380
-      Util.typeCheckConfig(NAME$3, config, DefaultType$1);
1381
-      return config;
1382
-    };
1383
-
1384
-    _proto._getDimension = function _getDimension() {
1385
-      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
1386
-      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
1387
-    };
1388
-
1389
-    _proto._getParent = function _getParent() {
1390
-      var _this3 = this;
1391
-
1392
-      var parent;
1393
-
1394
-      if (Util.isElement(this._config.parent)) {
1395
-        parent = this._config.parent; // It's a jQuery object
1396
-
1397
-        if (typeof this._config.parent.jquery !== 'undefined') {
1398
-          parent = this._config.parent[0];
1399
-        }
1400
-      } else {
1401
-        parent = document.querySelector(this._config.parent);
1402
-      }
1403
-
1404
-      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
1405
-      var children = [].slice.call(parent.querySelectorAll(selector));
1406
-      $(children).each(function (i, element) {
1407
-        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
1408
-      });
1409
-      return parent;
1410
-    };
1411
-
1412
-    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1413
-      var isOpen = $(element).hasClass(ClassName$3.SHOW);
1414
-
1415
-      if (triggerArray.length) {
1416
-        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1417
-      }
1418
-    } // Static
1419
-    ;
1420
-
1421
-    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
1422
-      var selector = Util.getSelectorFromElement(element);
1423
-      return selector ? document.querySelector(selector) : null;
1424
-    };
1425
-
1426
-    Collapse._jQueryInterface = function _jQueryInterface(config) {
1427
-      return this.each(function () {
1428
-        var $this = $(this);
1429
-        var data = $this.data(DATA_KEY$3);
1430
-
1431
-        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});
1432
-
1433
-        if (!data && _config.toggle && /show|hide/.test(config)) {
1434
-          _config.toggle = false;
1435
-        }
1436
-
1437
-        if (!data) {
1438
-          data = new Collapse(this, _config);
1439
-          $this.data(DATA_KEY$3, data);
1440
-        }
1441
-
1442
-        if (typeof config === 'string') {
1443
-          if (typeof data[config] === 'undefined') {
1444
-            throw new TypeError("No method named \"" + config + "\"");
1445
-          }
1446
-
1447
-          data[config]();
1448
-        }
1449
-      });
1450
-    };
1451
-
1452
-    _createClass(Collapse, null, [{
1453
-      key: "VERSION",
1454
-      get: function get() {
1455
-        return VERSION$3;
1456
-      }
1457
-    }, {
1458
-      key: "Default",
1459
-      get: function get() {
1460
-        return Default$1;
1461
-      }
1462
-    }]);
1463
-
1464
-    return Collapse;
1465
-  }();
1466
-  /**
1467
-   * ------------------------------------------------------------------------
1468
-   * Data Api implementation
1469
-   * ------------------------------------------------------------------------
1470
-   */
1471
-
1472
-
1473
-  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {
1474
-    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1475
-    if (event.currentTarget.tagName === 'A') {
1476
-      event.preventDefault();
1477
-    }
1478
-
1479
-    var $trigger = $(this);
1480
-    var selector = Util.getSelectorFromElement(this);
1481
-    var selectors = [].slice.call(document.querySelectorAll(selector));
1482
-    $(selectors).each(function () {
1483
-      var $target = $(this);
1484
-      var data = $target.data(DATA_KEY$3);
1485
-      var config = data ? 'toggle' : $trigger.data();
1486
-
1487
-      Collapse._jQueryInterface.call($target, config);
1488
-    });
1489
-  });
1490
-  /**
1491
-   * ------------------------------------------------------------------------
1492
-   * jQuery
1493
-   * ------------------------------------------------------------------------
1494
-   */
1495
-
1496
-  $.fn[NAME$3] = Collapse._jQueryInterface;
1497
-  $.fn[NAME$3].Constructor = Collapse;
1498
-
1499
-  $.fn[NAME$3].noConflict = function () {
1500
-    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;
1501
-    return Collapse._jQueryInterface;
1502
-  };
1503
-
1504
-  /**!
1505
-   * @fileOverview Kickass library to create and place poppers near their reference elements.
1506
-   * @version 1.14.7
1507
-   * @license
1508
-   * Copyright (c) 2016 Federico Zivolo and contributors
1509
-   *
1510
-   * Permission is hereby granted, free of charge, to any person obtaining a copy
1511
-   * of this software and associated documentation files (the "Software"), to deal
1512
-   * in the Software without restriction, including without limitation the rights
1513
-   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1514
-   * copies of the Software, and to permit persons to whom the Software is
1515
-   * furnished to do so, subject to the following conditions:
1516
-   *
1517
-   * The above copyright notice and this permission notice shall be included in all
1518
-   * copies or substantial portions of the Software.
1519
-   *
1520
-   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1521
-   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1522
-   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1523
-   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1524
-   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1525
-   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1526
-   * SOFTWARE.
1527
-   */
1528
-  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
1529
-
1530
-  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
1531
-  var timeoutDuration = 0;
1532
-  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
1533
-    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
1534
-      timeoutDuration = 1;
1535
-      break;
1536
-    }
1537
-  }
1538
-
1539
-  function microtaskDebounce(fn) {
1540
-    var called = false;
1541
-    return function () {
1542
-      if (called) {
1543
-        return;
1544
-      }
1545
-      called = true;
1546
-      window.Promise.resolve().then(function () {
1547
-        called = false;
1548
-        fn();
1549
-      });
1550
-    };
1551
-  }
1552
-
1553
-  function taskDebounce(fn) {
1554
-    var scheduled = false;
1555
-    return function () {
1556
-      if (!scheduled) {
1557
-        scheduled = true;
1558
-        setTimeout(function () {
1559
-          scheduled = false;
1560
-          fn();
1561
-        }, timeoutDuration);
1562
-      }
1563
-    };
1564
-  }
1565
-
1566
-  var supportsMicroTasks = isBrowser && window.Promise;
1567
-
1568
-  /**
1569
-  * Create a debounced version of a method, that's asynchronously deferred
1570
-  * but called in the minimum time possible.
1571
-  *
1572
-  * @method
1573
-  * @memberof Popper.Utils
1574
-  * @argument {Function} fn
1575
-  * @returns {Function}
1576
-  */
1577
-  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
1578
-
1579
-  /**
1580
-   * Check if the given variable is a function
1581
-   * @method
1582
-   * @memberof Popper.Utils
1583
-   * @argument {Any} functionToCheck - variable to check
1584
-   * @returns {Boolean} answer to: is a function?
1585
-   */
1586
-  function isFunction(functionToCheck) {
1587
-    var getType = {};
1588
-    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
1589
-  }
1590
-
1591
-  /**
1592
-   * Get CSS computed property of the given element
1593
-   * @method
1594
-   * @memberof Popper.Utils
1595
-   * @argument {Eement} element
1596
-   * @argument {String} property
1597
-   */
1598
-  function getStyleComputedProperty(element, property) {
1599
-    if (element.nodeType !== 1) {
1600
-      return [];
1601
-    }
1602
-    // NOTE: 1 DOM access here
1603
-    var window = element.ownerDocument.defaultView;
1604
-    var css = window.getComputedStyle(element, null);
1605
-    return property ? css[property] : css;
1606
-  }
1607
-
1608
-  /**
1609
-   * Returns the parentNode or the host of the element
1610
-   * @method
1611
-   * @memberof Popper.Utils
1612
-   * @argument {Element} element
1613
-   * @returns {Element} parent
1614
-   */
1615
-  function getParentNode(element) {
1616
-    if (element.nodeName === 'HTML') {
1617
-      return element;
1618
-    }
1619
-    return element.parentNode || element.host;
1620
-  }
1621
-
1622
-  /**
1623
-   * Returns the scrolling parent of the given element
1624
-   * @method
1625
-   * @memberof Popper.Utils
1626
-   * @argument {Element} element
1627
-   * @returns {Element} scroll parent
1628
-   */
1629
-  function getScrollParent(element) {
1630
-    // Return body, `getScroll` will take care to get the correct `scrollTop` from it
1631
-    if (!element) {
1632
-      return document.body;
1633
-    }
1634
-
1635
-    switch (element.nodeName) {
1636
-      case 'HTML':
1637
-      case 'BODY':
1638
-        return element.ownerDocument.body;
1639
-      case '#document':
1640
-        return element.body;
1641
-    }
1642
-
1643
-    // Firefox want us to check `-x` and `-y` variations as well
1644
-
1645
-    var _getStyleComputedProp = getStyleComputedProperty(element),
1646
-        overflow = _getStyleComputedProp.overflow,
1647
-        overflowX = _getStyleComputedProp.overflowX,
1648
-        overflowY = _getStyleComputedProp.overflowY;
1649
-
1650
-    if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
1651
-      return element;
1652
-    }
1653
-
1654
-    return getScrollParent(getParentNode(element));
1655
-  }
1656
-
1657
-  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
1658
-  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
1659
-
1660
-  /**
1661
-   * Determines if the browser is Internet Explorer
1662
-   * @method
1663
-   * @memberof Popper.Utils
1664
-   * @param {Number} version to check
1665
-   * @returns {Boolean} isIE
1666
-   */
1667
-  function isIE(version) {
1668
-    if (version === 11) {
1669
-      return isIE11;
1670
-    }
1671
-    if (version === 10) {
1672
-      return isIE10;
1673
-    }
1674
-    return isIE11 || isIE10;
1675
-  }
1676
-
1677
-  /**
1678
-   * Returns the offset parent of the given element
1679
-   * @method
1680
-   * @memberof Popper.Utils
1681
-   * @argument {Element} element
1682
-   * @returns {Element} offset parent
1683
-   */
1684
-  function getOffsetParent(element) {
1685
-    if (!element) {
1686
-      return document.documentElement;
1687
-    }
1688
-
1689
-    var noOffsetParent = isIE(10) ? document.body : null;
1690
-
1691
-    // NOTE: 1 DOM access here
1692
-    var offsetParent = element.offsetParent || null;
1693
-    // Skip hidden elements which don't have an offsetParent
1694
-    while (offsetParent === noOffsetParent && element.nextElementSibling) {
1695
-      offsetParent = (element = element.nextElementSibling).offsetParent;
1696
-    }
1697
-
1698
-    var nodeName = offsetParent && offsetParent.nodeName;
1699
-
1700
-    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
1701
-      return element ? element.ownerDocument.documentElement : document.documentElement;
1702
-    }
1703
-
1704
-    // .offsetParent will return the closest TH, TD or TABLE in case
1705
-    // no offsetParent is present, I hate this job...
1706
-    if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
1707
-      return getOffsetParent(offsetParent);
1708
-    }
1709
-
1710
-    return offsetParent;
1711
-  }
1712
-
1713
-  function isOffsetContainer(element) {
1714
-    var nodeName = element.nodeName;
1715
-
1716
-    if (nodeName === 'BODY') {
1717
-      return false;
1718
-    }
1719
-    return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
1720
-  }
1721
-
1722
-  /**
1723
-   * Finds the root node (document, shadowDOM root) of the given element
1724
-   * @method
1725
-   * @memberof Popper.Utils
1726
-   * @argument {Element} node
1727
-   * @returns {Element} root node
1728
-   */
1729
-  function getRoot(node) {
1730
-    if (node.parentNode !== null) {
1731
-      return getRoot(node.parentNode);
1732
-    }
1733
-
1734
-    return node;
1735
-  }
1736
-
1737
-  /**
1738
-   * Finds the offset parent common to the two provided nodes
1739
-   * @method
1740
-   * @memberof Popper.Utils
1741
-   * @argument {Element} element1
1742
-   * @argument {Element} element2
1743
-   * @returns {Element} common offset parent
1744
-   */
1745
-  function findCommonOffsetParent(element1, element2) {
1746
-    // This check is needed to avoid errors in case one of the elements isn't defined for any reason
1747
-    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
1748
-      return document.documentElement;
1749
-    }
1750
-
1751
-    // Here we make sure to give as "start" the element that comes first in the DOM
1752
-    var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
1753
-    var start = order ? element1 : element2;
1754
-    var end = order ? element2 : element1;
1755
-
1756
-    // Get common ancestor container
1757
-    var range = document.createRange();
1758
-    range.setStart(start, 0);
1759
-    range.setEnd(end, 0);
1760
-    var commonAncestorContainer = range.commonAncestorContainer;
1761
-
1762
-    // Both nodes are inside #document
1763
-
1764
-    if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
1765
-      if (isOffsetContainer(commonAncestorContainer)) {
1766
-        return commonAncestorContainer;
1767
-      }
1768
-
1769
-      return getOffsetParent(commonAncestorContainer);
1770
-    }
1771
-
1772
-    // one of the nodes is inside shadowDOM, find which one
1773
-    var element1root = getRoot(element1);
1774
-    if (element1root.host) {
1775
-      return findCommonOffsetParent(element1root.host, element2);
1776
-    } else {
1777
-      return findCommonOffsetParent(element1, getRoot(element2).host);
1778
-    }
1779
-  }
1780
-
1781
-  /**
1782
-   * Gets the scroll value of the given element in the given side (top and left)
1783
-   * @method
1784
-   * @memberof Popper.Utils
1785
-   * @argument {Element} element
1786
-   * @argument {String} side `top` or `left`
1787
-   * @returns {number} amount of scrolled pixels
1788
-   */
1789
-  function getScroll(element) {
1790
-    var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
1791
-
1792
-    var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
1793
-    var nodeName = element.nodeName;
1794
-
1795
-    if (nodeName === 'BODY' || nodeName === 'HTML') {
1796
-      var html = element.ownerDocument.documentElement;
1797
-      var scrollingElement = element.ownerDocument.scrollingElement || html;
1798
-      return scrollingElement[upperSide];
1799
-    }
1800
-
1801
-    return element[upperSide];
1802
-  }
1803
-
1804
-  /*
1805
-   * Sum or subtract the element scroll values (left and top) from a given rect object
1806
-   * @method
1807
-   * @memberof Popper.Utils
1808
-   * @param {Object} rect - Rect object you want to change
1809
-   * @param {HTMLElement} element - The element from the function reads the scroll values
1810
-   * @param {Boolean} subtract - set to true if you want to subtract the scroll values
1811
-   * @return {Object} rect - The modifier rect object
1812
-   */
1813
-  function includeScroll(rect, element) {
1814
-    var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1815
-
1816
-    var scrollTop = getScroll(element, 'top');
1817
-    var scrollLeft = getScroll(element, 'left');
1818
-    var modifier = subtract ? -1 : 1;
1819
-    rect.top += scrollTop * modifier;
1820
-    rect.bottom += scrollTop * modifier;
1821
-    rect.left += scrollLeft * modifier;
1822
-    rect.right += scrollLeft * modifier;
1823
-    return rect;
1824
-  }
1825
-
1826
-  /*
1827
-   * Helper to detect borders of a given element
1828
-   * @method
1829
-   * @memberof Popper.Utils
1830
-   * @param {CSSStyleDeclaration} styles
1831
-   * Result of `getStyleComputedProperty` on the given element
1832
-   * @param {String} axis - `x` or `y`
1833
-   * @return {number} borders - The borders size of the given axis
1834
-   */
1835
-
1836
-  function getBordersSize(styles, axis) {
1837
-    var sideA = axis === 'x' ? 'Left' : 'Top';
1838
-    var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
1839
-
1840
-    return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
1841
-  }
1842
-
1843
-  function getSize(axis, body, html, computedStyle) {
1844
-    return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);
1845
-  }
1846
-
1847
-  function getWindowSizes(document) {
1848
-    var body = document.body;
1849
-    var html = document.documentElement;
1850
-    var computedStyle = isIE(10) && getComputedStyle(html);
1851
-
1852
-    return {
1853
-      height: getSize('Height', body, html, computedStyle),
1854
-      width: getSize('Width', body, html, computedStyle)
1855
-    };
1856
-  }
1857
-
1858
-  var classCallCheck = function (instance, Constructor) {
1859
-    if (!(instance instanceof Constructor)) {
1860
-      throw new TypeError("Cannot call a class as a function");
1861
-    }
1862
-  };
1863
-
1864
-  var createClass = function () {
1865
-    function defineProperties(target, props) {
1866
-      for (var i = 0; i < props.length; i++) {
1867
-        var descriptor = props[i];
1868
-        descriptor.enumerable = descriptor.enumerable || false;
1869
-        descriptor.configurable = true;
1870
-        if ("value" in descriptor) descriptor.writable = true;
1871
-        Object.defineProperty(target, descriptor.key, descriptor);
1872
-      }
1873
-    }
1874
-
1875
-    return function (Constructor, protoProps, staticProps) {
1876
-      if (protoProps) defineProperties(Constructor.prototype, protoProps);
1877
-      if (staticProps) defineProperties(Constructor, staticProps);
1878
-      return Constructor;
1879
-    };
1880
-  }();
1881
-
1882
-
1883
-
1884
-
1885
-
1886
-  var defineProperty = function (obj, key, value) {
1887
-    if (key in obj) {
1888
-      Object.defineProperty(obj, key, {
1889
-        value: value,
1890
-        enumerable: true,
1891
-        configurable: true,
1892
-        writable: true
1893
-      });
1894
-    } else {
1895
-      obj[key] = value;
1896
-    }
1897
-
1898
-    return obj;
1899
-  };
1900
-
1901
-  var _extends = Object.assign || function (target) {
1902
-    for (var i = 1; i < arguments.length; i++) {
1903
-      var source = arguments[i];
1904
-
1905
-      for (var key in source) {
1906
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
1907
-          target[key] = source[key];
1908
-        }
1909
-      }
1910
-    }
1911
-
1912
-    return target;
1913
-  };
1914
-
1915
-  /**
1916
-   * Given element offsets, generate an output similar to getBoundingClientRect
1917
-   * @method
1918
-   * @memberof Popper.Utils
1919
-   * @argument {Object} offsets
1920
-   * @returns {Object} ClientRect like output
1921
-   */
1922
-  function getClientRect(offsets) {
1923
-    return _extends({}, offsets, {
1924
-      right: offsets.left + offsets.width,
1925
-      bottom: offsets.top + offsets.height
1926
-    });
1927
-  }
1928
-
1929
-  /**
1930
-   * Get bounding client rect of given element
1931
-   * @method
1932
-   * @memberof Popper.Utils
1933
-   * @param {HTMLElement} element
1934
-   * @return {Object} client rect
1935
-   */
1936
-  function getBoundingClientRect(element) {
1937
-    var rect = {};
1938
-
1939
-    // IE10 10 FIX: Please, don't ask, the element isn't
1940
-    // considered in DOM in some circumstances...
1941
-    // This isn't reproducible in IE10 compatibility mode of IE11
1942
-    try {
1943
-      if (isIE(10)) {
1944
-        rect = element.getBoundingClientRect();
1945
-        var scrollTop = getScroll(element, 'top');
1946
-        var scrollLeft = getScroll(element, 'left');
1947
-        rect.top += scrollTop;
1948
-        rect.left += scrollLeft;
1949
-        rect.bottom += scrollTop;
1950
-        rect.right += scrollLeft;
1951
-      } else {
1952
-        rect = element.getBoundingClientRect();
1953
-      }
1954
-    } catch (e) {}
1955
-
1956
-    var result = {
1957
-      left: rect.left,
1958
-      top: rect.top,
1959
-      width: rect.right - rect.left,
1960
-      height: rect.bottom - rect.top
1961
-    };
1962
-
1963
-    // subtract scrollbar size from sizes
1964
-    var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};
1965
-    var width = sizes.width || element.clientWidth || result.right - result.left;
1966
-    var height = sizes.height || element.clientHeight || result.bottom - result.top;
1967
-
1968
-    var horizScrollbar = element.offsetWidth - width;
1969
-    var vertScrollbar = element.offsetHeight - height;
1970
-
1971
-    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
1972
-    // we make this check conditional for performance reasons
1973
-    if (horizScrollbar || vertScrollbar) {
1974
-      var styles = getStyleComputedProperty(element);
1975
-      horizScrollbar -= getBordersSize(styles, 'x');
1976
-      vertScrollbar -= getBordersSize(styles, 'y');
1977
-
1978
-      result.width -= horizScrollbar;
1979
-      result.height -= vertScrollbar;
1980
-    }
1981
-
1982
-    return getClientRect(result);
1983
-  }
1984
-
1985
-  function getOffsetRectRelativeToArbitraryNode(children, parent) {
1986
-    var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1987
-
1988
-    var isIE10 = isIE(10);
1989
-    var isHTML = parent.nodeName === 'HTML';
1990
-    var childrenRect = getBoundingClientRect(children);
1991
-    var parentRect = getBoundingClientRect(parent);
1992
-    var scrollParent = getScrollParent(children);
1993
-
1994
-    var styles = getStyleComputedProperty(parent);
1995
-    var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
1996
-    var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
1997
-
1998
-    // In cases where the parent is fixed, we must ignore negative scroll in offset calc
1999
-    if (fixedPosition && isHTML) {
2000
-      parentRect.top = Math.max(parentRect.top, 0);
2001
-      parentRect.left = Math.max(parentRect.left, 0);
2002
-    }
2003
-    var offsets = getClientRect({
2004
-      top: childrenRect.top - parentRect.top - borderTopWidth,
2005
-      left: childrenRect.left - parentRect.left - borderLeftWidth,
2006
-      width: childrenRect.width,
2007
-      height: childrenRect.height
2008
-    });
2009
-    offsets.marginTop = 0;
2010
-    offsets.marginLeft = 0;
2011
-
2012
-    // Subtract margins of documentElement in case it's being used as parent
2013
-    // we do this only on HTML because it's the only element that behaves
2014
-    // differently when margins are applied to it. The margins are included in
2015
-    // the box of the documentElement, in the other cases not.
2016
-    if (!isIE10 && isHTML) {
2017
-      var marginTop = parseFloat(styles.marginTop, 10);
2018
-      var marginLeft = parseFloat(styles.marginLeft, 10);
2019
-
2020
-      offsets.top -= borderTopWidth - marginTop;
2021
-      offsets.bottom -= borderTopWidth - marginTop;
2022
-      offsets.left -= borderLeftWidth - marginLeft;
2023
-      offsets.right -= borderLeftWidth - marginLeft;
2024
-
2025
-      // Attach marginTop and marginLeft because in some circumstances we may need them
2026
-      offsets.marginTop = marginTop;
2027
-      offsets.marginLeft = marginLeft;
2028
-    }
2029
-
2030
-    if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
2031
-      offsets = includeScroll(offsets, parent);
2032
-    }
2033
-
2034
-    return offsets;
2035
-  }
2036
-
2037
-  function getViewportOffsetRectRelativeToArtbitraryNode(element) {
2038
-    var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2039
-
2040
-    var html = element.ownerDocument.documentElement;
2041
-    var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
2042
-    var width = Math.max(html.clientWidth, window.innerWidth || 0);
2043
-    var height = Math.max(html.clientHeight, window.innerHeight || 0);
2044
-
2045
-    var scrollTop = !excludeScroll ? getScroll(html) : 0;
2046
-    var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
2047
-
2048
-    var offset = {
2049
-      top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
2050
-      left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
2051
-      width: width,
2052
-      height: height
2053
-    };
2054
-
2055
-    return getClientRect(offset);
2056
-  }
2057
-
2058
-  /**
2059
-   * Check if the given element is fixed or is inside a fixed parent
2060
-   * @method
2061
-   * @memberof Popper.Utils
2062
-   * @argument {Element} element
2063
-   * @argument {Element} customContainer
2064
-   * @returns {Boolean} answer to "isFixed?"
2065
-   */
2066
-  function isFixed(element) {
2067
-    var nodeName = element.nodeName;
2068
-    if (nodeName === 'BODY' || nodeName === 'HTML') {
2069
-      return false;
2070
-    }
2071
-    if (getStyleComputedProperty(element, 'position') === 'fixed') {
2072
-      return true;
2073
-    }
2074
-    var parentNode = getParentNode(element);
2075
-    if (!parentNode) {
2076
-      return false;
2077
-    }
2078
-    return isFixed(parentNode);
2079
-  }
2080
-
2081
-  /**
2082
-   * Finds the first parent of an element that has a transformed property defined
2083
-   * @method
2084
-   * @memberof Popper.Utils
2085
-   * @argument {Element} element
2086
-   * @returns {Element} first transformed parent or documentElement
2087
-   */
2088
-
2089
-  function getFixedPositionOffsetParent(element) {
2090
-    // This check is needed to avoid errors in case one of the elements isn't defined for any reason
2091
-    if (!element || !element.parentElement || isIE()) {
2092
-      return document.documentElement;
2093
-    }
2094
-    var el = element.parentElement;
2095
-    while (el && getStyleComputedProperty(el, 'transform') === 'none') {
2096
-      el = el.parentElement;
2097
-    }
2098
-    return el || document.documentElement;
2099
-  }
2100
-
2101
-  /**
2102
-   * Computed the boundaries limits and return them
2103
-   * @method
2104
-   * @memberof Popper.Utils
2105
-   * @param {HTMLElement} popper
2106
-   * @param {HTMLElement} reference
2107
-   * @param {number} padding
2108
-   * @param {HTMLElement} boundariesElement - Element used to define the boundaries
2109
-   * @param {Boolean} fixedPosition - Is in fixed position mode
2110
-   * @returns {Object} Coordinates of the boundaries
2111
-   */
2112
-  function getBoundaries(popper, reference, padding, boundariesElement) {
2113
-    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
2114
-
2115
-    // NOTE: 1 DOM access here
2116
-
2117
-    var boundaries = { top: 0, left: 0 };
2118
-    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
2119
-
2120
-    // Handle viewport case
2121
-    if (boundariesElement === 'viewport') {
2122
-      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
2123
-    } else {
2124
-      // Handle other cases based on DOM element used as boundaries
2125
-      var boundariesNode = void 0;
2126
-      if (boundariesElement === 'scrollParent') {
2127
-        boundariesNode = getScrollParent(getParentNode(reference));
2128
-        if (boundariesNode.nodeName === 'BODY') {
2129
-          boundariesNode = popper.ownerDocument.documentElement;
2130
-        }
2131
-      } else if (boundariesElement === 'window') {
2132
-        boundariesNode = popper.ownerDocument.documentElement;
2133
-      } else {
2134
-        boundariesNode = boundariesElement;
2135
-      }
2136
-
2137
-      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
2138
-
2139
-      // In case of HTML, we need a different computation
2140
-      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
2141
-        var _getWindowSizes = getWindowSizes(popper.ownerDocument),
2142
-            height = _getWindowSizes.height,
2143
-            width = _getWindowSizes.width;
2144
-
2145
-        boundaries.top += offsets.top - offsets.marginTop;
2146
-        boundaries.bottom = height + offsets.top;
2147
-        boundaries.left += offsets.left - offsets.marginLeft;
2148
-        boundaries.right = width + offsets.left;
2149
-      } else {
2150
-        // for all the other DOM elements, this one is good
2151
-        boundaries = offsets;
2152
-      }
2153
-    }
2154
-
2155
-    // Add paddings
2156
-    padding = padding || 0;
2157
-    var isPaddingNumber = typeof padding === 'number';
2158
-    boundaries.left += isPaddingNumber ? padding : padding.left || 0;
2159
-    boundaries.top += isPaddingNumber ? padding : padding.top || 0;
2160
-    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
2161
-    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
2162
-
2163
-    return boundaries;
2164
-  }
2165
-
2166
-  function getArea(_ref) {
2167
-    var width = _ref.width,
2168
-        height = _ref.height;
2169
-
2170
-    return width * height;
2171
-  }
2172
-
2173
-  /**
2174
-   * Utility used to transform the `auto` placement to the placement with more
2175
-   * available space.
2176
-   * @method
2177
-   * @memberof Popper.Utils
2178
-   * @argument {Object} data - The data object generated by update method
2179
-   * @argument {Object} options - Modifiers configuration and options
2180
-   * @returns {Object} The data object, properly modified
2181
-   */
2182
-  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
2183
-    var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
2184
-
2185
-    if (placement.indexOf('auto') === -1) {
2186
-      return placement;
2187
-    }
2188
-
2189
-    var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
2190
-
2191
-    var rects = {
2192
-      top: {
2193
-        width: boundaries.width,
2194
-        height: refRect.top - boundaries.top
2195
-      },
2196
-      right: {
2197
-        width: boundaries.right - refRect.right,
2198
-        height: boundaries.height
2199
-      },
2200
-      bottom: {
2201
-        width: boundaries.width,
2202
-        height: boundaries.bottom - refRect.bottom
2203
-      },
2204
-      left: {
2205
-        width: refRect.left - boundaries.left,
2206
-        height: boundaries.height
2207
-      }
2208
-    };
2209
-
2210
-    var sortedAreas = Object.keys(rects).map(function (key) {
2211
-      return _extends({
2212
-        key: key
2213
-      }, rects[key], {
2214
-        area: getArea(rects[key])
2215
-      });
2216
-    }).sort(function (a, b) {
2217
-      return b.area - a.area;
2218
-    });
2219
-
2220
-    var filteredAreas = sortedAreas.filter(function (_ref2) {
2221
-      var width = _ref2.width,
2222
-          height = _ref2.height;
2223
-      return width >= popper.clientWidth && height >= popper.clientHeight;
2224
-    });
2225
-
2226
-    var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
2227
-
2228
-    var variation = placement.split('-')[1];
2229
-
2230
-    return computedPlacement + (variation ? '-' + variation : '');
2231
-  }
2232
-
2233
-  /**
2234
-   * Get offsets to the reference element
2235
-   * @method
2236
-   * @memberof Popper.Utils
2237
-   * @param {Object} state
2238
-   * @param {Element} popper - the popper element
2239
-   * @param {Element} reference - the reference element (the popper will be relative to this)
2240
-   * @param {Element} fixedPosition - is in fixed position mode
2241
-   * @returns {Object} An object containing the offsets which will be applied to the popper
2242
-   */
2243
-  function getReferenceOffsets(state, popper, reference) {
2244
-    var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
2245
-
2246
-    var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
2247
-    return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
2248
-  }
2249
-
2250
-  /**
2251
-   * Get the outer sizes of the given element (offset size + margins)
2252
-   * @method
2253
-   * @memberof Popper.Utils
2254
-   * @argument {Element} element
2255
-   * @returns {Object} object containing width and height properties
2256
-   */
2257
-  function getOuterSizes(element) {
2258
-    var window = element.ownerDocument.defaultView;
2259
-    var styles = window.getComputedStyle(element);
2260
-    var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);
2261
-    var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);
2262
-    var result = {
2263
-      width: element.offsetWidth + y,
2264
-      height: element.offsetHeight + x
2265
-    };
2266
-    return result;
2267
-  }
2268
-
2269
-  /**
2270
-   * Get the opposite placement of the given one
2271
-   * @method
2272
-   * @memberof Popper.Utils
2273
-   * @argument {String} placement
2274
-   * @returns {String} flipped placement
2275
-   */
2276
-  function getOppositePlacement(placement) {
2277
-    var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
2278
-    return placement.replace(/left|right|bottom|top/g, function (matched) {
2279
-      return hash[matched];
2280
-    });
2281
-  }
2282
-
2283
-  /**
2284
-   * Get offsets to the popper
2285
-   * @method
2286
-   * @memberof Popper.Utils
2287
-   * @param {Object} position - CSS position the Popper will get applied
2288
-   * @param {HTMLElement} popper - the popper element
2289
-   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
2290
-   * @param {String} placement - one of the valid placement options
2291
-   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
2292
-   */
2293
-  function getPopperOffsets(popper, referenceOffsets, placement) {
2294
-    placement = placement.split('-')[0];
2295
-
2296
-    // Get popper node sizes
2297
-    var popperRect = getOuterSizes(popper);
2298
-
2299
-    // Add position, width and height to our offsets object
2300
-    var popperOffsets = {
2301
-      width: popperRect.width,
2302
-      height: popperRect.height
2303
-    };
2304
-
2305
-    // depending by the popper placement we have to compute its offsets slightly differently
2306
-    var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
2307
-    var mainSide = isHoriz ? 'top' : 'left';
2308
-    var secondarySide = isHoriz ? 'left' : 'top';
2309
-    var measurement = isHoriz ? 'height' : 'width';
2310
-    var secondaryMeasurement = !isHoriz ? 'height' : 'width';
2311
-
2312
-    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
2313
-    if (placement === secondarySide) {
2314
-      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
2315
-    } else {
2316
-      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
2317
-    }
2318
-
2319
-    return popperOffsets;
2320
-  }
2321
-
2322
-  /**
2323
-   * Mimics the `find` method of Array
2324
-   * @method
2325
-   * @memberof Popper.Utils
2326
-   * @argument {Array} arr
2327
-   * @argument prop
2328
-   * @argument value
2329
-   * @returns index or -1
2330
-   */
2331
-  function find(arr, check) {
2332
-    // use native find if supported
2333
-    if (Array.prototype.find) {
2334
-      return arr.find(check);
2335
-    }
2336
-
2337
-    // use `filter` to obtain the same behavior of `find`
2338
-    return arr.filter(check)[0];
2339
-  }
2340
-
2341
-  /**
2342
-   * Return the index of the matching object
2343
-   * @method
2344
-   * @memberof Popper.Utils
2345
-   * @argument {Array} arr
2346
-   * @argument prop
2347
-   * @argument value
2348
-   * @returns index or -1
2349
-   */
2350
-  function findIndex(arr, prop, value) {
2351
-    // use native findIndex if supported
2352
-    if (Array.prototype.findIndex) {
2353
-      return arr.findIndex(function (cur) {
2354
-        return cur[prop] === value;
2355
-      });
2356
-    }
2357
-
2358
-    // use `find` + `indexOf` if `findIndex` isn't supported
2359
-    var match = find(arr, function (obj) {
2360
-      return obj[prop] === value;
2361
-    });
2362
-    return arr.indexOf(match);
2363
-  }
2364
-
2365
-  /**
2366
-   * Loop trough the list of modifiers and run them in order,
2367
-   * each of them will then edit the data object.
2368
-   * @method
2369
-   * @memberof Popper.Utils
2370
-   * @param {dataObject} data
2371
-   * @param {Array} modifiers
2372
-   * @param {String} ends - Optional modifier name used as stopper
2373
-   * @returns {dataObject}
2374
-   */
2375
-  function runModifiers(modifiers, data, ends) {
2376
-    var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
2377
-
2378
-    modifiersToRun.forEach(function (modifier) {
2379
-      if (modifier['function']) {
2380
-        // eslint-disable-line dot-notation
2381
-        console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
2382
-      }
2383
-      var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
2384
-      if (modifier.enabled && isFunction(fn)) {
2385
-        // Add properties to offsets to make them a complete clientRect object
2386
-        // we do this before each modifier to make sure the previous one doesn't
2387
-        // mess with these values
2388
-        data.offsets.popper = getClientRect(data.offsets.popper);
2389
-        data.offsets.reference = getClientRect(data.offsets.reference);
2390
-
2391
-        data = fn(data, modifier);
2392
-      }
2393
-    });
2394
-
2395
-    return data;
2396
-  }
2397
-
2398
-  /**
2399
-   * Updates the position of the popper, computing the new offsets and applying
2400
-   * the new style.<br />
2401
-   * Prefer `scheduleUpdate` over `update` because of performance reasons.
2402
-   * @method
2403
-   * @memberof Popper
2404
-   */
2405
-  function update() {
2406
-    // if popper is destroyed, don't perform any further update
2407
-    if (this.state.isDestroyed) {
2408
-      return;
2409
-    }
2410
-
2411
-    var data = {
2412
-      instance: this,
2413
-      styles: {},
2414
-      arrowStyles: {},
2415
-      attributes: {},
2416
-      flipped: false,
2417
-      offsets: {}
2418
-    };
2419
-
2420
-    // compute reference element offsets
2421
-    data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
2422
-
2423
-    // compute auto placement, store placement inside the data object,
2424
-    // modifiers will be able to edit `placement` if needed
2425
-    // and refer to originalPlacement to know the original value
2426
-    data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
2427
-
2428
-    // store the computed placement inside `originalPlacement`
2429
-    data.originalPlacement = data.placement;
2430
-
2431
-    data.positionFixed = this.options.positionFixed;
2432
-
2433
-    // compute the popper offsets
2434
-    data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
2435
-
2436
-    data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
2437
-
2438
-    // run the modifiers
2439
-    data = runModifiers(this.modifiers, data);
2440
-
2441
-    // the first `update` will call `onCreate` callback
2442
-    // the other ones will call `onUpdate` callback
2443
-    if (!this.state.isCreated) {
2444
-      this.state.isCreated = true;
2445
-      this.options.onCreate(data);
2446
-    } else {
2447
-      this.options.onUpdate(data);
2448
-    }
2449
-  }
2450
-
2451
-  /**
2452
-   * Helper used to know if the given modifier is enabled.
2453
-   * @method
2454
-   * @memberof Popper.Utils
2455
-   * @returns {Boolean}
2456
-   */
2457
-  function isModifierEnabled(modifiers, modifierName) {
2458
-    return modifiers.some(function (_ref) {
2459
-      var name = _ref.name,
2460
-          enabled = _ref.enabled;
2461
-      return enabled && name === modifierName;
2462
-    });
2463
-  }
2464
-
2465
-  /**
2466
-   * Get the prefixed supported property name
2467
-   * @method
2468
-   * @memberof Popper.Utils
2469
-   * @argument {String} property (camelCase)
2470
-   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
2471
-   */
2472
-  function getSupportedPropertyName(property) {
2473
-    var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
2474
-    var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
2475
-
2476
-    for (var i = 0; i < prefixes.length; i++) {
2477
-      var prefix = prefixes[i];
2478
-      var toCheck = prefix ? '' + prefix + upperProp : property;
2479
-      if (typeof document.body.style[toCheck] !== 'undefined') {
2480
-        return toCheck;
2481
-      }
2482
-    }
2483
-    return null;
2484
-  }
2485
-
2486
-  /**
2487
-   * Destroys the popper.
2488
-   * @method
2489
-   * @memberof Popper
2490
-   */
2491
-  function destroy() {
2492
-    this.state.isDestroyed = true;
2493
-
2494
-    // touch DOM only if `applyStyle` modifier is enabled
2495
-    if (isModifierEnabled(this.modifiers, 'applyStyle')) {
2496
-      this.popper.removeAttribute('x-placement');
2497
-      this.popper.style.position = '';
2498
-      this.popper.style.top = '';
2499
-      this.popper.style.left = '';
2500
-      this.popper.style.right = '';
2501
-      this.popper.style.bottom = '';
2502
-      this.popper.style.willChange = '';
2503
-      this.popper.style[getSupportedPropertyName('transform')] = '';
2504
-    }
2505
-
2506
-    this.disableEventListeners();
2507
-
2508
-    // remove the popper if user explicity asked for the deletion on destroy
2509
-    // do not use `remove` because IE11 doesn't support it
2510
-    if (this.options.removeOnDestroy) {
2511
-      this.popper.parentNode.removeChild(this.popper);
2512
-    }
2513
-    return this;
2514
-  }
2515
-
2516
-  /**
2517
-   * Get the window associated with the element
2518
-   * @argument {Element} element
2519
-   * @returns {Window}
2520
-   */
2521
-  function getWindow(element) {
2522
-    var ownerDocument = element.ownerDocument;
2523
-    return ownerDocument ? ownerDocument.defaultView : window;
2524
-  }
2525
-
2526
-  function attachToScrollParents(scrollParent, event, callback, scrollParents) {
2527
-    var isBody = scrollParent.nodeName === 'BODY';
2528
-    var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
2529
-    target.addEventListener(event, callback, { passive: true });
2530
-
2531
-    if (!isBody) {
2532
-      attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
2533
-    }
2534
-    scrollParents.push(target);
2535
-  }
2536
-
2537
-  /**
2538
-   * Setup needed event listeners used to update the popper position
2539
-   * @method
2540
-   * @memberof Popper.Utils
2541
-   * @private
2542
-   */
2543
-  function setupEventListeners(reference, options, state, updateBound) {
2544
-    // Resize event listener on window
2545
-    state.updateBound = updateBound;
2546
-    getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
2547
-
2548
-    // Scroll event listener on scroll parents
2549
-    var scrollElement = getScrollParent(reference);
2550
-    attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
2551
-    state.scrollElement = scrollElement;
2552
-    state.eventsEnabled = true;
2553
-
2554
-    return state;
2555
-  }
2556
-
2557
-  /**
2558
-   * It will add resize/scroll events and start recalculating
2559
-   * position of the popper element when they are triggered.
2560
-   * @method
2561
-   * @memberof Popper
2562
-   */
2563
-  function enableEventListeners() {
2564
-    if (!this.state.eventsEnabled) {
2565
-      this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
2566
-    }
2567
-  }
2568
-
2569
-  /**
2570
-   * Remove event listeners used to update the popper position
2571
-   * @method
2572
-   * @memberof Popper.Utils
2573
-   * @private
2574
-   */
2575
-  function removeEventListeners(reference, state) {
2576
-    // Remove resize event listener on window
2577
-    getWindow(reference).removeEventListener('resize', state.updateBound);
2578
-
2579
-    // Remove scroll event listener on scroll parents
2580
-    state.scrollParents.forEach(function (target) {
2581
-      target.removeEventListener('scroll', state.updateBound);
2582
-    });
2583
-
2584
-    // Reset state
2585
-    state.updateBound = null;
2586
-    state.scrollParents = [];
2587
-    state.scrollElement = null;
2588
-    state.eventsEnabled = false;
2589
-    return state;
2590
-  }
2591
-
2592
-  /**
2593
-   * It will remove resize/scroll events and won't recalculate popper position
2594
-   * when they are triggered. It also won't trigger `onUpdate` callback anymore,
2595
-   * unless you call `update` method manually.
2596
-   * @method
2597
-   * @memberof Popper
2598
-   */
2599
-  function disableEventListeners() {
2600
-    if (this.state.eventsEnabled) {
2601
-      cancelAnimationFrame(this.scheduleUpdate);
2602
-      this.state = removeEventListeners(this.reference, this.state);
2603
-    }
2604
-  }
2605
-
2606
-  /**
2607
-   * Tells if a given input is a number
2608
-   * @method
2609
-   * @memberof Popper.Utils
2610
-   * @param {*} input to check
2611
-   * @return {Boolean}
2612
-   */
2613
-  function isNumeric(n) {
2614
-    return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
2615
-  }
2616
-
2617
-  /**
2618
-   * Set the style to the given popper
2619
-   * @method
2620
-   * @memberof Popper.Utils
2621
-   * @argument {Element} element - Element to apply the style to
2622
-   * @argument {Object} styles
2623
-   * Object with a list of properties and values which will be applied to the element
2624
-   */
2625
-  function setStyles(element, styles) {
2626
-    Object.keys(styles).forEach(function (prop) {
2627
-      var unit = '';
2628
-      // add unit if the value is numeric and is one of the following
2629
-      if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
2630
-        unit = 'px';
2631
-      }
2632
-      element.style[prop] = styles[prop] + unit;
2633
-    });
2634
-  }
2635
-
2636
-  /**
2637
-   * Set the attributes to the given popper
2638
-   * @method
2639
-   * @memberof Popper.Utils
2640
-   * @argument {Element} element - Element to apply the attributes to
2641
-   * @argument {Object} styles
2642
-   * Object with a list of properties and values which will be applied to the element
2643
-   */
2644
-  function setAttributes(element, attributes) {
2645
-    Object.keys(attributes).forEach(function (prop) {
2646
-      var value = attributes[prop];
2647
-      if (value !== false) {
2648
-        element.setAttribute(prop, attributes[prop]);
2649
-      } else {
2650
-        element.removeAttribute(prop);
2651
-      }
2652
-    });
2653
-  }
2654
-
2655
-  /**
2656
-   * @function
2657
-   * @memberof Modifiers
2658
-   * @argument {Object} data - The data object generated by `update` method
2659
-   * @argument {Object} data.styles - List of style properties - values to apply to popper element
2660
-   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
2661
-   * @argument {Object} options - Modifiers configuration and options
2662
-   * @returns {Object} The same data object
2663
-   */
2664
-  function applyStyle(data) {
2665
-    // any property present in `data.styles` will be applied to the popper,
2666
-    // in this way we can make the 3rd party modifiers add custom styles to it
2667
-    // Be aware, modifiers could override the properties defined in the previous
2668
-    // lines of this modifier!
2669
-    setStyles(data.instance.popper, data.styles);
2670
-
2671
-    // any property present in `data.attributes` will be applied to the popper,
2672
-    // they will be set as HTML attributes of the element
2673
-    setAttributes(data.instance.popper, data.attributes);
2674
-
2675
-    // if arrowElement is defined and arrowStyles has some properties
2676
-    if (data.arrowElement && Object.keys(data.arrowStyles).length) {
2677
-      setStyles(data.arrowElement, data.arrowStyles);
2678
-    }
2679
-
2680
-    return data;
2681
-  }
2682
-
2683
-  /**
2684
-   * Set the x-placement attribute before everything else because it could be used
2685
-   * to add margins to the popper margins needs to be calculated to get the
2686
-   * correct popper offsets.
2687
-   * @method
2688
-   * @memberof Popper.modifiers
2689
-   * @param {HTMLElement} reference - The reference element used to position the popper
2690
-   * @param {HTMLElement} popper - The HTML element used as popper
2691
-   * @param {Object} options - Popper.js options
2692
-   */
2693
-  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
2694
-    // compute reference element offsets
2695
-    var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
2696
-
2697
-    // compute auto placement, store placement inside the data object,
2698
-    // modifiers will be able to edit `placement` if needed
2699
-    // and refer to originalPlacement to know the original value
2700
-    var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
2701
-
2702
-    popper.setAttribute('x-placement', placement);
2703
-
2704
-    // Apply `position` to popper before anything else because
2705
-    // without the position applied we can't guarantee correct computations
2706
-    setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
2707
-
2708
-    return options;
2709
-  }
2710
-
2711
-  /**
2712
-   * @function
2713
-   * @memberof Popper.Utils
2714
-   * @argument {Object} data - The data object generated by `update` method
2715
-   * @argument {Boolean} shouldRound - If the offsets should be rounded at all
2716
-   * @returns {Object} The popper's position offsets rounded
2717
-   *
2718
-   * The tale of pixel-perfect positioning. It's still not 100% perfect, but as
2719
-   * good as it can be within reason.
2720
-   * Discussion here: https://github.com/FezVrasta/popper.js/pull/715
2721
-   *
2722
-   * Low DPI screens cause a popper to be blurry if not using full pixels (Safari
2723
-   * as well on High DPI screens).
2724
-   *
2725
-   * Firefox prefers no rounding for positioning and does not have blurriness on
2726
-   * high DPI screens.
2727
-   *
2728
-   * Only horizontal placement and left/right values need to be considered.
2729
-   */
2730
-  function getRoundedOffsets(data, shouldRound) {
2731
-    var _data$offsets = data.offsets,
2732
-        popper = _data$offsets.popper,
2733
-        reference = _data$offsets.reference;
2734
-    var round = Math.round,
2735
-        floor = Math.floor;
2736
-
2737
-    var noRound = function noRound(v) {
2738
-      return v;
2739
-    };
2740
-
2741
-    var referenceWidth = round(reference.width);
2742
-    var popperWidth = round(popper.width);
2743
-
2744
-    var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
2745
-    var isVariation = data.placement.indexOf('-') !== -1;
2746
-    var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
2747
-    var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
2748
-
2749
-    var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
2750
-    var verticalToInteger = !shouldRound ? noRound : round;
2751
-
2752
-    return {
2753
-      left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
2754
-      top: verticalToInteger(popper.top),
2755
-      bottom: verticalToInteger(popper.bottom),
2756
-      right: horizontalToInteger(popper.right)
2757
-    };
2758
-  }
2759
-
2760
-  var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);
2761
-
2762
-  /**
2763
-   * @function
2764
-   * @memberof Modifiers
2765
-   * @argument {Object} data - The data object generated by `update` method
2766
-   * @argument {Object} options - Modifiers configuration and options
2767
-   * @returns {Object} The data object, properly modified
2768
-   */
2769
-  function computeStyle(data, options) {
2770
-    var x = options.x,
2771
-        y = options.y;
2772
-    var popper = data.offsets.popper;
2773
-
2774
-    // Remove this legacy support in Popper.js v2
2775
-
2776
-    var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
2777
-      return modifier.name === 'applyStyle';
2778
-    }).gpuAcceleration;
2779
-    if (legacyGpuAccelerationOption !== undefined) {
2780
-      console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
2781
-    }
2782
-    var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
2783
-
2784
-    var offsetParent = getOffsetParent(data.instance.popper);
2785
-    var offsetParentRect = getBoundingClientRect(offsetParent);
2786
-
2787
-    // Styles
2788
-    var styles = {
2789
-      position: popper.position
2790
-    };
2791
-
2792
-    var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);
2793
-
2794
-    var sideA = x === 'bottom' ? 'top' : 'bottom';
2795
-    var sideB = y === 'right' ? 'left' : 'right';
2796
-
2797
-    // if gpuAcceleration is set to `true` and transform is supported,
2798
-    //  we use `translate3d` to apply the position to the popper we
2799
-    // automatically use the supported prefixed version if needed
2800
-    var prefixedProperty = getSupportedPropertyName('transform');
2801
-
2802
-    // now, let's make a step back and look at this code closely (wtf?)
2803
-    // If the content of the popper grows once it's been positioned, it
2804
-    // may happen that the popper gets misplaced because of the new content
2805
-    // overflowing its reference element
2806
-    // To avoid this problem, we provide two options (x and y), which allow
2807
-    // the consumer to define the offset origin.
2808
-    // If we position a popper on top of a reference element, we can set
2809
-    // `x` to `top` to make the popper grow towards its top instead of
2810
-    // its bottom.
2811
-    var left = void 0,
2812
-        top = void 0;
2813
-    if (sideA === 'bottom') {
2814
-      // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)
2815
-      // and not the bottom of the html element
2816
-      if (offsetParent.nodeName === 'HTML') {
2817
-        top = -offsetParent.clientHeight + offsets.bottom;
2818
-      } else {
2819
-        top = -offsetParentRect.height + offsets.bottom;
2820
-      }
2821
-    } else {
2822
-      top = offsets.top;
2823
-    }
2824
-    if (sideB === 'right') {
2825
-      if (offsetParent.nodeName === 'HTML') {
2826
-        left = -offsetParent.clientWidth + offsets.right;
2827
-      } else {
2828
-        left = -offsetParentRect.width + offsets.right;
2829
-      }
2830
-    } else {
2831
-      left = offsets.left;
2832
-    }
2833
-    if (gpuAcceleration && prefixedProperty) {
2834
-      styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
2835
-      styles[sideA] = 0;
2836
-      styles[sideB] = 0;
2837
-      styles.willChange = 'transform';
2838
-    } else {
2839
-      // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
2840
-      var invertTop = sideA === 'bottom' ? -1 : 1;
2841
-      var invertLeft = sideB === 'right' ? -1 : 1;
2842
-      styles[sideA] = top * invertTop;
2843
-      styles[sideB] = left * invertLeft;
2844
-      styles.willChange = sideA + ', ' + sideB;
2845
-    }
2846
-
2847
-    // Attributes
2848
-    var attributes = {
2849
-      'x-placement': data.placement
2850
-    };
2851
-
2852
-    // Update `data` attributes, styles and arrowStyles
2853
-    data.attributes = _extends({}, attributes, data.attributes);
2854
-    data.styles = _extends({}, styles, data.styles);
2855
-    data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
2856
-
2857
-    return data;
2858
-  }
2859
-
2860
-  /**
2861
-   * Helper used to know if the given modifier depends from another one.<br />
2862
-   * It checks if the needed modifier is listed and enabled.
2863
-   * @method
2864
-   * @memberof Popper.Utils
2865
-   * @param {Array} modifiers - list of modifiers
2866
-   * @param {String} requestingName - name of requesting modifier
2867
-   * @param {String} requestedName - name of requested modifier
2868
-   * @returns {Boolean}
2869
-   */
2870
-  function isModifierRequired(modifiers, requestingName, requestedName) {
2871
-    var requesting = find(modifiers, function (_ref) {
2872
-      var name = _ref.name;
2873
-      return name === requestingName;
2874
-    });
2875
-
2876
-    var isRequired = !!requesting && modifiers.some(function (modifier) {
2877
-      return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
2878
-    });
2879
-
2880
-    if (!isRequired) {
2881
-      var _requesting = '`' + requestingName + '`';
2882
-      var requested = '`' + requestedName + '`';
2883
-      console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
2884
-    }
2885
-    return isRequired;
2886
-  }
2887
-
2888
-  /**
2889
-   * @function
2890
-   * @memberof Modifiers
2891
-   * @argument {Object} data - The data object generated by update method
2892
-   * @argument {Object} options - Modifiers configuration and options
2893
-   * @returns {Object} The data object, properly modified
2894
-   */
2895
-  function arrow(data, options) {
2896
-    var _data$offsets$arrow;
2897
-
2898
-    // arrow depends on keepTogether in order to work
2899
-    if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
2900
-      return data;
2901
-    }
2902
-
2903
-    var arrowElement = options.element;
2904
-
2905
-    // if arrowElement is a string, suppose it's a CSS selector
2906
-    if (typeof arrowElement === 'string') {
2907
-      arrowElement = data.instance.popper.querySelector(arrowElement);
2908
-
2909
-      // if arrowElement is not found, don't run the modifier
2910
-      if (!arrowElement) {
2911
-        return data;
2912
-      }
2913
-    } else {
2914
-      // if the arrowElement isn't a query selector we must check that the
2915
-      // provided DOM node is child of its popper node
2916
-      if (!data.instance.popper.contains(arrowElement)) {
2917
-        console.warn('WARNING: `arrow.element` must be child of its popper element!');
2918
-        return data;
2919
-      }
2920
-    }
2921
-
2922
-    var placement = data.placement.split('-')[0];
2923
-    var _data$offsets = data.offsets,
2924
-        popper = _data$offsets.popper,
2925
-        reference = _data$offsets.reference;
2926
-
2927
-    var isVertical = ['left', 'right'].indexOf(placement) !== -1;
2928
-
2929
-    var len = isVertical ? 'height' : 'width';
2930
-    var sideCapitalized = isVertical ? 'Top' : 'Left';
2931
-    var side = sideCapitalized.toLowerCase();
2932
-    var altSide = isVertical ? 'left' : 'top';
2933
-    var opSide = isVertical ? 'bottom' : 'right';
2934
-    var arrowElementSize = getOuterSizes(arrowElement)[len];
2935
-
2936
-    //
2937
-    // extends keepTogether behavior making sure the popper and its
2938
-    // reference have enough pixels in conjunction
2939
-    //
2940
-
2941
-    // top/left side
2942
-    if (reference[opSide] - arrowElementSize < popper[side]) {
2943
-      data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
2944
-    }
2945
-    // bottom/right side
2946
-    if (reference[side] + arrowElementSize > popper[opSide]) {
2947
-      data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
2948
-    }
2949
-    data.offsets.popper = getClientRect(data.offsets.popper);
2950
-
2951
-    // compute center of the popper
2952
-    var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
2953
-
2954
-    // Compute the sideValue using the updated popper offsets
2955
-    // take popper margin in account because we don't have this info available
2956
-    var css = getStyleComputedProperty(data.instance.popper);
2957
-    var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
2958
-    var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
2959
-    var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
2960
-
2961
-    // prevent arrowElement from being placed not contiguously to its popper
2962
-    sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
2963
-
2964
-    data.arrowElement = arrowElement;
2965
-    data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
2966
-
2967
-    return data;
2968
-  }
2969
-
2970
-  /**
2971
-   * Get the opposite placement variation of the given one
2972
-   * @method
2973
-   * @memberof Popper.Utils
2974
-   * @argument {String} placement variation
2975
-   * @returns {String} flipped placement variation
2976
-   */
2977
-  function getOppositeVariation(variation) {
2978
-    if (variation === 'end') {
2979
-      return 'start';
2980
-    } else if (variation === 'start') {
2981
-      return 'end';
2982
-    }
2983
-    return variation;
2984
-  }
2985
-
2986
-  /**
2987
-   * List of accepted placements to use as values of the `placement` option.<br />
2988
-   * Valid placements are:
2989
-   * - `auto`
2990
-   * - `top`
2991
-   * - `right`
2992
-   * - `bottom`
2993
-   * - `left`
2994
-   *
2995
-   * Each placement can have a variation from this list:
2996
-   * - `-start`
2997
-   * - `-end`
2998
-   *
2999
-   * Variations are interpreted easily if you think of them as the left to right
3000
-   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
3001
-   * is right.<br />
3002
-   * Vertically (`left` and `right`), `start` is top and `end` is bottom.
3003
-   *
3004
-   * Some valid examples are:
3005
-   * - `top-end` (on top of reference, right aligned)
3006
-   * - `right-start` (on right of reference, top aligned)
3007
-   * - `bottom` (on bottom, centered)
3008
-   * - `auto-end` (on the side with more space available, alignment depends by placement)
3009
-   *
3010
-   * @static
3011
-   * @type {Array}
3012
-   * @enum {String}
3013
-   * @readonly
3014
-   * @method placements
3015
-   * @memberof Popper
3016
-   */
3017
-  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
3018
-
3019
-  // Get rid of `auto` `auto-start` and `auto-end`
3020
-  var validPlacements = placements.slice(3);
3021
-
3022
-  /**
3023
-   * Given an initial placement, returns all the subsequent placements
3024
-   * clockwise (or counter-clockwise).
3025
-   *
3026
-   * @method
3027
-   * @memberof Popper.Utils
3028
-   * @argument {String} placement - A valid placement (it accepts variations)
3029
-   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
3030
-   * @returns {Array} placements including their variations
3031
-   */
3032
-  function clockwise(placement) {
3033
-    var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3034
-
3035
-    var index = validPlacements.indexOf(placement);
3036
-    var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
3037
-    return counter ? arr.reverse() : arr;
3038
-  }
3039
-
3040
-  var BEHAVIORS = {
3041
-    FLIP: 'flip',
3042
-    CLOCKWISE: 'clockwise',
3043
-    COUNTERCLOCKWISE: 'counterclockwise'
3044
-  };
3045
-
3046
-  /**
3047
-   * @function
3048
-   * @memberof Modifiers
3049
-   * @argument {Object} data - The data object generated by update method
3050
-   * @argument {Object} options - Modifiers configuration and options
3051
-   * @returns {Object} The data object, properly modified
3052
-   */
3053
-  function flip(data, options) {
3054
-    // if `inner` modifier is enabled, we can't use the `flip` modifier
3055
-    if (isModifierEnabled(data.instance.modifiers, 'inner')) {
3056
-      return data;
3057
-    }
3058
-
3059
-    if (data.flipped && data.placement === data.originalPlacement) {
3060
-      // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
3061
-      return data;
3062
-    }
3063
-
3064
-    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
3065
-
3066
-    var placement = data.placement.split('-')[0];
3067
-    var placementOpposite = getOppositePlacement(placement);
3068
-    var variation = data.placement.split('-')[1] || '';
3069
-
3070
-    var flipOrder = [];
3071
-
3072
-    switch (options.behavior) {
3073
-      case BEHAVIORS.FLIP:
3074
-        flipOrder = [placement, placementOpposite];
3075
-        break;
3076
-      case BEHAVIORS.CLOCKWISE:
3077
-        flipOrder = clockwise(placement);
3078
-        break;
3079
-      case BEHAVIORS.COUNTERCLOCKWISE:
3080
-        flipOrder = clockwise(placement, true);
3081
-        break;
3082
-      default:
3083
-        flipOrder = options.behavior;
3084
-    }
3085
-
3086
-    flipOrder.forEach(function (step, index) {
3087
-      if (placement !== step || flipOrder.length === index + 1) {
3088
-        return data;
3089
-      }
3090
-
3091
-      placement = data.placement.split('-')[0];
3092
-      placementOpposite = getOppositePlacement(placement);
3093
-
3094
-      var popperOffsets = data.offsets.popper;
3095
-      var refOffsets = data.offsets.reference;
3096
-
3097
-      // using floor because the reference offsets may contain decimals we are not going to consider here
3098
-      var floor = Math.floor;
3099
-      var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
3100
-
3101
-      var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
3102
-      var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
3103
-      var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
3104
-      var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
3105
-
3106
-      var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
3107
-
3108
-      // flip the variation if required
3109
-      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
3110
-      var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
3111
-
3112
-      if (overlapsRef || overflowsBoundaries || flippedVariation) {
3113
-        // this boolean to detect any flip loop
3114
-        data.flipped = true;
3115
-
3116
-        if (overlapsRef || overflowsBoundaries) {
3117
-          placement = flipOrder[index + 1];
3118
-        }
3119
-
3120
-        if (flippedVariation) {
3121
-          variation = getOppositeVariation(variation);
3122
-        }
3123
-
3124
-        data.placement = placement + (variation ? '-' + variation : '');
3125
-
3126
-        // this object contains `position`, we want to preserve it along with
3127
-        // any additional property we may add in the future
3128
-        data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
3129
-
3130
-        data = runModifiers(data.instance.modifiers, data, 'flip');
3131
-      }
3132
-    });
3133
-    return data;
3134
-  }
3135
-
3136
-  /**
3137
-   * @function
3138
-   * @memberof Modifiers
3139
-   * @argument {Object} data - The data object generated by update method
3140
-   * @argument {Object} options - Modifiers configuration and options
3141
-   * @returns {Object} The data object, properly modified
3142
-   */
3143
-  function keepTogether(data) {
3144
-    var _data$offsets = data.offsets,
3145
-        popper = _data$offsets.popper,
3146
-        reference = _data$offsets.reference;
3147
-
3148
-    var placement = data.placement.split('-')[0];
3149
-    var floor = Math.floor;
3150
-    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
3151
-    var side = isVertical ? 'right' : 'bottom';
3152
-    var opSide = isVertical ? 'left' : 'top';
3153
-    var measurement = isVertical ? 'width' : 'height';
3154
-
3155
-    if (popper[side] < floor(reference[opSide])) {
3156
-      data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
3157
-    }
3158
-    if (popper[opSide] > floor(reference[side])) {
3159
-      data.offsets.popper[opSide] = floor(reference[side]);
3160
-    }
3161
-
3162
-    return data;
3163
-  }
3164
-
3165
-  /**
3166
-   * Converts a string containing value + unit into a px value number
3167
-   * @function
3168
-   * @memberof {modifiers~offset}
3169
-   * @private
3170
-   * @argument {String} str - Value + unit string
3171
-   * @argument {String} measurement - `height` or `width`
3172
-   * @argument {Object} popperOffsets
3173
-   * @argument {Object} referenceOffsets
3174
-   * @returns {Number|String}
3175
-   * Value in pixels, or original string if no values were extracted
3176
-   */
3177
-  function toValue(str, measurement, popperOffsets, referenceOffsets) {
3178
-    // separate value from unit
3179
-    var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
3180
-    var value = +split[1];
3181
-    var unit = split[2];
3182
-
3183
-    // If it's not a number it's an operator, I guess
3184
-    if (!value) {
3185
-      return str;
3186
-    }
3187
-
3188
-    if (unit.indexOf('%') === 0) {
3189
-      var element = void 0;
3190
-      switch (unit) {
3191
-        case '%p':
3192
-          element = popperOffsets;
3193
-          break;
3194
-        case '%':
3195
-        case '%r':
3196
-        default:
3197
-          element = referenceOffsets;
3198
-      }
3199
-
3200
-      var rect = getClientRect(element);
3201
-      return rect[measurement] / 100 * value;
3202
-    } else if (unit === 'vh' || unit === 'vw') {
3203
-      // if is a vh or vw, we calculate the size based on the viewport
3204
-      var size = void 0;
3205
-      if (unit === 'vh') {
3206
-        size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
3207
-      } else {
3208
-        size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
3209
-      }
3210
-      return size / 100 * value;
3211
-    } else {
3212
-      // if is an explicit pixel unit, we get rid of the unit and keep the value
3213
-      // if is an implicit unit, it's px, and we return just the value
3214
-      return value;
3215
-    }
3216
-  }
3217
-
3218
-  /**
3219
-   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
3220
-   * @function
3221
-   * @memberof {modifiers~offset}
3222
-   * @private
3223
-   * @argument {String} offset
3224
-   * @argument {Object} popperOffsets
3225
-   * @argument {Object} referenceOffsets
3226
-   * @argument {String} basePlacement
3227
-   * @returns {Array} a two cells array with x and y offsets in numbers
3228
-   */
3229
-  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
3230
-    var offsets = [0, 0];
3231
-
3232
-    // Use height if placement is left or right and index is 0 otherwise use width
3233
-    // in this way the first offset will use an axis and the second one
3234
-    // will use the other one
3235
-    var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
3236
-
3237
-    // Split the offset string to obtain a list of values and operands
3238
-    // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
3239
-    var fragments = offset.split(/(\+|\-)/).map(function (frag) {
3240
-      return frag.trim();
3241
-    });
3242
-
3243
-    // Detect if the offset string contains a pair of values or a single one
3244
-    // they could be separated by comma or space
3245
-    var divider = fragments.indexOf(find(fragments, function (frag) {
3246
-      return frag.search(/,|\s/) !== -1;
3247
-    }));
3248
-
3249
-    if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
3250
-      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
3251
-    }
3252
-
3253
-    // If divider is found, we divide the list of values and operands to divide
3254
-    // them by ofset X and Y.
3255
-    var splitRegex = /\s*,\s*|\s+/;
3256
-    var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
3257
-
3258
-    // Convert the values with units to absolute pixels to allow our computations
3259
-    ops = ops.map(function (op, index) {
3260
-      // Most of the units rely on the orientation of the popper
3261
-      var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
3262
-      var mergeWithPrevious = false;
3263
-      return op
3264
-      // This aggregates any `+` or `-` sign that aren't considered operators
3265
-      // e.g.: 10 + +5 => [10, +, +5]
3266
-      .reduce(function (a, b) {
3267
-        if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
3268
-          a[a.length - 1] = b;
3269
-          mergeWithPrevious = true;
3270
-          return a;
3271
-        } else if (mergeWithPrevious) {
3272
-          a[a.length - 1] += b;
3273
-          mergeWithPrevious = false;
3274
-          return a;
3275
-        } else {
3276
-          return a.concat(b);
3277
-        }
3278
-      }, [])
3279
-      // Here we convert the string values into number values (in px)
3280
-      .map(function (str) {
3281
-        return toValue(str, measurement, popperOffsets, referenceOffsets);
3282
-      });
3283
-    });
3284
-
3285
-    // Loop trough the offsets arrays and execute the operations
3286
-    ops.forEach(function (op, index) {
3287
-      op.forEach(function (frag, index2) {
3288
-        if (isNumeric(frag)) {
3289
-          offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
3290
-        }
3291
-      });
3292
-    });
3293
-    return offsets;
3294
-  }
3295
-
3296
-  /**
3297
-   * @function
3298
-   * @memberof Modifiers
3299
-   * @argument {Object} data - The data object generated by update method
3300
-   * @argument {Object} options - Modifiers configuration and options
3301
-   * @argument {Number|String} options.offset=0
3302
-   * The offset value as described in the modifier description
3303
-   * @returns {Object} The data object, properly modified
3304
-   */
3305
-  function offset(data, _ref) {
3306
-    var offset = _ref.offset;
3307
-    var placement = data.placement,
3308
-        _data$offsets = data.offsets,
3309
-        popper = _data$offsets.popper,
3310
-        reference = _data$offsets.reference;
3311
-
3312
-    var basePlacement = placement.split('-')[0];
3313
-
3314
-    var offsets = void 0;
3315
-    if (isNumeric(+offset)) {
3316
-      offsets = [+offset, 0];
3317
-    } else {
3318
-      offsets = parseOffset(offset, popper, reference, basePlacement);
3319
-    }
3320
-
3321
-    if (basePlacement === 'left') {
3322
-      popper.top += offsets[0];
3323
-      popper.left -= offsets[1];
3324
-    } else if (basePlacement === 'right') {
3325
-      popper.top += offsets[0];
3326
-      popper.left += offsets[1];
3327
-    } else if (basePlacement === 'top') {
3328
-      popper.left += offsets[0];
3329
-      popper.top -= offsets[1];
3330
-    } else if (basePlacement === 'bottom') {
3331
-      popper.left += offsets[0];
3332
-      popper.top += offsets[1];
3333
-    }
3334
-
3335
-    data.popper = popper;
3336
-    return data;
3337
-  }
3338
-
3339
-  /**
3340
-   * @function
3341
-   * @memberof Modifiers
3342
-   * @argument {Object} data - The data object generated by `update` method
3343
-   * @argument {Object} options - Modifiers configuration and options
3344
-   * @returns {Object} The data object, properly modified
3345
-   */
3346
-  function preventOverflow(data, options) {
3347
-    var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
3348
-
3349
-    // If offsetParent is the reference element, we really want to
3350
-    // go one step up and use the next offsetParent as reference to
3351
-    // avoid to make this modifier completely useless and look like broken
3352
-    if (data.instance.reference === boundariesElement) {
3353
-      boundariesElement = getOffsetParent(boundariesElement);
3354
-    }
3355
-
3356
-    // NOTE: DOM access here
3357
-    // resets the popper's position so that the document size can be calculated excluding
3358
-    // the size of the popper element itself
3359
-    var transformProp = getSupportedPropertyName('transform');
3360
-    var popperStyles = data.instance.popper.style; // assignment to help minification
3361
-    var top = popperStyles.top,
3362
-        left = popperStyles.left,
3363
-        transform = popperStyles[transformProp];
3364
-
3365
-    popperStyles.top = '';
3366
-    popperStyles.left = '';
3367
-    popperStyles[transformProp] = '';
3368
-
3369
-    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
3370
-
3371
-    // NOTE: DOM access here
3372
-    // restores the original style properties after the offsets have been computed
3373
-    popperStyles.top = top;
3374
-    popperStyles.left = left;
3375
-    popperStyles[transformProp] = transform;
3376
-
3377
-    options.boundaries = boundaries;
3378
-
3379
-    var order = options.priority;
3380
-    var popper = data.offsets.popper;
3381
-
3382
-    var check = {
3383
-      primary: function primary(placement) {
3384
-        var value = popper[placement];
3385
-        if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
3386
-          value = Math.max(popper[placement], boundaries[placement]);
3387
-        }
3388
-        return defineProperty({}, placement, value);
3389
-      },
3390
-      secondary: function secondary(placement) {
3391
-        var mainSide = placement === 'right' ? 'left' : 'top';
3392
-        var value = popper[mainSide];
3393
-        if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
3394
-          value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
3395
-        }
3396
-        return defineProperty({}, mainSide, value);
3397
-      }
3398
-    };
3399
-
3400
-    order.forEach(function (placement) {
3401
-      var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
3402
-      popper = _extends({}, popper, check[side](placement));
3403
-    });
3404
-
3405
-    data.offsets.popper = popper;
3406
-
3407
-    return data;
3408
-  }
3409
-
3410
-  /**
3411
-   * @function
3412
-   * @memberof Modifiers
3413
-   * @argument {Object} data - The data object generated by `update` method
3414
-   * @argument {Object} options - Modifiers configuration and options
3415
-   * @returns {Object} The data object, properly modified
3416
-   */
3417
-  function shift(data) {
3418
-    var placement = data.placement;
3419
-    var basePlacement = placement.split('-')[0];
3420
-    var shiftvariation = placement.split('-')[1];
3421
-
3422
-    // if shift shiftvariation is specified, run the modifier
3423
-    if (shiftvariation) {
3424
-      var _data$offsets = data.offsets,
3425
-          reference = _data$offsets.reference,
3426
-          popper = _data$offsets.popper;
3427
-
3428
-      var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
3429
-      var side = isVertical ? 'left' : 'top';
3430
-      var measurement = isVertical ? 'width' : 'height';
3431
-
3432
-      var shiftOffsets = {
3433
-        start: defineProperty({}, side, reference[side]),
3434
-        end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
3435
-      };
3436
-
3437
-      data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
3438
-    }
3439
-
3440
-    return data;
3441
-  }
3442
-
3443
-  /**
3444
-   * @function
3445
-   * @memberof Modifiers
3446
-   * @argument {Object} data - The data object generated by update method
3447
-   * @argument {Object} options - Modifiers configuration and options
3448
-   * @returns {Object} The data object, properly modified
3449
-   */
3450
-  function hide(data) {
3451
-    if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
3452
-      return data;
3453
-    }
3454
-
3455
-    var refRect = data.offsets.reference;
3456
-    var bound = find(data.instance.modifiers, function (modifier) {
3457
-      return modifier.name === 'preventOverflow';
3458
-    }).boundaries;
3459
-
3460
-    if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
3461
-      // Avoid unnecessary DOM access if visibility hasn't changed
3462
-      if (data.hide === true) {
3463
-        return data;
3464
-      }
3465
-
3466
-      data.hide = true;
3467
-      data.attributes['x-out-of-boundaries'] = '';
3468
-    } else {
3469
-      // Avoid unnecessary DOM access if visibility hasn't changed
3470
-      if (data.hide === false) {
3471
-        return data;
3472
-      }
3473
-
3474
-      data.hide = false;
3475
-      data.attributes['x-out-of-boundaries'] = false;
3476
-    }
3477
-
3478
-    return data;
3479
-  }
3480
-
3481
-  /**
3482
-   * @function
3483
-   * @memberof Modifiers
3484
-   * @argument {Object} data - The data object generated by `update` method
3485
-   * @argument {Object} options - Modifiers configuration and options
3486
-   * @returns {Object} The data object, properly modified
3487
-   */
3488
-  function inner(data) {
3489
-    var placement = data.placement;
3490
-    var basePlacement = placement.split('-')[0];
3491
-    var _data$offsets = data.offsets,
3492
-        popper = _data$offsets.popper,
3493
-        reference = _data$offsets.reference;
3494
-
3495
-    var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
3496
-
3497
-    var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
3498
-
3499
-    popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
3500
-
3501
-    data.placement = getOppositePlacement(placement);
3502
-    data.offsets.popper = getClientRect(popper);
3503
-
3504
-    return data;
3505
-  }
3506
-
3507
-  /**
3508
-   * Modifier function, each modifier can have a function of this type assigned
3509
-   * to its `fn` property.<br />
3510
-   * These functions will be called on each update, this means that you must
3511
-   * make sure they are performant enough to avoid performance bottlenecks.
3512
-   *
3513
-   * @function ModifierFn
3514
-   * @argument {dataObject} data - The data object generated by `update` method
3515
-   * @argument {Object} options - Modifiers configuration and options
3516
-   * @returns {dataObject} The data object, properly modified
3517
-   */
3518
-
3519
-  /**
3520
-   * Modifiers are plugins used to alter the behavior of your poppers.<br />
3521
-   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
3522
-   * needed by the library.
3523
-   *
3524
-   * Usually you don't want to override the `order`, `fn` and `onLoad` props.
3525
-   * All the other properties are configurations that could be tweaked.
3526
-   * @namespace modifiers
3527
-   */
3528
-  var modifiers = {
3529
-    /**
3530
-     * Modifier used to shift the popper on the start or end of its reference
3531
-     * element.<br />
3532
-     * It will read the variation of the `placement` property.<br />
3533
-     * It can be one either `-end` or `-start`.
3534
-     * @memberof modifiers
3535
-     * @inner
3536
-     */
3537
-    shift: {
3538
-      /** @prop {number} order=100 - Index used to define the order of execution */
3539
-      order: 100,
3540
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3541
-      enabled: true,
3542
-      /** @prop {ModifierFn} */
3543
-      fn: shift
3544
-    },
3545
-
3546
-    /**
3547
-     * The `offset` modifier can shift your popper on both its axis.
3548
-     *
3549
-     * It accepts the following units:
3550
-     * - `px` or unit-less, interpreted as pixels
3551
-     * - `%` or `%r`, percentage relative to the length of the reference element
3552
-     * - `%p`, percentage relative to the length of the popper element
3553
-     * - `vw`, CSS viewport width unit
3554
-     * - `vh`, CSS viewport height unit
3555
-     *
3556
-     * For length is intended the main axis relative to the placement of the popper.<br />
3557
-     * This means that if the placement is `top` or `bottom`, the length will be the
3558
-     * `width`. In case of `left` or `right`, it will be the `height`.
3559
-     *
3560
-     * You can provide a single value (as `Number` or `String`), or a pair of values
3561
-     * as `String` divided by a comma or one (or more) white spaces.<br />
3562
-     * The latter is a deprecated method because it leads to confusion and will be
3563
-     * removed in v2.<br />
3564
-     * Additionally, it accepts additions and subtractions between different units.
3565
-     * Note that multiplications and divisions aren't supported.
3566
-     *
3567
-     * Valid examples are:
3568
-     * ```
3569
-     * 10
3570
-     * '10%'
3571
-     * '10, 10'
3572
-     * '10%, 10'
3573
-     * '10 + 10%'
3574
-     * '10 - 5vh + 3%'
3575
-     * '-10px + 5vh, 5px - 6%'
3576
-     * ```
3577
-     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
3578
-     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
3579
-     * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).
3580
-     *
3581
-     * @memberof modifiers
3582
-     * @inner
3583
-     */
3584
-    offset: {
3585
-      /** @prop {number} order=200 - Index used to define the order of execution */
3586
-      order: 200,
3587
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3588
-      enabled: true,
3589
-      /** @prop {ModifierFn} */
3590
-      fn: offset,
3591
-      /** @prop {Number|String} offset=0
3592
-       * The offset value as described in the modifier description
3593
-       */
3594
-      offset: 0
3595
-    },
3596
-
3597
-    /**
3598
-     * Modifier used to prevent the popper from being positioned outside the boundary.
3599
-     *
3600
-     * A scenario exists where the reference itself is not within the boundaries.<br />
3601
-     * We can say it has "escaped the boundaries" — or just "escaped".<br />
3602
-     * In this case we need to decide whether the popper should either:
3603
-     *
3604
-     * - detach from the reference and remain "trapped" in the boundaries, or
3605
-     * - if it should ignore the boundary and "escape with its reference"
3606
-     *
3607
-     * When `escapeWithReference` is set to`true` and reference is completely
3608
-     * outside its boundaries, the popper will overflow (or completely leave)
3609
-     * the boundaries in order to remain attached to the edge of the reference.
3610
-     *
3611
-     * @memberof modifiers
3612
-     * @inner
3613
-     */
3614
-    preventOverflow: {
3615
-      /** @prop {number} order=300 - Index used to define the order of execution */
3616
-      order: 300,
3617
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3618
-      enabled: true,
3619
-      /** @prop {ModifierFn} */
3620
-      fn: preventOverflow,
3621
-      /**
3622
-       * @prop {Array} [priority=['left','right','top','bottom']]
3623
-       * Popper will try to prevent overflow following these priorities by default,
3624
-       * then, it could overflow on the left and on top of the `boundariesElement`
3625
-       */
3626
-      priority: ['left', 'right', 'top', 'bottom'],
3627
-      /**
3628
-       * @prop {number} padding=5
3629
-       * Amount of pixel used to define a minimum distance between the boundaries
3630
-       * and the popper. This makes sure the popper always has a little padding
3631
-       * between the edges of its container
3632
-       */
3633
-      padding: 5,
3634
-      /**
3635
-       * @prop {String|HTMLElement} boundariesElement='scrollParent'
3636
-       * Boundaries used by the modifier. Can be `scrollParent`, `window`,
3637
-       * `viewport` or any DOM element.
3638
-       */
3639
-      boundariesElement: 'scrollParent'
3640
-    },
3641
-
3642
-    /**
3643
-     * Modifier used to make sure the reference and its popper stay near each other
3644
-     * without leaving any gap between the two. Especially useful when the arrow is
3645
-     * enabled and you want to ensure that it points to its reference element.
3646
-     * It cares only about the first axis. You can still have poppers with margin
3647
-     * between the popper and its reference element.
3648
-     * @memberof modifiers
3649
-     * @inner
3650
-     */
3651
-    keepTogether: {
3652
-      /** @prop {number} order=400 - Index used to define the order of execution */
3653
-      order: 400,
3654
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3655
-      enabled: true,
3656
-      /** @prop {ModifierFn} */
3657
-      fn: keepTogether
3658
-    },
3659
-
3660
-    /**
3661
-     * This modifier is used to move the `arrowElement` of the popper to make
3662
-     * sure it is positioned between the reference element and its popper element.
3663
-     * It will read the outer size of the `arrowElement` node to detect how many
3664
-     * pixels of conjunction are needed.
3665
-     *
3666
-     * It has no effect if no `arrowElement` is provided.
3667
-     * @memberof modifiers
3668
-     * @inner
3669
-     */
3670
-    arrow: {
3671
-      /** @prop {number} order=500 - Index used to define the order of execution */
3672
-      order: 500,
3673
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3674
-      enabled: true,
3675
-      /** @prop {ModifierFn} */
3676
-      fn: arrow,
3677
-      /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
3678
-      element: '[x-arrow]'
3679
-    },
3680
-
3681
-    /**
3682
-     * Modifier used to flip the popper's placement when it starts to overlap its
3683
-     * reference element.
3684
-     *
3685
-     * Requires the `preventOverflow` modifier before it in order to work.
3686
-     *
3687
-     * **NOTE:** this modifier will interrupt the current update cycle and will
3688
-     * restart it if it detects the need to flip the placement.
3689
-     * @memberof modifiers
3690
-     * @inner
3691
-     */
3692
-    flip: {
3693
-      /** @prop {number} order=600 - Index used to define the order of execution */
3694
-      order: 600,
3695
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3696
-      enabled: true,
3697
-      /** @prop {ModifierFn} */
3698
-      fn: flip,
3699
-      /**
3700
-       * @prop {String|Array} behavior='flip'
3701
-       * The behavior used to change the popper's placement. It can be one of
3702
-       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
3703
-       * placements (with optional variations)
3704
-       */
3705
-      behavior: 'flip',
3706
-      /**
3707
-       * @prop {number} padding=5
3708
-       * The popper will flip if it hits the edges of the `boundariesElement`
3709
-       */
3710
-      padding: 5,
3711
-      /**
3712
-       * @prop {String|HTMLElement} boundariesElement='viewport'
3713
-       * The element which will define the boundaries of the popper position.
3714
-       * The popper will never be placed outside of the defined boundaries
3715
-       * (except if `keepTogether` is enabled)
3716
-       */
3717
-      boundariesElement: 'viewport'
3718
-    },
3719
-
3720
-    /**
3721
-     * Modifier used to make the popper flow toward the inner of the reference element.
3722
-     * By default, when this modifier is disabled, the popper will be placed outside
3723
-     * the reference element.
3724
-     * @memberof modifiers
3725
-     * @inner
3726
-     */
3727
-    inner: {
3728
-      /** @prop {number} order=700 - Index used to define the order of execution */
3729
-      order: 700,
3730
-      /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
3731
-      enabled: false,
3732
-      /** @prop {ModifierFn} */
3733
-      fn: inner
3734
-    },
3735
-
3736
-    /**
3737
-     * Modifier used to hide the popper when its reference element is outside of the
3738
-     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
3739
-     * be used to hide with a CSS selector the popper when its reference is
3740
-     * out of boundaries.
3741
-     *
3742
-     * Requires the `preventOverflow` modifier before it in order to work.
3743
-     * @memberof modifiers
3744
-     * @inner
3745
-     */
3746
-    hide: {
3747
-      /** @prop {number} order=800 - Index used to define the order of execution */
3748
-      order: 800,
3749
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3750
-      enabled: true,
3751
-      /** @prop {ModifierFn} */
3752
-      fn: hide
3753
-    },
3754
-
3755
-    /**
3756
-     * Computes the style that will be applied to the popper element to gets
3757
-     * properly positioned.
3758
-     *
3759
-     * Note that this modifier will not touch the DOM, it just prepares the styles
3760
-     * so that `applyStyle` modifier can apply it. This separation is useful
3761
-     * in case you need to replace `applyStyle` with a custom implementation.
3762
-     *
3763
-     * This modifier has `850` as `order` value to maintain backward compatibility
3764
-     * with previous versions of Popper.js. Expect the modifiers ordering method
3765
-     * to change in future major versions of the library.
3766
-     *
3767
-     * @memberof modifiers
3768
-     * @inner
3769
-     */
3770
-    computeStyle: {
3771
-      /** @prop {number} order=850 - Index used to define the order of execution */
3772
-      order: 850,
3773
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3774
-      enabled: true,
3775
-      /** @prop {ModifierFn} */
3776
-      fn: computeStyle,
3777
-      /**
3778
-       * @prop {Boolean} gpuAcceleration=true
3779
-       * If true, it uses the CSS 3D transformation to position the popper.
3780
-       * Otherwise, it will use the `top` and `left` properties
3781
-       */
3782
-      gpuAcceleration: true,
3783
-      /**
3784
-       * @prop {string} [x='bottom']
3785
-       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
3786
-       * Change this if your popper should grow in a direction different from `bottom`
3787
-       */
3788
-      x: 'bottom',
3789
-      /**
3790
-       * @prop {string} [x='left']
3791
-       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
3792
-       * Change this if your popper should grow in a direction different from `right`
3793
-       */
3794
-      y: 'right'
3795
-    },
3796
-
3797
-    /**
3798
-     * Applies the computed styles to the popper element.
3799
-     *
3800
-     * All the DOM manipulations are limited to this modifier. This is useful in case
3801
-     * you want to integrate Popper.js inside a framework or view library and you
3802
-     * want to delegate all the DOM manipulations to it.
3803
-     *
3804
-     * Note that if you disable this modifier, you must make sure the popper element
3805
-     * has its position set to `absolute` before Popper.js can do its work!
3806
-     *
3807
-     * Just disable this modifier and define your own to achieve the desired effect.
3808
-     *
3809
-     * @memberof modifiers
3810
-     * @inner
3811
-     */
3812
-    applyStyle: {
3813
-      /** @prop {number} order=900 - Index used to define the order of execution */
3814
-      order: 900,
3815
-      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3816
-      enabled: true,
3817
-      /** @prop {ModifierFn} */
3818
-      fn: applyStyle,
3819
-      /** @prop {Function} */
3820
-      onLoad: applyStyleOnLoad,
3821
-      /**
3822
-       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
3823
-       * @prop {Boolean} gpuAcceleration=true
3824
-       * If true, it uses the CSS 3D transformation to position the popper.
3825
-       * Otherwise, it will use the `top` and `left` properties
3826
-       */
3827
-      gpuAcceleration: undefined
3828
-    }
3829
-  };
3830
-
3831
-  /**
3832
-   * The `dataObject` is an object containing all the information used by Popper.js.
3833
-   * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
3834
-   * @name dataObject
3835
-   * @property {Object} data.instance The Popper.js instance
3836
-   * @property {String} data.placement Placement applied to popper
3837
-   * @property {String} data.originalPlacement Placement originally defined on init
3838
-   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
3839
-   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper
3840
-   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
3841
-   * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)
3842
-   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)
3843
-   * @property {Object} data.boundaries Offsets of the popper boundaries
3844
-   * @property {Object} data.offsets The measurements of popper, reference and arrow elements
3845
-   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
3846
-   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
3847
-   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
3848
-   */
3849
-
3850
-  /**
3851
-   * Default options provided to Popper.js constructor.<br />
3852
-   * These can be overridden using the `options` argument of Popper.js.<br />
3853
-   * To override an option, simply pass an object with the same
3854
-   * structure of the `options` object, as the 3rd argument. For example:
3855
-   * ```
3856
-   * new Popper(ref, pop, {
3857
-   *   modifiers: {
3858
-   *     preventOverflow: { enabled: false }
3859
-   *   }
3860
-   * })
3861
-   * ```
3862
-   * @type {Object}
3863
-   * @static
3864
-   * @memberof Popper
3865
-   */
3866
-  var Defaults = {
3867
-    /**
3868
-     * Popper's placement.
3869
-     * @prop {Popper.placements} placement='bottom'
3870
-     */
3871
-    placement: 'bottom',
3872
-
3873
-    /**
3874
-     * Set this to true if you want popper to position it self in 'fixed' mode
3875
-     * @prop {Boolean} positionFixed=false
3876
-     */
3877
-    positionFixed: false,
3878
-
3879
-    /**
3880
-     * Whether events (resize, scroll) are initially enabled.
3881
-     * @prop {Boolean} eventsEnabled=true
3882
-     */
3883
-    eventsEnabled: true,
3884
-
3885
-    /**
3886
-     * Set to true if you want to automatically remove the popper when
3887
-     * you call the `destroy` method.
3888
-     * @prop {Boolean} removeOnDestroy=false
3889
-     */
3890
-    removeOnDestroy: false,
3891
-
3892
-    /**
3893
-     * Callback called when the popper is created.<br />
3894
-     * By default, it is set to no-op.<br />
3895
-     * Access Popper.js instance with `data.instance`.
3896
-     * @prop {onCreate}
3897
-     */
3898
-    onCreate: function onCreate() {},
3899
-
3900
-    /**
3901
-     * Callback called when the popper is updated. This callback is not called
3902
-     * on the initialization/creation of the popper, but only on subsequent
3903
-     * updates.<br />
3904
-     * By default, it is set to no-op.<br />
3905
-     * Access Popper.js instance with `data.instance`.
3906
-     * @prop {onUpdate}
3907
-     */
3908
-    onUpdate: function onUpdate() {},
3909
-
3910
-    /**
3911
-     * List of modifiers used to modify the offsets before they are applied to the popper.
3912
-     * They provide most of the functionalities of Popper.js.
3913
-     * @prop {modifiers}
3914
-     */
3915
-    modifiers: modifiers
3916
-  };
3917
-
3918
-  /**
3919
-   * @callback onCreate
3920
-   * @param {dataObject} data
3921
-   */
3922
-
3923
-  /**
3924
-   * @callback onUpdate
3925
-   * @param {dataObject} data
3926
-   */
3927
-
3928
-  // Utils
3929
-  // Methods
3930
-  var Popper = function () {
3931
-    /**
3932
-     * Creates a new Popper.js instance.
3933
-     * @class Popper
3934
-     * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper
3935
-     * @param {HTMLElement} popper - The HTML element used as the popper
3936
-     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
3937
-     * @return {Object} instance - The generated Popper.js instance
3938
-     */
3939
-    function Popper(reference, popper) {
3940
-      var _this = this;
3941
-
3942
-      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
3943
-      classCallCheck(this, Popper);
3944
-
3945
-      this.scheduleUpdate = function () {
3946
-        return requestAnimationFrame(_this.update);
3947
-      };
3948
-
3949
-      // make update() debounced, so that it only runs at most once-per-tick
3950
-      this.update = debounce(this.update.bind(this));
3951
-
3952
-      // with {} we create a new object with the options inside it
3953
-      this.options = _extends({}, Popper.Defaults, options);
3954
-
3955
-      // init state
3956
-      this.state = {
3957
-        isDestroyed: false,
3958
-        isCreated: false,
3959
-        scrollParents: []
3960
-      };
3961
-
3962
-      // get reference and popper elements (allow jQuery wrappers)
3963
-      this.reference = reference && reference.jquery ? reference[0] : reference;
3964
-      this.popper = popper && popper.jquery ? popper[0] : popper;
3965
-
3966
-      // Deep merge modifiers options
3967
-      this.options.modifiers = {};
3968
-      Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
3969
-        _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
3970
-      });
3971
-
3972
-      // Refactoring modifiers' list (Object => Array)
3973
-      this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
3974
-        return _extends({
3975
-          name: name
3976
-        }, _this.options.modifiers[name]);
3977
-      })
3978
-      // sort the modifiers by order
3979
-      .sort(function (a, b) {
3980
-        return a.order - b.order;
3981
-      });
3982
-
3983
-      // modifiers have the ability to execute arbitrary code when Popper.js get inited
3984
-      // such code is executed in the same order of its modifier
3985
-      // they could add new properties to their options configuration
3986
-      // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
3987
-      this.modifiers.forEach(function (modifierOptions) {
3988
-        if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
3989
-          modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
3990
-        }
3991
-      });
3992
-
3993
-      // fire the first update to position the popper in the right place
3994
-      this.update();
3995
-
3996
-      var eventsEnabled = this.options.eventsEnabled;
3997
-      if (eventsEnabled) {
3998
-        // setup event listeners, they will take care of update the position in specific situations
3999
-        this.enableEventListeners();
4000
-      }
4001
-
4002
-      this.state.eventsEnabled = eventsEnabled;
4003
-    }
4004
-
4005
-    // We can't use class properties because they don't get listed in the
4006
-    // class prototype and break stuff like Sinon stubs
4007
-
4008
-
4009
-    createClass(Popper, [{
4010
-      key: 'update',
4011
-      value: function update$$1() {
4012
-        return update.call(this);
4013
-      }
4014
-    }, {
4015
-      key: 'destroy',
4016
-      value: function destroy$$1() {
4017
-        return destroy.call(this);
4018
-      }
4019
-    }, {
4020
-      key: 'enableEventListeners',
4021
-      value: function enableEventListeners$$1() {
4022
-        return enableEventListeners.call(this);
4023
-      }
4024
-    }, {
4025
-      key: 'disableEventListeners',
4026
-      value: function disableEventListeners$$1() {
4027
-        return disableEventListeners.call(this);
4028
-      }
4029
-
4030
-      /**
4031
-       * Schedules an update. It will run on the next UI update available.
4032
-       * @method scheduleUpdate
4033
-       * @memberof Popper
4034
-       */
4035
-
4036
-
4037
-      /**
4038
-       * Collection of utilities useful when writing custom modifiers.
4039
-       * Starting from version 1.7, this method is available only if you
4040
-       * include `popper-utils.js` before `popper.js`.
4041
-       *
4042
-       * **DEPRECATION**: This way to access PopperUtils is deprecated
4043
-       * and will be removed in v2! Use the PopperUtils module directly instead.
4044
-       * Due to the high instability of the methods contained in Utils, we can't
4045
-       * guarantee them to follow semver. Use them at your own risk!
4046
-       * @static
4047
-       * @private
4048
-       * @type {Object}
4049
-       * @deprecated since version 1.8
4050
-       * @member Utils
4051
-       * @memberof Popper
4052
-       */
4053
-
4054
-    }]);
4055
-    return Popper;
4056
-  }();
4057
-
4058
-  /**
4059
-   * The `referenceObject` is an object that provides an interface compatible with Popper.js
4060
-   * and lets you use it as replacement of a real DOM node.<br />
4061
-   * You can use this method to position a popper relatively to a set of coordinates
4062
-   * in case you don't have a DOM node to use as reference.
4063
-   *
4064
-   * ```
4065
-   * new Popper(referenceObject, popperNode);
4066
-   * ```
4067
-   *
4068
-   * NB: This feature isn't supported in Internet Explorer 10.
4069
-   * @name referenceObject
4070
-   * @property {Function} data.getBoundingClientRect
4071
-   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
4072
-   * @property {number} data.clientWidth
4073
-   * An ES6 getter that will return the width of the virtual reference element.
4074
-   * @property {number} data.clientHeight
4075
-   * An ES6 getter that will return the height of the virtual reference element.
4076
-   */
4077
-
4078
-
4079
-  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
4080
-  Popper.placements = placements;
4081
-  Popper.Defaults = Defaults;
4082
-
4083
-  /**
4084
-   * ------------------------------------------------------------------------
4085
-   * Constants
4086
-   * ------------------------------------------------------------------------
4087
-   */
4088
-
4089
-  var NAME$4 = 'dropdown';
4090
-  var VERSION$4 = '4.3.1';
4091
-  var DATA_KEY$4 = 'bs.dropdown';
4092
-  var EVENT_KEY$4 = "." + DATA_KEY$4;
4093
-  var DATA_API_KEY$4 = '.data-api';
4094
-  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];
4095
-  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
4096
-
4097
-  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
4098
-
4099
-  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
4100
-
4101
-  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
4102
-
4103
-  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
4104
-
4105
-  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
4106
-
4107
-  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
4108
-  var Event$4 = {
4109
-    HIDE: "hide" + EVENT_KEY$4,
4110
-    HIDDEN: "hidden" + EVENT_KEY$4,
4111
-    SHOW: "show" + EVENT_KEY$4,
4112
-    SHOWN: "shown" + EVENT_KEY$4,
4113
-    CLICK: "click" + EVENT_KEY$4,
4114
-    CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4,
4115
-    KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4,
4116
-    KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4
4117
-  };
4118
-  var ClassName$4 = {
4119
-    DISABLED: 'disabled',
4120
-    SHOW: 'show',
4121
-    DROPUP: 'dropup',
4122
-    DROPRIGHT: 'dropright',
4123
-    DROPLEFT: 'dropleft',
4124
-    MENURIGHT: 'dropdown-menu-right',
4125
-    MENULEFT: 'dropdown-menu-left',
4126
-    POSITION_STATIC: 'position-static'
4127
-  };
4128
-  var Selector$4 = {
4129
-    DATA_TOGGLE: '[data-toggle="dropdown"]',
4130
-    FORM_CHILD: '.dropdown form',
4131
-    MENU: '.dropdown-menu',
4132
-    NAVBAR_NAV: '.navbar-nav',
4133
-    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
4134
-  };
4135
-  var AttachmentMap = {
4136
-    TOP: 'top-start',
4137
-    TOPEND: 'top-end',
4138
-    BOTTOM: 'bottom-start',
4139
-    BOTTOMEND: 'bottom-end',
4140
-    RIGHT: 'right-start',
4141
-    RIGHTEND: 'right-end',
4142
-    LEFT: 'left-start',
4143
-    LEFTEND: 'left-end'
4144
-  };
4145
-  var Default$2 = {
4146
-    offset: 0,
4147
-    flip: true,
4148
-    boundary: 'scrollParent',
4149
-    reference: 'toggle',
4150
-    display: 'dynamic'
4151
-  };
4152
-  var DefaultType$2 = {
4153
-    offset: '(number|string|function)',
4154
-    flip: 'boolean',
4155
-    boundary: '(string|element)',
4156
-    reference: '(string|element)',
4157
-    display: 'string'
4158
-    /**
4159
-     * ------------------------------------------------------------------------
4160
-     * Class Definition
4161
-     * ------------------------------------------------------------------------
4162
-     */
4163
-
4164
-  };
4165
-
4166
-  var Dropdown =
4167
-  /*#__PURE__*/
4168
-  function () {
4169
-    function Dropdown(element, config) {
4170
-      this._element = element;
4171
-      this._popper = null;
4172
-      this._config = this._getConfig(config);
4173
-      this._menu = this._getMenuElement();
4174
-      this._inNavbar = this._detectNavbar();
4175
-
4176
-      this._addEventListeners();
4177
-    } // Getters
4178
-
4179
-
4180
-    var _proto = Dropdown.prototype;
4181
-
4182
-    // Public
4183
-    _proto.toggle = function toggle() {
4184
-      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {
4185
-        return;
4186
-      }
4187
-
4188
-      var parent = Dropdown._getParentFromElement(this._element);
4189
-
4190
-      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);
4191
-
4192
-      Dropdown._clearMenus();
4193
-
4194
-      if (isActive) {
4195
-        return;
4196
-      }
4197
-
4198
-      var relatedTarget = {
4199
-        relatedTarget: this._element
4200
-      };
4201
-      var showEvent = $.Event(Event$4.SHOW, relatedTarget);
4202
-      $(parent).trigger(showEvent);
4203
-
4204
-      if (showEvent.isDefaultPrevented()) {
4205
-        return;
4206
-      } // Disable totally Popper.js for Dropdown in Navbar
4207
-
4208
-
4209
-      if (!this._inNavbar) {
4210
-        /**
4211
-         * Check for Popper dependency
4212
-         * Popper - https://popper.js.org
4213
-         */
4214
-        if (typeof Popper === 'undefined') {
4215
-          throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
4216
-        }
4217
-
4218
-        var referenceElement = this._element;
4219
-
4220
-        if (this._config.reference === 'parent') {
4221
-          referenceElement = parent;
4222
-        } else if (Util.isElement(this._config.reference)) {
4223
-          referenceElement = this._config.reference; // Check if it's jQuery element
4224
-
4225
-          if (typeof this._config.reference.jquery !== 'undefined') {
4226
-            referenceElement = this._config.reference[0];
4227
-          }
4228
-        } // If boundary is not `scrollParent`, then set position to `static`
4229
-        // to allow the menu to "escape" the scroll parent's boundaries
4230
-        // https://github.com/twbs/bootstrap/issues/24251
4231
-
4232
-
4233
-        if (this._config.boundary !== 'scrollParent') {
4234
-          $(parent).addClass(ClassName$4.POSITION_STATIC);
4235
-        }
4236
-
4237
-        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
4238
-      } // If this is a touch-enabled device we add extra
4239
-      // empty mouseover listeners to the body's immediate children;
4240
-      // only needed because of broken event delegation on iOS
4241
-      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
4242
-
4243
-
4244
-      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {
4245
-        $(document.body).children().on('mouseover', null, $.noop);
4246
-      }
4247
-
4248
-      this._element.focus();
4249
-
4250
-      this._element.setAttribute('aria-expanded', true);
4251
-
4252
-      $(this._menu).toggleClass(ClassName$4.SHOW);
4253
-      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));
4254
-    };
4255
-
4256
-    _proto.show = function show() {
4257
-      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {
4258
-        return;
4259
-      }
4260
-
4261
-      var relatedTarget = {
4262
-        relatedTarget: this._element
4263
-      };
4264
-      var showEvent = $.Event(Event$4.SHOW, relatedTarget);
4265
-
4266
-      var parent = Dropdown._getParentFromElement(this._element);
4267
-
4268
-      $(parent).trigger(showEvent);
4269
-
4270
-      if (showEvent.isDefaultPrevented()) {
4271
-        return;
4272
-      }
4273
-
4274
-      $(this._menu).toggleClass(ClassName$4.SHOW);
4275
-      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));
4276
-    };
4277
-
4278
-    _proto.hide = function hide() {
4279
-      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {
4280
-        return;
4281
-      }
4282
-
4283
-      var relatedTarget = {
4284
-        relatedTarget: this._element
4285
-      };
4286
-      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
4287
-
4288
-      var parent = Dropdown._getParentFromElement(this._element);
4289
-
4290
-      $(parent).trigger(hideEvent);
4291
-
4292
-      if (hideEvent.isDefaultPrevented()) {
4293
-        return;
4294
-      }
4295
-
4296
-      $(this._menu).toggleClass(ClassName$4.SHOW);
4297
-      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
4298
-    };
4299
-
4300
-    _proto.dispose = function dispose() {
4301
-      $.removeData(this._element, DATA_KEY$4);
4302
-      $(this._element).off(EVENT_KEY$4);
4303
-      this._element = null;
4304
-      this._menu = null;
4305
-
4306
-      if (this._popper !== null) {
4307
-        this._popper.destroy();
4308
-
4309
-        this._popper = null;
4310
-      }
4311
-    };
4312
-
4313
-    _proto.update = function update() {
4314
-      this._inNavbar = this._detectNavbar();
4315
-
4316
-      if (this._popper !== null) {
4317
-        this._popper.scheduleUpdate();
4318
-      }
4319
-    } // Private
4320
-    ;
4321
-
4322
-    _proto._addEventListeners = function _addEventListeners() {
4323
-      var _this = this;
4324
-
4325
-      $(this._element).on(Event$4.CLICK, function (event) {
4326
-        event.preventDefault();
4327
-        event.stopPropagation();
4328
-
4329
-        _this.toggle();
4330
-      });
4331
-    };
4332
-
4333
-    _proto._getConfig = function _getConfig(config) {
4334
-      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);
4335
-      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
4336
-      return config;
4337
-    };
4338
-
4339
-    _proto._getMenuElement = function _getMenuElement() {
4340
-      if (!this._menu) {
4341
-        var parent = Dropdown._getParentFromElement(this._element);
4342
-
4343
-        if (parent) {
4344
-          this._menu = parent.querySelector(Selector$4.MENU);
4345
-        }
4346
-      }
4347
-
4348
-      return this._menu;
4349
-    };
4350
-
4351
-    _proto._getPlacement = function _getPlacement() {
4352
-      var $parentDropdown = $(this._element.parentNode);
4353
-      var placement = AttachmentMap.BOTTOM; // Handle dropup
4354
-
4355
-      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {
4356
-        placement = AttachmentMap.TOP;
4357
-
4358
-        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
4359
-          placement = AttachmentMap.TOPEND;
4360
-        }
4361
-      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {
4362
-        placement = AttachmentMap.RIGHT;
4363
-      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {
4364
-        placement = AttachmentMap.LEFT;
4365
-      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
4366
-        placement = AttachmentMap.BOTTOMEND;
4367
-      }
4368
-
4369
-      return placement;
4370
-    };
4371
-
4372
-    _proto._detectNavbar = function _detectNavbar() {
4373
-      return $(this._element).closest('.navbar').length > 0;
4374
-    };
4375
-
4376
-    _proto._getOffset = function _getOffset() {
4377
-      var _this2 = this;
4378
-
4379
-      var offset = {};
4380
-
4381
-      if (typeof this._config.offset === 'function') {
4382
-        offset.fn = function (data) {
4383
-          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
4384
-          return data;
4385
-        };
4386
-      } else {
4387
-        offset.offset = this._config.offset;
4388
-      }
4389
-
4390
-      return offset;
4391
-    };
4392
-
4393
-    _proto._getPopperConfig = function _getPopperConfig() {
4394
-      var popperConfig = {
4395
-        placement: this._getPlacement(),
4396
-        modifiers: {
4397
-          offset: this._getOffset(),
4398
-          flip: {
4399
-            enabled: this._config.flip
4400
-          },
4401
-          preventOverflow: {
4402
-            boundariesElement: this._config.boundary
4403
-          }
4404
-        } // Disable Popper.js if we have a static display
4405
-
4406
-      };
4407
-
4408
-      if (this._config.display === 'static') {
4409
-        popperConfig.modifiers.applyStyle = {
4410
-          enabled: false
4411
-        };
4412
-      }
4413
-
4414
-      return popperConfig;
4415
-    } // Static
4416
-    ;
4417
-
4418
-    Dropdown._jQueryInterface = function _jQueryInterface(config) {
4419
-      return this.each(function () {
4420
-        var data = $(this).data(DATA_KEY$4);
4421
-
4422
-        var _config = typeof config === 'object' ? config : null;
4423
-
4424
-        if (!data) {
4425
-          data = new Dropdown(this, _config);
4426
-          $(this).data(DATA_KEY$4, data);
4427
-        }
4428
-
4429
-        if (typeof config === 'string') {
4430
-          if (typeof data[config] === 'undefined') {
4431
-            throw new TypeError("No method named \"" + config + "\"");
4432
-          }
4433
-
4434
-          data[config]();
4435
-        }
4436
-      });
4437
-    };
4438
-
4439
-    Dropdown._clearMenus = function _clearMenus(event) {
4440
-      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
4441
-        return;
4442
-      }
4443
-
4444
-      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));
4445
-
4446
-      for (var i = 0, len = toggles.length; i < len; i++) {
4447
-        var parent = Dropdown._getParentFromElement(toggles[i]);
4448
-
4449
-        var context = $(toggles[i]).data(DATA_KEY$4);
4450
-        var relatedTarget = {
4451
-          relatedTarget: toggles[i]
4452
-        };
4453
-
4454
-        if (event && event.type === 'click') {
4455
-          relatedTarget.clickEvent = event;
4456
-        }
4457
-
4458
-        if (!context) {
4459
-          continue;
4460
-        }
4461
-
4462
-        var dropdownMenu = context._menu;
4463
-
4464
-        if (!$(parent).hasClass(ClassName$4.SHOW)) {
4465
-          continue;
4466
-        }
4467
-
4468
-        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
4469
-          continue;
4470
-        }
4471
-
4472
-        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
4473
-        $(parent).trigger(hideEvent);
4474
-
4475
-        if (hideEvent.isDefaultPrevented()) {
4476
-          continue;
4477
-        } // If this is a touch-enabled device we remove the extra
4478
-        // empty mouseover listeners we added for iOS support
4479
-
4480
-
4481
-        if ('ontouchstart' in document.documentElement) {
4482
-          $(document.body).children().off('mouseover', null, $.noop);
4483
-        }
4484
-
4485
-        toggles[i].setAttribute('aria-expanded', 'false');
4486
-        $(dropdownMenu).removeClass(ClassName$4.SHOW);
4487
-        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
4488
-      }
4489
-    };
4490
-
4491
-    Dropdown._getParentFromElement = function _getParentFromElement(element) {
4492
-      var parent;
4493
-      var selector = Util.getSelectorFromElement(element);
4494
-
4495
-      if (selector) {
4496
-        parent = document.querySelector(selector);
4497
-      }
4498
-
4499
-      return parent || element.parentNode;
4500
-    } // eslint-disable-next-line complexity
4501
-    ;
4502
-
4503
-    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
4504
-      // If not input/textarea:
4505
-      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
4506
-      // If input/textarea:
4507
-      //  - If space key => not a dropdown command
4508
-      //  - If key is other than escape
4509
-      //    - If key is not up or down => not a dropdown command
4510
-      //    - If trigger inside the menu => not a dropdown command
4511
-      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
4512
-        return;
4513
-      }
4514
-
4515
-      event.preventDefault();
4516
-      event.stopPropagation();
4517
-
4518
-      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {
4519
-        return;
4520
-      }
4521
-
4522
-      var parent = Dropdown._getParentFromElement(this);
4523
-
4524
-      var isActive = $(parent).hasClass(ClassName$4.SHOW);
4525
-
4526
-      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
4527
-        if (event.which === ESCAPE_KEYCODE) {
4528
-          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);
4529
-          $(toggle).trigger('focus');
4530
-        }
4531
-
4532
-        $(this).trigger('click');
4533
-        return;
4534
-      }
4535
-
4536
-      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));
4537
-
4538
-      if (items.length === 0) {
4539
-        return;
4540
-      }
4541
-
4542
-      var index = items.indexOf(event.target);
4543
-
4544
-      if (event.which === ARROW_UP_KEYCODE && index > 0) {
4545
-        // Up
4546
-        index--;
4547
-      }
4548
-
4549
-      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
4550
-        // Down
4551
-        index++;
4552
-      }
4553
-
4554
-      if (index < 0) {
4555
-        index = 0;
4556
-      }
4557
-
4558
-      items[index].focus();
4559
-    };
4560
-
4561
-    _createClass(Dropdown, null, [{
4562
-      key: "VERSION",
4563
-      get: function get() {
4564
-        return VERSION$4;
4565
-      }
4566
-    }, {
4567
-      key: "Default",
4568
-      get: function get() {
4569
-        return Default$2;
4570
-      }
4571
-    }, {
4572
-      key: "DefaultType",
4573
-      get: function get() {
4574
-        return DefaultType$2;
4575
-      }
4576
-    }]);
4577
-
4578
-    return Dropdown;
4579
-  }();
4580
-  /**
4581
-   * ------------------------------------------------------------------------
4582
-   * Data Api implementation
4583
-   * ------------------------------------------------------------------------
4584
-   */
4585
-
4586
-
4587
-  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {
4588
-    event.preventDefault();
4589
-    event.stopPropagation();
4590
-
4591
-    Dropdown._jQueryInterface.call($(this), 'toggle');
4592
-  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {
4593
-    e.stopPropagation();
4594
-  });
4595
-  /**
4596
-   * ------------------------------------------------------------------------
4597
-   * jQuery
4598
-   * ------------------------------------------------------------------------
4599
-   */
4600
-
4601
-  $.fn[NAME$4] = Dropdown._jQueryInterface;
4602
-  $.fn[NAME$4].Constructor = Dropdown;
4603
-
4604
-  $.fn[NAME$4].noConflict = function () {
4605
-    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;
4606
-    return Dropdown._jQueryInterface;
4607
-  };
4608
-
4609
-  /**
4610
-   * ------------------------------------------------------------------------
4611
-   * Constants
4612
-   * ------------------------------------------------------------------------
4613
-   */
4614
-
4615
-  var NAME$5 = 'modal';
4616
-  var VERSION$5 = '4.3.1';
4617
-  var DATA_KEY$5 = 'bs.modal';
4618
-  var EVENT_KEY$5 = "." + DATA_KEY$5;
4619
-  var DATA_API_KEY$5 = '.data-api';
4620
-  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];
4621
-  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
4622
-
4623
-  var Default$3 = {
4624
-    backdrop: true,
4625
-    keyboard: true,
4626
-    focus: true,
4627
-    show: true
4628
-  };
4629
-  var DefaultType$3 = {
4630
-    backdrop: '(boolean|string)',
4631
-    keyboard: 'boolean',
4632
-    focus: 'boolean',
4633
-    show: 'boolean'
4634
-  };
4635
-  var Event$5 = {
4636
-    HIDE: "hide" + EVENT_KEY$5,
4637
-    HIDDEN: "hidden" + EVENT_KEY$5,
4638
-    SHOW: "show" + EVENT_KEY$5,
4639
-    SHOWN: "shown" + EVENT_KEY$5,
4640
-    FOCUSIN: "focusin" + EVENT_KEY$5,
4641
-    RESIZE: "resize" + EVENT_KEY$5,
4642
-    CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5,
4643
-    KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5,
4644
-    MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5,
4645
-    MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5,
4646
-    CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
4647
-  };
4648
-  var ClassName$5 = {
4649
-    SCROLLABLE: 'modal-dialog-scrollable',
4650
-    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
4651
-    BACKDROP: 'modal-backdrop',
4652
-    OPEN: 'modal-open',
4653
-    FADE: 'fade',
4654
-    SHOW: 'show'
4655
-  };
4656
-  var Selector$5 = {
4657
-    DIALOG: '.modal-dialog',
4658
-    MODAL_BODY: '.modal-body',
4659
-    DATA_TOGGLE: '[data-toggle="modal"]',
4660
-    DATA_DISMISS: '[data-dismiss="modal"]',
4661
-    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
4662
-    STICKY_CONTENT: '.sticky-top'
4663
-    /**
4664
-     * ------------------------------------------------------------------------
4665
-     * Class Definition
4666
-     * ------------------------------------------------------------------------
4667
-     */
4668
-
4669
-  };
4670
-
4671
-  var Modal =
4672
-  /*#__PURE__*/
4673
-  function () {
4674
-    function Modal(element, config) {
4675
-      this._config = this._getConfig(config);
4676
-      this._element = element;
4677
-      this._dialog = element.querySelector(Selector$5.DIALOG);
4678
-      this._backdrop = null;
4679
-      this._isShown = false;
4680
-      this._isBodyOverflowing = false;
4681
-      this._ignoreBackdropClick = false;
4682
-      this._isTransitioning = false;
4683
-      this._scrollbarWidth = 0;
4684
-    } // Getters
4685
-
4686
-
4687
-    var _proto = Modal.prototype;
4688
-
4689
-    // Public
4690
-    _proto.toggle = function toggle(relatedTarget) {
4691
-      return this._isShown ? this.hide() : this.show(relatedTarget);
4692
-    };
4693
-
4694
-    _proto.show = function show(relatedTarget) {
4695
-      var _this = this;
4696
-
4697
-      if (this._isShown || this._isTransitioning) {
4698
-        return;
4699
-      }
4700
-
4701
-      if ($(this._element).hasClass(ClassName$5.FADE)) {
4702
-        this._isTransitioning = true;
4703
-      }
4704
-
4705
-      var showEvent = $.Event(Event$5.SHOW, {
4706
-        relatedTarget: relatedTarget
4707
-      });
4708
-      $(this._element).trigger(showEvent);
4709
-
4710
-      if (this._isShown || showEvent.isDefaultPrevented()) {
4711
-        return;
4712
-      }
4713
-
4714
-      this._isShown = true;
4715
-
4716
-      this._checkScrollbar();
4717
-
4718
-      this._setScrollbar();
4719
-
4720
-      this._adjustDialog();
4721
-
4722
-      this._setEscapeEvent();
4723
-
4724
-      this._setResizeEvent();
4725
-
4726
-      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {
4727
-        return _this.hide(event);
4728
-      });
4729
-      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {
4730
-        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {
4731
-          if ($(event.target).is(_this._element)) {
4732
-            _this._ignoreBackdropClick = true;
4733
-          }
4734
-        });
4735
-      });
4736
-
4737
-      this._showBackdrop(function () {
4738
-        return _this._showElement(relatedTarget);
4739
-      });
4740
-    };
4741
-
4742
-    _proto.hide = function hide(event) {
4743
-      var _this2 = this;
4744
-
4745
-      if (event) {
4746
-        event.preventDefault();
4747
-      }
4748
-
4749
-      if (!this._isShown || this._isTransitioning) {
4750
-        return;
4751
-      }
4752
-
4753
-      var hideEvent = $.Event(Event$5.HIDE);
4754
-      $(this._element).trigger(hideEvent);
4755
-
4756
-      if (!this._isShown || hideEvent.isDefaultPrevented()) {
4757
-        return;
4758
-      }
4759
-
4760
-      this._isShown = false;
4761
-      var transition = $(this._element).hasClass(ClassName$5.FADE);
4762
-
4763
-      if (transition) {
4764
-        this._isTransitioning = true;
4765
-      }
4766
-
4767
-      this._setEscapeEvent();
4768
-
4769
-      this._setResizeEvent();
4770
-
4771
-      $(document).off(Event$5.FOCUSIN);
4772
-      $(this._element).removeClass(ClassName$5.SHOW);
4773
-      $(this._element).off(Event$5.CLICK_DISMISS);
4774
-      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);
4775
-
4776
-      if (transition) {
4777
-        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
4778
-        $(this._element).one(Util.TRANSITION_END, function (event) {
4779
-          return _this2._hideModal(event);
4780
-        }).emulateTransitionEnd(transitionDuration);
4781
-      } else {
4782
-        this._hideModal();
4783
-      }
4784
-    };
4785
-
4786
-    _proto.dispose = function dispose() {
4787
-      [window, this._element, this._dialog].forEach(function (htmlElement) {
4788
-        return $(htmlElement).off(EVENT_KEY$5);
4789
-      });
4790
-      /**
4791
-       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
4792
-       * Do not move `document` in `htmlElements` array
4793
-       * It will remove `Event.CLICK_DATA_API` event that should remain
4794
-       */
4795
-
4796
-      $(document).off(Event$5.FOCUSIN);
4797
-      $.removeData(this._element, DATA_KEY$5);
4798
-      this._config = null;
4799
-      this._element = null;
4800
-      this._dialog = null;
4801
-      this._backdrop = null;
4802
-      this._isShown = null;
4803
-      this._isBodyOverflowing = null;
4804
-      this._ignoreBackdropClick = null;
4805
-      this._isTransitioning = null;
4806
-      this._scrollbarWidth = null;
4807
-    };
4808
-
4809
-    _proto.handleUpdate = function handleUpdate() {
4810
-      this._adjustDialog();
4811
-    } // Private
4812
-    ;
4813
-
4814
-    _proto._getConfig = function _getConfig(config) {
4815
-      config = _objectSpread({}, Default$3, config);
4816
-      Util.typeCheckConfig(NAME$5, config, DefaultType$3);
4817
-      return config;
4818
-    };
4819
-
4820
-    _proto._showElement = function _showElement(relatedTarget) {
4821
-      var _this3 = this;
4822
-
4823
-      var transition = $(this._element).hasClass(ClassName$5.FADE);
4824
-
4825
-      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
4826
-        // Don't move modal's DOM position
4827
-        document.body.appendChild(this._element);
4828
-      }
4829
-
4830
-      this._element.style.display = 'block';
4831
-
4832
-      this._element.removeAttribute('aria-hidden');
4833
-
4834
-      this._element.setAttribute('aria-modal', true);
4835
-
4836
-      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
4837
-        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
4838
-      } else {
4839
-        this._element.scrollTop = 0;
4840
-      }
4841
-
4842
-      if (transition) {
4843
-        Util.reflow(this._element);
4844
-      }
4845
-
4846
-      $(this._element).addClass(ClassName$5.SHOW);
4847
-
4848
-      if (this._config.focus) {
4849
-        this._enforceFocus();
4850
-      }
4851
-
4852
-      var shownEvent = $.Event(Event$5.SHOWN, {
4853
-        relatedTarget: relatedTarget
4854
-      });
4855
-
4856
-      var transitionComplete = function transitionComplete() {
4857
-        if (_this3._config.focus) {
4858
-          _this3._element.focus();
4859
-        }
4860
-
4861
-        _this3._isTransitioning = false;
4862
-        $(_this3._element).trigger(shownEvent);
4863
-      };
4864
-
4865
-      if (transition) {
4866
-        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
4867
-        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
4868
-      } else {
4869
-        transitionComplete();
4870
-      }
4871
-    };
4872
-
4873
-    _proto._enforceFocus = function _enforceFocus() {
4874
-      var _this4 = this;
4875
-
4876
-      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop
4877
-      .on(Event$5.FOCUSIN, function (event) {
4878
-        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {
4879
-          _this4._element.focus();
4880
-        }
4881
-      });
4882
-    };
4883
-
4884
-    _proto._setEscapeEvent = function _setEscapeEvent() {
4885
-      var _this5 = this;
4886
-
4887
-      if (this._isShown && this._config.keyboard) {
4888
-        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {
4889
-          if (event.which === ESCAPE_KEYCODE$1) {
4890
-            event.preventDefault();
4891
-
4892
-            _this5.hide();
4893
-          }
4894
-        });
4895
-      } else if (!this._isShown) {
4896
-        $(this._element).off(Event$5.KEYDOWN_DISMISS);
4897
-      }
4898
-    };
4899
-
4900
-    _proto._setResizeEvent = function _setResizeEvent() {
4901
-      var _this6 = this;
4902
-
4903
-      if (this._isShown) {
4904
-        $(window).on(Event$5.RESIZE, function (event) {
4905
-          return _this6.handleUpdate(event);
4906
-        });
4907
-      } else {
4908
-        $(window).off(Event$5.RESIZE);
4909
-      }
4910
-    };
4911
-
4912
-    _proto._hideModal = function _hideModal() {
4913
-      var _this7 = this;
4914
-
4915
-      this._element.style.display = 'none';
4916
-
4917
-      this._element.setAttribute('aria-hidden', true);
4918
-
4919
-      this._element.removeAttribute('aria-modal');
4920
-
4921
-      this._isTransitioning = false;
4922
-
4923
-      this._showBackdrop(function () {
4924
-        $(document.body).removeClass(ClassName$5.OPEN);
4925
-
4926
-        _this7._resetAdjustments();
4927
-
4928
-        _this7._resetScrollbar();
4929
-
4930
-        $(_this7._element).trigger(Event$5.HIDDEN);
4931
-      });
4932
-    };
4933
-
4934
-    _proto._removeBackdrop = function _removeBackdrop() {
4935
-      if (this._backdrop) {
4936
-        $(this._backdrop).remove();
4937
-        this._backdrop = null;
4938
-      }
4939
-    };
4940
-
4941
-    _proto._showBackdrop = function _showBackdrop(callback) {
4942
-      var _this8 = this;
4943
-
4944
-      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';
4945
-
4946
-      if (this._isShown && this._config.backdrop) {
4947
-        this._backdrop = document.createElement('div');
4948
-        this._backdrop.className = ClassName$5.BACKDROP;
4949
-
4950
-        if (animate) {
4951
-          this._backdrop.classList.add(animate);
4952
-        }
4953
-
4954
-        $(this._backdrop).appendTo(document.body);
4955
-        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {
4956
-          if (_this8._ignoreBackdropClick) {
4957
-            _this8._ignoreBackdropClick = false;
4958
-            return;
4959
-          }
4960
-
4961
-          if (event.target !== event.currentTarget) {
4962
-            return;
4963
-          }
4964
-
4965
-          if (_this8._config.backdrop === 'static') {
4966
-            _this8._element.focus();
4967
-          } else {
4968
-            _this8.hide();
4969
-          }
4970
-        });
4971
-
4972
-        if (animate) {
4973
-          Util.reflow(this._backdrop);
4974
-        }
4975
-
4976
-        $(this._backdrop).addClass(ClassName$5.SHOW);
4977
-
4978
-        if (!callback) {
4979
-          return;
4980
-        }
4981
-
4982
-        if (!animate) {
4983
-          callback();
4984
-          return;
4985
-        }
4986
-
4987
-        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
4988
-        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
4989
-      } else if (!this._isShown && this._backdrop) {
4990
-        $(this._backdrop).removeClass(ClassName$5.SHOW);
4991
-
4992
-        var callbackRemove = function callbackRemove() {
4993
-          _this8._removeBackdrop();
4994
-
4995
-          if (callback) {
4996
-            callback();
4997
-          }
4998
-        };
4999
-
5000
-        if ($(this._element).hasClass(ClassName$5.FADE)) {
5001
-          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
5002
-
5003
-          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
5004
-        } else {
5005
-          callbackRemove();
5006
-        }
5007
-      } else if (callback) {
5008
-        callback();
5009
-      }
5010
-    } // ----------------------------------------------------------------------
5011
-    // the following methods are used to handle overflowing modals
5012
-    // todo (fat): these should probably be refactored out of modal.js
5013
-    // ----------------------------------------------------------------------
5014
-    ;
5015
-
5016
-    _proto._adjustDialog = function _adjustDialog() {
5017
-      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
5018
-
5019
-      if (!this._isBodyOverflowing && isModalOverflowing) {
5020
-        this._element.style.paddingLeft = this._scrollbarWidth + "px";
5021
-      }
5022
-
5023
-      if (this._isBodyOverflowing && !isModalOverflowing) {
5024
-        this._element.style.paddingRight = this._scrollbarWidth + "px";
5025
-      }
5026
-    };
5027
-
5028
-    _proto._resetAdjustments = function _resetAdjustments() {
5029
-      this._element.style.paddingLeft = '';
5030
-      this._element.style.paddingRight = '';
5031
-    };
5032
-
5033
-    _proto._checkScrollbar = function _checkScrollbar() {
5034
-      var rect = document.body.getBoundingClientRect();
5035
-      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
5036
-      this._scrollbarWidth = this._getScrollbarWidth();
5037
-    };
5038
-
5039
-    _proto._setScrollbar = function _setScrollbar() {
5040
-      var _this9 = this;
5041
-
5042
-      if (this._isBodyOverflowing) {
5043
-        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
5044
-        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
5045
-        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
5046
-        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding
5047
-
5048
-        $(fixedContent).each(function (index, element) {
5049
-          var actualPadding = element.style.paddingRight;
5050
-          var calculatedPadding = $(element).css('padding-right');
5051
-          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px");
5052
-        }); // Adjust sticky content margin
5053
-
5054
-        $(stickyContent).each(function (index, element) {
5055
-          var actualMargin = element.style.marginRight;
5056
-          var calculatedMargin = $(element).css('margin-right');
5057
-          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px");
5058
-        }); // Adjust body padding
5059
-
5060
-        var actualPadding = document.body.style.paddingRight;
5061
-        var calculatedPadding = $(document.body).css('padding-right');
5062
-        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
5063
-      }
5064
-
5065
-      $(document.body).addClass(ClassName$5.OPEN);
5066
-    };
5067
-
5068
-    _proto._resetScrollbar = function _resetScrollbar() {
5069
-      // Restore fixed content padding
5070
-      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
5071
-      $(fixedContent).each(function (index, element) {
5072
-        var padding = $(element).data('padding-right');
5073
-        $(element).removeData('padding-right');
5074
-        element.style.paddingRight = padding ? padding : '';
5075
-      }); // Restore sticky content
5076
-
5077
-      var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT));
5078
-      $(elements).each(function (index, element) {
5079
-        var margin = $(element).data('margin-right');
5080
-
5081
-        if (typeof margin !== 'undefined') {
5082
-          $(element).css('margin-right', margin).removeData('margin-right');
5083
-        }
5084
-      }); // Restore body padding
5085
-
5086
-      var padding = $(document.body).data('padding-right');
5087
-      $(document.body).removeData('padding-right');
5088
-      document.body.style.paddingRight = padding ? padding : '';
5089
-    };
5090
-
5091
-    _proto._getScrollbarWidth = function _getScrollbarWidth() {
5092
-      // thx d.walsh
5093
-      var scrollDiv = document.createElement('div');
5094
-      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;
5095
-      document.body.appendChild(scrollDiv);
5096
-      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
5097
-      document.body.removeChild(scrollDiv);
5098
-      return scrollbarWidth;
5099
-    } // Static
5100
-    ;
5101
-
5102
-    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
5103
-      return this.each(function () {
5104
-        var data = $(this).data(DATA_KEY$5);
5105
-
5106
-        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});
5107
-
5108
-        if (!data) {
5109
-          data = new Modal(this, _config);
5110
-          $(this).data(DATA_KEY$5, data);
5111
-        }
5112
-
5113
-        if (typeof config === 'string') {
5114
-          if (typeof data[config] === 'undefined') {
5115
-            throw new TypeError("No method named \"" + config + "\"");
5116
-          }
5117
-
5118
-          data[config](relatedTarget);
5119
-        } else if (_config.show) {
5120
-          data.show(relatedTarget);
5121
-        }
5122
-      });
5123
-    };
5124
-
5125
-    _createClass(Modal, null, [{
5126
-      key: "VERSION",
5127
-      get: function get() {
5128
-        return VERSION$5;
5129
-      }
5130
-    }, {
5131
-      key: "Default",
5132
-      get: function get() {
5133
-        return Default$3;
5134
-      }
5135
-    }]);
5136
-
5137
-    return Modal;
5138
-  }();
5139
-  /**
5140
-   * ------------------------------------------------------------------------
5141
-   * Data Api implementation
5142
-   * ------------------------------------------------------------------------
5143
-   */
5144
-
5145
-
5146
-  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {
5147
-    var _this10 = this;
5148
-
5149
-    var target;
5150
-    var selector = Util.getSelectorFromElement(this);
5151
-
5152
-    if (selector) {
5153
-      target = document.querySelector(selector);
5154
-    }
5155
-
5156
-    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());
5157
-
5158
-    if (this.tagName === 'A' || this.tagName === 'AREA') {
5159
-      event.preventDefault();
5160
-    }
5161
-
5162
-    var $target = $(target).one(Event$5.SHOW, function (showEvent) {
5163
-      if (showEvent.isDefaultPrevented()) {
5164
-        // Only register focus restorer if modal will actually get shown
5165
-        return;
5166
-      }
5167
-
5168
-      $target.one(Event$5.HIDDEN, function () {
5169
-        if ($(_this10).is(':visible')) {
5170
-          _this10.focus();
5171
-        }
5172
-      });
5173
-    });
5174
-
5175
-    Modal._jQueryInterface.call($(target), config, this);
5176
-  });
5177
-  /**
5178
-   * ------------------------------------------------------------------------
5179
-   * jQuery
5180
-   * ------------------------------------------------------------------------
5181
-   */
5182
-
5183
-  $.fn[NAME$5] = Modal._jQueryInterface;
5184
-  $.fn[NAME$5].Constructor = Modal;
5185
-
5186
-  $.fn[NAME$5].noConflict = function () {
5187
-    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;
5188
-    return Modal._jQueryInterface;
5189
-  };
5190
-
5191
-  /**
5192
-   * --------------------------------------------------------------------------
5193
-   * Bootstrap (v4.3.1): tools/sanitizer.js
5194
-   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5195
-   * --------------------------------------------------------------------------
5196
-   */
5197
-  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
5198
-  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
5199
-  var DefaultWhitelist = {
5200
-    // Global attributes allowed on any supplied element below.
5201
-    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
5202
-    a: ['target', 'href', 'title', 'rel'],
5203
-    area: [],
5204
-    b: [],
5205
-    br: [],
5206
-    col: [],
5207
-    code: [],
5208
-    div: [],
5209
-    em: [],
5210
-    hr: [],
5211
-    h1: [],
5212
-    h2: [],
5213
-    h3: [],
5214
-    h4: [],
5215
-    h5: [],
5216
-    h6: [],
5217
-    i: [],
5218
-    img: ['src', 'alt', 'title', 'width', 'height'],
5219
-    li: [],
5220
-    ol: [],
5221
-    p: [],
5222
-    pre: [],
5223
-    s: [],
5224
-    small: [],
5225
-    span: [],
5226
-    sub: [],
5227
-    sup: [],
5228
-    strong: [],
5229
-    u: [],
5230
-    ul: []
5231
-    /**
5232
-     * A pattern that recognizes a commonly useful subset of URLs that are safe.
5233
-     *
5234
-     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5235
-     */
5236
-
5237
-  };
5238
-  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
5239
-  /**
5240
-   * A pattern that matches safe data URLs. Only matches image, video and audio types.
5241
-   *
5242
-   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5243
-   */
5244
-
5245
-  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
5246
-
5247
-  function allowedAttribute(attr, allowedAttributeList) {
5248
-    var attrName = attr.nodeName.toLowerCase();
5249
-
5250
-    if (allowedAttributeList.indexOf(attrName) !== -1) {
5251
-      if (uriAttrs.indexOf(attrName) !== -1) {
5252
-        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
5253
-      }
5254
-
5255
-      return true;
5256
-    }
5257
-
5258
-    var regExp = allowedAttributeList.filter(function (attrRegex) {
5259
-      return attrRegex instanceof RegExp;
5260
-    }); // Check if a regular expression validates the attribute.
5261
-
5262
-    for (var i = 0, l = regExp.length; i < l; i++) {
5263
-      if (attrName.match(regExp[i])) {
5264
-        return true;
5265
-      }
5266
-    }
5267
-
5268
-    return false;
5269
-  }
5270
-
5271
-  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
5272
-    if (unsafeHtml.length === 0) {
5273
-      return unsafeHtml;
5274
-    }
5275
-
5276
-    if (sanitizeFn && typeof sanitizeFn === 'function') {
5277
-      return sanitizeFn(unsafeHtml);
5278
-    }
5279
-
5280
-    var domParser = new window.DOMParser();
5281
-    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
5282
-    var whitelistKeys = Object.keys(whiteList);
5283
-    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
5284
-
5285
-    var _loop = function _loop(i, len) {
5286
-      var el = elements[i];
5287
-      var elName = el.nodeName.toLowerCase();
5288
-
5289
-      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
5290
-        el.parentNode.removeChild(el);
5291
-        return "continue";
5292
-      }
5293
-
5294
-      var attributeList = [].slice.call(el.attributes);
5295
-      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
5296
-      attributeList.forEach(function (attr) {
5297
-        if (!allowedAttribute(attr, whitelistedAttributes)) {
5298
-          el.removeAttribute(attr.nodeName);
5299
-        }
5300
-      });
5301
-    };
5302
-
5303
-    for (var i = 0, len = elements.length; i < len; i++) {
5304
-      var _ret = _loop(i, len);
5305
-
5306
-      if (_ret === "continue") continue;
5307
-    }
5308
-
5309
-    return createdDocument.body.innerHTML;
5310
-  }
5311
-
5312
-  /**
5313
-   * ------------------------------------------------------------------------
5314
-   * Constants
5315
-   * ------------------------------------------------------------------------
5316
-   */
5317
-
5318
-  var NAME$6 = 'tooltip';
5319
-  var VERSION$6 = '4.3.1';
5320
-  var DATA_KEY$6 = 'bs.tooltip';
5321
-  var EVENT_KEY$6 = "." + DATA_KEY$6;
5322
-  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
5323
-  var CLASS_PREFIX = 'bs-tooltip';
5324
-  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
5325
-  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
5326
-  var DefaultType$4 = {
5327
-    animation: 'boolean',
5328
-    template: 'string',
5329
-    title: '(string|element|function)',
5330
-    trigger: 'string',
5331
-    delay: '(number|object)',
5332
-    html: 'boolean',
5333
-    selector: '(string|boolean)',
5334
-    placement: '(string|function)',
5335
-    offset: '(number|string|function)',
5336
-    container: '(string|element|boolean)',
5337
-    fallbackPlacement: '(string|array)',
5338
-    boundary: '(string|element)',
5339
-    sanitize: 'boolean',
5340
-    sanitizeFn: '(null|function)',
5341
-    whiteList: 'object'
5342
-  };
5343
-  var AttachmentMap$1 = {
5344
-    AUTO: 'auto',
5345
-    TOP: 'top',
5346
-    RIGHT: 'right',
5347
-    BOTTOM: 'bottom',
5348
-    LEFT: 'left'
5349
-  };
5350
-  var Default$4 = {
5351
-    animation: true,
5352
-    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
5353
-    trigger: 'hover focus',
5354
-    title: '',
5355
-    delay: 0,
5356
-    html: false,
5357
-    selector: false,
5358
-    placement: 'top',
5359
-    offset: 0,
5360
-    container: false,
5361
-    fallbackPlacement: 'flip',
5362
-    boundary: 'scrollParent',
5363
-    sanitize: true,
5364
-    sanitizeFn: null,
5365
-    whiteList: DefaultWhitelist
5366
-  };
5367
-  var HoverState = {
5368
-    SHOW: 'show',
5369
-    OUT: 'out'
5370
-  };
5371
-  var Event$6 = {
5372
-    HIDE: "hide" + EVENT_KEY$6,
5373
-    HIDDEN: "hidden" + EVENT_KEY$6,
5374
-    SHOW: "show" + EVENT_KEY$6,
5375
-    SHOWN: "shown" + EVENT_KEY$6,
5376
-    INSERTED: "inserted" + EVENT_KEY$6,
5377
-    CLICK: "click" + EVENT_KEY$6,
5378
-    FOCUSIN: "focusin" + EVENT_KEY$6,
5379
-    FOCUSOUT: "focusout" + EVENT_KEY$6,
5380
-    MOUSEENTER: "mouseenter" + EVENT_KEY$6,
5381
-    MOUSELEAVE: "mouseleave" + EVENT_KEY$6
5382
-  };
5383
-  var ClassName$6 = {
5384
-    FADE: 'fade',
5385
-    SHOW: 'show'
5386
-  };
5387
-  var Selector$6 = {
5388
-    TOOLTIP: '.tooltip',
5389
-    TOOLTIP_INNER: '.tooltip-inner',
5390
-    ARROW: '.arrow'
5391
-  };
5392
-  var Trigger = {
5393
-    HOVER: 'hover',
5394
-    FOCUS: 'focus',
5395
-    CLICK: 'click',
5396
-    MANUAL: 'manual'
5397
-    /**
5398
-     * ------------------------------------------------------------------------
5399
-     * Class Definition
5400
-     * ------------------------------------------------------------------------
5401
-     */
5402
-
5403
-  };
5404
-
5405
-  var Tooltip =
5406
-  /*#__PURE__*/
5407
-  function () {
5408
-    function Tooltip(element, config) {
5409
-      /**
5410
-       * Check for Popper dependency
5411
-       * Popper - https://popper.js.org
5412
-       */
5413
-      if (typeof Popper === 'undefined') {
5414
-        throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
5415
-      } // private
5416
-
5417
-
5418
-      this._isEnabled = true;
5419
-      this._timeout = 0;
5420
-      this._hoverState = '';
5421
-      this._activeTrigger = {};
5422
-      this._popper = null; // Protected
5423
-
5424
-      this.element = element;
5425
-      this.config = this._getConfig(config);
5426
-      this.tip = null;
5427
-
5428
-      this._setListeners();
5429
-    } // Getters
5430
-
5431
-
5432
-    var _proto = Tooltip.prototype;
5433
-
5434
-    // Public
5435
-    _proto.enable = function enable() {
5436
-      this._isEnabled = true;
5437
-    };
5438
-
5439
-    _proto.disable = function disable() {
5440
-      this._isEnabled = false;
5441
-    };
5442
-
5443
-    _proto.toggleEnabled = function toggleEnabled() {
5444
-      this._isEnabled = !this._isEnabled;
5445
-    };
5446
-
5447
-    _proto.toggle = function toggle(event) {
5448
-      if (!this._isEnabled) {
5449
-        return;
5450
-      }
5451
-
5452
-      if (event) {
5453
-        var dataKey = this.constructor.DATA_KEY;
5454
-        var context = $(event.currentTarget).data(dataKey);
5455
-
5456
-        if (!context) {
5457
-          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5458
-          $(event.currentTarget).data(dataKey, context);
5459
-        }
5460
-
5461
-        context._activeTrigger.click = !context._activeTrigger.click;
5462
-
5463
-        if (context._isWithActiveTrigger()) {
5464
-          context._enter(null, context);
5465
-        } else {
5466
-          context._leave(null, context);
5467
-        }
5468
-      } else {
5469
-        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {
5470
-          this._leave(null, this);
5471
-
5472
-          return;
5473
-        }
5474
-
5475
-        this._enter(null, this);
5476
-      }
5477
-    };
5478
-
5479
-    _proto.dispose = function dispose() {
5480
-      clearTimeout(this._timeout);
5481
-      $.removeData(this.element, this.constructor.DATA_KEY);
5482
-      $(this.element).off(this.constructor.EVENT_KEY);
5483
-      $(this.element).closest('.modal').off('hide.bs.modal');
5484
-
5485
-      if (this.tip) {
5486
-        $(this.tip).remove();
5487
-      }
5488
-
5489
-      this._isEnabled = null;
5490
-      this._timeout = null;
5491
-      this._hoverState = null;
5492
-      this._activeTrigger = null;
5493
-
5494
-      if (this._popper !== null) {
5495
-        this._popper.destroy();
5496
-      }
5497
-
5498
-      this._popper = null;
5499
-      this.element = null;
5500
-      this.config = null;
5501
-      this.tip = null;
5502
-    };
5503
-
5504
-    _proto.show = function show() {
5505
-      var _this = this;
5506
-
5507
-      if ($(this.element).css('display') === 'none') {
5508
-        throw new Error('Please use show on visible elements');
5509
-      }
5510
-
5511
-      var showEvent = $.Event(this.constructor.Event.SHOW);
5512
-
5513
-      if (this.isWithContent() && this._isEnabled) {
5514
-        $(this.element).trigger(showEvent);
5515
-        var shadowRoot = Util.findShadowRoot(this.element);
5516
-        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
5517
-
5518
-        if (showEvent.isDefaultPrevented() || !isInTheDom) {
5519
-          return;
5520
-        }
5521
-
5522
-        var tip = this.getTipElement();
5523
-        var tipId = Util.getUID(this.constructor.NAME);
5524
-        tip.setAttribute('id', tipId);
5525
-        this.element.setAttribute('aria-describedby', tipId);
5526
-        this.setContent();
5527
-
5528
-        if (this.config.animation) {
5529
-          $(tip).addClass(ClassName$6.FADE);
5530
-        }
5531
-
5532
-        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
5533
-
5534
-        var attachment = this._getAttachment(placement);
5535
-
5536
-        this.addAttachmentClass(attachment);
5537
-
5538
-        var container = this._getContainer();
5539
-
5540
-        $(tip).data(this.constructor.DATA_KEY, this);
5541
-
5542
-        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {
5543
-          $(tip).appendTo(container);
5544
-        }
5545
-
5546
-        $(this.element).trigger(this.constructor.Event.INSERTED);
5547
-        this._popper = new Popper(this.element, tip, {
5548
-          placement: attachment,
5549
-          modifiers: {
5550
-            offset: this._getOffset(),
5551
-            flip: {
5552
-              behavior: this.config.fallbackPlacement
5553
-            },
5554
-            arrow: {
5555
-              element: Selector$6.ARROW
5556
-            },
5557
-            preventOverflow: {
5558
-              boundariesElement: this.config.boundary
5559
-            }
5560
-          },
5561
-          onCreate: function onCreate(data) {
5562
-            if (data.originalPlacement !== data.placement) {
5563
-              _this._handlePopperPlacementChange(data);
5564
-            }
5565
-          },
5566
-          onUpdate: function onUpdate(data) {
5567
-            return _this._handlePopperPlacementChange(data);
5568
-          }
5569
-        });
5570
-        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra
5571
-        // empty mouseover listeners to the body's immediate children;
5572
-        // only needed because of broken event delegation on iOS
5573
-        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5574
-
5575
-        if ('ontouchstart' in document.documentElement) {
5576
-          $(document.body).children().on('mouseover', null, $.noop);
5577
-        }
5578
-
5579
-        var complete = function complete() {
5580
-          if (_this.config.animation) {
5581
-            _this._fixTransition();
5582
-          }
5583
-
5584
-          var prevHoverState = _this._hoverState;
5585
-          _this._hoverState = null;
5586
-          $(_this.element).trigger(_this.constructor.Event.SHOWN);
5587
-
5588
-          if (prevHoverState === HoverState.OUT) {
5589
-            _this._leave(null, _this);
5590
-          }
5591
-        };
5592
-
5593
-        if ($(this.tip).hasClass(ClassName$6.FADE)) {
5594
-          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
5595
-          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5596
-        } else {
5597
-          complete();
5598
-        }
5599
-      }
5600
-    };
5601
-
5602
-    _proto.hide = function hide(callback) {
5603
-      var _this2 = this;
5604
-
5605
-      var tip = this.getTipElement();
5606
-      var hideEvent = $.Event(this.constructor.Event.HIDE);
5607
-
5608
-      var complete = function complete() {
5609
-        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
5610
-          tip.parentNode.removeChild(tip);
5611
-        }
5612
-
5613
-        _this2._cleanTipClass();
5614
-
5615
-        _this2.element.removeAttribute('aria-describedby');
5616
-
5617
-        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
5618
-
5619
-        if (_this2._popper !== null) {
5620
-          _this2._popper.destroy();
5621
-        }
5622
-
5623
-        if (callback) {
5624
-          callback();
5625
-        }
5626
-      };
5627
-
5628
-      $(this.element).trigger(hideEvent);
5629
-
5630
-      if (hideEvent.isDefaultPrevented()) {
5631
-        return;
5632
-      }
5633
-
5634
-      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra
5635
-      // empty mouseover listeners we added for iOS support
5636
-
5637
-      if ('ontouchstart' in document.documentElement) {
5638
-        $(document.body).children().off('mouseover', null, $.noop);
5639
-      }
5640
-
5641
-      this._activeTrigger[Trigger.CLICK] = false;
5642
-      this._activeTrigger[Trigger.FOCUS] = false;
5643
-      this._activeTrigger[Trigger.HOVER] = false;
5644
-
5645
-      if ($(this.tip).hasClass(ClassName$6.FADE)) {
5646
-        var transitionDuration = Util.getTransitionDurationFromElement(tip);
5647
-        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5648
-      } else {
5649
-        complete();
5650
-      }
5651
-
5652
-      this._hoverState = '';
5653
-    };
5654
-
5655
-    _proto.update = function update() {
5656
-      if (this._popper !== null) {
5657
-        this._popper.scheduleUpdate();
5658
-      }
5659
-    } // Protected
5660
-    ;
5661
-
5662
-    _proto.isWithContent = function isWithContent() {
5663
-      return Boolean(this.getTitle());
5664
-    };
5665
-
5666
-    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
5667
-      $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
5668
-    };
5669
-
5670
-    _proto.getTipElement = function getTipElement() {
5671
-      this.tip = this.tip || $(this.config.template)[0];
5672
-      return this.tip;
5673
-    };
5674
-
5675
-    _proto.setContent = function setContent() {
5676
-      var tip = this.getTipElement();
5677
-      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());
5678
-      $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW);
5679
-    };
5680
-
5681
-    _proto.setElementContent = function setElementContent($element, content) {
5682
-      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
5683
-        // Content is a DOM node or a jQuery
5684
-        if (this.config.html) {
5685
-          if (!$(content).parent().is($element)) {
5686
-            $element.empty().append(content);
5687
-          }
5688
-        } else {
5689
-          $element.text($(content).text());
5690
-        }
5691
-
5692
-        return;
5693
-      }
5694
-
5695
-      if (this.config.html) {
5696
-        if (this.config.sanitize) {
5697
-          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
5698
-        }
5699
-
5700
-        $element.html(content);
5701
-      } else {
5702
-        $element.text(content);
5703
-      }
5704
-    };
5705
-
5706
-    _proto.getTitle = function getTitle() {
5707
-      var title = this.element.getAttribute('data-original-title');
5708
-
5709
-      if (!title) {
5710
-        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
5711
-      }
5712
-
5713
-      return title;
5714
-    } // Private
5715
-    ;
5716
-
5717
-    _proto._getOffset = function _getOffset() {
5718
-      var _this3 = this;
5719
-
5720
-      var offset = {};
5721
-
5722
-      if (typeof this.config.offset === 'function') {
5723
-        offset.fn = function (data) {
5724
-          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
5725
-          return data;
5726
-        };
5727
-      } else {
5728
-        offset.offset = this.config.offset;
5729
-      }
5730
-
5731
-      return offset;
5732
-    };
5733
-
5734
-    _proto._getContainer = function _getContainer() {
5735
-      if (this.config.container === false) {
5736
-        return document.body;
5737
-      }
5738
-
5739
-      if (Util.isElement(this.config.container)) {
5740
-        return $(this.config.container);
5741
-      }
5742
-
5743
-      return $(document).find(this.config.container);
5744
-    };
5745
-
5746
-    _proto._getAttachment = function _getAttachment(placement) {
5747
-      return AttachmentMap$1[placement.toUpperCase()];
5748
-    };
5749
-
5750
-    _proto._setListeners = function _setListeners() {
5751
-      var _this4 = this;
5752
-
5753
-      var triggers = this.config.trigger.split(' ');
5754
-      triggers.forEach(function (trigger) {
5755
-        if (trigger === 'click') {
5756
-          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
5757
-            return _this4.toggle(event);
5758
-          });
5759
-        } else if (trigger !== Trigger.MANUAL) {
5760
-          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
5761
-          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
5762
-          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
5763
-            return _this4._enter(event);
5764
-          }).on(eventOut, _this4.config.selector, function (event) {
5765
-            return _this4._leave(event);
5766
-          });
5767
-        }
5768
-      });
5769
-      $(this.element).closest('.modal').on('hide.bs.modal', function () {
5770
-        if (_this4.element) {
5771
-          _this4.hide();
5772
-        }
5773
-      });
5774
-
5775
-      if (this.config.selector) {
5776
-        this.config = _objectSpread({}, this.config, {
5777
-          trigger: 'manual',
5778
-          selector: ''
5779
-        });
5780
-      } else {
5781
-        this._fixTitle();
5782
-      }
5783
-    };
5784
-
5785
-    _proto._fixTitle = function _fixTitle() {
5786
-      var titleType = typeof this.element.getAttribute('data-original-title');
5787
-
5788
-      if (this.element.getAttribute('title') || titleType !== 'string') {
5789
-        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
5790
-        this.element.setAttribute('title', '');
5791
-      }
5792
-    };
5793
-
5794
-    _proto._enter = function _enter(event, context) {
5795
-      var dataKey = this.constructor.DATA_KEY;
5796
-      context = context || $(event.currentTarget).data(dataKey);
5797
-
5798
-      if (!context) {
5799
-        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5800
-        $(event.currentTarget).data(dataKey, context);
5801
-      }
5802
-
5803
-      if (event) {
5804
-        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
5805
-      }
5806
-
5807
-      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {
5808
-        context._hoverState = HoverState.SHOW;
5809
-        return;
5810
-      }
5811
-
5812
-      clearTimeout(context._timeout);
5813
-      context._hoverState = HoverState.SHOW;
5814
-
5815
-      if (!context.config.delay || !context.config.delay.show) {
5816
-        context.show();
5817
-        return;
5818
-      }
5819
-
5820
-      context._timeout = setTimeout(function () {
5821
-        if (context._hoverState === HoverState.SHOW) {
5822
-          context.show();
5823
-        }
5824
-      }, context.config.delay.show);
5825
-    };
5826
-
5827
-    _proto._leave = function _leave(event, context) {
5828
-      var dataKey = this.constructor.DATA_KEY;
5829
-      context = context || $(event.currentTarget).data(dataKey);
5830
-
5831
-      if (!context) {
5832
-        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5833
-        $(event.currentTarget).data(dataKey, context);
5834
-      }
5835
-
5836
-      if (event) {
5837
-        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
5838
-      }
5839
-
5840
-      if (context._isWithActiveTrigger()) {
5841
-        return;
5842
-      }
5843
-
5844
-      clearTimeout(context._timeout);
5845
-      context._hoverState = HoverState.OUT;
5846
-
5847
-      if (!context.config.delay || !context.config.delay.hide) {
5848
-        context.hide();
5849
-        return;
5850
-      }
5851
-
5852
-      context._timeout = setTimeout(function () {
5853
-        if (context._hoverState === HoverState.OUT) {
5854
-          context.hide();
5855
-        }
5856
-      }, context.config.delay.hide);
5857
-    };
5858
-
5859
-    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
5860
-      for (var trigger in this._activeTrigger) {
5861
-        if (this._activeTrigger[trigger]) {
5862
-          return true;
5863
-        }
5864
-      }
5865
-
5866
-      return false;
5867
-    };
5868
-
5869
-    _proto._getConfig = function _getConfig(config) {
5870
-      var dataAttributes = $(this.element).data();
5871
-      Object.keys(dataAttributes).forEach(function (dataAttr) {
5872
-        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
5873
-          delete dataAttributes[dataAttr];
5874
-        }
5875
-      });
5876
-      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
5877
-
5878
-      if (typeof config.delay === 'number') {
5879
-        config.delay = {
5880
-          show: config.delay,
5881
-          hide: config.delay
5882
-        };
5883
-      }
5884
-
5885
-      if (typeof config.title === 'number') {
5886
-        config.title = config.title.toString();
5887
-      }
5888
-
5889
-      if (typeof config.content === 'number') {
5890
-        config.content = config.content.toString();
5891
-      }
5892
-
5893
-      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
5894
-
5895
-      if (config.sanitize) {
5896
-        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
5897
-      }
5898
-
5899
-      return config;
5900
-    };
5901
-
5902
-    _proto._getDelegateConfig = function _getDelegateConfig() {
5903
-      var config = {};
5904
-
5905
-      if (this.config) {
5906
-        for (var key in this.config) {
5907
-          if (this.constructor.Default[key] !== this.config[key]) {
5908
-            config[key] = this.config[key];
5909
-          }
5910
-        }
5911
-      }
5912
-
5913
-      return config;
5914
-    };
5915
-
5916
-    _proto._cleanTipClass = function _cleanTipClass() {
5917
-      var $tip = $(this.getTipElement());
5918
-      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
5919
-
5920
-      if (tabClass !== null && tabClass.length) {
5921
-        $tip.removeClass(tabClass.join(''));
5922
-      }
5923
-    };
5924
-
5925
-    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
5926
-      var popperInstance = popperData.instance;
5927
-      this.tip = popperInstance.popper;
5928
-
5929
-      this._cleanTipClass();
5930
-
5931
-      this.addAttachmentClass(this._getAttachment(popperData.placement));
5932
-    };
5933
-
5934
-    _proto._fixTransition = function _fixTransition() {
5935
-      var tip = this.getTipElement();
5936
-      var initConfigAnimation = this.config.animation;
5937
-
5938
-      if (tip.getAttribute('x-placement') !== null) {
5939
-        return;
5940
-      }
5941
-
5942
-      $(tip).removeClass(ClassName$6.FADE);
5943
-      this.config.animation = false;
5944
-      this.hide();
5945
-      this.show();
5946
-      this.config.animation = initConfigAnimation;
5947
-    } // Static
5948
-    ;
5949
-
5950
-    Tooltip._jQueryInterface = function _jQueryInterface(config) {
5951
-      return this.each(function () {
5952
-        var data = $(this).data(DATA_KEY$6);
5953
-
5954
-        var _config = typeof config === 'object' && config;
5955
-
5956
-        if (!data && /dispose|hide/.test(config)) {
5957
-          return;
5958
-        }
5959
-
5960
-        if (!data) {
5961
-          data = new Tooltip(this, _config);
5962
-          $(this).data(DATA_KEY$6, data);
5963
-        }
5964
-
5965
-        if (typeof config === 'string') {
5966
-          if (typeof data[config] === 'undefined') {
5967
-            throw new TypeError("No method named \"" + config + "\"");
5968
-          }
5969
-
5970
-          data[config]();
5971
-        }
5972
-      });
5973
-    };
5974
-
5975
-    _createClass(Tooltip, null, [{
5976
-      key: "VERSION",
5977
-      get: function get() {
5978
-        return VERSION$6;
5979
-      }
5980
-    }, {
5981
-      key: "Default",
5982
-      get: function get() {
5983
-        return Default$4;
5984
-      }
5985
-    }, {
5986
-      key: "NAME",
5987
-      get: function get() {
5988
-        return NAME$6;
5989
-      }
5990
-    }, {
5991
-      key: "DATA_KEY",
5992
-      get: function get() {
5993
-        return DATA_KEY$6;
5994
-      }
5995
-    }, {
5996
-      key: "Event",
5997
-      get: function get() {
5998
-        return Event$6;
5999
-      }
6000
-    }, {
6001
-      key: "EVENT_KEY",
6002
-      get: function get() {
6003
-        return EVENT_KEY$6;
6004
-      }
6005
-    }, {
6006
-      key: "DefaultType",
6007
-      get: function get() {
6008
-        return DefaultType$4;
6009
-      }
6010
-    }]);
6011
-
6012
-    return Tooltip;
6013
-  }();
6014
-  /**
6015
-   * ------------------------------------------------------------------------
6016
-   * jQuery
6017
-   * ------------------------------------------------------------------------
6018
-   */
6019
-
6020
-
6021
-  $.fn[NAME$6] = Tooltip._jQueryInterface;
6022
-  $.fn[NAME$6].Constructor = Tooltip;
6023
-
6024
-  $.fn[NAME$6].noConflict = function () {
6025
-    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;
6026
-    return Tooltip._jQueryInterface;
6027
-  };
6028
-
6029
-  /**
6030
-   * ------------------------------------------------------------------------
6031
-   * Constants
6032
-   * ------------------------------------------------------------------------
6033
-   */
6034
-
6035
-  var NAME$7 = 'popover';
6036
-  var VERSION$7 = '4.3.1';
6037
-  var DATA_KEY$7 = 'bs.popover';
6038
-  var EVENT_KEY$7 = "." + DATA_KEY$7;
6039
-  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
6040
-  var CLASS_PREFIX$1 = 'bs-popover';
6041
-  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
6042
-
6043
-  var Default$5 = _objectSpread({}, Tooltip.Default, {
6044
-    placement: 'right',
6045
-    trigger: 'click',
6046
-    content: '',
6047
-    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
6048
-  });
6049
-
6050
-  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {
6051
-    content: '(string|element|function)'
6052
-  });
6053
-
6054
-  var ClassName$7 = {
6055
-    FADE: 'fade',
6056
-    SHOW: 'show'
6057
-  };
6058
-  var Selector$7 = {
6059
-    TITLE: '.popover-header',
6060
-    CONTENT: '.popover-body'
6061
-  };
6062
-  var Event$7 = {
6063
-    HIDE: "hide" + EVENT_KEY$7,
6064
-    HIDDEN: "hidden" + EVENT_KEY$7,
6065
-    SHOW: "show" + EVENT_KEY$7,
6066
-    SHOWN: "shown" + EVENT_KEY$7,
6067
-    INSERTED: "inserted" + EVENT_KEY$7,
6068
-    CLICK: "click" + EVENT_KEY$7,
6069
-    FOCUSIN: "focusin" + EVENT_KEY$7,
6070
-    FOCUSOUT: "focusout" + EVENT_KEY$7,
6071
-    MOUSEENTER: "mouseenter" + EVENT_KEY$7,
6072
-    MOUSELEAVE: "mouseleave" + EVENT_KEY$7
6073
-    /**
6074
-     * ------------------------------------------------------------------------
6075
-     * Class Definition
6076
-     * ------------------------------------------------------------------------
6077
-     */
6078
-
6079
-  };
6080
-
6081
-  var Popover =
6082
-  /*#__PURE__*/
6083
-  function (_Tooltip) {
6084
-    _inheritsLoose(Popover, _Tooltip);
6085
-
6086
-    function Popover() {
6087
-      return _Tooltip.apply(this, arguments) || this;
6088
-    }
6089
-
6090
-    var _proto = Popover.prototype;
6091
-
6092
-    // Overrides
6093
-    _proto.isWithContent = function isWithContent() {
6094
-      return this.getTitle() || this._getContent();
6095
-    };
6096
-
6097
-    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
6098
-      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
6099
-    };
6100
-
6101
-    _proto.getTipElement = function getTipElement() {
6102
-      this.tip = this.tip || $(this.config.template)[0];
6103
-      return this.tip;
6104
-    };
6105
-
6106
-    _proto.setContent = function setContent() {
6107
-      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
6108
-
6109
-      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());
6110
-
6111
-      var content = this._getContent();
6112
-
6113
-      if (typeof content === 'function') {
6114
-        content = content.call(this.element);
6115
-      }
6116
-
6117
-      this.setElementContent($tip.find(Selector$7.CONTENT), content);
6118
-      $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
6119
-    } // Private
6120
-    ;
6121
-
6122
-    _proto._getContent = function _getContent() {
6123
-      return this.element.getAttribute('data-content') || this.config.content;
6124
-    };
6125
-
6126
-    _proto._cleanTipClass = function _cleanTipClass() {
6127
-      var $tip = $(this.getTipElement());
6128
-      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
6129
-
6130
-      if (tabClass !== null && tabClass.length > 0) {
6131
-        $tip.removeClass(tabClass.join(''));
6132
-      }
6133
-    } // Static
6134
-    ;
6135
-
6136
-    Popover._jQueryInterface = function _jQueryInterface(config) {
6137
-      return this.each(function () {
6138
-        var data = $(this).data(DATA_KEY$7);
6139
-
6140
-        var _config = typeof config === 'object' ? config : null;
6141
-
6142
-        if (!data && /dispose|hide/.test(config)) {
6143
-          return;
6144
-        }
6145
-
6146
-        if (!data) {
6147
-          data = new Popover(this, _config);
6148
-          $(this).data(DATA_KEY$7, data);
6149
-        }
6150
-
6151
-        if (typeof config === 'string') {
6152
-          if (typeof data[config] === 'undefined') {
6153
-            throw new TypeError("No method named \"" + config + "\"");
6154
-          }
6155
-
6156
-          data[config]();
6157
-        }
6158
-      });
6159
-    };
6160
-
6161
-    _createClass(Popover, null, [{
6162
-      key: "VERSION",
6163
-      // Getters
6164
-      get: function get() {
6165
-        return VERSION$7;
6166
-      }
6167
-    }, {
6168
-      key: "Default",
6169
-      get: function get() {
6170
-        return Default$5;
6171
-      }
6172
-    }, {
6173
-      key: "NAME",
6174
-      get: function get() {
6175
-        return NAME$7;
6176
-      }
6177
-    }, {
6178
-      key: "DATA_KEY",
6179
-      get: function get() {
6180
-        return DATA_KEY$7;
6181
-      }
6182
-    }, {
6183
-      key: "Event",
6184
-      get: function get() {
6185
-        return Event$7;
6186
-      }
6187
-    }, {
6188
-      key: "EVENT_KEY",
6189
-      get: function get() {
6190
-        return EVENT_KEY$7;
6191
-      }
6192
-    }, {
6193
-      key: "DefaultType",
6194
-      get: function get() {
6195
-        return DefaultType$5;
6196
-      }
6197
-    }]);
6198
-
6199
-    return Popover;
6200
-  }(Tooltip);
6201
-  /**
6202
-   * ------------------------------------------------------------------------
6203
-   * jQuery
6204
-   * ------------------------------------------------------------------------
6205
-   */
6206
-
6207
-
6208
-  $.fn[NAME$7] = Popover._jQueryInterface;
6209
-  $.fn[NAME$7].Constructor = Popover;
6210
-
6211
-  $.fn[NAME$7].noConflict = function () {
6212
-    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;
6213
-    return Popover._jQueryInterface;
6214
-  };
6215
-
6216
-  /**
6217
-   * ------------------------------------------------------------------------
6218
-   * Constants
6219
-   * ------------------------------------------------------------------------
6220
-   */
6221
-
6222
-  var NAME$8 = 'scrollspy';
6223
-  var VERSION$8 = '4.3.1';
6224
-  var DATA_KEY$8 = 'bs.scrollspy';
6225
-  var EVENT_KEY$8 = "." + DATA_KEY$8;
6226
-  var DATA_API_KEY$6 = '.data-api';
6227
-  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];
6228
-  var Default$6 = {
6229
-    offset: 10,
6230
-    method: 'auto',
6231
-    target: ''
6232
-  };
6233
-  var DefaultType$6 = {
6234
-    offset: 'number',
6235
-    method: 'string',
6236
-    target: '(string|element)'
6237
-  };
6238
-  var Event$8 = {
6239
-    ACTIVATE: "activate" + EVENT_KEY$8,
6240
-    SCROLL: "scroll" + EVENT_KEY$8,
6241
-    LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6
6242
-  };
6243
-  var ClassName$8 = {
6244
-    DROPDOWN_ITEM: 'dropdown-item',
6245
-    DROPDOWN_MENU: 'dropdown-menu',
6246
-    ACTIVE: 'active'
6247
-  };
6248
-  var Selector$8 = {
6249
-    DATA_SPY: '[data-spy="scroll"]',
6250
-    ACTIVE: '.active',
6251
-    NAV_LIST_GROUP: '.nav, .list-group',
6252
-    NAV_LINKS: '.nav-link',
6253
-    NAV_ITEMS: '.nav-item',
6254
-    LIST_ITEMS: '.list-group-item',
6255
-    DROPDOWN: '.dropdown',
6256
-    DROPDOWN_ITEMS: '.dropdown-item',
6257
-    DROPDOWN_TOGGLE: '.dropdown-toggle'
6258
-  };
6259
-  var OffsetMethod = {
6260
-    OFFSET: 'offset',
6261
-    POSITION: 'position'
6262
-    /**
6263
-     * ------------------------------------------------------------------------
6264
-     * Class Definition
6265
-     * ------------------------------------------------------------------------
6266
-     */
6267
-
6268
-  };
6269
-
6270
-  var ScrollSpy =
6271
-  /*#__PURE__*/
6272
-  function () {
6273
-    function ScrollSpy(element, config) {
6274
-      var _this = this;
6275
-
6276
-      this._element = element;
6277
-      this._scrollElement = element.tagName === 'BODY' ? window : element;
6278
-      this._config = this._getConfig(config);
6279
-      this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS);
6280
-      this._offsets = [];
6281
-      this._targets = [];
6282
-      this._activeTarget = null;
6283
-      this._scrollHeight = 0;
6284
-      $(this._scrollElement).on(Event$8.SCROLL, function (event) {
6285
-        return _this._process(event);
6286
-      });
6287
-      this.refresh();
6288
-
6289
-      this._process();
6290
-    } // Getters
6291
-
6292
-
6293
-    var _proto = ScrollSpy.prototype;
6294
-
6295
-    // Public
6296
-    _proto.refresh = function refresh() {
6297
-      var _this2 = this;
6298
-
6299
-      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
6300
-      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
6301
-      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
6302
-      this._offsets = [];
6303
-      this._targets = [];
6304
-      this._scrollHeight = this._getScrollHeight();
6305
-      var targets = [].slice.call(document.querySelectorAll(this._selector));
6306
-      targets.map(function (element) {
6307
-        var target;
6308
-        var targetSelector = Util.getSelectorFromElement(element);
6309
-
6310
-        if (targetSelector) {
6311
-          target = document.querySelector(targetSelector);
6312
-        }
6313
-
6314
-        if (target) {
6315
-          var targetBCR = target.getBoundingClientRect();
6316
-
6317
-          if (targetBCR.width || targetBCR.height) {
6318
-            // TODO (fat): remove sketch reliance on jQuery position/offset
6319
-            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
6320
-          }
6321
-        }
6322
-
6323
-        return null;
6324
-      }).filter(function (item) {
6325
-        return item;
6326
-      }).sort(function (a, b) {
6327
-        return a[0] - b[0];
6328
-      }).forEach(function (item) {
6329
-        _this2._offsets.push(item[0]);
6330
-
6331
-        _this2._targets.push(item[1]);
6332
-      });
6333
-    };
6334
-
6335
-    _proto.dispose = function dispose() {
6336
-      $.removeData(this._element, DATA_KEY$8);
6337
-      $(this._scrollElement).off(EVENT_KEY$8);
6338
-      this._element = null;
6339
-      this._scrollElement = null;
6340
-      this._config = null;
6341
-      this._selector = null;
6342
-      this._offsets = null;
6343
-      this._targets = null;
6344
-      this._activeTarget = null;
6345
-      this._scrollHeight = null;
6346
-    } // Private
6347
-    ;
6348
-
6349
-    _proto._getConfig = function _getConfig(config) {
6350
-      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
6351
-
6352
-      if (typeof config.target !== 'string') {
6353
-        var id = $(config.target).attr('id');
6354
-
6355
-        if (!id) {
6356
-          id = Util.getUID(NAME$8);
6357
-          $(config.target).attr('id', id);
6358
-        }
6359
-
6360
-        config.target = "#" + id;
6361
-      }
6362
-
6363
-      Util.typeCheckConfig(NAME$8, config, DefaultType$6);
6364
-      return config;
6365
-    };
6366
-
6367
-    _proto._getScrollTop = function _getScrollTop() {
6368
-      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
6369
-    };
6370
-
6371
-    _proto._getScrollHeight = function _getScrollHeight() {
6372
-      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
6373
-    };
6374
-
6375
-    _proto._getOffsetHeight = function _getOffsetHeight() {
6376
-      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
6377
-    };
6378
-
6379
-    _proto._process = function _process() {
6380
-      var scrollTop = this._getScrollTop() + this._config.offset;
6381
-
6382
-      var scrollHeight = this._getScrollHeight();
6383
-
6384
-      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
6385
-
6386
-      if (this._scrollHeight !== scrollHeight) {
6387
-        this.refresh();
6388
-      }
6389
-
6390
-      if (scrollTop >= maxScroll) {
6391
-        var target = this._targets[this._targets.length - 1];
6392
-
6393
-        if (this._activeTarget !== target) {
6394
-          this._activate(target);
6395
-        }
6396
-
6397
-        return;
6398
-      }
6399
-
6400
-      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
6401
-        this._activeTarget = null;
6402
-
6403
-        this._clear();
6404
-
6405
-        return;
6406
-      }
6407
-
6408
-      var offsetLength = this._offsets.length;
6409
-
6410
-      for (var i = offsetLength; i--;) {
6411
-        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
6412
-
6413
-        if (isActiveTarget) {
6414
-          this._activate(this._targets[i]);
6415
-        }
6416
-      }
6417
-    };
6418
-
6419
-    _proto._activate = function _activate(target) {
6420
-      this._activeTarget = target;
6421
-
6422
-      this._clear();
6423
-
6424
-      var queries = this._selector.split(',').map(function (selector) {
6425
-        return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
6426
-      });
6427
-
6428
-      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
6429
-
6430
-      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {
6431
-        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);
6432
-        $link.addClass(ClassName$8.ACTIVE);
6433
-      } else {
6434
-        // Set triggered link as active
6435
-        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active
6436
-        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
6437
-
6438
-        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + ", " + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item
6439
-
6440
-        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);
6441
-      }
6442
-
6443
-      $(this._scrollElement).trigger(Event$8.ACTIVATE, {
6444
-        relatedTarget: target
6445
-      });
6446
-    };
6447
-
6448
-    _proto._clear = function _clear() {
6449
-      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
6450
-        return node.classList.contains(ClassName$8.ACTIVE);
6451
-      }).forEach(function (node) {
6452
-        return node.classList.remove(ClassName$8.ACTIVE);
6453
-      });
6454
-    } // Static
6455
-    ;
6456
-
6457
-    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
6458
-      return this.each(function () {
6459
-        var data = $(this).data(DATA_KEY$8);
6460
-
6461
-        var _config = typeof config === 'object' && config;
6462
-
6463
-        if (!data) {
6464
-          data = new ScrollSpy(this, _config);
6465
-          $(this).data(DATA_KEY$8, data);
6466
-        }
6467
-
6468
-        if (typeof config === 'string') {
6469
-          if (typeof data[config] === 'undefined') {
6470
-            throw new TypeError("No method named \"" + config + "\"");
6471
-          }
6472
-
6473
-          data[config]();
6474
-        }
6475
-      });
6476
-    };
6477
-
6478
-    _createClass(ScrollSpy, null, [{
6479
-      key: "VERSION",
6480
-      get: function get() {
6481
-        return VERSION$8;
6482
-      }
6483
-    }, {
6484
-      key: "Default",
6485
-      get: function get() {
6486
-        return Default$6;
6487
-      }
6488
-    }]);
6489
-
6490
-    return ScrollSpy;
6491
-  }();
6492
-  /**
6493
-   * ------------------------------------------------------------------------
6494
-   * Data Api implementation
6495
-   * ------------------------------------------------------------------------
6496
-   */
6497
-
6498
-
6499
-  $(window).on(Event$8.LOAD_DATA_API, function () {
6500
-    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));
6501
-    var scrollSpysLength = scrollSpys.length;
6502
-
6503
-    for (var i = scrollSpysLength; i--;) {
6504
-      var $spy = $(scrollSpys[i]);
6505
-
6506
-      ScrollSpy._jQueryInterface.call($spy, $spy.data());
6507
-    }
6508
-  });
6509
-  /**
6510
-   * ------------------------------------------------------------------------
6511
-   * jQuery
6512
-   * ------------------------------------------------------------------------
6513
-   */
6514
-
6515
-  $.fn[NAME$8] = ScrollSpy._jQueryInterface;
6516
-  $.fn[NAME$8].Constructor = ScrollSpy;
6517
-
6518
-  $.fn[NAME$8].noConflict = function () {
6519
-    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;
6520
-    return ScrollSpy._jQueryInterface;
6521
-  };
6522
-
6523
-  /**
6524
-   * ------------------------------------------------------------------------
6525
-   * Constants
6526
-   * ------------------------------------------------------------------------
6527
-   */
6528
-
6529
-  var NAME$9 = 'tab';
6530
-  var VERSION$9 = '4.3.1';
6531
-  var DATA_KEY$9 = 'bs.tab';
6532
-  var EVENT_KEY$9 = "." + DATA_KEY$9;
6533
-  var DATA_API_KEY$7 = '.data-api';
6534
-  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
6535
-  var Event$9 = {
6536
-    HIDE: "hide" + EVENT_KEY$9,
6537
-    HIDDEN: "hidden" + EVENT_KEY$9,
6538
-    SHOW: "show" + EVENT_KEY$9,
6539
-    SHOWN: "shown" + EVENT_KEY$9,
6540
-    CLICK_DATA_API: "click" + EVENT_KEY$9 + DATA_API_KEY$7
6541
-  };
6542
-  var ClassName$9 = {
6543
-    DROPDOWN_MENU: 'dropdown-menu',
6544
-    ACTIVE: 'active',
6545
-    DISABLED: 'disabled',
6546
-    FADE: 'fade',
6547
-    SHOW: 'show'
6548
-  };
6549
-  var Selector$9 = {
6550
-    DROPDOWN: '.dropdown',
6551
-    NAV_LIST_GROUP: '.nav, .list-group',
6552
-    ACTIVE: '.active',
6553
-    ACTIVE_UL: '> li > .active',
6554
-    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
6555
-    DROPDOWN_TOGGLE: '.dropdown-toggle',
6556
-    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
6557
-    /**
6558
-     * ------------------------------------------------------------------------
6559
-     * Class Definition
6560
-     * ------------------------------------------------------------------------
6561
-     */
6562
-
6563
-  };
6564
-
6565
-  var Tab =
6566
-  /*#__PURE__*/
6567
-  function () {
6568
-    function Tab(element) {
6569
-      this._element = element;
6570
-    } // Getters
6571
-
6572
-
6573
-    var _proto = Tab.prototype;
6574
-
6575
-    // Public
6576
-    _proto.show = function show() {
6577
-      var _this = this;
6578
-
6579
-      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {
6580
-        return;
6581
-      }
6582
-
6583
-      var target;
6584
-      var previous;
6585
-      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];
6586
-      var selector = Util.getSelectorFromElement(this._element);
6587
-
6588
-      if (listElement) {
6589
-        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;
6590
-        previous = $.makeArray($(listElement).find(itemSelector));
6591
-        previous = previous[previous.length - 1];
6592
-      }
6593
-
6594
-      var hideEvent = $.Event(Event$9.HIDE, {
6595
-        relatedTarget: this._element
6596
-      });
6597
-      var showEvent = $.Event(Event$9.SHOW, {
6598
-        relatedTarget: previous
6599
-      });
6600
-
6601
-      if (previous) {
6602
-        $(previous).trigger(hideEvent);
6603
-      }
6604
-
6605
-      $(this._element).trigger(showEvent);
6606
-
6607
-      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
6608
-        return;
6609
-      }
6610
-
6611
-      if (selector) {
6612
-        target = document.querySelector(selector);
6613
-      }
6614
-
6615
-      this._activate(this._element, listElement);
6616
-
6617
-      var complete = function complete() {
6618
-        var hiddenEvent = $.Event(Event$9.HIDDEN, {
6619
-          relatedTarget: _this._element
6620
-        });
6621
-        var shownEvent = $.Event(Event$9.SHOWN, {
6622
-          relatedTarget: previous
6623
-        });
6624
-        $(previous).trigger(hiddenEvent);
6625
-        $(_this._element).trigger(shownEvent);
6626
-      };
6627
-
6628
-      if (target) {
6629
-        this._activate(target, target.parentNode, complete);
6630
-      } else {
6631
-        complete();
6632
-      }
6633
-    };
6634
-
6635
-    _proto.dispose = function dispose() {
6636
-      $.removeData(this._element, DATA_KEY$9);
6637
-      this._element = null;
6638
-    } // Private
6639
-    ;
6640
-
6641
-    _proto._activate = function _activate(element, container, callback) {
6642
-      var _this2 = this;
6643
-
6644
-      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);
6645
-      var active = activeElements[0];
6646
-      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);
6647
-
6648
-      var complete = function complete() {
6649
-        return _this2._transitionComplete(element, active, callback);
6650
-      };
6651
-
6652
-      if (active && isTransitioning) {
6653
-        var transitionDuration = Util.getTransitionDurationFromElement(active);
6654
-        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6655
-      } else {
6656
-        complete();
6657
-      }
6658
-    };
6659
-
6660
-    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
6661
-      if (active) {
6662
-        $(active).removeClass(ClassName$9.ACTIVE);
6663
-        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];
6664
-
6665
-        if (dropdownChild) {
6666
-          $(dropdownChild).removeClass(ClassName$9.ACTIVE);
6667
-        }
6668
-
6669
-        if (active.getAttribute('role') === 'tab') {
6670
-          active.setAttribute('aria-selected', false);
6671
-        }
6672
-      }
6673
-
6674
-      $(element).addClass(ClassName$9.ACTIVE);
6675
-
6676
-      if (element.getAttribute('role') === 'tab') {
6677
-        element.setAttribute('aria-selected', true);
6678
-      }
6679
-
6680
-      Util.reflow(element);
6681
-
6682
-      if (element.classList.contains(ClassName$9.FADE)) {
6683
-        element.classList.add(ClassName$9.SHOW);
6684
-      }
6685
-
6686
-      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
6687
-        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
6688
-
6689
-        if (dropdownElement) {
6690
-          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));
6691
-          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);
6692
-        }
6693
-
6694
-        element.setAttribute('aria-expanded', true);
6695
-      }
6696
-
6697
-      if (callback) {
6698
-        callback();
6699
-      }
6700
-    } // Static
6701
-    ;
6702
-
6703
-    Tab._jQueryInterface = function _jQueryInterface(config) {
6704
-      return this.each(function () {
6705
-        var $this = $(this);
6706
-        var data = $this.data(DATA_KEY$9);
6707
-
6708
-        if (!data) {
6709
-          data = new Tab(this);
6710
-          $this.data(DATA_KEY$9, data);
6711
-        }
6712
-
6713
-        if (typeof config === 'string') {
6714
-          if (typeof data[config] === 'undefined') {
6715
-            throw new TypeError("No method named \"" + config + "\"");
6716
-          }
6717
-
6718
-          data[config]();
6719
-        }
6720
-      });
6721
-    };
6722
-
6723
-    _createClass(Tab, null, [{
6724
-      key: "VERSION",
6725
-      get: function get() {
6726
-        return VERSION$9;
6727
-      }
6728
-    }]);
6729
-
6730
-    return Tab;
6731
-  }();
6732
-  /**
6733
-   * ------------------------------------------------------------------------
6734
-   * Data Api implementation
6735
-   * ------------------------------------------------------------------------
6736
-   */
6737
-
6738
-
6739
-  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {
6740
-    event.preventDefault();
6741
-
6742
-    Tab._jQueryInterface.call($(this), 'show');
6743
-  });
6744
-  /**
6745
-   * ------------------------------------------------------------------------
6746
-   * jQuery
6747
-   * ------------------------------------------------------------------------
6748
-   */
6749
-
6750
-  $.fn[NAME$9] = Tab._jQueryInterface;
6751
-  $.fn[NAME$9].Constructor = Tab;
6752
-
6753
-  $.fn[NAME$9].noConflict = function () {
6754
-    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;
6755
-    return Tab._jQueryInterface;
6756
-  };
6757
-
6758
-  /**
6759
-   * ------------------------------------------------------------------------
6760
-   * Constants
6761
-   * ------------------------------------------------------------------------
6762
-   */
6763
-
6764
-  var NAME$a = 'toast';
6765
-  var VERSION$a = '4.3.1';
6766
-  var DATA_KEY$a = 'bs.toast';
6767
-  var EVENT_KEY$a = "." + DATA_KEY$a;
6768
-  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
6769
-  var Event$a = {
6770
-    CLICK_DISMISS: "click.dismiss" + EVENT_KEY$a,
6771
-    HIDE: "hide" + EVENT_KEY$a,
6772
-    HIDDEN: "hidden" + EVENT_KEY$a,
6773
-    SHOW: "show" + EVENT_KEY$a,
6774
-    SHOWN: "shown" + EVENT_KEY$a
6775
-  };
6776
-  var ClassName$a = {
6777
-    FADE: 'fade',
6778
-    HIDE: 'hide',
6779
-    SHOW: 'show',
6780
-    SHOWING: 'showing'
6781
-  };
6782
-  var DefaultType$7 = {
6783
-    animation: 'boolean',
6784
-    autohide: 'boolean',
6785
-    delay: 'number'
6786
-  };
6787
-  var Default$7 = {
6788
-    animation: true,
6789
-    autohide: true,
6790
-    delay: 500
6791
-  };
6792
-  var Selector$a = {
6793
-    DATA_DISMISS: '[data-dismiss="toast"]'
6794
-    /**
6795
-     * ------------------------------------------------------------------------
6796
-     * Class Definition
6797
-     * ------------------------------------------------------------------------
6798
-     */
6799
-
6800
-  };
6801
-
6802
-  var Toast =
6803
-  /*#__PURE__*/
6804
-  function () {
6805
-    function Toast(element, config) {
6806
-      this._element = element;
6807
-      this._config = this._getConfig(config);
6808
-      this._timeout = null;
6809
-
6810
-      this._setListeners();
6811
-    } // Getters
6812
-
6813
-
6814
-    var _proto = Toast.prototype;
6815
-
6816
-    // Public
6817
-    _proto.show = function show() {
6818
-      var _this = this;
6819
-
6820
-      $(this._element).trigger(Event$a.SHOW);
6821
-
6822
-      if (this._config.animation) {
6823
-        this._element.classList.add(ClassName$a.FADE);
6824
-      }
6825
-
6826
-      var complete = function complete() {
6827
-        _this._element.classList.remove(ClassName$a.SHOWING);
6828
-
6829
-        _this._element.classList.add(ClassName$a.SHOW);
6830
-
6831
-        $(_this._element).trigger(Event$a.SHOWN);
6832
-
6833
-        if (_this._config.autohide) {
6834
-          _this.hide();
6835
-        }
6836
-      };
6837
-
6838
-      this._element.classList.remove(ClassName$a.HIDE);
6839
-
6840
-      this._element.classList.add(ClassName$a.SHOWING);
6841
-
6842
-      if (this._config.animation) {
6843
-        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6844
-        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6845
-      } else {
6846
-        complete();
6847
-      }
6848
-    };
6849
-
6850
-    _proto.hide = function hide(withoutTimeout) {
6851
-      var _this2 = this;
6852
-
6853
-      if (!this._element.classList.contains(ClassName$a.SHOW)) {
6854
-        return;
6855
-      }
6856
-
6857
-      $(this._element).trigger(Event$a.HIDE);
6858
-
6859
-      if (withoutTimeout) {
6860
-        this._close();
6861
-      } else {
6862
-        this._timeout = setTimeout(function () {
6863
-          _this2._close();
6864
-        }, this._config.delay);
6865
-      }
6866
-    };
6867
-
6868
-    _proto.dispose = function dispose() {
6869
-      clearTimeout(this._timeout);
6870
-      this._timeout = null;
6871
-
6872
-      if (this._element.classList.contains(ClassName$a.SHOW)) {
6873
-        this._element.classList.remove(ClassName$a.SHOW);
6874
-      }
6875
-
6876
-      $(this._element).off(Event$a.CLICK_DISMISS);
6877
-      $.removeData(this._element, DATA_KEY$a);
6878
-      this._element = null;
6879
-      this._config = null;
6880
-    } // Private
6881
-    ;
6882
-
6883
-    _proto._getConfig = function _getConfig(config) {
6884
-      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
6885
-      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
6886
-      return config;
6887
-    };
6888
-
6889
-    _proto._setListeners = function _setListeners() {
6890
-      var _this3 = this;
6891
-
6892
-      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {
6893
-        return _this3.hide(true);
6894
-      });
6895
-    };
6896
-
6897
-    _proto._close = function _close() {
6898
-      var _this4 = this;
6899
-
6900
-      var complete = function complete() {
6901
-        _this4._element.classList.add(ClassName$a.HIDE);
6902
-
6903
-        $(_this4._element).trigger(Event$a.HIDDEN);
6904
-      };
6905
-
6906
-      this._element.classList.remove(ClassName$a.SHOW);
6907
-
6908
-      if (this._config.animation) {
6909
-        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6910
-        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6911
-      } else {
6912
-        complete();
6913
-      }
6914
-    } // Static
6915
-    ;
6916
-
6917
-    Toast._jQueryInterface = function _jQueryInterface(config) {
6918
-      return this.each(function () {
6919
-        var $element = $(this);
6920
-        var data = $element.data(DATA_KEY$a);
6921
-
6922
-        var _config = typeof config === 'object' && config;
6923
-
6924
-        if (!data) {
6925
-          data = new Toast(this, _config);
6926
-          $element.data(DATA_KEY$a, data);
6927
-        }
6928
-
6929
-        if (typeof config === 'string') {
6930
-          if (typeof data[config] === 'undefined') {
6931
-            throw new TypeError("No method named \"" + config + "\"");
6932
-          }
6933
-
6934
-          data[config](this);
6935
-        }
6936
-      });
6937
-    };
6938
-
6939
-    _createClass(Toast, null, [{
6940
-      key: "VERSION",
6941
-      get: function get() {
6942
-        return VERSION$a;
6943
-      }
6944
-    }, {
6945
-      key: "DefaultType",
6946
-      get: function get() {
6947
-        return DefaultType$7;
6948
-      }
6949
-    }, {
6950
-      key: "Default",
6951
-      get: function get() {
6952
-        return Default$7;
6953
-      }
6954
-    }]);
6955
-
6956
-    return Toast;
6957
-  }();
6958
-  /**
6959
-   * ------------------------------------------------------------------------
6960
-   * jQuery
6961
-   * ------------------------------------------------------------------------
6962
-   */
6963
-
6964
-
6965
-  $.fn[NAME$a] = Toast._jQueryInterface;
6966
-  $.fn[NAME$a].Constructor = Toast;
6967
-
6968
-  $.fn[NAME$a].noConflict = function () {
6969
-    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;
6970
-    return Toast._jQueryInterface;
6971
-  };
6972
-
6973
-  /**
6974
-   * --------------------------------------------------------------------------
6975
-   * Bootstrap (v4.3.1): index.js
6976
-   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6977
-   * --------------------------------------------------------------------------
6978
-   */
6979
-
6980
-  (function () {
6981
-    if (typeof $ === 'undefined') {
6982
-      throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
6983
-    }
6984
-
6985
-    var version = $.fn.jquery.split(' ')[0].split('.');
6986
-    var minMajor = 1;
6987
-    var ltMajor = 2;
6988
-    var minMinor = 9;
6989
-    var minPatch = 1;
6990
-    var maxMajor = 4;
6991
-
6992
-    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
6993
-      throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
6994
-    }
6995
-  })();
6996
-
6997
-  exports.Util = Util;
6998
-  exports.Alert = Alert;
6999
-  exports.Button = Button;
7000
-  exports.Carousel = Carousel;
7001
-  exports.Collapse = Collapse;
7002
-  exports.Dropdown = Dropdown;
7003
-  exports.Modal = Modal;
7004
-  exports.Popover = Popover;
7005
-  exports.Scrollspy = ScrollSpy;
7006
-  exports.Tab = Tab;
7007
-  exports.Toast = Toast;
7008
-  exports.Tooltip = Tooltip;
7009
-
7010
-  Object.defineProperty(exports, '__esModule', { value: true });
7011
-
7012
-}));
7013
-//# sourceMappingURL=bootstrap.bundle.js.map
Browse code

update fonctionnel php5.3

git authored on 05/03/2019 13:26:50
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,7013 @@
1
+/*!
2
+  * Bootstrap v4.3.1 (https://getbootstrap.com/)
3
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+  */
6
+(function (global, factory) {
7
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
8
+  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
9
+  (global = global || self, factory(global.bootstrap = {}, global.jQuery));
10
+}(this, function (exports, $) { 'use strict';
11
+
12
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
+
14
+  function _defineProperties(target, props) {
15
+    for (var i = 0; i < props.length; i++) {
16
+      var descriptor = props[i];
17
+      descriptor.enumerable = descriptor.enumerable || false;
18
+      descriptor.configurable = true;
19
+      if ("value" in descriptor) descriptor.writable = true;
20
+      Object.defineProperty(target, descriptor.key, descriptor);
21
+    }
22
+  }
23
+
24
+  function _createClass(Constructor, protoProps, staticProps) {
25
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
26
+    if (staticProps) _defineProperties(Constructor, staticProps);
27
+    return Constructor;
28
+  }
29
+
30
+  function _defineProperty(obj, key, value) {
31
+    if (key in obj) {
32
+      Object.defineProperty(obj, key, {
33
+        value: value,
34
+        enumerable: true,
35
+        configurable: true,
36
+        writable: true
37
+      });
38
+    } else {
39
+      obj[key] = value;
40
+    }
41
+
42
+    return obj;
43
+  }
44
+
45
+  function _objectSpread(target) {
46
+    for (var i = 1; i < arguments.length; i++) {
47
+      var source = arguments[i] != null ? arguments[i] : {};
48
+      var ownKeys = Object.keys(source);
49
+
50
+      if (typeof Object.getOwnPropertySymbols === 'function') {
51
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
52
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
53
+        }));
54
+      }
55
+
56
+      ownKeys.forEach(function (key) {
57
+        _defineProperty(target, key, source[key]);
58
+      });
59
+    }
60
+
61
+    return target;
62
+  }
63
+
64
+  function _inheritsLoose(subClass, superClass) {
65
+    subClass.prototype = Object.create(superClass.prototype);
66
+    subClass.prototype.constructor = subClass;
67
+    subClass.__proto__ = superClass;
68
+  }
69
+
70
+  /**
71
+   * --------------------------------------------------------------------------
72
+   * Bootstrap (v4.3.1): util.js
73
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
74
+   * --------------------------------------------------------------------------
75
+   */
76
+  /**
77
+   * ------------------------------------------------------------------------
78
+   * Private TransitionEnd Helpers
79
+   * ------------------------------------------------------------------------
80
+   */
81
+
82
+  var TRANSITION_END = 'transitionend';
83
+  var MAX_UID = 1000000;
84
+  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
85
+
86
+  function toType(obj) {
87
+    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
88
+  }
89
+
90
+  function getSpecialTransitionEndEvent() {
91
+    return {
92
+      bindType: TRANSITION_END,
93
+      delegateType: TRANSITION_END,
94
+      handle: function handle(event) {
95
+        if ($(event.target).is(this)) {
96
+          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
97
+        }
98
+
99
+        return undefined; // eslint-disable-line no-undefined
100
+      }
101
+    };
102
+  }
103
+
104
+  function transitionEndEmulator(duration) {
105
+    var _this = this;
106
+
107
+    var called = false;
108
+    $(this).one(Util.TRANSITION_END, function () {
109
+      called = true;
110
+    });
111
+    setTimeout(function () {
112
+      if (!called) {
113
+        Util.triggerTransitionEnd(_this);
114
+      }
115
+    }, duration);
116
+    return this;
117
+  }
118
+
119
+  function setTransitionEndSupport() {
120
+    $.fn.emulateTransitionEnd = transitionEndEmulator;
121
+    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
122
+  }
123
+  /**
124
+   * --------------------------------------------------------------------------
125
+   * Public Util Api
126
+   * --------------------------------------------------------------------------
127
+   */
128
+
129
+
130
+  var Util = {
131
+    TRANSITION_END: 'bsTransitionEnd',
132
+    getUID: function getUID(prefix) {
133
+      do {
134
+        // eslint-disable-next-line no-bitwise
135
+        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
136
+      } while (document.getElementById(prefix));
137
+
138
+      return prefix;
139
+    },
140
+    getSelectorFromElement: function getSelectorFromElement(element) {
141
+      var selector = element.getAttribute('data-target');
142
+
143
+      if (!selector || selector === '#') {
144
+        var hrefAttr = element.getAttribute('href');
145
+        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
146
+      }
147
+
148
+      try {
149
+        return document.querySelector(selector) ? selector : null;
150
+      } catch (err) {
151
+        return null;
152
+      }
153
+    },
154
+    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
155
+      if (!element) {
156
+        return 0;
157
+      } // Get transition-duration of the element
158
+
159
+
160
+      var transitionDuration = $(element).css('transition-duration');
161
+      var transitionDelay = $(element).css('transition-delay');
162
+      var floatTransitionDuration = parseFloat(transitionDuration);
163
+      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
164
+
165
+      if (!floatTransitionDuration && !floatTransitionDelay) {
166
+        return 0;
167
+      } // If multiple durations are defined, take the first
168
+
169
+
170
+      transitionDuration = transitionDuration.split(',')[0];
171
+      transitionDelay = transitionDelay.split(',')[0];
172
+      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
173
+    },
174
+    reflow: function reflow(element) {
175
+      return element.offsetHeight;
176
+    },
177
+    triggerTransitionEnd: function triggerTransitionEnd(element) {
178
+      $(element).trigger(TRANSITION_END);
179
+    },
180
+    // TODO: Remove in v5
181
+    supportsTransitionEnd: function supportsTransitionEnd() {
182
+      return Boolean(TRANSITION_END);
183
+    },
184
+    isElement: function isElement(obj) {
185
+      return (obj[0] || obj).nodeType;
186
+    },
187
+    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
188
+      for (var property in configTypes) {
189
+        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
190
+          var expectedTypes = configTypes[property];
191
+          var value = config[property];
192
+          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
193
+
194
+          if (!new RegExp(expectedTypes).test(valueType)) {
195
+            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
196
+          }
197
+        }
198
+      }
199
+    },
200
+    findShadowRoot: function findShadowRoot(element) {
201
+      if (!document.documentElement.attachShadow) {
202
+        return null;
203
+      } // Can find the shadow root otherwise it'll return the document
204
+
205
+
206
+      if (typeof element.getRootNode === 'function') {
207
+        var root = element.getRootNode();
208
+        return root instanceof ShadowRoot ? root : null;
209
+      }
210
+
211
+      if (element instanceof ShadowRoot) {
212
+        return element;
213
+      } // when we don't find a shadow root
214
+
215
+
216
+      if (!element.parentNode) {
217
+        return null;
218
+      }
219
+
220
+      return Util.findShadowRoot(element.parentNode);
221
+    }
222
+  };
223
+  setTransitionEndSupport();
224
+
225
+  /**
226
+   * ------------------------------------------------------------------------
227
+   * Constants
228
+   * ------------------------------------------------------------------------
229
+   */
230
+
231
+  var NAME = 'alert';
232
+  var VERSION = '4.3.1';
233
+  var DATA_KEY = 'bs.alert';
234
+  var EVENT_KEY = "." + DATA_KEY;
235
+  var DATA_API_KEY = '.data-api';
236
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
237
+  var Selector = {
238
+    DISMISS: '[data-dismiss="alert"]'
239
+  };
240
+  var Event = {
241
+    CLOSE: "close" + EVENT_KEY,
242
+    CLOSED: "closed" + EVENT_KEY,
243
+    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
244
+  };
245
+  var ClassName = {
246
+    ALERT: 'alert',
247
+    FADE: 'fade',
248
+    SHOW: 'show'
249
+    /**
250
+     * ------------------------------------------------------------------------
251
+     * Class Definition
252
+     * ------------------------------------------------------------------------
253
+     */
254
+
255
+  };
256
+
257
+  var Alert =
258
+  /*#__PURE__*/
259
+  function () {
260
+    function Alert(element) {
261
+      this._element = element;
262
+    } // Getters
263
+
264
+
265
+    var _proto = Alert.prototype;
266
+
267
+    // Public
268
+    _proto.close = function close(element) {
269
+      var rootElement = this._element;
270
+
271
+      if (element) {
272
+        rootElement = this._getRootElement(element);
273
+      }
274
+
275
+      var customEvent = this._triggerCloseEvent(rootElement);
276
+
277
+      if (customEvent.isDefaultPrevented()) {
278
+        return;
279
+      }
280
+
281
+      this._removeElement(rootElement);
282
+    };
283
+
284
+    _proto.dispose = function dispose() {
285
+      $.removeData(this._element, DATA_KEY);
286
+      this._element = null;
287
+    } // Private
288
+    ;
289
+
290
+    _proto._getRootElement = function _getRootElement(element) {
291
+      var selector = Util.getSelectorFromElement(element);
292
+      var parent = false;
293
+
294
+      if (selector) {
295
+        parent = document.querySelector(selector);
296
+      }
297
+
298
+      if (!parent) {
299
+        parent = $(element).closest("." + ClassName.ALERT)[0];
300
+      }
301
+
302
+      return parent;
303
+    };
304
+
305
+    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
306
+      var closeEvent = $.Event(Event.CLOSE);
307
+      $(element).trigger(closeEvent);
308
+      return closeEvent;
309
+    };
310
+
311
+    _proto._removeElement = function _removeElement(element) {
312
+      var _this = this;
313
+
314
+      $(element).removeClass(ClassName.SHOW);
315
+
316
+      if (!$(element).hasClass(ClassName.FADE)) {
317
+        this._destroyElement(element);
318
+
319
+        return;
320
+      }
321
+
322
+      var transitionDuration = Util.getTransitionDurationFromElement(element);
323
+      $(element).one(Util.TRANSITION_END, function (event) {
324
+        return _this._destroyElement(element, event);
325
+      }).emulateTransitionEnd(transitionDuration);
326
+    };
327
+
328
+    _proto._destroyElement = function _destroyElement(element) {
329
+      $(element).detach().trigger(Event.CLOSED).remove();
330
+    } // Static
331
+    ;
332
+
333
+    Alert._jQueryInterface = function _jQueryInterface(config) {
334
+      return this.each(function () {
335
+        var $element = $(this);
336
+        var data = $element.data(DATA_KEY);
337
+
338
+        if (!data) {
339
+          data = new Alert(this);
340
+          $element.data(DATA_KEY, data);
341
+        }
342
+
343
+        if (config === 'close') {
344
+          data[config](this);
345
+        }
346
+      });
347
+    };
348
+
349
+    Alert._handleDismiss = function _handleDismiss(alertInstance) {
350
+      return function (event) {
351
+        if (event) {
352
+          event.preventDefault();
353
+        }
354
+
355
+        alertInstance.close(this);
356
+      };
357
+    };
358
+
359
+    _createClass(Alert, null, [{
360
+      key: "VERSION",
361
+      get: function get() {
362
+        return VERSION;
363
+      }
364
+    }]);
365
+
366
+    return Alert;
367
+  }();
368
+  /**
369
+   * ------------------------------------------------------------------------
370
+   * Data Api implementation
371
+   * ------------------------------------------------------------------------
372
+   */
373
+
374
+
375
+  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
376
+  /**
377
+   * ------------------------------------------------------------------------
378
+   * jQuery
379
+   * ------------------------------------------------------------------------
380
+   */
381
+
382
+  $.fn[NAME] = Alert._jQueryInterface;
383
+  $.fn[NAME].Constructor = Alert;
384
+
385
+  $.fn[NAME].noConflict = function () {
386
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
387
+    return Alert._jQueryInterface;
388
+  };
389
+
390
+  /**
391
+   * ------------------------------------------------------------------------
392
+   * Constants
393
+   * ------------------------------------------------------------------------
394
+   */
395
+
396
+  var NAME$1 = 'button';
397
+  var VERSION$1 = '4.3.1';
398
+  var DATA_KEY$1 = 'bs.button';
399
+  var EVENT_KEY$1 = "." + DATA_KEY$1;
400
+  var DATA_API_KEY$1 = '.data-api';
401
+  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
402
+  var ClassName$1 = {
403
+    ACTIVE: 'active',
404
+    BUTTON: 'btn',
405
+    FOCUS: 'focus'
406
+  };
407
+  var Selector$1 = {
408
+    DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
409
+    DATA_TOGGLE: '[data-toggle="buttons"]',
410
+    INPUT: 'input:not([type="hidden"])',
411
+    ACTIVE: '.active',
412
+    BUTTON: '.btn'
413
+  };
414
+  var Event$1 = {
415
+    CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1,
416
+    FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1)
417
+    /**
418
+     * ------------------------------------------------------------------------
419
+     * Class Definition
420
+     * ------------------------------------------------------------------------
421
+     */
422
+
423
+  };
424
+
425
+  var Button =
426
+  /*#__PURE__*/
427
+  function () {
428
+    function Button(element) {
429
+      this._element = element;
430
+    } // Getters
431
+
432
+
433
+    var _proto = Button.prototype;
434
+
435
+    // Public
436
+    _proto.toggle = function toggle() {
437
+      var triggerChangeEvent = true;
438
+      var addAriaPressed = true;
439
+      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];
440
+
441
+      if (rootElement) {
442
+        var input = this._element.querySelector(Selector$1.INPUT);
443
+
444
+        if (input) {
445
+          if (input.type === 'radio') {
446
+            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {
447
+              triggerChangeEvent = false;
448
+            } else {
449
+              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);
450
+
451
+              if (activeElement) {
452
+                $(activeElement).removeClass(ClassName$1.ACTIVE);
453
+              }
454
+            }
455
+          }
456
+
457
+          if (triggerChangeEvent) {
458
+            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
459
+              return;
460
+            }
461
+
462
+            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);
463
+            $(input).trigger('change');
464
+          }
465
+
466
+          input.focus();
467
+          addAriaPressed = false;
468
+        }
469
+      }
470
+
471
+      if (addAriaPressed) {
472
+        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));
473
+      }
474
+
475
+      if (triggerChangeEvent) {
476
+        $(this._element).toggleClass(ClassName$1.ACTIVE);
477
+      }
478
+    };
479
+
480
+    _proto.dispose = function dispose() {
481
+      $.removeData(this._element, DATA_KEY$1);
482
+      this._element = null;
483
+    } // Static
484
+    ;
485
+
486
+    Button._jQueryInterface = function _jQueryInterface(config) {
487
+      return this.each(function () {
488
+        var data = $(this).data(DATA_KEY$1);
489
+
490
+        if (!data) {
491
+          data = new Button(this);
492
+          $(this).data(DATA_KEY$1, data);
493
+        }
494
+
495
+        if (config === 'toggle') {
496
+          data[config]();
497
+        }
498
+      });
499
+    };
500
+
501
+    _createClass(Button, null, [{
502
+      key: "VERSION",
503
+      get: function get() {
504
+        return VERSION$1;
505
+      }
506
+    }]);
507
+
508
+    return Button;
509
+  }();
510
+  /**
511
+   * ------------------------------------------------------------------------
512
+   * Data Api implementation
513
+   * ------------------------------------------------------------------------
514
+   */
515
+
516
+
517
+  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
518
+    event.preventDefault();
519
+    var button = event.target;
520
+
521
+    if (!$(button).hasClass(ClassName$1.BUTTON)) {
522
+      button = $(button).closest(Selector$1.BUTTON);
523
+    }
524
+
525
+    Button._jQueryInterface.call($(button), 'toggle');
526
+  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
527
+    var button = $(event.target).closest(Selector$1.BUTTON)[0];
528
+    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));
529
+  });
530
+  /**
531
+   * ------------------------------------------------------------------------
532
+   * jQuery
533
+   * ------------------------------------------------------------------------
534
+   */
535
+
536
+  $.fn[NAME$1] = Button._jQueryInterface;
537
+  $.fn[NAME$1].Constructor = Button;
538
+
539
+  $.fn[NAME$1].noConflict = function () {
540
+    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;
541
+    return Button._jQueryInterface;
542
+  };
543
+
544
+  /**
545
+   * ------------------------------------------------------------------------
546
+   * Constants
547
+   * ------------------------------------------------------------------------
548
+   */
549
+
550
+  var NAME$2 = 'carousel';
551
+  var VERSION$2 = '4.3.1';
552
+  var DATA_KEY$2 = 'bs.carousel';
553
+  var EVENT_KEY$2 = "." + DATA_KEY$2;
554
+  var DATA_API_KEY$2 = '.data-api';
555
+  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];
556
+  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
557
+
558
+  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
559
+
560
+  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
561
+
562
+  var SWIPE_THRESHOLD = 40;
563
+  var Default = {
564
+    interval: 5000,
565
+    keyboard: true,
566
+    slide: false,
567
+    pause: 'hover',
568
+    wrap: true,
569
+    touch: true
570
+  };
571
+  var DefaultType = {
572
+    interval: '(number|boolean)',
573
+    keyboard: 'boolean',
574
+    slide: '(boolean|string)',
575
+    pause: '(string|boolean)',
576
+    wrap: 'boolean',
577
+    touch: 'boolean'
578
+  };
579
+  var Direction = {
580
+    NEXT: 'next',
581
+    PREV: 'prev',
582
+    LEFT: 'left',
583
+    RIGHT: 'right'
584
+  };
585
+  var Event$2 = {
586
+    SLIDE: "slide" + EVENT_KEY$2,
587
+    SLID: "slid" + EVENT_KEY$2,
588
+    KEYDOWN: "keydown" + EVENT_KEY$2,
589
+    MOUSEENTER: "mouseenter" + EVENT_KEY$2,
590
+    MOUSELEAVE: "mouseleave" + EVENT_KEY$2,
591
+    TOUCHSTART: "touchstart" + EVENT_KEY$2,
592
+    TOUCHMOVE: "touchmove" + EVENT_KEY$2,
593
+    TOUCHEND: "touchend" + EVENT_KEY$2,
594
+    POINTERDOWN: "pointerdown" + EVENT_KEY$2,
595
+    POINTERUP: "pointerup" + EVENT_KEY$2,
596
+    DRAG_START: "dragstart" + EVENT_KEY$2,
597
+    LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2,
598
+    CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2
599
+  };
600
+  var ClassName$2 = {
601
+    CAROUSEL: 'carousel',
602
+    ACTIVE: 'active',
603
+    SLIDE: 'slide',
604
+    RIGHT: 'carousel-item-right',
605
+    LEFT: 'carousel-item-left',
606
+    NEXT: 'carousel-item-next',
607
+    PREV: 'carousel-item-prev',
608
+    ITEM: 'carousel-item',
609
+    POINTER_EVENT: 'pointer-event'
610
+  };
611
+  var Selector$2 = {
612
+    ACTIVE: '.active',
613
+    ACTIVE_ITEM: '.active.carousel-item',
614
+    ITEM: '.carousel-item',
615
+    ITEM_IMG: '.carousel-item img',
616
+    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
617
+    INDICATORS: '.carousel-indicators',
618
+    DATA_SLIDE: '[data-slide], [data-slide-to]',
619
+    DATA_RIDE: '[data-ride="carousel"]'
620
+  };
621
+  var PointerType = {
622
+    TOUCH: 'touch',
623
+    PEN: 'pen'
624
+    /**
625
+     * ------------------------------------------------------------------------
626
+     * Class Definition
627
+     * ------------------------------------------------------------------------
628
+     */
629
+
630
+  };
631
+
632
+  var Carousel =
633
+  /*#__PURE__*/
634
+  function () {
635
+    function Carousel(element, config) {
636
+      this._items = null;
637
+      this._interval = null;
638
+      this._activeElement = null;
639
+      this._isPaused = false;
640
+      this._isSliding = false;
641
+      this.touchTimeout = null;
642
+      this.touchStartX = 0;
643
+      this.touchDeltaX = 0;
644
+      this._config = this._getConfig(config);
645
+      this._element = element;
646
+      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);
647
+      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
648
+      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
649
+
650
+      this._addEventListeners();
651
+    } // Getters
652
+
653
+
654
+    var _proto = Carousel.prototype;
655
+
656
+    // Public
657
+    _proto.next = function next() {
658
+      if (!this._isSliding) {
659
+        this._slide(Direction.NEXT);
660
+      }
661
+    };
662
+
663
+    _proto.nextWhenVisible = function nextWhenVisible() {
664
+      // Don't call next when the page isn't visible
665
+      // or the carousel or its parent isn't visible
666
+      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {
667
+        this.next();
668
+      }
669
+    };
670
+
671
+    _proto.prev = function prev() {
672
+      if (!this._isSliding) {
673
+        this._slide(Direction.PREV);
674
+      }
675
+    };
676
+
677
+    _proto.pause = function pause(event) {
678
+      if (!event) {
679
+        this._isPaused = true;
680
+      }
681
+
682
+      if (this._element.querySelector(Selector$2.NEXT_PREV)) {
683
+        Util.triggerTransitionEnd(this._element);
684
+        this.cycle(true);
685
+      }
686
+
687
+      clearInterval(this._interval);
688
+      this._interval = null;
689
+    };
690
+
691
+    _proto.cycle = function cycle(event) {
692
+      if (!event) {
693
+        this._isPaused = false;
694
+      }
695
+
696
+      if (this._interval) {
697
+        clearInterval(this._interval);
698
+        this._interval = null;
699
+      }
700
+
701
+      if (this._config.interval && !this._isPaused) {
702
+        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
703
+      }
704
+    };
705
+
706
+    _proto.to = function to(index) {
707
+      var _this = this;
708
+
709
+      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
710
+
711
+      var activeIndex = this._getItemIndex(this._activeElement);
712
+
713
+      if (index > this._items.length - 1 || index < 0) {
714
+        return;
715
+      }
716
+
717
+      if (this._isSliding) {
718
+        $(this._element).one(Event$2.SLID, function () {
719
+          return _this.to(index);
720
+        });
721
+        return;
722
+      }
723
+
724
+      if (activeIndex === index) {
725
+        this.pause();
726
+        this.cycle();
727
+        return;
728
+      }
729
+
730
+      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
731
+
732
+      this._slide(direction, this._items[index]);
733
+    };
734
+
735
+    _proto.dispose = function dispose() {
736
+      $(this._element).off(EVENT_KEY$2);
737
+      $.removeData(this._element, DATA_KEY$2);
738
+      this._items = null;
739
+      this._config = null;
740
+      this._element = null;
741
+      this._interval = null;
742
+      this._isPaused = null;
743
+      this._isSliding = null;
744
+      this._activeElement = null;
745
+      this._indicatorsElement = null;
746
+    } // Private
747
+    ;
748
+
749
+    _proto._getConfig = function _getConfig(config) {
750
+      config = _objectSpread({}, Default, config);
751
+      Util.typeCheckConfig(NAME$2, config, DefaultType);
752
+      return config;
753
+    };
754
+
755
+    _proto._handleSwipe = function _handleSwipe() {
756
+      var absDeltax = Math.abs(this.touchDeltaX);
757
+
758
+      if (absDeltax <= SWIPE_THRESHOLD) {
759
+        return;
760
+      }
761
+
762
+      var direction = absDeltax / this.touchDeltaX; // swipe left
763
+
764
+      if (direction > 0) {
765
+        this.prev();
766
+      } // swipe right
767
+
768
+
769
+      if (direction < 0) {
770
+        this.next();
771
+      }
772
+    };
773
+
774
+    _proto._addEventListeners = function _addEventListeners() {
775
+      var _this2 = this;
776
+
777
+      if (this._config.keyboard) {
778
+        $(this._element).on(Event$2.KEYDOWN, function (event) {
779
+          return _this2._keydown(event);
780
+        });
781
+      }
782
+
783
+      if (this._config.pause === 'hover') {
784
+        $(this._element).on(Event$2.MOUSEENTER, function (event) {
785
+          return _this2.pause(event);
786
+        }).on(Event$2.MOUSELEAVE, function (event) {
787
+          return _this2.cycle(event);
788
+        });
789
+      }
790
+
791
+      if (this._config.touch) {
792
+        this._addTouchEventListeners();
793
+      }
794
+    };
795
+
796
+    _proto._addTouchEventListeners = function _addTouchEventListeners() {
797
+      var _this3 = this;
798
+
799
+      if (!this._touchSupported) {
800
+        return;
801
+      }
802
+
803
+      var start = function start(event) {
804
+        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
805
+          _this3.touchStartX = event.originalEvent.clientX;
806
+        } else if (!_this3._pointerEvent) {
807
+          _this3.touchStartX = event.originalEvent.touches[0].clientX;
808
+        }
809
+      };
810
+
811
+      var move = function move(event) {
812
+        // ensure swiping with one touch and not pinching
813
+        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
814
+          _this3.touchDeltaX = 0;
815
+        } else {
816
+          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;
817
+        }
818
+      };
819
+
820
+      var end = function end(event) {
821
+        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
822
+          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
823
+        }
824
+
825
+        _this3._handleSwipe();
826
+
827
+        if (_this3._config.pause === 'hover') {
828
+          // If it's a touch-enabled device, mouseenter/leave are fired as
829
+          // part of the mouse compatibility events on first tap - the carousel
830
+          // would stop cycling until user tapped out of it;
831
+          // here, we listen for touchend, explicitly pause the carousel
832
+          // (as if it's the second time we tap on it, mouseenter compat event
833
+          // is NOT fired) and after a timeout (to allow for mouse compatibility
834
+          // events to fire) we explicitly restart cycling
835
+          _this3.pause();
836
+
837
+          if (_this3.touchTimeout) {
838
+            clearTimeout(_this3.touchTimeout);
839
+          }
840
+
841
+          _this3.touchTimeout = setTimeout(function (event) {
842
+            return _this3.cycle(event);
843
+          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
844
+        }
845
+      };
846
+
847
+      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {
848
+        return e.preventDefault();
849
+      });
850
+
851
+      if (this._pointerEvent) {
852
+        $(this._element).on(Event$2.POINTERDOWN, function (event) {
853
+          return start(event);
854
+        });
855
+        $(this._element).on(Event$2.POINTERUP, function (event) {
856
+          return end(event);
857
+        });
858
+
859
+        this._element.classList.add(ClassName$2.POINTER_EVENT);
860
+      } else {
861
+        $(this._element).on(Event$2.TOUCHSTART, function (event) {
862
+          return start(event);
863
+        });
864
+        $(this._element).on(Event$2.TOUCHMOVE, function (event) {
865
+          return move(event);
866
+        });
867
+        $(this._element).on(Event$2.TOUCHEND, function (event) {
868
+          return end(event);
869
+        });
870
+      }
871
+    };
872
+
873
+    _proto._keydown = function _keydown(event) {
874
+      if (/input|textarea/i.test(event.target.tagName)) {
875
+        return;
876
+      }
877
+
878
+      switch (event.which) {
879
+        case ARROW_LEFT_KEYCODE:
880
+          event.preventDefault();
881
+          this.prev();
882
+          break;
883
+
884
+        case ARROW_RIGHT_KEYCODE:
885
+          event.preventDefault();
886
+          this.next();
887
+          break;
888
+
889
+        default:
890
+      }
891
+    };
892
+
893
+    _proto._getItemIndex = function _getItemIndex(element) {
894
+      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];
895
+      return this._items.indexOf(element);
896
+    };
897
+
898
+    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
899
+      var isNextDirection = direction === Direction.NEXT;
900
+      var isPrevDirection = direction === Direction.PREV;
901
+
902
+      var activeIndex = this._getItemIndex(activeElement);
903
+
904
+      var lastItemIndex = this._items.length - 1;
905
+      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
906
+
907
+      if (isGoingToWrap && !this._config.wrap) {
908
+        return activeElement;
909
+      }
910
+
911
+      var delta = direction === Direction.PREV ? -1 : 1;
912
+      var itemIndex = (activeIndex + delta) % this._items.length;
913
+      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
914
+    };
915
+
916
+    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
917
+      var targetIndex = this._getItemIndex(relatedTarget);
918
+
919
+      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));
920
+
921
+      var slideEvent = $.Event(Event$2.SLIDE, {
922
+        relatedTarget: relatedTarget,
923
+        direction: eventDirectionName,
924
+        from: fromIndex,
925
+        to: targetIndex
926
+      });
927
+      $(this._element).trigger(slideEvent);
928
+      return slideEvent;
929
+    };
930
+
931
+    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
932
+      if (this._indicatorsElement) {
933
+        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));
934
+        $(indicators).removeClass(ClassName$2.ACTIVE);
935
+
936
+        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
937
+
938
+        if (nextIndicator) {
939
+          $(nextIndicator).addClass(ClassName$2.ACTIVE);
940
+        }
941
+      }
942
+    };
943
+
944
+    _proto._slide = function _slide(direction, element) {
945
+      var _this4 = this;
946
+
947
+      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
948
+
949
+      var activeElementIndex = this._getItemIndex(activeElement);
950
+
951
+      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
952
+
953
+      var nextElementIndex = this._getItemIndex(nextElement);
954
+
955
+      var isCycling = Boolean(this._interval);
956
+      var directionalClassName;
957
+      var orderClassName;
958
+      var eventDirectionName;
959
+
960
+      if (direction === Direction.NEXT) {
961
+        directionalClassName = ClassName$2.LEFT;
962
+        orderClassName = ClassName$2.NEXT;
963
+        eventDirectionName = Direction.LEFT;
964
+      } else {
965
+        directionalClassName = ClassName$2.RIGHT;
966
+        orderClassName = ClassName$2.PREV;
967
+        eventDirectionName = Direction.RIGHT;
968
+      }
969
+
970
+      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {
971
+        this._isSliding = false;
972
+        return;
973
+      }
974
+
975
+      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
976
+
977
+      if (slideEvent.isDefaultPrevented()) {
978
+        return;
979
+      }
980
+
981
+      if (!activeElement || !nextElement) {
982
+        // Some weirdness is happening, so we bail
983
+        return;
984
+      }
985
+
986
+      this._isSliding = true;
987
+
988
+      if (isCycling) {
989
+        this.pause();
990
+      }
991
+
992
+      this._setActiveIndicatorElement(nextElement);
993
+
994
+      var slidEvent = $.Event(Event$2.SLID, {
995
+        relatedTarget: nextElement,
996
+        direction: eventDirectionName,
997
+        from: activeElementIndex,
998
+        to: nextElementIndex
999
+      });
1000
+
1001
+      if ($(this._element).hasClass(ClassName$2.SLIDE)) {
1002
+        $(nextElement).addClass(orderClassName);
1003
+        Util.reflow(nextElement);
1004
+        $(activeElement).addClass(directionalClassName);
1005
+        $(nextElement).addClass(directionalClassName);
1006
+        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);
1007
+
1008
+        if (nextElementInterval) {
1009
+          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
1010
+          this._config.interval = nextElementInterval;
1011
+        } else {
1012
+          this._config.interval = this._config.defaultInterval || this._config.interval;
1013
+        }
1014
+
1015
+        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
1016
+        $(activeElement).one(Util.TRANSITION_END, function () {
1017
+          $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE);
1018
+          $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName);
1019
+          _this4._isSliding = false;
1020
+          setTimeout(function () {
1021
+            return $(_this4._element).trigger(slidEvent);
1022
+          }, 0);
1023
+        }).emulateTransitionEnd(transitionDuration);
1024
+      } else {
1025
+        $(activeElement).removeClass(ClassName$2.ACTIVE);
1026
+        $(nextElement).addClass(ClassName$2.ACTIVE);
1027
+        this._isSliding = false;
1028
+        $(this._element).trigger(slidEvent);
1029
+      }
1030
+
1031
+      if (isCycling) {
1032
+        this.cycle();
1033
+      }
1034
+    } // Static
1035
+    ;
1036
+
1037
+    Carousel._jQueryInterface = function _jQueryInterface(config) {
1038
+      return this.each(function () {
1039
+        var data = $(this).data(DATA_KEY$2);
1040
+
1041
+        var _config = _objectSpread({}, Default, $(this).data());
1042
+
1043
+        if (typeof config === 'object') {
1044
+          _config = _objectSpread({}, _config, config);
1045
+        }
1046
+
1047
+        var action = typeof config === 'string' ? config : _config.slide;
1048
+
1049
+        if (!data) {
1050
+          data = new Carousel(this, _config);
1051
+          $(this).data(DATA_KEY$2, data);
1052
+        }
1053
+
1054
+        if (typeof config === 'number') {
1055
+          data.to(config);
1056
+        } else if (typeof action === 'string') {
1057
+          if (typeof data[action] === 'undefined') {
1058
+            throw new TypeError("No method named \"" + action + "\"");
1059
+          }
1060
+
1061
+          data[action]();
1062
+        } else if (_config.interval && _config.ride) {
1063
+          data.pause();
1064
+          data.cycle();
1065
+        }
1066
+      });
1067
+    };
1068
+
1069
+    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
1070
+      var selector = Util.getSelectorFromElement(this);
1071
+
1072
+      if (!selector) {
1073
+        return;
1074
+      }
1075
+
1076
+      var target = $(selector)[0];
1077
+
1078
+      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {
1079
+        return;
1080
+      }
1081
+
1082
+      var config = _objectSpread({}, $(target).data(), $(this).data());
1083
+
1084
+      var slideIndex = this.getAttribute('data-slide-to');
1085
+
1086
+      if (slideIndex) {
1087
+        config.interval = false;
1088
+      }
1089
+
1090
+      Carousel._jQueryInterface.call($(target), config);
1091
+
1092
+      if (slideIndex) {
1093
+        $(target).data(DATA_KEY$2).to(slideIndex);
1094
+      }
1095
+
1096
+      event.preventDefault();
1097
+    };
1098
+
1099
+    _createClass(Carousel, null, [{
1100
+      key: "VERSION",
1101
+      get: function get() {
1102
+        return VERSION$2;
1103
+      }
1104
+    }, {
1105
+      key: "Default",
1106
+      get: function get() {
1107
+        return Default;
1108
+      }
1109
+    }]);
1110
+
1111
+    return Carousel;
1112
+  }();
1113
+  /**
1114
+   * ------------------------------------------------------------------------
1115
+   * Data Api implementation
1116
+   * ------------------------------------------------------------------------
1117
+   */
1118
+
1119
+
1120
+  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);
1121
+  $(window).on(Event$2.LOAD_DATA_API, function () {
1122
+    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));
1123
+
1124
+    for (var i = 0, len = carousels.length; i < len; i++) {
1125
+      var $carousel = $(carousels[i]);
1126
+
1127
+      Carousel._jQueryInterface.call($carousel, $carousel.data());
1128
+    }
1129
+  });
1130
+  /**
1131
+   * ------------------------------------------------------------------------
1132
+   * jQuery
1133
+   * ------------------------------------------------------------------------
1134
+   */
1135
+
1136
+  $.fn[NAME$2] = Carousel._jQueryInterface;
1137
+  $.fn[NAME$2].Constructor = Carousel;
1138
+
1139
+  $.fn[NAME$2].noConflict = function () {
1140
+    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;
1141
+    return Carousel._jQueryInterface;
1142
+  };
1143
+
1144
+  /**
1145
+   * ------------------------------------------------------------------------
1146
+   * Constants
1147
+   * ------------------------------------------------------------------------
1148
+   */
1149
+
1150
+  var NAME$3 = 'collapse';
1151
+  var VERSION$3 = '4.3.1';
1152
+  var DATA_KEY$3 = 'bs.collapse';
1153
+  var EVENT_KEY$3 = "." + DATA_KEY$3;
1154
+  var DATA_API_KEY$3 = '.data-api';
1155
+  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];
1156
+  var Default$1 = {
1157
+    toggle: true,
1158
+    parent: ''
1159
+  };
1160
+  var DefaultType$1 = {
1161
+    toggle: 'boolean',
1162
+    parent: '(string|element)'
1163
+  };
1164
+  var Event$3 = {
1165
+    SHOW: "show" + EVENT_KEY$3,
1166
+    SHOWN: "shown" + EVENT_KEY$3,
1167
+    HIDE: "hide" + EVENT_KEY$3,
1168
+    HIDDEN: "hidden" + EVENT_KEY$3,
1169
+    CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3
1170
+  };
1171
+  var ClassName$3 = {
1172
+    SHOW: 'show',
1173
+    COLLAPSE: 'collapse',
1174
+    COLLAPSING: 'collapsing',
1175
+    COLLAPSED: 'collapsed'
1176
+  };
1177
+  var Dimension = {
1178
+    WIDTH: 'width',
1179
+    HEIGHT: 'height'
1180
+  };
1181
+  var Selector$3 = {
1182
+    ACTIVES: '.show, .collapsing',
1183
+    DATA_TOGGLE: '[data-toggle="collapse"]'
1184
+    /**
1185
+     * ------------------------------------------------------------------------
1186
+     * Class Definition
1187
+     * ------------------------------------------------------------------------
1188
+     */
1189
+
1190
+  };
1191
+
1192
+  var Collapse =
1193
+  /*#__PURE__*/
1194
+  function () {
1195
+    function Collapse(element, config) {
1196
+      this._isTransitioning = false;
1197
+      this._element = element;
1198
+      this._config = this._getConfig(config);
1199
+      this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
1200
+      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));
1201
+
1202
+      for (var i = 0, len = toggleList.length; i < len; i++) {
1203
+        var elem = toggleList[i];
1204
+        var selector = Util.getSelectorFromElement(elem);
1205
+        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
1206
+          return foundElem === element;
1207
+        });
1208
+
1209
+        if (selector !== null && filterElement.length > 0) {
1210
+          this._selector = selector;
1211
+
1212
+          this._triggerArray.push(elem);
1213
+        }
1214
+      }
1215
+
1216
+      this._parent = this._config.parent ? this._getParent() : null;
1217
+
1218
+      if (!this._config.parent) {
1219
+        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
1220
+      }
1221
+
1222
+      if (this._config.toggle) {
1223
+        this.toggle();
1224
+      }
1225
+    } // Getters
1226
+
1227
+
1228
+    var _proto = Collapse.prototype;
1229
+
1230
+    // Public
1231
+    _proto.toggle = function toggle() {
1232
+      if ($(this._element).hasClass(ClassName$3.SHOW)) {
1233
+        this.hide();
1234
+      } else {
1235
+        this.show();
1236
+      }
1237
+    };
1238
+
1239
+    _proto.show = function show() {
1240
+      var _this = this;
1241
+
1242
+      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {
1243
+        return;
1244
+      }
1245
+
1246
+      var actives;
1247
+      var activesData;
1248
+
1249
+      if (this._parent) {
1250
+        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {
1251
+          if (typeof _this._config.parent === 'string') {
1252
+            return elem.getAttribute('data-parent') === _this._config.parent;
1253
+          }
1254
+
1255
+          return elem.classList.contains(ClassName$3.COLLAPSE);
1256
+        });
1257
+
1258
+        if (actives.length === 0) {
1259
+          actives = null;
1260
+        }
1261
+      }
1262
+
1263
+      if (actives) {
1264
+        activesData = $(actives).not(this._selector).data(DATA_KEY$3);
1265
+
1266
+        if (activesData && activesData._isTransitioning) {
1267
+          return;
1268
+        }
1269
+      }
1270
+
1271
+      var startEvent = $.Event(Event$3.SHOW);
1272
+      $(this._element).trigger(startEvent);
1273
+
1274
+      if (startEvent.isDefaultPrevented()) {
1275
+        return;
1276
+      }
1277
+
1278
+      if (actives) {
1279
+        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');
1280
+
1281
+        if (!activesData) {
1282
+          $(actives).data(DATA_KEY$3, null);
1283
+        }
1284
+      }
1285
+
1286
+      var dimension = this._getDimension();
1287
+
1288
+      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);
1289
+      this._element.style[dimension] = 0;
1290
+
1291
+      if (this._triggerArray.length) {
1292
+        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);
1293
+      }
1294
+
1295
+      this.setTransitioning(true);
1296
+
1297
+      var complete = function complete() {
1298
+        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);
1299
+        _this._element.style[dimension] = '';
1300
+
1301
+        _this.setTransitioning(false);
1302
+
1303
+        $(_this._element).trigger(Event$3.SHOWN);
1304
+      };
1305
+
1306
+      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1307
+      var scrollSize = "scroll" + capitalizedDimension;
1308
+      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
1309
+      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
1310
+      this._element.style[dimension] = this._element[scrollSize] + "px";
1311
+    };
1312
+
1313
+    _proto.hide = function hide() {
1314
+      var _this2 = this;
1315
+
1316
+      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {
1317
+        return;
1318
+      }
1319
+
1320
+      var startEvent = $.Event(Event$3.HIDE);
1321
+      $(this._element).trigger(startEvent);
1322
+
1323
+      if (startEvent.isDefaultPrevented()) {
1324
+        return;
1325
+      }
1326
+
1327
+      var dimension = this._getDimension();
1328
+
1329
+      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
1330
+      Util.reflow(this._element);
1331
+      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);
1332
+      var triggerArrayLength = this._triggerArray.length;
1333
+
1334
+      if (triggerArrayLength > 0) {
1335
+        for (var i = 0; i < triggerArrayLength; i++) {
1336
+          var trigger = this._triggerArray[i];
1337
+          var selector = Util.getSelectorFromElement(trigger);
1338
+
1339
+          if (selector !== null) {
1340
+            var $elem = $([].slice.call(document.querySelectorAll(selector)));
1341
+
1342
+            if (!$elem.hasClass(ClassName$3.SHOW)) {
1343
+              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);
1344
+            }
1345
+          }
1346
+        }
1347
+      }
1348
+
1349
+      this.setTransitioning(true);
1350
+
1351
+      var complete = function complete() {
1352
+        _this2.setTransitioning(false);
1353
+
1354
+        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);
1355
+      };
1356
+
1357
+      this._element.style[dimension] = '';
1358
+      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
1359
+      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
1360
+    };
1361
+
1362
+    _proto.setTransitioning = function setTransitioning(isTransitioning) {
1363
+      this._isTransitioning = isTransitioning;
1364
+    };
1365
+
1366
+    _proto.dispose = function dispose() {
1367
+      $.removeData(this._element, DATA_KEY$3);
1368
+      this._config = null;
1369
+      this._parent = null;
1370
+      this._element = null;
1371
+      this._triggerArray = null;
1372
+      this._isTransitioning = null;
1373
+    } // Private
1374
+    ;
1375
+
1376
+    _proto._getConfig = function _getConfig(config) {
1377
+      config = _objectSpread({}, Default$1, config);
1378
+      config.toggle = Boolean(config.toggle); // Coerce string values
1379
+
1380
+      Util.typeCheckConfig(NAME$3, config, DefaultType$1);
1381
+      return config;
1382
+    };
1383
+
1384
+    _proto._getDimension = function _getDimension() {
1385
+      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
1386
+      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
1387
+    };
1388
+
1389
+    _proto._getParent = function _getParent() {
1390
+      var _this3 = this;
1391
+
1392
+      var parent;
1393
+
1394
+      if (Util.isElement(this._config.parent)) {
1395
+        parent = this._config.parent; // It's a jQuery object
1396
+
1397
+        if (typeof this._config.parent.jquery !== 'undefined') {
1398
+          parent = this._config.parent[0];
1399
+        }
1400
+      } else {
1401
+        parent = document.querySelector(this._config.parent);
1402
+      }
1403
+
1404
+      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
1405
+      var children = [].slice.call(parent.querySelectorAll(selector));
1406
+      $(children).each(function (i, element) {
1407
+        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
1408
+      });
1409
+      return parent;
1410
+    };
1411
+
1412
+    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1413
+      var isOpen = $(element).hasClass(ClassName$3.SHOW);
1414
+
1415
+      if (triggerArray.length) {
1416
+        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1417
+      }
1418
+    } // Static
1419
+    ;
1420
+
1421
+    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
1422
+      var selector = Util.getSelectorFromElement(element);
1423
+      return selector ? document.querySelector(selector) : null;
1424
+    };
1425
+
1426
+    Collapse._jQueryInterface = function _jQueryInterface(config) {
1427
+      return this.each(function () {
1428
+        var $this = $(this);
1429
+        var data = $this.data(DATA_KEY$3);
1430
+
1431
+        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});
1432
+
1433
+        if (!data && _config.toggle && /show|hide/.test(config)) {
1434
+          _config.toggle = false;
1435
+        }
1436
+
1437
+        if (!data) {
1438
+          data = new Collapse(this, _config);
1439
+          $this.data(DATA_KEY$3, data);
1440
+        }
1441
+
1442
+        if (typeof config === 'string') {
1443
+          if (typeof data[config] === 'undefined') {
1444
+            throw new TypeError("No method named \"" + config + "\"");
1445
+          }
1446
+
1447
+          data[config]();
1448
+        }
1449
+      });
1450
+    };
1451
+
1452
+    _createClass(Collapse, null, [{
1453
+      key: "VERSION",
1454
+      get: function get() {
1455
+        return VERSION$3;
1456
+      }
1457
+    }, {
1458
+      key: "Default",
1459
+      get: function get() {
1460
+        return Default$1;
1461
+      }
1462
+    }]);
1463
+
1464
+    return Collapse;
1465
+  }();
1466
+  /**
1467
+   * ------------------------------------------------------------------------
1468
+   * Data Api implementation
1469
+   * ------------------------------------------------------------------------
1470
+   */
1471
+
1472
+
1473
+  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {
1474
+    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1475
+    if (event.currentTarget.tagName === 'A') {
1476
+      event.preventDefault();
1477
+    }
1478
+
1479
+    var $trigger = $(this);
1480
+    var selector = Util.getSelectorFromElement(this);
1481
+    var selectors = [].slice.call(document.querySelectorAll(selector));
1482
+    $(selectors).each(function () {
1483
+      var $target = $(this);
1484
+      var data = $target.data(DATA_KEY$3);
1485
+      var config = data ? 'toggle' : $trigger.data();
1486
+
1487
+      Collapse._jQueryInterface.call($target, config);
1488
+    });
1489
+  });
1490
+  /**
1491
+   * ------------------------------------------------------------------------
1492
+   * jQuery
1493
+   * ------------------------------------------------------------------------
1494
+   */
1495
+
1496
+  $.fn[NAME$3] = Collapse._jQueryInterface;
1497
+  $.fn[NAME$3].Constructor = Collapse;
1498
+
1499
+  $.fn[NAME$3].noConflict = function () {
1500
+    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;
1501
+    return Collapse._jQueryInterface;
1502
+  };
1503
+
1504
+  /**!
1505
+   * @fileOverview Kickass library to create and place poppers near their reference elements.
1506
+   * @version 1.14.7
1507
+   * @license
1508
+   * Copyright (c) 2016 Federico Zivolo and contributors
1509
+   *
1510
+   * Permission is hereby granted, free of charge, to any person obtaining a copy
1511
+   * of this software and associated documentation files (the "Software"), to deal
1512
+   * in the Software without restriction, including without limitation the rights
1513
+   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1514
+   * copies of the Software, and to permit persons to whom the Software is
1515
+   * furnished to do so, subject to the following conditions:
1516
+   *
1517
+   * The above copyright notice and this permission notice shall be included in all
1518
+   * copies or substantial portions of the Software.
1519
+   *
1520
+   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1521
+   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1522
+   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1523
+   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1524
+   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1525
+   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1526
+   * SOFTWARE.
1527
+   */
1528
+  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
1529
+
1530
+  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
1531
+  var timeoutDuration = 0;
1532
+  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
1533
+    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
1534
+      timeoutDuration = 1;
1535
+      break;
1536
+    }
1537
+  }
1538
+
1539
+  function microtaskDebounce(fn) {
1540
+    var called = false;
1541
+    return function () {
1542
+      if (called) {
1543
+        return;
1544
+      }
1545
+      called = true;
1546
+      window.Promise.resolve().then(function () {
1547
+        called = false;
1548
+        fn();
1549
+      });
1550
+    };
1551
+  }
1552
+
1553
+  function taskDebounce(fn) {
1554
+    var scheduled = false;
1555
+    return function () {
1556
+      if (!scheduled) {
1557
+        scheduled = true;
1558
+        setTimeout(function () {
1559
+          scheduled = false;
1560
+          fn();
1561
+        }, timeoutDuration);
1562
+      }
1563
+    };
1564
+  }
1565
+
1566
+  var supportsMicroTasks = isBrowser && window.Promise;
1567
+
1568
+  /**
1569
+  * Create a debounced version of a method, that's asynchronously deferred
1570
+  * but called in the minimum time possible.
1571
+  *
1572
+  * @method
1573
+  * @memberof Popper.Utils
1574
+  * @argument {Function} fn
1575
+  * @returns {Function}
1576
+  */
1577
+  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
1578
+
1579
+  /**
1580
+   * Check if the given variable is a function
1581
+   * @method
1582
+   * @memberof Popper.Utils
1583
+   * @argument {Any} functionToCheck - variable to check
1584
+   * @returns {Boolean} answer to: is a function?
1585
+   */
1586
+  function isFunction(functionToCheck) {
1587
+    var getType = {};
1588
+    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
1589
+  }
1590
+
1591
+  /**
1592
+   * Get CSS computed property of the given element
1593
+   * @method
1594
+   * @memberof Popper.Utils
1595
+   * @argument {Eement} element
1596
+   * @argument {String} property
1597
+   */
1598
+  function getStyleComputedProperty(element, property) {
1599
+    if (element.nodeType !== 1) {
1600
+      return [];
1601
+    }
1602
+    // NOTE: 1 DOM access here
1603
+    var window = element.ownerDocument.defaultView;
1604
+    var css = window.getComputedStyle(element, null);
1605
+    return property ? css[property] : css;
1606
+  }
1607
+
1608
+  /**
1609
+   * Returns the parentNode or the host of the element
1610
+   * @method
1611
+   * @memberof Popper.Utils
1612
+   * @argument {Element} element
1613
+   * @returns {Element} parent
1614
+   */
1615
+  function getParentNode(element) {
1616
+    if (element.nodeName === 'HTML') {
1617
+      return element;
1618
+    }
1619
+    return element.parentNode || element.host;
1620
+  }
1621
+
1622
+  /**
1623
+   * Returns the scrolling parent of the given element
1624
+   * @method
1625
+   * @memberof Popper.Utils
1626
+   * @argument {Element} element
1627
+   * @returns {Element} scroll parent
1628
+   */
1629
+  function getScrollParent(element) {
1630
+    // Return body, `getScroll` will take care to get the correct `scrollTop` from it
1631
+    if (!element) {
1632
+      return document.body;
1633
+    }
1634
+
1635
+    switch (element.nodeName) {
1636
+      case 'HTML':
1637
+      case 'BODY':
1638
+        return element.ownerDocument.body;
1639
+      case '#document':
1640
+        return element.body;
1641
+    }
1642
+
1643
+    // Firefox want us to check `-x` and `-y` variations as well
1644
+
1645
+    var _getStyleComputedProp = getStyleComputedProperty(element),
1646
+        overflow = _getStyleComputedProp.overflow,
1647
+        overflowX = _getStyleComputedProp.overflowX,
1648
+        overflowY = _getStyleComputedProp.overflowY;
1649
+
1650
+    if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
1651
+      return element;
1652
+    }
1653
+
1654
+    return getScrollParent(getParentNode(element));
1655
+  }
1656
+
1657
+  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
1658
+  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
1659
+
1660
+  /**
1661
+   * Determines if the browser is Internet Explorer
1662
+   * @method
1663
+   * @memberof Popper.Utils
1664
+   * @param {Number} version to check
1665
+   * @returns {Boolean} isIE
1666
+   */
1667
+  function isIE(version) {
1668
+    if (version === 11) {
1669
+      return isIE11;
1670
+    }
1671
+    if (version === 10) {
1672
+      return isIE10;
1673
+    }
1674
+    return isIE11 || isIE10;
1675
+  }
1676
+
1677
+  /**
1678
+   * Returns the offset parent of the given element
1679
+   * @method
1680
+   * @memberof Popper.Utils
1681
+   * @argument {Element} element
1682
+   * @returns {Element} offset parent
1683
+   */
1684
+  function getOffsetParent(element) {
1685
+    if (!element) {
1686
+      return document.documentElement;
1687
+    }
1688
+
1689
+    var noOffsetParent = isIE(10) ? document.body : null;
1690
+
1691
+    // NOTE: 1 DOM access here
1692
+    var offsetParent = element.offsetParent || null;
1693
+    // Skip hidden elements which don't have an offsetParent
1694
+    while (offsetParent === noOffsetParent && element.nextElementSibling) {
1695
+      offsetParent = (element = element.nextElementSibling).offsetParent;
1696
+    }
1697
+
1698
+    var nodeName = offsetParent && offsetParent.nodeName;
1699
+
1700
+    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
1701
+      return element ? element.ownerDocument.documentElement : document.documentElement;
1702
+    }
1703
+
1704
+    // .offsetParent will return the closest TH, TD or TABLE in case
1705
+    // no offsetParent is present, I hate this job...
1706
+    if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
1707
+      return getOffsetParent(offsetParent);
1708
+    }
1709
+
1710
+    return offsetParent;
1711
+  }
1712
+
1713
+  function isOffsetContainer(element) {
1714
+    var nodeName = element.nodeName;
1715
+
1716
+    if (nodeName === 'BODY') {
1717
+      return false;
1718
+    }
1719
+    return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
1720
+  }
1721
+
1722
+  /**
1723
+   * Finds the root node (document, shadowDOM root) of the given element
1724
+   * @method
1725
+   * @memberof Popper.Utils
1726
+   * @argument {Element} node
1727
+   * @returns {Element} root node
1728
+   */
1729
+  function getRoot(node) {
1730
+    if (node.parentNode !== null) {
1731
+      return getRoot(node.parentNode);
1732
+    }
1733
+
1734
+    return node;
1735
+  }
1736
+
1737
+  /**
1738
+   * Finds the offset parent common to the two provided nodes
1739
+   * @method
1740
+   * @memberof Popper.Utils
1741
+   * @argument {Element} element1
1742
+   * @argument {Element} element2
1743
+   * @returns {Element} common offset parent
1744
+   */
1745
+  function findCommonOffsetParent(element1, element2) {
1746
+    // This check is needed to avoid errors in case one of the elements isn't defined for any reason
1747
+    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
1748
+      return document.documentElement;
1749
+    }
1750
+
1751
+    // Here we make sure to give as "start" the element that comes first in the DOM
1752
+    var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
1753
+    var start = order ? element1 : element2;
1754
+    var end = order ? element2 : element1;
1755
+
1756
+    // Get common ancestor container
1757
+    var range = document.createRange();
1758
+    range.setStart(start, 0);
1759
+    range.setEnd(end, 0);
1760
+    var commonAncestorContainer = range.commonAncestorContainer;
1761
+
1762
+    // Both nodes are inside #document
1763
+
1764
+    if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
1765
+      if (isOffsetContainer(commonAncestorContainer)) {
1766
+        return commonAncestorContainer;
1767
+      }
1768
+
1769
+      return getOffsetParent(commonAncestorContainer);
1770
+    }
1771
+
1772
+    // one of the nodes is inside shadowDOM, find which one
1773
+    var element1root = getRoot(element1);
1774
+    if (element1root.host) {
1775
+      return findCommonOffsetParent(element1root.host, element2);
1776
+    } else {
1777
+      return findCommonOffsetParent(element1, getRoot(element2).host);
1778
+    }
1779
+  }
1780
+
1781
+  /**
1782
+   * Gets the scroll value of the given element in the given side (top and left)
1783
+   * @method
1784
+   * @memberof Popper.Utils
1785
+   * @argument {Element} element
1786
+   * @argument {String} side `top` or `left`
1787
+   * @returns {number} amount of scrolled pixels
1788
+   */
1789
+  function getScroll(element) {
1790
+    var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
1791
+
1792
+    var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
1793
+    var nodeName = element.nodeName;
1794
+
1795
+    if (nodeName === 'BODY' || nodeName === 'HTML') {
1796
+      var html = element.ownerDocument.documentElement;
1797
+      var scrollingElement = element.ownerDocument.scrollingElement || html;
1798
+      return scrollingElement[upperSide];
1799
+    }
1800
+
1801
+    return element[upperSide];
1802
+  }
1803
+
1804
+  /*
1805
+   * Sum or subtract the element scroll values (left and top) from a given rect object
1806
+   * @method
1807
+   * @memberof Popper.Utils
1808
+   * @param {Object} rect - Rect object you want to change
1809
+   * @param {HTMLElement} element - The element from the function reads the scroll values
1810
+   * @param {Boolean} subtract - set to true if you want to subtract the scroll values
1811
+   * @return {Object} rect - The modifier rect object
1812
+   */
1813
+  function includeScroll(rect, element) {
1814
+    var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1815
+
1816
+    var scrollTop = getScroll(element, 'top');
1817
+    var scrollLeft = getScroll(element, 'left');
1818
+    var modifier = subtract ? -1 : 1;
1819
+    rect.top += scrollTop * modifier;
1820
+    rect.bottom += scrollTop * modifier;
1821
+    rect.left += scrollLeft * modifier;
1822
+    rect.right += scrollLeft * modifier;
1823
+    return rect;
1824
+  }
1825
+
1826
+  /*
1827
+   * Helper to detect borders of a given element
1828
+   * @method
1829
+   * @memberof Popper.Utils
1830
+   * @param {CSSStyleDeclaration} styles
1831
+   * Result of `getStyleComputedProperty` on the given element
1832
+   * @param {String} axis - `x` or `y`
1833
+   * @return {number} borders - The borders size of the given axis
1834
+   */
1835
+
1836
+  function getBordersSize(styles, axis) {
1837
+    var sideA = axis === 'x' ? 'Left' : 'Top';
1838
+    var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
1839
+
1840
+    return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
1841
+  }
1842
+
1843
+  function getSize(axis, body, html, computedStyle) {
1844
+    return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);
1845
+  }
1846
+
1847
+  function getWindowSizes(document) {
1848
+    var body = document.body;
1849
+    var html = document.documentElement;
1850
+    var computedStyle = isIE(10) && getComputedStyle(html);
1851
+
1852
+    return {
1853
+      height: getSize('Height', body, html, computedStyle),
1854
+      width: getSize('Width', body, html, computedStyle)
1855
+    };
1856
+  }
1857
+
1858
+  var classCallCheck = function (instance, Constructor) {
1859
+    if (!(instance instanceof Constructor)) {
1860
+      throw new TypeError("Cannot call a class as a function");
1861
+    }
1862
+  };
1863
+
1864
+  var createClass = function () {
1865
+    function defineProperties(target, props) {
1866
+      for (var i = 0; i < props.length; i++) {
1867
+        var descriptor = props[i];
1868
+        descriptor.enumerable = descriptor.enumerable || false;
1869
+        descriptor.configurable = true;
1870
+        if ("value" in descriptor) descriptor.writable = true;
1871
+        Object.defineProperty(target, descriptor.key, descriptor);
1872
+      }
1873
+    }
1874
+
1875
+    return function (Constructor, protoProps, staticProps) {
1876
+      if (protoProps) defineProperties(Constructor.prototype, protoProps);
1877
+      if (staticProps) defineProperties(Constructor, staticProps);
1878
+      return Constructor;
1879
+    };
1880
+  }();
1881
+
1882
+
1883
+
1884
+
1885
+
1886
+  var defineProperty = function (obj, key, value) {
1887
+    if (key in obj) {
1888
+      Object.defineProperty(obj, key, {
1889
+        value: value,
1890
+        enumerable: true,
1891
+        configurable: true,
1892
+        writable: true
1893
+      });
1894
+    } else {
1895
+      obj[key] = value;
1896
+    }
1897
+
1898
+    return obj;
1899
+  };
1900
+
1901
+  var _extends = Object.assign || function (target) {
1902
+    for (var i = 1; i < arguments.length; i++) {
1903
+      var source = arguments[i];
1904
+
1905
+      for (var key in source) {
1906
+        if (Object.prototype.hasOwnProperty.call(source, key)) {
1907
+          target[key] = source[key];
1908
+        }
1909
+      }
1910
+    }
1911
+
1912
+    return target;
1913
+  };
1914
+
1915
+  /**
1916
+   * Given element offsets, generate an output similar to getBoundingClientRect
1917
+   * @method
1918
+   * @memberof Popper.Utils
1919
+   * @argument {Object} offsets
1920
+   * @returns {Object} ClientRect like output
1921
+   */
1922
+  function getClientRect(offsets) {
1923
+    return _extends({}, offsets, {
1924
+      right: offsets.left + offsets.width,
1925
+      bottom: offsets.top + offsets.height
1926
+    });
1927
+  }
1928
+
1929
+  /**
1930
+   * Get bounding client rect of given element
1931
+   * @method
1932
+   * @memberof Popper.Utils
1933
+   * @param {HTMLElement} element
1934
+   * @return {Object} client rect
1935
+   */
1936
+  function getBoundingClientRect(element) {
1937
+    var rect = {};
1938
+
1939
+    // IE10 10 FIX: Please, don't ask, the element isn't
1940
+    // considered in DOM in some circumstances...
1941
+    // This isn't reproducible in IE10 compatibility mode of IE11
1942
+    try {
1943
+      if (isIE(10)) {
1944
+        rect = element.getBoundingClientRect();
1945
+        var scrollTop = getScroll(element, 'top');
1946
+        var scrollLeft = getScroll(element, 'left');
1947
+        rect.top += scrollTop;
1948
+        rect.left += scrollLeft;
1949
+        rect.bottom += scrollTop;
1950
+        rect.right += scrollLeft;
1951
+      } else {
1952
+        rect = element.getBoundingClientRect();
1953
+      }
1954
+    } catch (e) {}
1955
+
1956
+    var result = {
1957
+      left: rect.left,
1958
+      top: rect.top,
1959
+      width: rect.right - rect.left,
1960
+      height: rect.bottom - rect.top
1961
+    };
1962
+
1963
+    // subtract scrollbar size from sizes
1964
+    var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};
1965
+    var width = sizes.width || element.clientWidth || result.right - result.left;
1966
+    var height = sizes.height || element.clientHeight || result.bottom - result.top;
1967
+
1968
+    var horizScrollbar = element.offsetWidth - width;
1969
+    var vertScrollbar = element.offsetHeight - height;
1970
+
1971
+    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
1972
+    // we make this check conditional for performance reasons
1973
+    if (horizScrollbar || vertScrollbar) {
1974
+      var styles = getStyleComputedProperty(element);
1975
+      horizScrollbar -= getBordersSize(styles, 'x');
1976
+      vertScrollbar -= getBordersSize(styles, 'y');
1977
+
1978
+      result.width -= horizScrollbar;
1979
+      result.height -= vertScrollbar;
1980
+    }
1981
+
1982
+    return getClientRect(result);
1983
+  }
1984
+
1985
+  function getOffsetRectRelativeToArbitraryNode(children, parent) {
1986
+    var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1987
+
1988
+    var isIE10 = isIE(10);
1989
+    var isHTML = parent.nodeName === 'HTML';
1990
+    var childrenRect = getBoundingClientRect(children);
1991
+    var parentRect = getBoundingClientRect(parent);
1992
+    var scrollParent = getScrollParent(children);
1993
+
1994
+    var styles = getStyleComputedProperty(parent);
1995
+    var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
1996
+    var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
1997
+
1998
+    // In cases where the parent is fixed, we must ignore negative scroll in offset calc
1999
+    if (fixedPosition && isHTML) {
2000
+      parentRect.top = Math.max(parentRect.top, 0);
2001
+      parentRect.left = Math.max(parentRect.left, 0);
2002
+    }
2003
+    var offsets = getClientRect({
2004
+      top: childrenRect.top - parentRect.top - borderTopWidth,
2005
+      left: childrenRect.left - parentRect.left - borderLeftWidth,
2006
+      width: childrenRect.width,
2007
+      height: childrenRect.height
2008
+    });
2009
+    offsets.marginTop = 0;
2010
+    offsets.marginLeft = 0;
2011
+
2012
+    // Subtract margins of documentElement in case it's being used as parent
2013
+    // we do this only on HTML because it's the only element that behaves
2014
+    // differently when margins are applied to it. The margins are included in
2015
+    // the box of the documentElement, in the other cases not.
2016
+    if (!isIE10 && isHTML) {
2017
+      var marginTop = parseFloat(styles.marginTop, 10);
2018
+      var marginLeft = parseFloat(styles.marginLeft, 10);
2019
+
2020
+      offsets.top -= borderTopWidth - marginTop;
2021
+      offsets.bottom -= borderTopWidth - marginTop;
2022
+      offsets.left -= borderLeftWidth - marginLeft;
2023
+      offsets.right -= borderLeftWidth - marginLeft;
2024
+
2025
+      // Attach marginTop and marginLeft because in some circumstances we may need them
2026
+      offsets.marginTop = marginTop;
2027
+      offsets.marginLeft = marginLeft;
2028
+    }
2029
+
2030
+    if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
2031
+      offsets = includeScroll(offsets, parent);
2032
+    }
2033
+
2034
+    return offsets;
2035
+  }
2036
+
2037
+  function getViewportOffsetRectRelativeToArtbitraryNode(element) {
2038
+    var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2039
+
2040
+    var html = element.ownerDocument.documentElement;
2041
+    var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
2042
+    var width = Math.max(html.clientWidth, window.innerWidth || 0);
2043
+    var height = Math.max(html.clientHeight, window.innerHeight || 0);
2044
+
2045
+    var scrollTop = !excludeScroll ? getScroll(html) : 0;
2046
+    var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
2047
+
2048
+    var offset = {
2049
+      top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
2050
+      left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
2051
+      width: width,
2052
+      height: height
2053
+    };
2054
+
2055
+    return getClientRect(offset);
2056
+  }
2057
+
2058
+  /**
2059
+   * Check if the given element is fixed or is inside a fixed parent
2060
+   * @method
2061
+   * @memberof Popper.Utils
2062
+   * @argument {Element} element
2063
+   * @argument {Element} customContainer
2064
+   * @returns {Boolean} answer to "isFixed?"
2065
+   */
2066
+  function isFixed(element) {
2067
+    var nodeName = element.nodeName;
2068
+    if (nodeName === 'BODY' || nodeName === 'HTML') {
2069
+      return false;
2070
+    }
2071
+    if (getStyleComputedProperty(element, 'position') === 'fixed') {
2072
+      return true;
2073
+    }
2074
+    var parentNode = getParentNode(element);
2075
+    if (!parentNode) {
2076
+      return false;
2077
+    }
2078
+    return isFixed(parentNode);
2079
+  }
2080
+
2081
+  /**
2082
+   * Finds the first parent of an element that has a transformed property defined
2083
+   * @method
2084
+   * @memberof Popper.Utils
2085
+   * @argument {Element} element
2086
+   * @returns {Element} first transformed parent or documentElement
2087
+   */
2088
+
2089
+  function getFixedPositionOffsetParent(element) {
2090
+    // This check is needed to avoid errors in case one of the elements isn't defined for any reason
2091
+    if (!element || !element.parentElement || isIE()) {
2092
+      return document.documentElement;
2093
+    }
2094
+    var el = element.parentElement;
2095
+    while (el && getStyleComputedProperty(el, 'transform') === 'none') {
2096
+      el = el.parentElement;
2097
+    }
2098
+    return el || document.documentElement;
2099
+  }
2100
+
2101
+  /**
2102
+   * Computed the boundaries limits and return them
2103
+   * @method
2104
+   * @memberof Popper.Utils
2105
+   * @param {HTMLElement} popper
2106
+   * @param {HTMLElement} reference
2107
+   * @param {number} padding
2108
+   * @param {HTMLElement} boundariesElement - Element used to define the boundaries
2109
+   * @param {Boolean} fixedPosition - Is in fixed position mode
2110
+   * @returns {Object} Coordinates of the boundaries
2111
+   */
2112
+  function getBoundaries(popper, reference, padding, boundariesElement) {
2113
+    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
2114
+
2115
+    // NOTE: 1 DOM access here
2116
+
2117
+    var boundaries = { top: 0, left: 0 };
2118
+    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
2119
+
2120
+    // Handle viewport case
2121
+    if (boundariesElement === 'viewport') {
2122
+      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
2123
+    } else {
2124
+      // Handle other cases based on DOM element used as boundaries
2125
+      var boundariesNode = void 0;
2126
+      if (boundariesElement === 'scrollParent') {
2127
+        boundariesNode = getScrollParent(getParentNode(reference));
2128
+        if (boundariesNode.nodeName === 'BODY') {
2129
+          boundariesNode = popper.ownerDocument.documentElement;
2130
+        }
2131
+      } else if (boundariesElement === 'window') {
2132
+        boundariesNode = popper.ownerDocument.documentElement;
2133
+      } else {
2134
+        boundariesNode = boundariesElement;
2135
+      }
2136
+
2137
+      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
2138
+
2139
+      // In case of HTML, we need a different computation
2140
+      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
2141
+        var _getWindowSizes = getWindowSizes(popper.ownerDocument),
2142
+            height = _getWindowSizes.height,
2143
+            width = _getWindowSizes.width;
2144
+
2145
+        boundaries.top += offsets.top - offsets.marginTop;
2146
+        boundaries.bottom = height + offsets.top;
2147
+        boundaries.left += offsets.left - offsets.marginLeft;
2148
+        boundaries.right = width + offsets.left;
2149
+      } else {
2150
+        // for all the other DOM elements, this one is good
2151
+        boundaries = offsets;
2152
+      }
2153
+    }
2154
+
2155
+    // Add paddings
2156
+    padding = padding || 0;
2157
+    var isPaddingNumber = typeof padding === 'number';
2158
+    boundaries.left += isPaddingNumber ? padding : padding.left || 0;
2159
+    boundaries.top += isPaddingNumber ? padding : padding.top || 0;
2160
+    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
2161
+    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
2162
+
2163
+    return boundaries;
2164
+  }
2165
+
2166
+  function getArea(_ref) {
2167
+    var width = _ref.width,
2168
+        height = _ref.height;
2169
+
2170
+    return width * height;
2171
+  }
2172
+
2173
+  /**
2174
+   * Utility used to transform the `auto` placement to the placement with more
2175
+   * available space.
2176
+   * @method
2177
+   * @memberof Popper.Utils
2178
+   * @argument {Object} data - The data object generated by update method
2179
+   * @argument {Object} options - Modifiers configuration and options
2180
+   * @returns {Object} The data object, properly modified
2181
+   */
2182
+  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
2183
+    var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
2184
+
2185
+    if (placement.indexOf('auto') === -1) {
2186
+      return placement;
2187
+    }
2188
+
2189
+    var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
2190
+
2191
+    var rects = {
2192
+      top: {
2193
+        width: boundaries.width,
2194
+        height: refRect.top - boundaries.top
2195
+      },
2196
+      right: {
2197
+        width: boundaries.right - refRect.right,
2198
+        height: boundaries.height
2199
+      },
2200
+      bottom: {
2201
+        width: boundaries.width,
2202
+        height: boundaries.bottom - refRect.bottom
2203
+      },
2204
+      left: {
2205
+        width: refRect.left - boundaries.left,
2206
+        height: boundaries.height
2207
+      }
2208
+    };
2209
+
2210
+    var sortedAreas = Object.keys(rects).map(function (key) {
2211
+      return _extends({
2212
+        key: key
2213
+      }, rects[key], {
2214
+        area: getArea(rects[key])
2215
+      });
2216
+    }).sort(function (a, b) {
2217
+      return b.area - a.area;
2218
+    });
2219
+
2220
+    var filteredAreas = sortedAreas.filter(function (_ref2) {
2221
+      var width = _ref2.width,
2222
+          height = _ref2.height;
2223
+      return width >= popper.clientWidth && height >= popper.clientHeight;
2224
+    });
2225
+
2226
+    var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
2227
+
2228
+    var variation = placement.split('-')[1];
2229
+
2230
+    return computedPlacement + (variation ? '-' + variation : '');
2231
+  }
2232
+
2233
+  /**
2234
+   * Get offsets to the reference element
2235
+   * @method
2236
+   * @memberof Popper.Utils
2237
+   * @param {Object} state
2238
+   * @param {Element} popper - the popper element
2239
+   * @param {Element} reference - the reference element (the popper will be relative to this)
2240
+   * @param {Element} fixedPosition - is in fixed position mode
2241
+   * @returns {Object} An object containing the offsets which will be applied to the popper
2242
+   */
2243
+  function getReferenceOffsets(state, popper, reference) {
2244
+    var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
2245
+
2246
+    var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
2247
+    return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
2248
+  }
2249
+
2250
+  /**
2251
+   * Get the outer sizes of the given element (offset size + margins)
2252
+   * @method
2253
+   * @memberof Popper.Utils
2254
+   * @argument {Element} element
2255
+   * @returns {Object} object containing width and height properties
2256
+   */
2257
+  function getOuterSizes(element) {
2258
+    var window = element.ownerDocument.defaultView;
2259
+    var styles = window.getComputedStyle(element);
2260
+    var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);
2261
+    var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);
2262
+    var result = {
2263
+      width: element.offsetWidth + y,
2264
+      height: element.offsetHeight + x
2265
+    };
2266
+    return result;
2267
+  }
2268
+
2269
+  /**
2270
+   * Get the opposite placement of the given one
2271
+   * @method
2272
+   * @memberof Popper.Utils
2273
+   * @argument {String} placement
2274
+   * @returns {String} flipped placement
2275
+   */
2276
+  function getOppositePlacement(placement) {
2277
+    var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
2278
+    return placement.replace(/left|right|bottom|top/g, function (matched) {
2279
+      return hash[matched];
2280
+    });
2281
+  }
2282
+
2283
+  /**
2284
+   * Get offsets to the popper
2285
+   * @method
2286
+   * @memberof Popper.Utils
2287
+   * @param {Object} position - CSS position the Popper will get applied
2288
+   * @param {HTMLElement} popper - the popper element
2289
+   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
2290
+   * @param {String} placement - one of the valid placement options
2291
+   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
2292
+   */
2293
+  function getPopperOffsets(popper, referenceOffsets, placement) {
2294
+    placement = placement.split('-')[0];
2295
+
2296
+    // Get popper node sizes
2297
+    var popperRect = getOuterSizes(popper);
2298
+
2299
+    // Add position, width and height to our offsets object
2300
+    var popperOffsets = {
2301
+      width: popperRect.width,
2302
+      height: popperRect.height
2303
+    };
2304
+
2305
+    // depending by the popper placement we have to compute its offsets slightly differently
2306
+    var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
2307
+    var mainSide = isHoriz ? 'top' : 'left';
2308
+    var secondarySide = isHoriz ? 'left' : 'top';
2309
+    var measurement = isHoriz ? 'height' : 'width';
2310
+    var secondaryMeasurement = !isHoriz ? 'height' : 'width';
2311
+
2312
+    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
2313
+    if (placement === secondarySide) {
2314
+      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
2315
+    } else {
2316
+      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
2317
+    }
2318
+
2319
+    return popperOffsets;
2320
+  }
2321
+
2322
+  /**
2323
+   * Mimics the `find` method of Array
2324
+   * @method
2325
+   * @memberof Popper.Utils
2326
+   * @argument {Array} arr
2327
+   * @argument prop
2328
+   * @argument value
2329
+   * @returns index or -1
2330
+   */
2331
+  function find(arr, check) {
2332
+    // use native find if supported
2333
+    if (Array.prototype.find) {
2334
+      return arr.find(check);
2335
+    }
2336
+
2337
+    // use `filter` to obtain the same behavior of `find`
2338
+    return arr.filter(check)[0];
2339
+  }
2340
+
2341
+  /**
2342
+   * Return the index of the matching object
2343
+   * @method
2344
+   * @memberof Popper.Utils
2345
+   * @argument {Array} arr
2346
+   * @argument prop
2347
+   * @argument value
2348
+   * @returns index or -1
2349
+   */
2350
+  function findIndex(arr, prop, value) {
2351
+    // use native findIndex if supported
2352
+    if (Array.prototype.findIndex) {
2353
+      return arr.findIndex(function (cur) {
2354
+        return cur[prop] === value;
2355
+      });
2356
+    }
2357
+
2358
+    // use `find` + `indexOf` if `findIndex` isn't supported
2359
+    var match = find(arr, function (obj) {
2360
+      return obj[prop] === value;
2361
+    });
2362
+    return arr.indexOf(match);
2363
+  }
2364
+
2365
+  /**
2366
+   * Loop trough the list of modifiers and run them in order,
2367
+   * each of them will then edit the data object.
2368
+   * @method
2369
+   * @memberof Popper.Utils
2370
+   * @param {dataObject} data
2371
+   * @param {Array} modifiers
2372
+   * @param {String} ends - Optional modifier name used as stopper
2373
+   * @returns {dataObject}
2374
+   */
2375
+  function runModifiers(modifiers, data, ends) {
2376
+    var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
2377
+
2378
+    modifiersToRun.forEach(function (modifier) {
2379
+      if (modifier['function']) {
2380
+        // eslint-disable-line dot-notation
2381
+        console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
2382
+      }
2383
+      var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
2384
+      if (modifier.enabled && isFunction(fn)) {
2385
+        // Add properties to offsets to make them a complete clientRect object
2386
+        // we do this before each modifier to make sure the previous one doesn't
2387
+        // mess with these values
2388
+        data.offsets.popper = getClientRect(data.offsets.popper);
2389
+        data.offsets.reference = getClientRect(data.offsets.reference);
2390
+
2391
+        data = fn(data, modifier);
2392
+      }
2393
+    });
2394
+
2395
+    return data;
2396
+  }
2397
+
2398
+  /**
2399
+   * Updates the position of the popper, computing the new offsets and applying
2400
+   * the new style.<br />
2401
+   * Prefer `scheduleUpdate` over `update` because of performance reasons.
2402
+   * @method
2403
+   * @memberof Popper
2404
+   */
2405
+  function update() {
2406
+    // if popper is destroyed, don't perform any further update
2407
+    if (this.state.isDestroyed) {
2408
+      return;
2409
+    }
2410
+
2411
+    var data = {
2412
+      instance: this,
2413
+      styles: {},
2414
+      arrowStyles: {},
2415
+      attributes: {},
2416
+      flipped: false,
2417
+      offsets: {}
2418
+    };
2419
+
2420
+    // compute reference element offsets
2421
+    data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
2422
+
2423
+    // compute auto placement, store placement inside the data object,
2424
+    // modifiers will be able to edit `placement` if needed
2425
+    // and refer to originalPlacement to know the original value
2426
+    data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
2427
+
2428
+    // store the computed placement inside `originalPlacement`
2429
+    data.originalPlacement = data.placement;
2430
+
2431
+    data.positionFixed = this.options.positionFixed;
2432
+
2433
+    // compute the popper offsets
2434
+    data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
2435
+
2436
+    data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
2437
+
2438
+    // run the modifiers
2439
+    data = runModifiers(this.modifiers, data);
2440
+
2441
+    // the first `update` will call `onCreate` callback
2442
+    // the other ones will call `onUpdate` callback
2443
+    if (!this.state.isCreated) {
2444
+      this.state.isCreated = true;
2445
+      this.options.onCreate(data);
2446
+    } else {
2447
+      this.options.onUpdate(data);
2448
+    }
2449
+  }
2450
+
2451
+  /**
2452
+   * Helper used to know if the given modifier is enabled.
2453
+   * @method
2454
+   * @memberof Popper.Utils
2455
+   * @returns {Boolean}
2456
+   */
2457
+  function isModifierEnabled(modifiers, modifierName) {
2458
+    return modifiers.some(function (_ref) {
2459
+      var name = _ref.name,
2460
+          enabled = _ref.enabled;
2461
+      return enabled && name === modifierName;
2462
+    });
2463
+  }
2464
+
2465
+  /**
2466
+   * Get the prefixed supported property name
2467
+   * @method
2468
+   * @memberof Popper.Utils
2469
+   * @argument {String} property (camelCase)
2470
+   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
2471
+   */
2472
+  function getSupportedPropertyName(property) {
2473
+    var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
2474
+    var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
2475
+
2476
+    for (var i = 0; i < prefixes.length; i++) {
2477
+      var prefix = prefixes[i];
2478
+      var toCheck = prefix ? '' + prefix + upperProp : property;
2479
+      if (typeof document.body.style[toCheck] !== 'undefined') {
2480
+        return toCheck;
2481
+      }
2482
+    }
2483
+    return null;
2484
+  }
2485
+
2486
+  /**
2487
+   * Destroys the popper.
2488
+   * @method
2489
+   * @memberof Popper
2490
+   */
2491
+  function destroy() {
2492
+    this.state.isDestroyed = true;
2493
+
2494
+    // touch DOM only if `applyStyle` modifier is enabled
2495
+    if (isModifierEnabled(this.modifiers, 'applyStyle')) {
2496
+      this.popper.removeAttribute('x-placement');
2497
+      this.popper.style.position = '';
2498
+      this.popper.style.top = '';
2499
+      this.popper.style.left = '';
2500
+      this.popper.style.right = '';
2501
+      this.popper.style.bottom = '';
2502
+      this.popper.style.willChange = '';
2503
+      this.popper.style[getSupportedPropertyName('transform')] = '';
2504
+    }
2505
+
2506
+    this.disableEventListeners();
2507
+
2508
+    // remove the popper if user explicity asked for the deletion on destroy
2509
+    // do not use `remove` because IE11 doesn't support it
2510
+    if (this.options.removeOnDestroy) {
2511
+      this.popper.parentNode.removeChild(this.popper);
2512
+    }
2513
+    return this;
2514
+  }
2515
+
2516
+  /**
2517
+   * Get the window associated with the element
2518
+   * @argument {Element} element
2519
+   * @returns {Window}
2520
+   */
2521
+  function getWindow(element) {
2522
+    var ownerDocument = element.ownerDocument;
2523
+    return ownerDocument ? ownerDocument.defaultView : window;
2524
+  }
2525
+
2526
+  function attachToScrollParents(scrollParent, event, callback, scrollParents) {
2527
+    var isBody = scrollParent.nodeName === 'BODY';
2528
+    var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
2529
+    target.addEventListener(event, callback, { passive: true });
2530
+
2531
+    if (!isBody) {
2532
+      attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
2533
+    }
2534
+    scrollParents.push(target);
2535
+  }
2536
+
2537
+  /**
2538
+   * Setup needed event listeners used to update the popper position
2539
+   * @method
2540
+   * @memberof Popper.Utils
2541
+   * @private
2542
+   */
2543
+  function setupEventListeners(reference, options, state, updateBound) {
2544
+    // Resize event listener on window
2545
+    state.updateBound = updateBound;
2546
+    getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
2547
+
2548
+    // Scroll event listener on scroll parents
2549
+    var scrollElement = getScrollParent(reference);
2550
+    attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
2551
+    state.scrollElement = scrollElement;
2552
+    state.eventsEnabled = true;
2553
+
2554
+    return state;
2555
+  }
2556
+
2557
+  /**
2558
+   * It will add resize/scroll events and start recalculating
2559
+   * position of the popper element when they are triggered.
2560
+   * @method
2561
+   * @memberof Popper
2562
+   */
2563
+  function enableEventListeners() {
2564
+    if (!this.state.eventsEnabled) {
2565
+      this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
2566
+    }
2567
+  }
2568
+
2569
+  /**
2570
+   * Remove event listeners used to update the popper position
2571
+   * @method
2572
+   * @memberof Popper.Utils
2573
+   * @private
2574
+   */
2575
+  function removeEventListeners(reference, state) {
2576
+    // Remove resize event listener on window
2577
+    getWindow(reference).removeEventListener('resize', state.updateBound);
2578
+
2579
+    // Remove scroll event listener on scroll parents
2580
+    state.scrollParents.forEach(function (target) {
2581
+      target.removeEventListener('scroll', state.updateBound);
2582
+    });
2583
+
2584
+    // Reset state
2585
+    state.updateBound = null;
2586
+    state.scrollParents = [];
2587
+    state.scrollElement = null;
2588
+    state.eventsEnabled = false;
2589
+    return state;
2590
+  }
2591
+
2592
+  /**
2593
+   * It will remove resize/scroll events and won't recalculate popper position
2594
+   * when they are triggered. It also won't trigger `onUpdate` callback anymore,
2595
+   * unless you call `update` method manually.
2596
+   * @method
2597
+   * @memberof Popper
2598
+   */
2599
+  function disableEventListeners() {
2600
+    if (this.state.eventsEnabled) {
2601
+      cancelAnimationFrame(this.scheduleUpdate);
2602
+      this.state = removeEventListeners(this.reference, this.state);
2603
+    }
2604
+  }
2605
+
2606
+  /**
2607
+   * Tells if a given input is a number
2608
+   * @method
2609
+   * @memberof Popper.Utils
2610
+   * @param {*} input to check
2611
+   * @return {Boolean}
2612
+   */
2613
+  function isNumeric(n) {
2614
+    return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
2615
+  }
2616
+
2617
+  /**
2618
+   * Set the style to the given popper
2619
+   * @method
2620
+   * @memberof Popper.Utils
2621
+   * @argument {Element} element - Element to apply the style to
2622
+   * @argument {Object} styles
2623
+   * Object with a list of properties and values which will be applied to the element
2624
+   */
2625
+  function setStyles(element, styles) {
2626
+    Object.keys(styles).forEach(function (prop) {
2627
+      var unit = '';
2628
+      // add unit if the value is numeric and is one of the following
2629
+      if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
2630
+        unit = 'px';
2631
+      }
2632
+      element.style[prop] = styles[prop] + unit;
2633
+    });
2634
+  }
2635
+
2636
+  /**
2637
+   * Set the attributes to the given popper
2638
+   * @method
2639
+   * @memberof Popper.Utils
2640
+   * @argument {Element} element - Element to apply the attributes to
2641
+   * @argument {Object} styles
2642
+   * Object with a list of properties and values which will be applied to the element
2643
+   */
2644
+  function setAttributes(element, attributes) {
2645
+    Object.keys(attributes).forEach(function (prop) {
2646
+      var value = attributes[prop];
2647
+      if (value !== false) {
2648
+        element.setAttribute(prop, attributes[prop]);
2649
+      } else {
2650
+        element.removeAttribute(prop);
2651
+      }
2652
+    });
2653
+  }
2654
+
2655
+  /**
2656
+   * @function
2657
+   * @memberof Modifiers
2658
+   * @argument {Object} data - The data object generated by `update` method
2659
+   * @argument {Object} data.styles - List of style properties - values to apply to popper element
2660
+   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
2661
+   * @argument {Object} options - Modifiers configuration and options
2662
+   * @returns {Object} The same data object
2663
+   */
2664
+  function applyStyle(data) {
2665
+    // any property present in `data.styles` will be applied to the popper,
2666
+    // in this way we can make the 3rd party modifiers add custom styles to it
2667
+    // Be aware, modifiers could override the properties defined in the previous
2668
+    // lines of this modifier!
2669
+    setStyles(data.instance.popper, data.styles);
2670
+
2671
+    // any property present in `data.attributes` will be applied to the popper,
2672
+    // they will be set as HTML attributes of the element
2673
+    setAttributes(data.instance.popper, data.attributes);
2674
+
2675
+    // if arrowElement is defined and arrowStyles has some properties
2676
+    if (data.arrowElement && Object.keys(data.arrowStyles).length) {
2677
+      setStyles(data.arrowElement, data.arrowStyles);
2678
+    }
2679
+
2680
+    return data;
2681
+  }
2682
+
2683
+  /**
2684
+   * Set the x-placement attribute before everything else because it could be used
2685
+   * to add margins to the popper margins needs to be calculated to get the
2686
+   * correct popper offsets.
2687
+   * @method
2688
+   * @memberof Popper.modifiers
2689
+   * @param {HTMLElement} reference - The reference element used to position the popper
2690
+   * @param {HTMLElement} popper - The HTML element used as popper
2691
+   * @param {Object} options - Popper.js options
2692
+   */
2693
+  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
2694
+    // compute reference element offsets
2695
+    var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
2696
+
2697
+    // compute auto placement, store placement inside the data object,
2698
+    // modifiers will be able to edit `placement` if needed
2699
+    // and refer to originalPlacement to know the original value
2700
+    var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
2701
+
2702
+    popper.setAttribute('x-placement', placement);
2703
+
2704
+    // Apply `position` to popper before anything else because
2705
+    // without the position applied we can't guarantee correct computations
2706
+    setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
2707
+
2708
+    return options;
2709
+  }
2710
+
2711
+  /**
2712
+   * @function
2713
+   * @memberof Popper.Utils
2714
+   * @argument {Object} data - The data object generated by `update` method
2715
+   * @argument {Boolean} shouldRound - If the offsets should be rounded at all
2716
+   * @returns {Object} The popper's position offsets rounded
2717
+   *
2718
+   * The tale of pixel-perfect positioning. It's still not 100% perfect, but as
2719
+   * good as it can be within reason.
2720
+   * Discussion here: https://github.com/FezVrasta/popper.js/pull/715
2721
+   *
2722
+   * Low DPI screens cause a popper to be blurry if not using full pixels (Safari
2723
+   * as well on High DPI screens).
2724
+   *
2725
+   * Firefox prefers no rounding for positioning and does not have blurriness on
2726
+   * high DPI screens.
2727
+   *
2728
+   * Only horizontal placement and left/right values need to be considered.
2729
+   */
2730
+  function getRoundedOffsets(data, shouldRound) {
2731
+    var _data$offsets = data.offsets,
2732
+        popper = _data$offsets.popper,
2733
+        reference = _data$offsets.reference;
2734
+    var round = Math.round,
2735
+        floor = Math.floor;
2736
+
2737
+    var noRound = function noRound(v) {
2738
+      return v;
2739
+    };
2740
+
2741
+    var referenceWidth = round(reference.width);
2742
+    var popperWidth = round(popper.width);
2743
+
2744
+    var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
2745
+    var isVariation = data.placement.indexOf('-') !== -1;
2746
+    var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
2747
+    var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
2748
+
2749
+    var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
2750
+    var verticalToInteger = !shouldRound ? noRound : round;
2751
+
2752
+    return {
2753
+      left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
2754
+      top: verticalToInteger(popper.top),
2755
+      bottom: verticalToInteger(popper.bottom),
2756
+      right: horizontalToInteger(popper.right)
2757
+    };
2758
+  }
2759
+
2760
+  var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);
2761
+
2762
+  /**
2763
+   * @function
2764
+   * @memberof Modifiers
2765
+   * @argument {Object} data - The data object generated by `update` method
2766
+   * @argument {Object} options - Modifiers configuration and options
2767
+   * @returns {Object} The data object, properly modified
2768
+   */
2769
+  function computeStyle(data, options) {
2770
+    var x = options.x,
2771
+        y = options.y;
2772
+    var popper = data.offsets.popper;
2773
+
2774
+    // Remove this legacy support in Popper.js v2
2775
+
2776
+    var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
2777
+      return modifier.name === 'applyStyle';
2778
+    }).gpuAcceleration;
2779
+    if (legacyGpuAccelerationOption !== undefined) {
2780
+      console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
2781
+    }
2782
+    var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
2783
+
2784
+    var offsetParent = getOffsetParent(data.instance.popper);
2785
+    var offsetParentRect = getBoundingClientRect(offsetParent);
2786
+
2787
+    // Styles
2788
+    var styles = {
2789
+      position: popper.position
2790
+    };
2791
+
2792
+    var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);
2793
+
2794
+    var sideA = x === 'bottom' ? 'top' : 'bottom';
2795
+    var sideB = y === 'right' ? 'left' : 'right';
2796
+
2797
+    // if gpuAcceleration is set to `true` and transform is supported,
2798
+    //  we use `translate3d` to apply the position to the popper we
2799
+    // automatically use the supported prefixed version if needed
2800
+    var prefixedProperty = getSupportedPropertyName('transform');
2801
+
2802
+    // now, let's make a step back and look at this code closely (wtf?)
2803
+    // If the content of the popper grows once it's been positioned, it
2804
+    // may happen that the popper gets misplaced because of the new content
2805
+    // overflowing its reference element
2806
+    // To avoid this problem, we provide two options (x and y), which allow
2807
+    // the consumer to define the offset origin.
2808
+    // If we position a popper on top of a reference element, we can set
2809
+    // `x` to `top` to make the popper grow towards its top instead of
2810
+    // its bottom.
2811
+    var left = void 0,
2812
+        top = void 0;
2813
+    if (sideA === 'bottom') {
2814
+      // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)
2815
+      // and not the bottom of the html element
2816
+      if (offsetParent.nodeName === 'HTML') {
2817
+        top = -offsetParent.clientHeight + offsets.bottom;
2818
+      } else {
2819
+        top = -offsetParentRect.height + offsets.bottom;
2820
+      }
2821
+    } else {
2822
+      top = offsets.top;
2823
+    }
2824
+    if (sideB === 'right') {
2825
+      if (offsetParent.nodeName === 'HTML') {
2826
+        left = -offsetParent.clientWidth + offsets.right;
2827
+      } else {
2828
+        left = -offsetParentRect.width + offsets.right;
2829
+      }
2830
+    } else {
2831
+      left = offsets.left;
2832
+    }
2833
+    if (gpuAcceleration && prefixedProperty) {
2834
+      styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
2835
+      styles[sideA] = 0;
2836
+      styles[sideB] = 0;
2837
+      styles.willChange = 'transform';
2838
+    } else {
2839
+      // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
2840
+      var invertTop = sideA === 'bottom' ? -1 : 1;
2841
+      var invertLeft = sideB === 'right' ? -1 : 1;
2842
+      styles[sideA] = top * invertTop;
2843
+      styles[sideB] = left * invertLeft;
2844
+      styles.willChange = sideA + ', ' + sideB;
2845
+    }
2846
+
2847
+    // Attributes
2848
+    var attributes = {
2849
+      'x-placement': data.placement
2850
+    };
2851
+
2852
+    // Update `data` attributes, styles and arrowStyles
2853
+    data.attributes = _extends({}, attributes, data.attributes);
2854
+    data.styles = _extends({}, styles, data.styles);
2855
+    data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
2856
+
2857
+    return data;
2858
+  }
2859
+
2860
+  /**
2861
+   * Helper used to know if the given modifier depends from another one.<br />
2862
+   * It checks if the needed modifier is listed and enabled.
2863
+   * @method
2864
+   * @memberof Popper.Utils
2865
+   * @param {Array} modifiers - list of modifiers
2866
+   * @param {String} requestingName - name of requesting modifier
2867
+   * @param {String} requestedName - name of requested modifier
2868
+   * @returns {Boolean}
2869
+   */
2870
+  function isModifierRequired(modifiers, requestingName, requestedName) {
2871
+    var requesting = find(modifiers, function (_ref) {
2872
+      var name = _ref.name;
2873
+      return name === requestingName;
2874
+    });
2875
+
2876
+    var isRequired = !!requesting && modifiers.some(function (modifier) {
2877
+      return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
2878
+    });
2879
+
2880
+    if (!isRequired) {
2881
+      var _requesting = '`' + requestingName + '`';
2882
+      var requested = '`' + requestedName + '`';
2883
+      console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
2884
+    }
2885
+    return isRequired;
2886
+  }
2887
+
2888
+  /**
2889
+   * @function
2890
+   * @memberof Modifiers
2891
+   * @argument {Object} data - The data object generated by update method
2892
+   * @argument {Object} options - Modifiers configuration and options
2893
+   * @returns {Object} The data object, properly modified
2894
+   */
2895
+  function arrow(data, options) {
2896
+    var _data$offsets$arrow;
2897
+
2898
+    // arrow depends on keepTogether in order to work
2899
+    if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
2900
+      return data;
2901
+    }
2902
+
2903
+    var arrowElement = options.element;
2904
+
2905
+    // if arrowElement is a string, suppose it's a CSS selector
2906
+    if (typeof arrowElement === 'string') {
2907
+      arrowElement = data.instance.popper.querySelector(arrowElement);
2908
+
2909
+      // if arrowElement is not found, don't run the modifier
2910
+      if (!arrowElement) {
2911
+        return data;
2912
+      }
2913
+    } else {
2914
+      // if the arrowElement isn't a query selector we must check that the
2915
+      // provided DOM node is child of its popper node
2916
+      if (!data.instance.popper.contains(arrowElement)) {
2917
+        console.warn('WARNING: `arrow.element` must be child of its popper element!');
2918
+        return data;
2919
+      }
2920
+    }
2921
+
2922
+    var placement = data.placement.split('-')[0];
2923
+    var _data$offsets = data.offsets,
2924
+        popper = _data$offsets.popper,
2925
+        reference = _data$offsets.reference;
2926
+
2927
+    var isVertical = ['left', 'right'].indexOf(placement) !== -1;
2928
+
2929
+    var len = isVertical ? 'height' : 'width';
2930
+    var sideCapitalized = isVertical ? 'Top' : 'Left';
2931
+    var side = sideCapitalized.toLowerCase();
2932
+    var altSide = isVertical ? 'left' : 'top';
2933
+    var opSide = isVertical ? 'bottom' : 'right';
2934
+    var arrowElementSize = getOuterSizes(arrowElement)[len];
2935
+
2936
+    //
2937
+    // extends keepTogether behavior making sure the popper and its
2938
+    // reference have enough pixels in conjunction
2939
+    //
2940
+
2941
+    // top/left side
2942
+    if (reference[opSide] - arrowElementSize < popper[side]) {
2943
+      data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
2944
+    }
2945
+    // bottom/right side
2946
+    if (reference[side] + arrowElementSize > popper[opSide]) {
2947
+      data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
2948
+    }
2949
+    data.offsets.popper = getClientRect(data.offsets.popper);
2950
+
2951
+    // compute center of the popper
2952
+    var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
2953
+
2954
+    // Compute the sideValue using the updated popper offsets
2955
+    // take popper margin in account because we don't have this info available
2956
+    var css = getStyleComputedProperty(data.instance.popper);
2957
+    var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
2958
+    var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
2959
+    var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
2960
+
2961
+    // prevent arrowElement from being placed not contiguously to its popper
2962
+    sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
2963
+
2964
+    data.arrowElement = arrowElement;
2965
+    data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
2966
+
2967
+    return data;
2968
+  }
2969
+
2970
+  /**
2971
+   * Get the opposite placement variation of the given one
2972
+   * @method
2973
+   * @memberof Popper.Utils
2974
+   * @argument {String} placement variation
2975
+   * @returns {String} flipped placement variation
2976
+   */
2977
+  function getOppositeVariation(variation) {
2978
+    if (variation === 'end') {
2979
+      return 'start';
2980
+    } else if (variation === 'start') {
2981
+      return 'end';
2982
+    }
2983
+    return variation;
2984
+  }
2985
+
2986
+  /**
2987
+   * List of accepted placements to use as values of the `placement` option.<br />
2988
+   * Valid placements are:
2989
+   * - `auto`
2990
+   * - `top`
2991
+   * - `right`
2992
+   * - `bottom`
2993
+   * - `left`
2994
+   *
2995
+   * Each placement can have a variation from this list:
2996
+   * - `-start`
2997
+   * - `-end`
2998
+   *
2999
+   * Variations are interpreted easily if you think of them as the left to right
3000
+   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
3001
+   * is right.<br />
3002
+   * Vertically (`left` and `right`), `start` is top and `end` is bottom.
3003
+   *
3004
+   * Some valid examples are:
3005
+   * - `top-end` (on top of reference, right aligned)
3006
+   * - `right-start` (on right of reference, top aligned)
3007
+   * - `bottom` (on bottom, centered)
3008
+   * - `auto-end` (on the side with more space available, alignment depends by placement)
3009
+   *
3010
+   * @static
3011
+   * @type {Array}
3012
+   * @enum {String}
3013
+   * @readonly
3014
+   * @method placements
3015
+   * @memberof Popper
3016
+   */
3017
+  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
3018
+
3019
+  // Get rid of `auto` `auto-start` and `auto-end`
3020
+  var validPlacements = placements.slice(3);
3021
+
3022
+  /**
3023
+   * Given an initial placement, returns all the subsequent placements
3024
+   * clockwise (or counter-clockwise).
3025
+   *
3026
+   * @method
3027
+   * @memberof Popper.Utils
3028
+   * @argument {String} placement - A valid placement (it accepts variations)
3029
+   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
3030
+   * @returns {Array} placements including their variations
3031
+   */
3032
+  function clockwise(placement) {
3033
+    var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3034
+
3035
+    var index = validPlacements.indexOf(placement);
3036
+    var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
3037
+    return counter ? arr.reverse() : arr;
3038
+  }
3039
+
3040
+  var BEHAVIORS = {
3041
+    FLIP: 'flip',
3042
+    CLOCKWISE: 'clockwise',
3043
+    COUNTERCLOCKWISE: 'counterclockwise'
3044
+  };
3045
+
3046
+  /**
3047
+   * @function
3048
+   * @memberof Modifiers
3049
+   * @argument {Object} data - The data object generated by update method
3050
+   * @argument {Object} options - Modifiers configuration and options
3051
+   * @returns {Object} The data object, properly modified
3052
+   */
3053
+  function flip(data, options) {
3054
+    // if `inner` modifier is enabled, we can't use the `flip` modifier
3055
+    if (isModifierEnabled(data.instance.modifiers, 'inner')) {
3056
+      return data;
3057
+    }
3058
+
3059
+    if (data.flipped && data.placement === data.originalPlacement) {
3060
+      // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
3061
+      return data;
3062
+    }
3063
+
3064
+    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
3065
+
3066
+    var placement = data.placement.split('-')[0];
3067
+    var placementOpposite = getOppositePlacement(placement);
3068
+    var variation = data.placement.split('-')[1] || '';
3069
+
3070
+    var flipOrder = [];
3071
+
3072
+    switch (options.behavior) {
3073
+      case BEHAVIORS.FLIP:
3074
+        flipOrder = [placement, placementOpposite];
3075
+        break;
3076
+      case BEHAVIORS.CLOCKWISE:
3077
+        flipOrder = clockwise(placement);
3078
+        break;
3079
+      case BEHAVIORS.COUNTERCLOCKWISE:
3080
+        flipOrder = clockwise(placement, true);
3081
+        break;
3082
+      default:
3083
+        flipOrder = options.behavior;
3084
+    }
3085
+
3086
+    flipOrder.forEach(function (step, index) {
3087
+      if (placement !== step || flipOrder.length === index + 1) {
3088
+        return data;
3089
+      }
3090
+
3091
+      placement = data.placement.split('-')[0];
3092
+      placementOpposite = getOppositePlacement(placement);
3093
+
3094
+      var popperOffsets = data.offsets.popper;
3095
+      var refOffsets = data.offsets.reference;
3096
+
3097
+      // using floor because the reference offsets may contain decimals we are not going to consider here
3098
+      var floor = Math.floor;
3099
+      var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
3100
+
3101
+      var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
3102
+      var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
3103
+      var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
3104
+      var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
3105
+
3106
+      var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
3107
+
3108
+      // flip the variation if required
3109
+      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
3110
+      var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
3111
+
3112
+      if (overlapsRef || overflowsBoundaries || flippedVariation) {
3113
+        // this boolean to detect any flip loop
3114
+        data.flipped = true;
3115
+
3116
+        if (overlapsRef || overflowsBoundaries) {
3117
+          placement = flipOrder[index + 1];
3118
+        }
3119
+
3120
+        if (flippedVariation) {
3121
+          variation = getOppositeVariation(variation);
3122
+        }
3123
+
3124
+        data.placement = placement + (variation ? '-' + variation : '');
3125
+
3126
+        // this object contains `position`, we want to preserve it along with
3127
+        // any additional property we may add in the future
3128
+        data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
3129
+
3130
+        data = runModifiers(data.instance.modifiers, data, 'flip');
3131
+      }
3132
+    });
3133
+    return data;
3134
+  }
3135
+
3136
+  /**
3137
+   * @function
3138
+   * @memberof Modifiers
3139
+   * @argument {Object} data - The data object generated by update method
3140
+   * @argument {Object} options - Modifiers configuration and options
3141
+   * @returns {Object} The data object, properly modified
3142
+   */
3143
+  function keepTogether(data) {
3144
+    var _data$offsets = data.offsets,
3145
+        popper = _data$offsets.popper,
3146
+        reference = _data$offsets.reference;
3147
+
3148
+    var placement = data.placement.split('-')[0];
3149
+    var floor = Math.floor;
3150
+    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
3151
+    var side = isVertical ? 'right' : 'bottom';
3152
+    var opSide = isVertical ? 'left' : 'top';
3153
+    var measurement = isVertical ? 'width' : 'height';
3154
+
3155
+    if (popper[side] < floor(reference[opSide])) {
3156
+      data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
3157
+    }
3158
+    if (popper[opSide] > floor(reference[side])) {
3159
+      data.offsets.popper[opSide] = floor(reference[side]);
3160
+    }
3161
+
3162
+    return data;
3163
+  }
3164
+
3165
+  /**
3166
+   * Converts a string containing value + unit into a px value number
3167
+   * @function
3168
+   * @memberof {modifiers~offset}
3169
+   * @private
3170
+   * @argument {String} str - Value + unit string
3171
+   * @argument {String} measurement - `height` or `width`
3172
+   * @argument {Object} popperOffsets
3173
+   * @argument {Object} referenceOffsets
3174
+   * @returns {Number|String}
3175
+   * Value in pixels, or original string if no values were extracted
3176
+   */
3177
+  function toValue(str, measurement, popperOffsets, referenceOffsets) {
3178
+    // separate value from unit
3179
+    var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
3180
+    var value = +split[1];
3181
+    var unit = split[2];
3182
+
3183
+    // If it's not a number it's an operator, I guess
3184
+    if (!value) {
3185
+      return str;
3186
+    }
3187
+
3188
+    if (unit.indexOf('%') === 0) {
3189
+      var element = void 0;
3190
+      switch (unit) {
3191
+        case '%p':
3192
+          element = popperOffsets;
3193
+          break;
3194
+        case '%':
3195
+        case '%r':
3196
+        default:
3197
+          element = referenceOffsets;
3198
+      }
3199
+
3200
+      var rect = getClientRect(element);
3201
+      return rect[measurement] / 100 * value;
3202
+    } else if (unit === 'vh' || unit === 'vw') {
3203
+      // if is a vh or vw, we calculate the size based on the viewport
3204
+      var size = void 0;
3205
+      if (unit === 'vh') {
3206
+        size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
3207
+      } else {
3208
+        size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
3209
+      }
3210
+      return size / 100 * value;
3211
+    } else {
3212
+      // if is an explicit pixel unit, we get rid of the unit and keep the value
3213
+      // if is an implicit unit, it's px, and we return just the value
3214
+      return value;
3215
+    }
3216
+  }
3217
+
3218
+  /**
3219
+   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
3220
+   * @function
3221
+   * @memberof {modifiers~offset}
3222
+   * @private
3223
+   * @argument {String} offset
3224
+   * @argument {Object} popperOffsets
3225
+   * @argument {Object} referenceOffsets
3226
+   * @argument {String} basePlacement
3227
+   * @returns {Array} a two cells array with x and y offsets in numbers
3228
+   */
3229
+  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
3230
+    var offsets = [0, 0];
3231
+
3232
+    // Use height if placement is left or right and index is 0 otherwise use width
3233
+    // in this way the first offset will use an axis and the second one
3234
+    // will use the other one
3235
+    var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
3236
+
3237
+    // Split the offset string to obtain a list of values and operands
3238
+    // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
3239
+    var fragments = offset.split(/(\+|\-)/).map(function (frag) {
3240
+      return frag.trim();
3241
+    });
3242
+
3243
+    // Detect if the offset string contains a pair of values or a single one
3244
+    // they could be separated by comma or space
3245
+    var divider = fragments.indexOf(find(fragments, function (frag) {
3246
+      return frag.search(/,|\s/) !== -1;
3247
+    }));
3248
+
3249
+    if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
3250
+      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
3251
+    }
3252
+
3253
+    // If divider is found, we divide the list of values and operands to divide
3254
+    // them by ofset X and Y.
3255
+    var splitRegex = /\s*,\s*|\s+/;
3256
+    var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
3257
+
3258
+    // Convert the values with units to absolute pixels to allow our computations
3259
+    ops = ops.map(function (op, index) {
3260
+      // Most of the units rely on the orientation of the popper
3261
+      var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
3262
+      var mergeWithPrevious = false;
3263
+      return op
3264
+      // This aggregates any `+` or `-` sign that aren't considered operators
3265
+      // e.g.: 10 + +5 => [10, +, +5]
3266
+      .reduce(function (a, b) {
3267
+        if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
3268
+          a[a.length - 1] = b;
3269
+          mergeWithPrevious = true;
3270
+          return a;
3271
+        } else if (mergeWithPrevious) {
3272
+          a[a.length - 1] += b;
3273
+          mergeWithPrevious = false;
3274
+          return a;
3275
+        } else {
3276
+          return a.concat(b);
3277
+        }
3278
+      }, [])
3279
+      // Here we convert the string values into number values (in px)
3280
+      .map(function (str) {
3281
+        return toValue(str, measurement, popperOffsets, referenceOffsets);
3282
+      });
3283
+    });
3284
+
3285
+    // Loop trough the offsets arrays and execute the operations
3286
+    ops.forEach(function (op, index) {
3287
+      op.forEach(function (frag, index2) {
3288
+        if (isNumeric(frag)) {
3289
+          offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
3290
+        }
3291
+      });
3292
+    });
3293
+    return offsets;
3294
+  }
3295
+
3296
+  /**
3297
+   * @function
3298
+   * @memberof Modifiers
3299
+   * @argument {Object} data - The data object generated by update method
3300
+   * @argument {Object} options - Modifiers configuration and options
3301
+   * @argument {Number|String} options.offset=0
3302
+   * The offset value as described in the modifier description
3303
+   * @returns {Object} The data object, properly modified
3304
+   */
3305
+  function offset(data, _ref) {
3306
+    var offset = _ref.offset;
3307
+    var placement = data.placement,
3308
+        _data$offsets = data.offsets,
3309
+        popper = _data$offsets.popper,
3310
+        reference = _data$offsets.reference;
3311
+
3312
+    var basePlacement = placement.split('-')[0];
3313
+
3314
+    var offsets = void 0;
3315
+    if (isNumeric(+offset)) {
3316
+      offsets = [+offset, 0];
3317
+    } else {
3318
+      offsets = parseOffset(offset, popper, reference, basePlacement);
3319
+    }
3320
+
3321
+    if (basePlacement === 'left') {
3322
+      popper.top += offsets[0];
3323
+      popper.left -= offsets[1];
3324
+    } else if (basePlacement === 'right') {
3325
+      popper.top += offsets[0];
3326
+      popper.left += offsets[1];
3327
+    } else if (basePlacement === 'top') {
3328
+      popper.left += offsets[0];
3329
+      popper.top -= offsets[1];
3330
+    } else if (basePlacement === 'bottom') {
3331
+      popper.left += offsets[0];
3332
+      popper.top += offsets[1];
3333
+    }
3334
+
3335
+    data.popper = popper;
3336
+    return data;
3337
+  }
3338
+
3339
+  /**
3340
+   * @function
3341
+   * @memberof Modifiers
3342
+   * @argument {Object} data - The data object generated by `update` method
3343
+   * @argument {Object} options - Modifiers configuration and options
3344
+   * @returns {Object} The data object, properly modified
3345
+   */
3346
+  function preventOverflow(data, options) {
3347
+    var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
3348
+
3349
+    // If offsetParent is the reference element, we really want to
3350
+    // go one step up and use the next offsetParent as reference to
3351
+    // avoid to make this modifier completely useless and look like broken
3352
+    if (data.instance.reference === boundariesElement) {
3353
+      boundariesElement = getOffsetParent(boundariesElement);
3354
+    }
3355
+
3356
+    // NOTE: DOM access here
3357
+    // resets the popper's position so that the document size can be calculated excluding
3358
+    // the size of the popper element itself
3359
+    var transformProp = getSupportedPropertyName('transform');
3360
+    var popperStyles = data.instance.popper.style; // assignment to help minification
3361
+    var top = popperStyles.top,
3362
+        left = popperStyles.left,
3363
+        transform = popperStyles[transformProp];
3364
+
3365
+    popperStyles.top = '';
3366
+    popperStyles.left = '';
3367
+    popperStyles[transformProp] = '';
3368
+
3369
+    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
3370
+
3371
+    // NOTE: DOM access here
3372
+    // restores the original style properties after the offsets have been computed
3373
+    popperStyles.top = top;
3374
+    popperStyles.left = left;
3375
+    popperStyles[transformProp] = transform;
3376
+
3377
+    options.boundaries = boundaries;
3378
+
3379
+    var order = options.priority;
3380
+    var popper = data.offsets.popper;
3381
+
3382
+    var check = {
3383
+      primary: function primary(placement) {
3384
+        var value = popper[placement];
3385
+        if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
3386
+          value = Math.max(popper[placement], boundaries[placement]);
3387
+        }
3388
+        return defineProperty({}, placement, value);
3389
+      },
3390
+      secondary: function secondary(placement) {
3391
+        var mainSide = placement === 'right' ? 'left' : 'top';
3392
+        var value = popper[mainSide];
3393
+        if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
3394
+          value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
3395
+        }
3396
+        return defineProperty({}, mainSide, value);
3397
+      }
3398
+    };
3399
+
3400
+    order.forEach(function (placement) {
3401
+      var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
3402
+      popper = _extends({}, popper, check[side](placement));
3403
+    });
3404
+
3405
+    data.offsets.popper = popper;
3406
+
3407
+    return data;
3408
+  }
3409
+
3410
+  /**
3411
+   * @function
3412
+   * @memberof Modifiers
3413
+   * @argument {Object} data - The data object generated by `update` method
3414
+   * @argument {Object} options - Modifiers configuration and options
3415
+   * @returns {Object} The data object, properly modified
3416
+   */
3417
+  function shift(data) {
3418
+    var placement = data.placement;
3419
+    var basePlacement = placement.split('-')[0];
3420
+    var shiftvariation = placement.split('-')[1];
3421
+
3422
+    // if shift shiftvariation is specified, run the modifier
3423
+    if (shiftvariation) {
3424
+      var _data$offsets = data.offsets,
3425
+          reference = _data$offsets.reference,
3426
+          popper = _data$offsets.popper;
3427
+
3428
+      var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
3429
+      var side = isVertical ? 'left' : 'top';
3430
+      var measurement = isVertical ? 'width' : 'height';
3431
+
3432
+      var shiftOffsets = {
3433
+        start: defineProperty({}, side, reference[side]),
3434
+        end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
3435
+      };
3436
+
3437
+      data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
3438
+    }
3439
+
3440
+    return data;
3441
+  }
3442
+
3443
+  /**
3444
+   * @function
3445
+   * @memberof Modifiers
3446
+   * @argument {Object} data - The data object generated by update method
3447
+   * @argument {Object} options - Modifiers configuration and options
3448
+   * @returns {Object} The data object, properly modified
3449
+   */
3450
+  function hide(data) {
3451
+    if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
3452
+      return data;
3453
+    }
3454
+
3455
+    var refRect = data.offsets.reference;
3456
+    var bound = find(data.instance.modifiers, function (modifier) {
3457
+      return modifier.name === 'preventOverflow';
3458
+    }).boundaries;
3459
+
3460
+    if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
3461
+      // Avoid unnecessary DOM access if visibility hasn't changed
3462
+      if (data.hide === true) {
3463
+        return data;
3464
+      }
3465
+
3466
+      data.hide = true;
3467
+      data.attributes['x-out-of-boundaries'] = '';
3468
+    } else {
3469
+      // Avoid unnecessary DOM access if visibility hasn't changed
3470
+      if (data.hide === false) {
3471
+        return data;
3472
+      }
3473
+
3474
+      data.hide = false;
3475
+      data.attributes['x-out-of-boundaries'] = false;
3476
+    }
3477
+
3478
+    return data;
3479
+  }
3480
+
3481
+  /**
3482
+   * @function
3483
+   * @memberof Modifiers
3484
+   * @argument {Object} data - The data object generated by `update` method
3485
+   * @argument {Object} options - Modifiers configuration and options
3486
+   * @returns {Object} The data object, properly modified
3487
+   */
3488
+  function inner(data) {
3489
+    var placement = data.placement;
3490
+    var basePlacement = placement.split('-')[0];
3491
+    var _data$offsets = data.offsets,
3492
+        popper = _data$offsets.popper,
3493
+        reference = _data$offsets.reference;
3494
+
3495
+    var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
3496
+
3497
+    var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
3498
+
3499
+    popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
3500
+
3501
+    data.placement = getOppositePlacement(placement);
3502
+    data.offsets.popper = getClientRect(popper);
3503
+
3504
+    return data;
3505
+  }
3506
+
3507
+  /**
3508
+   * Modifier function, each modifier can have a function of this type assigned
3509
+   * to its `fn` property.<br />
3510
+   * These functions will be called on each update, this means that you must
3511
+   * make sure they are performant enough to avoid performance bottlenecks.
3512
+   *
3513
+   * @function ModifierFn
3514
+   * @argument {dataObject} data - The data object generated by `update` method
3515
+   * @argument {Object} options - Modifiers configuration and options
3516
+   * @returns {dataObject} The data object, properly modified
3517
+   */
3518
+
3519
+  /**
3520
+   * Modifiers are plugins used to alter the behavior of your poppers.<br />
3521
+   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
3522
+   * needed by the library.
3523
+   *
3524
+   * Usually you don't want to override the `order`, `fn` and `onLoad` props.
3525
+   * All the other properties are configurations that could be tweaked.
3526
+   * @namespace modifiers
3527
+   */
3528
+  var modifiers = {
3529
+    /**
3530
+     * Modifier used to shift the popper on the start or end of its reference
3531
+     * element.<br />
3532
+     * It will read the variation of the `placement` property.<br />
3533
+     * It can be one either `-end` or `-start`.
3534
+     * @memberof modifiers
3535
+     * @inner
3536
+     */
3537
+    shift: {
3538
+      /** @prop {number} order=100 - Index used to define the order of execution */
3539
+      order: 100,
3540
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3541
+      enabled: true,
3542
+      /** @prop {ModifierFn} */
3543
+      fn: shift
3544
+    },
3545
+
3546
+    /**
3547
+     * The `offset` modifier can shift your popper on both its axis.
3548
+     *
3549
+     * It accepts the following units:
3550
+     * - `px` or unit-less, interpreted as pixels
3551
+     * - `%` or `%r`, percentage relative to the length of the reference element
3552
+     * - `%p`, percentage relative to the length of the popper element
3553
+     * - `vw`, CSS viewport width unit
3554
+     * - `vh`, CSS viewport height unit
3555
+     *
3556
+     * For length is intended the main axis relative to the placement of the popper.<br />
3557
+     * This means that if the placement is `top` or `bottom`, the length will be the
3558
+     * `width`. In case of `left` or `right`, it will be the `height`.
3559
+     *
3560
+     * You can provide a single value (as `Number` or `String`), or a pair of values
3561
+     * as `String` divided by a comma or one (or more) white spaces.<br />
3562
+     * The latter is a deprecated method because it leads to confusion and will be
3563
+     * removed in v2.<br />
3564
+     * Additionally, it accepts additions and subtractions between different units.
3565
+     * Note that multiplications and divisions aren't supported.
3566
+     *
3567
+     * Valid examples are:
3568
+     * ```
3569
+     * 10
3570
+     * '10%'
3571
+     * '10, 10'
3572
+     * '10%, 10'
3573
+     * '10 + 10%'
3574
+     * '10 - 5vh + 3%'
3575
+     * '-10px + 5vh, 5px - 6%'
3576
+     * ```
3577
+     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
3578
+     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
3579
+     * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).
3580
+     *
3581
+     * @memberof modifiers
3582
+     * @inner
3583
+     */
3584
+    offset: {
3585
+      /** @prop {number} order=200 - Index used to define the order of execution */
3586
+      order: 200,
3587
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3588
+      enabled: true,
3589
+      /** @prop {ModifierFn} */
3590
+      fn: offset,
3591
+      /** @prop {Number|String} offset=0
3592
+       * The offset value as described in the modifier description
3593
+       */
3594
+      offset: 0
3595
+    },
3596
+
3597
+    /**
3598
+     * Modifier used to prevent the popper from being positioned outside the boundary.
3599
+     *
3600
+     * A scenario exists where the reference itself is not within the boundaries.<br />
3601
+     * We can say it has "escaped the boundaries" — or just "escaped".<br />
3602
+     * In this case we need to decide whether the popper should either:
3603
+     *
3604
+     * - detach from the reference and remain "trapped" in the boundaries, or
3605
+     * - if it should ignore the boundary and "escape with its reference"
3606
+     *
3607
+     * When `escapeWithReference` is set to`true` and reference is completely
3608
+     * outside its boundaries, the popper will overflow (or completely leave)
3609
+     * the boundaries in order to remain attached to the edge of the reference.
3610
+     *
3611
+     * @memberof modifiers
3612
+     * @inner
3613
+     */
3614
+    preventOverflow: {
3615
+      /** @prop {number} order=300 - Index used to define the order of execution */
3616
+      order: 300,
3617
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3618
+      enabled: true,
3619
+      /** @prop {ModifierFn} */
3620
+      fn: preventOverflow,
3621
+      /**
3622
+       * @prop {Array} [priority=['left','right','top','bottom']]
3623
+       * Popper will try to prevent overflow following these priorities by default,
3624
+       * then, it could overflow on the left and on top of the `boundariesElement`
3625
+       */
3626
+      priority: ['left', 'right', 'top', 'bottom'],
3627
+      /**
3628
+       * @prop {number} padding=5
3629
+       * Amount of pixel used to define a minimum distance between the boundaries
3630
+       * and the popper. This makes sure the popper always has a little padding
3631
+       * between the edges of its container
3632
+       */
3633
+      padding: 5,
3634
+      /**
3635
+       * @prop {String|HTMLElement} boundariesElement='scrollParent'
3636
+       * Boundaries used by the modifier. Can be `scrollParent`, `window`,
3637
+       * `viewport` or any DOM element.
3638
+       */
3639
+      boundariesElement: 'scrollParent'
3640
+    },
3641
+
3642
+    /**
3643
+     * Modifier used to make sure the reference and its popper stay near each other
3644
+     * without leaving any gap between the two. Especially useful when the arrow is
3645
+     * enabled and you want to ensure that it points to its reference element.
3646
+     * It cares only about the first axis. You can still have poppers with margin
3647
+     * between the popper and its reference element.
3648
+     * @memberof modifiers
3649
+     * @inner
3650
+     */
3651
+    keepTogether: {
3652
+      /** @prop {number} order=400 - Index used to define the order of execution */
3653
+      order: 400,
3654
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3655
+      enabled: true,
3656
+      /** @prop {ModifierFn} */
3657
+      fn: keepTogether
3658
+    },
3659
+
3660
+    /**
3661
+     * This modifier is used to move the `arrowElement` of the popper to make
3662
+     * sure it is positioned between the reference element and its popper element.
3663
+     * It will read the outer size of the `arrowElement` node to detect how many
3664
+     * pixels of conjunction are needed.
3665
+     *
3666
+     * It has no effect if no `arrowElement` is provided.
3667
+     * @memberof modifiers
3668
+     * @inner
3669
+     */
3670
+    arrow: {
3671
+      /** @prop {number} order=500 - Index used to define the order of execution */
3672
+      order: 500,
3673
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3674
+      enabled: true,
3675
+      /** @prop {ModifierFn} */
3676
+      fn: arrow,
3677
+      /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
3678
+      element: '[x-arrow]'
3679
+    },
3680
+
3681
+    /**
3682
+     * Modifier used to flip the popper's placement when it starts to overlap its
3683
+     * reference element.
3684
+     *
3685
+     * Requires the `preventOverflow` modifier before it in order to work.
3686
+     *
3687
+     * **NOTE:** this modifier will interrupt the current update cycle and will
3688
+     * restart it if it detects the need to flip the placement.
3689
+     * @memberof modifiers
3690
+     * @inner
3691
+     */
3692
+    flip: {
3693
+      /** @prop {number} order=600 - Index used to define the order of execution */
3694
+      order: 600,
3695
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3696
+      enabled: true,
3697
+      /** @prop {ModifierFn} */
3698
+      fn: flip,
3699
+      /**
3700
+       * @prop {String|Array} behavior='flip'
3701
+       * The behavior used to change the popper's placement. It can be one of
3702
+       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
3703
+       * placements (with optional variations)
3704
+       */
3705
+      behavior: 'flip',
3706
+      /**
3707
+       * @prop {number} padding=5
3708
+       * The popper will flip if it hits the edges of the `boundariesElement`
3709
+       */
3710
+      padding: 5,
3711
+      /**
3712
+       * @prop {String|HTMLElement} boundariesElement='viewport'
3713
+       * The element which will define the boundaries of the popper position.
3714
+       * The popper will never be placed outside of the defined boundaries
3715
+       * (except if `keepTogether` is enabled)
3716
+       */
3717
+      boundariesElement: 'viewport'
3718
+    },
3719
+
3720
+    /**
3721
+     * Modifier used to make the popper flow toward the inner of the reference element.
3722
+     * By default, when this modifier is disabled, the popper will be placed outside
3723
+     * the reference element.
3724
+     * @memberof modifiers
3725
+     * @inner
3726
+     */
3727
+    inner: {
3728
+      /** @prop {number} order=700 - Index used to define the order of execution */
3729
+      order: 700,
3730
+      /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
3731
+      enabled: false,
3732
+      /** @prop {ModifierFn} */
3733
+      fn: inner
3734
+    },
3735
+
3736
+    /**
3737
+     * Modifier used to hide the popper when its reference element is outside of the
3738
+     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
3739
+     * be used to hide with a CSS selector the popper when its reference is
3740
+     * out of boundaries.
3741
+     *
3742
+     * Requires the `preventOverflow` modifier before it in order to work.
3743
+     * @memberof modifiers
3744
+     * @inner
3745
+     */
3746
+    hide: {
3747
+      /** @prop {number} order=800 - Index used to define the order of execution */
3748
+      order: 800,
3749
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3750
+      enabled: true,
3751
+      /** @prop {ModifierFn} */
3752
+      fn: hide
3753
+    },
3754
+
3755
+    /**
3756
+     * Computes the style that will be applied to the popper element to gets
3757
+     * properly positioned.
3758
+     *
3759
+     * Note that this modifier will not touch the DOM, it just prepares the styles
3760
+     * so that `applyStyle` modifier can apply it. This separation is useful
3761
+     * in case you need to replace `applyStyle` with a custom implementation.
3762
+     *
3763
+     * This modifier has `850` as `order` value to maintain backward compatibility
3764
+     * with previous versions of Popper.js. Expect the modifiers ordering method
3765
+     * to change in future major versions of the library.
3766
+     *
3767
+     * @memberof modifiers
3768
+     * @inner
3769
+     */
3770
+    computeStyle: {
3771
+      /** @prop {number} order=850 - Index used to define the order of execution */
3772
+      order: 850,
3773
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3774
+      enabled: true,
3775
+      /** @prop {ModifierFn} */
3776
+      fn: computeStyle,
3777
+      /**
3778
+       * @prop {Boolean} gpuAcceleration=true
3779
+       * If true, it uses the CSS 3D transformation to position the popper.
3780
+       * Otherwise, it will use the `top` and `left` properties
3781
+       */
3782
+      gpuAcceleration: true,
3783
+      /**
3784
+       * @prop {string} [x='bottom']
3785
+       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
3786
+       * Change this if your popper should grow in a direction different from `bottom`
3787
+       */
3788
+      x: 'bottom',
3789
+      /**
3790
+       * @prop {string} [x='left']
3791
+       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
3792
+       * Change this if your popper should grow in a direction different from `right`
3793
+       */
3794
+      y: 'right'
3795
+    },
3796
+
3797
+    /**
3798
+     * Applies the computed styles to the popper element.
3799
+     *
3800
+     * All the DOM manipulations are limited to this modifier. This is useful in case
3801
+     * you want to integrate Popper.js inside a framework or view library and you
3802
+     * want to delegate all the DOM manipulations to it.
3803
+     *
3804
+     * Note that if you disable this modifier, you must make sure the popper element
3805
+     * has its position set to `absolute` before Popper.js can do its work!
3806
+     *
3807
+     * Just disable this modifier and define your own to achieve the desired effect.
3808
+     *
3809
+     * @memberof modifiers
3810
+     * @inner
3811
+     */
3812
+    applyStyle: {
3813
+      /** @prop {number} order=900 - Index used to define the order of execution */
3814
+      order: 900,
3815
+      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
3816
+      enabled: true,
3817
+      /** @prop {ModifierFn} */
3818
+      fn: applyStyle,
3819
+      /** @prop {Function} */
3820
+      onLoad: applyStyleOnLoad,
3821
+      /**
3822
+       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
3823
+       * @prop {Boolean} gpuAcceleration=true
3824
+       * If true, it uses the CSS 3D transformation to position the popper.
3825
+       * Otherwise, it will use the `top` and `left` properties
3826
+       */
3827
+      gpuAcceleration: undefined
3828
+    }
3829
+  };
3830
+
3831
+  /**
3832
+   * The `dataObject` is an object containing all the information used by Popper.js.
3833
+   * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
3834
+   * @name dataObject
3835
+   * @property {Object} data.instance The Popper.js instance
3836
+   * @property {String} data.placement Placement applied to popper
3837
+   * @property {String} data.originalPlacement Placement originally defined on init
3838
+   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
3839
+   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper
3840
+   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
3841
+   * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)
3842
+   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)
3843
+   * @property {Object} data.boundaries Offsets of the popper boundaries
3844
+   * @property {Object} data.offsets The measurements of popper, reference and arrow elements
3845
+   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
3846
+   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
3847
+   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
3848
+   */
3849
+
3850
+  /**
3851
+   * Default options provided to Popper.js constructor.<br />
3852
+   * These can be overridden using the `options` argument of Popper.js.<br />
3853
+   * To override an option, simply pass an object with the same
3854
+   * structure of the `options` object, as the 3rd argument. For example:
3855
+   * ```
3856
+   * new Popper(ref, pop, {
3857
+   *   modifiers: {
3858
+   *     preventOverflow: { enabled: false }
3859
+   *   }
3860
+   * })
3861
+   * ```
3862
+   * @type {Object}
3863
+   * @static
3864
+   * @memberof Popper
3865
+   */
3866
+  var Defaults = {
3867
+    /**
3868
+     * Popper's placement.
3869
+     * @prop {Popper.placements} placement='bottom'
3870
+     */
3871
+    placement: 'bottom',
3872
+
3873
+    /**
3874
+     * Set this to true if you want popper to position it self in 'fixed' mode
3875
+     * @prop {Boolean} positionFixed=false
3876
+     */
3877
+    positionFixed: false,
3878
+
3879
+    /**
3880
+     * Whether events (resize, scroll) are initially enabled.
3881
+     * @prop {Boolean} eventsEnabled=true
3882
+     */
3883
+    eventsEnabled: true,
3884
+
3885
+    /**
3886
+     * Set to true if you want to automatically remove the popper when
3887
+     * you call the `destroy` method.
3888
+     * @prop {Boolean} removeOnDestroy=false
3889
+     */
3890
+    removeOnDestroy: false,
3891
+
3892
+    /**
3893
+     * Callback called when the popper is created.<br />
3894
+     * By default, it is set to no-op.<br />
3895
+     * Access Popper.js instance with `data.instance`.
3896
+     * @prop {onCreate}
3897
+     */
3898
+    onCreate: function onCreate() {},
3899
+
3900
+    /**
3901
+     * Callback called when the popper is updated. This callback is not called
3902
+     * on the initialization/creation of the popper, but only on subsequent
3903
+     * updates.<br />
3904
+     * By default, it is set to no-op.<br />
3905
+     * Access Popper.js instance with `data.instance`.
3906
+     * @prop {onUpdate}
3907
+     */
3908
+    onUpdate: function onUpdate() {},
3909
+
3910
+    /**
3911
+     * List of modifiers used to modify the offsets before they are applied to the popper.
3912
+     * They provide most of the functionalities of Popper.js.
3913
+     * @prop {modifiers}
3914
+     */
3915
+    modifiers: modifiers
3916
+  };
3917
+
3918
+  /**
3919
+   * @callback onCreate
3920
+   * @param {dataObject} data
3921
+   */
3922
+
3923
+  /**
3924
+   * @callback onUpdate
3925
+   * @param {dataObject} data
3926
+   */
3927
+
3928
+  // Utils
3929
+  // Methods
3930
+  var Popper = function () {
3931
+    /**
3932
+     * Creates a new Popper.js instance.
3933
+     * @class Popper
3934
+     * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper
3935
+     * @param {HTMLElement} popper - The HTML element used as the popper
3936
+     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
3937
+     * @return {Object} instance - The generated Popper.js instance
3938
+     */
3939
+    function Popper(reference, popper) {
3940
+      var _this = this;
3941
+
3942
+      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
3943
+      classCallCheck(this, Popper);
3944
+
3945
+      this.scheduleUpdate = function () {
3946
+        return requestAnimationFrame(_this.update);
3947
+      };
3948
+
3949
+      // make update() debounced, so that it only runs at most once-per-tick
3950
+      this.update = debounce(this.update.bind(this));
3951
+
3952
+      // with {} we create a new object with the options inside it
3953
+      this.options = _extends({}, Popper.Defaults, options);
3954
+
3955
+      // init state
3956
+      this.state = {
3957
+        isDestroyed: false,
3958
+        isCreated: false,
3959
+        scrollParents: []
3960
+      };
3961
+
3962
+      // get reference and popper elements (allow jQuery wrappers)
3963
+      this.reference = reference && reference.jquery ? reference[0] : reference;
3964
+      this.popper = popper && popper.jquery ? popper[0] : popper;
3965
+
3966
+      // Deep merge modifiers options
3967
+      this.options.modifiers = {};
3968
+      Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
3969
+        _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
3970
+      });
3971
+
3972
+      // Refactoring modifiers' list (Object => Array)
3973
+      this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
3974
+        return _extends({
3975
+          name: name
3976
+        }, _this.options.modifiers[name]);
3977
+      })
3978
+      // sort the modifiers by order
3979
+      .sort(function (a, b) {
3980
+        return a.order - b.order;
3981
+      });
3982
+
3983
+      // modifiers have the ability to execute arbitrary code when Popper.js get inited
3984
+      // such code is executed in the same order of its modifier
3985
+      // they could add new properties to their options configuration
3986
+      // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
3987
+      this.modifiers.forEach(function (modifierOptions) {
3988
+        if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
3989
+          modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
3990
+        }
3991
+      });
3992
+
3993
+      // fire the first update to position the popper in the right place
3994
+      this.update();
3995
+
3996
+      var eventsEnabled = this.options.eventsEnabled;
3997
+      if (eventsEnabled) {
3998
+        // setup event listeners, they will take care of update the position in specific situations
3999
+        this.enableEventListeners();
4000
+      }
4001
+
4002
+      this.state.eventsEnabled = eventsEnabled;
4003
+    }
4004
+
4005
+    // We can't use class properties because they don't get listed in the
4006
+    // class prototype and break stuff like Sinon stubs
4007
+
4008
+
4009
+    createClass(Popper, [{
4010
+      key: 'update',
4011
+      value: function update$$1() {
4012
+        return update.call(this);
4013
+      }
4014
+    }, {
4015
+      key: 'destroy',
4016
+      value: function destroy$$1() {
4017
+        return destroy.call(this);
4018
+      }
4019
+    }, {
4020
+      key: 'enableEventListeners',
4021
+      value: function enableEventListeners$$1() {
4022
+        return enableEventListeners.call(this);
4023
+      }
4024
+    }, {
4025
+      key: 'disableEventListeners',
4026
+      value: function disableEventListeners$$1() {
4027
+        return disableEventListeners.call(this);
4028
+      }
4029
+
4030
+      /**
4031
+       * Schedules an update. It will run on the next UI update available.
4032
+       * @method scheduleUpdate
4033
+       * @memberof Popper
4034
+       */
4035
+
4036
+
4037
+      /**
4038
+       * Collection of utilities useful when writing custom modifiers.
4039
+       * Starting from version 1.7, this method is available only if you
4040
+       * include `popper-utils.js` before `popper.js`.
4041
+       *
4042
+       * **DEPRECATION**: This way to access PopperUtils is deprecated
4043
+       * and will be removed in v2! Use the PopperUtils module directly instead.
4044
+       * Due to the high instability of the methods contained in Utils, we can't
4045
+       * guarantee them to follow semver. Use them at your own risk!
4046
+       * @static
4047
+       * @private
4048
+       * @type {Object}
4049
+       * @deprecated since version 1.8
4050
+       * @member Utils
4051
+       * @memberof Popper
4052
+       */
4053
+
4054
+    }]);
4055
+    return Popper;
4056
+  }();
4057
+
4058
+  /**
4059
+   * The `referenceObject` is an object that provides an interface compatible with Popper.js
4060
+   * and lets you use it as replacement of a real DOM node.<br />
4061
+   * You can use this method to position a popper relatively to a set of coordinates
4062
+   * in case you don't have a DOM node to use as reference.
4063
+   *
4064
+   * ```
4065
+   * new Popper(referenceObject, popperNode);
4066
+   * ```
4067
+   *
4068
+   * NB: This feature isn't supported in Internet Explorer 10.
4069
+   * @name referenceObject
4070
+   * @property {Function} data.getBoundingClientRect
4071
+   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
4072
+   * @property {number} data.clientWidth
4073
+   * An ES6 getter that will return the width of the virtual reference element.
4074
+   * @property {number} data.clientHeight
4075
+   * An ES6 getter that will return the height of the virtual reference element.
4076
+   */
4077
+
4078
+
4079
+  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
4080
+  Popper.placements = placements;
4081
+  Popper.Defaults = Defaults;
4082
+
4083
+  /**
4084
+   * ------------------------------------------------------------------------
4085
+   * Constants
4086
+   * ------------------------------------------------------------------------
4087
+   */
4088
+
4089
+  var NAME$4 = 'dropdown';
4090
+  var VERSION$4 = '4.3.1';
4091
+  var DATA_KEY$4 = 'bs.dropdown';
4092
+  var EVENT_KEY$4 = "." + DATA_KEY$4;
4093
+  var DATA_API_KEY$4 = '.data-api';
4094
+  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];
4095
+  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
4096
+
4097
+  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
4098
+
4099
+  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
4100
+
4101
+  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
4102
+
4103
+  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
4104
+
4105
+  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
4106
+
4107
+  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
4108
+  var Event$4 = {
4109
+    HIDE: "hide" + EVENT_KEY$4,
4110
+    HIDDEN: "hidden" + EVENT_KEY$4,
4111
+    SHOW: "show" + EVENT_KEY$4,
4112
+    SHOWN: "shown" + EVENT_KEY$4,
4113
+    CLICK: "click" + EVENT_KEY$4,
4114
+    CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4,
4115
+    KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4,
4116
+    KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4
4117
+  };
4118
+  var ClassName$4 = {
4119
+    DISABLED: 'disabled',
4120
+    SHOW: 'show',
4121
+    DROPUP: 'dropup',
4122
+    DROPRIGHT: 'dropright',
4123
+    DROPLEFT: 'dropleft',
4124
+    MENURIGHT: 'dropdown-menu-right',
4125
+    MENULEFT: 'dropdown-menu-left',
4126
+    POSITION_STATIC: 'position-static'
4127
+  };
4128
+  var Selector$4 = {
4129
+    DATA_TOGGLE: '[data-toggle="dropdown"]',
4130
+    FORM_CHILD: '.dropdown form',
4131
+    MENU: '.dropdown-menu',
4132
+    NAVBAR_NAV: '.navbar-nav',
4133
+    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
4134
+  };
4135
+  var AttachmentMap = {
4136
+    TOP: 'top-start',
4137
+    TOPEND: 'top-end',
4138
+    BOTTOM: 'bottom-start',
4139
+    BOTTOMEND: 'bottom-end',
4140
+    RIGHT: 'right-start',
4141
+    RIGHTEND: 'right-end',
4142
+    LEFT: 'left-start',
4143
+    LEFTEND: 'left-end'
4144
+  };
4145
+  var Default$2 = {
4146
+    offset: 0,
4147
+    flip: true,
4148
+    boundary: 'scrollParent',
4149
+    reference: 'toggle',
4150
+    display: 'dynamic'
4151
+  };
4152
+  var DefaultType$2 = {
4153
+    offset: '(number|string|function)',
4154
+    flip: 'boolean',
4155
+    boundary: '(string|element)',
4156
+    reference: '(string|element)',
4157
+    display: 'string'
4158
+    /**
4159
+     * ------------------------------------------------------------------------
4160
+     * Class Definition
4161
+     * ------------------------------------------------------------------------
4162
+     */
4163
+
4164
+  };
4165
+
4166
+  var Dropdown =
4167
+  /*#__PURE__*/
4168
+  function () {
4169
+    function Dropdown(element, config) {
4170
+      this._element = element;
4171
+      this._popper = null;
4172
+      this._config = this._getConfig(config);
4173
+      this._menu = this._getMenuElement();
4174
+      this._inNavbar = this._detectNavbar();
4175
+
4176
+      this._addEventListeners();
4177
+    } // Getters
4178
+
4179
+
4180
+    var _proto = Dropdown.prototype;
4181
+
4182
+    // Public
4183
+    _proto.toggle = function toggle() {
4184
+      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {
4185
+        return;
4186
+      }
4187
+
4188
+      var parent = Dropdown._getParentFromElement(this._element);
4189
+
4190
+      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);
4191
+
4192
+      Dropdown._clearMenus();
4193
+
4194
+      if (isActive) {
4195
+        return;
4196
+      }
4197
+
4198
+      var relatedTarget = {
4199
+        relatedTarget: this._element
4200
+      };
4201
+      var showEvent = $.Event(Event$4.SHOW, relatedTarget);
4202
+      $(parent).trigger(showEvent);
4203
+
4204
+      if (showEvent.isDefaultPrevented()) {
4205
+        return;
4206
+      } // Disable totally Popper.js for Dropdown in Navbar
4207
+
4208
+
4209
+      if (!this._inNavbar) {
4210
+        /**
4211
+         * Check for Popper dependency
4212
+         * Popper - https://popper.js.org
4213
+         */
4214
+        if (typeof Popper === 'undefined') {
4215
+          throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
4216
+        }
4217
+
4218
+        var referenceElement = this._element;
4219
+
4220
+        if (this._config.reference === 'parent') {
4221
+          referenceElement = parent;
4222
+        } else if (Util.isElement(this._config.reference)) {
4223
+          referenceElement = this._config.reference; // Check if it's jQuery element
4224
+
4225
+          if (typeof this._config.reference.jquery !== 'undefined') {
4226
+            referenceElement = this._config.reference[0];
4227
+          }
4228
+        } // If boundary is not `scrollParent`, then set position to `static`
4229
+        // to allow the menu to "escape" the scroll parent's boundaries
4230
+        // https://github.com/twbs/bootstrap/issues/24251
4231
+
4232
+
4233
+        if (this._config.boundary !== 'scrollParent') {
4234
+          $(parent).addClass(ClassName$4.POSITION_STATIC);
4235
+        }
4236
+
4237
+        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
4238
+      } // If this is a touch-enabled device we add extra
4239
+      // empty mouseover listeners to the body's immediate children;
4240
+      // only needed because of broken event delegation on iOS
4241
+      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
4242
+
4243
+
4244
+      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {
4245
+        $(document.body).children().on('mouseover', null, $.noop);
4246
+      }
4247
+
4248
+      this._element.focus();
4249
+
4250
+      this._element.setAttribute('aria-expanded', true);
4251
+
4252
+      $(this._menu).toggleClass(ClassName$4.SHOW);
4253
+      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));
4254
+    };
4255
+
4256
+    _proto.show = function show() {
4257
+      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {
4258
+        return;
4259
+      }
4260
+
4261
+      var relatedTarget = {
4262
+        relatedTarget: this._element
4263
+      };
4264
+      var showEvent = $.Event(Event$4.SHOW, relatedTarget);
4265
+
4266
+      var parent = Dropdown._getParentFromElement(this._element);
4267
+
4268
+      $(parent).trigger(showEvent);
4269
+
4270
+      if (showEvent.isDefaultPrevented()) {
4271
+        return;
4272
+      }
4273
+
4274
+      $(this._menu).toggleClass(ClassName$4.SHOW);
4275
+      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));
4276
+    };
4277
+
4278
+    _proto.hide = function hide() {
4279
+      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {
4280
+        return;
4281
+      }
4282
+
4283
+      var relatedTarget = {
4284
+        relatedTarget: this._element
4285
+      };
4286
+      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
4287
+
4288
+      var parent = Dropdown._getParentFromElement(this._element);
4289
+
4290
+      $(parent).trigger(hideEvent);
4291
+
4292
+      if (hideEvent.isDefaultPrevented()) {
4293
+        return;
4294
+      }
4295
+
4296
+      $(this._menu).toggleClass(ClassName$4.SHOW);
4297
+      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
4298
+    };
4299
+
4300
+    _proto.dispose = function dispose() {
4301
+      $.removeData(this._element, DATA_KEY$4);
4302
+      $(this._element).off(EVENT_KEY$4);
4303
+      this._element = null;
4304
+      this._menu = null;
4305
+
4306
+      if (this._popper !== null) {
4307
+        this._popper.destroy();
4308
+
4309
+        this._popper = null;
4310
+      }
4311
+    };
4312
+
4313
+    _proto.update = function update() {
4314
+      this._inNavbar = this._detectNavbar();
4315
+
4316
+      if (this._popper !== null) {
4317
+        this._popper.scheduleUpdate();
4318
+      }
4319
+    } // Private
4320
+    ;
4321
+
4322
+    _proto._addEventListeners = function _addEventListeners() {
4323
+      var _this = this;
4324
+
4325
+      $(this._element).on(Event$4.CLICK, function (event) {
4326
+        event.preventDefault();
4327
+        event.stopPropagation();
4328
+
4329
+        _this.toggle();
4330
+      });
4331
+    };
4332
+
4333
+    _proto._getConfig = function _getConfig(config) {
4334
+      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);
4335
+      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
4336
+      return config;
4337
+    };
4338
+
4339
+    _proto._getMenuElement = function _getMenuElement() {
4340
+      if (!this._menu) {
4341
+        var parent = Dropdown._getParentFromElement(this._element);
4342
+
4343
+        if (parent) {
4344
+          this._menu = parent.querySelector(Selector$4.MENU);
4345
+        }
4346
+      }
4347
+
4348
+      return this._menu;
4349
+    };
4350
+
4351
+    _proto._getPlacement = function _getPlacement() {
4352
+      var $parentDropdown = $(this._element.parentNode);
4353
+      var placement = AttachmentMap.BOTTOM; // Handle dropup
4354
+
4355
+      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {
4356
+        placement = AttachmentMap.TOP;
4357
+
4358
+        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
4359
+          placement = AttachmentMap.TOPEND;
4360
+        }
4361
+      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {
4362
+        placement = AttachmentMap.RIGHT;
4363
+      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {
4364
+        placement = AttachmentMap.LEFT;
4365
+      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
4366
+        placement = AttachmentMap.BOTTOMEND;
4367
+      }
4368
+
4369
+      return placement;
4370
+    };
4371
+
4372
+    _proto._detectNavbar = function _detectNavbar() {
4373
+      return $(this._element).closest('.navbar').length > 0;
4374
+    };
4375
+
4376
+    _proto._getOffset = function _getOffset() {
4377
+      var _this2 = this;
4378
+
4379
+      var offset = {};
4380
+
4381
+      if (typeof this._config.offset === 'function') {
4382
+        offset.fn = function (data) {
4383
+          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
4384
+          return data;
4385
+        };
4386
+      } else {
4387
+        offset.offset = this._config.offset;
4388
+      }
4389
+
4390
+      return offset;
4391
+    };
4392
+
4393
+    _proto._getPopperConfig = function _getPopperConfig() {
4394
+      var popperConfig = {
4395
+        placement: this._getPlacement(),
4396
+        modifiers: {
4397
+          offset: this._getOffset(),
4398
+          flip: {
4399
+            enabled: this._config.flip
4400
+          },
4401
+          preventOverflow: {
4402
+            boundariesElement: this._config.boundary
4403
+          }
4404
+        } // Disable Popper.js if we have a static display
4405
+
4406
+      };
4407
+
4408
+      if (this._config.display === 'static') {
4409
+        popperConfig.modifiers.applyStyle = {
4410
+          enabled: false
4411
+        };
4412
+      }
4413
+
4414
+      return popperConfig;
4415
+    } // Static
4416
+    ;
4417
+
4418
+    Dropdown._jQueryInterface = function _jQueryInterface(config) {
4419
+      return this.each(function () {
4420
+        var data = $(this).data(DATA_KEY$4);
4421
+
4422
+        var _config = typeof config === 'object' ? config : null;
4423
+
4424
+        if (!data) {
4425
+          data = new Dropdown(this, _config);
4426
+          $(this).data(DATA_KEY$4, data);
4427
+        }
4428
+
4429
+        if (typeof config === 'string') {
4430
+          if (typeof data[config] === 'undefined') {
4431
+            throw new TypeError("No method named \"" + config + "\"");
4432
+          }
4433
+
4434
+          data[config]();
4435
+        }
4436
+      });
4437
+    };
4438
+
4439
+    Dropdown._clearMenus = function _clearMenus(event) {
4440
+      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
4441
+        return;
4442
+      }
4443
+
4444
+      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));
4445
+
4446
+      for (var i = 0, len = toggles.length; i < len; i++) {
4447
+        var parent = Dropdown._getParentFromElement(toggles[i]);
4448
+
4449
+        var context = $(toggles[i]).data(DATA_KEY$4);
4450
+        var relatedTarget = {
4451
+          relatedTarget: toggles[i]
4452
+        };
4453
+
4454
+        if (event && event.type === 'click') {
4455
+          relatedTarget.clickEvent = event;
4456
+        }
4457
+
4458
+        if (!context) {
4459
+          continue;
4460
+        }
4461
+
4462
+        var dropdownMenu = context._menu;
4463
+
4464
+        if (!$(parent).hasClass(ClassName$4.SHOW)) {
4465
+          continue;
4466
+        }
4467
+
4468
+        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
4469
+          continue;
4470
+        }
4471
+
4472
+        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
4473
+        $(parent).trigger(hideEvent);
4474
+
4475
+        if (hideEvent.isDefaultPrevented()) {
4476
+          continue;
4477
+        } // If this is a touch-enabled device we remove the extra
4478
+        // empty mouseover listeners we added for iOS support
4479
+
4480
+
4481
+        if ('ontouchstart' in document.documentElement) {
4482
+          $(document.body).children().off('mouseover', null, $.noop);
4483
+        }
4484
+
4485
+        toggles[i].setAttribute('aria-expanded', 'false');
4486
+        $(dropdownMenu).removeClass(ClassName$4.SHOW);
4487
+        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
4488
+      }
4489
+    };
4490
+
4491
+    Dropdown._getParentFromElement = function _getParentFromElement(element) {
4492
+      var parent;
4493
+      var selector = Util.getSelectorFromElement(element);
4494
+
4495
+      if (selector) {
4496
+        parent = document.querySelector(selector);
4497
+      }
4498
+
4499
+      return parent || element.parentNode;
4500
+    } // eslint-disable-next-line complexity
4501
+    ;
4502
+
4503
+    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
4504
+      // If not input/textarea:
4505
+      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
4506
+      // If input/textarea:
4507
+      //  - If space key => not a dropdown command
4508
+      //  - If key is other than escape
4509
+      //    - If key is not up or down => not a dropdown command
4510
+      //    - If trigger inside the menu => not a dropdown command
4511
+      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
4512
+        return;
4513
+      }
4514
+
4515
+      event.preventDefault();
4516
+      event.stopPropagation();
4517
+
4518
+      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {
4519
+        return;
4520
+      }
4521
+
4522
+      var parent = Dropdown._getParentFromElement(this);
4523
+
4524
+      var isActive = $(parent).hasClass(ClassName$4.SHOW);
4525
+
4526
+      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
4527
+        if (event.which === ESCAPE_KEYCODE) {
4528
+          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);
4529
+          $(toggle).trigger('focus');
4530
+        }
4531
+
4532
+        $(this).trigger('click');
4533
+        return;
4534
+      }
4535
+
4536
+      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));
4537
+
4538
+      if (items.length === 0) {
4539
+        return;
4540
+      }
4541
+
4542
+      var index = items.indexOf(event.target);
4543
+
4544
+      if (event.which === ARROW_UP_KEYCODE && index > 0) {
4545
+        // Up
4546
+        index--;
4547
+      }
4548
+
4549
+      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
4550
+        // Down
4551
+        index++;
4552
+      }
4553
+
4554
+      if (index < 0) {
4555
+        index = 0;
4556
+      }
4557
+
4558
+      items[index].focus();
4559
+    };
4560
+
4561
+    _createClass(Dropdown, null, [{
4562
+      key: "VERSION",
4563
+      get: function get() {
4564
+        return VERSION$4;
4565
+      }
4566
+    }, {
4567
+      key: "Default",
4568
+      get: function get() {
4569
+        return Default$2;
4570
+      }
4571
+    }, {
4572
+      key: "DefaultType",
4573
+      get: function get() {
4574
+        return DefaultType$2;
4575
+      }
4576
+    }]);
4577
+
4578
+    return Dropdown;
4579
+  }();
4580
+  /**
4581
+   * ------------------------------------------------------------------------
4582
+   * Data Api implementation
4583
+   * ------------------------------------------------------------------------
4584
+   */
4585
+
4586
+
4587
+  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {
4588
+    event.preventDefault();
4589
+    event.stopPropagation();
4590
+
4591
+    Dropdown._jQueryInterface.call($(this), 'toggle');
4592
+  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {
4593
+    e.stopPropagation();
4594
+  });
4595
+  /**
4596
+   * ------------------------------------------------------------------------
4597
+   * jQuery
4598
+   * ------------------------------------------------------------------------
4599
+   */
4600
+
4601
+  $.fn[NAME$4] = Dropdown._jQueryInterface;
4602
+  $.fn[NAME$4].Constructor = Dropdown;
4603
+
4604
+  $.fn[NAME$4].noConflict = function () {
4605
+    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;
4606
+    return Dropdown._jQueryInterface;
4607
+  };
4608
+
4609
+  /**
4610
+   * ------------------------------------------------------------------------
4611
+   * Constants
4612
+   * ------------------------------------------------------------------------
4613
+   */
4614
+
4615
+  var NAME$5 = 'modal';
4616
+  var VERSION$5 = '4.3.1';
4617
+  var DATA_KEY$5 = 'bs.modal';
4618
+  var EVENT_KEY$5 = "." + DATA_KEY$5;
4619
+  var DATA_API_KEY$5 = '.data-api';
4620
+  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];
4621
+  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
4622
+
4623
+  var Default$3 = {
4624
+    backdrop: true,
4625
+    keyboard: true,
4626
+    focus: true,
4627
+    show: true
4628
+  };
4629
+  var DefaultType$3 = {
4630
+    backdrop: '(boolean|string)',
4631
+    keyboard: 'boolean',
4632
+    focus: 'boolean',
4633
+    show: 'boolean'
4634
+  };
4635
+  var Event$5 = {
4636
+    HIDE: "hide" + EVENT_KEY$5,
4637
+    HIDDEN: "hidden" + EVENT_KEY$5,
4638
+    SHOW: "show" + EVENT_KEY$5,
4639
+    SHOWN: "shown" + EVENT_KEY$5,
4640
+    FOCUSIN: "focusin" + EVENT_KEY$5,
4641
+    RESIZE: "resize" + EVENT_KEY$5,
4642
+    CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5,
4643
+    KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5,
4644
+    MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5,
4645
+    MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5,
4646
+    CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
4647
+  };
4648
+  var ClassName$5 = {
4649
+    SCROLLABLE: 'modal-dialog-scrollable',
4650
+    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
4651
+    BACKDROP: 'modal-backdrop',
4652
+    OPEN: 'modal-open',
4653
+    FADE: 'fade',
4654
+    SHOW: 'show'
4655
+  };
4656
+  var Selector$5 = {
4657
+    DIALOG: '.modal-dialog',
4658
+    MODAL_BODY: '.modal-body',
4659
+    DATA_TOGGLE: '[data-toggle="modal"]',
4660
+    DATA_DISMISS: '[data-dismiss="modal"]',
4661
+    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
4662
+    STICKY_CONTENT: '.sticky-top'
4663
+    /**
4664
+     * ------------------------------------------------------------------------
4665
+     * Class Definition
4666
+     * ------------------------------------------------------------------------
4667
+     */
4668
+
4669
+  };
4670
+
4671
+  var Modal =
4672
+  /*#__PURE__*/
4673
+  function () {
4674
+    function Modal(element, config) {
4675
+      this._config = this._getConfig(config);
4676
+      this._element = element;
4677
+      this._dialog = element.querySelector(Selector$5.DIALOG);
4678
+      this._backdrop = null;
4679
+      this._isShown = false;
4680
+      this._isBodyOverflowing = false;
4681
+      this._ignoreBackdropClick = false;
4682
+      this._isTransitioning = false;
4683
+      this._scrollbarWidth = 0;
4684
+    } // Getters
4685
+
4686
+
4687
+    var _proto = Modal.prototype;
4688
+
4689
+    // Public
4690
+    _proto.toggle = function toggle(relatedTarget) {
4691
+      return this._isShown ? this.hide() : this.show(relatedTarget);
4692
+    };
4693
+
4694
+    _proto.show = function show(relatedTarget) {
4695
+      var _this = this;
4696
+
4697
+      if (this._isShown || this._isTransitioning) {
4698
+        return;
4699
+      }
4700
+
4701
+      if ($(this._element).hasClass(ClassName$5.FADE)) {
4702
+        this._isTransitioning = true;
4703
+      }
4704
+
4705
+      var showEvent = $.Event(Event$5.SHOW, {
4706
+        relatedTarget: relatedTarget
4707
+      });
4708
+      $(this._element).trigger(showEvent);
4709
+
4710
+      if (this._isShown || showEvent.isDefaultPrevented()) {
4711
+        return;
4712
+      }
4713
+
4714
+      this._isShown = true;
4715
+
4716
+      this._checkScrollbar();
4717
+
4718
+      this._setScrollbar();
4719
+
4720
+      this._adjustDialog();
4721
+
4722
+      this._setEscapeEvent();
4723
+
4724
+      this._setResizeEvent();
4725
+
4726
+      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {
4727
+        return _this.hide(event);
4728
+      });
4729
+      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {
4730
+        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {
4731
+          if ($(event.target).is(_this._element)) {
4732
+            _this._ignoreBackdropClick = true;
4733
+          }
4734
+        });
4735
+      });
4736
+
4737
+      this._showBackdrop(function () {
4738
+        return _this._showElement(relatedTarget);
4739
+      });
4740
+    };
4741
+
4742
+    _proto.hide = function hide(event) {
4743
+      var _this2 = this;
4744
+
4745
+      if (event) {
4746
+        event.preventDefault();
4747
+      }
4748
+
4749
+      if (!this._isShown || this._isTransitioning) {
4750
+        return;
4751
+      }
4752
+
4753
+      var hideEvent = $.Event(Event$5.HIDE);
4754
+      $(this._element).trigger(hideEvent);
4755
+
4756
+      if (!this._isShown || hideEvent.isDefaultPrevented()) {
4757
+        return;
4758
+      }
4759
+
4760
+      this._isShown = false;
4761
+      var transition = $(this._element).hasClass(ClassName$5.FADE);
4762
+
4763
+      if (transition) {
4764
+        this._isTransitioning = true;
4765
+      }
4766
+
4767
+      this._setEscapeEvent();
4768
+
4769
+      this._setResizeEvent();
4770
+
4771
+      $(document).off(Event$5.FOCUSIN);
4772
+      $(this._element).removeClass(ClassName$5.SHOW);
4773
+      $(this._element).off(Event$5.CLICK_DISMISS);
4774
+      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);
4775
+
4776
+      if (transition) {
4777
+        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
4778
+        $(this._element).one(Util.TRANSITION_END, function (event) {
4779
+          return _this2._hideModal(event);
4780
+        }).emulateTransitionEnd(transitionDuration);
4781
+      } else {
4782
+        this._hideModal();
4783
+      }
4784
+    };
4785
+
4786
+    _proto.dispose = function dispose() {
4787
+      [window, this._element, this._dialog].forEach(function (htmlElement) {
4788
+        return $(htmlElement).off(EVENT_KEY$5);
4789
+      });
4790
+      /**
4791
+       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
4792
+       * Do not move `document` in `htmlElements` array
4793
+       * It will remove `Event.CLICK_DATA_API` event that should remain
4794
+       */
4795
+
4796
+      $(document).off(Event$5.FOCUSIN);
4797
+      $.removeData(this._element, DATA_KEY$5);
4798
+      this._config = null;
4799
+      this._element = null;
4800
+      this._dialog = null;
4801
+      this._backdrop = null;
4802
+      this._isShown = null;
4803
+      this._isBodyOverflowing = null;
4804
+      this._ignoreBackdropClick = null;
4805
+      this._isTransitioning = null;
4806
+      this._scrollbarWidth = null;
4807
+    };
4808
+
4809
+    _proto.handleUpdate = function handleUpdate() {
4810
+      this._adjustDialog();
4811
+    } // Private
4812
+    ;
4813
+
4814
+    _proto._getConfig = function _getConfig(config) {
4815
+      config = _objectSpread({}, Default$3, config);
4816
+      Util.typeCheckConfig(NAME$5, config, DefaultType$3);
4817
+      return config;
4818
+    };
4819
+
4820
+    _proto._showElement = function _showElement(relatedTarget) {
4821
+      var _this3 = this;
4822
+
4823
+      var transition = $(this._element).hasClass(ClassName$5.FADE);
4824
+
4825
+      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
4826
+        // Don't move modal's DOM position
4827
+        document.body.appendChild(this._element);
4828
+      }
4829
+
4830
+      this._element.style.display = 'block';
4831
+
4832
+      this._element.removeAttribute('aria-hidden');
4833
+
4834
+      this._element.setAttribute('aria-modal', true);
4835
+
4836
+      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
4837
+        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
4838
+      } else {
4839
+        this._element.scrollTop = 0;
4840
+      }
4841
+
4842
+      if (transition) {
4843
+        Util.reflow(this._element);
4844
+      }
4845
+
4846
+      $(this._element).addClass(ClassName$5.SHOW);
4847
+
4848
+      if (this._config.focus) {
4849
+        this._enforceFocus();
4850
+      }
4851
+
4852
+      var shownEvent = $.Event(Event$5.SHOWN, {
4853
+        relatedTarget: relatedTarget
4854
+      });
4855
+
4856
+      var transitionComplete = function transitionComplete() {
4857
+        if (_this3._config.focus) {
4858
+          _this3._element.focus();
4859
+        }
4860
+
4861
+        _this3._isTransitioning = false;
4862
+        $(_this3._element).trigger(shownEvent);
4863
+      };
4864
+
4865
+      if (transition) {
4866
+        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
4867
+        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
4868
+      } else {
4869
+        transitionComplete();
4870
+      }
4871
+    };
4872
+
4873
+    _proto._enforceFocus = function _enforceFocus() {
4874
+      var _this4 = this;
4875
+
4876
+      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop
4877
+      .on(Event$5.FOCUSIN, function (event) {
4878
+        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {
4879
+          _this4._element.focus();
4880
+        }
4881
+      });
4882
+    };
4883
+
4884
+    _proto._setEscapeEvent = function _setEscapeEvent() {
4885
+      var _this5 = this;
4886
+
4887
+      if (this._isShown && this._config.keyboard) {
4888
+        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {
4889
+          if (event.which === ESCAPE_KEYCODE$1) {
4890
+            event.preventDefault();
4891
+
4892
+            _this5.hide();
4893
+          }
4894
+        });
4895
+      } else if (!this._isShown) {
4896
+        $(this._element).off(Event$5.KEYDOWN_DISMISS);
4897
+      }
4898
+    };
4899
+
4900
+    _proto._setResizeEvent = function _setResizeEvent() {
4901
+      var _this6 = this;
4902
+
4903
+      if (this._isShown) {
4904
+        $(window).on(Event$5.RESIZE, function (event) {
4905
+          return _this6.handleUpdate(event);
4906
+        });
4907
+      } else {
4908
+        $(window).off(Event$5.RESIZE);
4909
+      }
4910
+    };
4911
+
4912
+    _proto._hideModal = function _hideModal() {
4913
+      var _this7 = this;
4914
+
4915
+      this._element.style.display = 'none';
4916
+
4917
+      this._element.setAttribute('aria-hidden', true);
4918
+
4919
+      this._element.removeAttribute('aria-modal');
4920
+
4921
+      this._isTransitioning = false;
4922
+
4923
+      this._showBackdrop(function () {
4924
+        $(document.body).removeClass(ClassName$5.OPEN);
4925
+
4926
+        _this7._resetAdjustments();
4927
+
4928
+        _this7._resetScrollbar();
4929
+
4930
+        $(_this7._element).trigger(Event$5.HIDDEN);
4931
+      });
4932
+    };
4933
+
4934
+    _proto._removeBackdrop = function _removeBackdrop() {
4935
+      if (this._backdrop) {
4936
+        $(this._backdrop).remove();
4937
+        this._backdrop = null;
4938
+      }
4939
+    };
4940
+
4941
+    _proto._showBackdrop = function _showBackdrop(callback) {
4942
+      var _this8 = this;
4943
+
4944
+      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';
4945
+
4946
+      if (this._isShown && this._config.backdrop) {
4947
+        this._backdrop = document.createElement('div');
4948
+        this._backdrop.className = ClassName$5.BACKDROP;
4949
+
4950
+        if (animate) {
4951
+          this._backdrop.classList.add(animate);
4952
+        }
4953
+
4954
+        $(this._backdrop).appendTo(document.body);
4955
+        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {
4956
+          if (_this8._ignoreBackdropClick) {
4957
+            _this8._ignoreBackdropClick = false;
4958
+            return;
4959
+          }
4960
+
4961
+          if (event.target !== event.currentTarget) {
4962
+            return;
4963
+          }
4964
+
4965
+          if (_this8._config.backdrop === 'static') {
4966
+            _this8._element.focus();
4967
+          } else {
4968
+            _this8.hide();
4969
+          }
4970
+        });
4971
+
4972
+        if (animate) {
4973
+          Util.reflow(this._backdrop);
4974
+        }
4975
+
4976
+        $(this._backdrop).addClass(ClassName$5.SHOW);
4977
+
4978
+        if (!callback) {
4979
+          return;
4980
+        }
4981
+
4982
+        if (!animate) {
4983
+          callback();
4984
+          return;
4985
+        }
4986
+
4987
+        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
4988
+        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
4989
+      } else if (!this._isShown && this._backdrop) {
4990
+        $(this._backdrop).removeClass(ClassName$5.SHOW);
4991
+
4992
+        var callbackRemove = function callbackRemove() {
4993
+          _this8._removeBackdrop();
4994
+
4995
+          if (callback) {
4996
+            callback();
4997
+          }
4998
+        };
4999
+
5000
+        if ($(this._element).hasClass(ClassName$5.FADE)) {
5001
+          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
5002
+
5003
+          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
5004
+        } else {
5005
+          callbackRemove();
5006
+        }
5007
+      } else if (callback) {
5008
+        callback();
5009
+      }
5010
+    } // ----------------------------------------------------------------------
5011
+    // the following methods are used to handle overflowing modals
5012
+    // todo (fat): these should probably be refactored out of modal.js
5013
+    // ----------------------------------------------------------------------
5014
+    ;
5015
+
5016
+    _proto._adjustDialog = function _adjustDialog() {
5017
+      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
5018
+
5019
+      if (!this._isBodyOverflowing && isModalOverflowing) {
5020
+        this._element.style.paddingLeft = this._scrollbarWidth + "px";
5021
+      }
5022
+
5023
+      if (this._isBodyOverflowing && !isModalOverflowing) {
5024
+        this._element.style.paddingRight = this._scrollbarWidth + "px";
5025
+      }
5026
+    };
5027
+
5028
+    _proto._resetAdjustments = function _resetAdjustments() {
5029
+      this._element.style.paddingLeft = '';
5030
+      this._element.style.paddingRight = '';
5031
+    };
5032
+
5033
+    _proto._checkScrollbar = function _checkScrollbar() {
5034
+      var rect = document.body.getBoundingClientRect();
5035
+      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
5036
+      this._scrollbarWidth = this._getScrollbarWidth();
5037
+    };
5038
+
5039
+    _proto._setScrollbar = function _setScrollbar() {
5040
+      var _this9 = this;
5041
+
5042
+      if (this._isBodyOverflowing) {
5043
+        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
5044
+        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
5045
+        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
5046
+        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding
5047
+
5048
+        $(fixedContent).each(function (index, element) {
5049
+          var actualPadding = element.style.paddingRight;
5050
+          var calculatedPadding = $(element).css('padding-right');
5051
+          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px");
5052
+        }); // Adjust sticky content margin
5053
+
5054
+        $(stickyContent).each(function (index, element) {
5055
+          var actualMargin = element.style.marginRight;
5056
+          var calculatedMargin = $(element).css('margin-right');
5057
+          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px");
5058
+        }); // Adjust body padding
5059
+
5060
+        var actualPadding = document.body.style.paddingRight;
5061
+        var calculatedPadding = $(document.body).css('padding-right');
5062
+        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
5063
+      }
5064
+
5065
+      $(document.body).addClass(ClassName$5.OPEN);
5066
+    };
5067
+
5068
+    _proto._resetScrollbar = function _resetScrollbar() {
5069
+      // Restore fixed content padding
5070
+      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
5071
+      $(fixedContent).each(function (index, element) {
5072
+        var padding = $(element).data('padding-right');
5073
+        $(element).removeData('padding-right');
5074
+        element.style.paddingRight = padding ? padding : '';
5075
+      }); // Restore sticky content
5076
+
5077
+      var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT));
5078
+      $(elements).each(function (index, element) {
5079
+        var margin = $(element).data('margin-right');
5080
+
5081
+        if (typeof margin !== 'undefined') {
5082
+          $(element).css('margin-right', margin).removeData('margin-right');
5083
+        }
5084
+      }); // Restore body padding
5085
+
5086
+      var padding = $(document.body).data('padding-right');
5087
+      $(document.body).removeData('padding-right');
5088
+      document.body.style.paddingRight = padding ? padding : '';
5089
+    };
5090
+
5091
+    _proto._getScrollbarWidth = function _getScrollbarWidth() {
5092
+      // thx d.walsh
5093
+      var scrollDiv = document.createElement('div');
5094
+      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;
5095
+      document.body.appendChild(scrollDiv);
5096
+      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
5097
+      document.body.removeChild(scrollDiv);
5098
+      return scrollbarWidth;
5099
+    } // Static
5100
+    ;
5101
+
5102
+    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
5103
+      return this.each(function () {
5104
+        var data = $(this).data(DATA_KEY$5);
5105
+
5106
+        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});
5107
+
5108
+        if (!data) {
5109
+          data = new Modal(this, _config);
5110
+          $(this).data(DATA_KEY$5, data);
5111
+        }
5112
+
5113
+        if (typeof config === 'string') {
5114
+          if (typeof data[config] === 'undefined') {
5115
+            throw new TypeError("No method named \"" + config + "\"");
5116
+          }
5117
+
5118
+          data[config](relatedTarget);
5119
+        } else if (_config.show) {
5120
+          data.show(relatedTarget);
5121
+        }
5122
+      });
5123
+    };
5124
+
5125
+    _createClass(Modal, null, [{
5126
+      key: "VERSION",
5127
+      get: function get() {
5128
+        return VERSION$5;
5129
+      }
5130
+    }, {
5131
+      key: "Default",
5132
+      get: function get() {
5133
+        return Default$3;
5134
+      }
5135
+    }]);
5136
+
5137
+    return Modal;
5138
+  }();
5139
+  /**
5140
+   * ------------------------------------------------------------------------
5141
+   * Data Api implementation
5142
+   * ------------------------------------------------------------------------
5143
+   */
5144
+
5145
+
5146
+  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {
5147
+    var _this10 = this;
5148
+
5149
+    var target;
5150
+    var selector = Util.getSelectorFromElement(this);
5151
+
5152
+    if (selector) {
5153
+      target = document.querySelector(selector);
5154
+    }
5155
+
5156
+    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());
5157
+
5158
+    if (this.tagName === 'A' || this.tagName === 'AREA') {
5159
+      event.preventDefault();
5160
+    }
5161
+
5162
+    var $target = $(target).one(Event$5.SHOW, function (showEvent) {
5163
+      if (showEvent.isDefaultPrevented()) {
5164
+        // Only register focus restorer if modal will actually get shown
5165
+        return;
5166
+      }
5167
+
5168
+      $target.one(Event$5.HIDDEN, function () {
5169
+        if ($(_this10).is(':visible')) {
5170
+          _this10.focus();
5171
+        }
5172
+      });
5173
+    });
5174
+
5175
+    Modal._jQueryInterface.call($(target), config, this);
5176
+  });
5177
+  /**
5178
+   * ------------------------------------------------------------------------
5179
+   * jQuery
5180
+   * ------------------------------------------------------------------------
5181
+   */
5182
+
5183
+  $.fn[NAME$5] = Modal._jQueryInterface;
5184
+  $.fn[NAME$5].Constructor = Modal;
5185
+
5186
+  $.fn[NAME$5].noConflict = function () {
5187
+    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;
5188
+    return Modal._jQueryInterface;
5189
+  };
5190
+
5191
+  /**
5192
+   * --------------------------------------------------------------------------
5193
+   * Bootstrap (v4.3.1): tools/sanitizer.js
5194
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5195
+   * --------------------------------------------------------------------------
5196
+   */
5197
+  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
5198
+  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
5199
+  var DefaultWhitelist = {
5200
+    // Global attributes allowed on any supplied element below.
5201
+    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
5202
+    a: ['target', 'href', 'title', 'rel'],
5203
+    area: [],
5204
+    b: [],
5205
+    br: [],
5206
+    col: [],
5207
+    code: [],
5208
+    div: [],
5209
+    em: [],
5210
+    hr: [],
5211
+    h1: [],
5212
+    h2: [],
5213
+    h3: [],
5214
+    h4: [],
5215
+    h5: [],
5216
+    h6: [],
5217
+    i: [],
5218
+    img: ['src', 'alt', 'title', 'width', 'height'],
5219
+    li: [],
5220
+    ol: [],
5221
+    p: [],
5222
+    pre: [],
5223
+    s: [],
5224
+    small: [],
5225
+    span: [],
5226
+    sub: [],
5227
+    sup: [],
5228
+    strong: [],
5229
+    u: [],
5230
+    ul: []
5231
+    /**
5232
+     * A pattern that recognizes a commonly useful subset of URLs that are safe.
5233
+     *
5234
+     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5235
+     */
5236
+
5237
+  };
5238
+  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
5239
+  /**
5240
+   * A pattern that matches safe data URLs. Only matches image, video and audio types.
5241
+   *
5242
+   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5243
+   */
5244
+
5245
+  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
5246
+
5247
+  function allowedAttribute(attr, allowedAttributeList) {
5248
+    var attrName = attr.nodeName.toLowerCase();
5249
+
5250
+    if (allowedAttributeList.indexOf(attrName) !== -1) {
5251
+      if (uriAttrs.indexOf(attrName) !== -1) {
5252
+        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
5253
+      }
5254
+
5255
+      return true;
5256
+    }
5257
+
5258
+    var regExp = allowedAttributeList.filter(function (attrRegex) {
5259
+      return attrRegex instanceof RegExp;
5260
+    }); // Check if a regular expression validates the attribute.
5261
+
5262
+    for (var i = 0, l = regExp.length; i < l; i++) {
5263
+      if (attrName.match(regExp[i])) {
5264
+        return true;
5265
+      }
5266
+    }
5267
+
5268
+    return false;
5269
+  }
5270
+
5271
+  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
5272
+    if (unsafeHtml.length === 0) {
5273
+      return unsafeHtml;
5274
+    }
5275
+
5276
+    if (sanitizeFn && typeof sanitizeFn === 'function') {
5277
+      return sanitizeFn(unsafeHtml);
5278
+    }
5279
+
5280
+    var domParser = new window.DOMParser();
5281
+    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
5282
+    var whitelistKeys = Object.keys(whiteList);
5283
+    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
5284
+
5285
+    var _loop = function _loop(i, len) {
5286
+      var el = elements[i];
5287
+      var elName = el.nodeName.toLowerCase();
5288
+
5289
+      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
5290
+        el.parentNode.removeChild(el);
5291
+        return "continue";
5292
+      }
5293
+
5294
+      var attributeList = [].slice.call(el.attributes);
5295
+      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
5296
+      attributeList.forEach(function (attr) {
5297
+        if (!allowedAttribute(attr, whitelistedAttributes)) {
5298
+          el.removeAttribute(attr.nodeName);
5299
+        }
5300
+      });
5301
+    };
5302
+
5303
+    for (var i = 0, len = elements.length; i < len; i++) {
5304
+      var _ret = _loop(i, len);
5305
+
5306
+      if (_ret === "continue") continue;
5307
+    }
5308
+
5309
+    return createdDocument.body.innerHTML;
5310
+  }
5311
+
5312
+  /**
5313
+   * ------------------------------------------------------------------------
5314
+   * Constants
5315
+   * ------------------------------------------------------------------------
5316
+   */
5317
+
5318
+  var NAME$6 = 'tooltip';
5319
+  var VERSION$6 = '4.3.1';
5320
+  var DATA_KEY$6 = 'bs.tooltip';
5321
+  var EVENT_KEY$6 = "." + DATA_KEY$6;
5322
+  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
5323
+  var CLASS_PREFIX = 'bs-tooltip';
5324
+  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
5325
+  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
5326
+  var DefaultType$4 = {
5327
+    animation: 'boolean',
5328
+    template: 'string',
5329
+    title: '(string|element|function)',
5330
+    trigger: 'string',
5331
+    delay: '(number|object)',
5332
+    html: 'boolean',
5333
+    selector: '(string|boolean)',
5334
+    placement: '(string|function)',
5335
+    offset: '(number|string|function)',
5336
+    container: '(string|element|boolean)',
5337
+    fallbackPlacement: '(string|array)',
5338
+    boundary: '(string|element)',
5339
+    sanitize: 'boolean',
5340
+    sanitizeFn: '(null|function)',
5341
+    whiteList: 'object'
5342
+  };
5343
+  var AttachmentMap$1 = {
5344
+    AUTO: 'auto',
5345
+    TOP: 'top',
5346
+    RIGHT: 'right',
5347
+    BOTTOM: 'bottom',
5348
+    LEFT: 'left'
5349
+  };
5350
+  var Default$4 = {
5351
+    animation: true,
5352
+    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
5353
+    trigger: 'hover focus',
5354
+    title: '',
5355
+    delay: 0,
5356
+    html: false,
5357
+    selector: false,
5358
+    placement: 'top',
5359
+    offset: 0,
5360
+    container: false,
5361
+    fallbackPlacement: 'flip',
5362
+    boundary: 'scrollParent',
5363
+    sanitize: true,
5364
+    sanitizeFn: null,
5365
+    whiteList: DefaultWhitelist
5366
+  };
5367
+  var HoverState = {
5368
+    SHOW: 'show',
5369
+    OUT: 'out'
5370
+  };
5371
+  var Event$6 = {
5372
+    HIDE: "hide" + EVENT_KEY$6,
5373
+    HIDDEN: "hidden" + EVENT_KEY$6,
5374
+    SHOW: "show" + EVENT_KEY$6,
5375
+    SHOWN: "shown" + EVENT_KEY$6,
5376
+    INSERTED: "inserted" + EVENT_KEY$6,
5377
+    CLICK: "click" + EVENT_KEY$6,
5378
+    FOCUSIN: "focusin" + EVENT_KEY$6,
5379
+    FOCUSOUT: "focusout" + EVENT_KEY$6,
5380
+    MOUSEENTER: "mouseenter" + EVENT_KEY$6,
5381
+    MOUSELEAVE: "mouseleave" + EVENT_KEY$6
5382
+  };
5383
+  var ClassName$6 = {
5384
+    FADE: 'fade',
5385
+    SHOW: 'show'
5386
+  };
5387
+  var Selector$6 = {
5388
+    TOOLTIP: '.tooltip',
5389
+    TOOLTIP_INNER: '.tooltip-inner',
5390
+    ARROW: '.arrow'
5391
+  };
5392
+  var Trigger = {
5393
+    HOVER: 'hover',
5394
+    FOCUS: 'focus',
5395
+    CLICK: 'click',
5396
+    MANUAL: 'manual'
5397
+    /**
5398
+     * ------------------------------------------------------------------------
5399
+     * Class Definition
5400
+     * ------------------------------------------------------------------------
5401
+     */
5402
+
5403
+  };
5404
+
5405
+  var Tooltip =
5406
+  /*#__PURE__*/
5407
+  function () {
5408
+    function Tooltip(element, config) {
5409
+      /**
5410
+       * Check for Popper dependency
5411
+       * Popper - https://popper.js.org
5412
+       */
5413
+      if (typeof Popper === 'undefined') {
5414
+        throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
5415
+      } // private
5416
+
5417
+
5418
+      this._isEnabled = true;
5419
+      this._timeout = 0;
5420
+      this._hoverState = '';
5421
+      this._activeTrigger = {};
5422
+      this._popper = null; // Protected
5423
+
5424
+      this.element = element;
5425
+      this.config = this._getConfig(config);
5426
+      this.tip = null;
5427
+
5428
+      this._setListeners();
5429
+    } // Getters
5430
+
5431
+
5432
+    var _proto = Tooltip.prototype;
5433
+
5434
+    // Public
5435
+    _proto.enable = function enable() {
5436
+      this._isEnabled = true;
5437
+    };
5438
+
5439
+    _proto.disable = function disable() {
5440
+      this._isEnabled = false;
5441
+    };
5442
+
5443
+    _proto.toggleEnabled = function toggleEnabled() {
5444
+      this._isEnabled = !this._isEnabled;
5445
+    };
5446
+
5447
+    _proto.toggle = function toggle(event) {
5448
+      if (!this._isEnabled) {
5449
+        return;
5450
+      }
5451
+
5452
+      if (event) {
5453
+        var dataKey = this.constructor.DATA_KEY;
5454
+        var context = $(event.currentTarget).data(dataKey);
5455
+
5456
+        if (!context) {
5457
+          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5458
+          $(event.currentTarget).data(dataKey, context);
5459
+        }
5460
+
5461
+        context._activeTrigger.click = !context._activeTrigger.click;
5462
+
5463
+        if (context._isWithActiveTrigger()) {
5464
+          context._enter(null, context);
5465
+        } else {
5466
+          context._leave(null, context);
5467
+        }
5468
+      } else {
5469
+        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {
5470
+          this._leave(null, this);
5471
+
5472
+          return;
5473
+        }
5474
+
5475
+        this._enter(null, this);
5476
+      }
5477
+    };
5478
+
5479
+    _proto.dispose = function dispose() {
5480
+      clearTimeout(this._timeout);
5481
+      $.removeData(this.element, this.constructor.DATA_KEY);
5482
+      $(this.element).off(this.constructor.EVENT_KEY);
5483
+      $(this.element).closest('.modal').off('hide.bs.modal');
5484
+
5485
+      if (this.tip) {
5486
+        $(this.tip).remove();
5487
+      }
5488
+
5489
+      this._isEnabled = null;
5490
+      this._timeout = null;
5491
+      this._hoverState = null;
5492
+      this._activeTrigger = null;
5493
+
5494
+      if (this._popper !== null) {
5495
+        this._popper.destroy();
5496
+      }
5497
+
5498
+      this._popper = null;
5499
+      this.element = null;
5500
+      this.config = null;
5501
+      this.tip = null;
5502
+    };
5503
+
5504
+    _proto.show = function show() {
5505
+      var _this = this;
5506
+
5507
+      if ($(this.element).css('display') === 'none') {
5508
+        throw new Error('Please use show on visible elements');
5509
+      }
5510
+
5511
+      var showEvent = $.Event(this.constructor.Event.SHOW);
5512
+
5513
+      if (this.isWithContent() && this._isEnabled) {
5514
+        $(this.element).trigger(showEvent);
5515
+        var shadowRoot = Util.findShadowRoot(this.element);
5516
+        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
5517
+
5518
+        if (showEvent.isDefaultPrevented() || !isInTheDom) {
5519
+          return;
5520
+        }
5521
+
5522
+        var tip = this.getTipElement();
5523
+        var tipId = Util.getUID(this.constructor.NAME);
5524
+        tip.setAttribute('id', tipId);
5525
+        this.element.setAttribute('aria-describedby', tipId);
5526
+        this.setContent();
5527
+
5528
+        if (this.config.animation) {
5529
+          $(tip).addClass(ClassName$6.FADE);
5530
+        }
5531
+
5532
+        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
5533
+
5534
+        var attachment = this._getAttachment(placement);
5535
+
5536
+        this.addAttachmentClass(attachment);
5537
+
5538
+        var container = this._getContainer();
5539
+
5540
+        $(tip).data(this.constructor.DATA_KEY, this);
5541
+
5542
+        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {
5543
+          $(tip).appendTo(container);
5544
+        }
5545
+
5546
+        $(this.element).trigger(this.constructor.Event.INSERTED);
5547
+        this._popper = new Popper(this.element, tip, {
5548
+          placement: attachment,
5549
+          modifiers: {
5550
+            offset: this._getOffset(),
5551
+            flip: {
5552
+              behavior: this.config.fallbackPlacement
5553
+            },
5554
+            arrow: {
5555
+              element: Selector$6.ARROW
5556
+            },
5557
+            preventOverflow: {
5558
+              boundariesElement: this.config.boundary
5559
+            }
5560
+          },
5561
+          onCreate: function onCreate(data) {
5562
+            if (data.originalPlacement !== data.placement) {
5563
+              _this._handlePopperPlacementChange(data);
5564
+            }
5565
+          },
5566
+          onUpdate: function onUpdate(data) {
5567
+            return _this._handlePopperPlacementChange(data);
5568
+          }
5569
+        });
5570
+        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra
5571
+        // empty mouseover listeners to the body's immediate children;
5572
+        // only needed because of broken event delegation on iOS
5573
+        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5574
+
5575
+        if ('ontouchstart' in document.documentElement) {
5576
+          $(document.body).children().on('mouseover', null, $.noop);
5577
+        }
5578
+
5579
+        var complete = function complete() {
5580
+          if (_this.config.animation) {
5581
+            _this._fixTransition();
5582
+          }
5583
+
5584
+          var prevHoverState = _this._hoverState;
5585
+          _this._hoverState = null;
5586
+          $(_this.element).trigger(_this.constructor.Event.SHOWN);
5587
+
5588
+          if (prevHoverState === HoverState.OUT) {
5589
+            _this._leave(null, _this);
5590
+          }
5591
+        };
5592
+
5593
+        if ($(this.tip).hasClass(ClassName$6.FADE)) {
5594
+          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
5595
+          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5596
+        } else {
5597
+          complete();
5598
+        }
5599
+      }
5600
+    };
5601
+
5602
+    _proto.hide = function hide(callback) {
5603
+      var _this2 = this;
5604
+
5605
+      var tip = this.getTipElement();
5606
+      var hideEvent = $.Event(this.constructor.Event.HIDE);
5607
+
5608
+      var complete = function complete() {
5609
+        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
5610
+          tip.parentNode.removeChild(tip);
5611
+        }
5612
+
5613
+        _this2._cleanTipClass();
5614
+
5615
+        _this2.element.removeAttribute('aria-describedby');
5616
+
5617
+        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
5618
+
5619
+        if (_this2._popper !== null) {
5620
+          _this2._popper.destroy();
5621
+        }
5622
+
5623
+        if (callback) {
5624
+          callback();
5625
+        }
5626
+      };
5627
+
5628
+      $(this.element).trigger(hideEvent);
5629
+
5630
+      if (hideEvent.isDefaultPrevented()) {
5631
+        return;
5632
+      }
5633
+
5634
+      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra
5635
+      // empty mouseover listeners we added for iOS support
5636
+
5637
+      if ('ontouchstart' in document.documentElement) {
5638
+        $(document.body).children().off('mouseover', null, $.noop);
5639
+      }
5640
+
5641
+      this._activeTrigger[Trigger.CLICK] = false;
5642
+      this._activeTrigger[Trigger.FOCUS] = false;
5643
+      this._activeTrigger[Trigger.HOVER] = false;
5644
+
5645
+      if ($(this.tip).hasClass(ClassName$6.FADE)) {
5646
+        var transitionDuration = Util.getTransitionDurationFromElement(tip);
5647
+        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5648
+      } else {
5649
+        complete();
5650
+      }
5651
+
5652
+      this._hoverState = '';
5653
+    };
5654
+
5655
+    _proto.update = function update() {
5656
+      if (this._popper !== null) {
5657
+        this._popper.scheduleUpdate();
5658
+      }
5659
+    } // Protected
5660
+    ;
5661
+
5662
+    _proto.isWithContent = function isWithContent() {
5663
+      return Boolean(this.getTitle());
5664
+    };
5665
+
5666
+    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
5667
+      $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
5668
+    };
5669
+
5670
+    _proto.getTipElement = function getTipElement() {
5671
+      this.tip = this.tip || $(this.config.template)[0];
5672
+      return this.tip;
5673
+    };
5674
+
5675
+    _proto.setContent = function setContent() {
5676
+      var tip = this.getTipElement();
5677
+      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());
5678
+      $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW);
5679
+    };
5680
+
5681
+    _proto.setElementContent = function setElementContent($element, content) {
5682
+      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
5683
+        // Content is a DOM node or a jQuery
5684
+        if (this.config.html) {
5685
+          if (!$(content).parent().is($element)) {
5686
+            $element.empty().append(content);
5687
+          }
5688
+        } else {
5689
+          $element.text($(content).text());
5690
+        }
5691
+
5692
+        return;
5693
+      }
5694
+
5695
+      if (this.config.html) {
5696
+        if (this.config.sanitize) {
5697
+          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
5698
+        }
5699
+
5700
+        $element.html(content);
5701
+      } else {
5702
+        $element.text(content);
5703
+      }
5704
+    };
5705
+
5706
+    _proto.getTitle = function getTitle() {
5707
+      var title = this.element.getAttribute('data-original-title');
5708
+
5709
+      if (!title) {
5710
+        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
5711
+      }
5712
+
5713
+      return title;
5714
+    } // Private
5715
+    ;
5716
+
5717
+    _proto._getOffset = function _getOffset() {
5718
+      var _this3 = this;
5719
+
5720
+      var offset = {};
5721
+
5722
+      if (typeof this.config.offset === 'function') {
5723
+        offset.fn = function (data) {
5724
+          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
5725
+          return data;
5726
+        };
5727
+      } else {
5728
+        offset.offset = this.config.offset;
5729
+      }
5730
+
5731
+      return offset;
5732
+    };
5733
+
5734
+    _proto._getContainer = function _getContainer() {
5735
+      if (this.config.container === false) {
5736
+        return document.body;
5737
+      }
5738
+
5739
+      if (Util.isElement(this.config.container)) {
5740
+        return $(this.config.container);
5741
+      }
5742
+
5743
+      return $(document).find(this.config.container);
5744
+    };
5745
+
5746
+    _proto._getAttachment = function _getAttachment(placement) {
5747
+      return AttachmentMap$1[placement.toUpperCase()];
5748
+    };
5749
+
5750
+    _proto._setListeners = function _setListeners() {
5751
+      var _this4 = this;
5752
+
5753
+      var triggers = this.config.trigger.split(' ');
5754
+      triggers.forEach(function (trigger) {
5755
+        if (trigger === 'click') {
5756
+          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
5757
+            return _this4.toggle(event);
5758
+          });
5759
+        } else if (trigger !== Trigger.MANUAL) {
5760
+          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
5761
+          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
5762
+          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
5763
+            return _this4._enter(event);
5764
+          }).on(eventOut, _this4.config.selector, function (event) {
5765
+            return _this4._leave(event);
5766
+          });
5767
+        }
5768
+      });
5769
+      $(this.element).closest('.modal').on('hide.bs.modal', function () {
5770
+        if (_this4.element) {
5771
+          _this4.hide();
5772
+        }
5773
+      });
5774
+
5775
+      if (this.config.selector) {
5776
+        this.config = _objectSpread({}, this.config, {
5777
+          trigger: 'manual',
5778
+          selector: ''
5779
+        });
5780
+      } else {
5781
+        this._fixTitle();
5782
+      }
5783
+    };
5784
+
5785
+    _proto._fixTitle = function _fixTitle() {
5786
+      var titleType = typeof this.element.getAttribute('data-original-title');
5787
+
5788
+      if (this.element.getAttribute('title') || titleType !== 'string') {
5789
+        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
5790
+        this.element.setAttribute('title', '');
5791
+      }
5792
+    };
5793
+
5794
+    _proto._enter = function _enter(event, context) {
5795
+      var dataKey = this.constructor.DATA_KEY;
5796
+      context = context || $(event.currentTarget).data(dataKey);
5797
+
5798
+      if (!context) {
5799
+        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5800
+        $(event.currentTarget).data(dataKey, context);
5801
+      }
5802
+
5803
+      if (event) {
5804
+        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
5805
+      }
5806
+
5807
+      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {
5808
+        context._hoverState = HoverState.SHOW;
5809
+        return;
5810
+      }
5811
+
5812
+      clearTimeout(context._timeout);
5813
+      context._hoverState = HoverState.SHOW;
5814
+
5815
+      if (!context.config.delay || !context.config.delay.show) {
5816
+        context.show();
5817
+        return;
5818
+      }
5819
+
5820
+      context._timeout = setTimeout(function () {
5821
+        if (context._hoverState === HoverState.SHOW) {
5822
+          context.show();
5823
+        }
5824
+      }, context.config.delay.show);
5825
+    };
5826
+
5827
+    _proto._leave = function _leave(event, context) {
5828
+      var dataKey = this.constructor.DATA_KEY;
5829
+      context = context || $(event.currentTarget).data(dataKey);
5830
+
5831
+      if (!context) {
5832
+        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5833
+        $(event.currentTarget).data(dataKey, context);
5834
+      }
5835
+
5836
+      if (event) {
5837
+        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
5838
+      }
5839
+
5840
+      if (context._isWithActiveTrigger()) {
5841
+        return;
5842
+      }
5843
+
5844
+      clearTimeout(context._timeout);
5845
+      context._hoverState = HoverState.OUT;
5846
+
5847
+      if (!context.config.delay || !context.config.delay.hide) {
5848
+        context.hide();
5849
+        return;
5850
+      }
5851
+
5852
+      context._timeout = setTimeout(function () {
5853
+        if (context._hoverState === HoverState.OUT) {
5854
+          context.hide();
5855
+        }
5856
+      }, context.config.delay.hide);
5857
+    };
5858
+
5859
+    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
5860
+      for (var trigger in this._activeTrigger) {
5861
+        if (this._activeTrigger[trigger]) {
5862
+          return true;
5863
+        }
5864
+      }
5865
+
5866
+      return false;
5867
+    };
5868
+
5869
+    _proto._getConfig = function _getConfig(config) {
5870
+      var dataAttributes = $(this.element).data();
5871
+      Object.keys(dataAttributes).forEach(function (dataAttr) {
5872
+        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
5873
+          delete dataAttributes[dataAttr];
5874
+        }
5875
+      });
5876
+      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
5877
+
5878
+      if (typeof config.delay === 'number') {
5879
+        config.delay = {
5880
+          show: config.delay,
5881
+          hide: config.delay
5882
+        };
5883
+      }
5884
+
5885
+      if (typeof config.title === 'number') {
5886
+        config.title = config.title.toString();
5887
+      }
5888
+
5889
+      if (typeof config.content === 'number') {
5890
+        config.content = config.content.toString();
5891
+      }
5892
+
5893
+      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
5894
+
5895
+      if (config.sanitize) {
5896
+        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
5897
+      }
5898
+
5899
+      return config;
5900
+    };
5901
+
5902
+    _proto._getDelegateConfig = function _getDelegateConfig() {
5903
+      var config = {};
5904
+
5905
+      if (this.config) {
5906
+        for (var key in this.config) {
5907
+          if (this.constructor.Default[key] !== this.config[key]) {
5908
+            config[key] = this.config[key];
5909
+          }
5910
+        }
5911
+      }
5912
+
5913
+      return config;
5914
+    };
5915
+
5916
+    _proto._cleanTipClass = function _cleanTipClass() {
5917
+      var $tip = $(this.getTipElement());
5918
+      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
5919
+
5920
+      if (tabClass !== null && tabClass.length) {
5921
+        $tip.removeClass(tabClass.join(''));
5922
+      }
5923
+    };
5924
+
5925
+    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
5926
+      var popperInstance = popperData.instance;
5927
+      this.tip = popperInstance.popper;
5928
+
5929
+      this._cleanTipClass();
5930
+
5931
+      this.addAttachmentClass(this._getAttachment(popperData.placement));
5932
+    };
5933
+
5934
+    _proto._fixTransition = function _fixTransition() {
5935
+      var tip = this.getTipElement();
5936
+      var initConfigAnimation = this.config.animation;
5937
+
5938
+      if (tip.getAttribute('x-placement') !== null) {
5939
+        return;
5940
+      }
5941
+
5942
+      $(tip).removeClass(ClassName$6.FADE);
5943
+      this.config.animation = false;
5944
+      this.hide();
5945
+      this.show();
5946
+      this.config.animation = initConfigAnimation;
5947
+    } // Static
5948
+    ;
5949
+
5950
+    Tooltip._jQueryInterface = function _jQueryInterface(config) {
5951
+      return this.each(function () {
5952
+        var data = $(this).data(DATA_KEY$6);
5953
+
5954
+        var _config = typeof config === 'object' && config;
5955
+
5956
+        if (!data && /dispose|hide/.test(config)) {
5957
+          return;
5958
+        }
5959
+
5960
+        if (!data) {
5961
+          data = new Tooltip(this, _config);
5962
+          $(this).data(DATA_KEY$6, data);
5963
+        }
5964
+
5965
+        if (typeof config === 'string') {
5966
+          if (typeof data[config] === 'undefined') {
5967
+            throw new TypeError("No method named \"" + config + "\"");
5968
+          }
5969
+
5970
+          data[config]();
5971
+        }
5972
+      });
5973
+    };
5974
+
5975
+    _createClass(Tooltip, null, [{
5976
+      key: "VERSION",
5977
+      get: function get() {
5978
+        return VERSION$6;
5979
+      }
5980
+    }, {
5981
+      key: "Default",
5982
+      get: function get() {
5983
+        return Default$4;
5984
+      }
5985
+    }, {
5986
+      key: "NAME",
5987
+      get: function get() {
5988
+        return NAME$6;
5989
+      }
5990
+    }, {
5991
+      key: "DATA_KEY",
5992
+      get: function get() {
5993
+        return DATA_KEY$6;
5994
+      }
5995
+    }, {
5996
+      key: "Event",
5997
+      get: function get() {
5998
+        return Event$6;
5999
+      }
6000
+    }, {
6001
+      key: "EVENT_KEY",
6002
+      get: function get() {
6003
+        return EVENT_KEY$6;
6004
+      }
6005
+    }, {
6006
+      key: "DefaultType",
6007
+      get: function get() {
6008
+        return DefaultType$4;
6009
+      }
6010
+    }]);
6011
+
6012
+    return Tooltip;
6013
+  }();
6014
+  /**
6015
+   * ------------------------------------------------------------------------
6016
+   * jQuery
6017
+   * ------------------------------------------------------------------------
6018
+   */
6019
+
6020
+
6021
+  $.fn[NAME$6] = Tooltip._jQueryInterface;
6022
+  $.fn[NAME$6].Constructor = Tooltip;
6023
+
6024
+  $.fn[NAME$6].noConflict = function () {
6025
+    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;
6026
+    return Tooltip._jQueryInterface;
6027
+  };
6028
+
6029
+  /**
6030
+   * ------------------------------------------------------------------------
6031
+   * Constants
6032
+   * ------------------------------------------------------------------------
6033
+   */
6034
+
6035
+  var NAME$7 = 'popover';
6036
+  var VERSION$7 = '4.3.1';
6037
+  var DATA_KEY$7 = 'bs.popover';
6038
+  var EVENT_KEY$7 = "." + DATA_KEY$7;
6039
+  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
6040
+  var CLASS_PREFIX$1 = 'bs-popover';
6041
+  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
6042
+
6043
+  var Default$5 = _objectSpread({}, Tooltip.Default, {
6044
+    placement: 'right',
6045
+    trigger: 'click',
6046
+    content: '',
6047
+    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
6048
+  });
6049
+
6050
+  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {
6051
+    content: '(string|element|function)'
6052
+  });
6053
+
6054
+  var ClassName$7 = {
6055
+    FADE: 'fade',
6056
+    SHOW: 'show'
6057
+  };
6058
+  var Selector$7 = {
6059
+    TITLE: '.popover-header',
6060
+    CONTENT: '.popover-body'
6061
+  };
6062
+  var Event$7 = {
6063
+    HIDE: "hide" + EVENT_KEY$7,
6064
+    HIDDEN: "hidden" + EVENT_KEY$7,
6065
+    SHOW: "show" + EVENT_KEY$7,
6066
+    SHOWN: "shown" + EVENT_KEY$7,
6067
+    INSERTED: "inserted" + EVENT_KEY$7,
6068
+    CLICK: "click" + EVENT_KEY$7,
6069
+    FOCUSIN: "focusin" + EVENT_KEY$7,
6070
+    FOCUSOUT: "focusout" + EVENT_KEY$7,
6071
+    MOUSEENTER: "mouseenter" + EVENT_KEY$7,
6072
+    MOUSELEAVE: "mouseleave" + EVENT_KEY$7
6073
+    /**
6074
+     * ------------------------------------------------------------------------
6075
+     * Class Definition
6076
+     * ------------------------------------------------------------------------
6077
+     */
6078
+
6079
+  };
6080
+
6081
+  var Popover =
6082
+  /*#__PURE__*/
6083
+  function (_Tooltip) {
6084
+    _inheritsLoose(Popover, _Tooltip);
6085
+
6086
+    function Popover() {
6087
+      return _Tooltip.apply(this, arguments) || this;
6088
+    }
6089
+
6090
+    var _proto = Popover.prototype;
6091
+
6092
+    // Overrides
6093
+    _proto.isWithContent = function isWithContent() {
6094
+      return this.getTitle() || this._getContent();
6095
+    };
6096
+
6097
+    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
6098
+      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
6099
+    };
6100
+
6101
+    _proto.getTipElement = function getTipElement() {
6102
+      this.tip = this.tip || $(this.config.template)[0];
6103
+      return this.tip;
6104
+    };
6105
+
6106
+    _proto.setContent = function setContent() {
6107
+      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
6108
+
6109
+      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());
6110
+
6111
+      var content = this._getContent();
6112
+
6113
+      if (typeof content === 'function') {
6114
+        content = content.call(this.element);
6115
+      }
6116
+
6117
+      this.setElementContent($tip.find(Selector$7.CONTENT), content);
6118
+      $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
6119
+    } // Private
6120
+    ;
6121
+
6122
+    _proto._getContent = function _getContent() {
6123
+      return this.element.getAttribute('data-content') || this.config.content;
6124
+    };
6125
+
6126
+    _proto._cleanTipClass = function _cleanTipClass() {
6127
+      var $tip = $(this.getTipElement());
6128
+      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
6129
+
6130
+      if (tabClass !== null && tabClass.length > 0) {
6131
+        $tip.removeClass(tabClass.join(''));
6132
+      }
6133
+    } // Static
6134
+    ;
6135
+
6136
+    Popover._jQueryInterface = function _jQueryInterface(config) {
6137
+      return this.each(function () {
6138
+        var data = $(this).data(DATA_KEY$7);
6139
+
6140
+        var _config = typeof config === 'object' ? config : null;
6141
+
6142
+        if (!data && /dispose|hide/.test(config)) {
6143
+          return;
6144
+        }
6145
+
6146
+        if (!data) {
6147
+          data = new Popover(this, _config);
6148
+          $(this).data(DATA_KEY$7, data);
6149
+        }
6150
+
6151
+        if (typeof config === 'string') {
6152
+          if (typeof data[config] === 'undefined') {
6153
+            throw new TypeError("No method named \"" + config + "\"");
6154
+          }
6155
+
6156
+          data[config]();
6157
+        }
6158
+      });
6159
+    };
6160
+
6161
+    _createClass(Popover, null, [{
6162
+      key: "VERSION",
6163
+      // Getters
6164
+      get: function get() {
6165
+        return VERSION$7;
6166
+      }
6167
+    }, {
6168
+      key: "Default",
6169
+      get: function get() {
6170
+        return Default$5;
6171
+      }
6172
+    }, {
6173
+      key: "NAME",
6174
+      get: function get() {
6175
+        return NAME$7;
6176
+      }
6177
+    }, {
6178
+      key: "DATA_KEY",
6179
+      get: function get() {
6180
+        return DATA_KEY$7;
6181
+      }
6182
+    }, {
6183
+      key: "Event",
6184
+      get: function get() {
6185
+        return Event$7;
6186
+      }
6187
+    }, {
6188
+      key: "EVENT_KEY",
6189
+      get: function get() {
6190
+        return EVENT_KEY$7;
6191
+      }
6192
+    }, {
6193
+      key: "DefaultType",
6194
+      get: function get() {
6195
+        return DefaultType$5;
6196
+      }
6197
+    }]);
6198
+
6199
+    return Popover;
6200
+  }(Tooltip);
6201
+  /**
6202
+   * ------------------------------------------------------------------------
6203
+   * jQuery
6204
+   * ------------------------------------------------------------------------
6205
+   */
6206
+
6207
+
6208
+  $.fn[NAME$7] = Popover._jQueryInterface;
6209
+  $.fn[NAME$7].Constructor = Popover;
6210
+
6211
+  $.fn[NAME$7].noConflict = function () {
6212
+    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;
6213
+    return Popover._jQueryInterface;
6214
+  };
6215
+
6216
+  /**
6217
+   * ------------------------------------------------------------------------
6218
+   * Constants
6219
+   * ------------------------------------------------------------------------
6220
+   */
6221
+
6222
+  var NAME$8 = 'scrollspy';
6223
+  var VERSION$8 = '4.3.1';
6224
+  var DATA_KEY$8 = 'bs.scrollspy';
6225
+  var EVENT_KEY$8 = "." + DATA_KEY$8;
6226
+  var DATA_API_KEY$6 = '.data-api';
6227
+  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];
6228
+  var Default$6 = {
6229
+    offset: 10,
6230
+    method: 'auto',
6231
+    target: ''
6232
+  };
6233
+  var DefaultType$6 = {
6234
+    offset: 'number',
6235
+    method: 'string',
6236
+    target: '(string|element)'
6237
+  };
6238
+  var Event$8 = {
6239
+    ACTIVATE: "activate" + EVENT_KEY$8,
6240
+    SCROLL: "scroll" + EVENT_KEY$8,
6241
+    LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6
6242
+  };
6243
+  var ClassName$8 = {
6244
+    DROPDOWN_ITEM: 'dropdown-item',
6245
+    DROPDOWN_MENU: 'dropdown-menu',
6246
+    ACTIVE: 'active'
6247
+  };
6248
+  var Selector$8 = {
6249
+    DATA_SPY: '[data-spy="scroll"]',
6250
+    ACTIVE: '.active',
6251
+    NAV_LIST_GROUP: '.nav, .list-group',
6252
+    NAV_LINKS: '.nav-link',
6253
+    NAV_ITEMS: '.nav-item',
6254
+    LIST_ITEMS: '.list-group-item',
6255
+    DROPDOWN: '.dropdown',
6256
+    DROPDOWN_ITEMS: '.dropdown-item',
6257
+    DROPDOWN_TOGGLE: '.dropdown-toggle'
6258
+  };
6259
+  var OffsetMethod = {
6260
+    OFFSET: 'offset',
6261
+    POSITION: 'position'
6262
+    /**
6263
+     * ------------------------------------------------------------------------
6264
+     * Class Definition
6265
+     * ------------------------------------------------------------------------
6266
+     */
6267
+
6268
+  };
6269
+
6270
+  var ScrollSpy =
6271
+  /*#__PURE__*/
6272
+  function () {
6273
+    function ScrollSpy(element, config) {
6274
+      var _this = this;
6275
+
6276
+      this._element = element;
6277
+      this._scrollElement = element.tagName === 'BODY' ? window : element;
6278
+      this._config = this._getConfig(config);
6279
+      this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS);
6280
+      this._offsets = [];
6281
+      this._targets = [];
6282
+      this._activeTarget = null;
6283
+      this._scrollHeight = 0;
6284
+      $(this._scrollElement).on(Event$8.SCROLL, function (event) {
6285
+        return _this._process(event);
6286
+      });
6287
+      this.refresh();
6288
+
6289
+      this._process();
6290
+    } // Getters
6291
+
6292
+
6293
+    var _proto = ScrollSpy.prototype;
6294
+
6295
+    // Public
6296
+    _proto.refresh = function refresh() {
6297
+      var _this2 = this;
6298
+
6299
+      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
6300
+      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
6301
+      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
6302
+      this._offsets = [];
6303
+      this._targets = [];
6304
+      this._scrollHeight = this._getScrollHeight();
6305
+      var targets = [].slice.call(document.querySelectorAll(this._selector));
6306
+      targets.map(function (element) {
6307
+        var target;
6308
+        var targetSelector = Util.getSelectorFromElement(element);
6309
+
6310
+        if (targetSelector) {
6311
+          target = document.querySelector(targetSelector);
6312
+        }
6313
+
6314
+        if (target) {
6315
+          var targetBCR = target.getBoundingClientRect();
6316
+
6317
+          if (targetBCR.width || targetBCR.height) {
6318
+            // TODO (fat): remove sketch reliance on jQuery position/offset
6319
+            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
6320
+          }
6321
+        }
6322
+
6323
+        return null;
6324
+      }).filter(function (item) {
6325
+        return item;
6326
+      }).sort(function (a, b) {
6327
+        return a[0] - b[0];
6328
+      }).forEach(function (item) {
6329
+        _this2._offsets.push(item[0]);
6330
+
6331
+        _this2._targets.push(item[1]);
6332
+      });
6333
+    };
6334
+
6335
+    _proto.dispose = function dispose() {
6336
+      $.removeData(this._element, DATA_KEY$8);
6337
+      $(this._scrollElement).off(EVENT_KEY$8);
6338
+      this._element = null;
6339
+      this._scrollElement = null;
6340
+      this._config = null;
6341
+      this._selector = null;
6342
+      this._offsets = null;
6343
+      this._targets = null;
6344
+      this._activeTarget = null;
6345
+      this._scrollHeight = null;
6346
+    } // Private
6347
+    ;
6348
+
6349
+    _proto._getConfig = function _getConfig(config) {
6350
+      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
6351
+
6352
+      if (typeof config.target !== 'string') {
6353
+        var id = $(config.target).attr('id');
6354
+
6355
+        if (!id) {
6356
+          id = Util.getUID(NAME$8);
6357
+          $(config.target).attr('id', id);
6358
+        }
6359
+
6360
+        config.target = "#" + id;
6361
+      }
6362
+
6363
+      Util.typeCheckConfig(NAME$8, config, DefaultType$6);
6364
+      return config;
6365
+    };
6366
+
6367
+    _proto._getScrollTop = function _getScrollTop() {
6368
+      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
6369
+    };
6370
+
6371
+    _proto._getScrollHeight = function _getScrollHeight() {
6372
+      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
6373
+    };
6374
+
6375
+    _proto._getOffsetHeight = function _getOffsetHeight() {
6376
+      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
6377
+    };
6378
+
6379
+    _proto._process = function _process() {
6380
+      var scrollTop = this._getScrollTop() + this._config.offset;
6381
+
6382
+      var scrollHeight = this._getScrollHeight();
6383
+
6384
+      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
6385
+
6386
+      if (this._scrollHeight !== scrollHeight) {
6387
+        this.refresh();
6388
+      }
6389
+
6390
+      if (scrollTop >= maxScroll) {
6391
+        var target = this._targets[this._targets.length - 1];
6392
+
6393
+        if (this._activeTarget !== target) {
6394
+          this._activate(target);
6395
+        }
6396
+
6397
+        return;
6398
+      }
6399
+
6400
+      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
6401
+        this._activeTarget = null;
6402
+
6403
+        this._clear();
6404
+
6405
+        return;
6406
+      }
6407
+
6408
+      var offsetLength = this._offsets.length;
6409
+
6410
+      for (var i = offsetLength; i--;) {
6411
+        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
6412
+
6413
+        if (isActiveTarget) {
6414
+          this._activate(this._targets[i]);
6415
+        }
6416
+      }
6417
+    };
6418
+
6419
+    _proto._activate = function _activate(target) {
6420
+      this._activeTarget = target;
6421
+
6422
+      this._clear();
6423
+
6424
+      var queries = this._selector.split(',').map(function (selector) {
6425
+        return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
6426
+      });
6427
+
6428
+      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
6429
+
6430
+      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {
6431
+        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);
6432
+        $link.addClass(ClassName$8.ACTIVE);
6433
+      } else {
6434
+        // Set triggered link as active
6435
+        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active
6436
+        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
6437
+
6438
+        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + ", " + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item
6439
+
6440
+        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);
6441
+      }
6442
+
6443
+      $(this._scrollElement).trigger(Event$8.ACTIVATE, {
6444
+        relatedTarget: target
6445
+      });
6446
+    };
6447
+
6448
+    _proto._clear = function _clear() {
6449
+      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
6450
+        return node.classList.contains(ClassName$8.ACTIVE);
6451
+      }).forEach(function (node) {
6452
+        return node.classList.remove(ClassName$8.ACTIVE);
6453
+      });
6454
+    } // Static
6455
+    ;
6456
+
6457
+    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
6458
+      return this.each(function () {
6459
+        var data = $(this).data(DATA_KEY$8);
6460
+
6461
+        var _config = typeof config === 'object' && config;
6462
+
6463
+        if (!data) {
6464
+          data = new ScrollSpy(this, _config);
6465
+          $(this).data(DATA_KEY$8, data);
6466
+        }
6467
+
6468
+        if (typeof config === 'string') {
6469
+          if (typeof data[config] === 'undefined') {
6470
+            throw new TypeError("No method named \"" + config + "\"");
6471
+          }
6472
+
6473
+          data[config]();
6474
+        }
6475
+      });
6476
+    };
6477
+
6478
+    _createClass(ScrollSpy, null, [{
6479
+      key: "VERSION",
6480
+      get: function get() {
6481
+        return VERSION$8;
6482
+      }
6483
+    }, {
6484
+      key: "Default",
6485
+      get: function get() {
6486
+        return Default$6;
6487
+      }
6488
+    }]);
6489
+
6490
+    return ScrollSpy;
6491
+  }();
6492
+  /**
6493
+   * ------------------------------------------------------------------------
6494
+   * Data Api implementation
6495
+   * ------------------------------------------------------------------------
6496
+   */
6497
+
6498
+
6499
+  $(window).on(Event$8.LOAD_DATA_API, function () {
6500
+    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));
6501
+    var scrollSpysLength = scrollSpys.length;
6502
+
6503
+    for (var i = scrollSpysLength; i--;) {
6504
+      var $spy = $(scrollSpys[i]);
6505
+
6506
+      ScrollSpy._jQueryInterface.call($spy, $spy.data());
6507
+    }
6508
+  });
6509
+  /**
6510
+   * ------------------------------------------------------------------------
6511
+   * jQuery
6512
+   * ------------------------------------------------------------------------
6513
+   */
6514
+
6515
+  $.fn[NAME$8] = ScrollSpy._jQueryInterface;
6516
+  $.fn[NAME$8].Constructor = ScrollSpy;
6517
+
6518
+  $.fn[NAME$8].noConflict = function () {
6519
+    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;
6520
+    return ScrollSpy._jQueryInterface;
6521
+  };
6522
+
6523
+  /**
6524
+   * ------------------------------------------------------------------------
6525
+   * Constants
6526
+   * ------------------------------------------------------------------------
6527
+   */
6528
+
6529
+  var NAME$9 = 'tab';
6530
+  var VERSION$9 = '4.3.1';
6531
+  var DATA_KEY$9 = 'bs.tab';
6532
+  var EVENT_KEY$9 = "." + DATA_KEY$9;
6533
+  var DATA_API_KEY$7 = '.data-api';
6534
+  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
6535
+  var Event$9 = {
6536
+    HIDE: "hide" + EVENT_KEY$9,
6537
+    HIDDEN: "hidden" + EVENT_KEY$9,
6538
+    SHOW: "show" + EVENT_KEY$9,
6539
+    SHOWN: "shown" + EVENT_KEY$9,
6540
+    CLICK_DATA_API: "click" + EVENT_KEY$9 + DATA_API_KEY$7
6541
+  };
6542
+  var ClassName$9 = {
6543
+    DROPDOWN_MENU: 'dropdown-menu',
6544
+    ACTIVE: 'active',
6545
+    DISABLED: 'disabled',
6546
+    FADE: 'fade',
6547
+    SHOW: 'show'
6548
+  };
6549
+  var Selector$9 = {
6550
+    DROPDOWN: '.dropdown',
6551
+    NAV_LIST_GROUP: '.nav, .list-group',
6552
+    ACTIVE: '.active',
6553
+    ACTIVE_UL: '> li > .active',
6554
+    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
6555
+    DROPDOWN_TOGGLE: '.dropdown-toggle',
6556
+    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
6557
+    /**
6558
+     * ------------------------------------------------------------------------
6559
+     * Class Definition
6560
+     * ------------------------------------------------------------------------
6561
+     */
6562
+
6563
+  };
6564
+
6565
+  var Tab =
6566
+  /*#__PURE__*/
6567
+  function () {
6568
+    function Tab(element) {
6569
+      this._element = element;
6570
+    } // Getters
6571
+
6572
+
6573
+    var _proto = Tab.prototype;
6574
+
6575
+    // Public
6576
+    _proto.show = function show() {
6577
+      var _this = this;
6578
+
6579
+      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {
6580
+        return;
6581
+      }
6582
+
6583
+      var target;
6584
+      var previous;
6585
+      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];
6586
+      var selector = Util.getSelectorFromElement(this._element);
6587
+
6588
+      if (listElement) {
6589
+        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;
6590
+        previous = $.makeArray($(listElement).find(itemSelector));
6591
+        previous = previous[previous.length - 1];
6592
+      }
6593
+
6594
+      var hideEvent = $.Event(Event$9.HIDE, {
6595
+        relatedTarget: this._element
6596
+      });
6597
+      var showEvent = $.Event(Event$9.SHOW, {
6598
+        relatedTarget: previous
6599
+      });
6600
+
6601
+      if (previous) {
6602
+        $(previous).trigger(hideEvent);
6603
+      }
6604
+
6605
+      $(this._element).trigger(showEvent);
6606
+
6607
+      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
6608
+        return;
6609
+      }
6610
+
6611
+      if (selector) {
6612
+        target = document.querySelector(selector);
6613
+      }
6614
+
6615
+      this._activate(this._element, listElement);
6616
+
6617
+      var complete = function complete() {
6618
+        var hiddenEvent = $.Event(Event$9.HIDDEN, {
6619
+          relatedTarget: _this._element
6620
+        });
6621
+        var shownEvent = $.Event(Event$9.SHOWN, {
6622
+          relatedTarget: previous
6623
+        });
6624
+        $(previous).trigger(hiddenEvent);
6625
+        $(_this._element).trigger(shownEvent);
6626
+      };
6627
+
6628
+      if (target) {
6629
+        this._activate(target, target.parentNode, complete);
6630
+      } else {
6631
+        complete();
6632
+      }
6633
+    };
6634
+
6635
+    _proto.dispose = function dispose() {
6636
+      $.removeData(this._element, DATA_KEY$9);
6637
+      this._element = null;
6638
+    } // Private
6639
+    ;
6640
+
6641
+    _proto._activate = function _activate(element, container, callback) {
6642
+      var _this2 = this;
6643
+
6644
+      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);
6645
+      var active = activeElements[0];
6646
+      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);
6647
+
6648
+      var complete = function complete() {
6649
+        return _this2._transitionComplete(element, active, callback);
6650
+      };
6651
+
6652
+      if (active && isTransitioning) {
6653
+        var transitionDuration = Util.getTransitionDurationFromElement(active);
6654
+        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6655
+      } else {
6656
+        complete();
6657
+      }
6658
+    };
6659
+
6660
+    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
6661
+      if (active) {
6662
+        $(active).removeClass(ClassName$9.ACTIVE);
6663
+        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];
6664
+
6665
+        if (dropdownChild) {
6666
+          $(dropdownChild).removeClass(ClassName$9.ACTIVE);
6667
+        }
6668
+
6669
+        if (active.getAttribute('role') === 'tab') {
6670
+          active.setAttribute('aria-selected', false);
6671
+        }
6672
+      }
6673
+
6674
+      $(element).addClass(ClassName$9.ACTIVE);
6675
+
6676
+      if (element.getAttribute('role') === 'tab') {
6677
+        element.setAttribute('aria-selected', true);
6678
+      }
6679
+
6680
+      Util.reflow(element);
6681
+
6682
+      if (element.classList.contains(ClassName$9.FADE)) {
6683
+        element.classList.add(ClassName$9.SHOW);
6684
+      }
6685
+
6686
+      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
6687
+        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
6688
+
6689
+        if (dropdownElement) {
6690
+          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));
6691
+          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);
6692
+        }
6693
+
6694
+        element.setAttribute('aria-expanded', true);
6695
+      }
6696
+
6697
+      if (callback) {
6698
+        callback();
6699
+      }
6700
+    } // Static
6701
+    ;
6702
+
6703
+    Tab._jQueryInterface = function _jQueryInterface(config) {
6704
+      return this.each(function () {
6705
+        var $this = $(this);
6706
+        var data = $this.data(DATA_KEY$9);
6707
+
6708
+        if (!data) {
6709
+          data = new Tab(this);
6710
+          $this.data(DATA_KEY$9, data);
6711
+        }
6712
+
6713
+        if (typeof config === 'string') {
6714
+          if (typeof data[config] === 'undefined') {
6715
+            throw new TypeError("No method named \"" + config + "\"");
6716
+          }
6717
+
6718
+          data[config]();
6719
+        }
6720
+      });
6721
+    };
6722
+
6723
+    _createClass(Tab, null, [{
6724
+      key: "VERSION",
6725
+      get: function get() {
6726
+        return VERSION$9;
6727
+      }
6728
+    }]);
6729
+
6730
+    return Tab;
6731
+  }();
6732
+  /**
6733
+   * ------------------------------------------------------------------------
6734
+   * Data Api implementation
6735
+   * ------------------------------------------------------------------------
6736
+   */
6737
+
6738
+
6739
+  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {
6740
+    event.preventDefault();
6741
+
6742
+    Tab._jQueryInterface.call($(this), 'show');
6743
+  });
6744
+  /**
6745
+   * ------------------------------------------------------------------------
6746
+   * jQuery
6747
+   * ------------------------------------------------------------------------
6748
+   */
6749
+
6750
+  $.fn[NAME$9] = Tab._jQueryInterface;
6751
+  $.fn[NAME$9].Constructor = Tab;
6752
+
6753
+  $.fn[NAME$9].noConflict = function () {
6754
+    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;
6755
+    return Tab._jQueryInterface;
6756
+  };
6757
+
6758
+  /**
6759
+   * ------------------------------------------------------------------------
6760
+   * Constants
6761
+   * ------------------------------------------------------------------------
6762
+   */
6763
+
6764
+  var NAME$a = 'toast';
6765
+  var VERSION$a = '4.3.1';
6766
+  var DATA_KEY$a = 'bs.toast';
6767
+  var EVENT_KEY$a = "." + DATA_KEY$a;
6768
+  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
6769
+  var Event$a = {
6770
+    CLICK_DISMISS: "click.dismiss" + EVENT_KEY$a,
6771
+    HIDE: "hide" + EVENT_KEY$a,
6772
+    HIDDEN: "hidden" + EVENT_KEY$a,
6773
+    SHOW: "show" + EVENT_KEY$a,
6774
+    SHOWN: "shown" + EVENT_KEY$a
6775
+  };
6776
+  var ClassName$a = {
6777
+    FADE: 'fade',
6778
+    HIDE: 'hide',
6779
+    SHOW: 'show',
6780
+    SHOWING: 'showing'
6781
+  };
6782
+  var DefaultType$7 = {
6783
+    animation: 'boolean',
6784
+    autohide: 'boolean',
6785
+    delay: 'number'
6786
+  };
6787
+  var Default$7 = {
6788
+    animation: true,
6789
+    autohide: true,
6790
+    delay: 500
6791
+  };
6792
+  var Selector$a = {
6793
+    DATA_DISMISS: '[data-dismiss="toast"]'
6794
+    /**
6795
+     * ------------------------------------------------------------------------
6796
+     * Class Definition
6797
+     * ------------------------------------------------------------------------
6798
+     */
6799
+
6800
+  };
6801
+
6802
+  var Toast =
6803
+  /*#__PURE__*/
6804
+  function () {
6805
+    function Toast(element, config) {
6806
+      this._element = element;
6807
+      this._config = this._getConfig(config);
6808
+      this._timeout = null;
6809
+
6810
+      this._setListeners();
6811
+    } // Getters
6812
+
6813
+
6814
+    var _proto = Toast.prototype;
6815
+
6816
+    // Public
6817
+    _proto.show = function show() {
6818
+      var _this = this;
6819
+
6820
+      $(this._element).trigger(Event$a.SHOW);
6821
+
6822
+      if (this._config.animation) {
6823
+        this._element.classList.add(ClassName$a.FADE);
6824
+      }
6825
+
6826
+      var complete = function complete() {
6827
+        _this._element.classList.remove(ClassName$a.SHOWING);
6828
+
6829
+        _this._element.classList.add(ClassName$a.SHOW);
6830
+
6831
+        $(_this._element).trigger(Event$a.SHOWN);
6832
+
6833
+        if (_this._config.autohide) {
6834
+          _this.hide();
6835
+        }
6836
+      };
6837
+
6838
+      this._element.classList.remove(ClassName$a.HIDE);
6839
+
6840
+      this._element.classList.add(ClassName$a.SHOWING);
6841
+
6842
+      if (this._config.animation) {
6843
+        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6844
+        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6845
+      } else {
6846
+        complete();
6847
+      }
6848
+    };
6849
+
6850
+    _proto.hide = function hide(withoutTimeout) {
6851
+      var _this2 = this;
6852
+
6853
+      if (!this._element.classList.contains(ClassName$a.SHOW)) {
6854
+        return;
6855
+      }
6856
+
6857
+      $(this._element).trigger(Event$a.HIDE);
6858
+
6859
+      if (withoutTimeout) {
6860
+        this._close();
6861
+      } else {
6862
+        this._timeout = setTimeout(function () {
6863
+          _this2._close();
6864
+        }, this._config.delay);
6865
+      }
6866
+    };
6867
+
6868
+    _proto.dispose = function dispose() {
6869
+      clearTimeout(this._timeout);
6870
+      this._timeout = null;
6871
+
6872
+      if (this._element.classList.contains(ClassName$a.SHOW)) {
6873
+        this._element.classList.remove(ClassName$a.SHOW);
6874
+      }
6875
+
6876
+      $(this._element).off(Event$a.CLICK_DISMISS);
6877
+      $.removeData(this._element, DATA_KEY$a);
6878
+      this._element = null;
6879
+      this._config = null;
6880
+    } // Private
6881
+    ;
6882
+
6883
+    _proto._getConfig = function _getConfig(config) {
6884
+      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
6885
+      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
6886
+      return config;
6887
+    };
6888
+
6889
+    _proto._setListeners = function _setListeners() {
6890
+      var _this3 = this;
6891
+
6892
+      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {
6893
+        return _this3.hide(true);
6894
+      });
6895
+    };
6896
+
6897
+    _proto._close = function _close() {
6898
+      var _this4 = this;
6899
+
6900
+      var complete = function complete() {
6901
+        _this4._element.classList.add(ClassName$a.HIDE);
6902
+
6903
+        $(_this4._element).trigger(Event$a.HIDDEN);
6904
+      };
6905
+
6906
+      this._element.classList.remove(ClassName$a.SHOW);
6907
+
6908
+      if (this._config.animation) {
6909
+        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6910
+        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6911
+      } else {
6912
+        complete();
6913
+      }
6914
+    } // Static
6915
+    ;
6916
+
6917
+    Toast._jQueryInterface = function _jQueryInterface(config) {
6918
+      return this.each(function () {
6919
+        var $element = $(this);
6920
+        var data = $element.data(DATA_KEY$a);
6921
+
6922
+        var _config = typeof config === 'object' && config;
6923
+
6924
+        if (!data) {
6925
+          data = new Toast(this, _config);
6926
+          $element.data(DATA_KEY$a, data);
6927
+        }
6928
+
6929
+        if (typeof config === 'string') {
6930
+          if (typeof data[config] === 'undefined') {
6931
+            throw new TypeError("No method named \"" + config + "\"");
6932
+          }
6933
+
6934
+          data[config](this);
6935
+        }
6936
+      });
6937
+    };
6938
+
6939
+    _createClass(Toast, null, [{
6940
+      key: "VERSION",
6941
+      get: function get() {
6942
+        return VERSION$a;
6943
+      }
6944
+    }, {
6945
+      key: "DefaultType",
6946
+      get: function get() {
6947
+        return DefaultType$7;
6948
+      }
6949
+    }, {
6950
+      key: "Default",
6951
+      get: function get() {
6952
+        return Default$7;
6953
+      }
6954
+    }]);
6955
+
6956
+    return Toast;
6957
+  }();
6958
+  /**
6959
+   * ------------------------------------------------------------------------
6960
+   * jQuery
6961
+   * ------------------------------------------------------------------------
6962
+   */
6963
+
6964
+
6965
+  $.fn[NAME$a] = Toast._jQueryInterface;
6966
+  $.fn[NAME$a].Constructor = Toast;
6967
+
6968
+  $.fn[NAME$a].noConflict = function () {
6969
+    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;
6970
+    return Toast._jQueryInterface;
6971
+  };
6972
+
6973
+  /**
6974
+   * --------------------------------------------------------------------------
6975
+   * Bootstrap (v4.3.1): index.js
6976
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6977
+   * --------------------------------------------------------------------------
6978
+   */
6979
+
6980
+  (function () {
6981
+    if (typeof $ === 'undefined') {
6982
+      throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
6983
+    }
6984
+
6985
+    var version = $.fn.jquery.split(' ')[0].split('.');
6986
+    var minMajor = 1;
6987
+    var ltMajor = 2;
6988
+    var minMinor = 9;
6989
+    var minPatch = 1;
6990
+    var maxMajor = 4;
6991
+
6992
+    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
6993
+      throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
6994
+    }
6995
+  })();
6996
+
6997
+  exports.Util = Util;
6998
+  exports.Alert = Alert;
6999
+  exports.Button = Button;
7000
+  exports.Carousel = Carousel;
7001
+  exports.Collapse = Collapse;
7002
+  exports.Dropdown = Dropdown;
7003
+  exports.Modal = Modal;
7004
+  exports.Popover = Popover;
7005
+  exports.Scrollspy = ScrollSpy;
7006
+  exports.Tab = Tab;
7007
+  exports.Toast = Toast;
7008
+  exports.Tooltip = Tooltip;
7009
+
7010
+  Object.defineProperty(exports, '__esModule', { value: true });
7011
+
7012
+}));
7013
+//# sourceMappingURL=bootstrap.bundle.js.map